Re: [PATCH 5/6] cpufreq: balance out cpufreq_cpu_{get,put} for scalingdrivers using setpolicy

From: Dirk Brandewie
Date: Mon Feb 04 2013 - 13:26:01 EST


Hi Viresh,

I have rebased onto bleeding-edge when I reboot the system I get a kernel panic.
Any idea what I could have done that would have broken the restructured
cpufreq_{add/remove}_dev.

--Dirk

[ 134.714071] kvm: exiting hardware virtualization
[ 134.920302] sd 0:0:0:0: [sda] Synchronizing SCSI cache
[ 135.132967] Disabling non-boot CPUs ...
[ 135.137189] __cpufreq_remove_dev: cpufreq: __cpufreq_remove_dev: unregistering CPU 1
[ 135.145577] __cpufreq_remove_dev: cpufreq: __cpufreq_remove_dev: removing link, cpu: 1
[ 135.154152] ------------[ cut here ]------------
[ 135.159212] kernel BUG at fs/sysfs/dir.c:562!
[ 135.163900] invalid opcode: 0000 [#1] SMP
[ 135.168367] Modules linked in:
[ 135.171720] CPU 0
[ 135.173730] Pid: 1, comm: systemd-shutdow Not tainted 3.8.0-rc5+ #33 Acer Veriton X4618G/Veriton X4618G
[ 135.184133] RIP: 0010:[<ffffffff81252723>] [<ffffffff81252723>] sysfs_remove_one+0x73/0x80
[ 135.193155] RSP: 0018:ffff880427c95b88 EFLAGS: 00010202
[ 135.198925] RAX: ffff880427d10000 RBX: ffff880425efe460 RCX: 0000000180240017
[ 135.206641] RDX: 0000000000000000 RSI: ffff880425efe460 RDI: ffff880427c95bb8
[ 135.214314] RBP: ffff880427c95ba8 R08: 0000000000000000 R09: 0000000000000001
[ 135.222060] R10: 000000000000000e R11: ffffffff81251f38 R12: 0000000000000000
[ 135.229854] R13: ffff880425efe460 R14: 0000000000000246 R15: 0000000000000001
[ 135.237537] FS: 00007fd987f6a800(0000) GS:ffff88043e200000(0000) knlGS:0000000000000000
[ 135.246343] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 135.252525] CR2: 00000032e70104f0 CR3: 0000000416bf8000 CR4: 00000000000407f0
[ 135.260203] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 135.267959] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[ 135.275668] Process systemd-shutdow (pid: 1, threadinfo ffff880427c94000, task ffff880427d10000)
[ 135.285104] Stack:
[ 135.287299] ffff880425efe460 ffff880425efe460 0000000000000000 ffff880425efe460
[ 135.295355] ffff880427c95bd8 ffffffff8125281a ffff88042789fd20 0000000000000000
[ 135.303461] 0000000000000246 0000000000000000 ffff880427c95c18 ffffffff81252cf7
[ 135.311571] Call Trace:
[ 135.314213] [<ffffffff8125281a>] remove_dir+0x2a/0x40
[ 135.319786] [<ffffffff81252cf7>] sysfs_remove_dir+0x97/0xc0
[ 135.325886] [<ffffffff8137ebc6>] kobject_del+0x16/0x40
[ 135.331529] [<ffffffff8137ec52>] kobject_cleanup+0x62/0x1b0
[ 135.337598] [<ffffffff8137eafb>] kobject_put+0x2b/0x60
[ 135.343253] [<ffffffff816311a3>] __cpufreq_remove_dev.isra.13+0x183/0x450
[ 135.350682] [<ffffffff81829a76>] ? down_write+0x16/0x40
[ 135.356422] [<ffffffff8181e030>] cpufreq_cpu_callback+0x5d/0x77
[ 135.362966] [<ffffffff8182fa1d>] notifier_call_chain+0x4d/0x70
[ 135.369346] [<ffffffff810cf2ce>] __raw_notifier_call_chain+0xe/0x10
[ 135.376256] [<ffffffff810a8f70>] __cpu_notify+0x20/0x40
[ 135.382026] [<ffffffff8180f5af>] _cpu_down+0x7f/0x270
[ 135.387602] [<ffffffff810a926e>] disable_nonboot_cpus+0x8e/0x120
[ 135.394170] [<ffffffff810bcd7b>] kernel_restart+0x1b/0x60
[ 135.400075] [<ffffffff810bcfa1>] sys_reboot+0x1c1/0x280
[ 135.405832] [<ffffffff811827ae>] ? do_writepages+0x1e/0x40
[ 135.411879] [<ffffffff81177d41>] ? __filemap_fdatawrite_range+0x51/0x60
[ 135.419129] [<ffffffff811f6f78>] ? iput+0x48/0x190
[ 135.424457] [<ffffffff8120b600>] ? sync_inodes_one_sb+0x20/0x20
[ 135.430969] [<ffffffff81215d3f>] ? iterate_bdevs+0xef/0x100
[ 135.437057] [<ffffffff81833fd9>] system_call_fastpath+0x16/0x1b
[ 135.443563] Code: 30 49 89 44 24 38 49 89 54 24 40 66 81 4b 60 00 20 49 8b 45 08 48 89 43 30 49 89 5d 08 48 8b 5d e8 4c 8b 65 f0 4c
[ 135.465457] RIP [<ffffffff81252723>] sysfs_remove_one+0x73/0x80
[ 135.471964] RSP <ffff880427c95b88>
[ 135.475777] ---[ end trace 88437c0ab4adf760 ]---
[ 135.488452] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
[ 135.488452]
[ 135.504187] drm_kms_helper: panic occurred, switching back to text console
[ 135.511074] ------------[ cut here ]------------
[ 135.515711] WARNING: at arch/x86/kernel/smp.c:123 native_smp_send_reschedule+0x5b/0x60()
[ 135.523805] Hardware name: Veriton X4618G
[ 135.527819] Modules linked in:
[ 135.530921] Pid: 1, comm: systemd-shutdow Tainted: G D 3.8.0-rc5+ #33
[ 135.538233] Call Trace:
[ 135.540694] <IRQ> [<ffffffff810a552f>] warn_slowpath_common+0x7f/0xc0
[ 135.547363] [<ffffffff810a558a>] warn_slowpath_null+0x1a/0x20
[ 135.553202] [<ffffffff8107baeb>] native_smp_send_reschedule+0x5b/0x60
[ 135.559733] [<ffffffff810e5774>] trigger_load_balance+0x184/0x220
[ 135.565920] [<ffffffff810d9989>] scheduler_tick+0x109/0x140
[ 135.571593] [<ffffffff810b67bc>] update_process_times+0x6c/0x90
[ 135.577615] [<ffffffff810fef6e>] tick_sched_handle.isra.8+0x2e/0x70
[ 135.583975] [<ffffffff810ff0fc>] tick_sched_timer+0x4c/0x80
[ 135.589639] [<ffffffff810cd243>] __run_hrtimer+0x73/0x1d0
[ 135.595135] [<ffffffff810ff0b0>] ? tick_sched_do_timer+0x40/0x40
[ 135.601242] [<ffffffff810adc16>] ? __do_softirq+0x136/0x210
[ 135.606912] [<ffffffff810cdb67>] hrtimer_interrupt+0xf7/0x230
[ 135.612755] [<ffffffff81835c39>] smp_apic_timer_interrupt+0x69/0x99
[ 135.619118] [<ffffffff81834b9d>] apic_timer_interrupt+0x6d/0x80
[ 135.625125] <EOI> [<ffffffff8182110e>] ? panic+0x18c/0x1d0
[ 135.630843] [<ffffffff81821078>] ? panic+0xf6/0x1d0
[ 135.635814] [<ffffffff810ab688>] do_exit+0x918/0x9e0
[ 135.640872] [<ffffffff8182cbdd>] oops_end+0x9d/0xe0
[ 135.645849] [<ffffffff8105b848>] die+0x58/0x90
[ 135.650395] [<ffffffff8182c47b>] do_trap+0x6b/0x170
[ 135.655367] [<ffffffff8182fa52>] ? __atomic_notifier_call_chain+0x12/0x20
[ 135.662242] [<ffffffff81058eec>] do_invalid_op+0x9c/0xb0
[ 135.667650] [<ffffffff81252723>] ? sysfs_remove_one+0x73/0x80
[ 135.673482] [<ffffffff818350de>] invalid_op+0x1e/0x30
[ 135.678631] [<ffffffff81251f38>] ? release_sysfs_dirent+0xa8/0xf0
[ 135.684816] [<ffffffff81252723>] ? sysfs_remove_one+0x73/0x80
[ 135.690656] [<ffffffff818291fd>] ? mutex_lock+0x1d/0x50
[ 135.695982] [<ffffffff8125281a>] remove_dir+0x2a/0x40
[ 135.701136] [<ffffffff81252cf7>] sysfs_remove_dir+0x97/0xc0
[ 135.706798] [<ffffffff8137ebc6>] kobject_del+0x16/0x40
[ 135.712027] [<ffffffff8137ec52>] kobject_cleanup+0x62/0x1b0
[ 135.717693] [<ffffffff8137eafb>] kobject_put+0x2b/0x60
[ 135.722928] [<ffffffff816311a3>] __cpufreq_remove_dev.isra.13+0x183/0x450
[ 135.729812] [<ffffffff81829a76>] ? down_write+0x16/0x40
[ 135.735128] [<ffffffff8181e030>] cpufreq_cpu_callback+0x5d/0x77
[ 135.741140] [<ffffffff8182fa1d>] notifier_call_chain+0x4d/0x70
[ 135.747066] [<ffffffff810cf2ce>] __raw_notifier_call_chain+0xe/0x10
[ 135.753422] [<ffffffff810a8f70>] __cpu_notify+0x20/0x40
[ 135.758739] [<ffffffff8180f5af>] _cpu_down+0x7f/0x270
[ 135.763885] [<ffffffff810a926e>] disable_nonboot_cpus+0x8e/0x120
[ 135.769983] [<ffffffff810bcd7b>] kernel_restart+0x1b/0x60
[ 135.775479] [<ffffffff810bcfa1>] sys_reboot+0x1c1/0x280
[ 135.780803] [<ffffffff811827ae>] ? do_writepages+0x1e/0x40
[ 135.786381] [<ffffffff81177d41>] ? __filemap_fdatawrite_range+0x51/0x60
[ 135.793088] [<ffffffff811f6f78>] ? iput+0x48/0x190
[ 135.797982] [<ffffffff8120b600>] ? sync_inodes_one_sb+0x20/0x20
[ 135.803997] [<ffffffff81215d3f>] ? iterate_bdevs+0xef/0x100
[ 135.809665] [<ffffffff81833fd9>] system_call_fastpath+0x16/0x1b
[ 135.815676] ---[ end trace 88437c0ab4adf761 ]---


On 02/01/2013 09:41 PM, Viresh Kumar wrote:
On Sat, Feb 2, 2013 at 12:15 AM, <dirk.brandewie@xxxxxxxxx> wrote:
From: Dirk Brandewie <dirk.brandewie@xxxxxxxxx>

There is an additional reference added to the driver in
cpufreq_add_dev_policy() that is removed in__cpufreq_governor() if the
driver implements target(). Remove the last reference when the driver
implements setpolicy()

Signed-off-by: Dirk Brandewie <dirk.brandewie@xxxxxxxxx>

Rebase it on latest work as cpufreq_add_dev_policy() doesn't exist anymore.

---
drivers/cpufreq/cpufreq.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index a4fd51e..ec103bf 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1119,6 +1119,9 @@ static int __cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif
if (cpufreq_driver->target)
__cpufreq_governor(data, CPUFREQ_GOV_STOP);

+ if (cpufreq_driver->setpolicy)
+ cpufreq_cpu_put(data);
+
kobj = &data->kobj;
cmp = &data->kobj_unregister;
unlock_policy_rwsem_write(cpu);
--
1.7.7.6

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/