From babec9a5744714562988ebff98762aafe7d16ed0 Mon Sep 17 00:00:00 2001 From: daniel-k Date: Tue, 28 Nov 2017 12:08:32 +0100 Subject: [PATCH] kernel/pci: fix pci device compare function list_search's compare function has to return 0 on match. --- fpga/lib/kernel/pci.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/fpga/lib/kernel/pci.c b/fpga/lib/kernel/pci.c index 0de89f260..98b68d7d5 100644 --- a/fpga/lib/kernel/pci.c +++ b/fpga/lib/kernel/pci.c @@ -232,23 +232,21 @@ fail: int pci_device_compare(const struct pci_device *d, const struct pci_device *f) { - if ((f->slot.domain >= 0 && f->slot.domain != d->slot.domain) || - (f->slot.bus >= 0 && f->slot.bus != d->slot.bus) || - (f->slot.device >= 0 && f->slot.device != d->slot.device) || - (f->slot.function >= 0 && f->slot.function != d->slot.function)) - return 0; + if ((f->slot.domain != 0 && f->slot.domain != d->slot.domain) || + (f->slot.bus != 0 && f->slot.bus != d->slot.bus) || + (f->slot.device != 0 && f->slot.device != d->slot.device) || + (f->slot.function != 0 && f->slot.function != d->slot.function)) + return 1; - if (f->id.device >= 0 || f->id.vendor >= 0) { - if ((f->id.device >= 0 && f->id.device != d->id.device) || (f->id.vendor >= 0 && f->id.vendor != d->id.vendor)) - return 0; - } + if ((f->id.device != 0 && f->id.device != d->id.device) || + (f->id.vendor != 0 && f->id.vendor != d->id.vendor)) + return 1; - if (f->id.class >= 0) { - if (f->id.class != d->id.class) - return 0; - } + if ((f->id.class != 0) || (f->id.class != d->id.class)) + return 1; - return 1; + // found + return 0; } struct pci_device * pci_lookup_device(struct pci *p, struct pci_device *f)