aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/hw/ipath/ipath_intr.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_intr.c b/drivers/infiniband/hw/ipath/ipath_intr.c
index 61eac8cc0d9f..801a20d06de6 100644
--- a/drivers/infiniband/hw/ipath/ipath_intr.c
+++ b/drivers/infiniband/hw/ipath/ipath_intr.c
@@ -1124,10 +1124,8 @@ irqreturn_t ipath_intr(int irq, void *data)
1124 /* 1124 /*
1125 * Some unexpected bits remain. If they could have 1125 * Some unexpected bits remain. If they could have
1126 * caused the interrupt, complain and clear. 1126 * caused the interrupt, complain and clear.
1127 * MEA: this is almost certainly non-ideal. 1127 * To avoid repetition of this condition, also clear
1128 * we should look into auto-disable of unexpected 1128 * the mask. It is almost certainly due to error.
1129 * GPIO interrupts, possibly on a "three strikes"
1130 * basis.
1131 */ 1129 */
1132 const u32 mask = (u32) dd->ipath_gpio_mask; 1130 const u32 mask = (u32) dd->ipath_gpio_mask;
1133 1131
@@ -1135,6 +1133,10 @@ irqreturn_t ipath_intr(int irq, void *data)
1135 ipath_dbg("Unexpected GPIO IRQ bits %x\n", 1133 ipath_dbg("Unexpected GPIO IRQ bits %x\n",
1136 gpiostatus & mask); 1134 gpiostatus & mask);
1137 to_clear |= (gpiostatus & mask); 1135 to_clear |= (gpiostatus & mask);
1136 dd->ipath_gpio_mask &= ~(gpiostatus & mask);
1137 ipath_write_kreg(dd,
1138 dd->ipath_kregs->kr_gpio_mask,
1139 dd->ipath_gpio_mask);
1138 } 1140 }
1139 } 1141 }
1140 if (to_clear) { 1142 if (to_clear) {