Message ID | 20210903093611.1159-3-jiangkunkun@huawei.com |
---|---|
State | New |
Headers | show |
Series | vfio: Some fixes about vfio-pci MMIO RAM mapping | expand |
On Fri, 3 Sep 2021 17:36:11 +0800 Kunkun Jiang <jiangkunkun@huawei.com> wrote: > The MSI-X structures of some devices and other non-MSI-X structures > are in the same BAR. They may share one host page, especially in the > case of large page granularity, suck as 64K. s/suck/such/ > For example, MSIX-Table size of 82599 NIC is 0x30 and the offset in > Bar 3(size 64KB) is 0x0. If host page size is 64KB. > vfio_listenerregion_add() will be called to map the remaining range s/vfio_listenerregion_add/vfio_listener_region_add/ > (0x30-0xffff). And it will return early at > 'int128_ge((int128_make64(iova), llend))' and hasn't any message. > Let's add a trace point to informed users like 5c08600547c did. Please use the following syntax for referencing previous commits (12-char sha1 is standard): commit 5c08600547c0 ("vfio: Use a trace point when a RAM section cannot be DMA mapped") Thanks, Alex > Signed-off-by: Kunkun Jiang <jiangkunkun@huawei.com> > --- > hw/vfio/common.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/hw/vfio/common.c b/hw/vfio/common.c > index 8728d4d5c2..2fc6213c0f 100644 > --- a/hw/vfio/common.c > +++ b/hw/vfio/common.c > @@ -892,6 +892,13 @@ static void vfio_listener_region_add(MemoryListener *listener, > llend = int128_and(llend, int128_exts64(qemu_real_host_page_mask)); > > if (int128_ge(int128_make64(iova), llend)) { > + if (memory_region_is_ram_device(section->mr)) { > + trace_vfio_listener_region_add_no_dma_map( > + memory_region_name(section->mr), > + section->offset_within_address_space, > + int128_getlo(section->size), > + qemu_real_host_page_size); > + } > return; > } > end = int128_get64(int128_sub(llend, int128_one()));
Hi Alex, On 2021/9/9 4:45, Alex Williamson wrote: > On Fri, 3 Sep 2021 17:36:11 +0800 > Kunkun Jiang <jiangkunkun@huawei.com> wrote: > >> The MSI-X structures of some devices and other non-MSI-X structures >> are in the same BAR. They may share one host page, especially in the >> case of large page granularity, suck as 64K. > s/suck/such/ ok >> For example, MSIX-Table size of 82599 NIC is 0x30 and the offset in >> Bar 3(size 64KB) is 0x0. If host page size is 64KB. >> vfio_listenerregion_add() will be called to map the remaining range > s/vfio_listenerregion_add/vfio_listener_region_add/ ok >> (0x30-0xffff). And it will return early at >> 'int128_ge((int128_make64(iova), llend))' and hasn't any message. >> Let's add a trace point to informed users like 5c08600547c did. > Please use the following syntax for referencing previous commits > (12-char sha1 is standard): > > commit 5c08600547c0 ("vfio: Use a trace point when a RAM section > cannot be DMA mapped") Thank you for your reply. I will correct it in V2. Thanks, Kunkun Jiang > Thanks, > Alex > >> Signed-off-by: Kunkun Jiang <jiangkunkun@huawei.com> >> --- >> hw/vfio/common.c | 7 +++++++ >> 1 file changed, 7 insertions(+) >> >> diff --git a/hw/vfio/common.c b/hw/vfio/common.c >> index 8728d4d5c2..2fc6213c0f 100644 >> --- a/hw/vfio/common.c >> +++ b/hw/vfio/common.c >> @@ -892,6 +892,13 @@ static void vfio_listener_region_add(MemoryListener *listener, >> llend = int128_and(llend, int128_exts64(qemu_real_host_page_mask)); >> >> if (int128_ge(int128_make64(iova), llend)) { >> + if (memory_region_is_ram_device(section->mr)) { >> + trace_vfio_listener_region_add_no_dma_map( >> + memory_region_name(section->mr), >> + section->offset_within_address_space, >> + int128_getlo(section->size), >> + qemu_real_host_page_size); >> + } >> return; >> } >> end = int128_get64(int128_sub(llend, int128_one())); > .
diff --git a/hw/vfio/common.c b/hw/vfio/common.c index 8728d4d5c2..2fc6213c0f 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -892,6 +892,13 @@ static void vfio_listener_region_add(MemoryListener *listener, llend = int128_and(llend, int128_exts64(qemu_real_host_page_mask)); if (int128_ge(int128_make64(iova), llend)) { + if (memory_region_is_ram_device(section->mr)) { + trace_vfio_listener_region_add_no_dma_map( + memory_region_name(section->mr), + section->offset_within_address_space, + int128_getlo(section->size), + qemu_real_host_page_size); + } return; } end = int128_get64(int128_sub(llend, int128_one()));
The MSI-X structures of some devices and other non-MSI-X structures are in the same BAR. They may share one host page, especially in the case of large page granularity, suck as 64K. For example, MSIX-Table size of 82599 NIC is 0x30 and the offset in Bar 3(size 64KB) is 0x0. If host page size is 64KB. vfio_listenerregion_add() will be called to map the remaining range (0x30-0xffff). And it will return early at 'int128_ge((int128_make64(iova), llend))' and hasn't any message. Let's add a trace point to informed users like 5c08600547c did. Signed-off-by: Kunkun Jiang <jiangkunkun@huawei.com> --- hw/vfio/common.c | 7 +++++++ 1 file changed, 7 insertions(+)