| From 145b3fe579db66fbe999a2bc3fd5b63dffe9636d Mon Sep 17 00:00:00 2001 |
| From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> |
| Date: Tue, 2 Dec 2014 17:35:04 +0100 |
| Subject: PCI: Generate uppercase hex for modalias var in uevent |
| |
| From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> |
| |
| commit 145b3fe579db66fbe999a2bc3fd5b63dffe9636d upstream. |
| |
| Some implementations of modprobe fail to load the driver for a PCI device |
| automatically because the "interface" part of the modalias from the kernel |
| is lowercase, and the modalias from file2alias is uppercase. |
| |
| The "interface" is the low-order byte of the Class Code, defined in PCI |
| r3.0, Appendix D. Most interface types defined in the spec do not use |
| alpha characters, so they won't be affected. For example, 00h, 01h, 10h, |
| 20h, etc. are unaffected. |
| |
| Print the "interface" byte of the Class Code in uppercase hex, as we |
| already do for the Vendor ID, Device ID, Class, etc. |
| |
| Commit 89ec3dcf17fd ("PCI: Generate uppercase hex for modalias interface |
| class") fixed only half of the problem. Some udev implementations rely on |
| the uevent file and not the modalias file. |
| |
| Fixes: d1ded203adf1 ("PCI: add MODALIAS to hotplug event for pci devices") |
| Fixes: 89ec3dcf17fd ("PCI: Generate uppercase hex for modalias interface class") |
| Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> |
| Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> |
| Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/pci/pci-driver.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/pci/pci-driver.c |
| +++ b/drivers/pci/pci-driver.c |
| @@ -1383,7 +1383,7 @@ static int pci_uevent(struct device *dev |
| if (add_uevent_var(env, "PCI_SLOT_NAME=%s", pci_name(pdev))) |
| return -ENOMEM; |
| |
| - if (add_uevent_var(env, "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x", |
| + if (add_uevent_var(env, "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02X", |
| pdev->vendor, pdev->device, |
| pdev->subsystem_vendor, pdev->subsystem_device, |
| (u8)(pdev->class >> 16), (u8)(pdev->class >> 8), |