• Kay Sievers's avatar
    udlfb: remove sysfs framebuffer device with USB .disconnect() · ee7d30aa
    Kay Sievers authored
    commit ce880cb8 upstream.
    
    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)
    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>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    ee7d30aa
udlfb.c 50.9 KB