summaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/qib/qib_qsfp.c
diff options
context:
space:
mode:
authorMike Marciniszyn <mike.marciniszyn@qlogic.com>2011-11-09 23:07:22 +0100
committerRoland Dreier <roland@purestorage.com>2011-11-28 21:17:33 +0100
commit8ee887d74b3d741991edaa1836d22636c28926d9 (patch)
tree868723496669854e18779c4af3dfcee6575dd517 /drivers/infiniband/hw/qib/qib_qsfp.c
parentIB/qib: Don't use schedule_work() (diff)
downloadlinux-8ee887d74b3d741991edaa1836d22636c28926d9.tar.xz
linux-8ee887d74b3d741991edaa1836d22636c28926d9.zip
IB/qib: Fix over-scheduling of QSFP work
Don't over-schedule QSFP work on driver initialization. It could end up being run simultaneously on two different CPUs resulting in bad EEPROM reads. In combination with setting the physical IB link state prior to the IBC being brought out of reset, this can cause the link state machine to start training early with wrong settings. Signed-off-by: Mitko Haralanov <mitko@qlogic.com> Signed-off-by: Mike Marciniszyn <mike.marciniszyn@qlogic.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/hw/qib/qib_qsfp.c')
-rw-r--r--drivers/infiniband/hw/qib/qib_qsfp.c12
1 files changed, 0 insertions, 12 deletions
diff --git a/drivers/infiniband/hw/qib/qib_qsfp.c b/drivers/infiniband/hw/qib/qib_qsfp.c
index e06c4ed383f1..fa71b1e666c5 100644
--- a/drivers/infiniband/hw/qib/qib_qsfp.c
+++ b/drivers/infiniband/hw/qib/qib_qsfp.c
@@ -480,18 +480,6 @@ void qib_qsfp_init(struct qib_qsfp_data *qd,
udelay(20); /* Generous RST dwell */
dd->f_gpio_mod(dd, mask, mask, mask);
- /* Spec says module can take up to two seconds! */
- mask = QSFP_GPIO_MOD_PRS_N;
- if (qd->ppd->hw_pidx)
- mask <<= QSFP_GPIO_PORT2_SHIFT;
-
- /* Do not try to wait here. Better to let event handle it */
- if (!qib_qsfp_mod_present(qd->ppd))
- goto bail;
- /* We see a module, but it may be unwise to look yet. Just schedule */
- qd->t_insert = get_jiffies_64();
- queue_work(ib_wq, &qd->work);
-bail:
return;
}