[RFC PATCH] config/udev: determine bus id from pci name
Maarten Lankhorst
maarten.lankhorst at canonical.com
Wed Mar 20 09:35:52 PDT 2013
Op 20-03-13 14:03, Maarten Lankhorst schreef:
> It seems ODEV_ATTRIB_BUSID is only used in xf86platformProbe for pci devices,
> and there's no need to open the drm device to find out the pci id. It
> can be determined from the sysfs path.
>
> /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0 will become pci:0000:01:00.0 here.
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst at canonical.com>
>
> ---
> diff --git a/config/udev.c b/config/udev.c
> index 454838f..af133d2 100644
> --- a/config/udev.c
> +++ b/config/udev.c
> @@ -98,7 +98,7 @@ device_added(struct udev_device *udev_device)
> if (strncmp(sysname, "card", 4) != 0)
> return;
>
> - LogMessage(X_INFO, "config/udev: Adding drm device (%s)\n", path);
> + LogMessage(X_INFO, "config/udev: Adding drm device (%s) %s %s\n", path, sysname, syspath);
>
> config_udev_odev_setup_attribs(path, syspath, NewGPUDeviceRequest);
> return;
> @@ -267,7 +267,7 @@ device_removed(struct udev_device *device)
>
> if (strncmp(sysname,"card", 4) != 0)
> return;
> - ErrorF("removing GPU device %s %d\n", syspath, path);
> + ErrorF("removing GPU device %s %s\n", syspath, path);
> if (!path)
> return;
>
> @@ -437,6 +437,16 @@ config_udev_odev_setup_attribs(const char *path, const char *syspath,
> if (ret == FALSE)
> goto fail;
>
> + if (strstr(syspath, "/devices/pci")) {
> + const char *end = strstr(syspath, "/drm/card");
> + if (end && end - 12 > syspath) {
> + char pci_str[17] = "pci:";
> +
> + strncpy(pci_str + 4, end - 12, 12);
> + ret = config_odev_add_attribute(attribs, ODEV_ATTRIB_BUSID, pci_str);
> + }
> + }
> +
> /* ownership of attribs is passed to probe layer */
> probe_callback(attribs);
> return TRUE;
> diff --git a/hw/xfree86/os-support/linux/lnx_platform.c b/hw/xfree86/os-support/linux/lnx_platform.c
> index 76f5583..11bb9fc 100644
> --- a/hw/xfree86/os-support/linux/lnx_platform.c
> +++ b/hw/xfree86/os-support/linux/lnx_platform.c
> @@ -17,36 +17,6 @@
>
> #include "hotplug.h"
>
> -static Bool
> -get_drm_info(struct OdevAttributes *attribs, char *path)
> -{
> - drmSetVersion sv;
> - char *buf;
> - int fd;
> -
> - fd = open(path, O_RDWR, O_CLOEXEC);
> - if (fd == -1)
> - return FALSE;
> -
> - sv.drm_di_major = 1;
> - sv.drm_di_minor = 4;
> - sv.drm_dd_major = -1; /* Don't care */
> - sv.drm_dd_minor = -1; /* Don't care */
> - if (drmSetInterfaceVersion(fd, &sv)) {
> - ErrorF("setversion 1.4 failed\n");
> - return FALSE;
> - }
> -
> - xf86_add_platform_device(attribs);
> -
> - buf = drmGetBusid(fd);
> - xf86_add_platform_device_attrib(xf86_num_platform_devices - 1,
> - ODEV_ATTRIB_BUSID, buf);
> - drmFreeBusid(buf);
> - close(fd);
> - return TRUE;
> -}
> -
> Bool
> xf86PlatformDeviceCheckBusID(struct xf86_platform_device *device, const char *busid)
> {
> @@ -119,10 +89,6 @@ xf86PlatformDeviceProbe(struct OdevAttributes *attribs)
> LogMessage(X_INFO, "config/udev: Adding drm device (%s)\n",
> path);
>
> - ret = get_drm_info(attribs, path);
> - if (ret == FALSE)
> - goto out_free;
> -
+ xf86_add_platform_device(attribs);
Forgot to re-add this part when I was untangling this patch from some other changes I was working on.
> return;
>
> out_free:
>
More information about the xorg-devel
mailing list