pub trait Fence {
// Required methods
fn remote_fence_i(&self, hart_mask: HartMask) -> SbiRet;
fn remote_sfence_vma(
&self,
hart_mask: HartMask,
start_addr: usize,
size: usize,
) -> SbiRet;
fn remote_sfence_vma_asid(
&self,
hart_mask: HartMask,
start_addr: usize,
size: usize,
asid: usize,
) -> SbiRet;
// Provided methods
fn remote_hfence_gvma_vmid(
&self,
hart_mask: HartMask,
start_addr: usize,
size: usize,
vmid: usize,
) -> SbiRet { ... }
fn remote_hfence_gvma(
&self,
hart_mask: HartMask,
start_addr: usize,
size: usize,
) -> SbiRet { ... }
fn remote_hfence_vvma_asid(
&self,
hart_mask: HartMask,
start_addr: usize,
size: usize,
asid: usize,
) -> SbiRet { ... }
fn remote_hfence_vvma(
&self,
hart_mask: HartMask,
start_addr: usize,
size: usize,
) -> SbiRet { ... }
}Expand description
Remote Fence support extension.
The remote fence function acts as a full TLB flush if
start_addrandsizeare both 0, orsizeis equal tousize::MAX.
Required Methods§
Sourcefn remote_fence_i(&self, hart_mask: HartMask) -> SbiRet
fn remote_fence_i(&self, hart_mask: HartMask) -> SbiRet
Instructs remote harts to execute FENCE.I instruction.
§Return value
Returns SbiRet::success() when a remote fence was sent to all the targeted harts successfully.
Sourcefn remote_sfence_vma(
&self,
hart_mask: HartMask,
start_addr: usize,
size: usize,
) -> SbiRet
fn remote_sfence_vma( &self, hart_mask: HartMask, start_addr: usize, size: usize, ) -> SbiRet
Instructs the remote harts to execute one or more SFENCE.VMA instructions,
covering the range of virtual addresses between start_addr and size.
§Return value
The possible return error codes returned in SbiRet.error are shown in the table below:
| Return code | Description |
|---|---|
SbiRet::success() | A remote fence was sent to all the targeted harts successfully. |
SbiRet::invalid_address() | start_addr or size is not valid. |
Sourcefn remote_sfence_vma_asid(
&self,
hart_mask: HartMask,
start_addr: usize,
size: usize,
asid: usize,
) -> SbiRet
fn remote_sfence_vma_asid( &self, hart_mask: HartMask, start_addr: usize, size: usize, asid: usize, ) -> SbiRet
Instruct the remote harts to execute one or more SFENCE.VMA instructions,
covering the range of virtual addresses between start_addr and size.
This covers only the given address space by asid.
§Return value
The possible return error codes returned in SbiRet.error are shown in the table below:
| Return code | Description |
|---|---|
SbiRet::success() | A remote fence was sent to all the targeted harts successfully. |
SbiRet::invalid_address() | start_addr or size is not valid. |
Provided Methods§
Sourcefn remote_hfence_gvma_vmid(
&self,
hart_mask: HartMask,
start_addr: usize,
size: usize,
vmid: usize,
) -> SbiRet
fn remote_hfence_gvma_vmid( &self, hart_mask: HartMask, start_addr: usize, size: usize, vmid: usize, ) -> SbiRet
Instruct the remote harts to execute one or more HFENCE.GVMA instructions,
covering the range of guest physical addresses between start_addr and size
only for the given virtual machine by vmid.
This function call is only valid on harts implementing the RISC-V hypervisor extension.
§Return value
The possible return error codes returned in SbiRet.error are shown in the table below:
| Return code | Description |
|---|---|
SbiRet::success() | A remote fence was sent to all the targeted harts successfully. |
SbiRet::not_supported() | This function is not supported as it is not implemented or one of the target harts do not support the RISC-V hypervisor extension. |
SbiRet::invalid_address() | start_addr or size is not valid. |
Sourcefn remote_hfence_gvma(
&self,
hart_mask: HartMask,
start_addr: usize,
size: usize,
) -> SbiRet
fn remote_hfence_gvma( &self, hart_mask: HartMask, start_addr: usize, size: usize, ) -> SbiRet
Instruct the remote harts to execute one or more HFENCE.GVMA instructions,
covering the range of guest physical addresses between start_addr and size
for all the guests.
This function call is only valid on harts implementing the RISC-V hypervisor extension.
§Return value
The possible return error codes returned in SbiRet.error are shown in the table below:
| Return code | Description |
|---|---|
SbiRet::success() | A remote fence was sent to all the targeted harts successfully. |
SbiRet::not_supported() | This function is not supported as it is not implemented or one of the target harts do not support the RISC-V hypervisor extension. |
SbiRet::invalid_address() | start_addr or size is not valid. |
Sourcefn remote_hfence_vvma_asid(
&self,
hart_mask: HartMask,
start_addr: usize,
size: usize,
asid: usize,
) -> SbiRet
fn remote_hfence_vvma_asid( &self, hart_mask: HartMask, start_addr: usize, size: usize, asid: usize, ) -> SbiRet
Instruct the remote harts to execute one or more HFENCE.VVMA instructions,
covering the range of guest virtual addresses between start_addr and size for the given
address space by asid and current virtual machine (by vmid in hgatp CSR)
of calling hart.
This function call is only valid on harts implementing the RISC-V hypervisor extension.
§Return value
The possible return error codes returned in SbiRet.error are shown in the table below:
| Return code | Description |
|---|---|
SbiRet::success() | A remote fence was sent to all the targeted harts successfully. |
SbiRet::not_supported() | This function is not supported as it is not implemented or one of the target harts do not support the RISC-V hypervisor extension. |
SbiRet::invalid_address() | start_addr or size is not valid. |
Sourcefn remote_hfence_vvma(
&self,
hart_mask: HartMask,
start_addr: usize,
size: usize,
) -> SbiRet
fn remote_hfence_vvma( &self, hart_mask: HartMask, start_addr: usize, size: usize, ) -> SbiRet
Instruct the remote harts to execute one or more HFENCE.VVMA instructions,
covering the range of guest virtual addresses between start_addr and size
for current virtual machine (by vmid in hgatp CSR) of calling hart.
This function call is only valid on harts implementing the RISC-V hypervisor extension.
§Return value
The possible return error codes returned in SbiRet.error are shown in the table below:
| Return code | Description |
|---|---|
SbiRet::success() | A remote fence was sent to all the targeted harts successfully. |
SbiRet::not_supported() | This function is not supported as it is not implemented or one of the target harts do not support the RISC-V hypervisor extension. |
SbiRet::invalid_address() | start_addr or size is not valid. |