With 2.6.37-rc6, when hot-removing the battery on my Studio 1557 i7
laptop with AC power, kworker/0:2 hit a protection fault in
led_trigger_unregister_oops [1].
Rebuilding with the same config and disassembling led-triggers.o and
power_supply_leds.o, we see that the first two triggers were removed
from the list successfully [2,3].
I don't see 'LED trigger ... failed to register' the kernel message,
so leg_trigger_register_simple had registered the three of them, so
list corruption?
Dan
--- [1]
wq_worker_sleeping+0x1a/0x90
schedule
? call_rcu_sched
? release_task
do_exit
oops_end
die
do_general_protection
general_protection
? led_trigger_unregister+0x44/0xd0
led_trigger_unregister_simple+0x1b/0x30
power_supply_remove_bat_triggers
power_supply_remove_triggers
power_supply_unregister
sysfs_remove_battery
acpi_battery_update
acpi_battery_get_property
power_supply_show_property
power_supply_uevent
dev_uevent
kobject_uevent_env
? default_spin_lock_flags
kobject_uevent
device_del
device_unregister
power_supply_unregister
sysfs_remove_battery
acpi_battery_update
acpi_battery_notify
acpi_device_notify
acpi_ev_notify_dispatch
acpi_os_execute_deferred
process_one_work
? acpi_os_execute_deferred
worker_thread
? worker_thread
kthread
kernel_thread_helper
? kthread
? kernel_thread_helper
RIP: kthread_data+0x10/0x20
--- [2]
void led_trigger_unregister(struct led_trigger *trigger)
{
struct led_classdev *led_cdev;
/* Remove from the list of led triggers */
down_write(&triggers_list_lock);
list_del(&trigger->next_trig); <----
up_write(&triggers_list_lock);
...
--- [3]
static void power_supply_remove_bat_triggers(struct power_supply *psy)
{
led_trigger_unregister_simple(psy->charging_full_trig);
led_trigger_unregister_simple(psy->charging_trig);
led_trigger_unregister_simple(psy->full_trig); <----
kfree(psy->full_trig_name);
kfree(psy->charging_trig_name);
kfree(psy->charging_full_trig_name);
}
--
Daniel J Blueman
On Sun, Dec 19, 2010 at 12:55:43PM +0000, Daniel J Blueman wrote:
> With 2.6.37-rc6, when hot-removing the battery on my Studio 1557 i7
> laptop with AC power, kworker/0:2 hit a protection fault in
> led_trigger_unregister_oops [1].
Got the same oops and started analyzing it but the oops in
led_trigger_unregister() is actually the third one in a row when
unplugging the battery.
See http://marc.info/?l=linux-kernel&m=129276362410145 for a complete
oops. You might want to try the patch there to see if it fixes the issue
for you too.
Thanks.
--
Regards/Gruss,
Boris.