4141#include <linux/pci.h>
4242#include <linux/netdevice.h>
4343#include <linux/if_ether.h>
44+ #include <net/addrconf.h>
4445
4546#include <rdma/ib_verbs.h>
4647#include <rdma/ib_user_verbs.h>
@@ -130,10 +131,10 @@ int bnxt_re_query_device(struct ib_device *ibdev,
130131 memcpy (& ib_attr -> fw_ver , dev_attr -> fw_ver ,
131132 min (sizeof (dev_attr -> fw_ver ),
132133 sizeof (ib_attr -> fw_ver )));
133- bnxt_qplib_get_guid ( rdev -> netdev -> dev_addr ,
134- ( u8 * ) & ib_attr -> sys_image_guid );
134+ addrconf_addr_eui48 (( u8 * ) & ib_attr -> sys_image_guid ,
135+ rdev -> netdev -> dev_addr );
135136 ib_attr -> max_mr_size = BNXT_RE_MAX_MR_SIZE ;
136- ib_attr -> page_size_cap = BNXT_RE_PAGE_SIZE_4K | BNXT_RE_PAGE_SIZE_2M ;
137+ ib_attr -> page_size_cap = BNXT_RE_PAGE_SIZE_SUPPORTED ;
137138
138139 ib_attr -> vendor_id = rdev -> en_dev -> pdev -> vendor ;
139140 ib_attr -> vendor_part_id = rdev -> en_dev -> pdev -> device ;
@@ -261,13 +262,12 @@ void bnxt_re_query_fw_str(struct ib_device *ibdev, char *str)
261262int bnxt_re_query_pkey (struct ib_device * ibdev , u32 port_num ,
262263 u16 index , u16 * pkey )
263264{
264- struct bnxt_re_dev * rdev = to_bnxt_re_dev (ibdev , ibdev );
265+ if (index > 0 )
266+ return - EINVAL ;
265267
266- /* Ignore port_num */
268+ * pkey = IB_DEFAULT_PKEY_FULL ;
267269
268- memset (pkey , 0 , sizeof (* pkey ));
269- return bnxt_qplib_get_pkey (& rdev -> qplib_res ,
270- & rdev -> qplib_res .pkey_tbl , index , pkey );
270+ return 0 ;
271271}
272272
273273int bnxt_re_query_gid (struct ib_device * ibdev , u32 port_num ,
@@ -707,11 +707,6 @@ int bnxt_re_create_ah(struct ib_ah *ib_ah, struct rdma_ah_init_attr *init_attr,
707707 return 0 ;
708708}
709709
710- int bnxt_re_modify_ah (struct ib_ah * ib_ah , struct rdma_ah_attr * ah_attr )
711- {
712- return 0 ;
713- }
714-
715710int bnxt_re_query_ah (struct ib_ah * ib_ah , struct rdma_ah_attr * ah_attr )
716711{
717712 struct bnxt_re_ah * ah = container_of (ib_ah , struct bnxt_re_ah , ib_ah );
@@ -1319,15 +1314,15 @@ static int bnxt_re_init_qp_attr(struct bnxt_re_qp *qp, struct bnxt_re_pd *pd,
13191314static int bnxt_re_create_shadow_gsi (struct bnxt_re_qp * qp ,
13201315 struct bnxt_re_pd * pd )
13211316{
1322- struct bnxt_re_sqp_entries * sqp_tbl = NULL ;
1317+ struct bnxt_re_sqp_entries * sqp_tbl ;
13231318 struct bnxt_re_dev * rdev ;
13241319 struct bnxt_re_qp * sqp ;
13251320 struct bnxt_re_ah * sah ;
13261321 int rc = 0 ;
13271322
13281323 rdev = qp -> rdev ;
13291324 /* Create a shadow QP to handle the QP1 traffic */
1330- sqp_tbl = kzalloc ( sizeof (* sqp_tbl ) * BNXT_RE_MAX_GSI_SQP_ENTRIES ,
1325+ sqp_tbl = kcalloc ( BNXT_RE_MAX_GSI_SQP_ENTRIES , sizeof (* sqp_tbl ),
13311326 GFP_KERNEL );
13321327 if (!sqp_tbl )
13331328 return - ENOMEM ;
@@ -2488,7 +2483,8 @@ static int bnxt_re_build_reg_wqe(const struct ib_reg_wr *wr,
24882483
24892484 wqe -> frmr .l_key = wr -> key ;
24902485 wqe -> frmr .length = wr -> mr -> length ;
2491- wqe -> frmr .pbl_pg_sz_log = (wr -> mr -> page_size >> PAGE_SHIFT_4K ) - 1 ;
2486+ wqe -> frmr .pbl_pg_sz_log = ilog2 (PAGE_SIZE >> PAGE_SHIFT_4K );
2487+ wqe -> frmr .pg_sz_log = ilog2 (wr -> mr -> page_size >> PAGE_SHIFT_4K );
24922488 wqe -> frmr .va = wr -> mr -> iova ;
24932489 return 0 ;
24942490}
@@ -3364,8 +3360,11 @@ static void bnxt_re_process_res_ud_wc(struct bnxt_re_qp *qp,
33643360 struct ib_wc * wc ,
33653361 struct bnxt_qplib_cqe * cqe )
33663362{
3363+ struct bnxt_re_dev * rdev ;
3364+ u16 vlan_id = 0 ;
33673365 u8 nw_type ;
33683366
3367+ rdev = qp -> rdev ;
33693368 wc -> opcode = IB_WC_RECV ;
33703369 wc -> status = __rc_to_ib_wc_status (cqe -> status );
33713370
@@ -3377,9 +3376,12 @@ static void bnxt_re_process_res_ud_wc(struct bnxt_re_qp *qp,
33773376 memcpy (wc -> smac , cqe -> smac , ETH_ALEN );
33783377 wc -> wc_flags |= IB_WC_WITH_SMAC ;
33793378 if (cqe -> flags & CQ_RES_UD_FLAGS_META_FORMAT_VLAN ) {
3380- wc -> vlan_id = (cqe -> cfa_meta & 0xFFF );
3381- if (wc -> vlan_id < 0x1000 )
3382- wc -> wc_flags |= IB_WC_WITH_VLAN ;
3379+ vlan_id = (cqe -> cfa_meta & 0xFFF );
3380+ }
3381+ /* Mark only if vlan_id is non zero */
3382+ if (vlan_id && bnxt_re_check_if_vlan_valid (rdev , vlan_id )) {
3383+ wc -> vlan_id = vlan_id ;
3384+ wc -> wc_flags |= IB_WC_WITH_VLAN ;
33833385 }
33843386 nw_type = (cqe -> flags & CQ_RES_UD_FLAGS_ROCE_IP_VER_MASK ) >>
33853387 CQ_RES_UD_FLAGS_ROCE_IP_VER_SFT ;
@@ -3808,7 +3810,7 @@ struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *ib_pd, u64 start, u64 length,
38083810
38093811 mr -> qplib_mr .va = virt_addr ;
38103812 page_size = ib_umem_find_best_pgsz (
3811- umem , BNXT_RE_PAGE_SIZE_4K | BNXT_RE_PAGE_SIZE_2M , virt_addr );
3813+ umem , BNXT_RE_PAGE_SIZE_SUPPORTED , virt_addr );
38123814 if (!page_size ) {
38133815 ibdev_err (& rdev -> ibdev , "umem page size unsupported!" );
38143816 rc = - EFAULT ;
0 commit comments