[PATCH libdrm] libdrm: Fix issue about differrent domainID but same BDF

Deng, Emily Emily.Deng at amd.com
Mon Feb 25 01:59:24 UTC 2019


Thank you very much.

Best wishes
Emily Deng



>-----Original Message-----
>From: Alex Deucher <alexdeucher at gmail.com>
>Sent: Saturday, February 23, 2019 5:05 AM
>To: Deng, Emily <Emily.Deng at amd.com>
>Cc: Maling list - DRI developers <dri-devel at lists.freedesktop.org>; amd-gfx list
><amd-gfx at lists.freedesktop.org>
>Subject: Re: [PATCH libdrm] libdrm: Fix issue about differrent domainID but same
>BDF
>
>Pushed.  Thanks!
>
>Alex
>
>On Thu, Feb 21, 2019 at 9:36 PM Deng, Emily <Emily.Deng at amd.com> wrote:
>>
>> Hi Alex,
>>     Please help, thanks.
>>
>> Best wishes
>> Emily Deng
>>
>>
>>
>> >-----Original Message-----
>> >From: Alex Deucher <alexdeucher at gmail.com>
>> >Sent: Friday, February 22, 2019 12:13 AM
>> >To: Deng, Emily <Emily.Deng at amd.com>; Maling list - DRI developers
>> ><dri- devel at lists.freedesktop.org>
>> >Cc: amd-gfx list <amd-gfx at lists.freedesktop.org>
>> >Subject: Re: [PATCH libdrm] libdrm: Fix issue about differrent
>> >domainID but same BDF
>> >
>> >On Thu, Feb 14, 2019 at 2:53 AM Emily Deng <Emily.Deng at amd.com> wrote:
>> >>
>> >> For multiple GPUs which has the same BDF, but has different domain
>> >> ID, the drmOpenByBusid will return the wrong fd when startx.
>> >>
>> >> The reproduce sequence as below:
>> >> 1. Call drmOpenByBusid to open Card0, then will return the right
>> >> fd0, and the
>> >> fd0 is master privilege;
>> >> 2. Call drmOpenByBusid to open Card1. In function drmOpenByBusid,
>> >> it will open Card0 first, this time, the fd1 for opening Card0 is
>> >> not master privilege, and will call drmSetInterfaceVersion to
>> >> identify the domain ID feature, as the fd1 is not master privilege,
>> >> then drmSetInterfaceVersion will fail, and then won't compare
>> >> domain ID, then
>> >return the wrong fd for Card1.
>> >>
>> >> Solution:
>> >> First loop search the best match fd about drm 1.4.
>> >>
>> >> Signed-off-by: Emily Deng <Emily.Deng at amd.com>
>> >
>> >Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
>> >
>> >Do you need someone to commit this for you?
>> >
>> >Alex
>> >
>> >> ---
>> >>  xf86drm.c | 23 +++++++++++++++++++++++
>> >>  1 file changed, 23 insertions(+)
>> >>
>> >> diff --git a/xf86drm.c b/xf86drm.c
>> >> index 336d64d..b60e029 100644
>> >> --- a/xf86drm.c
>> >> +++ b/xf86drm.c
>> >> @@ -584,11 +584,34 @@ static int drmOpenByBusid(const char *busid,
>> >> int
>> >type)
>> >>      if (base < 0)
>> >>          return -1;
>> >>
>> >> +    /* We need to try for 1.4 first for proper PCI domain support
>> >> + */
>> >>      drmMsg("drmOpenByBusid: Searching for BusID %s\n", busid);
>> >>      for (i = base; i < base + DRM_MAX_MINOR; i++) {
>> >>          fd = drmOpenMinor(i, 1, type);
>> >>          drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd);
>> >>          if (fd >= 0) {
>> >> +            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)) {
>> >> +                buf = drmGetBusid(fd);
>> >> +                drmMsg("drmOpenByBusid: drmGetBusid reports %s\n", buf);
>> >> +                if (buf && drmMatchBusID(buf, busid, 1)) {
>> >> +                    drmFreeBusid(buf);
>> >> +                    return fd;
>> >> +                }
>> >> +                if (buf)
>> >> +                    drmFreeBusid(buf);
>> >> +            }
>> >> +            close(fd);
>> >> +        }
>> >> +    }
>> >> +
>> >> +   for (i = base; i < base + DRM_MAX_MINOR; i++) {
>> >> +        fd = drmOpenMinor(i, 1, type);
>> >> +        drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd);
>> >> +        if (fd >= 0) {
>> >>              /* We need to try for 1.4 first for proper PCI domain support
>> >>               * and if that fails, we know the kernel is busted
>> >>               */
>> >> --
>> >> 2.7.4
>> >>
>> >> _______________________________________________
>> >> amd-gfx mailing list
>> >> amd-gfx at lists.freedesktop.org
>> >> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the dri-devel mailing list