Listing 1. IPoIB Driver Initialization

struct ib_qp_init_attr init_attr = {
    .cap = {
        .max_send_wr  = IPOIB_TX_RING_SIZE,
        .max_recv_wr  = IPOIB_RX_RING_SIZE,
        .max_send_sge = 1,
        .max_recv_sge = 1
    },
    .sq_sig_type = IB_SIGNAL_ALL_WR,
    .rq_sig_type = IB_SIGNAL_ALL_WR,
    .qp_type     = IB_QPT_UD
};

priv->pd = ib_alloc_pd(priv->ca);

priv->cq = ib_create_cq(priv->ca,
            ipoib_ib_completion,
            NULL, dev,
            IPOIB_TX_RING_SIZE +
            IPOIB_RX_RING_SIZE + 1);

if (ib_req_notify_cq(priv->cq, IB_CQ_NEXT_COMP))
    goto out_free_cq;

priv->mr = ib_get_dma_mr(priv->pd,
                         IB_ACCESS_LOCAL_WRITE);

init_attr.send_cq = priv->cq;
init_attr.recv_cq = priv->cq,

priv->qp = ib_create_qp(priv->pd, &init_attr);

