linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [git patches] IDE fixes
Date: Tue, 10 Apr 2007 22:45:37 +0200	[thread overview]
Message-ID: <200704102245.37696.bzolnier@gmail.com> (raw)


Please pull from:

master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git/

to receive the following updates:

 drivers/ide/ide-cd.c   |    9 +++++++++
 drivers/ide/ide-io.c   |    6 +++++-
 drivers/ide/ide-iops.c |    2 ++
 drivers/ide/ide.c      |    2 ++
 include/linux/ide.h    |    2 ++
 5 files changed, 20 insertions(+), 1 deletions(-)


Danny Kukawka (1):
      ide: add "optical" to sysfs "media" attribute

Stuart Hayes (1):
      ide: ugly messages trying to open CD drive with no media present

Suleiman Souhlal (1):
      ide: correctly prevent IDE timer expiry function to run if request was already handled


diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 45a928c..638becd 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -735,6 +735,15 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
 			cdrom_saw_media_change (drive);
 			/*printk("%s: media changed\n",drive->name);*/
 			return 0;
+ 		} else if ((sense_key == ILLEGAL_REQUEST) &&
+ 			   (rq->cmd[0] == GPCMD_START_STOP_UNIT)) {
+ 			/*
+ 			 * Don't print error message for this condition--
+ 			 * SFF8090i indicates that 5/24/00 is the correct
+ 			 * response to a request to close the tray if the
+ 			 * drive doesn't have that capability.
+ 			 * cdrom_log_sense() knows this!
+ 			 */
 		} else if (!(rq->cmd_flags & REQ_QUIET)) {
 			/* Otherwise, print an error. */
 			ide_dump_status(drive, "packet command error", stat);
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index 0e02800..8670112 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -1226,6 +1226,7 @@ static void ide_do_request (ide_hwgroup_t *hwgroup, int masked_irq)
 #endif
 				/* so that ide_timer_expiry knows what to do */
 				hwgroup->sleeping = 1;
+				hwgroup->req_gen_timer = hwgroup->req_gen;
 				mod_timer(&hwgroup->timer, sleep);
 				/* we purposely leave hwgroup->busy==1
 				 * while sleeping */
@@ -1411,7 +1412,8 @@ void ide_timer_expiry (unsigned long data)
 
 	spin_lock_irqsave(&ide_lock, flags);
 
-	if ((handler = hwgroup->handler) == NULL) {
+	if (((handler = hwgroup->handler) == NULL) ||
+	    (hwgroup->req_gen != hwgroup->req_gen_timer)) {
 		/*
 		 * Either a marginal timeout occurred
 		 * (got the interrupt just as timer expired),
@@ -1439,6 +1441,7 @@ void ide_timer_expiry (unsigned long data)
 				if ((wait = expiry(drive)) > 0) {
 					/* reset timer */
 					hwgroup->timer.expires  = jiffies + wait;
+					hwgroup->req_gen_timer = hwgroup->req_gen;
 					add_timer(&hwgroup->timer);
 					spin_unlock_irqrestore(&ide_lock, flags);
 					return;
@@ -1653,6 +1656,7 @@ irqreturn_t ide_intr (int irq, void *dev_id)
 		printk(KERN_ERR "%s: ide_intr: hwgroup->busy was 0 ??\n", drive->name);
 	}
 	hwgroup->handler = NULL;
+	hwgroup->req_gen++;
 	del_timer(&hwgroup->timer);
 	spin_unlock(&ide_lock);
 
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
index 1ee53a5..3caa176 100644
--- a/drivers/ide/ide-iops.c
+++ b/drivers/ide/ide-iops.c
@@ -889,6 +889,7 @@ static void __ide_set_handler (ide_drive_t *drive, ide_handler_t *handler,
 	hwgroup->handler	= handler;
 	hwgroup->expiry		= expiry;
 	hwgroup->timer.expires	= jiffies + timeout;
+	hwgroup->req_gen_timer = hwgroup->req_gen;
 	add_timer(&hwgroup->timer);
 }
 
@@ -929,6 +930,7 @@ void ide_execute_command(ide_drive_t *drive, task_ioreg_t cmd, ide_handler_t *ha
 	hwgroup->handler	= handler;
 	hwgroup->expiry		= expiry;
 	hwgroup->timer.expires	= jiffies + timeout;
+	hwgroup->req_gen_timer = hwgroup->req_gen;
 	add_timer(&hwgroup->timer);
 	hwif->OUTBSYNC(drive, cmd, IDE_COMMAND_REG);
 	/* Drive takes 400nS to respond, we must avoid the IRQ being
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index a6f098f..ae5bf2b 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -1962,6 +1962,8 @@ static char *media_string(ide_drive_t *drive)
 		return "tape";
 	case ide_floppy:
 		return "floppy";
+	case ide_optical:
+		return "optical";
 	default:
 		return "UNKNOWN";
 	}
diff --git a/include/linux/ide.h b/include/linux/ide.h
index 58564a1..d3bbc71 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -861,6 +861,8 @@ typedef struct hwgroup_s {
 	int (*expiry)(ide_drive_t *);
 		/* ide_system_bus_speed */
 	int pio_clock;
+	int req_gen;
+	int req_gen_timer;
 
 	unsigned char cmd_buf[4];
 } ide_hwgroup_t;

             reply	other threads:[~2007-04-10 20:36 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-10 20:45 Bartlomiej Zolnierkiewicz [this message]
  -- strict thread matches above, loose matches on Subject: below --
2008-07-05 18:38 [git patches] IDE fixes Bartlomiej Zolnierkiewicz
2008-06-30 18:21 Bartlomiej Zolnierkiewicz
2008-06-20 18:07 Bartlomiej Zolnierkiewicz
2008-06-20 18:09 ` Alan Cox
2008-06-20 18:35   ` Grant Grundler
2008-06-20 19:00     ` Bartlomiej Zolnierkiewicz
2008-06-15 19:49 Bartlomiej Zolnierkiewicz
2008-06-15 23:33 ` Linus Torvalds
2008-06-16  0:04   ` Linus Torvalds
2008-06-16  9:10     ` Bartlomiej Zolnierkiewicz
2008-06-10 19:16 Bartlomiej Zolnierkiewicz
2008-05-14 21:18 Bartlomiej Zolnierkiewicz
2008-05-04 15:05 Bartlomiej Zolnierkiewicz
2008-05-01 12:18 Bartlomiej Zolnierkiewicz
2008-04-29 21:12 Bartlomiej Zolnierkiewicz
2008-04-16 23:15 Bartlomiej Zolnierkiewicz
2008-04-07 21:32 Bartlomiej Zolnierkiewicz
2008-04-02 19:26 Bartlomiej Zolnierkiewicz
2008-03-29 19:01 Bartlomiej Zolnierkiewicz
2008-03-22 16:14 Bartlomiej Zolnierkiewicz
2008-03-07 21:02 Bartlomiej Zolnierkiewicz
2008-02-26 20:57 Bartlomiej Zolnierkiewicz
2008-02-19  1:00 Bartlomiej Zolnierkiewicz
2008-02-11  0:06 Bartlomiej Zolnierkiewicz
2008-01-10 22:27 Bartlomiej Zolnierkiewicz
2007-12-24 14:37 Bartlomiej Zolnierkiewicz
2007-12-24 15:57 ` Bartlomiej Zolnierkiewicz
2007-12-12 23:03 Bartlomiej Zolnierkiewicz
2007-11-27 20:39 Bartlomiej Zolnierkiewicz
2007-11-13 21:13 Bartlomiej Zolnierkiewicz
2007-11-05 20:49 Bartlomiej Zolnierkiewicz
2007-10-26 18:34 Bartlomiej Zolnierkiewicz
2007-09-17 10:38 Bartlomiej Zolnierkiewicz
2007-08-20 20:49 Bartlomiej Zolnierkiewicz
2007-08-01 21:52 Bartlomiej Zolnierkiewicz
2007-07-08 13:26 Bartlomiej Zolnierkiewicz
2007-07-03 20:30 Bartlomiej Zolnierkiewicz
2007-06-16  0:28 Bartlomiej Zolnierkiewicz
2007-06-08 13:20 Bartlomiej Zolnierkiewicz
2007-05-24  0:46 Bartlomiej Zolnierkiewicz
2007-05-24  1:56 ` Linus Torvalds
2007-05-24  2:16   ` Linus Torvalds
2007-04-20 20:19 Bartlomiej Zolnierkiewicz
2007-03-17 21:07 Bartlomiej Zolnierkiewicz
2007-03-18  0:04 ` Linus Torvalds
2007-03-18  0:44   ` Bartlomiej Zolnierkiewicz

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=200704102245.37696.bzolnier@gmail.com \
    --to=bzolnier@gmail.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.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;
as well as URLs for NNTP newsgroup(s).