[openib-general] [PATCH 6/6] Use pci_find_ht_capability() in drivers/infiniband/hw/ipath/ipath_iba6110.c

Michael Ellerman michael at ellerman.id.au
Wed Nov 8 22:40:45 PST 2006


Use pci_find_ht_capability() in drivers/infiniband/hw/ipath/ipath_iba6110.c

The old code made no guarantees about whether slave_or_pri_blk() was called
before or after set_int_handler() - so I assume they're order independant.

We now always call slave_or_pri_blk() first (if at all), followed by
set_int_handler().

Signed-off-by: Michael Ellerman <michael at ellerman.id.au>
---

 drivers/infiniband/hw/ipath/ipath_iba6110.c |   31 ++++++++--------------------
 1 file changed, 9 insertions(+), 22 deletions(-)

Index: msi/drivers/infiniband/hw/ipath/ipath_iba6110.c
===================================================================
--- msi.orig/drivers/infiniband/hw/ipath/ipath_iba6110.c
+++ msi/drivers/infiniband/hw/ipath/ipath_iba6110.c
@@ -750,7 +750,6 @@ static int ipath_setup_ht_reset(struct i
 	return 0;
 }
 
-#define HT_INTR_DISC_CONFIG  0x80	/* HT interrupt and discovery cap */
 #define HT_INTR_REG_INDEX    2	/* intconfig requires indirect accesses */
 
 /*
@@ -971,8 +970,7 @@ static int set_int_handler(struct ipath_
 static int ipath_setup_ht_config(struct ipath_devdata *dd,
 				 struct pci_dev *pdev)
 {
-	int pos, ret = 0;
-	int ihandler = 0;
+	int pos;
 
 	/*
 	 * Read the capability info to find the interrupt info, and also
@@ -980,14 +978,8 @@ static int ipath_setup_ht_config(struct 
 	 * do this early, before we ever enable errors or hardware errors,
 	 * mostly to avoid causing the chip to enter freeze mode.
 	 */
-	pos = pci_find_capability(pdev, PCI_CAP_ID_HT);
-	if (!pos) {
-		ipath_dev_err(dd, "Couldn't find HyperTransport "
-			      "capability; no interrupts\n");
-		ret = -ENODEV;
-		goto bail;
-	}
-	do {
+	pos = pci_find_ht_capability(pdev, HT_CAPTYPE_SLAVE);
+	if (pos) {
 		u8 cap_type;
 
 		/* the HT capability type byte is 3 bytes after the
@@ -996,23 +988,18 @@ static int ipath_setup_ht_config(struct 
 		if (pci_read_config_byte(pdev, pos + 3, &cap_type)) {
 			dev_info(&pdev->dev, "Couldn't read config "
 				 "command @ %d\n", pos);
-			continue;
-		}
-		if (!(cap_type & 0xE0))
+		} else
 			slave_or_pri_blk(dd, pdev, pos, cap_type);
-		else if (cap_type == HT_INTR_DISC_CONFIG)
-			ihandler = set_int_handler(dd, pdev, pos);
-	} while ((pos = pci_find_next_capability(pdev, pos,
-						 PCI_CAP_ID_HT)));
+	}
 
-	if (!ihandler) {
+	pos = pci_find_ht_capability(pdev, HT_CAPTYPE_IRQ);
+	if (!pos || !set_int_handler(dd, pdev, pos)) {
 		ipath_dev_err(dd, "Couldn't find interrupt handler in "
 			      "config space\n");
-		ret = -ENODEV;
+		return -ENODEV;
 	}
 
-bail:
-	return ret;
+	return 0;
 }
 
 /**




More information about the general mailing list