Patchwork cmd640: fix kernel oops in test_irq() method

login
register
mail settings
Submitter Sergei Shtylyov
Date May 8, 2010, 6:07 p.m.
Message ID <201005082207.14690.sshtylyov@ru.mvista.com>
Download mbox | patch
Permalink /patch/51972/
State Accepted
Delegated to: David Miller
Headers show

Comments

Sergei Shtylyov - May 8, 2010, 6:07 p.m.
When implementing the test_iqr() method, I forgot that this driver is not an
ordinary PCI driver and also needs to support VLB variant of the chip. Moreover,
'hwif->dev' should be NULL, potentially causing oops in pci_read_config_byte().

Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>

---
The patch is atop of ide-2.6.git tree...

 drivers/ide/cmd640.c |    6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - May 11, 2010, 7:09 a.m.
From: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Date: Sat, 8 May 2010 22:07:14 +0400

> When implementing the test_iqr() method, I forgot that this driver is not an
> ordinary PCI driver and also needs to support VLB variant of the chip. Moreover,
> 'hwif->dev' should be NULL, potentially causing oops in pci_read_config_byte().
> 
> Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>

Applied, thanks a lot Sergei.
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

Index: ide-2.6/drivers/ide/cmd640.c
===================================================================
--- ide-2.6.orig/drivers/ide/cmd640.c
+++ ide-2.6/drivers/ide/cmd640.c
@@ -633,12 +633,10 @@  static void __init cmd640_init_dev(ide_d
 
 static int cmd640_test_irq(ide_hwif_t *hwif)
 {
-	struct pci_dev *dev	= to_pci_dev(hwif->dev);
 	int irq_reg		= hwif->channel ? ARTTIM23 : CFR;
-	u8  irq_stat, irq_mask	= hwif->channel ? ARTTIM23_IDE23INTR :
+	u8  irq_mask		= hwif->channel ? ARTTIM23_IDE23INTR :
 						  CFR_IDE01INTR;
-
-	pci_read_config_byte(dev, irq_reg, &irq_stat);
+	u8  irq_stat		= get_cmd640_reg(irq_reg);
 
 	return (irq_stat & irq_mask) ? 1 : 0;
 }