projects
/
GitHub
/
exynos8895
/
android_kernel_samsung_universal8895.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
d12250e
)
Thermal: fix a NULL pointer dereference when generic thermal layer is built as a...
author
Zhang Rui
<rui.zhang@intel.com>
Wed, 12 Dec 2012 07:23:54 +0000
(15:23 +0800)
committer
Zhang Rui
<rui.zhang@intel.com>
Wed, 12 Dec 2012 07:23:54 +0000
(15:23 +0800)
[ 12.761956] BUG: unable to handle kernel NULL pointer dereference at
0000000000000018
[ 12.762016] IP: [<
ffffffffa0005277
>] handle_thermal_trip+0x47/0x130 [thermal_sys]
[ 12.762060] PGD
1fec74067
PUD
1fee5b067
PMD 0
[ 12.762127] Oops: 0000 [#1] SMP
[ 12.762177] Modules linked in: hid_generic crc32c_intel usbhid hid firewire_ohci(+) e1000e(+) firewire_core crc_itu_t xhci_hcd(+) thermal(+) fan thermal_sys hwmon
[ 12.762423] CPU 1
[ 12.762443] Pid: 187, comm: modprobe Tainted: G A 3.7.0-thermal-module+ #25 /DH77DF
[ 12.762496] RIP: 0010:[<
ffffffffa0005277
>] [<
ffffffffa0005277
>] handle_thermal_trip+0x47/0x130 [thermal_sys]
[ 12.762682] RSP: 0018:
ffff8801fe7ddc18
EFLAGS:
00010282
[ 12.762704] RAX:
0000000000000000
RBX:
ffff8801ff3e9c00
RCX:
ffff8801fdc39800
[ 12.762728] RDX:
ffff8801fe7ddc24
RSI:
0000000000000001
RDI:
ffff8801ff3e9c00
[ 12.762764] RBP:
ffff8801fe7ddc48
R08:
0000000004000000
R09:
ffffffffa001f568
[ 12.762797] R10:
ffffffff81363083
R11:
0000000000000001
R12:
0000000000000001
[ 12.762832] R13:
0000000000000000
R14:
0000000000000001
R15:
ffff8801fde73e68
[ 12.762866] FS:
00007f5548516700
(0000) GS:
ffff88021f240000
(0000) knlGS:
0000000000000000
[ 12.762912] CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
[ 12.762946] CR2:
0000000000000018
CR3:
00000001fefe2000
CR4:
00000000001407e0
[ 12.762979] DR0:
0000000000000000
DR1:
0000000000000000
DR2:
0000000000000000
[ 12.763014] DR3:
0000000000000000
DR6:
00000000ffff0ff0
DR7:
0000000000000400
[ 12.763048] Process modprobe (pid: 187, threadinfo
ffff8801fe7dc000
, task
ffff8801fe5bdb40
)
[ 12.763095] Stack:
[ 12.763122]
0000000000019640
00000000fdc39800
ffff8801fe7ddc48
ffff8801ff3e9c00
[ 12.763225]
0000000000000002
0000000000000000
ffff8801fe7ddc78
ffffffffa00053e7
[ 12.763338]
ffff8801ff3e9c00
0000000000006c98
ffffffffa0007480
ffff8801ff3e9c00
[ 12.763440] Call Trace:
[ 12.763470] [<
ffffffffa00053e7
>] thermal_zone_device_update+0x77/0xa0 [thermal_sys]
[ 12.763515] [<
ffffffffa0006d38
>] thermal_zone_device_register+0x788/0xa88 [thermal_sys]
[ 12.763562] [<
ffffffffa001f394
>] acpi_thermal_add+0x360/0x4c8 [thermal]
[ 12.763598] [<
ffffffff8133902a
>] acpi_device_probe+0x50/0x190
[ 12.763632] [<
ffffffff811bd793
>] ? sysfs_create_link+0x13/0x20
[ 12.763666] [<
ffffffff813cc41b
>] driver_probe_device+0x7b/0x240
[ 12.763699] [<
ffffffff813cc68b
>] __driver_attach+0xab/0xb0
[ 12.763732] [<
ffffffff813cc5e0
>] ? driver_probe_device+0x240/0x240
[ 12.763766] [<
ffffffff813ca836
>] bus_for_each_dev+0x56/0x90
[ 12.763799] [<
ffffffff813cbf4e
>] driver_attach+0x1e/0x20
[ 12.763831] [<
ffffffff813cbac0
>] bus_add_driver+0x190/0x290
[ 12.763864] [<
ffffffffa0022000
>] ? 0xffffffffa0021fff
[ 12.763896] [<
ffffffff813ccbea
>] driver_register+0x7a/0x160
[ 12.763928] [<
ffffffffa0022000
>] ? 0xffffffffa0021fff
[ 12.763960] [<
ffffffff813399fb
>] acpi_bus_register_driver+0x43/0x45
[ 12.763995] [<
ffffffffa002203a
>] acpi_thermal_init+0x3a/0x42 [thermal]
[ 12.764029] [<
ffffffff8100207f
>] do_one_initcall+0x3f/0x170
[ 12.764063] [<
ffffffff810b1a5f
>] sys_init_module+0x8f/0x200
[ 12.764097] [<
ffffffff815ff259
>] system_call_fastpath+0x16/0x1b
[ 12.764129] Code: 48 8b 87 c8 02 00 00 41 89 f4 48 8d 55 dc ff 50 28 44 8b 6d dc 41 8d 45 fe 83 f8 01 76 5e 48 8b 83 d8 02 00 00 44 89 e6 48 89 df <ff> 50 18 4c 8d a3 10 03 00 00 4c 89 e7 e8 87 f1 5e e1 8b 83 bc
[ 12.765164] RIP [<
ffffffffa0005277
>] handle_thermal_trip+0x47/0x130 [thermal_sys]
[ 12.765223] RSP <
ffff8801fe7ddc18
>
[ 12.765252] CR2:
0000000000000018
[ 12.765284] ---[ end trace
7723294cdfb00d2a
]---
This is because thermal_zone_device_update() is invoked before
any thermal governors being registered.
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
drivers/thermal/thermal_sys.c
patch
|
blob
|
blame
|
history
diff --git
a/drivers/thermal/thermal_sys.c
b/drivers/thermal/thermal_sys.c
index 8f0f37bb2825992bb14ba400975a1d15f5583fa9..8c8ce806180fc1d56988273175ac899741449cad 100644
(file)
--- a/
drivers/thermal/thermal_sys.c
+++ b/
drivers/thermal/thermal_sys.c
@@
-336,7
+336,8
@@
static void monitor_thermal_zone(struct thermal_zone_device *tz)
static void handle_non_critical_trips(struct thermal_zone_device *tz,
int trip, enum thermal_trip_type trip_type)
{
- tz->governor->throttle(tz, trip);
+ if (tz->governor)
+ tz->governor->throttle(tz, trip);
}
static void handle_critical_trips(struct thermal_zone_device *tz,