[PATCH 3/4] drm: Only lastclose on unload for legacy drivers

Daniel Vetter daniel.vetter at ffwll.ch
Fri Aug 4 09:15:40 UTC 2017


On Fri, Aug 4, 2017 at 6:12 AM, Michel Dänzer <michel at daenzer.net> wrote:
> On 03/08/17 10:54 PM, Daniel Vetter wrote:
>> On Thu, Aug 3, 2017 at 1:17 AM, Daniel Vetter <daniel.vetter at ffwll.ch> wrote:
>>> On Wed, Aug 2, 2017 at 10:50 PM, Alex Deucher <alexdeucher at gmail.com> wrote:
>>>> On Wed, Aug 2, 2017 at 7:56 AM, Daniel Vetter <daniel.vetter at ffwll.ch> wrote:
>>>>> The only thing modern drivers are supposed to do in lastclose is
>>>>> restore the fb emulation state. Which is entirely optional, and
>>>>> there's really no reason to do that. So restrict it to legacy drivers
>>>>> (where the driver cleanup essentially happens in lastclose).
>>>>
>>>> vga_switcheroo_process_delayed_switch() gets called in lastclose.
>>>> Won't that need to get moved elsewhere for this to work?
>>>
>>> Hm right, I forgot the lazy way to do runtime pm by keeping the device
>>> alive as long as anyone has an open fd for it ... This shouldn't be a
>>> problem, since you need to unregister from vgaswitcheroo anyway on
>>> unload. Maybe that blows up, I'll check the code and augment the patch
>>> as needed.
>>
>> So I think there's 3 cases:
>> - Trying to unload the module. You can't do that while anyone has the
>> fd still open, so lastclose is guaranteeed to run.
>> - Forcefully unbinding the driver through sysfs. Not any better, since
>> the can_switch stuff checks for the open count, and so will delay the
>> delayed switch no matter what.
>
> Are you sure that this is working as intended?
> https://bugs.freedesktop.org/show_bug.cgi?id=100399 sounds like
> unbinding works even while Xorg is using the DRM device.

Unbinding the gpu while someone has a file open (like X) is very much
possible, it's how it's designed. That's the forced unplug case. But:
a) amdgpu doesn't implement actual hotremoval support and blows up
b) even in the unload path we still check for can_switch, which will
notice that there's still open fds and not do the delayed switch, so
the code I've removed is already dead in that case.

But yeah, unbinding while X is running is very much possible, it's
exactly what will happen if you hotremove the gpu (from the driver
model pov) physically. The only thing I tried to show is that my patch
doesn't make anything worse :-)
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


More information about the dri-devel mailing list