mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-12-22 13:45:20 +00:00
vm-virtio: Gain access to virtqueue before accessing them
In case of SEV-SNP guests on MSHV, any host component including VMM trying to access any guest memory region, needs to call gain_access API to acquire access to that particular memory region. This applies to all the virtqueue buffers as well which the VMM is using to use to perform DMA into the guest and in order to facilitate device emulation. While creating various virtqueues we are already using access platform hook to translate the addresses but currently we are missing the size arguments which would be required by the SevSnpAccessPlatformProxy to gain access to the memory of these queues. Signed-off-by: Jinank Jain <jinankjain@microsoft.com>
This commit is contained in:
parent
8e5c7a37b9
commit
bbd72d6453
@ -261,9 +261,21 @@ impl VirtioPciCommonConfig {
|
|||||||
// Translate address of descriptor table and vrings.
|
// Translate address of descriptor table and vrings.
|
||||||
if let Some(access_platform) = &self.access_platform {
|
if let Some(access_platform) = &self.access_platform {
|
||||||
if ready {
|
if ready {
|
||||||
let desc_table = access_platform.translate_gva(q.desc_table(), 0).unwrap();
|
let desc_table = access_platform
|
||||||
let avail_ring = access_platform.translate_gva(q.avail_ring(), 0).unwrap();
|
.translate_gva(
|
||||||
let used_ring = access_platform.translate_gva(q.used_ring(), 0).unwrap();
|
q.desc_table(),
|
||||||
|
get_vring_size(VringType::Desc, q.size()),
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
let avail_ring = access_platform
|
||||||
|
.translate_gva(
|
||||||
|
q.avail_ring(),
|
||||||
|
get_vring_size(VringType::Avail, q.size()),
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
let used_ring = access_platform
|
||||||
|
.translate_gva(q.used_ring(), get_vring_size(VringType::Used, q.size()))
|
||||||
|
.unwrap();
|
||||||
q.set_desc_table_address(
|
q.set_desc_table_address(
|
||||||
Some((desc_table & 0xffff_ffff) as u32),
|
Some((desc_table & 0xffff_ffff) as u32),
|
||||||
Some((desc_table >> 32) as u32),
|
Some((desc_table >> 32) as u32),
|
||||||
|
Loading…
Reference in New Issue
Block a user