aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r--drivers/infiniband/hw/qib/qib.h2
-rw-r--r--drivers/infiniband/hw/qib/qib_iba6120.c4
-rw-r--r--drivers/infiniband/hw/qib/qib_iba7220.c4
-rw-r--r--drivers/infiniband/hw/qib/qib_iba7322.c6
-rw-r--r--drivers/infiniband/hw/qib/qib_init.c22
-rw-r--r--drivers/infiniband/hw/qib/qib_mad.c44
-rw-r--r--drivers/infiniband/hw/qib/qib_rc.c2
-rw-r--r--drivers/infiniband/hw/qib/qib_ruc.c1
-rw-r--r--drivers/infiniband/hw/qib/qib_ud.c6
-rw-r--r--drivers/infiniband/hw/qib/qib_verbs.c4
-rw-r--r--drivers/infiniband/hw/qib/qib_verbs.h16
11 files changed, 83 insertions, 28 deletions
diff --git a/drivers/infiniband/hw/qib/qib.h b/drivers/infiniband/hw/qib/qib.h
index f044430ed98e..c00ae093b6f8 100644
--- a/drivers/infiniband/hw/qib/qib.h
+++ b/drivers/infiniband/hw/qib/qib.h
@@ -1186,7 +1186,7 @@ int qib_setup_eagerbufs(struct qib_ctxtdata *);
1186void qib_set_ctxtcnt(struct qib_devdata *); 1186void qib_set_ctxtcnt(struct qib_devdata *);
1187int qib_create_ctxts(struct qib_devdata *dd); 1187int qib_create_ctxts(struct qib_devdata *dd);
1188struct qib_ctxtdata *qib_create_ctxtdata(struct qib_pportdata *, u32, int); 1188struct qib_ctxtdata *qib_create_ctxtdata(struct qib_pportdata *, u32, int);
1189void qib_init_pportdata(struct qib_pportdata *, struct qib_devdata *, u8, u8); 1189int qib_init_pportdata(struct qib_pportdata *, struct qib_devdata *, u8, u8);
1190void qib_free_ctxtdata(struct qib_devdata *, struct qib_ctxtdata *); 1190void qib_free_ctxtdata(struct qib_devdata *, struct qib_ctxtdata *);
1191 1191
1192u32 qib_kreceive(struct qib_ctxtdata *, u32 *, u32 *); 1192u32 qib_kreceive(struct qib_ctxtdata *, u32 *, u32 *);
diff --git a/drivers/infiniband/hw/qib/qib_iba6120.c b/drivers/infiniband/hw/qib/qib_iba6120.c
index b9bea2ebfd4a..d68266ac7619 100644
--- a/drivers/infiniband/hw/qib/qib_iba6120.c
+++ b/drivers/infiniband/hw/qib/qib_iba6120.c
@@ -3265,7 +3265,9 @@ static int init_6120_variables(struct qib_devdata *dd)
3265 3265
3266 dd->eep_st_masks[2].errs_to_log = ERR_MASK(ResetNegated); 3266 dd->eep_st_masks[2].errs_to_log = ERR_MASK(ResetNegated);
3267 3267
3268 qib_init_pportdata(ppd, dd, 0, 1); 3268 ret = qib_init_pportdata(ppd, dd, 0, 1);
3269 if (ret)
3270 goto bail;
3269 ppd->link_width_supported = IB_WIDTH_1X | IB_WIDTH_4X; 3271 ppd->link_width_supported = IB_WIDTH_1X | IB_WIDTH_4X;
3270 ppd->link_speed_supported = QIB_IB_SDR; 3272 ppd->link_speed_supported = QIB_IB_SDR;
3271 ppd->link_width_enabled = IB_WIDTH_4X; 3273 ppd->link_width_enabled = IB_WIDTH_4X;
diff --git a/drivers/infiniband/hw/qib/qib_iba7220.c b/drivers/infiniband/hw/qib/qib_iba7220.c
index 28063d4c225b..7dec89fdc124 100644
--- a/drivers/infiniband/hw/qib/qib_iba7220.c
+++ b/drivers/infiniband/hw/qib/qib_iba7220.c
@@ -4059,7 +4059,9 @@ static int qib_init_7220_variables(struct qib_devdata *dd)
4059 init_waitqueue_head(&cpspec->autoneg_wait); 4059 init_waitqueue_head(&cpspec->autoneg_wait);
4060 INIT_DELAYED_WORK(&cpspec->autoneg_work, autoneg_7220_work); 4060 INIT_DELAYED_WORK(&cpspec->autoneg_work, autoneg_7220_work);
4061 4061
4062 qib_init_pportdata(ppd, dd, 0, 1); 4062 ret = qib_init_pportdata(ppd, dd, 0, 1);
4063 if (ret)
4064 goto bail;
4063 ppd->link_width_supported = IB_WIDTH_1X | IB_WIDTH_4X; 4065 ppd->link_width_supported = IB_WIDTH_1X | IB_WIDTH_4X;
4064 ppd->link_speed_supported = QIB_IB_SDR | QIB_IB_DDR; 4066 ppd->link_speed_supported = QIB_IB_SDR | QIB_IB_DDR;
4065 4067
diff --git a/drivers/infiniband/hw/qib/qib_iba7322.c b/drivers/infiniband/hw/qib/qib_iba7322.c
index 8441579decd9..a7eb32517a04 100644
--- a/drivers/infiniband/hw/qib/qib_iba7322.c
+++ b/drivers/infiniband/hw/qib/qib_iba7322.c
@@ -6544,7 +6544,11 @@ static int qib_init_7322_variables(struct qib_devdata *dd)
6544 } 6544 }
6545 6545
6546 dd->num_pports++; 6546 dd->num_pports++;
6547 qib_init_pportdata(ppd, dd, pidx, dd->num_pports); 6547 ret = qib_init_pportdata(ppd, dd, pidx, dd->num_pports);
6548 if (ret) {
6549 dd->num_pports--;
6550 goto bail;
6551 }
6548 6552
6549 ppd->link_width_supported = IB_WIDTH_1X | IB_WIDTH_4X; 6553 ppd->link_width_supported = IB_WIDTH_1X | IB_WIDTH_4X;
6550 ppd->link_width_enabled = IB_WIDTH_4X; 6554 ppd->link_width_enabled = IB_WIDTH_4X;
diff --git a/drivers/infiniband/hw/qib/qib_init.c b/drivers/infiniband/hw/qib/qib_init.c
index 6d2629990cb3..7fbf466704ab 100644
--- a/drivers/infiniband/hw/qib/qib_init.c
+++ b/drivers/infiniband/hw/qib/qib_init.c
@@ -233,7 +233,7 @@ struct qib_ctxtdata *qib_create_ctxtdata(struct qib_pportdata *ppd, u32 ctxt,
233/* 233/*
234 * Common code for initializing the physical port structure. 234 * Common code for initializing the physical port structure.
235 */ 235 */
236void qib_init_pportdata(struct qib_pportdata *ppd, struct qib_devdata *dd, 236int qib_init_pportdata(struct qib_pportdata *ppd, struct qib_devdata *dd,
237 u8 hw_pidx, u8 port) 237 u8 hw_pidx, u8 port)
238{ 238{
239 int size; 239 int size;
@@ -243,6 +243,7 @@ void qib_init_pportdata(struct qib_pportdata *ppd, struct qib_devdata *dd,
243 243
244 spin_lock_init(&ppd->sdma_lock); 244 spin_lock_init(&ppd->sdma_lock);
245 spin_lock_init(&ppd->lflags_lock); 245 spin_lock_init(&ppd->lflags_lock);
246 spin_lock_init(&ppd->cc_shadow_lock);
246 init_waitqueue_head(&ppd->state_wait); 247 init_waitqueue_head(&ppd->state_wait);
247 248
248 init_timer(&ppd->symerr_clear_timer); 249 init_timer(&ppd->symerr_clear_timer);
@@ -250,8 +251,10 @@ void qib_init_pportdata(struct qib_pportdata *ppd, struct qib_devdata *dd,
250 ppd->symerr_clear_timer.data = (unsigned long)ppd; 251 ppd->symerr_clear_timer.data = (unsigned long)ppd;
251 252
252 ppd->qib_wq = NULL; 253 ppd->qib_wq = NULL;
253 254 ppd->ibport_data.pmastats =
254 spin_lock_init(&ppd->cc_shadow_lock); 255 alloc_percpu(struct qib_pma_counters);
256 if (!ppd->ibport_data.pmastats)
257 return -ENOMEM;
255 258
256 if (qib_cc_table_size < IB_CCT_MIN_ENTRIES) 259 if (qib_cc_table_size < IB_CCT_MIN_ENTRIES)
257 goto bail; 260 goto bail;
@@ -299,7 +302,7 @@ void qib_init_pportdata(struct qib_pportdata *ppd, struct qib_devdata *dd,
299 goto bail_3; 302 goto bail_3;
300 } 303 }
301 304
302 return; 305 return 0;
303 306
304bail_3: 307bail_3:
305 kfree(ppd->ccti_entries_shadow); 308 kfree(ppd->ccti_entries_shadow);
@@ -313,7 +316,7 @@ bail_1:
313bail: 316bail:
314 /* User is intentionally disabling the congestion control agent */ 317 /* User is intentionally disabling the congestion control agent */
315 if (!qib_cc_table_size) 318 if (!qib_cc_table_size)
316 return; 319 return 0;
317 320
318 if (qib_cc_table_size < IB_CCT_MIN_ENTRIES) { 321 if (qib_cc_table_size < IB_CCT_MIN_ENTRIES) {
319 qib_cc_table_size = 0; 322 qib_cc_table_size = 0;
@@ -324,7 +327,7 @@ bail:
324 327
325 qib_dev_err(dd, "Congestion Control Agent disabled for port %d\n", 328 qib_dev_err(dd, "Congestion Control Agent disabled for port %d\n",
326 port); 329 port);
327 return; 330 return 0;
328} 331}
329 332
330static int init_pioavailregs(struct qib_devdata *dd) 333static int init_pioavailregs(struct qib_devdata *dd)
@@ -635,6 +638,12 @@ wq_error:
635 return -ENOMEM; 638 return -ENOMEM;
636} 639}
637 640
641static void qib_free_pportdata(struct qib_pportdata *ppd)
642{
643 free_percpu(ppd->ibport_data.pmastats);
644 ppd->ibport_data.pmastats = NULL;
645}
646
638/** 647/**
639 * qib_init - do the actual initialization sequence on the chip 648 * qib_init - do the actual initialization sequence on the chip
640 * @dd: the qlogic_ib device 649 * @dd: the qlogic_ib device
@@ -922,6 +931,7 @@ static void qib_shutdown_device(struct qib_devdata *dd)
922 destroy_workqueue(ppd->qib_wq); 931 destroy_workqueue(ppd->qib_wq);
923 ppd->qib_wq = NULL; 932 ppd->qib_wq = NULL;
924 } 933 }
934 qib_free_pportdata(ppd);
925 } 935 }
926 936
927 qib_update_eeprom_log(dd); 937 qib_update_eeprom_log(dd);
diff --git a/drivers/infiniband/hw/qib/qib_mad.c b/drivers/infiniband/hw/qib/qib_mad.c
index ccb119143d20..edad991d60ed 100644
--- a/drivers/infiniband/hw/qib/qib_mad.c
+++ b/drivers/infiniband/hw/qib/qib_mad.c
@@ -1634,6 +1634,23 @@ static int pma_get_portcounters_cong(struct ib_pma_mad *pmp,
1634 return reply((struct ib_smp *)pmp); 1634 return reply((struct ib_smp *)pmp);
1635} 1635}
1636 1636
1637static void qib_snapshot_pmacounters(
1638 struct qib_ibport *ibp,
1639 struct qib_pma_counters *pmacounters)
1640{
1641 struct qib_pma_counters *p;
1642 int cpu;
1643
1644 memset(pmacounters, 0, sizeof(*pmacounters));
1645 for_each_possible_cpu(cpu) {
1646 p = per_cpu_ptr(ibp->pmastats, cpu);
1647 pmacounters->n_unicast_xmit += p->n_unicast_xmit;
1648 pmacounters->n_unicast_rcv += p->n_unicast_rcv;
1649 pmacounters->n_multicast_xmit += p->n_multicast_xmit;
1650 pmacounters->n_multicast_rcv += p->n_multicast_rcv;
1651 }
1652}
1653
1637static int pma_get_portcounters_ext(struct ib_pma_mad *pmp, 1654static int pma_get_portcounters_ext(struct ib_pma_mad *pmp,
1638 struct ib_device *ibdev, u8 port) 1655 struct ib_device *ibdev, u8 port)
1639{ 1656{
@@ -1642,6 +1659,7 @@ static int pma_get_portcounters_ext(struct ib_pma_mad *pmp,
1642 struct qib_ibport *ibp = to_iport(ibdev, port); 1659 struct qib_ibport *ibp = to_iport(ibdev, port);
1643 struct qib_pportdata *ppd = ppd_from_ibp(ibp); 1660 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1644 u64 swords, rwords, spkts, rpkts, xwait; 1661 u64 swords, rwords, spkts, rpkts, xwait;
1662 struct qib_pma_counters pma;
1645 u8 port_select = p->port_select; 1663 u8 port_select = p->port_select;
1646 1664
1647 memset(pmp->data, 0, sizeof(pmp->data)); 1665 memset(pmp->data, 0, sizeof(pmp->data));
@@ -1664,10 +1682,17 @@ static int pma_get_portcounters_ext(struct ib_pma_mad *pmp,
1664 p->port_rcv_data = cpu_to_be64(rwords); 1682 p->port_rcv_data = cpu_to_be64(rwords);
1665 p->port_xmit_packets = cpu_to_be64(spkts); 1683 p->port_xmit_packets = cpu_to_be64(spkts);
1666 p->port_rcv_packets = cpu_to_be64(rpkts); 1684 p->port_rcv_packets = cpu_to_be64(rpkts);
1667 p->port_unicast_xmit_packets = cpu_to_be64(ibp->n_unicast_xmit); 1685
1668 p->port_unicast_rcv_packets = cpu_to_be64(ibp->n_unicast_rcv); 1686 qib_snapshot_pmacounters(ibp, &pma);
1669 p->port_multicast_xmit_packets = cpu_to_be64(ibp->n_multicast_xmit); 1687
1670 p->port_multicast_rcv_packets = cpu_to_be64(ibp->n_multicast_rcv); 1688 p->port_unicast_xmit_packets = cpu_to_be64(pma.n_unicast_xmit
1689 - ibp->z_unicast_xmit);
1690 p->port_unicast_rcv_packets = cpu_to_be64(pma.n_unicast_rcv
1691 - ibp->z_unicast_rcv);
1692 p->port_multicast_xmit_packets = cpu_to_be64(pma.n_multicast_xmit
1693 - ibp->z_multicast_xmit);
1694 p->port_multicast_rcv_packets = cpu_to_be64(pma.n_multicast_rcv
1695 - ibp->z_multicast_rcv);
1671 1696
1672bail: 1697bail:
1673 return reply((struct ib_smp *) pmp); 1698 return reply((struct ib_smp *) pmp);
@@ -1795,6 +1820,7 @@ static int pma_set_portcounters_ext(struct ib_pma_mad *pmp,
1795 struct qib_ibport *ibp = to_iport(ibdev, port); 1820 struct qib_ibport *ibp = to_iport(ibdev, port);
1796 struct qib_pportdata *ppd = ppd_from_ibp(ibp); 1821 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1797 u64 swords, rwords, spkts, rpkts, xwait; 1822 u64 swords, rwords, spkts, rpkts, xwait;
1823 struct qib_pma_counters pma;
1798 1824
1799 qib_snapshot_counters(ppd, &swords, &rwords, &spkts, &rpkts, &xwait); 1825 qib_snapshot_counters(ppd, &swords, &rwords, &spkts, &rpkts, &xwait);
1800 1826
@@ -1810,17 +1836,19 @@ static int pma_set_portcounters_ext(struct ib_pma_mad *pmp,
1810 if (p->counter_select & IB_PMA_SELX_PORT_RCV_PACKETS) 1836 if (p->counter_select & IB_PMA_SELX_PORT_RCV_PACKETS)
1811 ibp->z_port_rcv_packets = rpkts; 1837 ibp->z_port_rcv_packets = rpkts;
1812 1838
1839 qib_snapshot_pmacounters(ibp, &pma);
1840
1813 if (p->counter_select & IB_PMA_SELX_PORT_UNI_XMIT_PACKETS) 1841 if (p->counter_select & IB_PMA_SELX_PORT_UNI_XMIT_PACKETS)
1814 ibp->n_unicast_xmit = 0; 1842 ibp->z_unicast_xmit = pma.n_unicast_xmit;
1815 1843
1816 if (p->counter_select & IB_PMA_SELX_PORT_UNI_RCV_PACKETS) 1844 if (p->counter_select & IB_PMA_SELX_PORT_UNI_RCV_PACKETS)
1817 ibp->n_unicast_rcv = 0; 1845 ibp->z_unicast_rcv = pma.n_unicast_rcv;
1818 1846
1819 if (p->counter_select & IB_PMA_SELX_PORT_MULTI_XMIT_PACKETS) 1847 if (p->counter_select & IB_PMA_SELX_PORT_MULTI_XMIT_PACKETS)
1820 ibp->n_multicast_xmit = 0; 1848 ibp->z_multicast_xmit = pma.n_multicast_xmit;
1821 1849
1822 if (p->counter_select & IB_PMA_SELX_PORT_MULTI_RCV_PACKETS) 1850 if (p->counter_select & IB_PMA_SELX_PORT_MULTI_RCV_PACKETS)
1823 ibp->n_multicast_rcv = 0; 1851 ibp->z_multicast_rcv = pma.n_multicast_rcv;
1824 1852
1825 return pma_get_portcounters_ext(pmp, ibdev, port); 1853 return pma_get_portcounters_ext(pmp, ibdev, port);
1826} 1854}
diff --git a/drivers/infiniband/hw/qib/qib_rc.c b/drivers/infiniband/hw/qib/qib_rc.c
index 3ab341320ead..2f2501890c4e 100644
--- a/drivers/infiniband/hw/qib/qib_rc.c
+++ b/drivers/infiniband/hw/qib/qib_rc.c
@@ -752,7 +752,7 @@ void qib_send_rc_ack(struct qib_qp *qp)
752 qib_flush_wc(); 752 qib_flush_wc();
753 qib_sendbuf_done(dd, pbufn); 753 qib_sendbuf_done(dd, pbufn);
754 754
755 ibp->n_unicast_xmit++; 755 this_cpu_inc(ibp->pmastats->n_unicast_xmit);
756 goto done; 756 goto done;
757 757
758queue_ack: 758queue_ack:
diff --git a/drivers/infiniband/hw/qib/qib_ruc.c b/drivers/infiniband/hw/qib/qib_ruc.c
index 357b6cfcd46c..4c07a8b34ffe 100644
--- a/drivers/infiniband/hw/qib/qib_ruc.c
+++ b/drivers/infiniband/hw/qib/qib_ruc.c
@@ -703,6 +703,7 @@ void qib_make_ruc_header(struct qib_qp *qp, struct qib_other_headers *ohdr,
703 ohdr->bth[0] = cpu_to_be32(bth0); 703 ohdr->bth[0] = cpu_to_be32(bth0);
704 ohdr->bth[1] = cpu_to_be32(qp->remote_qpn); 704 ohdr->bth[1] = cpu_to_be32(qp->remote_qpn);
705 ohdr->bth[2] = cpu_to_be32(bth2); 705 ohdr->bth[2] = cpu_to_be32(bth2);
706 this_cpu_inc(ibp->pmastats->n_unicast_xmit);
706} 707}
707 708
708/** 709/**
diff --git a/drivers/infiniband/hw/qib/qib_ud.c b/drivers/infiniband/hw/qib/qib_ud.c
index 3ad651c3356c..aaf7039f8ed2 100644
--- a/drivers/infiniband/hw/qib/qib_ud.c
+++ b/drivers/infiniband/hw/qib/qib_ud.c
@@ -280,11 +280,11 @@ int qib_make_ud_req(struct qib_qp *qp)
280 ah_attr = &to_iah(wqe->wr.wr.ud.ah)->attr; 280 ah_attr = &to_iah(wqe->wr.wr.ud.ah)->attr;
281 if (ah_attr->dlid >= QIB_MULTICAST_LID_BASE) { 281 if (ah_attr->dlid >= QIB_MULTICAST_LID_BASE) {
282 if (ah_attr->dlid != QIB_PERMISSIVE_LID) 282 if (ah_attr->dlid != QIB_PERMISSIVE_LID)
283 ibp->n_multicast_xmit++; 283 this_cpu_inc(ibp->pmastats->n_multicast_xmit);
284 else 284 else
285 ibp->n_unicast_xmit++; 285 this_cpu_inc(ibp->pmastats->n_unicast_xmit);
286 } else { 286 } else {
287 ibp->n_unicast_xmit++; 287 this_cpu_inc(ibp->pmastats->n_unicast_xmit);
288 lid = ah_attr->dlid & ~((1 << ppd->lmc) - 1); 288 lid = ah_attr->dlid & ~((1 << ppd->lmc) - 1);
289 if (unlikely(lid == ppd->lid)) { 289 if (unlikely(lid == ppd->lid)) {
290 /* 290 /*
diff --git a/drivers/infiniband/hw/qib/qib_verbs.c b/drivers/infiniband/hw/qib/qib_verbs.c
index 092b0bb1bb78..1b00734fb80d 100644
--- a/drivers/infiniband/hw/qib/qib_verbs.c
+++ b/drivers/infiniband/hw/qib/qib_verbs.c
@@ -662,7 +662,7 @@ void qib_ib_rcv(struct qib_ctxtdata *rcd, void *rhdr, void *data, u32 tlen)
662 mcast = qib_mcast_find(ibp, &hdr->u.l.grh.dgid); 662 mcast = qib_mcast_find(ibp, &hdr->u.l.grh.dgid);
663 if (mcast == NULL) 663 if (mcast == NULL)
664 goto drop; 664 goto drop;
665 ibp->n_multicast_rcv++; 665 this_cpu_inc(ibp->pmastats->n_multicast_rcv);
666 list_for_each_entry_rcu(p, &mcast->qp_list, list) 666 list_for_each_entry_rcu(p, &mcast->qp_list, list)
667 qib_qp_rcv(rcd, hdr, 1, data, tlen, p->qp); 667 qib_qp_rcv(rcd, hdr, 1, data, tlen, p->qp);
668 /* 668 /*
@@ -689,7 +689,7 @@ void qib_ib_rcv(struct qib_ctxtdata *rcd, void *rhdr, void *data, u32 tlen)
689 rcd->lookaside_qpn = qp_num; 689 rcd->lookaside_qpn = qp_num;
690 } else 690 } else
691 qp = rcd->lookaside_qp; 691 qp = rcd->lookaside_qp;
692 ibp->n_unicast_rcv++; 692 this_cpu_inc(ibp->pmastats->n_unicast_rcv);
693 qib_qp_rcv(rcd, hdr, lnh == QIB_LRH_GRH, data, tlen, qp); 693 qib_qp_rcv(rcd, hdr, lnh == QIB_LRH_GRH, data, tlen, qp);
694 } 694 }
695 return; 695 return;
diff --git a/drivers/infiniband/hw/qib/qib_verbs.h b/drivers/infiniband/hw/qib/qib_verbs.h
index a01c7d2cf541..bfc8948fdd35 100644
--- a/drivers/infiniband/hw/qib/qib_verbs.h
+++ b/drivers/infiniband/hw/qib/qib_verbs.h
@@ -664,6 +664,13 @@ struct qib_opcode_stats_perctx {
664 struct qib_opcode_stats stats[128]; 664 struct qib_opcode_stats stats[128];
665}; 665};
666 666
667struct qib_pma_counters {
668 u64 n_unicast_xmit; /* total unicast packets sent */
669 u64 n_unicast_rcv; /* total unicast packets received */
670 u64 n_multicast_xmit; /* total multicast packets sent */
671 u64 n_multicast_rcv; /* total multicast packets received */
672};
673
667struct qib_ibport { 674struct qib_ibport {
668 struct qib_qp __rcu *qp0; 675 struct qib_qp __rcu *qp0;
669 struct qib_qp __rcu *qp1; 676 struct qib_qp __rcu *qp1;
@@ -680,10 +687,11 @@ struct qib_ibport {
680 __be64 mkey; 687 __be64 mkey;
681 __be64 guids[QIB_GUIDS_PER_PORT - 1]; /* writable GUIDs */ 688 __be64 guids[QIB_GUIDS_PER_PORT - 1]; /* writable GUIDs */
682 u64 tid; /* TID for traps */ 689 u64 tid; /* TID for traps */
683 u64 n_unicast_xmit; /* total unicast packets sent */ 690 struct qib_pma_counters __percpu *pmastats;
684 u64 n_unicast_rcv; /* total unicast packets received */ 691 u64 z_unicast_xmit; /* starting count for PMA */
685 u64 n_multicast_xmit; /* total multicast packets sent */ 692 u64 z_unicast_rcv; /* starting count for PMA */
686 u64 n_multicast_rcv; /* total multicast packets received */ 693 u64 z_multicast_xmit; /* starting count for PMA */
694 u64 z_multicast_rcv; /* starting count for PMA */
687 u64 z_symbol_error_counter; /* starting count for PMA */ 695 u64 z_symbol_error_counter; /* starting count for PMA */
688 u64 z_link_error_recovery_counter; /* starting count for PMA */ 696 u64 z_link_error_recovery_counter; /* starting count for PMA */
689 u64 z_link_downed_counter; /* starting count for PMA */ 697 u64 z_link_downed_counter; /* starting count for PMA */