Pushed. Thanks! Alex On Thu, Feb 21, 2019 at 9:36 PM Deng, Emily <Emily.Deng@xxxxxxx> wrote: > > Hi Alex, > Please help, thanks. > > Best wishes > Emily Deng > > > > >-----Original Message----- > >From: Alex Deucher <alexdeucher@xxxxxxxxx> > >Sent: Friday, February 22, 2019 12:13 AM > >To: Deng, Emily <Emily.Deng@xxxxxxx>; Maling list - DRI developers <dri- > >devel@xxxxxxxxxxxxxxxxxxxxx> > >Cc: amd-gfx list <amd-gfx@xxxxxxxxxxxxxxxxxxxxx> > >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@xxxxxxx> 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@xxxxxxx> > > > >Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx> > > > >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@xxxxxxxxxxxxxxxxxxxxx > >> https://lists.freedesktop.org/mailman/listinfo/amd-gfx _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx