qemu-ppc
[Top][All Lists]
Advanced

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

Re: [PATCH v4 24/41] vfio/spapr: Move hostwin_list into spapr container


From: Cédric Le Goater
Subject: Re: [PATCH v4 24/41] vfio/spapr: Move hostwin_list into spapr container
Date: Mon, 6 Nov 2023 18:35:36 +0100
User-agent: Mozilla Thunderbird

On 11/2/23 08:12, Zhenzhong Duan wrote:
No functional changes intended.

Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>


Reviewed-by: Cédric Le Goater <clg@redhat.com>

Thanks,

C.


---
  include/hw/vfio/vfio-common.h |  1 -
  hw/vfio/spapr.c               | 36 +++++++++++++++++++----------------
  2 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
index ed6148c058..24ecc0e7ee 100644
--- a/include/hw/vfio/vfio-common.h
+++ b/include/hw/vfio/vfio-common.h
@@ -79,7 +79,6 @@ typedef struct VFIOContainer {
      VFIOContainerBase bcontainer;
      int fd; /* /dev/vfio/vfio, empowered by the attached groups */
      unsigned iommu_type;
-    QLIST_HEAD(, VFIOHostDMAWindow) hostwin_list;
      QLIST_HEAD(, VFIOGroup) group_list;
  } VFIOContainer;
diff --git a/hw/vfio/spapr.c b/hw/vfio/spapr.c
index 68c3dd6c75..5c6426e697 100644
--- a/hw/vfio/spapr.c
+++ b/hw/vfio/spapr.c
@@ -27,6 +27,7 @@
  typedef struct VFIOSpaprContainer {
      VFIOContainer container;
      MemoryListener prereg_listener;
+    QLIST_HEAD(, VFIOHostDMAWindow) hostwin_list;
  } VFIOSpaprContainer;
static bool vfio_prereg_listener_skipped_section(MemoryRegionSection *section)
@@ -154,12 +155,12 @@ static const MemoryListener vfio_prereg_listener = {
      .region_del = vfio_prereg_listener_region_del,
  };
-static void vfio_host_win_add(VFIOContainer *container, hwaddr min_iova,
+static void vfio_host_win_add(VFIOSpaprContainer *scontainer, hwaddr min_iova,
                                hwaddr max_iova, uint64_t iova_pgsizes)
  {
      VFIOHostDMAWindow *hostwin;
- QLIST_FOREACH(hostwin, &container->hostwin_list, hostwin_next) {
+    QLIST_FOREACH(hostwin, &scontainer->hostwin_list, hostwin_next) {
          if (ranges_overlap(hostwin->min_iova,
                             hostwin->max_iova - hostwin->min_iova + 1,
                             min_iova,
@@ -173,15 +174,15 @@ static void vfio_host_win_add(VFIOContainer *container, 
hwaddr min_iova,
      hostwin->min_iova = min_iova;
      hostwin->max_iova = max_iova;
      hostwin->iova_pgsizes = iova_pgsizes;
-    QLIST_INSERT_HEAD(&container->hostwin_list, hostwin, hostwin_next);
+    QLIST_INSERT_HEAD(&scontainer->hostwin_list, hostwin, hostwin_next);
  }
-static int vfio_host_win_del(VFIOContainer *container,
+static int vfio_host_win_del(VFIOSpaprContainer *scontainer,
                               hwaddr min_iova, hwaddr max_iova)
  {
      VFIOHostDMAWindow *hostwin;
- QLIST_FOREACH(hostwin, &container->hostwin_list, hostwin_next) {
+    QLIST_FOREACH(hostwin, &scontainer->hostwin_list, hostwin_next) {
          if (hostwin->min_iova == min_iova && hostwin->max_iova == max_iova) {
              QLIST_REMOVE(hostwin, hostwin_next);
              g_free(hostwin);
@@ -192,7 +193,7 @@ static int vfio_host_win_del(VFIOContainer *container,
      return -1;
  }
-static VFIOHostDMAWindow *vfio_find_hostwin(VFIOContainer *container,
+static VFIOHostDMAWindow *vfio_find_hostwin(VFIOSpaprContainer *container,
                                              hwaddr iova, hwaddr end)
  {
      VFIOHostDMAWindow *hostwin;
@@ -329,6 +330,8 @@ vfio_spapr_container_add_section_window(VFIOContainerBase 
*bcontainer,
  {
      VFIOContainer *container = container_of(bcontainer, VFIOContainer,
                                              bcontainer);
+    VFIOSpaprContainer *scontainer = container_of(container, 
VFIOSpaprContainer,
+                                                  container);
      VFIOHostDMAWindow *hostwin;
      hwaddr pgsize = 0;
      int ret;
@@ -344,7 +347,7 @@ vfio_spapr_container_add_section_window(VFIOContainerBase 
*bcontainer,
          iova = section->offset_within_address_space;
          end = iova + int128_get64(section->size) - 1;
- if (!vfio_find_hostwin(container, iova, end)) {
+        if (!vfio_find_hostwin(scontainer, iova, end)) {
              error_setg(errp, "Container %p can't map guest IOVA region"
                         " 0x%"HWADDR_PRIx"..0x%"HWADDR_PRIx, container,
                         iova, end);
@@ -358,7 +361,7 @@ vfio_spapr_container_add_section_window(VFIOContainerBase 
*bcontainer,
      }
/* For now intersections are not allowed, we may relax this later */
-    QLIST_FOREACH(hostwin, &container->hostwin_list, hostwin_next) {
+    QLIST_FOREACH(hostwin, &scontainer->hostwin_list, hostwin_next) {
          if (ranges_overlap(hostwin->min_iova,
                             hostwin->max_iova - hostwin->min_iova + 1,
                             section->offset_within_address_space,
@@ -380,7 +383,7 @@ vfio_spapr_container_add_section_window(VFIOContainerBase 
*bcontainer,
          return ret;
      }
- vfio_host_win_add(container, section->offset_within_address_space,
+    vfio_host_win_add(scontainer, section->offset_within_address_space,
                        section->offset_within_address_space +
                        int128_get64(section->size) - 1, pgsize);
  #ifdef CONFIG_KVM
@@ -419,6 +422,8 @@ vfio_spapr_container_del_section_window(VFIOContainerBase 
*bcontainer,
  {
      VFIOContainer *container = container_of(bcontainer, VFIOContainer,
                                              bcontainer);
+    VFIOSpaprContainer *scontainer = container_of(container, 
VFIOSpaprContainer,
+                                                  container);
if (container->iommu_type != VFIO_SPAPR_TCE_v2_IOMMU) {
          return;
@@ -426,7 +431,7 @@ vfio_spapr_container_del_section_window(VFIOContainerBase 
*bcontainer,
vfio_spapr_remove_window(container,
                               section->offset_within_address_space);
-    if (vfio_host_win_del(container,
+    if (vfio_host_win_del(scontainer,
                            section->offset_within_address_space,
                            section->offset_within_address_space +
                            int128_get64(section->size) - 1) < 0) {
@@ -454,7 +459,7 @@ int vfio_spapr_container_init(VFIOContainer *container, 
Error **errp)
      bool v2 = container->iommu_type == VFIO_SPAPR_TCE_v2_IOMMU;
      int ret, fd = container->fd;
- QLIST_INIT(&container->hostwin_list);
+    QLIST_INIT(&scontainer->hostwin_list);
/*
       * The host kernel code implementing VFIO_IOMMU_DISABLE is called
@@ -506,7 +511,7 @@ int vfio_spapr_container_init(VFIOContainer *container, 
Error **errp)
      } else {
          /* The default table uses 4K pages */
          bcontainer->pgsizes = 0x1000;
-        vfio_host_win_add(container, info.dma32_window_start,
+        vfio_host_win_add(scontainer, info.dma32_window_start,
                            info.dma32_window_start +
                            info.dma32_window_size - 1,
                            0x1000);
@@ -525,15 +530,14 @@ listener_unregister_exit:
void vfio_spapr_container_deinit(VFIOContainer *container)
  {
+    VFIOSpaprContainer *scontainer = container_of(container, 
VFIOSpaprContainer,
+                                                  container);
      VFIOHostDMAWindow *hostwin, *next;
if (container->iommu_type == VFIO_SPAPR_TCE_v2_IOMMU) {
-        VFIOSpaprContainer *scontainer = container_of(container,
-                                                      VFIOSpaprContainer,
-                                                      container);
          memory_listener_unregister(&scontainer->prereg_listener);
      }
-    QLIST_FOREACH_SAFE(hostwin, &container->hostwin_list, hostwin_next,
+    QLIST_FOREACH_SAFE(hostwin, &scontainer->hostwin_list, hostwin_next,
                         next) {
          QLIST_REMOVE(hostwin, hostwin_next);
          g_free(hostwin);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]