Commit 2250563e authored by Michael J. Ruhl's avatar Michael J. Ruhl Committed by Doug Ledford

IB/hfi1: Pass the context pointer rather than the index

The hfi1_rcvctrl() function receives an index which it then converts
to an rcd.  Since most functions have the rcd, use that instead.
Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Reviewed-by: default avatarSebastian Sanchez <sebastian.sanchez@intel.com>
Signed-off-by: default avatarMichael J. Ruhl <michael.j.ruhl@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 17573972
...@@ -6790,7 +6790,7 @@ static void rxe_freeze(struct hfi1_devdata *dd) ...@@ -6790,7 +6790,7 @@ static void rxe_freeze(struct hfi1_devdata *dd)
/* disable all receive contexts */ /* disable all receive contexts */
for (i = 0; i < dd->num_rcv_contexts; i++) for (i = 0; i < dd->num_rcv_contexts; i++)
hfi1_rcvctrl(dd, HFI1_RCVCTRL_CTXT_DIS, i); hfi1_rcvctrl(dd, HFI1_RCVCTRL_CTXT_DIS, dd->rcd[i]);
} }
/* /*
...@@ -6814,9 +6814,9 @@ static void rxe_kernel_unfreeze(struct hfi1_devdata *dd) ...@@ -6814,9 +6814,9 @@ static void rxe_kernel_unfreeze(struct hfi1_devdata *dd)
rcvmask = HFI1_RCVCTRL_CTXT_ENB; rcvmask = HFI1_RCVCTRL_CTXT_ENB;
/* HFI1_RCVCTRL_TAILUPD_[ENB|DIS] needs to be set explicitly */ /* HFI1_RCVCTRL_TAILUPD_[ENB|DIS] needs to be set explicitly */
rcvmask |= HFI1_CAP_KGET_MASK(dd->rcd[i]->flags, DMA_RTAIL) ? rcvmask |= HFI1_CAP_KGET_MASK(rcd->flags, DMA_RTAIL) ?
HFI1_RCVCTRL_TAILUPD_ENB : HFI1_RCVCTRL_TAILUPD_DIS; HFI1_RCVCTRL_TAILUPD_ENB : HFI1_RCVCTRL_TAILUPD_DIS;
hfi1_rcvctrl(dd, rcvmask, i); hfi1_rcvctrl(dd, rcvmask, rcd);
} }
/* enable port */ /* enable port */
...@@ -11722,16 +11722,18 @@ static u32 encoded_size(u32 size) ...@@ -11722,16 +11722,18 @@ static u32 encoded_size(u32 size)
return 0x1; /* if invalid, go with the minimum size */ return 0x1; /* if invalid, go with the minimum size */
} }
void hfi1_rcvctrl(struct hfi1_devdata *dd, unsigned int op, u16 ctxt) void hfi1_rcvctrl(struct hfi1_devdata *dd, unsigned int op,
struct hfi1_ctxtdata *rcd)
{ {
struct hfi1_ctxtdata *rcd;
u64 rcvctrl, reg; u64 rcvctrl, reg;
int did_enable = 0; int did_enable = 0;
u16 ctxt;
rcd = dd->rcd[ctxt];
if (!rcd) if (!rcd)
return; return;
ctxt = rcd->ctxt;
hfi1_cdbg(RCVCTRL, "ctxt %d op 0x%x", ctxt, op); hfi1_cdbg(RCVCTRL, "ctxt %d op 0x%x", ctxt, op);
rcvctrl = read_kctxt_csr(dd, ctxt, RCV_CTXT_CTRL); rcvctrl = read_kctxt_csr(dd, ctxt, RCV_CTXT_CTRL);
......
...@@ -1352,7 +1352,8 @@ void hfi1_init_ctxt(struct send_context *sc); ...@@ -1352,7 +1352,8 @@ void hfi1_init_ctxt(struct send_context *sc);
void hfi1_put_tid(struct hfi1_devdata *dd, u32 index, void hfi1_put_tid(struct hfi1_devdata *dd, u32 index,
u32 type, unsigned long pa, u16 order); u32 type, unsigned long pa, u16 order);
void hfi1_quiet_serdes(struct hfi1_pportdata *ppd); void hfi1_quiet_serdes(struct hfi1_pportdata *ppd);
void hfi1_rcvctrl(struct hfi1_devdata *dd, unsigned int op, u16 ctxt); void hfi1_rcvctrl(struct hfi1_devdata *dd, unsigned int op,
struct hfi1_ctxtdata *rcd);
u32 hfi1_read_cntrs(struct hfi1_devdata *dd, char **namep, u64 **cntrp); u32 hfi1_read_cntrs(struct hfi1_devdata *dd, char **namep, u64 **cntrp);
u32 hfi1_read_portcntrs(struct hfi1_pportdata *ppd, char **namep, u64 **cntrp); u32 hfi1_read_portcntrs(struct hfi1_pportdata *ppd, char **namep, u64 **cntrp);
int hfi1_get_ib_cfg(struct hfi1_pportdata *ppd, int which); int hfi1_get_ib_cfg(struct hfi1_pportdata *ppd, int which);
......
...@@ -389,8 +389,7 @@ static long hfi1_file_ioctl(struct file *fp, unsigned int cmd, ...@@ -389,8 +389,7 @@ static long hfi1_file_ioctl(struct file *fp, unsigned int cmd,
sc_disable(sc); sc_disable(sc);
ret = sc_enable(sc); ret = sc_enable(sc);
hfi1_rcvctrl(dd, HFI1_RCVCTRL_CTXT_ENB, hfi1_rcvctrl(dd, HFI1_RCVCTRL_CTXT_ENB, uctxt);
uctxt->ctxt);
} else { } else {
ret = sc_restart(sc); ret = sc_restart(sc);
} }
...@@ -793,7 +792,7 @@ static int hfi1_file_close(struct inode *inode, struct file *fp) ...@@ -793,7 +792,7 @@ static int hfi1_file_close(struct inode *inode, struct file *fp)
HFI1_RCVCTRL_TAILUPD_DIS | HFI1_RCVCTRL_TAILUPD_DIS |
HFI1_RCVCTRL_ONE_PKT_EGR_DIS | HFI1_RCVCTRL_ONE_PKT_EGR_DIS |
HFI1_RCVCTRL_NO_RHQ_DROP_DIS | HFI1_RCVCTRL_NO_RHQ_DROP_DIS |
HFI1_RCVCTRL_NO_EGR_DROP_DIS, uctxt->ctxt); HFI1_RCVCTRL_NO_EGR_DROP_DIS, uctxt);
/* Clear the context's J_KEY */ /* Clear the context's J_KEY */
hfi1_clear_ctxt_jkey(dd, uctxt); hfi1_clear_ctxt_jkey(dd, uctxt);
/* /*
...@@ -1198,7 +1197,7 @@ static void user_init(struct hfi1_ctxtdata *uctxt) ...@@ -1198,7 +1197,7 @@ static void user_init(struct hfi1_ctxtdata *uctxt)
rcvctrl_ops |= HFI1_RCVCTRL_TAILUPD_ENB; rcvctrl_ops |= HFI1_RCVCTRL_TAILUPD_ENB;
else else
rcvctrl_ops |= HFI1_RCVCTRL_TAILUPD_DIS; rcvctrl_ops |= HFI1_RCVCTRL_TAILUPD_DIS;
hfi1_rcvctrl(uctxt->dd, rcvctrl_ops, uctxt->ctxt); hfi1_rcvctrl(uctxt->dd, rcvctrl_ops, uctxt);
} }
static int get_ctxt_info(struct hfi1_filedata *fd, void __user *ubase, static int get_ctxt_info(struct hfi1_filedata *fd, void __user *ubase,
...@@ -1410,7 +1409,7 @@ static unsigned int poll_next(struct file *fp, ...@@ -1410,7 +1409,7 @@ static unsigned int poll_next(struct file *fp,
spin_lock_irq(&dd->uctxt_lock); spin_lock_irq(&dd->uctxt_lock);
if (hdrqempty(uctxt)) { if (hdrqempty(uctxt)) {
set_bit(HFI1_CTXT_WAITING_RCV, &uctxt->event_flags); set_bit(HFI1_CTXT_WAITING_RCV, &uctxt->event_flags);
hfi1_rcvctrl(dd, HFI1_RCVCTRL_INTRAVAIL_ENB, uctxt->ctxt); hfi1_rcvctrl(dd, HFI1_RCVCTRL_INTRAVAIL_ENB, uctxt);
pollflag = 0; pollflag = 0;
} else { } else {
pollflag = POLLIN | POLLRDNORM; pollflag = POLLIN | POLLRDNORM;
...@@ -1495,7 +1494,7 @@ static int manage_rcvq(struct hfi1_ctxtdata *uctxt, u16 subctxt, ...@@ -1495,7 +1494,7 @@ static int manage_rcvq(struct hfi1_ctxtdata *uctxt, u16 subctxt,
} else { } else {
rcvctrl_op = HFI1_RCVCTRL_CTXT_DIS; rcvctrl_op = HFI1_RCVCTRL_CTXT_DIS;
} }
hfi1_rcvctrl(dd, rcvctrl_op, uctxt->ctxt); hfi1_rcvctrl(dd, rcvctrl_op, uctxt);
/* always; new head should be equal to new tail; see above */ /* always; new head should be equal to new tail; see above */
bail: bail:
return 0; return 0;
......
...@@ -603,8 +603,8 @@ static int init_after_reset(struct hfi1_devdata *dd) ...@@ -603,8 +603,8 @@ static int init_after_reset(struct hfi1_devdata *dd)
*/ */
for (i = 0; i < dd->num_rcv_contexts; i++) for (i = 0; i < dd->num_rcv_contexts; i++)
hfi1_rcvctrl(dd, HFI1_RCVCTRL_CTXT_DIS | hfi1_rcvctrl(dd, HFI1_RCVCTRL_CTXT_DIS |
HFI1_RCVCTRL_INTRAVAIL_DIS | HFI1_RCVCTRL_INTRAVAIL_DIS |
HFI1_RCVCTRL_TAILUPD_DIS, i); HFI1_RCVCTRL_TAILUPD_DIS, dd->rcd[i]);
pio_send_control(dd, PSC_GLOBAL_DISABLE); pio_send_control(dd, PSC_GLOBAL_DISABLE);
for (i = 0; i < dd->num_send_contexts; i++) for (i = 0; i < dd->num_send_contexts; i++)
sc_disable(dd->send_contexts[i].sc); sc_disable(dd->send_contexts[i].sc);
...@@ -634,7 +634,7 @@ static void enable_chip(struct hfi1_devdata *dd) ...@@ -634,7 +634,7 @@ static void enable_chip(struct hfi1_devdata *dd)
rcvmask |= HFI1_RCVCTRL_NO_RHQ_DROP_ENB; rcvmask |= HFI1_RCVCTRL_NO_RHQ_DROP_ENB;
if (HFI1_CAP_KGET_MASK(dd->rcd[i]->flags, NODROP_EGR_FULL)) if (HFI1_CAP_KGET_MASK(dd->rcd[i]->flags, NODROP_EGR_FULL))
rcvmask |= HFI1_RCVCTRL_NO_EGR_DROP_ENB; rcvmask |= HFI1_RCVCTRL_NO_EGR_DROP_ENB;
hfi1_rcvctrl(dd, rcvmask, i); hfi1_rcvctrl(dd, rcvmask, dd->rcd[i]);
sc_enable(dd->rcd[i]->sc); sc_enable(dd->rcd[i]->sc);
} }
} }
...@@ -915,10 +915,10 @@ static void shutdown_device(struct hfi1_devdata *dd) ...@@ -915,10 +915,10 @@ static void shutdown_device(struct hfi1_devdata *dd)
ppd = dd->pport + pidx; ppd = dd->pport + pidx;
for (i = 0; i < dd->num_rcv_contexts; i++) for (i = 0; i < dd->num_rcv_contexts; i++)
hfi1_rcvctrl(dd, HFI1_RCVCTRL_TAILUPD_DIS | hfi1_rcvctrl(dd, HFI1_RCVCTRL_TAILUPD_DIS |
HFI1_RCVCTRL_CTXT_DIS | HFI1_RCVCTRL_CTXT_DIS |
HFI1_RCVCTRL_INTRAVAIL_DIS | HFI1_RCVCTRL_INTRAVAIL_DIS |
HFI1_RCVCTRL_PKEY_DIS | HFI1_RCVCTRL_PKEY_DIS |
HFI1_RCVCTRL_ONE_PKT_EGR_DIS, i); HFI1_RCVCTRL_ONE_PKT_EGR_DIS, dd->rcd[i]);
/* /*
* Gracefully stop all sends allowing any in progress to * Gracefully stop all sends allowing any in progress to
* trickle out first. * trickle out first.
......
...@@ -196,7 +196,7 @@ void handle_user_interrupt(struct hfi1_ctxtdata *rcd) ...@@ -196,7 +196,7 @@ void handle_user_interrupt(struct hfi1_ctxtdata *rcd)
if (test_and_clear_bit(HFI1_CTXT_WAITING_RCV, &rcd->event_flags)) { if (test_and_clear_bit(HFI1_CTXT_WAITING_RCV, &rcd->event_flags)) {
wake_up_interruptible(&rcd->wait); wake_up_interruptible(&rcd->wait);
hfi1_rcvctrl(dd, HFI1_RCVCTRL_INTRAVAIL_DIS, rcd->ctxt); hfi1_rcvctrl(dd, HFI1_RCVCTRL_INTRAVAIL_DIS, rcd);
} else if (test_and_clear_bit(HFI1_CTXT_WAITING_URG, } else if (test_and_clear_bit(HFI1_CTXT_WAITING_URG,
&rcd->event_flags)) { &rcd->event_flags)) {
rcd->urgent++; rcd->urgent++;
......
...@@ -95,7 +95,7 @@ static int setup_vnic_ctxt(struct hfi1_devdata *dd, struct hfi1_ctxtdata *uctxt) ...@@ -95,7 +95,7 @@ static int setup_vnic_ctxt(struct hfi1_devdata *dd, struct hfi1_ctxtdata *uctxt)
if (HFI1_CAP_KGET_MASK(uctxt->flags, DMA_RTAIL)) if (HFI1_CAP_KGET_MASK(uctxt->flags, DMA_RTAIL))
rcvctrl_ops |= HFI1_RCVCTRL_TAILUPD_ENB; rcvctrl_ops |= HFI1_RCVCTRL_TAILUPD_ENB;
hfi1_rcvctrl(uctxt->dd, rcvctrl_ops, uctxt->ctxt); hfi1_rcvctrl(uctxt->dd, rcvctrl_ops, uctxt);
uctxt->is_vnic = true; uctxt->is_vnic = true;
done: done:
...@@ -186,7 +186,7 @@ static void deallocate_vnic_ctxt(struct hfi1_devdata *dd, ...@@ -186,7 +186,7 @@ static void deallocate_vnic_ctxt(struct hfi1_devdata *dd,
HFI1_RCVCTRL_INTRAVAIL_DIS | HFI1_RCVCTRL_INTRAVAIL_DIS |
HFI1_RCVCTRL_ONE_PKT_EGR_DIS | HFI1_RCVCTRL_ONE_PKT_EGR_DIS |
HFI1_RCVCTRL_NO_RHQ_DROP_DIS | HFI1_RCVCTRL_NO_RHQ_DROP_DIS |
HFI1_RCVCTRL_NO_EGR_DROP_DIS, uctxt->ctxt); HFI1_RCVCTRL_NO_EGR_DROP_DIS, uctxt);
/* /*
* VNIC contexts are allocated from user context pool. * VNIC contexts are allocated from user context pool.
* Release them back to user context pool. * Release them back to user context pool.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment