mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Davin McCall <davmac@ozonline.com.au>
To: Davin McCall <davmac@ozonline.com.au>
Cc: B.Zolnierkiewicz@elka.pw.edu.pl, linux-kernel@vger.kernel.org,
	linux-ide@vger.kernel.org
Subject: Re: [PATCH] various IDE patches/cleanups
Date: Thu, 5 Feb 2004 16:21:38 +1100	[thread overview]
Message-ID: <20040205162138.124d0276.davmac@ozonline.com.au> (raw)
In-Reply-To: <20040130143355.630346cc.davmac@ozonline.com.au>

Damn, I found a problem with this. Needs to set hwgroup->expiry to NULL before releasing ide_lock; that prevents ide_timer_expiry() from running the expiry() handler and instead it will simulate an interrupt.

Otherwise, expiry() may return non-zero which will cause the timer to be reset. The interrupt would effectively be lost. In some cases (abuses?) this would lock the whole hwgroup forever as the expiry() function always returns > 0 (ide-cd.c, cdrom_timer_expiry() for example).

Here's the revised patch.


diff -urN linux-2.6.0-patch2/drivers/ide/ide-io.c linux-2.6.0/drivers/ide/ide-io.c
--- linux-2.6.0-patch2/drivers/ide/ide-io.c	Wed Jan 28 22:55:00 2004
+++ linux-2.6.0/drivers/ide/ide-io.c	Wed Jan 28 23:49:17 2004
@@ -1303,8 +1303,12 @@
 		hwgroup->busy = 1;	/* paranoia */
 		printk(KERN_ERR "%s: ide_intr: hwgroup->busy was 0 ??\n", drive->name);
 	}
+	if (!del_timer(&hwgroup->timer)) {
+		/* timer has expired, ide_timer_expiry is waiting to get lock */
+		hwgroup->expiry = NULL;
+		spin_unlock(&ide_lock);
+		return IRQ_HANDLED;
+	}
 	hwgroup->handler = NULL;
-	del_timer(&hwgroup->timer);
 	spin_unlock(&ide_lock);
 
 	if (drive->unmask)

  parent reply	other threads:[~2004-02-05  5:17 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-01-03  4:28 [PATCH] fix issues with loading PCI ide drivers as modules (linux 2.6.0) Davin McCall
2004-01-04  1:56 ` Bartlomiej Zolnierkiewicz
2004-01-04  3:21   ` Davin McCall
2004-01-04  3:52     ` Bartlomiej Zolnierkiewicz
2004-01-04  6:31       ` Davin McCall
2004-01-04 14:47         ` Bartlomiej Zolnierkiewicz
2004-01-05  2:09           ` Davin McCall
2004-01-05 14:16             ` Bartlomiej Zolnierkiewicz
2004-01-06  2:51               ` Davin McCall
2004-01-06 11:13                 ` Bartlomiej Zolnierkiewicz
2004-01-06 13:09                   ` Davin McCall
2004-01-06 13:45                   ` Davin McCall
2004-01-30  3:27                   ` [PATCH] various IDE patches/cleanups Davin McCall
2004-01-30  3:30                     ` Davin McCall
2004-01-30  3:33                       ` Davin McCall
2004-01-30  3:34                         ` Davin McCall
2004-01-30  3:35                           ` Davin McCall
2004-02-05  5:21                         ` Davin McCall [this message]
2004-02-05  6:37                           ` Davin McCall
2004-02-03 19:41                     ` Bartlomiej Zolnierkiewicz
2004-02-05  3:51                       ` Davin McCall

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040205162138.124d0276.davmac@ozonline.com.au \
    --to=davmac@ozonline.com.au \
    --cc=B.Zolnierkiewicz@elka.pw.edu.pl \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome