提交 1828fe6c 编写于 作者: D Dave Airlie

drm/sysfs: protect sysfs removal code against being run twice.

a step towards correct hot unplug for USB devices, we need to
remove the userspace facing bits at the unplug time for correct
udev operation.
Signed-off-by: NDave Airlie <airlied@redhat.com>
上级 ce880cb8
...@@ -454,6 +454,8 @@ void drm_sysfs_connector_remove(struct drm_connector *connector) ...@@ -454,6 +454,8 @@ void drm_sysfs_connector_remove(struct drm_connector *connector)
{ {
int i; int i;
if (!connector->kdev.parent)
return;
DRM_DEBUG("removing \"%s\" from sysfs\n", DRM_DEBUG("removing \"%s\" from sysfs\n",
drm_get_connector_name(connector)); drm_get_connector_name(connector));
...@@ -461,6 +463,7 @@ void drm_sysfs_connector_remove(struct drm_connector *connector) ...@@ -461,6 +463,7 @@ void drm_sysfs_connector_remove(struct drm_connector *connector)
device_remove_file(&connector->kdev, &connector_attrs[i]); device_remove_file(&connector->kdev, &connector_attrs[i]);
sysfs_remove_bin_file(&connector->kdev.kobj, &edid_attr); sysfs_remove_bin_file(&connector->kdev.kobj, &edid_attr);
device_unregister(&connector->kdev); device_unregister(&connector->kdev);
connector->kdev.parent = NULL;
} }
EXPORT_SYMBOL(drm_sysfs_connector_remove); EXPORT_SYMBOL(drm_sysfs_connector_remove);
...@@ -533,7 +536,9 @@ int drm_sysfs_device_add(struct drm_minor *minor) ...@@ -533,7 +536,9 @@ int drm_sysfs_device_add(struct drm_minor *minor)
*/ */
void drm_sysfs_device_remove(struct drm_minor *minor) void drm_sysfs_device_remove(struct drm_minor *minor)
{ {
device_unregister(&minor->kdev); if (minor->kdev.parent)
device_unregister(&minor->kdev);
minor->kdev.parent = NULL;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册