linux/drivers/gpu/drm
Fabio Estevam bf6ba3aeb2 drm/etnaviv: Fix driver unregistering
Russell King reported:

"When removing and reloading the etnaviv module, the following splat
occurs:

sysfs: cannot create duplicate filename '/devices/platform/etnaviv'
CPU: 0 PID: 1471 Comm: modprobe Not tainted 4.17.0+ #1608
Hardware name: Marvell Dove (Cubox)
Backtrace:
[<c00157d4>] (dump_backtrace) from [<c0015b8c>] (show_stack+0x18/0x1c)
 r6:ef033e38 r5:ee07b340 r4:edb9d000 r3:00000000
[<c0015b74>] (show_stack) from [<c0620784>] (dump_stack+0x20/0x28)
[<c0620764>] (dump_stack) from [<c01bcd24>] (sysfs_warn_dup+0x5c/0x70)
[<c01bccc8>] (sysfs_warn_dup) from [<c01bce14>] (sysfs_create_dir_ns+0x90/0x98)
..."

Commit 246774d17f ("drm/etnaviv: remove the need for a gpu-subsystem
DT node") introduced DRM registration via
platform_device_register_simple(), but missed to call
platform_device_unregister() inside etnaviv_exit().

Fix the problem by calling platform_device_unregister() inside
etnaviv_exit(). While at it, also rearrange the function calls
in the exit path to make them happen in the opposite order of
registration.

Tested on a imx6-sabresd board.

Cc: <stable@vger.kernel.org>
Fixes: 246774d17f ("drm/etnaviv: remove the need for a gpu-subsystem DT node")
Reported-by: Russell King <linux@armlinux.org.uk>
Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
2018-06-27 15:26:52 +02:00
..
amd amd fixes for 4.18-rc1 2018-06-15 17:20:53 +09:00
arc drm/arcpgu: remove drm_encoder_slave 2018-01-30 18:05:25 +01:00
arm drm: mali-dp: Add YUV->RGB conversion support for video layers 2018-03-14 11:41:01 +00:00
armada drm: Don't pass clip to drm_atomic_helper_check_plane_state() 2018-03-05 20:48:25 +02:00
ast drm/ast: fix mode_valid's return type 2018-04-25 09:09:22 +02:00
atmel-hlcdc drm/atmel-hclcdc: Convert to the new generic alpha property 2018-04-16 21:20:40 +02:00
bochs drm/bochs: fix mode_valid's return type 2018-04-25 09:34:00 +02:00
bridge drm for v4.18-rc1 2018-06-06 08:16:33 -07:00
cirrus Linux 4.16-rc7 2018-03-28 14:30:41 +10:00
etnaviv drm/etnaviv: Fix driver unregistering 2018-06-27 15:26:52 +02:00
exynos treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
fsl-dcu
gma500 treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
hisilicon drm/hisilicon: fix mode_valid's return type 2018-04-25 09:09:22 +02:00
i2c Merge branch 'drm-tda998x-devel' of git://git.armlinux.org.uk/~rmk/linux-arm into drm-next 2018-05-22 10:20:45 +10:00
i810
i915 treewide: Use array_size() in vzalloc() 2018-06-12 16:19:22 -07:00
imx Linux 4.16-rc7 2018-03-28 14:30:41 +10:00
lib
mediatek drm/mediatek: Using the function drm_display_mode_to_videomode 2018-05-02 14:20:47 +08:00
meson drm/bridge/synopsys: dw-hdmi: fix dw_hdmi_setup_rx_sense 2018-05-30 13:42:39 -04:00
mga
mgag200 drm/mgag200: fix mode_valid's return type 2018-04-25 09:09:22 +02:00
msm treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
mxsfb drm/mxsfb: Use simple_display_pipe prepare_fb helper 2018-04-24 13:58:43 +02:00
nouveau treewide: Use array_size() in vmalloc() 2018-06-12 16:19:22 -07:00
omapdrm treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
panel drm/panel: Enable DSI transactions on the RPi panel. 2018-04-30 13:57:13 -07:00
pl111 drm/pl111: Fix module probe bug 2018-05-04 00:13:41 +02:00
qxl treewide: Use array_size() in vmalloc() 2018-06-12 16:19:22 -07:00
r128
radeon treewide: Use array_size() in vzalloc() 2018-06-12 16:19:22 -07:00
rcar-du DeviceTree updates for v4.18: 2018-06-07 14:06:31 -07:00
rockchip drm/rockchip: Disable blending for win0 2018-05-01 15:56:21 -04:00
savage treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
scheduler drm/scheduler: fix a corner case in dependency optimization 2018-05-25 11:02:14 -05:00
selftests treewide: Use array_size() in vzalloc() 2018-06-12 16:19:22 -07:00
shmobile drm: shmobile: remove unused MERAM support 2018-05-14 15:47:30 +02:00
sis
sti gpu: drm: sti: fix spelling mistake: "initialze" -> "initialize" 2018-05-02 13:09:49 +02:00
stm drm/stm: ltdc: fix warnings in ltdc_plane_create() 2018-04-27 11:02:58 +02:00
sun4i drm-misc-next for v4.18: 2018-04-30 09:32:43 +10:00
tdfx
tegra drm/tegra: Changes for v4.18-rc1 2018-05-22 10:45:43 +10:00
tilcdc drm/tilcdc: Fix setting clock divider for omap-l138 2018-05-09 19:55:18 +03:00
tinydrm treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
ttm treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
tve200 drm/tve200: Use simple_display_pipe prepare_fb helper 2018-04-24 13:58:06 +02:00
udl drm/udl: fix mode_valid's return type 2018-04-25 09:09:22 +02:00
v3d drm-misc-next-fixes for v4.18: 2018-06-08 15:52:54 +10:00
vc4 treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
vgem
via treewide: Use array_size() in vzalloc() 2018-06-12 16:19:22 -07:00
virtio drm-misc-next for v4.18: 2018-04-30 09:32:43 +10:00
vmwgfx drm for v4.18-rc1 2018-06-06 08:16:33 -07:00
xen drm for v4.18-rc1 2018-06-06 08:16:33 -07:00
zte drm/zte: Stop consulting plane->crtc 2018-03-29 19:14:21 +03:00
ati_pcigart.c
drm_agpsupport.c
drm_atomic_helper.c drm/rect: Handle rounding errors in drm_rect_clip_scaled, v3. 2018-05-04 11:09:54 +02:00
drm_atomic.c urgent i686 mmap fix for drm drivers 2018-05-18 14:08:53 +10:00
drm_auth.c drm: Check for lessee in DROP_MASTER ioctl 2018-01-31 09:27:51 +01:00
drm_blend.c drm/blend: Add a generic alpha property 2018-04-16 21:17:29 +02:00
drm_bridge.c
drm_bufs.c drm: dma_bufs: Fixed checkpatch issues 2018-03-19 09:31:20 -04:00
drm_cache.c
drm_color_mgmt.c kernel.h: Retain constant expression output for max()/min() 2018-04-05 14:17:16 -07:00
drm_connector.c drm: Expose modes with aspect ratio, only if requested 2018-05-11 09:06:39 +02:00
drm_context.c
drm_crtc_helper_internal.h
drm_crtc_helper.c
drm_crtc_internal.h drm: Don't EXPORT drm_add/reset_display_info 2018-04-24 21:34:53 +02:00
drm_crtc.c drm: Handle aspect ratio info in legacy modeset path 2018-05-11 09:05:18 +02:00
drm_debugfs_crc.c drm/crc: Add support for polling on the data fd. 2018-02-05 13:22:44 +01:00
drm_debugfs.c
drm_dma.c
drm_dp_aux_dev.c sched/wait, drivers/drm: Convert wait_on_atomic_t() usage to the new wait_var_event() API 2018-03-20 08:23:18 +01:00
drm_dp_dual_mode_helper.c drm/i915: Fix LSPCON TMDS output buffer enabling from low-power state 2018-04-18 16:33:14 +03:00
drm_dp_helper.c drm for v4.18-rc1 2018-06-06 08:16:33 -07:00
drm_dp_mst_topology.c drm/dp/mst: Fix off-by-one typo when dump payload table 2018-03-28 09:12:16 +03:00
drm_drv.c drm for v4.18-rc1 2018-06-06 08:16:33 -07:00
drm_dumb_buffers.c drm/dumb-buffers: Integer overflow in drm_mode_create_ioctl() 2018-05-16 17:56:06 +02:00
drm_edid_load.c
drm_edid.c treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
drm_encoder_slave.c
drm_encoder.c drm: Warn if plane/crtc/encoder/connector index exceeds our 32bit bitmasks 2018-01-29 18:46:53 +02:00
drm_fb_cma_helper.c
drm_fb_helper.c drm: Add aspect ratio parsing in DRM layer 2018-05-11 09:23:41 +02:00
drm_file.c drm: set FMODE_UNSIGNED_OFFSET for drm files 2018-05-15 14:46:04 +10:00
drm_flip_work.c
drm_fourcc.c drm/fourcc: Add a alpha field to drm_format_info 2018-01-29 12:07:47 +01:00
drm_framebuffer.c drm: remove all control node code 2018-05-03 21:26:32 +02:00
drm_gem_cma_helper.c
drm_gem_framebuffer_helper.c drm: Move simple_display_pipe prepare_fb helper into gem fb helpers 2018-04-24 13:57:22 +02:00
drm_gem.c drm/gem: Document that handle_create must be the last step 2018-03-26 17:42:06 +02:00
drm_global.c
drm_hashtab.c treewide: Use array_size() in vzalloc() 2018-06-12 16:19:22 -07:00
drm_info.c
drm_internal.h
drm_ioc32.c drm: Drop DRM_CONTROL_ALLOW from ioctls 2018-05-03 11:28:02 +02:00
drm_ioctl.c drm: Add DRM client cap for aspect-ratio 2018-05-11 09:05:03 +02:00
drm_irq.c
drm_kms_helper_common.c
drm_lease.c gpu: drm/lease:: Use list_{next/prev}_entry instead of list_entry 2018-03-26 10:38:06 +02:00
drm_legacy.h
drm_lock.c
drm_memory.c treewide: Use array_size() in vmalloc() 2018-06-12 16:19:22 -07:00
drm_mipi_dsi.c
drm_mm.c Linux 4.16-rc7 2018-03-28 14:30:41 +10:00
drm_mode_config.c
drm_mode_object.c
drm_modes.c drm: Add and handle new aspect ratios in DRM layer 2018-05-11 09:23:55 +02:00
drm_modeset_helper.c
drm_modeset_lock.c drm/atomic: Call ww_acquire_done after drm_modeset_lock_all 2018-03-05 10:35:32 +01:00
drm_of.c drm: of: simplify component probe code 2018-03-06 14:05:00 +05:30
drm_panel_orientation_quirks.c drm: panel-orientation-quirks: Convert to use match_string() helper 2018-05-10 11:36:25 -04:00
drm_panel.c
drm_pci.c
drm_plane_helper.c drm: Don't pass clip to drm_atomic_helper_check_plane_state() 2018-03-05 20:48:25 +02:00
drm_plane.c drm: Use plane->state->fb over plane->fb 2018-03-29 19:14:21 +03:00
drm_prime.c drm: Make the prime vmap/vunmap hooks optional. 2018-04-30 10:42:03 -07:00
drm_print.c drm: Reduce object size of DRM_DEV_<LEVEL> uses 2018-03-19 15:15:42 +01:00
drm_probe_helper.c Linux 4.16-rc7 2018-03-28 14:30:41 +10:00
drm_property.c drm: Don't pass the index to drm_property_add_enum() 2018-04-27 16:46:50 +03:00
drm_rect.c drm/rect: Handle rounding errors in drm_rect_clip_scaled, v3. 2018-05-04 11:09:54 +02:00
drm_scatter.c
drm_scdc_helper.c drm/scdc-helper: Convert errors into debug messages 2018-03-26 21:37:24 +03:00
drm_simple_kms_helper.c drm/simple-kms-helper: Plumb plane state to the enable hook 2018-03-28 19:19:32 +03:00
drm_syncobj.c Revert 190c462d5be19ba622a82f5fd0625087c870a1e6..bf3012ada1b2222e770de5c35c1bb16f73b3a01d" 2018-05-03 12:38:39 +02:00
drm_sysfs.c drm: remove all control node code 2018-05-03 21:26:32 +02:00
drm_trace_points.c
drm_trace.h
drm_vblank.c Merge tag 'drm-intel-next-2018-03-08' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2018-03-14 14:53:01 +10:00
drm_vm.c
drm_vma_manager.c
Kconfig drm/selftests: Add drm helper selftest 2018-05-04 11:36:45 +02:00
Makefile drm/selftests: Rename the Kconfig option to CONFIG_DRM_DEBUG_SELFTEST 2018-05-04 11:36:34 +02:00