public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: 2.5.66-bk5 spinlock warnings/errors - Specifically ide-io:109 spinlock notice
@ 2003-04-03  5:48 Manfred Spraul
  2003-04-03 16:36 ` Shawn Starr
  2003-04-16 16:28 ` Shawn Starr
  0 siblings, 2 replies; 5+ messages in thread
From: Manfred Spraul @ 2003-04-03  5:48 UTC (permalink / raw)
  To: Shawn Starr; +Cc: Narayan Desai, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 965 bytes --]

Shawn wrote:

>>List:     linux-kernel
>>Subject:  2.5.66-bk5 spinlock warnings/errors
>From:     Narayan Desai <desai () mcs ! anl ! gov>
>>Date:     2003-04-02 4:01:02
>
>>hda: dma_timer_expiry: dma status == 0x24
>>drivers/ide/ide-io.c:109: spin_lock(drivers/ide/ide.c:c037abe8) already 
>>locked by drivers/ide/ide-io.c/948 drivers/ide/ide-io.c:990: 
>>spin_unlock(drivers/ide/ide.c:c037abe8) not locked
>>hda: lost interrupt
>>hda: dma_intr: bad DMA status (dma_stat=30)
>>hda: dma_intr: status=0x50 { DriveReady SeekComplete }
>
>I had this problem last night while making a huge debian package (tar.bz2 
>stage). It occured once.
>  
>
The attached patch should fix the problem:
the dma_timer_expiry handler calls HWGROUP(drive)->handler in the wrong 
context. Instead of calling ->handler directly, the ->expiry handler 
must inform the caller that ->handler must be called, and then the 
caller must do some setup before calling ->handler.

--
    Manfred

[-- Attachment #2: patch-ide-expiry --]
[-- Type: text/plain, Size: 1618 bytes --]

// $Header$
// Kernel Version:
//  VERSION = 2
//  PATCHLEVEL = 5
//  SUBLEVEL = 66
//  EXTRAVERSION =
--- 2.5/include/linux/ide.h	2003-03-25 17:49:52.000000000 +0100
+++ build-2.5/include/linux/ide.h	2003-03-30 10:04:08.000000000 +0200
@@ -1043,6 +1043,8 @@
 typedef ide_startstop_t (ide_handler_t)(ide_drive_t *);
 typedef ide_startstop_t (ide_post_handler_t)(ide_drive_t *);
 typedef int (ide_expiry_t)(ide_drive_t *);
+#define EXPIRY_ABORT		(0)
+#define EXPIRY_CALLHANDLER	(-1)
 
 typedef struct hwgroup_s {
 		/* irq handler, if active */
--- 2.5/drivers/ide/ide-io.c	2003-03-25 17:49:40.000000000 +0100
+++ build-2.5/drivers/ide/ide-io.c	2003-03-30 10:05:28.000000000 +0200
@@ -973,7 +973,7 @@
 			}
 			if ((expiry = hwgroup->expiry) != NULL) {
 				/* continue */
-				if ((wait = expiry(drive)) != 0) {
+				if ((wait = expiry(drive)) > 0) {
 					/* reset timer */
 					hwgroup->timer.expires  = jiffies + wait;
 					add_timer(&hwgroup->timer);
@@ -998,7 +998,7 @@
 			/* local CPU only,
 			 * as if we were handling an interrupt */
 			local_irq_disable();
-			if (hwgroup->poll_timeout != 0) {
+			if (hwgroup->poll_timeout != 0 || wait == EXPIRY_CALLHANDLER) {
 				startstop = handler(drive);
 			} else if (drive_is_ready(drive)) {
 				if (drive->waiting_for_dma)
--- 2.5/drivers/ide/ide-dma.c	2003-03-25 17:49:40.000000000 +0100
+++ build-2.5/drivers/ide/ide-dma.c	2003-03-30 10:05:54.000000000 +0200
@@ -483,9 +483,9 @@
 		return WAIT_CMD;
 
 	if (dma_stat & 4)	/* Got an Interrupt */
-		HWGROUP(drive)->handler(drive);
+		return EXPIRY_CALLHANDLER;
 
-	return 0;
+	return EXPIRY_ABORT;
 }
 
 /**

^ permalink raw reply	[flat|nested] 5+ messages in thread
* 2.5.66-bk5 spinlock warnings/errors - Specifically ide-io:109 spinlock notice
@ 2003-04-02 19:29 Shawn Starr
  0 siblings, 0 replies; 5+ messages in thread
From: Shawn Starr @ 2003-04-02 19:29 UTC (permalink / raw)
  To: Linux Kernel Mailing List; +Cc: desai, alan

>List:     linux-kernel
>Subject:  2.5.66-bk5 spinlock warnings/errors
From:     Narayan Desai <desai () mcs ! anl ! gov>
>Date:     2003-04-02 4:01:02

>hda: dma_timer_expiry: dma status == 0x24
>drivers/ide/ide-io.c:109: spin_lock(drivers/ide/ide.c:c037abe8) already 
>locked by drivers/ide/ide-io.c/948 drivers/ide/ide-io.c:990: 
>spin_unlock(drivers/ide/ide.c:c037abe8) not locked
>hda: lost interrupt
>hda: dma_intr: bad DMA status (dma_stat=30)
>hda: dma_intr: status=0x50 { DriveReady SeekComplete }

I had this problem last night while making a huge debian package (tar.bz2 
stage). It occured once.

Switching to Debian unstable and already two new interesting kernel notices 
and one 3c59x  NETDEV Watchdog - eth0 transmit timeout bug.





^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-04-16 16:49 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-04-03  5:48 2.5.66-bk5 spinlock warnings/errors - Specifically ide-io:109 spinlock notice Manfred Spraul
2003-04-03 16:36 ` Shawn Starr
2003-04-16 16:28 ` Shawn Starr
2003-04-16 16:59   ` Manfred Spraul
  -- strict thread matches above, loose matches on Subject: below --
2003-04-02 19:29 Shawn Starr

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox