From: Greg Kroah-Hartman Date: Thu, 16 Sep 2021 17:24:45 +0000 (+0200) Subject: drop cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch from... X-Git-Tag: v5.10.67~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e9d99ca2ca770ac61e0d1da0ffc59b23556e4134;p=thirdparty%2Fkernel%2Fstable-queue.git drop cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch from everywhere --- diff --git a/queue-5.10/cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch b/queue-5.10/cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch deleted file mode 100644 index 4562196f6ba..00000000000 --- a/queue-5.10/cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch +++ /dev/null @@ -1,125 +0,0 @@ -From e5c6b312ce3cc97e90ea159446e6bfa06645364d Mon Sep 17 00:00:00 2001 -From: Kevin Hao -Date: Thu, 5 Aug 2021 15:29:17 +0800 -Subject: cpufreq: schedutil: Use kobject release() method to free sugov_tunables - -From: Kevin Hao - -commit e5c6b312ce3cc97e90ea159446e6bfa06645364d upstream. - -The struct sugov_tunables is protected by the kobject, so we can't free -it directly. Otherwise we would get a call trace like this: - ODEBUG: free active (active state 0) object type: timer_list hint: delayed_work_timer_fn+0x0/0x30 - WARNING: CPU: 3 PID: 720 at lib/debugobjects.c:505 debug_print_object+0xb8/0x100 - Modules linked in: - CPU: 3 PID: 720 Comm: a.sh Tainted: G W 5.14.0-rc1-next-20210715-yocto-standard+ #507 - Hardware name: Marvell OcteonTX CN96XX board (DT) - pstate: 40400009 (nZcv daif +PAN -UAO -TCO BTYPE=--) - pc : debug_print_object+0xb8/0x100 - lr : debug_print_object+0xb8/0x100 - sp : ffff80001ecaf910 - x29: ffff80001ecaf910 x28: ffff00011b10b8d0 x27: ffff800011043d80 - x26: ffff00011a8f0000 x25: ffff800013cb3ff0 x24: 0000000000000000 - x23: ffff80001142aa68 x22: ffff800011043d80 x21: ffff00010de46f20 - x20: ffff800013c0c520 x19: ffff800011d8f5b0 x18: 0000000000000010 - x17: 6e6968207473696c x16: 5f72656d6974203a x15: 6570797420746365 - x14: 6a626f2029302065 x13: 303378302f307830 x12: 2b6e665f72656d69 - x11: ffff8000124b1560 x10: ffff800012331520 x9 : ffff8000100ca6b0 - x8 : 000000000017ffe8 x7 : c0000000fffeffff x6 : 0000000000000001 - x5 : ffff800011d8c000 x4 : ffff800011d8c740 x3 : 0000000000000000 - x2 : ffff0001108301c0 x1 : ab3c90eedf9c0f00 x0 : 0000000000000000 - Call trace: - debug_print_object+0xb8/0x100 - __debug_check_no_obj_freed+0x1c0/0x230 - debug_check_no_obj_freed+0x20/0x88 - slab_free_freelist_hook+0x154/0x1c8 - kfree+0x114/0x5d0 - sugov_exit+0xbc/0xc0 - cpufreq_exit_governor+0x44/0x90 - cpufreq_set_policy+0x268/0x4a8 - store_scaling_governor+0xe0/0x128 - store+0xc0/0xf0 - sysfs_kf_write+0x54/0x80 - kernfs_fop_write_iter+0x128/0x1c0 - new_sync_write+0xf0/0x190 - vfs_write+0x2d4/0x478 - ksys_write+0x74/0x100 - __arm64_sys_write+0x24/0x30 - invoke_syscall.constprop.0+0x54/0xe0 - do_el0_svc+0x64/0x158 - el0_svc+0x2c/0xb0 - el0t_64_sync_handler+0xb0/0xb8 - el0t_64_sync+0x198/0x19c - irq event stamp: 5518 - hardirqs last enabled at (5517): [] console_unlock+0x554/0x6c8 - hardirqs last disabled at (5518): [] el1_dbg+0x28/0xa0 - softirqs last enabled at (5504): [] __do_softirq+0x4d0/0x6c0 - softirqs last disabled at (5483): [] irq_exit+0x1b0/0x1b8 - -So split the original sugov_tunables_free() into two functions, -sugov_clear_global_tunables() is just used to clear the global_tunables -and the new sugov_tunables_free() is used as kobj_type::release to -release the sugov_tunables safely. - -Fixes: 9bdcb44e391d ("cpufreq: schedutil: New governor based on scheduler utilization data") -Cc: 4.7+ # 4.7+ -Signed-off-by: Kevin Hao -Acked-by: Viresh Kumar -Signed-off-by: Rafael J. Wysocki -Signed-off-by: Greg Kroah-Hartman ---- - kernel/sched/cpufreq_schedutil.c | 16 +++++++++++----- - 1 file changed, 11 insertions(+), 5 deletions(-) - ---- a/kernel/sched/cpufreq_schedutil.c -+++ b/kernel/sched/cpufreq_schedutil.c -@@ -610,9 +610,17 @@ static struct attribute *sugov_attrs[] = - }; - ATTRIBUTE_GROUPS(sugov); - -+static void sugov_tunables_free(struct kobject *kobj) -+{ -+ struct gov_attr_set *attr_set = container_of(kobj, struct gov_attr_set, kobj); -+ -+ kfree(to_sugov_tunables(attr_set)); -+} -+ - static struct kobj_type sugov_tunables_ktype = { - .default_groups = sugov_groups, - .sysfs_ops = &governor_sysfs_ops, -+ .release = &sugov_tunables_free, - }; - - /********************** cpufreq governor interface *********************/ -@@ -712,12 +720,10 @@ static struct sugov_tunables *sugov_tuna - return tunables; - } - --static void sugov_tunables_free(struct sugov_tunables *tunables) -+static void sugov_clear_global_tunables(void) - { - if (!have_governor_per_policy()) - global_tunables = NULL; -- -- kfree(tunables); - } - - static int sugov_init(struct cpufreq_policy *policy) -@@ -780,7 +786,7 @@ out: - fail: - kobject_put(&tunables->attr_set.kobj); - policy->governor_data = NULL; -- sugov_tunables_free(tunables); -+ sugov_clear_global_tunables(); - - stop_kthread: - sugov_kthread_stop(sg_policy); -@@ -807,7 +813,7 @@ static void sugov_exit(struct cpufreq_po - count = gov_attr_set_put(&tunables->attr_set, &sg_policy->tunables_hook); - policy->governor_data = NULL; - if (!count) -- sugov_tunables_free(tunables); -+ sugov_clear_global_tunables(); - - mutex_unlock(&global_tunables_lock); - diff --git a/queue-5.10/series b/queue-5.10/series index 69ad7de7d70..a52e2173989 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -30,7 +30,6 @@ wcn36xx-ensure-finish-scan-is-not-requested-before-start-scan.patch crypto-public_key-fix-overflow-during-implicit-conversion.patch block-bfq-fix-bfq_set_next_ioprio_data.patch power-supply-max17042-handle-fails-of-reading-status-register.patch -cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch dm-crypt-avoid-percpu_counter-spinlock-contention-in-crypt_page_alloc.patch crypto-ccp-shutdown-sev-firmware-on-kexec.patch vmci-fix-null-pointer-dereference-when-unmapping-queue-pair.patch diff --git a/queue-5.13/cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch b/queue-5.13/cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch deleted file mode 100644 index d03c97b6f79..00000000000 --- a/queue-5.13/cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch +++ /dev/null @@ -1,125 +0,0 @@ -From e5c6b312ce3cc97e90ea159446e6bfa06645364d Mon Sep 17 00:00:00 2001 -From: Kevin Hao -Date: Thu, 5 Aug 2021 15:29:17 +0800 -Subject: cpufreq: schedutil: Use kobject release() method to free sugov_tunables - -From: Kevin Hao - -commit e5c6b312ce3cc97e90ea159446e6bfa06645364d upstream. - -The struct sugov_tunables is protected by the kobject, so we can't free -it directly. Otherwise we would get a call trace like this: - ODEBUG: free active (active state 0) object type: timer_list hint: delayed_work_timer_fn+0x0/0x30 - WARNING: CPU: 3 PID: 720 at lib/debugobjects.c:505 debug_print_object+0xb8/0x100 - Modules linked in: - CPU: 3 PID: 720 Comm: a.sh Tainted: G W 5.14.0-rc1-next-20210715-yocto-standard+ #507 - Hardware name: Marvell OcteonTX CN96XX board (DT) - pstate: 40400009 (nZcv daif +PAN -UAO -TCO BTYPE=--) - pc : debug_print_object+0xb8/0x100 - lr : debug_print_object+0xb8/0x100 - sp : ffff80001ecaf910 - x29: ffff80001ecaf910 x28: ffff00011b10b8d0 x27: ffff800011043d80 - x26: ffff00011a8f0000 x25: ffff800013cb3ff0 x24: 0000000000000000 - x23: ffff80001142aa68 x22: ffff800011043d80 x21: ffff00010de46f20 - x20: ffff800013c0c520 x19: ffff800011d8f5b0 x18: 0000000000000010 - x17: 6e6968207473696c x16: 5f72656d6974203a x15: 6570797420746365 - x14: 6a626f2029302065 x13: 303378302f307830 x12: 2b6e665f72656d69 - x11: ffff8000124b1560 x10: ffff800012331520 x9 : ffff8000100ca6b0 - x8 : 000000000017ffe8 x7 : c0000000fffeffff x6 : 0000000000000001 - x5 : ffff800011d8c000 x4 : ffff800011d8c740 x3 : 0000000000000000 - x2 : ffff0001108301c0 x1 : ab3c90eedf9c0f00 x0 : 0000000000000000 - Call trace: - debug_print_object+0xb8/0x100 - __debug_check_no_obj_freed+0x1c0/0x230 - debug_check_no_obj_freed+0x20/0x88 - slab_free_freelist_hook+0x154/0x1c8 - kfree+0x114/0x5d0 - sugov_exit+0xbc/0xc0 - cpufreq_exit_governor+0x44/0x90 - cpufreq_set_policy+0x268/0x4a8 - store_scaling_governor+0xe0/0x128 - store+0xc0/0xf0 - sysfs_kf_write+0x54/0x80 - kernfs_fop_write_iter+0x128/0x1c0 - new_sync_write+0xf0/0x190 - vfs_write+0x2d4/0x478 - ksys_write+0x74/0x100 - __arm64_sys_write+0x24/0x30 - invoke_syscall.constprop.0+0x54/0xe0 - do_el0_svc+0x64/0x158 - el0_svc+0x2c/0xb0 - el0t_64_sync_handler+0xb0/0xb8 - el0t_64_sync+0x198/0x19c - irq event stamp: 5518 - hardirqs last enabled at (5517): [] console_unlock+0x554/0x6c8 - hardirqs last disabled at (5518): [] el1_dbg+0x28/0xa0 - softirqs last enabled at (5504): [] __do_softirq+0x4d0/0x6c0 - softirqs last disabled at (5483): [] irq_exit+0x1b0/0x1b8 - -So split the original sugov_tunables_free() into two functions, -sugov_clear_global_tunables() is just used to clear the global_tunables -and the new sugov_tunables_free() is used as kobj_type::release to -release the sugov_tunables safely. - -Fixes: 9bdcb44e391d ("cpufreq: schedutil: New governor based on scheduler utilization data") -Cc: 4.7+ # 4.7+ -Signed-off-by: Kevin Hao -Acked-by: Viresh Kumar -Signed-off-by: Rafael J. Wysocki -Signed-off-by: Greg Kroah-Hartman ---- - kernel/sched/cpufreq_schedutil.c | 16 +++++++++++----- - 1 file changed, 11 insertions(+), 5 deletions(-) - ---- a/kernel/sched/cpufreq_schedutil.c -+++ b/kernel/sched/cpufreq_schedutil.c -@@ -536,9 +536,17 @@ static struct attribute *sugov_attrs[] = - }; - ATTRIBUTE_GROUPS(sugov); - -+static void sugov_tunables_free(struct kobject *kobj) -+{ -+ struct gov_attr_set *attr_set = container_of(kobj, struct gov_attr_set, kobj); -+ -+ kfree(to_sugov_tunables(attr_set)); -+} -+ - static struct kobj_type sugov_tunables_ktype = { - .default_groups = sugov_groups, - .sysfs_ops = &governor_sysfs_ops, -+ .release = &sugov_tunables_free, - }; - - /********************** cpufreq governor interface *********************/ -@@ -638,12 +646,10 @@ static struct sugov_tunables *sugov_tuna - return tunables; - } - --static void sugov_tunables_free(struct sugov_tunables *tunables) -+static void sugov_clear_global_tunables(void) - { - if (!have_governor_per_policy()) - global_tunables = NULL; -- -- kfree(tunables); - } - - static int sugov_init(struct cpufreq_policy *policy) -@@ -706,7 +712,7 @@ out: - fail: - kobject_put(&tunables->attr_set.kobj); - policy->governor_data = NULL; -- sugov_tunables_free(tunables); -+ sugov_clear_global_tunables(); - - stop_kthread: - sugov_kthread_stop(sg_policy); -@@ -733,7 +739,7 @@ static void sugov_exit(struct cpufreq_po - count = gov_attr_set_put(&tunables->attr_set, &sg_policy->tunables_hook); - policy->governor_data = NULL; - if (!count) -- sugov_tunables_free(tunables); -+ sugov_clear_global_tunables(); - - mutex_unlock(&global_tunables_lock); - diff --git a/queue-5.13/series b/queue-5.13/series index 16f1998e236..3ca13b9d1a2 100644 --- a/queue-5.13/series +++ b/queue-5.13/series @@ -36,7 +36,6 @@ wcn36xx-ensure-finish-scan-is-not-requested-before-start-scan.patch crypto-public_key-fix-overflow-during-implicit-conversion.patch block-bfq-fix-bfq_set_next_ioprio_data.patch power-supply-max17042-handle-fails-of-reading-status-register.patch -cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch dm-crypt-avoid-percpu_counter-spinlock-contention-in-crypt_page_alloc.patch crypto-ccp-shutdown-sev-firmware-on-kexec.patch spi-fsi-reduce-max-transfer-size-to-8-bytes.patch diff --git a/queue-5.14/cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch b/queue-5.14/cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch deleted file mode 100644 index 67218754afa..00000000000 --- a/queue-5.14/cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch +++ /dev/null @@ -1,125 +0,0 @@ -From e5c6b312ce3cc97e90ea159446e6bfa06645364d Mon Sep 17 00:00:00 2001 -From: Kevin Hao -Date: Thu, 5 Aug 2021 15:29:17 +0800 -Subject: cpufreq: schedutil: Use kobject release() method to free sugov_tunables - -From: Kevin Hao - -commit e5c6b312ce3cc97e90ea159446e6bfa06645364d upstream. - -The struct sugov_tunables is protected by the kobject, so we can't free -it directly. Otherwise we would get a call trace like this: - ODEBUG: free active (active state 0) object type: timer_list hint: delayed_work_timer_fn+0x0/0x30 - WARNING: CPU: 3 PID: 720 at lib/debugobjects.c:505 debug_print_object+0xb8/0x100 - Modules linked in: - CPU: 3 PID: 720 Comm: a.sh Tainted: G W 5.14.0-rc1-next-20210715-yocto-standard+ #507 - Hardware name: Marvell OcteonTX CN96XX board (DT) - pstate: 40400009 (nZcv daif +PAN -UAO -TCO BTYPE=--) - pc : debug_print_object+0xb8/0x100 - lr : debug_print_object+0xb8/0x100 - sp : ffff80001ecaf910 - x29: ffff80001ecaf910 x28: ffff00011b10b8d0 x27: ffff800011043d80 - x26: ffff00011a8f0000 x25: ffff800013cb3ff0 x24: 0000000000000000 - x23: ffff80001142aa68 x22: ffff800011043d80 x21: ffff00010de46f20 - x20: ffff800013c0c520 x19: ffff800011d8f5b0 x18: 0000000000000010 - x17: 6e6968207473696c x16: 5f72656d6974203a x15: 6570797420746365 - x14: 6a626f2029302065 x13: 303378302f307830 x12: 2b6e665f72656d69 - x11: ffff8000124b1560 x10: ffff800012331520 x9 : ffff8000100ca6b0 - x8 : 000000000017ffe8 x7 : c0000000fffeffff x6 : 0000000000000001 - x5 : ffff800011d8c000 x4 : ffff800011d8c740 x3 : 0000000000000000 - x2 : ffff0001108301c0 x1 : ab3c90eedf9c0f00 x0 : 0000000000000000 - Call trace: - debug_print_object+0xb8/0x100 - __debug_check_no_obj_freed+0x1c0/0x230 - debug_check_no_obj_freed+0x20/0x88 - slab_free_freelist_hook+0x154/0x1c8 - kfree+0x114/0x5d0 - sugov_exit+0xbc/0xc0 - cpufreq_exit_governor+0x44/0x90 - cpufreq_set_policy+0x268/0x4a8 - store_scaling_governor+0xe0/0x128 - store+0xc0/0xf0 - sysfs_kf_write+0x54/0x80 - kernfs_fop_write_iter+0x128/0x1c0 - new_sync_write+0xf0/0x190 - vfs_write+0x2d4/0x478 - ksys_write+0x74/0x100 - __arm64_sys_write+0x24/0x30 - invoke_syscall.constprop.0+0x54/0xe0 - do_el0_svc+0x64/0x158 - el0_svc+0x2c/0xb0 - el0t_64_sync_handler+0xb0/0xb8 - el0t_64_sync+0x198/0x19c - irq event stamp: 5518 - hardirqs last enabled at (5517): [] console_unlock+0x554/0x6c8 - hardirqs last disabled at (5518): [] el1_dbg+0x28/0xa0 - softirqs last enabled at (5504): [] __do_softirq+0x4d0/0x6c0 - softirqs last disabled at (5483): [] irq_exit+0x1b0/0x1b8 - -So split the original sugov_tunables_free() into two functions, -sugov_clear_global_tunables() is just used to clear the global_tunables -and the new sugov_tunables_free() is used as kobj_type::release to -release the sugov_tunables safely. - -Fixes: 9bdcb44e391d ("cpufreq: schedutil: New governor based on scheduler utilization data") -Cc: 4.7+ # 4.7+ -Signed-off-by: Kevin Hao -Acked-by: Viresh Kumar -Signed-off-by: Rafael J. Wysocki -Signed-off-by: Greg Kroah-Hartman ---- - kernel/sched/cpufreq_schedutil.c | 16 +++++++++++----- - 1 file changed, 11 insertions(+), 5 deletions(-) - ---- a/kernel/sched/cpufreq_schedutil.c -+++ b/kernel/sched/cpufreq_schedutil.c -@@ -537,9 +537,17 @@ static struct attribute *sugov_attrs[] = - }; - ATTRIBUTE_GROUPS(sugov); - -+static void sugov_tunables_free(struct kobject *kobj) -+{ -+ struct gov_attr_set *attr_set = container_of(kobj, struct gov_attr_set, kobj); -+ -+ kfree(to_sugov_tunables(attr_set)); -+} -+ - static struct kobj_type sugov_tunables_ktype = { - .default_groups = sugov_groups, - .sysfs_ops = &governor_sysfs_ops, -+ .release = &sugov_tunables_free, - }; - - /********************** cpufreq governor interface *********************/ -@@ -639,12 +647,10 @@ static struct sugov_tunables *sugov_tuna - return tunables; - } - --static void sugov_tunables_free(struct sugov_tunables *tunables) -+static void sugov_clear_global_tunables(void) - { - if (!have_governor_per_policy()) - global_tunables = NULL; -- -- kfree(tunables); - } - - static int sugov_init(struct cpufreq_policy *policy) -@@ -707,7 +713,7 @@ out: - fail: - kobject_put(&tunables->attr_set.kobj); - policy->governor_data = NULL; -- sugov_tunables_free(tunables); -+ sugov_clear_global_tunables(); - - stop_kthread: - sugov_kthread_stop(sg_policy); -@@ -734,7 +740,7 @@ static void sugov_exit(struct cpufreq_po - count = gov_attr_set_put(&tunables->attr_set, &sg_policy->tunables_hook); - policy->governor_data = NULL; - if (!count) -- sugov_tunables_free(tunables); -+ sugov_clear_global_tunables(); - - mutex_unlock(&global_tunables_lock); - diff --git a/queue-5.14/series b/queue-5.14/series index 37bede0d692..9b1eb479d92 100644 --- a/queue-5.14/series +++ b/queue-5.14/series @@ -43,7 +43,6 @@ wcn36xx-ensure-finish-scan-is-not-requested-before-start-scan.patch crypto-public_key-fix-overflow-during-implicit-conversion.patch block-bfq-fix-bfq_set_next_ioprio_data.patch power-supply-max17042-handle-fails-of-reading-status-register.patch -cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch dm-crypt-avoid-percpu_counter-spinlock-contention-in-crypt_page_alloc.patch crypto-ccp-shutdown-sev-firmware-on-kexec.patch spi-fsi-reduce-max-transfer-size-to-8-bytes.patch diff --git a/queue-5.4/cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch b/queue-5.4/cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch deleted file mode 100644 index e700888185a..00000000000 --- a/queue-5.4/cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch +++ /dev/null @@ -1,125 +0,0 @@ -From e5c6b312ce3cc97e90ea159446e6bfa06645364d Mon Sep 17 00:00:00 2001 -From: Kevin Hao -Date: Thu, 5 Aug 2021 15:29:17 +0800 -Subject: cpufreq: schedutil: Use kobject release() method to free sugov_tunables - -From: Kevin Hao - -commit e5c6b312ce3cc97e90ea159446e6bfa06645364d upstream. - -The struct sugov_tunables is protected by the kobject, so we can't free -it directly. Otherwise we would get a call trace like this: - ODEBUG: free active (active state 0) object type: timer_list hint: delayed_work_timer_fn+0x0/0x30 - WARNING: CPU: 3 PID: 720 at lib/debugobjects.c:505 debug_print_object+0xb8/0x100 - Modules linked in: - CPU: 3 PID: 720 Comm: a.sh Tainted: G W 5.14.0-rc1-next-20210715-yocto-standard+ #507 - Hardware name: Marvell OcteonTX CN96XX board (DT) - pstate: 40400009 (nZcv daif +PAN -UAO -TCO BTYPE=--) - pc : debug_print_object+0xb8/0x100 - lr : debug_print_object+0xb8/0x100 - sp : ffff80001ecaf910 - x29: ffff80001ecaf910 x28: ffff00011b10b8d0 x27: ffff800011043d80 - x26: ffff00011a8f0000 x25: ffff800013cb3ff0 x24: 0000000000000000 - x23: ffff80001142aa68 x22: ffff800011043d80 x21: ffff00010de46f20 - x20: ffff800013c0c520 x19: ffff800011d8f5b0 x18: 0000000000000010 - x17: 6e6968207473696c x16: 5f72656d6974203a x15: 6570797420746365 - x14: 6a626f2029302065 x13: 303378302f307830 x12: 2b6e665f72656d69 - x11: ffff8000124b1560 x10: ffff800012331520 x9 : ffff8000100ca6b0 - x8 : 000000000017ffe8 x7 : c0000000fffeffff x6 : 0000000000000001 - x5 : ffff800011d8c000 x4 : ffff800011d8c740 x3 : 0000000000000000 - x2 : ffff0001108301c0 x1 : ab3c90eedf9c0f00 x0 : 0000000000000000 - Call trace: - debug_print_object+0xb8/0x100 - __debug_check_no_obj_freed+0x1c0/0x230 - debug_check_no_obj_freed+0x20/0x88 - slab_free_freelist_hook+0x154/0x1c8 - kfree+0x114/0x5d0 - sugov_exit+0xbc/0xc0 - cpufreq_exit_governor+0x44/0x90 - cpufreq_set_policy+0x268/0x4a8 - store_scaling_governor+0xe0/0x128 - store+0xc0/0xf0 - sysfs_kf_write+0x54/0x80 - kernfs_fop_write_iter+0x128/0x1c0 - new_sync_write+0xf0/0x190 - vfs_write+0x2d4/0x478 - ksys_write+0x74/0x100 - __arm64_sys_write+0x24/0x30 - invoke_syscall.constprop.0+0x54/0xe0 - do_el0_svc+0x64/0x158 - el0_svc+0x2c/0xb0 - el0t_64_sync_handler+0xb0/0xb8 - el0t_64_sync+0x198/0x19c - irq event stamp: 5518 - hardirqs last enabled at (5517): [] console_unlock+0x554/0x6c8 - hardirqs last disabled at (5518): [] el1_dbg+0x28/0xa0 - softirqs last enabled at (5504): [] __do_softirq+0x4d0/0x6c0 - softirqs last disabled at (5483): [] irq_exit+0x1b0/0x1b8 - -So split the original sugov_tunables_free() into two functions, -sugov_clear_global_tunables() is just used to clear the global_tunables -and the new sugov_tunables_free() is used as kobj_type::release to -release the sugov_tunables safely. - -Fixes: 9bdcb44e391d ("cpufreq: schedutil: New governor based on scheduler utilization data") -Cc: 4.7+ # 4.7+ -Signed-off-by: Kevin Hao -Acked-by: Viresh Kumar -Signed-off-by: Rafael J. Wysocki -Signed-off-by: Greg Kroah-Hartman ---- - kernel/sched/cpufreq_schedutil.c | 16 +++++++++++----- - 1 file changed, 11 insertions(+), 5 deletions(-) - ---- a/kernel/sched/cpufreq_schedutil.c -+++ b/kernel/sched/cpufreq_schedutil.c -@@ -624,9 +624,17 @@ static struct attribute *sugov_attrs[] = - }; - ATTRIBUTE_GROUPS(sugov); - -+static void sugov_tunables_free(struct kobject *kobj) -+{ -+ struct gov_attr_set *attr_set = container_of(kobj, struct gov_attr_set, kobj); -+ -+ kfree(to_sugov_tunables(attr_set)); -+} -+ - static struct kobj_type sugov_tunables_ktype = { - .default_groups = sugov_groups, - .sysfs_ops = &governor_sysfs_ops, -+ .release = &sugov_tunables_free, - }; - - /********************** cpufreq governor interface *********************/ -@@ -726,12 +734,10 @@ static struct sugov_tunables *sugov_tuna - return tunables; - } - --static void sugov_tunables_free(struct sugov_tunables *tunables) -+static void sugov_clear_global_tunables(void) - { - if (!have_governor_per_policy()) - global_tunables = NULL; -- -- kfree(tunables); - } - - static int sugov_init(struct cpufreq_policy *policy) -@@ -794,7 +800,7 @@ out: - fail: - kobject_put(&tunables->attr_set.kobj); - policy->governor_data = NULL; -- sugov_tunables_free(tunables); -+ sugov_clear_global_tunables(); - - stop_kthread: - sugov_kthread_stop(sg_policy); -@@ -821,7 +827,7 @@ static void sugov_exit(struct cpufreq_po - count = gov_attr_set_put(&tunables->attr_set, &sg_policy->tunables_hook); - policy->governor_data = NULL; - if (!count) -- sugov_tunables_free(tunables); -+ sugov_clear_global_tunables(); - - mutex_unlock(&global_tunables_lock); - diff --git a/queue-5.4/series b/queue-5.4/series index eb3a085867f..02d45c185b9 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -18,7 +18,6 @@ arm64-head-avoid-over-mapping-in-map_memory.patch crypto-public_key-fix-overflow-during-implicit-conversion.patch block-bfq-fix-bfq_set_next_ioprio_data.patch power-supply-max17042-handle-fails-of-reading-status-register.patch -cpufreq-schedutil-use-kobject-release-method-to-free-sugov_tunables.patch dm-crypt-avoid-percpu_counter-spinlock-contention-in-crypt_page_alloc.patch vmci-fix-null-pointer-dereference-when-unmapping-queue-pair.patch media-uvc-don-t-do-dma-on-stack.patch