[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH V3 12/13] HV/Netvsc: Add Isolation VM support for netvsc driver

On 8/19/21 11:21 PM, hch@xxxxxx wrote:
On Thu, Aug 19, 2021 at 06:14:51PM +0000, Michael Kelley wrote:
+       if (!pfns)
+               return NULL;
+       for (i = 0; i < size / HV_HYP_PAGE_SIZE; i++)
+               pfns[i] = virt_to_hvpfn(buf + i * HV_HYP_PAGE_SIZE)
+                       + (ms_hyperv.shared_gpa_boundary >> HV_HYP_PAGE_SHIFT);
+       vaddr = vmap_pfn(pfns, size / HV_HYP_PAGE_SIZE, PAGE_KERNEL_IO);
+       kfree(pfns);
+       return vaddr;

This function appears to be a duplicate of hv_map_memory() in Patch 11 of this
series.  Is it possible to structure things so there is only one 
implementation?  In

So right now it it identical, but there is an important difference:
the swiotlb memory is physically contiguous to start with, so we can
do the simple remap using vmap_range as suggested in the last mail.
The cases here are pretty weird in that netvsc_remap_buf is called right
after vzalloc.  That is we create _two_ mappings in vmalloc space right
after another, where the original one is just used for establishing the
"GPADL handle" and freeing the memory.  In other words, the obvious thing
to do here would be to use a vmalloc variant that allows to take the
shared_gpa_boundary into account when setting up the PTEs.

And here is somthing I need help from the x86 experts:  does the CPU
actually care about this shared_gpa_boundary?  Or does it just matter
for the generated DMA address?  Does somehow have a good pointer to
how this mechanism works?

The CPU does care. Here's some info:

APM Volume 2, Section 15.36.8:

AMD SEV-SNP Whitepaper, Virtual Machine Privilege Levels (~page 14):




Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.