libxl: use COMPARE_PCI() macro is_pci_in_array()...

... rather than an open-coded equivalent.

This patch tidies up the is_pci_in_array() function, making it take a single
'libxl_device_pci' argument rather than separate domain, bus, device and
function arguments. The already-available COMPARE_PCI() macro can then be
used and it is also modified to return 'bool' rather than 'int'.

The patch also modifies libxl_pci_assignable() to use is_pci_in_array() rather
than a separate open-coded equivalent, and also modifies it to return a
'bool' rather than an 'int'.

NOTE: The COMPARE_PCI() macro is also fixed to include the 'domain' in its
      comparison, which should always have been the case.

Signed-off-by: Paul Durrant <pdurrant@amazon.com>
Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Acked-by: Wei Liu <wl@xen.org>
This commit is contained in:
Paul Durrant authored and Wei Liu committed 2020-12-15 16:24:23 +00:00
1 parent c00da82355
commit 413fd4e4e9
2 files changed
+17 -28

No files matched your search

+4 -3
View File
@@ -4746,9 +4746,10 @@ void libxl__xcinfo2xlinfo(libxl_ctx *ctx,
* devices have same identifier. */
#define COMPARE_DEVID(a, b) ((a)->devid == (b)->devid)
#define COMPARE_DISK(a, b) (!strcmp((a)->vdev, (b)->vdev))
#define COMPARE_PCI(a, b) ((a)->func == (b)->func && \
(a)->bus == (b)->bus && \
(a)->dev == (b)->dev)
#define COMPARE_PCI(a, b) ((a)->domain == (b)->domain && \
(a)->bus == (b)->bus && \
(a)->dev == (b)->dev && \
(a)->func == (b)->func)
#define COMPARE_USB(a, b) ((a)->ctrl == (b)->ctrl && \
(a)->port == (b)->port)
#define COMPARE_USBCTRL(a, b) ((a)->devid == (b)->devid)
+13 -25
View File
@@ -336,24 +336,17 @@ retry_transaction2:
return 0;
}
static int is_pci_in_array(libxl_device_pci *assigned, int num_assigned,
int dom, int bus, int dev, int func)
static bool is_pci_in_array(libxl_device_pci *pcis, int num,
libxl_device_pci *pci)
{
int i;
for(i = 0; i < num_assigned; i++) {
if ( assigned[i].domain != dom )
continue;
if ( assigned[i].bus != bus )
continue;
if ( assigned[i].dev != dev )
continue;
if ( assigned[i].func != func )
continue;
return 1;
for (i = 0; i < num; i++) {
if (COMPARE_PCI(pci, &pcis[i]))
break;
}
return 0;
return i < num;
}
/* Write the standard BDF into the sysfs path given by sysfs_path. */
@@ -1487,21 +1480,17 @@ int libxl_device_pci_add(libxl_ctx *ctx, uint32_t domid,
return AO_INPROGRESS;
}
static int libxl_pci_assignable(libxl_ctx *ctx, libxl_device_pci *pci)
static bool libxl_pci_assignable(libxl_ctx *ctx, libxl_device_pci *pci)
{
libxl_device_pci *pcis;
int num, i;
int num;
bool assignable;
pcis = libxl_device_pci_assignable_list(ctx, &num);
for (i = 0; i < num; i++) {
if (pcis[i].domain == pci->domain &&
pcis[i].bus == pci->bus &&
pcis[i].dev == pci->dev &&
pcis[i].func == pci->func)
break;
}
assignable = is_pci_in_array(pcis, num, pci);
libxl_device_pci_assignable_list_free(pcis, num);
return i != num;
return assignable;
}
static void device_pci_add_stubdom_wait(libxl__egc *egc,
@@ -1834,8 +1823,7 @@ static void do_pci_remove(libxl__egc *egc, pci_remove_state *prs)
goto out_fail;
}
attached = is_pci_in_array(pcis, num, pci->domain,
pci->bus, pci->dev, pci->func);
attached = is_pci_in_array(pcis, num, pci);
libxl_device_pci_list_free(pcis, num);
rc = ERROR_INVAL;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.