Pallipadi, Venkatesh
093f13e231
x86, acpi_cpufreq: Fix the NULL pointer dereference in get_measured_perf
Fix for a regression that was introduced by earlier commit
18b2646fe3
on Mon Apr 6 11:26:08 2009
Regression resulted in the below error happened on systems with
software coordination where per_cpu acpi data will not be initiated for
secondary CPUs in a P-state domain.
On Tue, 2009-04-14 at 23:01 -0700, Zhang, Yanmin wrote:
My machine hanged with kernel 2.6.30-rc2 when script read
> /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
>
> opps happens in get_measured_perf:
>
> cur.aperf.whole = readin.aperf.whole -
> per_cpu(drv_data, cpu)->saved_aperf;
>
> Because per_cpu(drv_data, cpu)=NULL.
>
> So function get_measured_perf should check if (per_cpu(drv_data,
> cpu)==NULL)
> and return 0 if it's NULL.
--------------sys log------------------
BUG: unable to handle kernel NULL pointer dereference at
0000000000000020
IP: [<ffffffff8021af75>] get_measured_perf+0x4a/0xf9
PGD a7dd88067 PUD a7ccf5067 PMD 0
Oops: 0000 [#1] SMP
last sysfs file: /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
CPU 0
Modules linked in: video output
Pid: 2091, comm: kondemand/0 Not tainted 2.6.30-rc2 #1 MP Server
RIP: 0010:[<ffffffff8021af75>] [<ffffffff8021af75>]
get_measured_perf+0x4a/0xf9
RSP: 0018:ffff880a7d56de20 EFLAGS: 00010246
RAX: 0000000000000000 RBX: 00000046241a42b6 RCX: ffff88004d219000
RDX: 000000000000b660 RSI: 0000000000000020 RDI: 0000000000000001
RBP: ffff880a7f052000 R08: 00000046241a42b6 R09: ffffffff807639f0
R10: 00000000ffffffea R11: ffffffff802207f4 R12: ffff880a7f052000
R13: ffff88004d20e460 R14: 0000000000ddd5a6 R15: 0000000000000001
FS: 0000000000000000(0000) GS:ffff88004d200000(0000)
knlGS:0000000000000000
CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b
CR2: 0000000000000020 CR3: 0000000a7f1bf000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process kondemand/0 (pid: 2091, threadinfo ffff880a7d56c000, task
ffff880a7d4d18c0)
Stack:
ffff880a7f052078 ffffffff803efd54 00000046241a42b6 000000462ffa9e95
0000000000000001 0000000000000001 00000000ffffffea ffffffff8064f41a
0000000000000012 0000000000000012 ffff880a7f052000 ffffffff80650547
Call Trace:
[<ffffffff803efd54>] ? kobject_get+0x12/0x17
[<ffffffff8064f41a>] ? __cpufreq_driver_getavg+0x42/0x57
[<ffffffff80650547>] ? do_dbs_timer+0x147/0x272
[<ffffffff80650400>] ? do_dbs_timer+0x0/0x272
[<ffffffff802474ca>] ? worker_thread+0x15b/0x1f5
[<ffffffff8024a02c>] ? autoremove_wake_function+0x0/0x2e
[<ffffffff8024736f>] ? worker_thread+0x0/0x1f5
[<ffffffff80249f0d>] ? kthread+0x54/0x83
[<ffffffff8020c87a>] ? child_rip+0xa/0x20
[<ffffffff80249eb9>] ? kthread+0x0/0x83
[<ffffffff8020c870>] ? child_rip+0x0/0x20
Code: 99 a6 03 00 31 c9 85 c0 0f 85 c3 00 00 00 89 df 4c 8b 44 24 10 48
c7 c2 60 b6 00 00 48 8b 0c fd e0 30 a5 80 4c 89 c3 48 8b 04 0a <48> 2b
58 20 48 8b 44 24 18 48 89 1c 24 48 8b 34 0a 48 2b 46 28
RIP [<ffffffff8021af75>] get_measured_perf+0x4a/0xf9
RSP <ffff880a7d56de20>
CR2: 0000000000000020
---[ end trace 2b8fac9a49e19ad4 ]---
Tested-by: "Zhang, Yanmin" <yanmin_zhang@linux.intel.com>
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
2009-04-19 22:47:20 -04:00
..
2009-04-05 02:14:15 -04:00
2009-04-16 16:43:20 -07:00
2009-04-19 22:47:20 -04:00
2009-03-10 16:24:23 +01:00
2009-01-03 12:03:52 -08:00
2009-04-03 10:36:57 -07:00
2008-11-28 15:24:39 +01:00
2009-03-31 13:33:50 +10:30
2009-04-01 08:59:16 -07:00
2009-04-01 08:59:16 -07:00
2009-04-03 19:25:57 +02:00
2009-03-15 07:03:15 +01:00
2009-01-03 12:04:39 -08:00
2008-10-20 08:52:39 -07:00
2008-10-20 08:52:39 -07:00
2009-02-17 17:52:44 +01:00
2008-10-13 10:33:15 +02:00
2009-03-06 16:13:15 +01:00
2008-12-03 08:56:25 +01:00
2009-01-19 00:38:58 +09:00
2009-03-30 14:04:53 +11:00
2008-12-03 08:56:25 +01:00
2009-03-23 15:02:05 +05:30
2009-03-13 02:37:18 +01:00
2009-01-09 12:46:22 -08:00
2008-08-18 08:50:19 +02:00
2009-03-27 17:28:43 +01:00
2009-02-25 08:27:46 +01:00
2009-02-24 18:08:40 +01:00
2009-03-27 17:28:43 +01:00
2009-03-14 09:42:51 +01:00
2009-03-12 11:57:46 +01:00
2009-04-09 05:43:32 +02:00
2009-03-14 17:23:47 -07:00
2009-03-14 15:37:14 -07:00
2009-03-17 11:52:10 -07:00
2009-02-24 18:08:38 +01:00
2008-12-12 11:08:42 +01:00
2009-02-22 18:01:18 +01:00
2008-10-20 18:27:03 +02:00
2009-03-04 20:33:16 +01:00
2009-02-10 13:13:23 +01:00
2009-03-21 16:56:10 +05:30
2009-02-23 00:08:11 +01:00
2008-12-31 18:07:42 -05:00
2009-03-21 16:57:04 +05:30
2009-03-02 12:07:48 +01:00
2009-02-24 21:52:45 +01:00
2009-02-09 12:16:05 +01:00
2009-04-08 18:06:07 +02:00
2009-03-30 18:00:26 -07:00
2009-03-30 18:00:26 -07:00
2008-10-28 17:10:27 +01:00
2009-03-21 16:55:45 +05:30
2009-02-17 17:52:44 +01:00
2009-04-02 00:49:02 +02:00
2009-03-19 14:04:19 +01:00
2009-02-23 00:08:11 +01:00
2009-01-02 17:46:24 +01:00
2009-03-10 18:13:25 -07:00
2009-03-10 18:13:25 -07:00
2009-04-02 00:49:02 +02:00
2009-02-23 00:08:11 +01:00
2009-03-30 22:05:14 +10:30
2009-03-18 13:51:17 +01:00
2009-04-17 09:56:11 -07:00
2009-03-18 13:51:17 +01:00
2009-03-12 13:13:07 +01:00
2009-01-12 11:22:55 +01:00
2009-01-12 11:23:01 +01:00
2009-04-12 12:32:18 +02:00
2009-01-12 11:22:50 +01:00
2009-02-14 23:05:25 +01:00
2009-01-30 14:51:44 -08:00
2009-01-30 14:51:44 -08:00
2009-01-20 17:14:28 +01:00
2009-03-19 14:04:19 +01:00
2009-01-06 14:06:57 +01:00
2009-04-07 08:31:12 -07:00
2009-03-05 12:47:28 +01:00
2009-04-07 08:31:11 -07:00
2009-04-14 02:51:04 +02:00
2008-09-22 12:58:36 +02:00
2009-01-29 14:16:51 +01:00
2009-04-02 19:04:51 -07:00
2009-04-02 19:04:51 -07:00
2009-04-05 11:04:19 -07:00
2009-04-09 05:43:32 +02:00
2008-10-15 14:25:14 +02:00
2009-03-28 22:27:45 +01:00
2009-04-08 17:53:27 +02:00
2009-03-10 18:13:25 -07:00
2009-03-10 18:13:25 -07:00
2009-03-21 16:56:37 +05:30
2009-04-02 06:08:05 +02:00
2009-03-30 18:00:26 -07:00
2009-04-01 17:13:17 +02:00
2009-02-17 17:52:44 +01:00
2009-03-13 14:49:54 +10:30
2009-01-31 04:21:18 +01:00
2008-07-22 14:35:57 +02:00
Merge branches 'x86/alternatives', 'x86/cleanups', 'x86/commandline', 'x86/crashdump', 'x86/debug', 'x86/defconfig', 'x86/doc', 'x86/exports', 'x86/fpu', 'x86/gart', 'x86/idle', 'x86/mm', 'x86/mtrr', 'x86/nmi-watchdog', 'x86/oprofile', 'x86/paravirt', 'x86/reboot', 'x86/sparse-fixes', 'x86/tsc', 'x86/urgent' and 'x86/vmalloc' into x86-v28-for-linus-phase1
2008-10-06 18:17:07 +02:00
2008-10-22 22:55:23 -07:00
2009-04-02 19:05:08 -07:00
2009-02-23 00:08:11 +01:00
2009-03-30 22:05:14 +10:30
2009-04-16 16:43:20 -07:00
2008-07-22 14:35:57 +02:00
2009-03-21 16:55:24 +05:30
2009-02-13 11:35:01 -08:00
2009-02-13 11:35:01 -08:00
2008-12-08 13:49:45 +01:00
2009-03-02 12:07:48 +01:00
Merge branches 'x86/apic', 'x86/cleanups', 'x86/cpufeature', 'x86/crashdump', 'x86/debug', 'x86/defconfig', 'x86/detect-hyper', 'x86/doc', 'x86/dumpstack', 'x86/early-printk', 'x86/fpu', 'x86/idle', 'x86/io', 'x86/memory-corruption-check', 'x86/microcode', 'x86/mm', 'x86/mtrr', 'x86/nmi-watchdog', 'x86/pat2', 'x86/pci-ioapic-boot-irq-quirks', 'x86/ptrace', 'x86/quirks', 'x86/reboot', 'x86/setup-memory', 'x86/signal', 'x86/sparse-fixes', 'x86/time', 'x86/uv' and 'x86/xen' into x86/core
2008-12-23 16:27:23 +01:00
2009-03-27 17:28:43 +01:00
2009-02-17 17:52:44 +01:00
2009-04-08 14:58:10 +02:00
2009-03-05 11:27:49 +01:00
2009-03-11 09:49:01 +01:00
2009-02-11 14:00:56 -08:00
2009-03-19 14:04:19 +01:00
2009-03-30 22:05:14 +10:30
2009-03-17 14:16:02 -07:00
2009-03-17 12:58:15 -07:00
2009-03-25 21:34:28 +01:00
2008-12-28 12:21:10 -08:00
2009-01-16 14:20:22 +01:00
2009-04-12 13:08:56 +02:00