• Kay Sievers's avatar
    udlfb: remove sysfs framebuffer device with USB .disconnect() · ce880cb8
    Kay Sievers authored
    The USB graphics card driver delays the unregistering of the framebuffer
    device to a workqueue, which breaks the userspace visible remove uevent
    sequence. Recent userspace tools started to support USB graphics card
    hotplug out-of-the-box and rely on proper events sent by the kernel.
    
    The framebuffer device is a direct child of the USB interface which is
    removed immediately after the USB .disconnect() callback. But the fb device
    in /sys stays around until its final cleanup, at a time where all the parent
    devices have been removed already.
    
    To work around that, we remove the sysfs fb device directly in the USB
    .disconnect() callback and leave only the cleanup of the internal fb
    data to the delayed work.
    
    Before:
     add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (usb)
     add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0 (usb)
     add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/graphics/fb0 (graphics)
     remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0 (usb)
     remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (usb)
     remove   /2-1.2:1.0/graphics/fb0 (graphics)
    
    After:
     add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (usb)
     add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0 (usb)
     add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/graphics/fb1 (graphics)
     remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/graphics/fb1 (graphics)
     remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0 (usb)
     remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (usb)
    
    Cc: stable@vger.kernel.org
    Tested-by: default avatarBernie Thompson <bernie@plugable.com>
    Acked-by: default avatarBernie Thompson <bernie@plugable.com>
    Signed-off-by: default avatarKay Sievers <kay.sievers@vrfy.org>
    Signed-off-by: default avatarFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
    ce880cb8
udlfb.c 50.7 KB