linux/include/video
Mikulas Patocka 68a958a915 udlfb: handle unplug properly
The udlfb driver maintained an open count and cleaned up itself when the
count reached zero. But the console is also counted in the reference count
- so, if the user unplugged the device, the open count would not drop to
zero and the driver stayed loaded with console attached. If the user
re-plugged the adapter, it would create a device /dev/fb1, show green
screen and the access to the console would be lost.

The framebuffer subsystem has reference counting on its own - in order to
fix the unplug bug, we rely the framebuffer reference counting. When the
user unplugs the adapter, we call unregister_framebuffer unconditionally.
unregister_framebuffer will unbind the console, wait until all users stop
using the framebuffer and then call the fb_destroy method. The fb_destroy
cleans up the USB driver.

This patch makes the following changes:
* Drop dlfb->kref and rely on implicit framebuffer reference counting
  instead.
* dlfb_usb_disconnect calls unregister_framebuffer, the rest of driver
  cleanup is done in the function dlfb_ops_destroy. dlfb_ops_destroy will
  be called by the framebuffer subsystem when no processes have the
  framebuffer open or mapped.
* We don't use workqueue during initialization, but initialize directly
  from dlfb_usb_probe. The workqueue could race with dlfb_usb_disconnect
  and this racing would produce various kinds of memory corruption.
* We use usb_get_dev and usb_put_dev to make sure that the USB subsystem
  doesn't free the device under us.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
cc: Dave Airlie <airlied@redhat.com>
Cc: Bernie Thompson <bernie@plugable.com>,
Cc: Ladislav Michl <ladis@linux-mips.org>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
2018-10-08 12:57:34 +02:00
..
atmel_lcdc.h
aty128.h
broadsheetfb.h
cirrus.h
cvisionppc.h
da8xx-fb.h
display_timing.h
edid.h
gbe.h
hecubafb.h
ili9320.h
imx-ipu-image-convert.h
imx-ipu-v3.h
kyro.h
mach64.h
maxinefb.h
mbxfb.h
metronomefb.h
mipi_display.h
mmp_disp.h
neomagic.h
newport.h
of_display_timing.h
of_videomode.h
omap-panel-data.h
omapfb_dss.h
omapvrfb.h
permedia2.h
platform_lcd.h
pm3fb.h
pmag-ba-fb.h
pmagb-b-fb.h
pxa168fb.h
radeon.h
s1d13xxxfb.h
sa1100fb.h
samsung_fimd.h
sh_mobile_lcdc.h
sisfb.h
sstfb.h
tdfx.h
tgafb.h
trident.h
udlfb.h udlfb: handle unplug properly 2018-10-08 12:57:34 +02:00
uvesafb.h
vga.h
videomode.h
w100fb.h