aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorKunkun Jiang <jiangkunkun@huawei.com>2021-10-27 17:04:06 +0800
committerAlex Williamson <alex.williamson@redhat.com>2021-11-01 12:17:51 -0600
commite4b34708388b20f1ceb55f1d563d8da925a32424 (patch)
tree136e37513ddc010a31d3e3b2bd24f66b6a47aa94 /hw
parentf36d4fb85f41604038386e1eb4295acd7d372d86 (diff)
downloadqemu-e4b34708388b20f1ceb55f1d563d8da925a32424.zip
qemu-e4b34708388b20f1ceb55f1d563d8da925a32424.tar.gz
qemu-e4b34708388b20f1ceb55f1d563d8da925a32424.tar.bz2
vfio/common: Add a trace point when a MMIO RAM section cannot be mapped
The MSI-X structures of some devices and other non-MSI-X structures may be in the same BAR. They may share one host page, especially in the case of large page granularity, such as 64K. For example, MSIX-Table size of 82599 NIC is 0x30 and the offset in Bar 3(size 64KB) is 0x0. vfio_listener_region_add() will be called to map the remaining range (0x30-0xffff). If host page size is 64KB, it will return early at 'int128_ge((int128_make64(iova), llend))' without any message. Let's add a trace point to inform users like commit 5c08600547c0 ("vfio: Use a trace point when a RAM section cannot be DMA mapped") did. Signed-off-by: Kunkun Jiang <jiangkunkun@huawei.com> Link: https://lore.kernel.org/r/20211027090406.761-3-jiangkunkun@huawei.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/vfio/common.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/hw/vfio/common.c b/hw/vfio/common.c
index a784b21..dd387b0 100644
--- a/hw/vfio/common.c
+++ b/hw/vfio/common.c
@@ -893,6 +893,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()));