IB/qib: Finish adding core rdmavt verbs support
cover IB/qib: Finish adding core rdmavt verbs support
Add the rest of the rdmavt core verbs support in qib, this mostly entails removing existing operations.
This patch series applies on the previously posted "IB/rdmavt: Finish adding core verbs support" and can be seen in context at:
https://github.com/ddalessa/kernel/tree/for-4.6
---
Dennis Dalessandro (2):
IB/qib: Clean up register_ib_device
IB/qib: Support query gid in rdmavt
Harish Chegondi (4):
IB/qib: Remove qib_lookup_qpn and use rvt_lookup_qpn instead IB/qib: Remove modify queue pair code
IB/qib: Remove destroy queue pair code
IB/qib: Remove modify_port and port_immutable functions
Jubin John (1):
IB/qib: Remove srq functionality
drivers/infiniband/hw/qib/Makefile | 2 drivers/infiniband/hw/qib/qib.h | 13 + drivers/infiniband/hw/qib/qib_common.h | 1 drivers/infiniband/hw/qib/qib_driver.c | 27 - drivers/infiniband/hw/qib/qib_mad.c | 5 drivers/infiniband/hw/qib/qib_qp.c | 636 +++----------------------------- drivers/infiniband/hw/qib/qib_rc.c | 10 - drivers/infiniband/hw/qib/qib_ruc.c | 17 + drivers/infiniband/hw/qib/qib_sdma.c | 2 drivers/infiniband/hw/qib/qib_srq.c | 380 ------------------- drivers/infiniband/hw/qib/qib_uc.c | 10 - drivers/infiniband/hw/qib/qib_ud.c | 17 + drivers/infiniband/hw/qib/qib_verbs.c | 213 ++--------- drivers/infiniband/hw/qib/qib_verbs.h | 51 --- 14 files changed, 168 insertions(+), 1216 deletions(-) delete mode 100644 drivers/infiniband/hw/qib/qib_srq.c
Signature · 5 lines
-Denny -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20160203221808.4030.95183.stgit-9QXIwq+3FY+1XWohqUldA0EOCMrvLtNR@public.gmane.org
PATCH 1/7 IB/qib: Remove srq functionality
From: Jubin John <[email protected]>
srq functionality is now in rdmavt. Remove it from the qib driver.
--- drivers/infiniband/hw/qib/Makefile | 2 drivers/infiniband/hw/qib/qib_srq.c | 380 --------------------------------- drivers/infiniband/hw/qib/qib_verbs.c | 6 - drivers/infiniband/hw/qib/qib_verbs.h | 17 - 4 files changed, 1 insertions(+), 404 deletions(-) delete mode 100644 drivers/infiniband/hw/qib/qib_srq.c
drivers/infiniband/hw/qib/Makefile +1 -1
@@ -3,7 +3,7 @@ obj-$(CONFIG_INFINIBAND_QIB) += ib_qib.o ib_qib-y := qib_diag.o qib_driver.o qib_eeprom.o \ qib_file_ops.o qib_fs.o qib_init.o qib_intr.o \ qib_mad.o qib_pcie.o qib_pio_copy.o \ - qib_qp.o qib_qsfp.o qib_rc.o qib_ruc.o qib_sdma.o qib_srq.o \ + qib_qp.o qib_qsfp.o qib_rc.o qib_ruc.o qib_sdma.o \ qib_sysfs.o qib_twsi.o qib_tx.o qib_uc.o qib_ud.o \ qib_user_pages.o qib_user_sdma.o qib_iba7220.o \ qib_sd7220.o qib_iba7322.o qib_verbs.o
drivers/infiniband/hw/qib/qib_srq.c deleted +0 -380
380 lines not on this page · raw message
drivers/infiniband/hw/qib/qib_verbs.c +0 -6
@@ -1656,7 +1656,6 @@ int qib_register_ib_device(struct qib_devdata *dd)/* Only need to initialize non-zero fields. */ spin_lock_init (&dev->n_qps_lock); -spin_lock_init (&dev->n_srqs_lock);init_timer (&dev->mem_timer); dev->mem_timer.function = mem_timer; dev->mem_timer.data = (unsigned long ) dev;
@@ -1754,17 +1753,12 @@ int qib_register_ib_device(struct qib_devdata *dd) ibdev->destroy_ah =NULL ; ibdev->modify_ah =NULL ; ibdev->query_ah =NULL ; - ibdev->create_srq = qib_create_srq; - ibdev->modify_srq = qib_modify_srq; - ibdev->query_srq = qib_query_srq; - ibdev->destroy_srq = qib_destroy_srq; ibdev->create_qp =NULL ; ibdev->modify_qp = qib_modify_qp; ibdev->query_qp =NULL ; ibdev->destroy_qp = qib_destroy_qp; ibdev->post_send =NULL ; ibdev->post_recv =NULL ; - ibdev->post_srq_recv = qib_post_srq_receive; ibdev->create_cq =NULL ; ibdev->destroy_cq =NULL ; ibdev->resize_cq =NULL ;
drivers/infiniband/hw/qib/qib_verbs.h +0 -17
@@ -270,8 +270,6 @@ struct qib_ibdev {u32 n_qps_allocated;/* number of QPs allocated for device */ spinlock_t n_qps_lock; -u32 n_srqs_allocated;/* number of SRQs allocated for device */ -spinlock_t n_srqs_lock;#ifdef CONFIG_DEBUG_FS /* per HCA debugfs */ struct dentry *qib_ibdev_dbg;
@@ -428,21 +426,6 @@ int qib_post_ud_send(struct rvt_qp *qp, struct ib_send_wr *wr);void qib_ud_rcv (struct qib_ibport *ibp,struct qib_ib_header *hdr,int has_grh,void *data,u32 tlen,struct rvt_qp *qp); -int qib_post_srq_receive (struct ib_srq *ibsrq,struct ib_recv_wr *wr, -struct ib_recv_wr **bad_wr); - -struct ib_srq *qib_create_srq (struct ib_pd *ibpd, -struct ib_srq_init_attr *srq_init_attr, -struct ib_udata *udata); - -int qib_modify_srq (struct ib_srq *ibsrq,struct ib_srq_attr *attr, -enum ib_srq_attr_mask attr_mask, -struct ib_udata *udata); - -int qib_query_srq (struct ib_srq *ibsrq,struct ib_srq_attr *attr); - -int qib_destroy_srq (struct ib_srq *ibsrq); -void mr_rcu_callback (struct rcu_head *list);static inline void qib_put_ss (struct rvt_sge_state *ss)
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 2/7 IB/qib: Clean up register_ib_device
In reply to a message not in the archiveRemove some of the unnecessary code from qib_register_ib_device.
--- drivers/infiniband/hw/qib/qib_verbs.c | 68 --------------------------------- 1 files changed, 0 insertions(+), 68 deletions(-)
drivers/infiniband/hw/qib/qib_verbs.c +0 -68
@@ -1703,81 +1703,15 @@ int qib_register_ib_device(struct qib_devdata *dd)strlcpy (ibdev->name,"qib%d" ,IB_DEVICE_NAME_MAX ); ibdev->owner =THIS_MODULE ; ibdev->node_guid = ppd->guid; - ibdev->uverbs_abi_ver =QIB_UVERBS_ABI_VERSION ; - ibdev->uverbs_cmd_mask = - (1ull <<IB_USER_VERBS_CMD_GET_CONTEXT ) | - (1ull <<IB_USER_VERBS_CMD_QUERY_DEVICE ) | - (1ull <<IB_USER_VERBS_CMD_QUERY_PORT ) | - (1ull <<IB_USER_VERBS_CMD_ALLOC_PD ) | - (1ull <<IB_USER_VERBS_CMD_DEALLOC_PD ) | - (1ull <<IB_USER_VERBS_CMD_CREATE_AH ) | - (1ull <<IB_USER_VERBS_CMD_MODIFY_AH ) | - (1ull <<IB_USER_VERBS_CMD_QUERY_AH ) | - (1ull <<IB_USER_VERBS_CMD_DESTROY_AH ) | - (1ull <<IB_USER_VERBS_CMD_REG_MR ) | - (1ull <<IB_USER_VERBS_CMD_DEREG_MR ) | - (1ull <<IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL ) | - (1ull <<IB_USER_VERBS_CMD_CREATE_CQ ) | - (1ull <<IB_USER_VERBS_CMD_RESIZE_CQ ) | - (1ull <<IB_USER_VERBS_CMD_DESTROY_CQ ) | - (1ull <<IB_USER_VERBS_CMD_POLL_CQ ) | - (1ull <<IB_USER_VERBS_CMD_REQ_NOTIFY_CQ ) | - (1ull <<IB_USER_VERBS_CMD_CREATE_QP ) | - (1ull <<IB_USER_VERBS_CMD_QUERY_QP ) | - (1ull <<IB_USER_VERBS_CMD_MODIFY_QP ) | - (1ull <<IB_USER_VERBS_CMD_DESTROY_QP ) | - (1ull <<IB_USER_VERBS_CMD_POST_SEND ) | - (1ull <<IB_USER_VERBS_CMD_POST_RECV ) | - (1ull <<IB_USER_VERBS_CMD_ATTACH_MCAST ) | - (1ull <<IB_USER_VERBS_CMD_DETACH_MCAST ) | - (1ull <<IB_USER_VERBS_CMD_CREATE_SRQ ) | - (1ull <<IB_USER_VERBS_CMD_MODIFY_SRQ ) | - (1ull <<IB_USER_VERBS_CMD_QUERY_SRQ ) | - (1ull <<IB_USER_VERBS_CMD_DESTROY_SRQ ) | - (1ull <<IB_USER_VERBS_CMD_POST_SRQ_RECV ); - ibdev->node_type =RDMA_NODE_IB_CA ; ibdev->phys_port_cnt = dd->num_pports; - ibdev->num_comp_vectors =1 ; ibdev->dma_device = &dd->pcidev->dev; - ibdev->query_device =NULL ; ibdev->modify_device = qib_modify_device; ibdev->query_port = qib_query_port; ibdev->modify_port = qib_modify_port; - ibdev->query_pkey =NULL ; ibdev->query_gid = qib_query_gid; - ibdev->alloc_ucontext =NULL ; - ibdev->dealloc_ucontext =NULL ; - ibdev->alloc_pd =NULL ; - ibdev->dealloc_pd =NULL ; - ibdev->create_ah =NULL ; - ibdev->destroy_ah =NULL ; - ibdev->modify_ah =NULL ; - ibdev->query_ah =NULL ; - ibdev->create_qp =NULL ; ibdev->modify_qp = qib_modify_qp; - ibdev->query_qp =NULL ; ibdev->destroy_qp = qib_destroy_qp; - ibdev->post_send =NULL ; - ibdev->post_recv =NULL ; - ibdev->create_cq =NULL ; - ibdev->destroy_cq =NULL ; - ibdev->resize_cq =NULL ; - ibdev->poll_cq =NULL ; - ibdev->req_notify_cq =NULL ; - ibdev->get_dma_mr =NULL ; - ibdev->reg_user_mr =NULL ; - ibdev->dereg_mr =NULL ; - ibdev->alloc_mr =NULL ; - ibdev->map_mr_sg =NULL ; - ibdev->alloc_fmr =NULL ; - ibdev->map_phys_fmr =NULL ; - ibdev->unmap_fmr =NULL ; - ibdev->dealloc_fmr =NULL ; - ibdev->attach_mcast =NULL ; - ibdev->detach_mcast =NULL ; ibdev->process_mad = qib_process_mad; - ibdev->mmap =NULL ; - ibdev->dma_ops =NULL ; ibdev->get_port_immutable = qib_port_immutable; snprintf(ibdev->node_desc, sizeof(ibdev->node_desc),
@@ -1799,8 +1733,6 @@ int qib_register_ib_device(struct qib_devdata *dd) dd->verbs_dev.rdi.driver_f.do_send = qib_do_send; dd->verbs_dev.rdi.driver_f.schedule_send = qib_schedule_send; - dd->verbs_dev.rdi.flags =0 ; - dd->verbs_dev.rdi.dparms.lkey_table_size = qib_lkey_table_size; dd->verbs_dev.rdi.dparms.qp_table_size = ib_qib_qp_table_size; dd->verbs_dev.rdi.dparms.qpn_start =1 ;
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 3/7 IB/qib: Remove qib_lookup_qpn and use rvt_lookup_qpn instead
In reply to a message not in the archiveFrom: Harish Chegondi <[email protected]>
Add calls to rcu_read_lock()/rcu_read_unlock() as rvt_lookup_qpn callers must hold the rcu_read_lock before calling and keep the lock until the returned qp is no longer in use.
Remove lookaside qp and some qp refcount atomics in the sdma send code that is redundant with the s_dma_busy refcount, which will also stall the state processing to the reset state.
Change the qpn hash function to hash_32 which is hash function used in rvt_lookup_qpn. qpn_hash function would be eliminated in later patches.
--- drivers/infiniband/hw/qib/qib.h | 3 -- drivers/infiniband/hw/qib/qib_driver.c | 25 ++++++------------- drivers/infiniband/hw/qib/qib_qp.c | 42 ++------------------------------ drivers/infiniband/hw/qib/qib_ruc.c | 11 ++++++-- drivers/infiniband/hw/qib/qib_ud.c | 11 +++++--- drivers/infiniband/hw/qib/qib_verbs.c | 27 ++++++--------------- drivers/infiniband/hw/qib/qib_verbs.h | 2 -- 7 files changed, 34 insertions(+), 87 deletions(-)
drivers/infiniband/hw/qib/qib.h +0 -3
@@ -230,9 +230,6 @@ struct qib_ctxtdata {u8 redirect_seq_cnt;/* ctxt rcvhdrq head offset */ u32 head; -/* lookaside fields */ -struct rvt_qp *lookaside_qp; -u32 lookaside_qpn;/* QPs waiting for context processing */ struct list_head qp_wait_list;#ifdef CONFIG_DEBUG_FS
drivers/infiniband/hw/qib/qib_driver.c +8 -17
@@ -322,6 +322,8 @@ static u32 qib_rcv_hdrerr(struct qib_ctxtdata *rcd, struct qib_pportdata *ppd,struct qib_ib_header *hdr = (struct qib_ib_header *) rhdr;struct qib_other_headers *ohdr =NULL ;struct qib_ibport *ibp = &ppd->ibport_data; +struct qib_devdata *dd = ppd->dd; +struct rvt_dev_info *rdi = &dd->verbs_dev.rdi;struct rvt_qp *qp =NULL ;u32 tlen =qib_hdrget_length_in_bytes (rhf_addr);u16 lid =be16_to_cpu (hdr->lrh[1 ]);
@@ -366,9 +368,12 @@ static u32 qib_rcv_hdrerr(struct qib_ctxtdata *rcd, struct qib_pportdata *ppd,if (qp_num !=QIB_MULTICAST_QPN ) {int ruc_res; - qp =qib_lookup_qpn (ibp, qp_num); -if (!qp) +rcu_read_lock (); + qp =rvt_lookup_qpn (rdi, &ibp->rvp, qp_num); +if (!qp) { +rcu_read_unlock (); goto drop; + }/* * Handle only RC QPs - for other QP types drop error
@@ -435,12 +440,7 @@ static u32 qib_rcv_hdrerr(struct qib_ctxtdata *rcd, struct qib_pportdata *ppd, unlock:spin_unlock (&qp->r_lock); -/* -* Notify qib_destroy_qp() if it is waiting -* for us to finish. -*/ -if (atomic_dec_and_test (&qp->refcount)) -wake_up (&qp->wait); +rcu_read_unlock (); }/* Unicast QP */ }/* Valid packet with TIDErr */
@@ -565,15 +565,6 @@ move_along: updegr =0 ; } } -/* -* Notify qib_destroy_qp() if it is waiting -* for lookaside_qp to finish. -*/ -if (rcd->lookaside_qp) { -if (atomic_dec_and_test (&rcd->lookaside_qp->refcount)) -wake_up (&rcd->lookaside_qp->wait); - rcd->lookaside_qp =NULL ; - } rcd->head = l;
drivers/infiniband/hw/qib/qib_qp.c +3 -39
66 lines not on this page · raw message
drivers/infiniband/hw/qib/qib_ruc.c +8 -3
@@ -358,6 +358,9 @@ err:static void qib_ruc_loopback (struct rvt_qp *sqp) {struct qib_ibport *ibp =to_iport (sqp->ibqp.device, sqp->port_num); +struct qib_pportdata *ppd =ppd_from_ibp (ibp); +struct qib_devdata *dd = ppd->dd; +struct rvt_dev_info *rdi = &dd->verbs_dev.rdi;struct rvt_qp *qp;struct rvt_swqe *wqe;struct rvt_sge *sge;
@@ -369,11 +372,14 @@ static void qib_ruc_loopback(struct rvt_qp *sqp)int release;int ret; +rcu_read_lock ();/* * Note that we check the responder QP state after * checking the requester's state. */ - qp =qib_lookup_qpn (ibp, sqp->remote_qpn); + qp =rvt_lookup_qpn (rdi, &ibp->rvp, sqp->remote_qpn); +if (!qp) + goto done;spin_lock_irqsave (&sqp->s_lock, flags);
@@ -639,8 +645,7 @@ clr_busy: unlock:spin_unlock_irqrestore (&sqp->s_lock, flags); done: -if (qp &&atomic_dec_and_test (&qp->refcount)) -wake_up (&qp->wait); +rcu_read_unlock (); }/**
drivers/infiniband/hw/qib/qib_ud.c +7 -4
@@ -50,7 +50,9 @@static void qib_ud_loopback (struct rvt_qp *sqp,struct rvt_swqe *swqe) {struct qib_ibport *ibp =to_iport (sqp->ibqp.device, sqp->port_num); -struct qib_pportdata *ppd; +struct qib_pportdata *ppd =ppd_from_ibp (ibp); +struct qib_devdata *dd = ppd->dd; +struct rvt_dev_info *rdi = &dd->verbs_dev.rdi;struct rvt_qp *qp;struct ib_ah_attr *ah_attr;unsigned long flags;
@@ -60,9 +62,11 @@ static void qib_ud_loopback(struct rvt_qp *sqp, struct rvt_swqe *swqe)u32 length;enum ib_qp_type sqptype, dqptype; - qp =qib_lookup_qpn (ibp, swqe->ud_wr.remote_qpn); +rcu_read_lock (); + qp =rvt_lookup_qpn (rdi, &ibp->rvp, swqe->ud_wr.remote_qpn);if (!qp) { ibp->rvp.n_pkt_drops++; +rcu_read_unlock ();return ; }
@@ -223,8 +227,7 @@ static void qib_ud_loopback(struct rvt_qp *sqp, struct rvt_swqe *swqe) bail_unlock:spin_unlock_irqrestore (&qp->r_lock, flags); drop: -if (atomic_dec_and_test (&qp->refcount)) -wake_up (&qp->wait); +rcu_read_unlock (); }/**
drivers/infiniband/hw/qib/qib_verbs.c +8 -19
@@ -367,6 +367,8 @@ void qib_ib_rcv(struct qib_ctxtdata *rcd, void *rhdr, void *data, u32 tlen)struct qib_pportdata *ppd = rcd->ppd;struct qib_ibport *ibp = &ppd->ibport_data;struct qib_ib_header *hdr = rhdr; +struct qib_devdata *dd = ppd->dd; +struct rvt_dev_info *rdi = &dd->verbs_dev.rdi;struct qib_other_headers *ohdr;struct rvt_qp *qp;u32 qp_num;
@@ -429,25 +431,15 @@ void qib_ib_rcv(struct qib_ctxtdata *rcd, void *rhdr, void *data, u32 tlen)if (atomic_dec_return (&mcast->refcount) <=1 )wake_up (&mcast->wait); }else { -if (rcd->lookaside_qp) { -if (rcd->lookaside_qpn != qp_num) { -if (atomic_dec_and_test ( - &rcd->lookaside_qp->refcount)) -wake_up ( - &rcd->lookaside_qp->wait); - rcd->lookaside_qp =NULL ; - } +rcu_read_lock (); + qp =rvt_lookup_qpn (rdi, &ibp->rvp, qp_num); +if (!qp) { +rcu_read_unlock (); + goto drop; } -if (!rcd->lookaside_qp) { - qp =qib_lookup_qpn (ibp, qp_num); -if (!qp) - goto drop; - rcd->lookaside_qp = qp; - rcd->lookaside_qpn = qp_num; - }else - qp = rcd->lookaside_qp;this_cpu_inc (ibp->pmastats->n_unicast_rcv);qib_qp_rcv (rcd, hdr, lnh ==QIB_LRH_GRH , data, tlen, qp); +rcu_read_unlock (); }return ;
@@ -747,8 +739,6 @@ void qib_put_txreq(struct qib_verbs_txreq *tx) qp = tx->qp; dev =to_idev (qp->ibqp.device); -if (atomic_dec_and_test (&qp->refcount)) -wake_up (&qp->wait);if (tx->mr) {rvt_put_mr (tx->mr); tx->mr =NULL ;
@@ -929,7 +919,6 @@ static int qib_verbs_send_dma(struct rvt_qp *qp, struct qib_ib_header *hdr, control = dd->f_setpbc_control (ppd, plen, qp->s_srate,be16_to_cpu (hdr->lrh[0 ]) >>12 ); tx->qp = qp; -atomic_inc (&qp->refcount); tx->wqe = qp->s_wqe; tx->mr = qp->s_rdma_mr;if (qp->s_rdma_mr)
drivers/infiniband/hw/qib/qib_verbs.h +0 -2
@@ -359,8 +359,6 @@ int qib_get_counters(struct qib_pportdata *ppd,__be32 qib_compute_aeth (struct rvt_qp *qp); -struct rvt_qp *qib_lookup_qpn (struct qib_ibport *ibp,u32 qpn); -int qib_destroy_qp (struct ib_qp *ibqp);int qib_error_qp (struct rvt_qp *qp,enum ib_wc_status err);
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 4/7 IB/qib: Remove modify queue pair code
In reply to a message not in the archiveFrom: Harish Chegondi <[email protected]>
Modify queue pair functionality in rdmavt will be used instead. Remove ancillary functions which are being used by modify QP code.
--- drivers/infiniband/hw/qib/qib.h | 10 + drivers/infiniband/hw/qib/qib_common.h | 1 drivers/infiniband/hw/qib/qib_driver.c | 2 drivers/infiniband/hw/qib/qib_qp.c | 515 ++++---------------------------- drivers/infiniband/hw/qib/qib_rc.c | 10 - drivers/infiniband/hw/qib/qib_ruc.c | 6 drivers/infiniband/hw/qib/qib_sdma.c | 2 drivers/infiniband/hw/qib/qib_uc.c | 10 - drivers/infiniband/hw/qib/qib_ud.c | 6 drivers/infiniband/hw/qib/qib_verbs.c | 16 + drivers/infiniband/hw/qib/qib_verbs.h | 28 -- 11 files changed, 113 insertions(+), 493 deletions(-)
drivers/infiniband/hw/qib/qib.h +10 -0
@@ -1539,4 +1539,14 @@ struct qib_hwerror_msgs {void qib_format_hwerrors (u64 hwerrs,const struct qib_hwerror_msgs *hwerrmsgs,size_t nhwerrmsgs,char *msg,size_t lmsg); + +void stop_send_queue (struct rvt_qp *qp); +void quiesce_qp (struct rvt_qp *qp); +void flush_qp_waiters (struct rvt_qp *qp); +int mtu_to_path_mtu (u32 mtu); +u32 mtu_from_qp (struct rvt_dev_info *rdi,struct rvt_qp *qp,u32 pmtu); +void notify_error_qp (struct rvt_qp *qp); +int get_pmtu_from_attr (struct rvt_dev_info *rdi,struct rvt_qp *qp, +struct ib_qp_attr *attr); +#endif /* _QIB_KERNEL_H */
drivers/infiniband/hw/qib/qib_common.h +0 -1
@@ -747,7 +747,6 @@ struct qib_tid_session_member {#define QIB_AETH_CREDIT_INVAL 0x1F#define QIB_PSN_MASK 0xFFFFFF#define QIB_MSN_MASK 0xFFFFFF -#define QIB_QPN_MASK 0xFFFFFF#define QIB_EAGER_TID_ID QLOGIC_IB_I_TID_MASK#define QIB_MULTICAST_QPN 0xFFFFFF
drivers/infiniband/hw/qib/qib_driver.c +1 -1
@@ -364,7 +364,7 @@ static u32 qib_rcv_hdrerr(struct qib_ctxtdata *rcd, struct qib_pportdata *ppd, psn =be32_to_cpu (ohdr->bth[2 ]);/* Get the destination QP number. */ - qp_num =be32_to_cpu (ohdr->bth[1 ]) &QIB_QPN_MASK ; + qp_num =be32_to_cpu (ohdr->bth[1 ]) &RVT_QPN_MASK ;if (qp_num !=QIB_MULTICAST_QPN ) {int ruc_res;
drivers/infiniband/hw/qib/qib_qp.c +72 -443
572 lines not on this page · raw message
drivers/infiniband/hw/qib/qib_rc.c +5 -5
@@ -879,7 +879,7 @@ static void qib_restart_rc(struct rvt_qp *qp, u32 psn, int wait) qp->s_retry = qp->s_retry_cnt; }else if (qp->s_last == qp->s_acked) {qib_send_complete (qp, wqe,IB_WC_RETRY_EXC_ERR ); -qib_error_qp (qp,IB_WC_WR_FLUSH_ERR ); +rvt_error_qp (qp,IB_WC_WR_FLUSH_ERR );return ; }else /* XXX need to handle delayed completion */ return ;
@@ -1324,7 +1324,7 @@ static int do_rc_ack(struct rvt_qp *qp, u32 aeth, u32 psn, int opcode, class_b:if (qp->s_last == qp->s_acked) {qib_send_complete (qp, wqe, status); -qib_error_qp (qp,IB_WC_WR_FLUSH_ERR ); +rvt_error_qp (qp,IB_WC_WR_FLUSH_ERR ); }break ;
@@ -1599,7 +1599,7 @@ ack_len_err: ack_err:if (qp->s_last == qp->s_acked) {qib_send_complete (qp, wqe, status); -qib_error_qp (qp,IB_WC_WR_FLUSH_ERR ); +rvt_error_qp (qp,IB_WC_WR_FLUSH_ERR ); } ack_done:spin_unlock_irqrestore (&qp->s_lock, flags);
@@ -1825,7 +1825,7 @@ void qib_rc_error(struct rvt_qp *qp, enum ib_wc_status err)int lastwqe;spin_lock_irqsave (&qp->s_lock, flags); - lastwqe =qib_error_qp (qp, err); + lastwqe =rvt_error_qp (qp, err);spin_unlock_irqrestore (&qp->s_lock, flags);if (lastwqe) {
@@ -2027,7 +2027,7 @@ send_last:if (unlikely (wc.byte_len > qp->r_len)) goto nack_inv;qib_copy_sge (&qp->r_sge, data, tlen,1 ); -qib_put_ss (&qp->r_sge); +rvt_put_ss (&qp->r_sge); qp->r_msn++;if (!test_and_clear_bit (RVT_R_WRID_VALID , &qp->r_aflags))break ;
drivers/infiniband/hw/qib/qib_ruc.c +3 -3
@@ -174,7 +174,7 @@ int qib_get_rwqe(struct rvt_qp *qp, int wr_id_only) }/* Make sure entry is read after head index is read. */ smp_rmb (); - wqe =get_rwqe_ptr (rq, tail); + wqe =rvt_get_rwqe_ptr (rq, tail);/* * Even though we update the tail index in memory, the verbs * consumer is not supposed to post more entries until a
@@ -551,7 +551,7 @@ again: sqp->s_len -= len; }if (release) -qib_put_ss (&qp->r_sge); +rvt_put_ss (&qp->r_sge);if (!test_and_clear_bit (RVT_R_WRID_VALID , &qp->r_aflags)) goto send_comp;
@@ -626,7 +626,7 @@ serr:spin_lock_irqsave (&sqp->s_lock, flags);qib_send_complete (sqp, wqe, send_status);if (sqp->ibqp.qp_type ==IB_QPT_RC ) { -int lastwqe =qib_error_qp (sqp,IB_WC_WR_FLUSH_ERR ); +int lastwqe =rvt_error_qp (sqp,IB_WC_WR_FLUSH_ERR ); sqp->s_flags &= ~RVT_S_BUSY ;spin_unlock_irqrestore (&sqp->s_lock, flags);
drivers/infiniband/hw/qib/qib_sdma.c +1 -1
@@ -673,7 +673,7 @@ unmap:if (qp->ibqp.qp_type ==IB_QPT_RC ) {/* XXX what about error sending RDMA read responses? */ if (ib_rvt_state_ops[qp->state] &RVT_PROCESS_RECV_OK ) -qib_error_qp (qp,IB_WC_GENERAL_ERR ); +rvt_error_qp (qp,IB_WC_GENERAL_ERR ); }else if (qp->s_wqe)qib_send_complete (qp, qp->s_wqe,IB_WC_GENERAL_ERR );spin_unlock (&qp->s_lock);
drivers/infiniband/hw/qib/qib_uc.c +5 -5
@@ -282,7 +282,7 @@ inv:set_bit (RVT_R_REWIND_SGE , &qp->r_aflags); qp->r_sge.num_sge =0 ; }else -qib_put_ss (&qp->r_sge); +rvt_put_ss (&qp->r_sge); qp->r_state =OP (SEND_LAST );switch (opcode) {case OP (SEND_FIRST ):
@@ -401,7 +401,7 @@ send_last: goto rewind; wc.opcode =IB_WC_RECV ;qib_copy_sge (&qp->r_sge, data, tlen,0 ); -qib_put_ss (&qp->s_rdma_read_sge); +rvt_put_ss (&qp->s_rdma_read_sge); last_imm: wc.wr_id = qp->r_wr_id; wc.status =IB_WC_SUCCESS ;
@@ -485,7 +485,7 @@ rdma_last_imm:if (unlikely (tlen + qp->r_rcv_len != qp->r_len)) goto drop;if (test_and_clear_bit (RVT_R_REWIND_SGE , &qp->r_aflags)) -qib_put_ss (&qp->s_rdma_read_sge); +rvt_put_ss (&qp->s_rdma_read_sge);else { ret =qib_get_rwqe (qp,1 );if (ret <0 )
@@ -496,7 +496,7 @@ rdma_last_imm: wc.byte_len = qp->r_len; wc.opcode =IB_WC_RECV_RDMA_WITH_IMM ;qib_copy_sge (&qp->r_sge, data, tlen,1 ); -qib_put_ss (&qp->r_sge); +rvt_put_ss (&qp->r_sge); goto last_imm;case OP (RDMA_WRITE_LAST ):
@@ -512,7 +512,7 @@ rdma_last:if (unlikely (tlen + qp->r_rcv_len != qp->r_len)) goto drop;qib_copy_sge (&qp->r_sge, data, tlen,1 ); -qib_put_ss (&qp->r_sge); +rvt_put_ss (&qp->r_sge);break ;default :
drivers/infiniband/hw/qib/qib_ud.c +3 -3
@@ -206,7 +206,7 @@ static void qib_ud_loopback(struct rvt_qp *sqp, struct rvt_swqe *swqe) } length -= len; } -qib_put_ss (&qp->r_sge); +rvt_put_ss (&qp->r_sge);if (!test_and_clear_bit (RVT_R_WRID_VALID , &qp->r_aflags)) goto bail_unlock; wc.wr_id = qp->r_wr_id;
@@ -452,7 +452,7 @@ void qib_ud_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr, hdrsize =8 +40 +12 +8 ;/* LRH + GRH + BTH + DETH */ } qkey =be32_to_cpu (ohdr->u.ud.deth[0 ]); - src_qp =be32_to_cpu (ohdr->u.ud.deth[1 ]) &QIB_QPN_MASK ; + src_qp =be32_to_cpu (ohdr->u.ud.deth[1 ]) &RVT_QPN_MASK ;/* * Get the number of bytes the message was padded by
@@ -565,7 +565,7 @@ void qib_ud_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr, }else qib_skip_sge (&qp->r_sge,sizeof (struct ib_grh ),1 );qib_copy_sge (&qp->r_sge, data, wc.byte_len -sizeof (struct ib_grh ),1 ); -qib_put_ss (&qp->r_sge); +rvt_put_ss (&qp->r_sge);if (!test_and_clear_bit (RVT_R_WRID_VALID , &qp->r_aflags))return ; wc.wr_id = qp->r_wr_id;
drivers/infiniband/hw/qib/qib_verbs.c +12 -4
@@ -411,7 +411,7 @@ void qib_ib_rcv(struct qib_ctxtdata *rcd, void *rhdr, void *data, u32 tlen)#endif /* Get the destination QP number. */ - qp_num =be32_to_cpu (ohdr->bth[1 ]) &QIB_QPN_MASK ; + qp_num =be32_to_cpu (ohdr->bth[1 ]) &RVT_QPN_MASK ;if (qp_num ==QIB_MULTICAST_QPN ) {struct rvt_mcast *mcast;struct rvt_mcast_qp *p;
@@ -1644,7 +1644,6 @@ int qib_register_ib_device(struct qib_devdata *dd)init_ibport (ppd + i);/* Only need to initialize non-zero fields. */ -spin_lock_init (&dev->n_qps_lock);init_timer (&dev->mem_timer); dev->mem_timer.function = mem_timer; dev->mem_timer.data = (unsigned long ) dev;
@@ -1698,7 +1697,6 @@ int qib_register_ib_device(struct qib_devdata *dd) ibdev->query_port = qib_query_port; ibdev->modify_port = qib_modify_port; ibdev->query_gid = qib_query_gid; - ibdev->modify_qp = qib_modify_qp; ibdev->destroy_qp = qib_destroy_qp; ibdev->process_mad = qib_process_mad; ibdev->get_port_immutable = qib_port_immutable;
@@ -1721,7 +1719,15 @@ int qib_register_ib_device(struct qib_devdata *dd) dd->verbs_dev.rdi.driver_f.notify_qp_reset = notify_qp_reset; dd->verbs_dev.rdi.driver_f.do_send = qib_do_send; dd->verbs_dev.rdi.driver_f.schedule_send = qib_schedule_send; - + dd->verbs_dev.rdi.driver_f.quiesce_qp = quiesce_qp; + dd->verbs_dev.rdi.driver_f.stop_send_queue = stop_send_queue; + dd->verbs_dev.rdi.driver_f.flush_qp_waiters = flush_qp_waiters; + dd->verbs_dev.rdi.driver_f.notify_error_qp = notify_error_qp; + dd->verbs_dev.rdi.driver_f.mtu_to_path_mtu = mtu_to_path_mtu; + dd->verbs_dev.rdi.driver_f.mtu_from_qp = mtu_from_qp; + dd->verbs_dev.rdi.driver_f.get_pmtu_from_attr = get_pmtu_from_attr; + + dd->verbs_dev.rdi.dparms.max_rdma_atomic =QIB_MAX_RDMA_ATOMIC ; dd->verbs_dev.rdi.dparms.lkey_table_size = qib_lkey_table_size; dd->verbs_dev.rdi.dparms.qp_table_size = ib_qib_qp_table_size; dd->verbs_dev.rdi.dparms.qpn_start =1 ;
@@ -1730,6 +1736,8 @@ int qib_register_ib_device(struct qib_devdata *dd) dd->verbs_dev.rdi.dparms.qpn_inc =1 ; dd->verbs_dev.rdi.dparms.qos_shift =1 ; dd->verbs_dev.rdi.dparms.psn_mask =QIB_PSN_MASK ; + dd->verbs_dev.rdi.dparms.psn_shift =QIB_PSN_SHIFT ; + dd->verbs_dev.rdi.dparms.psn_modify_mask =QIB_PSN_MASK ; dd->verbs_dev.rdi.dparms.nports = dd->num_pports; dd->verbs_dev.rdi.dparms.npkeys =qib_get_npkeys (dd); dd->verbs_dev.rdi.dparms.node = dd->assigned_node_id;
drivers/infiniband/hw/qib/qib_verbs.h +1 -27
@@ -55,6 +55,7 @@ struct qib_verbs_txreq;#define QIB_MAX_RDMA_ATOMIC 16#define QIB_GUIDS_PER_PORT 5 +#define QIB_PSN_SHIFT 8/* * Increment this value if any changes that break userspace ABI
@@ -200,18 +201,6 @@ struct qib_qp_priv {#define QIB_PSN_CREDIT 16 -/* -* Since struct rvt_rwqe is not a fixed size, we can't simply index into -* struct rvt_rwq.wq. This function does the array index computation. -*/ -static inline struct rvt_rwqe *get_rwqe_ptr (struct rvt_rq *rq,unsigned n) -{ -return (struct rvt_rwqe *) - ((char *) rq->wq->wq + - (sizeof (struct rvt_rwqe ) + - rq->max_sge *sizeof (struct ib_sge )) * n); -} -struct qib_opcode_stats {u64 n_packets;/* number of packets */ u64 n_bytes;/* total number of bytes */
@@ -268,8 +257,6 @@ struct qib_ibdev {u32 n_piowait;u32 n_txwait; -u32 n_qps_allocated;/* number of QPs allocated for device */ -spinlock_t n_qps_lock;#ifdef CONFIG_DEBUG_FS /* per HCA debugfs */ struct dentry *qib_ibdev_dbg;
@@ -361,10 +348,6 @@ __be32 qib_compute_aeth(struct rvt_qp *qp);int qib_destroy_qp (struct ib_qp *ibqp); -int qib_error_qp (struct rvt_qp *qp,enum ib_wc_status err); - -int qib_modify_qp (struct ib_qp *ibqp,struct ib_qp_attr *attr, -int attr_mask,struct ib_udata *udata);/* * Functions provided by qib driver for rdmavt to use */
@@ -426,15 +409,6 @@ void qib_ud_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr,void mr_rcu_callback (struct rcu_head *list); -static inline void qib_put_ss (struct rvt_sge_state *ss) -{ -while (ss->num_sge) { -rvt_put_mr (ss->sge.mr); -if (--ss->num_sge) - ss->sge = *ss->sg_list++; - } -} -int qib_get_rwqe (struct rvt_qp *qp,int wr_id_only);void qib_migrate_qp (struct rvt_qp *qp);
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 5/7 IB/qib: Remove destroy queue pair code
In reply to a message not in the archiveFrom: Harish Chegondi <[email protected]>
Destroy QP functionality in rdmavt will be used instead. Remove the remove_qp function being called exclusively by destroy qp code.
--- drivers/infiniband/hw/qib/qib_qp.c | 105 --------------------------------- drivers/infiniband/hw/qib/qib_verbs.c | 1 drivers/infiniband/hw/qib/qib_verbs.h | 2 - 3 files changed, 0 insertions(+), 108 deletions(-)
drivers/infiniband/hw/qib/qib_qp.c +0 -105
@@ -209,58 +209,6 @@ bail:return ret; } -static inline unsigned qpn_hash (struct qib_ibdev *dev,u32 qpn) -{ -return hash_32 (qpn, dev->rdi.qp_dev->qp_table_bits); -} - -/* -* Remove the QP from the table so it can't be found asynchronously by -* the receive interrupt routine. -*/ -static void remove_qp (struct qib_ibdev *dev,struct rvt_qp *qp) -{ -struct qib_ibport *ibp =to_iport (qp->ibqp.device, qp->port_num); -unsigned n =qpn_hash (dev, qp->ibqp.qp_num); -unsigned long flags; -int removed =1 ; -spinlock_t *qpt_lock_ptr;/* Pointer to make checkpatch happy */ - -spin_lock_irqsave (&dev->rdi.qp_dev->qpt_lock, flags); - - qpt_lock_ptr = &dev->rdi.qp_dev->qpt_lock; -if (rcu_dereference_protected (ibp->rvp.qp[0 ], -lockdep_is_held (qpt_lock_ptr)) == qp) { -RCU_INIT_POINTER (ibp->rvp.qp[0 ],NULL ); - }else if (rcu_dereference_protected (ibp->rvp.qp[1 ], -lockdep_is_held (&dev->rdi.qp_dev->qpt_lock)) == qp) { -RCU_INIT_POINTER (ibp->rvp.qp[1 ],NULL ); - }else { -struct rvt_qp *q; -struct rvt_qp __rcu **qpp; - - removed =0 ; - qpp = &dev->rdi.qp_dev->qp_table[n]; -for (; (q =rcu_dereference_protected (*qpp, -lockdep_is_held (qpt_lock_ptr))) !=NULL ; - qpp = &q->next) -if (q == qp) { -RCU_INIT_POINTER (*qpp, -rcu_dereference_protected (qp->next, -lockdep_is_held (qpt_lock_ptr))); - removed =1 ; -break ; - } - } - -spin_unlock_irqrestore (&dev->rdi.qp_dev->qpt_lock, flags); -if (removed) { -synchronize_rcu (); -if (atomic_dec_and_test (&qp->refcount)) -wake_up (&qp->wait); - } -} -/** * qib_free_all_qps - check for QPs still in use */
@@ -489,59 +437,6 @@ void flush_qp_waiters(struct rvt_qp *qp) }/** -* qib_destroy_qp - destroy a queue pair -* @ibqp: the queue pair to destroy -* -* Returns 0 on success. -* -* Note that this can be called while the QP is actively sending or -* receiving! -*/ -int qib_destroy_qp (struct ib_qp *ibqp) -{ -struct rvt_qp *qp =ibqp_to_rvtqp (ibqp); -struct qib_ibdev *dev =to_idev (ibqp->device); -struct qib_qp_priv *priv = qp->priv; - -/* Make sure HW and driver activity is stopped. */ -spin_lock_irq (&qp->s_lock); -if (qp->state !=IB_QPS_RESET ) { - qp->state =IB_QPS_RESET ; -spin_lock (&dev->rdi.pending_lock); -if (!list_empty (&priv->iowait)) -list_del_init (&priv->iowait); -spin_unlock (&dev->rdi.pending_lock); - qp->s_flags &= ~(RVT_S_TIMER |RVT_S_ANY_WAIT ); -spin_unlock_irq (&qp->s_lock); -cancel_work_sync (&priv->s_work); -del_timer_sync (&qp->s_timer); -wait_event (priv->wait_dma, !atomic_read (&priv->s_dma_busy)); -if (priv->s_tx) { -qib_put_txreq (priv->s_tx); - priv->s_tx =NULL ; - } -remove_qp (dev, qp); -wait_event (qp->wait, !atomic_read (&qp->refcount)); -rvt_clear_mr_refs (qp,1 ); - }else -spin_unlock_irq (&qp->s_lock); - -/* all user's cleaned up, mark it available */ -rvt_free_qpn (&dev->rdi.qp_dev->qpn_table, qp->ibqp.qp_num); -rvt_dec_qp_cnt (&dev->rdi); - -if (qp->ip) -kref_put (&qp->ip->ref, rvt_release_mmap_info); -else -vfree (qp->r_rq.wq); -vfree (qp->s_wq); -kfree (priv->s_hdr); -kfree (priv); -kfree (qp); -return 0 ; -} - -/** * qib_get_credit - flush the send work queue of a QP * @qp: the qp who's send work queue to flush * @aeth: the Acknowledge Extended Transport Header
drivers/infiniband/hw/qib/qib_verbs.c +0 -1
@@ -1697,7 +1697,6 @@ int qib_register_ib_device(struct qib_devdata *dd) ibdev->query_port = qib_query_port; ibdev->modify_port = qib_modify_port; ibdev->query_gid = qib_query_gid; - ibdev->destroy_qp = qib_destroy_qp; ibdev->process_mad = qib_process_mad; ibdev->get_port_immutable = qib_port_immutable;
drivers/infiniband/hw/qib/qib_verbs.h +0 -2
@@ -346,8 +346,6 @@ int qib_get_counters(struct qib_pportdata *ppd,__be32 qib_compute_aeth (struct rvt_qp *qp); -int qib_destroy_qp (struct ib_qp *ibqp); -/* * Functions provided by qib driver for rdmavt to use */
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 6/7 IB/qib: Support query gid in rdmavt
In reply to a message not in the archiveQuery gid is in rdmavt, but still relies on the driver to maintain the guid table. Add the necessary driver call back and remove the existing verb handler.
--- drivers/infiniband/hw/qib/qib_verbs.c | 32 ++++++++++++-------------------- 1 files changed, 12 insertions(+), 20 deletions(-)
drivers/infiniband/hw/qib/qib_verbs.c +12 -20
@@ -1421,28 +1421,20 @@ static int qib_modify_port(struct ib_device *ibdev, u8 port,return 0 ; } -static int qib_query_gid (struct ib_device *ibdev,u8 port, -int index,union ib_gid *gid) +static int qib_get_guid_be (struct rvt_dev_info *rdi,struct rvt_ibport *rvp, +int guid_index,__be64 *guid) { -struct qib_devdata *dd =dd_from_ibdev (ibdev); -int ret =0 ; - -if (!port || port > dd->num_pports) - ret = -EINVAL ; -else { -struct qib_ibport *ibp =to_iport (ibdev, port); -struct qib_pportdata *ppd =ppd_from_ibp (ibp); + struct qib_ibport *ibp = container_of(rvp, struct qib_ibport, rvp); +struct qib_pportdata *ppd =ppd_from_ibp (ibp); - gid->global.subnet_prefix = ibp->rvp.gid_prefix; -if (index ==0 ) - gid->global.interface_id = ppd->guid; -else if (index <QIB_GUIDS_PER_PORT ) - gid->global.interface_id = ibp->guids[index -1 ]; -else - ret = -EINVAL ; - } +if (guid_index ==0 ) + *guid = ppd->guid; +else if (guid_index <QIB_GUIDS_PER_PORT ) + *guid = ibp->guids[guid_index -1 ]; +else +return -EINVAL ; -return ret; +return 0 ; }int qib_check_ah (struct ib_device *ibdev,struct ib_ah_attr *ah_attr)
@@ -1696,7 +1688,6 @@ int qib_register_ib_device(struct qib_devdata *dd) ibdev->modify_device = qib_modify_device; ibdev->query_port = qib_query_port; ibdev->modify_port = qib_modify_port; - ibdev->query_gid = qib_query_gid; ibdev->process_mad = qib_process_mad; ibdev->get_port_immutable = qib_port_immutable;
@@ -1727,6 +1718,7 @@ int qib_register_ib_device(struct qib_devdata *dd) dd->verbs_dev.rdi.driver_f.get_pmtu_from_attr = get_pmtu_from_attr; dd->verbs_dev.rdi.dparms.max_rdma_atomic =QIB_MAX_RDMA_ATOMIC ; + dd->verbs_dev.rdi.driver_f.get_guid_be = qib_get_guid_be; dd->verbs_dev.rdi.dparms.lkey_table_size = qib_lkey_table_size; dd->verbs_dev.rdi.dparms.qp_table_size = ib_qib_qp_table_size; dd->verbs_dev.rdi.dparms.qpn_start =1 ;
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 7/7 IB/qib: Remove modify_port and port_immutable functions
In reply to a message not in the archiveFrom: Harish Chegondi <[email protected]>
Delete code from query_port which has been moved into rvt_query_port Create a call back function to shut down a port which may be called from rvt_modify_port
--- drivers/infiniband/hw/qib/qib_mad.c | 5 ++- drivers/infiniband/hw/qib/qib_verbs.c | 63 ++++++++------------------------- drivers/infiniband/hw/qib/qib_verbs.h | 2 + 3 files changed, 21 insertions(+), 49 deletions(-)
drivers/infiniband/hw/qib/qib_mad.c +4 -1
@@ -206,8 +206,11 @@ static void qib_bad_mkey(struct qib_ibport *ibp, struct ib_smp *smp)/* * Send a Port Capability Mask Changed trap (ch. 14.3.11). */ -void qib_cap_mask_chg (struct qib_ibport *ibp) +void qib_cap_mask_chg (struct rvt_dev_info *rdi,u8 port_num) { + struct qib_ibdev *ibdev = container_of(rdi, struct qib_ibdev, rdi); +struct qib_devdata *dd =dd_from_dev (ibdev); +struct qib_ibport *ibp = &dd->pport[port_num -1 ].ibport_data;struct ib_mad_notice_attr data; data.generic_type =IB_NOTICE_TYPE_INFO ;
drivers/infiniband/hw/qib/qib_verbs.c +16 -47
122 lines not on this page · raw message
drivers/infiniband/hw/qib/qib_verbs.h +1 -1
@@ -317,7 +317,7 @@ static inline int qib_pkey_ok(u16 pkey1, u16 pkey2)void qib_bad_pqkey (struct qib_ibport *ibp,__be16 trap_num,u32 key,u32 sl,u32 qp1,u32 qp2,__be16 lid1,__be16 lid2); -void qib_cap_mask_chg (struct qib_ibport *ibp); +void qib_cap_mask_chg (struct rvt_dev_info *rdi,u8 port_num);void qib_sys_guid_chg (struct qib_ibport *ibp);void qib_node_desc_chg (struct qib_ibport *ibp); int qib_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num,
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html