Skip to contentSkip to conversation

Fix IDE locking error.

PATCH Dave Jones 3 participants 6 messages Feb 16, 2006 – Feb 17, 2006 libata

lore
Share & tools
lore

Dave Jones

author
#0 lore raw

This bit us a few kernels ago, and for some reason never made it's way upstream.

https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=144743

Kernel panic - not syncing: drivers/ide/pci/piix.c:231:

spin_lock(drivers/ide/ide.c:c03cef28) already locked by driver/ide/ide-iops.c/1153.

From: Alan Cox <[email protected]>

drivers/ide/pci/piix.c renamed from drivers/ide/pci/piix.c~ +9 -2
@@ -203,6 +203,8 @@
 	}
 }
 
+static spinlock_t tune_lock = SPIN_LOCK_UNLOCKED;
+
 /**
  *	piix_tune_drive		-	tune a drive attached to a PIIX
  *	@drive: drive to tune
@@ -229,7 +231,12 @@
 			    { 2, 3 }, };
 
 	pio = ide_get_best_pio_mode(drive, pio, 5, NULL);
-	spin_lock_irqsave(&ide_lock, flags);
+	
+	/* Master v slave is synchronized above us but the slave register is
+	   shared by the two hwifs so the corner case of two slave timeouts in
+	   parallel must be locked */
+	   
+	spin_lock_irqsave(&tune_lock, flags);
 	pci_read_config_word(dev, master_port, &master_data);
 	if (is_slave) {
 		master_data = master_data | 0x4000;
@@ -249,7 +256,7 @@
 	pci_write_config_word(dev, master_port, master_data);
 	if (is_slave)
 		pci_write_config_byte(dev, slave_port, slave_data);
-	spin_unlock_irqrestore(&ide_lock, flags);
+	spin_unlock_irqrestore(&tune_lock, flags);
 }
 
 /**
#1 lore raw
Quoted 2 lines · Dave Jones

This bit us a few kernels ago, and for some reason never made it's way upstream.

Because has never been submitted...

Quoted 3 lines

https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=144743

Kernel panic - not syncing: drivers/ide/pci/piix.c:231:

spin_lock(drivers/ide/ide.c:c03cef28) already locked by driver/ide/ide-iops.c/1153.

Could we get a decent description of the problem and of the patch? Starting with the short description: it is piix locking being fixed not IDE one.

As this is piix only patch your bugzilla #144768 is not duplicate of
#144743. Also some people reported the problem for atiixp.c
under #144743 (attixp.c has similar locking problem to piix.c). So either they didn't care to reopen the bug or it was fixed by some other change it the core IDE code.

Quoted 37 lines

From: Alan Cox <[email protected]>

drivers/ide/pci/piix.c 2005-07-11 10:23:24.637181320 +0100 renamed from drivers/ide/pci/piix.c~ 2005-07-11 10:23:24.637181320 +0100 +9 -2
@@ -203,6 +203,8 @@
        }
 }
 
+static spinlock_t tune_lock = SPIN_LOCK_UNLOCKED;
+
 /**
  *     piix_tune_drive         -       tune a drive attached to a PIIX
  *     @drive: drive to tune
@@ -229,7 +231,12 @@
                            { 2, 3 }, };
 
        pio = ide_get_best_pio_mode(drive, pio, 5, NULL);
-       spin_lock_irqsave(&ide_lock, flags);
+
+       /* Master v slave is synchronized above us but the slave register is
+          shared by the two hwifs so the corner case of two slave timeouts in
+          parallel must be locked */
+
+       spin_lock_irqsave(&tune_lock, flags);
        pci_read_config_word(dev, master_port, &master_data);
        if (is_slave) {
                master_data = master_data | 0x4000;
@@ -249,7 +256,7 @@
        pci_write_config_word(dev, master_port, master_data);
        if (is_slave)
                pci_write_config_byte(dev, slave_port, slave_data);
-       spin_unlock_irqrestore(&ide_lock, flags);
+       spin_unlock_irqrestore(&tune_lock, flags);
 }
 
 /**
#2 lore raw
Quoted 1 line · Bartlomiej Zolnierkiewicz

Could we get a decent description of the problem and of the patch?

Audit the lock state on all entries to the tune function and it certainly was the case that the old IDE layer could call it with the lock either already held or not.

Alan

#3 lore raw
Quoted 6 lines · Alan Cox
Quoted 1 line · Bartlomiej Zolnierkiewicz

Could we get a decent description of the problem and of the patch?

Audit the lock state on all entries to the tune function and it certainly was the case that the old IDE layer could call it with the lock either already held or not.

Thank you but this is not a patch description, this is a recipe for me to spend nice friday's evening staring all over IDE code and making patch description myself...

http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt ?

Bartlomiej

#4 lore raw
Quoted 3 lines · Bartlomiej Zolnierkiewicz

Thank you but this is not a patch description, this is a recipe for me to spend nice friday's evening staring all over IDE code and making patch description myself...

Best I can do. I did the original analysis months and months ago when I fixed up that locking. Since then there have been enough changes that it may not be needed and I no longer remember the finer details

Quoted 1 line

http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt ?

I have better things to do. If you don't want the patch the its not my problem. I don't even use drivers/ide any more.

Alan

#5 lore raw
Quoted 8 lines · Alan Cox
Quoted 3 lines · Bartlomiej Zolnierkiewicz

Thank you but this is not a patch description, this is a recipe for me to spend nice friday's evening staring all over IDE code and making patch description myself...

Best I can do. I did the original analysis months and months ago when I fixed up that locking. Since then there have been enough changes that it may not be needed and I no longer remember the finer details

Even original analysis would be OK.

Quoted 4 lines
Quoted 1 line

http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt ?

I have better things to do. If you don't want the patch the its not my problem. I don't even use drivers/ide any more.

I want a patch but I would like to know more about it.

Bartlomiej