Message ID | 3a659ed0-4072-4f01-9676-65d6b1a42678@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm: Series with core improvements/refactorings | expand |
On Sun, Sep 08, 2024 at 02:10:30PM GMT, Heiner Kallweit wrote: > These changes make the error path a little more robust, because exit > steps in drm_core_exit() don't have to ensure any longer that they > work properly even if the associated init step wasn't executed. Please use imperative style when describing changes. E.g. "Do this and that because of ABCDEF". See Documentation/process/submitting-patches.rst > In addition these changes allow to annotate a few functions as __exit, > saving some memory if drm is built-in. This should be a separate commit. > > Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> > --- > drivers/accel/drm_accel.c | 2 +- > drivers/gpu/drm/drm_drv.c | 18 ++++++++++++------ > drivers/gpu/drm/drm_panic.c | 4 ++-- > drivers/gpu/drm/drm_privacy_screen_x86.c | 2 +- > drivers/gpu/drm/drm_sysfs.c | 2 -- > 5 files changed, 16 insertions(+), 12 deletions(-) > > diff --git a/drivers/accel/drm_accel.c b/drivers/accel/drm_accel.c > index aa826033b..25fdbea36 100644 > --- a/drivers/accel/drm_accel.c > +++ b/drivers/accel/drm_accel.c > @@ -191,7 +191,7 @@ static const struct file_operations accel_stub_fops = { > .llseek = noop_llseek, > }; > > -void accel_core_exit(void) > +void __exit accel_core_exit(void) > { > unregister_chrdev(ACCEL_MAJOR, "accel"); > debugfs_remove(accel_debugfs_root); > diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c > index ac30b0ec9..ea59994e5 100644 > --- a/drivers/gpu/drm/drm_drv.c > +++ b/drivers/gpu/drm/drm_drv.c > @@ -1062,7 +1062,7 @@ static const struct file_operations drm_stub_fops = { > .llseek = noop_llseek, > }; > > -static void drm_core_exit(void) > +static void __exit drm_core_exit(void) > { > drm_privacy_screen_lookup_exit(); > drm_panic_exit(); > @@ -1084,18 +1084,18 @@ static int __init drm_core_init(void) > ret = drm_sysfs_init(); > if (ret < 0) { > DRM_ERROR("Cannot create DRM class: %d\n", ret); > - goto error; > + goto err_ida; > } > > drm_debugfs_root = debugfs_create_dir("dri", NULL); > > ret = register_chrdev(DRM_MAJOR, "drm", &drm_stub_fops); > if (ret < 0) > - goto error; > + goto err_debugfs; > > ret = accel_core_init(); > if (ret < 0) > - goto error; > + goto err_chrdev; > > drm_panic_init(); > > @@ -1106,8 +1106,14 @@ static int __init drm_core_init(void) > DRM_DEBUG("Initialized\n"); > return 0; > > -error: > - drm_core_exit(); > +err_chrdev: > + unregister_chrdev(DRM_MAJOR, "drm"); > +err_debugfs: > + debugfs_remove(drm_debugfs_root); > + drm_sysfs_destroy(); > +err_ida: > + WARN_ON(!xa_empty(&drm_minors_xa)); > + drm_connector_ida_destroy(); > return ret; > } > > diff --git a/drivers/gpu/drm/drm_panic.c b/drivers/gpu/drm/drm_panic.c > index 74412b7bf..d00fdb12d 100644 > --- a/drivers/gpu/drm/drm_panic.c > +++ b/drivers/gpu/drm/drm_panic.c > @@ -679,7 +679,7 @@ static void __init drm_panic_qr_init(void) > GFP_KERNEL); > } > > -static void drm_panic_qr_exit(void) > +static void __exit drm_panic_qr_exit(void) > { > kfree(qrbuf1); > qrbuf1 = NULL; > @@ -1058,7 +1058,7 @@ void __init drm_panic_init(void) > /** > * drm_panic_exit() - Free the resources taken by drm_panic_exit() > */ > -void drm_panic_exit(void) > +void __exit drm_panic_exit(void) > { > drm_panic_qr_exit(); > } > diff --git a/drivers/gpu/drm/drm_privacy_screen_x86.c b/drivers/gpu/drm/drm_privacy_screen_x86.c > index 72ed40e49..6be96a0cc 100644 > --- a/drivers/gpu/drm/drm_privacy_screen_x86.c > +++ b/drivers/gpu/drm/drm_privacy_screen_x86.c > @@ -98,7 +98,7 @@ void __init drm_privacy_screen_lookup_init(void) > } > } > > -void drm_privacy_screen_lookup_exit(void) > +void __exit drm_privacy_screen_lookup_exit(void) > { > if (arch_lookup.provider) > drm_privacy_screen_lookup_remove(&arch_lookup); > diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c > index a713f0500..f8577043e 100644 > --- a/drivers/gpu/drm/drm_sysfs.c > +++ b/drivers/gpu/drm/drm_sysfs.c > @@ -155,8 +155,6 @@ int drm_sysfs_init(void) > */ > void drm_sysfs_destroy(void) > { > - if (IS_ERR_OR_NULL(drm_class)) > - return; > drm_sysfs_acpi_unregister(); > class_destroy(drm_class); > drm_class = NULL; > -- > 2.46.0 > >
diff --git a/drivers/accel/drm_accel.c b/drivers/accel/drm_accel.c index aa826033b..25fdbea36 100644 --- a/drivers/accel/drm_accel.c +++ b/drivers/accel/drm_accel.c @@ -191,7 +191,7 @@ static const struct file_operations accel_stub_fops = { .llseek = noop_llseek, }; -void accel_core_exit(void) +void __exit accel_core_exit(void) { unregister_chrdev(ACCEL_MAJOR, "accel"); debugfs_remove(accel_debugfs_root); diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index ac30b0ec9..ea59994e5 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -1062,7 +1062,7 @@ static const struct file_operations drm_stub_fops = { .llseek = noop_llseek, }; -static void drm_core_exit(void) +static void __exit drm_core_exit(void) { drm_privacy_screen_lookup_exit(); drm_panic_exit(); @@ -1084,18 +1084,18 @@ static int __init drm_core_init(void) ret = drm_sysfs_init(); if (ret < 0) { DRM_ERROR("Cannot create DRM class: %d\n", ret); - goto error; + goto err_ida; } drm_debugfs_root = debugfs_create_dir("dri", NULL); ret = register_chrdev(DRM_MAJOR, "drm", &drm_stub_fops); if (ret < 0) - goto error; + goto err_debugfs; ret = accel_core_init(); if (ret < 0) - goto error; + goto err_chrdev; drm_panic_init(); @@ -1106,8 +1106,14 @@ static int __init drm_core_init(void) DRM_DEBUG("Initialized\n"); return 0; -error: - drm_core_exit(); +err_chrdev: + unregister_chrdev(DRM_MAJOR, "drm"); +err_debugfs: + debugfs_remove(drm_debugfs_root); + drm_sysfs_destroy(); +err_ida: + WARN_ON(!xa_empty(&drm_minors_xa)); + drm_connector_ida_destroy(); return ret; } diff --git a/drivers/gpu/drm/drm_panic.c b/drivers/gpu/drm/drm_panic.c index 74412b7bf..d00fdb12d 100644 --- a/drivers/gpu/drm/drm_panic.c +++ b/drivers/gpu/drm/drm_panic.c @@ -679,7 +679,7 @@ static void __init drm_panic_qr_init(void) GFP_KERNEL); } -static void drm_panic_qr_exit(void) +static void __exit drm_panic_qr_exit(void) { kfree(qrbuf1); qrbuf1 = NULL; @@ -1058,7 +1058,7 @@ void __init drm_panic_init(void) /** * drm_panic_exit() - Free the resources taken by drm_panic_exit() */ -void drm_panic_exit(void) +void __exit drm_panic_exit(void) { drm_panic_qr_exit(); } diff --git a/drivers/gpu/drm/drm_privacy_screen_x86.c b/drivers/gpu/drm/drm_privacy_screen_x86.c index 72ed40e49..6be96a0cc 100644 --- a/drivers/gpu/drm/drm_privacy_screen_x86.c +++ b/drivers/gpu/drm/drm_privacy_screen_x86.c @@ -98,7 +98,7 @@ void __init drm_privacy_screen_lookup_init(void) } } -void drm_privacy_screen_lookup_exit(void) +void __exit drm_privacy_screen_lookup_exit(void) { if (arch_lookup.provider) drm_privacy_screen_lookup_remove(&arch_lookup); diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c index a713f0500..f8577043e 100644 --- a/drivers/gpu/drm/drm_sysfs.c +++ b/drivers/gpu/drm/drm_sysfs.c @@ -155,8 +155,6 @@ int drm_sysfs_init(void) */ void drm_sysfs_destroy(void) { - if (IS_ERR_OR_NULL(drm_class)) - return; drm_sysfs_acpi_unregister(); class_destroy(drm_class); drm_class = NULL;
These changes make the error path a little more robust, because exit steps in drm_core_exit() don't have to ensure any longer that they work properly even if the associated init step wasn't executed. In addition these changes allow to annotate a few functions as __exit, saving some memory if drm is built-in. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> --- drivers/accel/drm_accel.c | 2 +- drivers/gpu/drm/drm_drv.c | 18 ++++++++++++------ drivers/gpu/drm/drm_panic.c | 4 ++-- drivers/gpu/drm/drm_privacy_screen_x86.c | 2 +- drivers/gpu/drm/drm_sysfs.c | 2 -- 5 files changed, 16 insertions(+), 12 deletions(-)