> Use a bit in wc_flags rather then a whole integer, this change for itself > doesn't reduce the size of struct ib_wc on 64bit machines, so it stays on 56 > bytes as of padding. However, it will allow to add more fields in the future > w.o > enlarging that structure. Also, it will serve to have unified approach with > future libibverbs checksum offload reporting towards applications, where > adding a bit flag doesn't break the library ABI. This patch was during > conversation with Liran Liss <[email protected]> > > Signed-off-by: Or Gerlitz <[email protected]>
Reviewed-by: Sean Hefty <[email protected]> > --- > drivers/infiniband/hw/mlx4/cq.c | 3 ++- > drivers/infiniband/hw/mthca/mthca_cq.c | 3 ++- > drivers/infiniband/hw/qib/qib_rc.c | 1 - > drivers/infiniband/hw/qib/qib_uc.c | 1 - > drivers/infiniband/ulp/ipoib/ipoib_ib.c | 3 ++- > include/rdma/ib_verbs.h | 2 +- > 6 files changed, 7 insertions(+), 6 deletions(-) > > diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c > index 5ecf38d..09eb1d1 100644 > --- a/drivers/infiniband/hw/mlx4/cq.c > +++ b/drivers/infiniband/hw/mlx4/cq.c > @@ -720,7 +720,8 @@ repoll: > wc->dlid_path_bits = (g_mlpath_rqpn >> 24) & 0x7f; > wc->wc_flags |= g_mlpath_rqpn & 0x80000000 ? IB_WC_GRH : 0; > wc->pkey_index = be32_to_cpu(cqe->immed_rss_invalid) & 0x7f; > - wc->csum_ok = mlx4_ib_ipoib_csum_ok(cqe->status, cqe- > >checksum); > + wc->wc_flags |= mlx4_ib_ipoib_csum_ok(cqe->status, > + cqe->checksum) ? IB_WC_IP_CSUM_OK : 0; > if (rdma_port_get_link_layer(wc->qp->device, > (*cur_qp)->port) == IB_LINK_LAYER_ETHERNET) > wc->sl = be16_to_cpu(cqe->sl_vid) >> 13; > diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c > b/drivers/infiniband/hw/mthca/mthca_cq.c > index 53157b8..40ba833 100644 > --- a/drivers/infiniband/hw/mthca/mthca_cq.c > +++ b/drivers/infiniband/hw/mthca/mthca_cq.c > @@ -643,7 +643,8 @@ static inline int mthca_poll_one(struct mthca_dev *dev, > entry->wc_flags |= cqe->g_mlpath & 0x80 ? IB_WC_GRH : 0; > checksum = (be32_to_cpu(cqe->rqpn) >> 24) | > ((be32_to_cpu(cqe->my_ee) >> 16) & 0xff00); > - entry->csum_ok = (cqe->sl_ipok & 1 && checksum == 0xffff); > + entry->wc_flags |= (cqe->sl_ipok & 1 && checksum == 0xffff) ? > + IB_WC_IP_CSUM_OK : 0; > } > > entry->status = IB_WC_SUCCESS; > diff --git a/drivers/infiniband/hw/qib/qib_rc.c > b/drivers/infiniband/hw/qib/qib_rc.c > index 894afac..765b4cb 100644 > --- a/drivers/infiniband/hw/qib/qib_rc.c > +++ b/drivers/infiniband/hw/qib/qib_rc.c > @@ -2048,7 +2048,6 @@ send_last: > wc.pkey_index = 0; > wc.dlid_path_bits = 0; > wc.port_num = 0; > - wc.csum_ok = 0; > /* Signal completion event if the solicited bit is set. */ > qib_cq_enter(to_icq(qp->ibqp.recv_cq), &wc, > (ohdr->bth[0] & > diff --git a/drivers/infiniband/hw/qib/qib_uc.c > b/drivers/infiniband/hw/qib/qib_uc.c > index 847e7af..7ce2ac2 100644 > --- a/drivers/infiniband/hw/qib/qib_uc.c > +++ b/drivers/infiniband/hw/qib/qib_uc.c > @@ -422,7 +422,6 @@ last_imm: > wc.pkey_index = 0; > wc.dlid_path_bits = 0; > wc.port_num = 0; > - wc.csum_ok = 0; > /* Signal completion event if the solicited bit is set. */ > qib_cq_enter(to_icq(qp->ibqp.recv_cq), &wc, > (ohdr->bth[0] & > diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c > b/drivers/infiniband/ulp/ipoib/ipoib_ib.c > index 4115be5..5c1bc99 100644 > --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c > +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c > @@ -296,7 +296,8 @@ static void ipoib_ib_handle_rx_wc(struct net_device *dev, > struct ib_wc *wc) > dev->stats.rx_bytes += skb->len; > > skb->dev = dev; > - if ((dev->features & NETIF_F_RXCSUM) && likely(wc->csum_ok)) > + if ((dev->features & NETIF_F_RXCSUM) && > + likely(wc->wc_flags & IB_WC_IP_CSUM_OK)) > skb->ip_summed = CHECKSUM_UNNECESSARY; > > napi_gro_receive(&priv->napi, skb); > diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h > index 01179b0..31996e3 100644 > --- a/include/rdma/ib_verbs.h > +++ b/include/rdma/ib_verbs.h > @@ -518,6 +518,7 @@ enum ib_wc_flags { > IB_WC_GRH = 1, > IB_WC_WITH_IMM = (1<<1), > IB_WC_WITH_INVALIDATE = (1<<2), > + IB_WC_IP_CSUM_OK = (1<<3), > }; > > struct ib_wc { > @@ -538,7 +539,6 @@ struct ib_wc { > u8 sl; > u8 dlid_path_bits; > u8 port_num; /* valid only for DR SMPs on > switches */ > - int csum_ok; > }; > > enum ib_cq_notify_flags { > -- > 1.7.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 -- 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
