summaryrefslogtreecommitdiff
path: root/drivers/misc
diff options
context:
space:
mode:
authorMatt Hsiao <matt.hsiao@hpe.com>2019-02-27 11:25:29 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-02-27 16:00:20 +0100
commitbc7de897f26c9db1fc3e445d210208945aae3b6e (patch)
treedbdaa070160e0cdb91a566433bb7db661607d07a /drivers/misc
parent9d49fff91b85d6ac601054d4ab45758e5f5186c0 (diff)
downloadlwn-bc7de897f26c9db1fc3e445d210208945aae3b6e.tar.gz
lwn-bc7de897f26c9db1fc3e445d210208945aae3b6e.zip
misc: hpilo: Exclude unsupported device via blacklist
Instead of having explicit if statements excluding devices, use a pci_device_id table of devices to blacklist. HPE will put out minor updates to the iLO using the same device info except for the subsystem device id. hpilo driver takes the approach to claim based upon {Vendor, Device, SubVendor} and it allows old software to work on new hardware without patching. As our primary way to support our customers is via distros, the patching process could take months to go upstream and then backported to multiple releases of multiple distros. This approach worked fairly well as this is only the second time in 10+ years that we need to blacklist an instance. Signed-off-by: Matt Hsiao <matt.hsiao@hpe.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc')
-rw-r--r--drivers/misc/hpilo.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/misc/hpilo.c b/drivers/misc/hpilo.c
index e9c9ef52c76a..0224e50b2d62 100644
--- a/drivers/misc/hpilo.c
+++ b/drivers/misc/hpilo.c
@@ -29,6 +29,11 @@ static struct class *ilo_class;
static unsigned int ilo_major;
static unsigned int max_ccb = 16;
static char ilo_hwdev[MAX_ILO_DEV];
+static const struct pci_device_id ilo_blacklist[] = {
+ /* auxiliary iLO */
+ {PCI_DEVICE_SUB(PCI_VENDOR_ID_HP, 0x3307, PCI_VENDOR_ID_HP, 0x1979)},
+ {}
+};
static inline int get_entry_id(int entry)
{
@@ -763,9 +768,10 @@ static int ilo_probe(struct pci_dev *pdev,
int devnum, minor, start, error = 0;
struct ilo_hwinfo *ilo_hw;
- /* Ignore subsystem_device = 0x1979 (set by BIOS) */
- if (pdev->subsystem_device == 0x1979)
- return 0;
+ if (pci_match_id(ilo_blacklist, pdev)) {
+ dev_dbg(&pdev->dev, "Not supported on this device\n");
+ return -ENODEV;
+ }
if (max_ccb > MAX_CCB)
max_ccb = MAX_CCB;