]> git.itanic.dy.fi Git - linux-stable/commitdiff
platform/surface: avoid flush_scheduled_work() usage
authorTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Fri, 10 Jun 2022 05:41:58 +0000 (14:41 +0900)
committerHans de Goede <hdegoede@redhat.com>
Wed, 22 Jun 2022 10:03:52 +0000 (12:03 +0200)
Use local wq in order to avoid flush_scheduled_work() usage.

Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Reviewed-by: Maximilian Luz <luzmaximilian@gmail.com>
Tested-by: Maximilian Luz <luzmaximilian@gmail.com>
Link: https://lore.kernel.org/r/63ec2d45-c67c-1134-f6d3-490c8ba67a01@I-love.SAKURA.ne.jp
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/surface/surface_acpi_notify.c

index 7b758f8cc137e2780a3375381c8790097aef4809..c0e12f0b9b79ba633efa44a09b2c33e26318b6a6 100644 (file)
@@ -37,6 +37,7 @@ struct san_data {
 #define to_san_data(ptr, member) \
        container_of(ptr, struct san_data, member)
 
+static struct workqueue_struct *san_wq;
 
 /* -- dGPU notifier interface. ---------------------------------------------- */
 
@@ -356,7 +357,7 @@ static u32 san_evt_bat_nf(struct ssam_event_notifier *nf,
 
        memcpy(&work->event, event, sizeof(struct ssam_event) + event->length);
 
-       schedule_delayed_work(&work->work, delay);
+       queue_delayed_work(san_wq, &work->work, delay);
        return SSAM_NOTIF_HANDLED;
 }
 
@@ -861,7 +862,7 @@ static int san_remove(struct platform_device *pdev)
         * We have unregistered our event sources. Now we need to ensure that
         * all delayed works they may have spawned are run to completion.
         */
-       flush_scheduled_work();
+       flush_workqueue(san_wq);
 
        return 0;
 }
@@ -881,7 +882,27 @@ static struct platform_driver surface_acpi_notify = {
                .probe_type = PROBE_PREFER_ASYNCHRONOUS,
        },
 };
-module_platform_driver(surface_acpi_notify);
+
+static int __init san_init(void)
+{
+       int ret;
+
+       san_wq = alloc_workqueue("san_wq", 0, 0);
+       if (!san_wq)
+               return -ENOMEM;
+       ret = platform_driver_register(&surface_acpi_notify);
+       if (ret)
+               destroy_workqueue(san_wq);
+       return ret;
+}
+module_init(san_init);
+
+static void __exit san_exit(void)
+{
+       platform_driver_unregister(&surface_acpi_notify);
+       destroy_workqueue(san_wq);
+}
+module_exit(san_exit);
 
 MODULE_AUTHOR("Maximilian Luz <luzmaximilian@gmail.com>");
 MODULE_DESCRIPTION("Surface ACPI Notify driver for Surface System Aggregator Module");