public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox