qp_info
struct hisi_qp_info qp_info;
if (copy_from_user(&qp_info, (void __user *)arg,
qp_info.sqe_size = qp->qm->sqe_size;
qp_info.sq_depth = qp->sq_depth;
qp_info.cq_depth = qp->cq_depth;
if (copy_to_user((void __user *)arg, &qp_info,
struct ib_mad_qp_info *qp_info;
qp_info = mad_send_wr->mad_agent_priv->qp_info;
mad_send_wr->mad_list.mad_queue = &qp_info->send_queue;
spin_lock_irqsave(&qp_info->send_queue.lock, flags);
if (qp_info->send_queue.count < qp_info->send_queue.max_active) {
trace_ib_mad_ib_send_mad(mad_send_wr, qp_info);
list = &qp_info->send_queue.list;
list = &qp_info->overflow_list;
qp_info->send_queue.count++;
spin_unlock_irqrestore(&qp_info->send_queue.lock, flags);
port_priv = agent_priv->qp_info->port_priv;
port_priv = agent_priv->qp_info->port_priv;
port_priv = agent_priv->qp_info->port_priv;
const struct ib_mad_qp_info *qp_info,
u32 qp_num = qp_info->qp->qp_num;
const struct ib_mad_qp_info *qp_info,
qp_info->qp->qp_num,
struct ib_mad_qp_info *qp_info,
qp_info->qp->qp_num,
struct ib_mad_qp_info *qp_info,
return handle_opa_smi(port_priv, qp_info, wc, port_num, recv,
return handle_ib_smi(port_priv, qp_info, wc, port_num, recv, response);
struct ib_mad_qp_info *qp_info;
qp_info = mad_list->mad_queue->qp_info;
opa = rdma_cap_opa_mad(qp_info->port_priv->device,
qp_info->port_priv->port_num);
if (!validate_mad((const struct ib_mad_hdr *)recv->mad, qp_info, opa))
trace_ib_mad_recv_done_handler(qp_info, wc,
if (handle_smi(port_priv, qp_info, wc, port_num, recv,
qp_info->qp->qp_num,
qp_info->qp->qp_num, mad_size, opa);
ib_mad_post_receive_mads(qp_info, response);
ib_mad_post_receive_mads(qp_info, recv);
mod_delayed_work(mad_agent_priv->qp_info->port_priv->wq,
mod_delayed_work(mad_agent_priv->qp_info->port_priv->wq,
struct ib_mad_qp_info *qp_info;
qp_info = send_queue->qp_info;
mad_list = container_of(qp_info->overflow_list.next,
trace_ib_mad_send_done_resend(queued_send_wr, qp_info);
ret = ib_post_send(qp_info->qp, &queued_send_wr->send_wr.wr,
static void mark_sends_for_retry(struct ib_mad_qp_info *qp_info)
spin_lock_irqsave(&qp_info->send_queue.lock, flags);
list_for_each_entry(mad_list, &qp_info->send_queue.list, list) {
spin_unlock_irqrestore(&qp_info->send_queue.lock, flags);
struct ib_mad_qp_info *qp_info = mad_list->mad_queue->qp_info;
trace_ib_mad_error_handler(mad_send_wr, qp_info);
ret = ib_post_send(qp_info->qp, &mad_send_wr->send_wr.wr,
ret = ib_modify_qp(qp_info->qp, attr,
mark_sends_for_retry(qp_info);
opa = rdma_cap_opa_mad(mad_agent_priv->qp_info->port_priv->device,
mad_agent_priv->qp_info->port_priv->port_num);
queue_delayed_work(mad_agent_priv->qp_info->
static int ib_mad_post_receive_mads(struct ib_mad_qp_info *qp_info,
struct ib_mad_queue *recv_queue = &qp_info->recv_queue;
sg_list.lkey = qp_info->port_priv->pd->local_dma_lkey;
mad_priv = alloc_mad_private(port_mad_size(qp_info->port_priv),
sg_list.addr = ib_dma_map_single(qp_info->port_priv->device,
if (unlikely(ib_dma_mapping_error(qp_info->port_priv->device,
ret = ib_post_recv(qp_info->qp, &recv_wr, NULL);
dev_err(&qp_info->port_priv->device->dev,
ib_dma_unmap_single(qp_info->port_priv->device,
static void cleanup_recv_queue(struct ib_mad_qp_info *qp_info)
if (!qp_info->qp)
while (!list_empty(&qp_info->recv_queue.list)) {
mad_list = list_entry(qp_info->recv_queue.list.next,
ib_dma_unmap_single(qp_info->port_priv->device,
qp_info->recv_queue.count = 0;
qp = port_priv->qp_info[i].qp;
if (!port_priv->qp_info[i].qp)
ret = ib_mad_post_receive_mads(&port_priv->qp_info[i], NULL);
struct ib_mad_qp_info *qp_info = qp_context;
dev_err(&qp_info->port_priv->device->dev,
event->event, qp_info->qp->qp_num);
static void init_mad_queue(struct ib_mad_qp_info *qp_info,
mad_queue->qp_info = qp_info;
struct ib_mad_qp_info *qp_info)
qp_info->port_priv = port_priv;
init_mad_queue(qp_info, &qp_info->send_queue);
init_mad_queue(qp_info, &qp_info->recv_queue);
INIT_LIST_HEAD(&qp_info->overflow_list);
static int create_mad_qp(struct ib_mad_qp_info *qp_info,
qp_init_attr.send_cq = qp_info->port_priv->cq;
qp_init_attr.recv_cq = qp_info->port_priv->cq;
qp_init_attr.port_num = qp_info->port_priv->port_num;
qp_init_attr.qp_context = qp_info;
qp_info->qp = ib_create_qp(qp_info->port_priv->pd, &qp_init_attr);
if (IS_ERR(qp_info->qp)) {
dev_err(&qp_info->port_priv->device->dev,
ret = PTR_ERR(qp_info->qp);
qp_info->send_queue.max_active = mad_sendq_size;
qp_info->recv_queue.max_active = mad_recvq_size;
static void destroy_mad_qp(struct ib_mad_qp_info *qp_info)
if (!qp_info->qp)
ib_destroy_qp(qp_info->qp);
init_mad_qp(port_priv, &port_priv->qp_info[0]);
init_mad_qp(port_priv, &port_priv->qp_info[1]);
ret = create_mad_qp(&port_priv->qp_info[0], IB_QPT_SMI);
ret = create_mad_qp(&port_priv->qp_info[1], IB_QPT_GSI);
destroy_mad_qp(&port_priv->qp_info[1]);
destroy_mad_qp(&port_priv->qp_info[0]);
cleanup_recv_queue(&port_priv->qp_info[1]);
cleanup_recv_queue(&port_priv->qp_info[0]);
destroy_mad_qp(&port_priv->qp_info[1]);
destroy_mad_qp(&port_priv->qp_info[0]);
cleanup_recv_queue(&port_priv->qp_info[1]);
cleanup_recv_queue(&port_priv->qp_info[0]);
if (!port_priv->qp_info[qpn].qp) {
mad_agent_priv->qp_info = &port_priv->qp_info[qpn];
mad_agent_priv->agent.qp = port_priv->qp_info[qpn].qp;
port_priv = mad_agent_priv->qp_info->port_priv;
struct ib_mad_qp_info *qp_info,
size_t mad_size = port_mad_size(mad_agent_priv->qp_info->port_priv);
bool opa = rdma_cap_opa_mad(mad_agent_priv->qp_info->port_priv->device,
mad_agent_priv->qp_info->port_priv->port_num);
queue_work(mad_agent_priv->qp_info->port_priv->wq,
static int ib_mad_post_receive_mads(struct ib_mad_qp_info *qp_info,
struct ib_mad_qp_info *qp_info;
struct ib_mad_qp_info *qp_info;
struct ib_mad_qp_info qp_info[IB_MAD_QPS_CORE];
struct ib_mad_qp_info *qp_info;
return max(agent->qp_info->recv_queue.max_active >> 3, 1);
bool opa = rdma_cap_opa_mad(rmpp_recv->agent->qp_info->port_priv->device,
rmpp_recv->agent->qp_info->port_priv->port_num);
queue_delayed_work(rmpp_recv->agent->qp_info->port_priv->wq,
queue_delayed_work(agent->qp_info->port_priv->wq,
flush_workqueue(agent->qp_info->port_priv->wq);
struct irdma_create_qp_info *qp_info;
qp_info = &cqp_request->info.in.u.qp_create.info;
qp_info->cq_num_valid = true;
qp_info->next_iwarp_state = IRDMA_QP_STATE_RTS;
struct irdma_create_qp_info *qp_info;
qp_info = &cqp_request->info.in.u.qp_create.info;
qp_info->mac_valid = true;
qp_info->cq_num_valid = true;
qp_info->next_iwarp_state = IRDMA_QP_STATE_IDLE;
struct qp_info qp;
struct qp_info *qp;
struct ib_mad_qp_info *qp_info),
TP_ARGS(wr, qp_info));
struct ib_mad_qp_info *qp_info),
TP_ARGS(wr, qp_info));
struct ib_mad_qp_info *qp_info),
TP_ARGS(wr, qp_info));
__entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
TP_PROTO(struct ib_mad_qp_info *qp_info, struct ib_wc *wc,
TP_ARGS(qp_info, wc, mad_hdr),
struct ib_mad_qp_info *qp_info,
__entry->dev_index = qp_info->port_priv->device->index;
__entry->port_num = qp_info->port_priv->port_num;
__entry->qp_num = qp_info->qp->qp_num;
struct ib_mad_qp_info *qp_info),
TP_ARGS(wr, qp_info),
__entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
create_mad_addr_info(wr, qp_info, __entry);