qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2 3/3] vfio: Create shared routine for scanning info capabil


From: Matthew Rosato
Subject: Re: [PATCH v2 3/3] vfio: Create shared routine for scanning info capabilities
Date: Tue, 15 Sep 2020 09:43:37 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.11.0

On 9/15/20 2:16 AM, Philippe Mathieu-Daudé wrote:
On 9/15/20 12:29 AM, Matthew Rosato wrote:
Rather than duplicating the same loop in multiple locations,
create a static function to do the work.

Why not do that first in your series?


Fair question. I did originally do this collapsing first, but I wasn't sure if Alex would want it so I split it out and tacked it on the end so it could be dropped if desired.

I'd be just fine re-arranging and putting this patch first.


Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com>
---
  hw/vfio/common.c | 33 +++++++++++++++------------------
  1 file changed, 15 insertions(+), 18 deletions(-)

diff --git a/hw/vfio/common.c b/hw/vfio/common.c
index 7f4a338..bfbbfe4 100644
--- a/hw/vfio/common.c
+++ b/hw/vfio/common.c
@@ -825,17 +825,12 @@ static void vfio_listener_release(VFIOContainer 
*container)
      }
  }
-struct vfio_info_cap_header *
-vfio_get_region_info_cap(struct vfio_region_info *info, uint16_t id)
+static struct vfio_info_cap_header *
+vfio_get_cap(void *ptr, uint32_t cap_offset, uint16_t id)
  {
      struct vfio_info_cap_header *hdr;
-    void *ptr = info;
-
-    if (!(info->flags & VFIO_REGION_INFO_FLAG_CAPS)) {
-        return NULL;
-    }
- for (hdr = ptr + info->cap_offset; hdr != ptr; hdr = ptr + hdr->next) {
+    for (hdr = ptr + cap_offset; hdr != ptr; hdr = ptr + hdr->next) {
          if (hdr->id == id) {
              return hdr;
          }
@@ -844,23 +839,25 @@ vfio_get_region_info_cap(struct vfio_region_info *info, 
uint16_t id)
      return NULL;
  }
+
+struct vfio_info_cap_header *
+vfio_get_region_info_cap(struct vfio_region_info *info, uint16_t id)
+{
+    if (!(info->flags & VFIO_REGION_INFO_FLAG_CAPS)) {
+        return NULL;
+    }
+
+    return vfio_get_cap((void *)info, info->cap_offset, id);
+}
+
  static struct vfio_info_cap_header *
  vfio_get_iommu_type1_info_cap(struct vfio_iommu_type1_info *info, uint16_t id)
  {
-    struct vfio_info_cap_header *hdr;
-    void *ptr = info;
-
      if (!(info->flags & VFIO_IOMMU_INFO_CAPS)) {
          return NULL;
      }
- for (hdr = ptr + info->cap_offset; hdr != ptr; hdr = ptr + hdr->next) {
-        if (hdr->id == id) {
-            return hdr;
-        }
-    }
-
-    return NULL;
+    return vfio_get_cap((void *)info, info->cap_offset, id);
  }
bool vfio_get_info_dma_avail(struct vfio_iommu_type1_info *info,






reply via email to

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