* Re: [PATCH xf86-video-amdgpu] amdgpu_probe: Do not close server managed drm fds [not found] ` <20161018144840.7163-1-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2016-10-19 2:42 ` Michel Dänzer [not found] ` <2bc76f11-bb9e-8411-35ee-c76d535d933e-otUistvHUpPR7s880joybQ@public.gmane.org> 0 siblings, 1 reply; 3+ messages in thread From: Michel Dänzer @ 2016-10-19 2:42 UTC (permalink / raw) To: Hans de Goede; +Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW [ Moving to the amd-gfx mailing list, where xf86-video-amdgpu (and -ati) patches are reviewed ] On 18/10/16 11:48 PM, Hans de Goede wrote: > This fixes the xserver only seeing AMD/ATI devices supported by the amdgpu > driver, as by the time xf86-video-ati gets a chance to probe them, the > fd has been closed. That basically makes sense, but I have one question: Why does amdgpu get probed in the first place in that case? I was under the impression that this should only happen for GPUs bound to the amdgpu kernel driver, due to Section "OutputClass" in /usr/share/X11/xorg.conf.d/10-amdgpu.conf . > diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c > index 213d245..5d17fe5 100644 > --- a/src/amdgpu_probe.c > +++ b/src/amdgpu_probe.c > @@ -142,6 +142,15 @@ static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn, char *busid, > return fd; > } > > +static void amdgpu_kernel_close_fd(AMDGPUEntPtr pAMDGPUEnt) > +{ > +#ifdef XF86_PDEV_SERVER_FD > + if (!(pAMDGPUEnt->platform_dev && > + pAMDGPUEnt->platform_dev->flags & XF86_PDEV_SERVER_FD)) > +#endif > + drmClose(pAMDGPUEnt->fd); > +} AMDGPUFreeRec could also be refactored to call this function. > @@ -164,7 +173,7 @@ static Bool amdgpu_open_drm_master(ScrnInfoPtr pScrn, AMDGPUEntPtr pAMDGPUEnt, > if (err != 0) { > xf86DrvMsg(pScrn->scrnIndex, X_ERROR, > "[drm] failed to set drm interface version.\n"); > - drmClose(pAMDGPUEnt->fd); > + amdgpu_kernel_close_fd(pAMDGPUEnt); > return FALSE; > } > @@ -252,7 +261,7 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev) > return TRUE; > > error_amdgpu: > - drmClose(pAMDGPUEnt->fd); > + amdgpu_kernel_close_fd(pAMDGPUEnt); > error_fd: > free(pPriv->ptr); > error: These two hunks aren't really necessary, right? These only get called from amdgpu_pci_probe, in which case pAMDGPUEnt->platform_dev remains NULL. > @@ -347,6 +356,7 @@ amdgpu_platform_probe(DriverPtr pDriver, > > pPriv->ptr = xnfcalloc(sizeof(AMDGPUEntRec), 1); > pAMDGPUEnt = pPriv->ptr; > + pAMDGPUEnt->platform_dev = dev; > pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, busid, dev); > if (pAMDGPUEnt->fd < 0) > goto error_fd; > @@ -365,7 +375,6 @@ amdgpu_platform_probe(DriverPtr pDriver, > pAMDGPUEnt = pPriv->ptr; > pAMDGPUEnt->fd_ref++; > } > - pAMDGPUEnt->platform_dev = dev; > > xf86SetEntityInstanceForScreen(pScrn, pEnt->index, > xf86GetNumEntityInstances(pEnt-> These two hunks aren't really necessary either, are they? -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <2bc76f11-bb9e-8411-35ee-c76d535d933e-otUistvHUpPR7s880joybQ@public.gmane.org>]
* Re: [PATCH xf86-video-amdgpu] amdgpu_probe: Do not close server managed drm fds [not found] ` <2bc76f11-bb9e-8411-35ee-c76d535d933e-otUistvHUpPR7s880joybQ@public.gmane.org> @ 2016-10-19 9:49 ` Hans de Goede [not found] ` <0c0ceb0c-145f-117e-75a9-8159046cacfe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 3+ messages in thread From: Hans de Goede @ 2016-10-19 9:49 UTC (permalink / raw) To: Michel Dänzer; +Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW Hi, On 19-10-16 04:42, Michel Dänzer wrote: > > [ Moving to the amd-gfx mailing list, where xf86-video-amdgpu (and -ati) > patches are reviewed ] > > On 18/10/16 11:48 PM, Hans de Goede wrote: >> This fixes the xserver only seeing AMD/ATI devices supported by the amdgpu >> driver, as by the time xf86-video-ati gets a chance to probe them, the >> fd has been closed. > > That basically makes sense, but I have one question: Why does amdgpu get > probed in the first place in that case? I was under the impression that > this should only happen for GPUs bound to the amdgpu kernel driver, due > to Section "OutputClass" in /usr/share/X11/xorg.conf.d/10-amdgpu.conf . Good question, I honestly don't know and I do not have time to investigate. You should be able to reproduce this yourself, if not let me know. >> diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c >> index 213d245..5d17fe5 100644 >> --- a/src/amdgpu_probe.c >> +++ b/src/amdgpu_probe.c >> @@ -142,6 +142,15 @@ static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn, char *busid, >> return fd; >> } >> >> +static void amdgpu_kernel_close_fd(AMDGPUEntPtr pAMDGPUEnt) >> +{ >> +#ifdef XF86_PDEV_SERVER_FD >> + if (!(pAMDGPUEnt->platform_dev && >> + pAMDGPUEnt->platform_dev->flags & XF86_PDEV_SERVER_FD)) >> +#endif >> + drmClose(pAMDGPUEnt->fd); >> +} > > AMDGPUFreeRec could also be refactored to call this function. Ack. >> @@ -164,7 +173,7 @@ static Bool amdgpu_open_drm_master(ScrnInfoPtr pScrn, AMDGPUEntPtr pAMDGPUEnt, >> if (err != 0) { >> xf86DrvMsg(pScrn->scrnIndex, X_ERROR, >> "[drm] failed to set drm interface version.\n"); >> - drmClose(pAMDGPUEnt->fd); >> + amdgpu_kernel_close_fd(pAMDGPUEnt); >> return FALSE; >> } >> @@ -252,7 +261,7 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev) >> return TRUE; >> >> error_amdgpu: >> - drmClose(pAMDGPUEnt->fd); >> + amdgpu_kernel_close_fd(pAMDGPUEnt); >> error_fd: >> free(pPriv->ptr); >> error: > > These two hunks aren't really necessary, right? These only get called > from amdgpu_pci_probe, in which case pAMDGPUEnt->platform_dev remains NULL. The names of the functions do not imply amdgpu_pci_probe() use only, so even though that is true today it might not be true in the future. IOW better safe then sorry. >> @@ -347,6 +356,7 @@ amdgpu_platform_probe(DriverPtr pDriver, >> >> pPriv->ptr = xnfcalloc(sizeof(AMDGPUEntRec), 1); >> pAMDGPUEnt = pPriv->ptr; >> + pAMDGPUEnt->platform_dev = dev; >> pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, busid, dev); >> if (pAMDGPUEnt->fd < 0) >> goto error_fd; >> @@ -365,7 +375,6 @@ amdgpu_platform_probe(DriverPtr pDriver, >> pAMDGPUEnt = pPriv->ptr; >> pAMDGPUEnt->fd_ref++; >> } >> - pAMDGPUEnt->platform_dev = dev; >> >> xf86SetEntityInstanceForScreen(pScrn, pEnt->index, >> xf86GetNumEntityInstances(pEnt-> > > These two hunks aren't really necessary either, are they? Actually they are, quoting some more of the (new after the patch) code: pAMDGPUEnt->platform_dev = dev; pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, busid, dev); if (pAMDGPUEnt->fd < 0) goto error_fd; pAMDGPUEnt->fd_ref = 1; if (amdgpu_device_initialize(pAMDGPUEnt->fd, &major_version, &minor_version, &pAMDGPUEnt->pDev)) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "amdgpu_device_initialize failed\n"); goto error_amdgpu; } ... error_amdgpu: amdgpu_kernel_close_fd(pAMDGPUEnt); error_fd: free(pPriv->ptr); error: free(busid); return FALSE; } And amdgpu_kernel_close_fd accesses pAMDGPUEnt->platform_dev, so it needs to be set earlier then before. Shall I send a v2 with AMDGPUFreeRec refactored to call amdgpu_kernel_close_fd and the rest kept as is ? Regards, Hans _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <0c0ceb0c-145f-117e-75a9-8159046cacfe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH xf86-video-amdgpu] amdgpu_probe: Do not close server managed drm fds [not found] ` <0c0ceb0c-145f-117e-75a9-8159046cacfe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2016-10-20 0:51 ` Michel Dänzer 0 siblings, 0 replies; 3+ messages in thread From: Michel Dänzer @ 2016-10-20 0:51 UTC (permalink / raw) To: Hans de Goede; +Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW On 19/10/16 06:49 PM, Hans de Goede wrote: > On 19-10-16 04:42, Michel Dänzer wrote: >> On 18/10/16 11:48 PM, Hans de Goede wrote: >>> This fixes the xserver only seeing AMD/ATI devices supported by the >>> amdgpu >>> driver, as by the time xf86-video-ati gets a chance to probe them, the >>> fd has been closed. >> >> That basically makes sense, but I have one question: Why does amdgpu get >> probed in the first place in that case? I was under the impression that >> this should only happen for GPUs bound to the amdgpu kernel driver, due >> to Section "OutputClass" in /usr/share/X11/xorg.conf.d/10-amdgpu.conf . > > Good question, I honestly don't know and I do not have time to investigate. > You should be able to reproduce this yourself, if not let me know. I haven't run into this myself and am not sure how I could reproduce it. Anyway, the patch is clearly the right thing to do regardless, so it's not a big deal but just curiosity on my part. >>> @@ -164,7 +173,7 @@ static Bool amdgpu_open_drm_master(ScrnInfoPtr >>> pScrn, AMDGPUEntPtr pAMDGPUEnt, >>> if (err != 0) { >>> xf86DrvMsg(pScrn->scrnIndex, X_ERROR, >>> "[drm] failed to set drm interface version.\n"); >>> - drmClose(pAMDGPUEnt->fd); >>> + amdgpu_kernel_close_fd(pAMDGPUEnt); >>> return FALSE; >>> } >>> @@ -252,7 +261,7 @@ static Bool amdgpu_get_scrninfo(int entity_num, >>> struct pci_device *pci_dev) >>> return TRUE; >>> >>> error_amdgpu: >>> - drmClose(pAMDGPUEnt->fd); >>> + amdgpu_kernel_close_fd(pAMDGPUEnt); >>> error_fd: >>> free(pPriv->ptr); >>> error: >> >> These two hunks aren't really necessary, right? These only get called >> from amdgpu_pci_probe, in which case pAMDGPUEnt->platform_dev remains >> NULL. > > The names of the functions do not imply amdgpu_pci_probe() use only, so > even > though that is true today it might not be true in the future. IOW better > safe then sorry. Makes sense. >>> @@ -347,6 +356,7 @@ amdgpu_platform_probe(DriverPtr pDriver, >>> >>> pPriv->ptr = xnfcalloc(sizeof(AMDGPUEntRec), 1); >>> pAMDGPUEnt = pPriv->ptr; >>> + pAMDGPUEnt->platform_dev = dev; >>> pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, busid, dev); >>> if (pAMDGPUEnt->fd < 0) >>> goto error_fd; >>> @@ -365,7 +375,6 @@ amdgpu_platform_probe(DriverPtr pDriver, >>> pAMDGPUEnt = pPriv->ptr; >>> pAMDGPUEnt->fd_ref++; >>> } >>> - pAMDGPUEnt->platform_dev = dev; >>> >>> xf86SetEntityInstanceForScreen(pScrn, pEnt->index, >>> xf86GetNumEntityInstances(pEnt-> >> >> These two hunks aren't really necessary either, are they? > > Actually they are, quoting some more of the (new after the patch) code: [...] > And amdgpu_kernel_close_fd accesses pAMDGPUEnt->platform_dev, so it needs > to be set earlier then before. Gotcha, thanks. > Shall I send a v2 with AMDGPUFreeRec refactored to call > amdgpu_kernel_close_fd > and the rest kept as is ? Yes, please. -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-10-20 0:51 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20161018144840.7163-1-hdegoede@redhat.com> [not found] ` <20161018144840.7163-1-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2016-10-19 2:42 ` [PATCH xf86-video-amdgpu] amdgpu_probe: Do not close server managed drm fds Michel Dänzer [not found] ` <2bc76f11-bb9e-8411-35ee-c76d535d933e-otUistvHUpPR7s880joybQ@public.gmane.org> 2016-10-19 9:49 ` Hans de Goede [not found] ` <0c0ceb0c-145f-117e-75a9-8159046cacfe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2016-10-20 0:51 ` Michel Dänzer
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.