* [LOCKDEP] 2.6.18-rc1: inconsistent {hardirq-on-W} -> {in-hardirq-W} usage
@ 2006-07-09 5:05 Joseph Fannin
2006-07-09 6:25 ` Andrew Morton
0 siblings, 1 reply; 7+ messages in thread
From: Joseph Fannin @ 2006-07-09 5:05 UTC (permalink / raw)
To: linux-kernel, mingo, arjan
[ resending -- original msg was > 100k ]
Hello,
I haven't seen this one cross the LKML. I'm seeing it in both
2.6.18-rc1 and in .17-mm6. I hope it's useful.
The stack backtrace and offending executable varies from boot to
boot, so lockdep messages from two boots follow, and I've posted a
full dmesg from a third boot and my .config:
http://home.columbus.rr.com/jfannin3/dmesg.txt
http://home.columbus.rr.com/jfannin3/config.txt
[ 22.488000]
[ 22.488000] =================================
[ 22.488000] [ INFO: inconsistent lock state ]
[ 22.488000] ---------------------------------
[ 22.488000] inconsistent {hardirq-on-W} -> {in-hardirq-W} usage.
[ 22.488000] udevd/2684 [HC1[1]:SC0[0]:HE0:SE1] takes:
[ 22.488000] (rtc_lock){+-..}, at: [<c0278c1c>] rtc_get_rtc_time+0x2c/0x1a0
[ 22.488000] {hardirq-on-W} state was registered at:
[ 22.488000] [<c0144229>] lock_acquire+0x69/0x90
[ 22.488000] [<c033c020>] _spin_lock+0x40/0x50
[ 22.488000] [<c0106fa3>] get_cmos_time+0x13/0x170
[ 22.488000] [<c048daeb>] hpet_time_init+0xb/0x70
[ 22.488000] [<c0487744>] start_kernel+0x1f4/0x470
[ 22.488000] [<c0100210>] 0xc0100210
[ 22.488000] irq event stamp: 193648
[ 22.488000] hardirqs last enabled at (193647): [<c033c331>] _write_unlock_irq+0x31/0x60
[ 22.488000] hardirqs last disabled at (193648): [<c0103e0f>] common_interrupt+0x1b/0x2c
[ 22.488000] softirqs last enabled at (193582): [<c012b229>] __do_softirq+0x109/0x140
[ 22.488000] softirqs last disabled at (193575): [<c012b2d9>] do_softirq+0x79/0x80
[ 22.488000]
[ 22.488000] other info that might help us debug this:
[ 22.488000] no locks held by udevd/2684.
[ 22.488000]
[ 22.488000] stack backtrace:
[ 22.488000] [<c0104728>] show_trace_log_lvl+0x148/0x170
[ 22.488000] [<c010591b>] show_trace+0x1b/0x20
[ 22.488000] [<c0105944>] dump_stack+0x24/0x30
[ 22.488000] [<c0142a85>] print_usage_bug+0x255/0x260
[ 22.488000] [<c0142fc7>] mark_lock+0x537/0x620
[ 22.488000] [<c01436b2>] __lock_acquire+0x602/0xdf0
[ 22.488000] [<c0144229>] lock_acquire+0x69/0x90
[ 22.488000] [<c033c476>] _spin_lock_irq+0x46/0x60
[ 22.488000] [<c0278c1c>] rtc_get_rtc_time+0x2c/0x1a0
[ 22.488000] [<c0117d02>] hpet_rtc_interrupt+0x152/0x1b0
[ 22.488000] [<c01588d1>] handle_IRQ_event+0x31/0x70
[ 22.488000] [<c01589a9>] __do_IRQ+0x99/0x110
[ 22.488000] [<c0105d97>] do_IRQ+0x47/0xa0
[ 22.488000] [<c0103e19>] common_interrupt+0x25/0x2c
[ 22.488000] [<c01440d2>] lock_release+0xb2/0x1a0
[ 22.488000] [<c033c814>] _spin_unlock+0x24/0x60
[ 22.488000] [<c016a7b0>] unmap_vmas+0x300/0x640
[ 22.488000] [<c016d84a>] exit_mmap+0x8a/0x140
[ 22.488000] [<c01227e9>] mmput+0x39/0xb0
[ 22.488000] [<c01235b3>] copy_process+0x833/0x1510
[ 22.488000] [<c01242fb>] do_fork+0x6b/0x210
[ 22.488000] [<c01011f9>] sys_clone+0x39/0x40
[ 22.488000] [<c01032f9>] sysenter_past_esp+0x56/0x8d
[ 22.488000] [<b7ef6410>] 0xb7ef6410
[ 22.620000] sd 0:0:1:0: Attached scsi generic sg0 type 0
[ 22.620000] sd 2:0:0:0: Attached scsi generic sg1 type 0
[ 22.840000] md: md driver 0.90.3 MAX_MD_DEVS=256, MD_SB_DISKS=27
[ 22.840000] md: bitmap version 4.39
[ 22.724000]
[ 22.724000] =================================
[ 22.724000] [ INFO: inconsistent lock state ]
[ 22.724000] ---------------------------------
[ 22.724000] inconsistent {hardirq-on-W} -> {in-hardirq-W} usage.
[ 22.724000] S25brltty/3382 [HC1[1]:SC0[0]:HE0:SE1] takes:
[ 22.724000] (rtc_lock){+-..}, at: [<c0278c1c>] rtc_get_rtc_time+0x2c/0x1a0
[ 22.724000] {hardirq-on-W} state was registered at:
[ 22.724000] [<c0144229>] lock_acquire+0x69/0x90
[ 22.724000] [<c033c020>] _spin_lock+0x40/0x50
[ 22.724000] [<c0106fa3>] get_cmos_time+0x13/0x170
[ 22.724000] [<c048daeb>] hpet_time_init+0xb/0x70
[ 22.724000] [<c0487744>] start_kernel+0x1f4/0x470
[ 22.724000] [<c0100210>] 0xc0100210
[ 22.724000] irq event stamp: 1276
[ 22.724000] hardirqs last enabled at (1275): [<c01033bf>] restore_nocheck+0x12/0x15
[ 22.724000] hardirqs last disabled at (1276): [<c0103e0f>] common_interrupt+0x1b/0x2c
[ 22.724000] softirqs last enabled at (0): [<c012314b>] copy_process+0x3cb/0x1510
[ 22.724000] softirqs last disabled at (0): [<00000000>] 0x0
[ 22.724000]
[ 22.724000] other info that might help us debug this:
[ 22.724000] no locks held by S25brltty/3382.
[ 22.724000]
[ 22.724000] stack backtrace:
[ 22.724000] [<c0104728>] show_trace_log_lvl+0x148/0x170
[ 22.724000] [<c010591b>] show_trace+0x1b/0x20
[ 22.724000] [<c0105944>] dump_stack+0x24/0x30
[ 22.724000] [<c0142a85>] print_usage_bug+0x255/0x260
[ 22.724000] [<c0142fc7>] mark_lock+0x537/0x620
[ 22.724000] [<c01436b2>] __lock_acquire+0x602/0xdf0
[ 22.724000] [<c0144229>] lock_acquire+0x69/0x90
[ 22.724000] [<c033c476>] _spin_lock_irq+0x46/0x60
[ 22.724000] [<c0278c1c>] rtc_get_rtc_time+0x2c/0x1a0
[ 22.724000] [<c0117d02>] hpet_rtc_interrupt+0x152/0x1b0
[ 22.724000] [<c01588d1>] handle_IRQ_event+0x31/0x70
[ 22.724000] [<c01589a9>] __do_IRQ+0x99/0x110
[ 22.724000] [<c0105d97>] do_IRQ+0x47/0xa0
[ 22.724000] [<c0103e19>] common_interrupt+0x25/0x2c
[ 22.724000] [<b7f93c0a>] 0xb7f93c0a
[ 22.860000] sd 0:0:1:0: Attached scsi generic sg0 type 0
[ 22.860000] sd 2:0:0:0: Attached scsi generic sg1 type 0
[ 22.892000] md: md driver 0.90.3 MAX_MD_DEVS=256, MD_SB_DISKS=27
[ 22.892000] md: bitmap version 4.39
--
Joseph Fannin
jfannin@gmail.com
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [LOCKDEP] 2.6.18-rc1: inconsistent {hardirq-on-W} -> {in-hardirq-W} usage
2006-07-09 5:05 [LOCKDEP] 2.6.18-rc1: inconsistent {hardirq-on-W} -> {in-hardirq-W} usage Joseph Fannin
@ 2006-07-09 6:25 ` Andrew Morton
2006-07-09 7:45 ` Ingo Molnar
0 siblings, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2006-07-09 6:25 UTC (permalink / raw)
To: Joseph Fannin; +Cc: linux-kernel, mingo, arjan
On Sun, 9 Jul 2006 01:05:26 -0400
jfannin@gmail.com (Joseph Fannin) wrote:
> [ 22.488000]
> [ 22.488000] =================================
> [ 22.488000] [ INFO: inconsistent lock state ]
> [ 22.488000] ---------------------------------
> [ 22.488000] inconsistent {hardirq-on-W} -> {in-hardirq-W} usage.
> [ 22.488000] udevd/2684 [HC1[1]:SC0[0]:HE0:SE1] takes:
> [ 22.488000] (rtc_lock){+-..}, at: [<c0278c1c>] rtc_get_rtc_time+0x2c/0x1a0
> [ 22.488000] {hardirq-on-W} state was registered at:
> [ 22.488000] [<c0144229>] lock_acquire+0x69/0x90
> [ 22.488000] [<c033c020>] _spin_lock+0x40/0x50
> [ 22.488000] [<c0106fa3>] get_cmos_time+0x13/0x170
> [ 22.488000] [<c048daeb>] hpet_time_init+0xb/0x70
> [ 22.488000] [<c0487744>] start_kernel+0x1f4/0x470
> [ 22.488000] [<c0100210>] 0xc0100210
> [ 22.488000] irq event stamp: 193648
yup, thanks, bug.
--- a/arch/i386/kernel/time.c~get_cmos_time-locking-fix
+++ a/arch/i386/kernel/time.c
@@ -206,15 +206,16 @@ irqreturn_t timer_interrupt(int irq, voi
unsigned long get_cmos_time(void)
{
unsigned long retval;
+ unsigned long flags;
- spin_lock(&rtc_lock);
+ spin_lock_irqsave(&rtc_lock, flags);
if (efi_enabled)
retval = efi_get_time();
else
retval = mach_get_cmos_time();
- spin_unlock(&rtc_lock);
+ spin_unlock_irqrestore(&rtc_lock, flags);
return retval;
}
_
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [LOCKDEP] 2.6.18-rc1: inconsistent {hardirq-on-W} -> {in-hardirq-W} usage
2006-07-09 6:25 ` Andrew Morton
@ 2006-07-09 7:45 ` Ingo Molnar
2006-07-11 5:11 ` Joseph Fannin
0 siblings, 1 reply; 7+ messages in thread
From: Ingo Molnar @ 2006-07-09 7:45 UTC (permalink / raw)
To: Andrew Morton; +Cc: Joseph Fannin, linux-kernel, arjan, John Stultz
* Andrew Morton <akpm@osdl.org> wrote:
> yup, thanks, bug.
>
> --- a/arch/i386/kernel/time.c~get_cmos_time-locking-fix
> +++ a/arch/i386/kernel/time.c
> @@ -206,15 +206,16 @@ irqreturn_t timer_interrupt(int irq, voi
> unsigned long get_cmos_time(void)
> {
> unsigned long retval;
> + unsigned long flags;
>
> - spin_lock(&rtc_lock);
> + spin_lock_irqsave(&rtc_lock, flags);
Acked-by: Ingo Molnar <mingo@elte.hu>
this bug has been in the upstream kernel for a couple of years: it was
apparently introduced as part of HPET support, via the late_time_init()
hook/hack in init/main.c. The lockup window is open once, during bootup.
Ingo
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [LOCKDEP] 2.6.18-rc1: inconsistent {hardirq-on-W} -> {in-hardirq-W} usage
2006-07-09 7:45 ` Ingo Molnar
@ 2006-07-11 5:11 ` Joseph Fannin
2006-07-11 7:45 ` [patch] lockdep: HPET/RTC fix Ingo Molnar
0 siblings, 1 reply; 7+ messages in thread
From: Joseph Fannin @ 2006-07-11 5:11 UTC (permalink / raw)
To: Ingo Molnar
Cc: Andrew Morton, Joseph Fannin, linux-kernel, arjan, John Stultz
On Sun, Jul 09, 2006 at 09:45:44AM +0200, Ingo Molnar wrote:
>
> * Andrew Morton <akpm@osdl.org> wrote:
>
> > yup, thanks, bug.
> >
> > --- a/arch/i386/kernel/time.c~get_cmos_time-locking-fix
> > +++ a/arch/i386/kernel/time.c
> > @@ -206,15 +206,16 @@ irqreturn_t timer_interrupt(int irq, voi
> > unsigned long get_cmos_time(void)
> > {
> > unsigned long retval;
> > + unsigned long flags;
> >
> > - spin_lock(&rtc_lock);
> > + spin_lock_irqsave(&rtc_lock, flags);
>
> Acked-by: Ingo Molnar <mingo@elte.hu>
>
> this bug has been in the upstream kernel for a couple of years: it was
> apparently introduced as part of HPET support, via the late_time_init()
> hook/hack in init/main.c. The lockup window is open once, during bootup.
2.6.18-rc1-mm1, which includes this change, is printing this at
the same point I used to get the lockdep message:
[ 25.628000] BUG: warning at kernel/lockdep.c:1803/trace_hardirqs_on()
[ 25.628000] [<c0104a18>] show_trace_log_lvl+0x148/0x170
[ 25.628000] [<c0105cab>] show_trace+0x1b/0x20
[ 25.628000] [<c0105cd4>] dump_stack+0x24/0x30
[ 25.628000] [<c014af4e>] trace_hardirqs_on+0xce/0x200
[ 25.628000] [<c036cf21>] _spin_unlock_irq+0x31/0x70
[ 25.628000] [<c0296584>] rtc_get_rtc_time+0x44/0x1a0
[ 25.628000] [<c01198bb>] hpet_rtc_interrupt+0x21b/0x280
[ 25.628000] [<c0161141>] handle_IRQ_event+0x31/0x70
[ 25.628000] [<c0162d37>] handle_edge_irq+0xe7/0x210
[ 25.628000] [<c0106192>] do_IRQ+0x92/0x120
[ 25.628000] [<c0104121>] common_interrupt+0x25/0x2c
[ 25.628000] [<b7f15410>] 0xb7f15410
Updated dmesg and .config:
http://home.columbus.rr.com/jfannin3/dmesg-2.6.18-rc1-mm1
http://home.columbus.rr.com/jfannin3/config-2.6.18-rc1-mm1
--
Joseph Fannin
jhf@rivenstone.net
^ permalink raw reply [flat|nested] 7+ messages in thread* [patch] lockdep: HPET/RTC fix
2006-07-11 5:11 ` Joseph Fannin
@ 2006-07-11 7:45 ` Ingo Molnar
2006-07-14 3:57 ` [PATCH] remove unnecessary barrier in rtc_get_rtc_time Steven Rostedt
2006-08-05 21:59 ` [patch] lockdep: HPET/RTC fix Joseph Fannin
0 siblings, 2 replies; 7+ messages in thread
From: Ingo Molnar @ 2006-07-11 7:45 UTC (permalink / raw)
To: Andrew Morton, Joseph Fannin, linux-kernel, arjan, John Stultz
Cc: John Stultz
* Joseph Fannin <jfannin@gmail.com> wrote:
> 2.6.18-rc1-mm1, which includes this change, is printing this at
> the same point I used to get the lockdep message:
>
> [ 25.628000] BUG: warning at kernel/lockdep.c:1803/trace_hardirqs_on()
> [ 25.628000] [<c0104a18>] show_trace_log_lvl+0x148/0x170
> [ 25.628000] [<c0105cab>] show_trace+0x1b/0x20
> [ 25.628000] [<c0105cd4>] dump_stack+0x24/0x30
> [ 25.628000] [<c014af4e>] trace_hardirqs_on+0xce/0x200
> [ 25.628000] [<c036cf21>] _spin_unlock_irq+0x31/0x70
> [ 25.628000] [<c0296584>] rtc_get_rtc_time+0x44/0x1a0
> [ 25.628000] [<c01198bb>] hpet_rtc_interrupt+0x21b/0x280
> [ 25.628000] [<c0161141>] handle_IRQ_event+0x31/0x70
> [ 25.628000] [<c0162d37>] handle_edge_irq+0xe7/0x210
> [ 25.628000] [<c0106192>] do_IRQ+0x92/0x120
> [ 25.628000] [<c0104121>] common_interrupt+0x25/0x2c
> [ 25.628000] [<b7f15410>] 0xb7f15410
ouch! That's another HPET bug i believe. AFAICS rtc_get_rtc_time() is
really not meant to be called from any sort of timer interrupt! In
particular this looping code:
while (rtc_is_updating() != 0 && jiffies - uip_watchdog < 2*HZ/100) {
barrier();
cpu_relax();
}
it utterly bad in any hardirq context. Also, the locking isnt
hardirq-safe either:
spin_lock_irq(&rtc_lock);
...
spin_unlock_irq(&rtc_lock);
as it will enable interrupts unconditionally - even if we are in a
irqs-off hardirq.
John, how is this supposed to work?
Ingo
---------------->
Subject: lockdep: HPET/RTC fix
From: Ingo Molnar <mingo@elte.hu>
Joseph Fannin reported that hpet_rtc_interrupt() enables hardirqs
in irq context:
[ 25.628000] [<c014af4e>] trace_hardirqs_on+0xce/0x200
[ 25.628000] [<c036cf21>] _spin_unlock_irq+0x31/0x70
[ 25.628000] [<c0296584>] rtc_get_rtc_time+0x44/0x1a0
[ 25.628000] [<c01198bb>] hpet_rtc_interrupt+0x21b/0x280
[ 25.628000] [<c0161141>] handle_IRQ_event+0x31/0x70
[ 25.628000] [<c0162d37>] handle_edge_irq+0xe7/0x210
[ 25.628000] [<c0106192>] do_IRQ+0x92/0x120
[ 25.628000] [<c0104121>] common_interrupt+0x25/0x2c
the call of rtc_get_rtc_time() is highly suspect. At a minimum we
need the patch below to save/restore hardirq state.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
drivers/char/rtc.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
Index: linux/drivers/char/rtc.c
===================================================================
--- linux.orig/drivers/char/rtc.c
+++ linux/drivers/char/rtc.c
@@ -1222,7 +1222,7 @@ static int rtc_proc_open(struct inode *i
void rtc_get_rtc_time(struct rtc_time *rtc_tm)
{
- unsigned long uip_watchdog = jiffies;
+ unsigned long uip_watchdog = jiffies, flags;
unsigned char ctrl;
#ifdef CONFIG_MACH_DECSTATION
unsigned int real_year;
@@ -1249,7 +1249,7 @@ void rtc_get_rtc_time(struct rtc_time *r
* RTC has RTC_DAY_OF_WEEK, we should usually ignore it, as it is
* only updated by the RTC when initially set to a non-zero value.
*/
- spin_lock_irq(&rtc_lock);
+ spin_lock_irqsave(&rtc_lock, flags);
rtc_tm->tm_sec = CMOS_READ(RTC_SECONDS);
rtc_tm->tm_min = CMOS_READ(RTC_MINUTES);
rtc_tm->tm_hour = CMOS_READ(RTC_HOURS);
@@ -1263,7 +1263,7 @@ void rtc_get_rtc_time(struct rtc_time *r
real_year = CMOS_READ(RTC_DEC_YEAR);
#endif
ctrl = CMOS_READ(RTC_CONTROL);
- spin_unlock_irq(&rtc_lock);
+ spin_unlock_irqrestore(&rtc_lock, flags);
if (!(ctrl & RTC_DM_BINARY) || RTC_ALWAYS_BCD)
{
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH] remove unnecessary barrier in rtc_get_rtc_time
2006-07-11 7:45 ` [patch] lockdep: HPET/RTC fix Ingo Molnar
@ 2006-07-14 3:57 ` Steven Rostedt
2006-08-05 21:59 ` [patch] lockdep: HPET/RTC fix Joseph Fannin
1 sibling, 0 replies; 7+ messages in thread
From: Steven Rostedt @ 2006-07-14 3:57 UTC (permalink / raw)
To: Ingo Molnar
Cc: Andrew Morton, Joseph Fannin, linux-kernel, arjan, John Stultz,
Chase Venters
On Tue, 2006-07-11 at 09:45 +0200, Ingo Molnar wrote:
>
> ouch! That's another HPET bug i believe. AFAICS rtc_get_rtc_time() is
> really not meant to be called from any sort of timer interrupt! In
> particular this looping code:
>
> while (rtc_is_updating() != 0 && jiffies - uip_watchdog < 2*HZ/100) {
> barrier();
> cpu_relax();
> }
Seeing this after reading the volatile thread and then Chase's patch:
([PATCH] Make cpu_relax() imply barrier() on all arches)
http://marc.theaimsgroup.com/?l=linux-kernel&m=115237514517594&w=2
(yes I'm a bit behind in my LKML reading... 1663 messages to go)
There's no reason to have a barrier in this loop.
-- Steve
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Index: linux-2.6.18-rc1/drivers/char/rtc.c
===================================================================
--- linux-2.6.18-rc1.orig/drivers/char/rtc.c 2006-07-13 23:40:58.000000000 -0400
+++ linux-2.6.18-rc1/drivers/char/rtc.c 2006-07-13 23:41:06.000000000 -0400
@@ -1238,10 +1238,8 @@ void rtc_get_rtc_time(struct rtc_time *r
* Once the read clears, read the RTC time (again via ioctl). Easy.
*/
- while (rtc_is_updating() != 0 && jiffies - uip_watchdog < 2*HZ/100) {
- barrier();
+ while (rtc_is_updating() != 0 && jiffies - uip_watchdog < 2*HZ/100)
cpu_relax();
- }
/*
* Only the values that we read from the RTC are set. We leave
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [patch] lockdep: HPET/RTC fix
2006-07-11 7:45 ` [patch] lockdep: HPET/RTC fix Ingo Molnar
2006-07-14 3:57 ` [PATCH] remove unnecessary barrier in rtc_get_rtc_time Steven Rostedt
@ 2006-08-05 21:59 ` Joseph Fannin
1 sibling, 0 replies; 7+ messages in thread
From: Joseph Fannin @ 2006-08-05 21:59 UTC (permalink / raw)
To: Ingo Molnar
Cc: Andrew Morton, Joseph Fannin, linux-kernel, arjan, John Stultz
On Tue, Jul 11, 2006 at 09:45:41AM +0200, Ingo Molnar wrote:
[Apologies for the very slow turn-around time on this. If patches
are written in the relatively-near future, I will test and report in a
more timely manner.]
> Subject: lockdep: HPET/RTC fix
> From: Ingo Molnar <mingo@elte.hu>
>
> Joseph Fannin reported that hpet_rtc_interrupt() enables hardirqs
> in irq context:
> --- linux.orig/drivers/char/rtc.c
> +++ linux/drivers/char/rtc.c
> @@ -1222,7 +1222,7 @@ static int rtc_proc_open(struct inode *i
>
> void rtc_get_rtc_time(struct rtc_time *rtc_tm)
> {
> - unsigned long uip_watchdog = jiffies;
> + unsigned long uip_watchdog = jiffies, flags;
> unsigned char ctrl;
> #ifdef CONFIG_MACH_DECSTATION
> unsigned int real_year;
> @@ -1249,7 +1249,7 @@ void rtc_get_rtc_time(struct rtc_time *r
> * RTC has RTC_DAY_OF_WEEK, we should usually ignore it, as it is
> * only updated by the RTC when initially set to a non-zero value.
> */
> - spin_lock_irq(&rtc_lock);
> + spin_lock_irqsave(&rtc_lock, flags);
> rtc_tm->tm_sec = CMOS_READ(RTC_SECONDS);
> rtc_tm->tm_min = CMOS_READ(RTC_MINUTES);
> rtc_tm->tm_hour = CMOS_READ(RTC_HOURS);
> @@ -1263,7 +1263,7 @@ void rtc_get_rtc_time(struct rtc_time *r
> real_year = CMOS_READ(RTC_DEC_YEAR);
> #endif
> ctrl = CMOS_READ(RTC_CONTROL);
> - spin_unlock_irq(&rtc_lock);
> + spin_unlock_irqrestore(&rtc_lock, flags);
>
> if (!(ctrl & RTC_DM_BINARY) || RTC_ALWAYS_BCD)
> {
It seems this isn't enough:
[ 22.504000] EXT3 FS on sda3, internal journal
[ 22.892000] BUG: warning at kernel/lockdep.c:1803/trace_hardirqs_on()
[ 22.892000] [<c0104880>] show_trace_log_lvl+0x1a0/0x1d0
[ 22.892000] [<c0105a7b>] show_trace+0x1b/0x20
[ 22.892000] [<c0105aa4>] dump_stack+0x24/0x30
[ 22.892000] [<c01451e4>] trace_hardirqs_on+0xf4/0x180
[ 22.892000] [<c032e431>] _spin_unlock_irq+0x31/0x60
[ 22.892000] [<c0278a64>] rtc_get_rtc_time+0x44/0x1a0
[ 22.892000] [<c0118742>] hpet_rtc_interrupt+0x152/0x1b0
[ 22.892000] [<c015bb51>] handle_IRQ_event+0x31/0x70
[ 22.892000] [<c015bc29>] __do_IRQ+0x99/0x110
[ 22.892000] [<c0105ef7>] do_IRQ+0x47/0xa0
[ 22.892000] [<c0103eed>] common_interrupt+0x25/0x2c
[ 22.892000] [<c032f902>] do_page_fault+0x82/0x630
[ 22.892000] [<c0104085>] error_code+0x39/0x40
[ 22.892000] [<b7e8d060>] 0xb7e8d060
[ 22.892000] [<c0105a7b>] show_trace+0x1b/0x20
[ 22.892000] [<c0105aa4>] dump_stack+0x24/0x30
[ 22.892000] [<c01451e4>] trace_hardirqs_on+0xf4/0x180
[ 22.892000] [<c032e431>] _spin_unlock_irq+0x31/0x60
[ 22.892000] [<c0278a64>] rtc_get_rtc_time+0x44/0x1a0
[ 22.892000] [<c0118742>] hpet_rtc_interrupt+0x152/0x1b0
[ 22.892000] [<c015bb51>] handle_IRQ_event+0x31/0x70
[ 22.892000] [<c015bc29>] __do_IRQ+0x99/0x110
[ 22.892000] [<c0105ef7>] do_IRQ+0x47/0xa0
[ 22.892000] [<c0103eed>] common_interrupt+0x25/0x2c
[ 22.892000] [<c0104085>] error_code+0x39/0x40
This is from 2.6.18-rc3, but it's reproducable with pretty much
any kernel (the -rc3 backtrace is longer, it seems).
Should I file this in Bugzilla?
--
Joseph Fannin
jfannin@gmail.com
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2006-08-05 22:00 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-07-09 5:05 [LOCKDEP] 2.6.18-rc1: inconsistent {hardirq-on-W} -> {in-hardirq-W} usage Joseph Fannin
2006-07-09 6:25 ` Andrew Morton
2006-07-09 7:45 ` Ingo Molnar
2006-07-11 5:11 ` Joseph Fannin
2006-07-11 7:45 ` [patch] lockdep: HPET/RTC fix Ingo Molnar
2006-07-14 3:57 ` [PATCH] remove unnecessary barrier in rtc_get_rtc_time Steven Rostedt
2006-08-05 21:59 ` [patch] lockdep: HPET/RTC fix Joseph Fannin
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.