| From e396900e649b0af31161634d87fe37076f46c12b Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Guido=20Mart=C3=ADnez?= <guido@vanguardiasur.com.ar> |
| Date: Tue, 17 Jun 2014 11:17:04 -0300 |
| Subject: drm/tilcdc: panel: fix dangling sysfs connector node |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: =?UTF-8?q?Guido=20Mart=C3=ADnez?= <guido@vanguardiasur.com.ar> |
| |
| commit e396900e649b0af31161634d87fe37076f46c12b upstream. |
| |
| Add a drm_sysfs_connector_remove call when we destroy the panel to make |
| sure the connector node in sysfs gets deleted. |
| |
| This is required for proper unload and re-load of this driver as a |
| module. Without this, we would get a warning at re-load time like so: |
| |
| ------------[ cut here ]------------ |
| WARNING: CPU: 0 PID: 824 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x54/0x74() |
| sysfs: cannot create duplicate filename '/class/drm/card0-LVDS-1' |
| Modules linked in: [...] |
| CPU: 0 PID: 824 Comm: modprobe Not tainted 3.15.0-rc4-00027-g6484f96-dirty #81 |
| [<c0013bb8>] (unwind_backtrace) from [<c0011824>] (show_stack+0x10/0x14) |
| [<c0011824>] (show_stack) from [<c0034e8c>] (warn_slowpath_common+0x68/0x88) |
| [<c0034e8c>] (warn_slowpath_common) from [<c0034edc>] (warn_slowpath_fmt+0x30/0x40) |
| [<c0034edc>] (warn_slowpath_fmt) from [<c01243f4>] (sysfs_warn_dup+0x54/0x74) |
| [<c01243f4>] (sysfs_warn_dup) from [<c0124708>] (sysfs_do_create_link_sd.isra.2+0xb0/0xb8) |
| [<c0124708>] (sysfs_do_create_link_sd.isra.2) from [<c02ae37c>] (device_add+0x338/0x520) |
| [<c02ae37c>] (device_add) from [<c02ae6e8>] (device_create_groups_vargs+0xa0/0xc4) |
| [<c02ae6e8>] (device_create_groups_vargs) from [<c02ae758>] (device_create+0x24/0x2c) |
| [<c02ae758>] (device_create) from [<c029b4ec>] (drm_sysfs_connector_add+0x64/0x204) |
| [<c029b4ec>] (drm_sysfs_connector_add) from [<bf0b1fec>] (panel_modeset_init+0xb8/0x134 [tilcdc]) |
| [<bf0b1fec>] (panel_modeset_init [tilcdc]) from [<bf0b2bf0>] (tilcdc_load+0x214/0x4c0 [tilcdc]) |
| [<bf0b2bf0>] (tilcdc_load [tilcdc]) from [<c029955c>] (drm_dev_register+0xa4/0x104) |
| [ .. snip .. ] |
| ---[ end trace b2d09cd9578b0497 ]--- |
| [drm:drm_sysfs_connector_add] *ERROR* failed to register connector device: -17 |
| |
| Signed-off-by: Guido Martínez <guido@vanguardiasur.com.ar> |
| Tested-by: Darren Etheridge <detheridge@ti.com> |
| Signed-off-by: Dave Airlie <airlied@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/tilcdc/tilcdc_panel.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c |
| +++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c |
| @@ -151,6 +151,7 @@ struct panel_connector { |
| static void panel_connector_destroy(struct drm_connector *connector) |
| { |
| struct panel_connector *panel_connector = to_panel_connector(connector); |
| + drm_sysfs_connector_remove(connector); |
| drm_connector_cleanup(connector); |
| kfree(panel_connector); |
| } |