Commit 9acff309 authored by Adam Jackson's avatar Adam Jackson 💣 Committed by Adam Jackson

linux: Fix platform device PCI detection for complex bus topologies

Suppose you're in a Hyper-V guest and are trying to use PCI passthrough.
The ID_PATH that udev will construct for that looks something like
"acpi-VMBUS:00-pci-b8c8:00:00.0", and obviously looking for "pci-" in
the first four characters of that is going to not work.

Instead, strstr. I suppose it's possible you could have _multiple_ PCI
buses in the path, in which case you'd want strrstr, if that were a
thing.
parent b3f3d65e
Pipeline #43917 passed with stages
in 5 minutes and 46 seconds
...@@ -474,7 +474,7 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path ...@@ -474,7 +474,7 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path
config_odev_probe_proc_ptr probe_callback) config_odev_probe_proc_ptr probe_callback)
{ {
struct OdevAttributes *attribs = config_odev_allocate_attributes(); struct OdevAttributes *attribs = config_odev_allocate_attributes();
const char *value; const char *value, *str;
attribs->path = XNFstrdup(path); attribs->path = XNFstrdup(path);
attribs->syspath = XNFstrdup(syspath); attribs->syspath = XNFstrdup(syspath);
...@@ -482,8 +482,8 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path ...@@ -482,8 +482,8 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path
attribs->minor = minor; attribs->minor = minor;
value = udev_device_get_property_value(udev_device, "ID_PATH"); value = udev_device_get_property_value(udev_device, "ID_PATH");
if (value && !strncmp(value, "pci-", 4)) { if (value && (str = strstr(value, "pci-"))) {
attribs->busid = XNFstrdup(value); attribs->busid = XNFstrdup(str);
attribs->busid[3] = ':'; attribs->busid[3] = ':';
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment