Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
qib_tx.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2008, 2009, 2010 QLogic Corporation. All rights reserved.
3  *
4  * This software is available to you under a choice of one of two
5  * licenses. You may choose to be licensed under the terms of the GNU
6  * General Public License (GPL) Version 2, available from the file
7  * COPYING in the main directory of this source tree, or the
8  * OpenIB.org BSD license below:
9  *
10  * Redistribution and use in source and binary forms, with or
11  * without modification, are permitted provided that the following
12  * conditions are met:
13  *
14  * - Redistributions of source code must retain the above
15  * copyright notice, this list of conditions and the following
16  * disclaimer.
17  *
18  * - Redistributions in binary form must reproduce the above
19  * copyright notice, this list of conditions and the following
20  * disclaimer in the documentation and/or other materials
21  * provided with the distribution.
22  *
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30  * SOFTWARE.
31  */
32 
33 #include <linux/spinlock.h>
34 #include <linux/pci.h>
35 #include <linux/io.h>
36 #include <linux/delay.h>
37 #include <linux/netdevice.h>
38 #include <linux/vmalloc.h>
39 #include <linux/moduleparam.h>
40 
41 #include "qib.h"
42 
43 static unsigned qib_hol_timeout_ms = 3000;
44 module_param_named(hol_timeout_ms, qib_hol_timeout_ms, uint, S_IRUGO);
45 MODULE_PARM_DESC(hol_timeout_ms,
46  "duration of user app suspension after link failure");
47 
48 unsigned qib_sdma_fetch_arb = 1;
50 MODULE_PARM_DESC(fetch_arb, "IBA7220: change SDMA descriptor arbitration");
51 
61 void qib_disarm_piobufs(struct qib_devdata *dd, unsigned first, unsigned cnt)
62 {
63  unsigned long flags;
64  unsigned i;
65  unsigned last;
66 
67  last = first + cnt;
68  spin_lock_irqsave(&dd->pioavail_lock, flags);
69  for (i = first; i < last; i++) {
72  }
73  spin_unlock_irqrestore(&dd->pioavail_lock, flags);
74 }
75 
76 /*
77  * This is called by a user process when it sees the DISARM_BUFS event
78  * bit is set.
79  */
81 {
82  struct qib_devdata *dd = rcd->dd;
83  unsigned i;
84  unsigned last;
85  unsigned n = 0;
86 
87  last = rcd->pio_base + rcd->piocnt;
88  /*
89  * Don't need uctxt_lock here, since user has called in to us.
90  * Clear at start in case more interrupts set bits while we
91  * are disarming
92  */
93  if (rcd->user_event_mask) {
94  /*
95  * subctxt_cnt is 0 if not shared, so do base
96  * separately, first, then remaining subctxt, if any
97  */
99  for (i = 1; i < rcd->subctxt_cnt; i++)
101  &rcd->user_event_mask[i]);
102  }
103  spin_lock_irq(&dd->pioavail_lock);
104  for (i = rcd->pio_base; i < last; i++) {
106  n++;
107  dd->f_sendctrl(rcd->ppd, QIB_SENDCTRL_DISARM_BUF(i));
108  }
109  }
110  spin_unlock_irq(&dd->pioavail_lock);
111  return 0;
112 }
113 
114 static struct qib_pportdata *is_sdma_buf(struct qib_devdata *dd, unsigned i)
115 {
116  struct qib_pportdata *ppd;
117  unsigned pidx;
118 
119  for (pidx = 0; pidx < dd->num_pports; pidx++) {
120  ppd = dd->pport + pidx;
121  if (i >= ppd->sdma_state.first_sendbuf &&
122  i < ppd->sdma_state.last_sendbuf)
123  return ppd;
124  }
125  return NULL;
126 }
127 
128 /*
129  * Return true if send buffer is being used by a user context.
130  * Sets _QIB_EVENT_DISARM_BUFS_BIT in user_event_mask as a side effect
131  */
132 static int find_ctxt(struct qib_devdata *dd, unsigned bufn)
133 {
134  struct qib_ctxtdata *rcd;
135  unsigned ctxt;
136  int ret = 0;
137 
138  spin_lock(&dd->uctxt_lock);
139  for (ctxt = dd->first_user_ctxt; ctxt < dd->cfgctxts; ctxt++) {
140  rcd = dd->rcd[ctxt];
141  if (!rcd || bufn < rcd->pio_base ||
142  bufn >= rcd->pio_base + rcd->piocnt)
143  continue;
144  if (rcd->user_event_mask) {
145  int i;
146  /*
147  * subctxt_cnt is 0 if not shared, so do base
148  * separately, first, then remaining subctxt, if any
149  */
151  &rcd->user_event_mask[0]);
152  for (i = 1; i < rcd->subctxt_cnt; i++)
154  &rcd->user_event_mask[i]);
155  }
156  ret = 1;
157  break;
158  }
159  spin_unlock(&dd->uctxt_lock);
160 
161  return ret;
162 }
163 
164 /*
165  * Disarm a set of send buffers. If the buffer might be actively being
166  * written to, mark the buffer to be disarmed later when it is not being
167  * written to.
168  *
169  * This should only be called from the IRQ error handler.
170  */
171 void qib_disarm_piobufs_set(struct qib_devdata *dd, unsigned long *mask,
172  unsigned cnt)
173 {
174  struct qib_pportdata *ppd, *pppd[QIB_MAX_IB_PORTS];
175  unsigned i;
176  unsigned long flags;
177 
178  for (i = 0; i < dd->num_pports; i++)
179  pppd[i] = NULL;
180 
181  for (i = 0; i < cnt; i++) {
182  int which;
183  if (!test_bit(i, mask))
184  continue;
185  /*
186  * If the buffer is owned by the DMA hardware,
187  * reset the DMA engine.
188  */
189  ppd = is_sdma_buf(dd, i);
190  if (ppd) {
191  pppd[ppd->port] = ppd;
192  continue;
193  }
194  /*
195  * If the kernel is writing the buffer or the buffer is
196  * owned by a user process, we can't clear it yet.
197  */
198  spin_lock_irqsave(&dd->pioavail_lock, flags);
199  if (test_bit(i, dd->pio_writing) ||
200  (!test_bit(i << 1, dd->pioavailkernel) &&
201  find_ctxt(dd, i))) {
202  __set_bit(i, dd->pio_need_disarm);
203  which = 0;
204  } else {
205  which = 1;
207  }
208  spin_unlock_irqrestore(&dd->pioavail_lock, flags);
209  }
210 
211  /* do cancel_sends once per port that had sdma piobufs in error */
212  for (i = 0; i < dd->num_pports; i++)
213  if (pppd[i])
214  qib_cancel_sends(pppd[i]);
215 }
216 
223 static void update_send_bufs(struct qib_devdata *dd)
224 {
225  unsigned long flags;
226  unsigned i;
227  const unsigned piobregs = dd->pioavregs;
228 
229  /*
230  * If the generation (check) bits have changed, then we update the
231  * busy bit for the corresponding PIO buffer. This algorithm will
232  * modify positions to the value they already have in some cases
233  * (i.e., no change), but it's faster than changing only the bits
234  * that have changed.
235  *
236  * We would like to do this atomicly, to avoid spinlocks in the
237  * critical send path, but that's not really possible, given the
238  * type of changes, and that this routine could be called on
239  * multiple cpu's simultaneously, so we lock in this routine only,
240  * to avoid conflicting updates; all we change is the shadow, and
241  * it's a single 64 bit memory location, so by definition the update
242  * is atomic in terms of what other cpu's can see in testing the
243  * bits. The spin_lock overhead isn't too bad, since it only
244  * happens when all buffers are in use, so only cpu overhead, not
245  * latency or bandwidth is affected.
246  */
247  if (!dd->pioavailregs_dma)
248  return;
249  spin_lock_irqsave(&dd->pioavail_lock, flags);
250  for (i = 0; i < piobregs; i++) {
251  u64 pchbusy, pchg, piov, pnew;
252 
253  piov = le64_to_cpu(dd->pioavailregs_dma[i]);
254  pchg = dd->pioavailkernel[i] &
255  ~(dd->pioavailshadow[i] ^ piov);
256  pchbusy = pchg << QLOGIC_IB_SENDPIOAVAIL_BUSY_SHIFT;
257  if (pchg && (pchbusy & dd->pioavailshadow[i])) {
258  pnew = dd->pioavailshadow[i] & ~pchbusy;
259  pnew |= piov & pchbusy;
260  dd->pioavailshadow[i] = pnew;
261  }
262  }
263  spin_unlock_irqrestore(&dd->pioavail_lock, flags);
264 }
265 
266 /*
267  * Debugging code and stats updates if no pio buffers available.
268  */
269 static noinline void no_send_bufs(struct qib_devdata *dd)
270 {
271  dd->upd_pio_shadow = 1;
272 
273  /* not atomic, but if we lose a stat count in a while, that's OK */
274  qib_stats.sps_nopiobufs++;
275 }
276 
277 /*
278  * Common code for normal driver send buffer allocation, and reserved
279  * allocation.
280  *
281  * Do appropriate marking as busy, etc.
282  * Returns buffer pointer if one is found, otherwise NULL.
283  */
285  u32 first, u32 last)
286 {
287  unsigned i, j, updated = 0;
288  unsigned nbufs;
289  unsigned long flags;
290  unsigned long *shadow = dd->pioavailshadow;
291  u32 __iomem *buf;
292 
293  if (!(dd->flags & QIB_PRESENT))
294  return NULL;
295 
296  nbufs = last - first + 1; /* number in range to check */
297  if (dd->upd_pio_shadow) {
298 update_shadow:
299  /*
300  * Minor optimization. If we had no buffers on last call,
301  * start out by doing the update; continue and do scan even
302  * if no buffers were updated, to be paranoid.
303  */
304  update_send_bufs(dd);
305  updated++;
306  }
307  i = first;
308  /*
309  * While test_and_set_bit() is atomic, we do that and then the
310  * change_bit(), and the pair is not. See if this is the cause
311  * of the remaining armlaunch errors.
312  */
313  spin_lock_irqsave(&dd->pioavail_lock, flags);
314  if (dd->last_pio >= first && dd->last_pio <= last)
315  i = dd->last_pio + 1;
316  if (!first)
317  /* adjust to min possible */
318  nbufs = last - dd->min_kernel_pio + 1;
319  for (j = 0; j < nbufs; j++, i++) {
320  if (i > last)
321  i = !first ? dd->min_kernel_pio : first;
322  if (__test_and_set_bit((2 * i) + 1, shadow))
323  continue;
324  /* flip generation bit */
325  __change_bit(2 * i, shadow);
326  /* remember that the buffer can be written to now */
327  __set_bit(i, dd->pio_writing);
328  if (!first && first != last) /* first == last on VL15, avoid */
329  dd->last_pio = i;
330  break;
331  }
332  spin_unlock_irqrestore(&dd->pioavail_lock, flags);
333 
334  if (j == nbufs) {
335  if (!updated)
336  /*
337  * First time through; shadow exhausted, but may be
338  * buffers available, try an update and then rescan.
339  */
340  goto update_shadow;
341  no_send_bufs(dd);
342  buf = NULL;
343  } else {
344  if (i < dd->piobcnt2k)
345  buf = (u32 __iomem *)(dd->pio2kbase +
346  i * dd->palign);
347  else if (i < dd->piobcnt2k + dd->piobcnt4k || !dd->piovl15base)
348  buf = (u32 __iomem *)(dd->pio4kbase +
349  (i - dd->piobcnt2k) * dd->align4k);
350  else
351  buf = (u32 __iomem *)(dd->piovl15base +
352  (i - (dd->piobcnt2k + dd->piobcnt4k)) *
353  dd->align4k);
354  if (pbufnum)
355  *pbufnum = i;
356  dd->upd_pio_shadow = 0;
357  }
358 
359  return buf;
360 }
361 
362 /*
363  * Record that the caller is finished writing to the buffer so we don't
364  * disarm it while it is being written and disarm it now if needed.
365  */
366 void qib_sendbuf_done(struct qib_devdata *dd, unsigned n)
367 {
368  unsigned long flags;
369 
370  spin_lock_irqsave(&dd->pioavail_lock, flags);
371  __clear_bit(n, dd->pio_writing);
374  spin_unlock_irqrestore(&dd->pioavail_lock, flags);
375 }
376 
384 void qib_chg_pioavailkernel(struct qib_devdata *dd, unsigned start,
385  unsigned len, u32 avail, struct qib_ctxtdata *rcd)
386 {
387  unsigned long flags;
388  unsigned end;
389  unsigned ostart = start;
390 
391  /* There are two bits per send buffer (busy and generation) */
392  start *= 2;
393  end = start + len * 2;
394 
395  spin_lock_irqsave(&dd->pioavail_lock, flags);
396  /* Set or clear the busy bit in the shadow. */
397  while (start < end) {
398  if (avail) {
399  unsigned long dma;
400  int i;
401 
402  /*
403  * The BUSY bit will never be set, because we disarm
404  * the user buffers before we hand them back to the
405  * kernel. We do have to make sure the generation
406  * bit is set correctly in shadow, since it could
407  * have changed many times while allocated to user.
408  * We can't use the bitmap functions on the full
409  * dma array because it is always little-endian, so
410  * we have to flip to host-order first.
411  * BITS_PER_LONG is slightly wrong, since it's
412  * always 64 bits per register in chip...
413  * We only work on 64 bit kernels, so that's OK.
414  */
415  i = start / BITS_PER_LONG;
416  __clear_bit(QLOGIC_IB_SENDPIOAVAIL_BUSY_SHIFT + start,
417  dd->pioavailshadow);
418  dma = (unsigned long)
421  start) % BITS_PER_LONG, &dma))
423  start, dd->pioavailshadow);
424  else
426  + start, dd->pioavailshadow);
427  __set_bit(start, dd->pioavailkernel);
428  if ((start >> 1) < dd->min_kernel_pio)
429  dd->min_kernel_pio = start >> 1;
430  } else {
431  __set_bit(start + QLOGIC_IB_SENDPIOAVAIL_BUSY_SHIFT,
432  dd->pioavailshadow);
433  __clear_bit(start, dd->pioavailkernel);
434  if ((start >> 1) > dd->min_kernel_pio)
435  dd->min_kernel_pio = start >> 1;
436  }
437  start += 2;
438  }
439 
440  if (dd->min_kernel_pio > 0 && dd->last_pio < dd->min_kernel_pio - 1)
441  dd->last_pio = dd->min_kernel_pio - 1;
442  spin_unlock_irqrestore(&dd->pioavail_lock, flags);
443 
444  dd->f_txchk_change(dd, ostart, len, avail, rcd);
445 }
446 
447 /*
448  * Flush all sends that might be in the ready to send state, as well as any
449  * that are in the process of being sent. Used whenever we need to be
450  * sure the send side is idle. Cleans up all buffer state by canceling
451  * all pio buffers, and issuing an abort, which cleans up anything in the
452  * launch fifo. The cancel is superfluous on some chip versions, but
453  * it's safer to always do it.
454  * PIOAvail bits are updated by the chip as if a normal send had happened.
455  */
457 {
458  struct qib_devdata *dd = ppd->dd;
459  struct qib_ctxtdata *rcd;
460  unsigned long flags;
461  unsigned ctxt;
462  unsigned i;
463  unsigned last;
464 
465  /*
466  * Tell PSM to disarm buffers again before trying to reuse them.
467  * We need to be sure the rcd doesn't change out from under us
468  * while we do so. We hold the two locks sequentially. We might
469  * needlessly set some need_disarm bits as a result, if the
470  * context is closed after we release the uctxt_lock, but that's
471  * fairly benign, and safer than nesting the locks.
472  */
473  for (ctxt = dd->first_user_ctxt; ctxt < dd->cfgctxts; ctxt++) {
474  spin_lock_irqsave(&dd->uctxt_lock, flags);
475  rcd = dd->rcd[ctxt];
476  if (rcd && rcd->ppd == ppd) {
477  last = rcd->pio_base + rcd->piocnt;
478  if (rcd->user_event_mask) {
479  /*
480  * subctxt_cnt is 0 if not shared, so do base
481  * separately, first, then remaining subctxt,
482  * if any
483  */
485  &rcd->user_event_mask[0]);
486  for (i = 1; i < rcd->subctxt_cnt; i++)
488  &rcd->user_event_mask[i]);
489  }
490  i = rcd->pio_base;
491  spin_unlock_irqrestore(&dd->uctxt_lock, flags);
492  spin_lock_irqsave(&dd->pioavail_lock, flags);
493  for (; i < last; i++)
494  __set_bit(i, dd->pio_need_disarm);
495  spin_unlock_irqrestore(&dd->pioavail_lock, flags);
496  } else
497  spin_unlock_irqrestore(&dd->uctxt_lock, flags);
498  }
499 
500  if (!(dd->flags & QIB_HAS_SEND_DMA))
503 }
504 
505 /*
506  * Force an update of in-memory copy of the pioavail registers, when
507  * needed for any of a variety of reasons.
508  * If already off, this routine is a nop, on the assumption that the
509  * caller (or set of callers) will "do the right thing".
510  * This is a per-device operation, so just the first port.
511  */
513 {
515 }
516 
517 void qib_hol_down(struct qib_pportdata *ppd)
518 {
519  /*
520  * Cancel sends when the link goes DOWN so that we aren't doing it
521  * at INIT when we might be trying to send SMI packets.
522  */
523  if (!(ppd->lflags & QIBL_IB_AUTONEG_INPROG))
524  qib_cancel_sends(ppd);
525 }
526 
527 /*
528  * Link is at INIT.
529  * We start the HoL timer so we can detect stuck packets blocking SMP replies.
530  * Timer may already be running, so use mod_timer, not add_timer.
531  */
532 void qib_hol_init(struct qib_pportdata *ppd)
533 {
534  if (ppd->hol_state != QIB_HOL_INIT) {
535  ppd->hol_state = QIB_HOL_INIT;
536  mod_timer(&ppd->hol_timer,
537  jiffies + msecs_to_jiffies(qib_hol_timeout_ms));
538  }
539 }
540 
541 /*
542  * Link is up, continue any user processes, and ensure timer
543  * is a nop, if running. Let timer keep running, if set; it
544  * will nop when it sees the link is up.
545  */
546 void qib_hol_up(struct qib_pportdata *ppd)
547 {
548  ppd->hol_state = QIB_HOL_UP;
549 }
550 
551 /*
552  * This is only called via the timer.
553  */
554 void qib_hol_event(unsigned long opaque)
555 {
556  struct qib_pportdata *ppd = (struct qib_pportdata *)opaque;
557 
558  /* If hardware error, etc, skip. */
559  if (!(ppd->dd->flags & QIB_INITTED))
560  return;
561 
562  if (ppd->hol_state != QIB_HOL_UP) {
563  /*
564  * Try to flush sends in case a stuck packet is blocking
565  * SMP replies.
566  */
567  qib_hol_down(ppd);
568  mod_timer(&ppd->hol_timer,
569  jiffies + msecs_to_jiffies(qib_hol_timeout_ms));
570  }
571 }