Skip to contentSkip to conversation

cs5530: add missing ->dma_base check

PATCH In review Bartlomiej Zolnierkiewicz 1 participant 1 message Jul 29, 2007 libata

lore
Share & tools
lore
#0 lore raw

PATCH 3/12 cs5530: add missing ->dma_base check

If ->dma_base is not set (== PCI BAR4 cannot be reserved) then DMA hooks shouldn't be initialized or bad things will happen.

Also this host driver requires valid PCI BAR4 for normal operation so check it in ->init_chipset and fail initialization if not set.

---
 drivers/ide/pci/cs5530.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/ide/pci/cs5530.c +7 -1
Index: b/drivers/ide/pci/cs5530.c
===================================================================
@@ -1,5 +1,5 @@
 /*
- * linux/drivers/ide/pci/cs5530.c		Version 0.73	Mar 10 2007
+ * linux/drivers/ide/pci/cs5530.c		Version 0.74	Jul 28 2007
  *
  * Copyright (C) 2000			Andre Hedrick <[email protected]>
  * Copyright (C) 2000			Mark Lord <[email protected]>
@@ -164,6 +164,9 @@ static unsigned int __devinit init_chips
 	struct pci_dev *master_0 = NULL, *cs5530_0 = NULL;
 	unsigned long flags;
 
+	if (pci_resource_start(dev, 4) == 0)
+		return -EFAULT;
+
 	dev = NULL;
 	while ((dev = pci_get_device(PCI_VENDOR_ID_CYRIX, PCI_ANY_ID, dev)) != NULL) {
 		switch (dev->device) {
@@ -282,6 +285,9 @@ static void __devinit init_hwif_cs5530 (
 			/* needs autotuning later */
 	}
 
+	if (hwif->dma_base == 0)
+		return;
+
 	hwif->atapi_dma = 1;
 	hwif->ultra_mask = 0x07;
 	hwif->mwdma_mask = 0x07;