Export drmDevicesEqual

drmCompareBusInfo was almost this already, but it wasn't exported, its
name didn't match its functionality, and while it almost looks like it
was usable for sorting due to memcmp it wouldn't work if you had
multiple bus types. I don't really want to think about defining a
sensible sort order for bus types, so let's at least make it less of a
trap for the caller.

Invert its boolean sense to be 'true if equal', rename it to describe
the types it actually operates on, and export.

Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Emil Velikov <emil.velilkov@collabora.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
main
Adam Jackson 2017-05-04 10:48:56 -04:00
parent 00aa2c1881
commit 7c27cd7c5d
2 changed files with 11 additions and 9 deletions

View File

@ -3029,32 +3029,32 @@ static int drmParsePciBusInfo(int maj, int min, drmPciBusInfoPtr info)
#endif #endif
} }
static int drmCompareBusInfo(drmDevicePtr a, drmDevicePtr b) int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b)
{ {
if (a == NULL || b == NULL) if (a == NULL || b == NULL)
return -1; return 0;
if (a->bustype != b->bustype) if (a->bustype != b->bustype)
return -1; return 0;
switch (a->bustype) { switch (a->bustype) {
case DRM_BUS_PCI: case DRM_BUS_PCI:
return memcmp(a->businfo.pci, b->businfo.pci, sizeof(drmPciBusInfo)); return memcmp(a->businfo.pci, b->businfo.pci, sizeof(drmPciBusInfo)) == 0;
case DRM_BUS_USB: case DRM_BUS_USB:
return memcmp(a->businfo.usb, b->businfo.usb, sizeof(drmUsbBusInfo)); return memcmp(a->businfo.usb, b->businfo.usb, sizeof(drmUsbBusInfo)) == 0;
case DRM_BUS_PLATFORM: case DRM_BUS_PLATFORM:
return memcmp(a->businfo.platform, b->businfo.platform, sizeof(drmPlatformBusInfo)); return memcmp(a->businfo.platform, b->businfo.platform, sizeof(drmPlatformBusInfo)) == 0;
case DRM_BUS_HOST1X: case DRM_BUS_HOST1X:
return memcmp(a->businfo.host1x, b->businfo.host1x, sizeof(drmHost1xBusInfo)); return memcmp(a->businfo.host1x, b->businfo.host1x, sizeof(drmHost1xBusInfo)) == 0;
default: default:
break; break;
} }
return -1; return 0;
} }
static int drmGetNodeType(const char *name) static int drmGetNodeType(const char *name)
@ -3669,7 +3669,7 @@ static void drmFoldDuplicatedDevices(drmDevicePtr local_devices[], int count)
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
for (j = i + 1; j < count; j++) { for (j = i + 1; j < count; j++) {
if (drmCompareBusInfo(local_devices[i], local_devices[j]) == 0) { if (drmCompareDevices(local_devices[i], local_devices[j])) {
local_devices[i]->available_nodes |= local_devices[j]->available_nodes; local_devices[i]->available_nodes |= local_devices[j]->available_nodes;
node_type = log2(local_devices[j]->available_nodes); node_type = log2(local_devices[j]->available_nodes);
memcpy(local_devices[i]->nodes[node_type], memcpy(local_devices[i]->nodes[node_type],

View File

@ -851,6 +851,8 @@ extern void drmFreeDevices(drmDevicePtr devices[], int count);
extern int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device); extern int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device);
extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices); extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices);
extern int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b);
#if defined(__cplusplus) #if defined(__cplusplus)
} }
#endif #endif