diff options
Diffstat (limited to 'drivers/net/ethernet/netronome/nfp')
42 files changed, 198 insertions, 175 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/abm/cls.c b/drivers/net/ethernet/netronome/nfp/abm/cls.c index 23ebddfb9532..f7894c415a2f 100644 --- a/drivers/net/ethernet/netronome/nfp/abm/cls.c +++ b/drivers/net/ethernet/netronome/nfp/abm/cls.c @@ -203,7 +203,7 @@ nfp_abm_u32_knode_replace(struct nfp_abm_link *alink, } if (!match) { - match = kzalloc(sizeof(*match), GFP_KERNEL); + match = kzalloc_obj(*match); if (!match) return -ENOMEM; list_add(&match->list, &alink->dscp_map); diff --git a/drivers/net/ethernet/netronome/nfp/abm/main.c b/drivers/net/ethernet/netronome/nfp/abm/main.c index 5d3df28c648f..9b6bda523191 100644 --- a/drivers/net/ethernet/netronome/nfp/abm/main.c +++ b/drivers/net/ethernet/netronome/nfp/abm/main.c @@ -317,7 +317,7 @@ nfp_abm_vnic_alloc(struct nfp_app *app, struct nfp_net *nn, unsigned int id) struct nfp_abm_link *alink; int err; - alink = kzalloc(sizeof(*alink), GFP_KERNEL); + alink = kzalloc_obj(*alink); if (!alink) return -ENOMEM; nn->app_priv = alink; @@ -461,7 +461,7 @@ static int nfp_abm_init(struct nfp_app *app) return -EINVAL; } - abm = kzalloc(sizeof(*abm), GFP_KERNEL); + abm = kzalloc_obj(*abm); if (!abm) return -ENOMEM; app->priv = abm; diff --git a/drivers/net/ethernet/netronome/nfp/abm/qdisc.c b/drivers/net/ethernet/netronome/nfp/abm/qdisc.c index 2a5cc64227e9..900d416bcf8b 100644 --- a/drivers/net/ethernet/netronome/nfp/abm/qdisc.c +++ b/drivers/net/ethernet/netronome/nfp/abm/qdisc.c @@ -344,7 +344,7 @@ nfp_abm_qdisc_alloc(struct net_device *netdev, struct nfp_abm_link *alink, struct nfp_qdisc *qdisc; int err; - qdisc = kzalloc(sizeof(*qdisc), GFP_KERNEL); + qdisc = kzalloc_obj(*qdisc); if (!qdisc) return NULL; diff --git a/drivers/net/ethernet/netronome/nfp/bpf/jit.c b/drivers/net/ethernet/netronome/nfp/bpf/jit.c index 3a02eef58cc6..c9ab55abfd4c 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/jit.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/jit.c @@ -1731,7 +1731,7 @@ map_call_stack_common(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) /* We only have to reload LM0 if the key is not at start of stack */ lm_off = nfp_prog->stack_frame_depth; - lm_off += meta->arg2.reg.var_off.value + meta->arg2.reg.off; + lm_off += meta->arg2.reg.var_off.value; load_lm_ptr = meta->arg2.var_off || lm_off; /* Set LM0 to start of key */ @@ -2874,8 +2874,7 @@ mem_ldx(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, } if (meta->ptr.type == PTR_TO_STACK) - return mem_ldx_stack(nfp_prog, meta, size, - meta->ptr.off + meta->ptr.var_off.value); + return mem_ldx_stack(nfp_prog, meta, size, meta->ptr.var_off.value); if (meta->ptr.type == PTR_TO_MAP_VALUE) return mem_ldx_emem(nfp_prog, meta, size); @@ -2985,8 +2984,7 @@ mem_stx(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, return mem_stx_data(nfp_prog, meta, size); if (meta->ptr.type == PTR_TO_STACK) - return mem_stx_stack(nfp_prog, meta, size, - meta->ptr.off + meta->ptr.var_off.value); + return mem_stx_stack(nfp_prog, meta, size, meta->ptr.var_off.value); return -EOPNOTSUPP; } @@ -4153,9 +4151,9 @@ cross_mem_access(struct bpf_insn *ld, struct nfp_insn_meta *head_ld_meta, /* Canonicalize the offsets. Turn all of them against the original * base register. */ - head_ld_off = head_ld_meta->insn.off + head_ld_meta->ptr.off; - head_st_off = head_st_meta->insn.off + head_st_meta->ptr.off; - ld_off = ld->off + head_ld_meta->ptr.off; + head_ld_off = head_ld_meta->insn.off + head_ld_meta->ptr.var_off.value; + head_st_off = head_st_meta->insn.off + head_st_meta->ptr.var_off.value; + ld_off = ld->off + head_ld_meta->ptr.var_off.value; /* Ascending order cross. */ if (ld_off > head_ld_off && @@ -4326,7 +4324,7 @@ static void nfp_bpf_opt_pkt_cache(struct nfp_prog *nfp_prog) * support this. */ if (meta->ptr.id == range_ptr_id && - meta->ptr.off == range_ptr_off) { + meta->ptr.var_off.value == range_ptr_off) { s16 new_start = range_start; s16 end, off = insn->off; s16 new_end = range_end; @@ -4361,7 +4359,7 @@ start_new: range_node = meta; range_node->pkt_cache.do_init = true; range_ptr_id = range_node->ptr.id; - range_ptr_off = range_node->ptr.off; + range_ptr_off = range_node->ptr.var_off.value; range_start = insn->off; range_end = insn->off + BPF_LDST_BYTES(insn); } diff --git a/drivers/net/ethernet/netronome/nfp/bpf/main.c b/drivers/net/ethernet/netronome/nfp/bpf/main.c index f469950c7265..608c1bcaa641 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/main.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/main.c @@ -76,7 +76,7 @@ nfp_bpf_vnic_alloc(struct nfp_app *app, struct nfp_net *nn, unsigned int id) return -EINVAL; } - bv = kzalloc(sizeof(*bv), GFP_KERNEL); + bv = kzalloc_obj(*bv); if (!bv) return -ENOMEM; nn->app_priv = bv; @@ -458,7 +458,7 @@ static int nfp_bpf_init(struct nfp_app *app) struct nfp_app_bpf *bpf; int err; - bpf = kzalloc(sizeof(*bpf), GFP_KERNEL); + bpf = kzalloc_obj(*bpf); if (!bpf) return -ENOMEM; bpf->app = app; diff --git a/drivers/net/ethernet/netronome/nfp/bpf/offload.c b/drivers/net/ethernet/netronome/nfp/bpf/offload.c index c03558adda91..8a1773defd1b 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/offload.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/offload.c @@ -48,7 +48,7 @@ nfp_map_ptr_record(struct nfp_app_bpf *bpf, struct nfp_prog *nfp_prog, */ bpf_map_inc(map); - record = kmalloc(sizeof(*record), GFP_KERNEL); + record = kmalloc_obj(*record); if (!record) { err = -ENOMEM; goto err_map_put; @@ -123,9 +123,7 @@ nfp_map_ptrs_record(struct nfp_app_bpf *bpf, struct nfp_prog *nfp_prog, if (!cnt) goto out; - nfp_prog->map_records = kmalloc_array(cnt, - sizeof(nfp_prog->map_records[0]), - GFP_KERNEL); + nfp_prog->map_records = kmalloc_objs(nfp_prog->map_records[0], cnt); if (!nfp_prog->map_records) { err = -ENOMEM; goto out; @@ -155,7 +153,7 @@ nfp_prog_prepare(struct nfp_prog *nfp_prog, const struct bpf_insn *prog, unsigned int i; for (i = 0; i < cnt; i++) { - meta = kzalloc(sizeof(*meta), GFP_KERNEL); + meta = kzalloc_obj(*meta); if (!meta) return -ENOMEM; @@ -193,7 +191,7 @@ static int nfp_bpf_verifier_prep(struct bpf_prog *prog) struct nfp_prog *nfp_prog; int ret; - nfp_prog = kzalloc(sizeof(*nfp_prog), GFP_KERNEL); + nfp_prog = kzalloc_obj(*nfp_prog); if (!nfp_prog) return -ENOMEM; prog->aux->offload->dev_priv = nfp_prog; diff --git a/drivers/net/ethernet/netronome/nfp/bpf/verifier.c b/drivers/net/ethernet/netronome/nfp/bpf/verifier.c index 9d235c0ce46a..1caa87da72b5 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/verifier.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/verifier.c @@ -98,7 +98,7 @@ static bool nfp_bpf_map_update_value_ok(struct bpf_verifier_env *env) offmap = map_to_offmap(reg1->map_ptr); nfp_map = offmap->dev_priv; - off = reg3->off + reg3->var_off.value; + off = reg3->var_off.value; for (i = 0; i < offmap->map.value_size; i++) { struct bpf_stack_state *stack_entry; @@ -137,7 +137,7 @@ nfp_bpf_stack_arg_ok(const char *fname, struct bpf_verifier_env *env, return false; } - off = reg->var_off.value + reg->off; + off = reg->var_off.value; if (-off % 4) { pr_vlog(env, "%s: unaligned stack pointer %lld\n", fname, -off); return false; @@ -147,7 +147,7 @@ nfp_bpf_stack_arg_ok(const char *fname, struct bpf_verifier_env *env, if (!old_arg) return true; - old_off = old_arg->reg.var_off.value + old_arg->reg.off; + old_off = old_arg->reg.var_off.value; old_arg->var_off |= off != old_off; return true; @@ -358,8 +358,8 @@ nfp_bpf_check_stack_access(struct nfp_prog *nfp_prog, if (meta->ptr.type == NOT_INIT) return 0; - old_off = meta->ptr.off + meta->ptr.var_off.value; - new_off = reg->off + reg->var_off.value; + old_off = meta->ptr.var_off.value; + new_off = reg->var_off.value; meta->ptr_not_const |= old_off != new_off; @@ -428,7 +428,7 @@ nfp_bpf_map_mark_used(struct bpf_verifier_env *env, struct nfp_insn_meta *meta, return -EOPNOTSUPP; } - off = reg->var_off.value + meta->insn.off + reg->off; + off = reg->var_off.value + meta->insn.off; size = BPF_LDST_BYTES(&meta->insn); offmap = map_to_offmap(reg->map_ptr); nfp_map = offmap->dev_priv; @@ -561,10 +561,10 @@ nfp_bpf_check_alu(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, const struct bpf_reg_state *dreg = cur_regs(env) + meta->insn.dst_reg; - meta->umin_src = min(meta->umin_src, sreg->umin_value); - meta->umax_src = max(meta->umax_src, sreg->umax_value); - meta->umin_dst = min(meta->umin_dst, dreg->umin_value); - meta->umax_dst = max(meta->umax_dst, dreg->umax_value); + meta->umin_src = min(meta->umin_src, reg_umin(sreg)); + meta->umax_src = max(meta->umax_src, reg_umax(sreg)); + meta->umin_dst = min(meta->umin_dst, reg_umin(dreg)); + meta->umax_dst = max(meta->umax_dst, reg_umax(dreg)); /* NFP supports u16 and u32 multiplication. * @@ -770,8 +770,8 @@ int nfp_bpf_finalize(struct bpf_verifier_env *env) nfp_prog = env->prog->aux->offload->dev_priv; nfp_prog->subprog_cnt = env->subprog_cnt; - nfp_prog->subprog = kcalloc(nfp_prog->subprog_cnt, - sizeof(nfp_prog->subprog[0]), GFP_KERNEL); + nfp_prog->subprog = kzalloc_objs(nfp_prog->subprog[0], + nfp_prog->subprog_cnt); if (!nfp_prog->subprog) return -ENOMEM; diff --git a/drivers/net/ethernet/netronome/nfp/crypto/fw.h b/drivers/net/ethernet/netronome/nfp/crypto/fw.h index dcb67c2b5e5e..1e869599febb 100644 --- a/drivers/net/ethernet/netronome/nfp/crypto/fw.h +++ b/drivers/net/ethernet/netronome/nfp/crypto/fw.h @@ -32,16 +32,22 @@ struct nfp_crypto_req_reset { #define NFP_NET_TLS_VLAN_UNUSED 4095 struct nfp_crypto_req_add_front { - struct nfp_ccm_hdr hdr; - __be32 ep_id; - u8 resv[3]; - u8 opcode; - u8 key_len; - __be16 ipver_vlan __packed; - u8 l4_proto; + /* New members MUST be added within the struct_group() macro below. */ + struct_group_tagged(nfp_crypto_req_add_front_hdr, __hdr, + struct nfp_ccm_hdr hdr; + __be32 ep_id; + u8 resv[3]; + u8 opcode; + u8 key_len; + __be16 ipver_vlan __packed; + u8 l4_proto; + ); #define NFP_NET_TLS_NON_ADDR_KEY_LEN 8 u8 l3_addrs[]; }; +static_assert(offsetof(struct nfp_crypto_req_add_front, l3_addrs) == + sizeof(struct nfp_crypto_req_add_front_hdr), + "struct member likely outside of struct_group_tagged()"); struct nfp_crypto_req_add_back { __be16 src_port; @@ -55,14 +61,14 @@ struct nfp_crypto_req_add_back { }; struct nfp_crypto_req_add_v4 { - struct nfp_crypto_req_add_front front; + struct nfp_crypto_req_add_front_hdr front; __be32 src_ip; __be32 dst_ip; struct nfp_crypto_req_add_back back; }; struct nfp_crypto_req_add_v6 { - struct nfp_crypto_req_add_front front; + struct nfp_crypto_req_add_front_hdr front; __be32 src_ip[4]; __be32 dst_ip[4]; struct nfp_crypto_req_add_back back; diff --git a/drivers/net/ethernet/netronome/nfp/crypto/ipsec.c b/drivers/net/ethernet/netronome/nfp/crypto/ipsec.c index 9e7c285eaa6b..960d7513aa8d 100644 --- a/drivers/net/ethernet/netronome/nfp/crypto/ipsec.c +++ b/drivers/net/ethernet/netronome/nfp/crypto/ipsec.c @@ -625,11 +625,12 @@ int nfp_net_ipsec_rx(struct nfp_meta_parsed *meta, struct sk_buff *skb) xa_lock(&nn->xa_ipsec); x = xa_load(&nn->xa_ipsec, saidx); + if (x) + xfrm_state_hold(x); xa_unlock(&nn->xa_ipsec); if (!x) return -EINVAL; - xfrm_state_hold(x); sp->xvec[sp->len++] = x; sp->olen++; xo = xfrm_offload(skb); diff --git a/drivers/net/ethernet/netronome/nfp/crypto/tls.c b/drivers/net/ethernet/netronome/nfp/crypto/tls.c index f252ecdcd2cd..9983d7aa2b9c 100644 --- a/drivers/net/ethernet/netronome/nfp/crypto/tls.c +++ b/drivers/net/ethernet/netronome/nfp/crypto/tls.c @@ -180,7 +180,9 @@ nfp_net_tls_set_ipv4(struct nfp_net *nn, struct nfp_crypto_req_add_v4 *req, req->front.key_len += sizeof(__be32) * 2; if (direction == TLS_OFFLOAD_CTX_DIR_TX) { - nfp_net_tls_assign_conn_id(nn, &req->front); + nfp_net_tls_assign_conn_id(nn, + container_of(&req->front, + struct nfp_crypto_req_add_front, __hdr)); } else { req->src_ip = inet->inet_daddr; req->dst_ip = inet->inet_saddr; @@ -199,7 +201,9 @@ nfp_net_tls_set_ipv6(struct nfp_net *nn, struct nfp_crypto_req_add_v6 *req, req->front.key_len += sizeof(struct in6_addr) * 2; if (direction == TLS_OFFLOAD_CTX_DIR_TX) { - nfp_net_tls_assign_conn_id(nn, &req->front); + nfp_net_tls_assign_conn_id(nn, + container_of(&req->front, + struct nfp_crypto_req_add_front, __hdr)); } else { memcpy(req->src_ip, &sk->sk_v6_daddr, sizeof(req->src_ip)); memcpy(req->dst_ip, &np->saddr, sizeof(req->dst_ip)); diff --git a/drivers/net/ethernet/netronome/nfp/devlink_param.c b/drivers/net/ethernet/netronome/nfp/devlink_param.c index 85e3b19e6165..826527992e4a 100644 --- a/drivers/net/ethernet/netronome/nfp/devlink_param.c +++ b/drivers/net/ethernet/netronome/nfp/devlink_param.c @@ -170,7 +170,7 @@ exit_close_nsp: static int nfp_devlink_param_u8_validate(struct devlink *devlink, u32 id, - union devlink_param_value val, + union devlink_param_value *val, struct netlink_ext_ack *extack) { const struct nfp_devlink_param_u8_arg *arg; @@ -180,12 +180,12 @@ nfp_devlink_param_u8_validate(struct devlink *devlink, u32 id, arg = &nfp_devlink_u8_args[id]; - if (val.vu8 > arg->max_dl_val) { + if (val->vu8 > arg->max_dl_val) { NL_SET_ERR_MSG_MOD(extack, "parameter out of range"); return -EINVAL; } - if (val.vu8 == arg->invalid_dl_val) { + if (val->vu8 == arg->invalid_dl_val) { NL_SET_ERR_MSG_MOD(extack, "unknown/invalid value specified"); return -EINVAL; } diff --git a/drivers/net/ethernet/netronome/nfp/flower/action.c b/drivers/net/ethernet/netronome/nfp/flower/action.c index aca2a7417af3..ae2f8b31adfb 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/action.c +++ b/drivers/net/ethernet/netronome/nfp/flower/action.c @@ -470,7 +470,7 @@ nfp_fl_set_tun(struct nfp_app *app, struct nfp_fl_set_tun *set_tun, flow.daddr = ip_tun->key.u.ipv6.dst; flow.flowi4_proto = IPPROTO_UDP; - dst = ipv6_stub->ipv6_dst_lookup_flow(net, NULL, &flow, NULL); + dst = ip6_dst_lookup_flow(net, NULL, &flow, NULL); if (!IS_ERR(dst)) { set_tun->ttl = ip6_dst_hoplimit(dst); dst_release(dst); diff --git a/drivers/net/ethernet/netronome/nfp/flower/conntrack.c b/drivers/net/ethernet/netronome/nfp/flower/conntrack.c index 15180538b80a..c983e8b1799d 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/conntrack.c +++ b/drivers/net/ethernet/netronome/nfp/flower/conntrack.c @@ -1355,7 +1355,7 @@ nfp_fl_ct_zone_entry *get_nfp_zone_entry(struct nfp_flower_priv *priv, if (IS_ERR(zt) || zt->priv) return zt; } else { - zt = kzalloc(sizeof(*zt), GFP_KERNEL); + zt = kzalloc_obj(*zt); if (!zt) return ERR_PTR(-ENOMEM); } @@ -1487,7 +1487,7 @@ nfp_fl_ct_flow_entry *nfp_fl_ct_add_flow(struct nfp_fl_ct_zone_entry *zt, struct flow_action_entry *act; int err, i; - entry = kzalloc(sizeof(*entry), GFP_KERNEL); + entry = kzalloc_obj(*entry); if (!entry) return ERR_PTR(-ENOMEM); @@ -1501,7 +1501,7 @@ nfp_fl_ct_flow_entry *nfp_fl_ct_add_flow(struct nfp_fl_ct_zone_entry *zt, * to do a full copy instead of just a reference. */ if (is_nft) { - nft_match = kzalloc(sizeof(*nft_match), GFP_KERNEL); + nft_match = kzalloc_obj(*nft_match); if (!nft_match) { err = -ENOMEM; goto err_pre_ct_act; diff --git a/drivers/net/ethernet/netronome/nfp/flower/lag_conf.c b/drivers/net/ethernet/netronome/nfp/flower/lag_conf.c index 2c7bd6e80d99..eb436362d384 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/lag_conf.c +++ b/drivers/net/ethernet/netronome/nfp/flower/lag_conf.c @@ -119,7 +119,7 @@ nfp_fl_lag_group_create(struct nfp_fl_lag *lag, struct net_device *master) return ERR_PTR(id); } - group = kmalloc(sizeof(*group), GFP_KERNEL); + group = kmalloc_obj(*group); if (!group) { ida_free(&lag->ida_handle, id); return ERR_PTR(-ENOMEM); @@ -335,8 +335,7 @@ static void nfp_fl_lag_do_work(struct work_struct *work) continue; } - acti_netdevs = kmalloc_array(entry->slave_cnt, - sizeof(*acti_netdevs), GFP_KERNEL); + acti_netdevs = kmalloc_objs(*acti_netdevs, entry->slave_cnt); if (!acti_netdevs) { schedule_delayed_work(&lag->work, NFP_FL_LAG_DELAY); diff --git a/drivers/net/ethernet/netronome/nfp/flower/main.c b/drivers/net/ethernet/netronome/nfp/flower/main.c index 83eaa5ae3cd4..5c5fc640d65b 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/main.c +++ b/drivers/net/ethernet/netronome/nfp/flower/main.c @@ -182,7 +182,7 @@ nfp_flower_non_repr_priv_get(struct nfp_app *app, struct net_device *netdev) if (entry) goto inc_ref; - entry = kzalloc(sizeof(*entry), GFP_KERNEL); + entry = kzalloc_obj(*entry); if (!entry) return NULL; @@ -406,7 +406,7 @@ nfp_flower_spawn_vnic_reprs(struct nfp_app *app, goto err_reprs_clean; } - repr_priv = kzalloc(sizeof(*repr_priv), GFP_KERNEL); + repr_priv = kzalloc_obj(*repr_priv); if (!repr_priv) { err = -ENOMEM; nfp_repr_free(repr); @@ -524,7 +524,7 @@ nfp_flower_spawn_phy_reprs(struct nfp_app *app, struct nfp_flower_priv *priv) goto err_reprs_clean; } - repr_priv = kzalloc(sizeof(*repr_priv), GFP_KERNEL); + repr_priv = kzalloc_obj(*repr_priv); if (!repr_priv) { err = -ENOMEM; nfp_repr_free(repr); diff --git a/drivers/net/ethernet/netronome/nfp/flower/metadata.c b/drivers/net/ethernet/netronome/nfp/flower/metadata.c index dde60c4572fa..cc9a5aea6df0 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/metadata.c +++ b/drivers/net/ethernet/netronome/nfp/flower/metadata.c @@ -214,7 +214,7 @@ nfp_add_mask_table(struct nfp_app *app, char *mask_data, u32 mask_len) if (nfp_mask_alloc(app, &mask_id)) return -ENOENT; - mask_entry = kmalloc(sizeof(*mask_entry), GFP_KERNEL); + mask_entry = kmalloc_obj(*mask_entry); if (!mask_entry) { nfp_release_mask_id(app, mask_id); return -ENOMEM; @@ -324,7 +324,7 @@ int nfp_compile_flow_metadata(struct nfp_app *app, u32 cookie, nfp_flow->meta.host_cookie = cpu_to_be64(cookie); nfp_flow->ingress_dev = netdev; - ctx_entry = kzalloc(sizeof(*ctx_entry), GFP_KERNEL); + ctx_entry = kzalloc_obj(*ctx_entry); if (!ctx_entry) { err = -ENOMEM; goto err_release_stats; @@ -557,8 +557,8 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count, /* Init timestamps for mask id*/ priv->mask_ids.last_used = - kmalloc_array(NFP_FLOWER_MASK_ENTRY_RS, - sizeof(*priv->mask_ids.last_used), GFP_KERNEL); + kmalloc_objs(*priv->mask_ids.last_used, + NFP_FLOWER_MASK_ENTRY_RS); if (!priv->mask_ids.last_used) goto err_free_mask_id; @@ -573,8 +573,7 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count, stats_size = FIELD_PREP(NFP_FL_STAT_ID_STAT, host_ctx_count) | FIELD_PREP(NFP_FL_STAT_ID_MU_NUM, host_num_mems - 1); - priv->stats = kvmalloc_array(stats_size, sizeof(struct nfp_fl_stats), - GFP_KERNEL); + priv->stats = kvmalloc_objs(struct nfp_fl_stats, stats_size); if (!priv->stats) goto err_free_ring_buf; diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c b/drivers/net/ethernet/netronome/nfp/flower/offload.c index 46ffc2c20893..161190200dbd 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/offload.c +++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c @@ -549,7 +549,7 @@ nfp_flower_allocate_new(struct nfp_fl_key_ls *key_layer) { struct nfp_fl_payload *flow_pay; - flow_pay = kmalloc(sizeof(*flow_pay), GFP_KERNEL); + flow_pay = kmalloc_obj(*flow_pay); if (!flow_pay) return NULL; @@ -979,7 +979,7 @@ static int nfp_flower_link_flows(struct nfp_fl_payload *merge_flow, { struct nfp_fl_payload_link *link; - link = kmalloc(sizeof(*link), GFP_KERNEL); + link = kmalloc_obj(*link); if (!link) return -ENOMEM; @@ -1067,7 +1067,7 @@ int nfp_flower_merge_offloaded_flows(struct nfp_app *app, if (err) goto err_release_metadata; - merge_info = kmalloc(sizeof(*merge_info), GFP_KERNEL); + merge_info = kmalloc_obj(*merge_info); if (!merge_info) { err = -ENOMEM; goto err_remove_rhash; @@ -1354,7 +1354,7 @@ nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev, if (!offload_pre_check(flow)) return -EOPNOTSUPP; - key_layer = kmalloc(sizeof(*key_layer), GFP_KERNEL); + key_layer = kmalloc_obj(*key_layer); if (!key_layer) return -ENOMEM; @@ -1400,7 +1400,7 @@ nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev, if (priv->flower_ext_feats & NFP_FL_FEATS_DECAP_V2) { struct nfp_predt_entry *predt; - predt = kzalloc(sizeof(*predt), GFP_KERNEL); + predt = kzalloc_obj(*predt); if (!predt) { err = -ENOMEM; goto err_remove_rhash; @@ -1901,7 +1901,7 @@ nfp_flower_setup_indr_tc_block(struct net_device *netdev, struct Qdisc *sch, str &nfp_block_cb_list)) return -EBUSY; - cb_priv = kmalloc(sizeof(*cb_priv), GFP_KERNEL); + cb_priv = kmalloc_obj(*cb_priv); if (!cb_priv) return -ENOMEM; diff --git a/drivers/net/ethernet/netronome/nfp/flower/qos_conf.c b/drivers/net/ethernet/netronome/nfp/flower/qos_conf.c index e7180b4793c7..8c7d838920cb 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/qos_conf.c +++ b/drivers/net/ethernet/netronome/nfp/flower/qos_conf.c @@ -579,7 +579,7 @@ nfp_flower_add_meter_entry(struct nfp_app *app, u32 meter_id) if (meter_entry) return meter_entry; - meter_entry = kzalloc(sizeof(*meter_entry), GFP_KERNEL); + meter_entry = kzalloc_obj(*meter_entry); if (!meter_entry) return NULL; diff --git a/drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c b/drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c index 0d7d138d6e0d..ca30702f8878 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c +++ b/drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c @@ -650,7 +650,7 @@ static void nfp_tun_neigh_update(struct work_struct *work) flow6.daddr = *(struct in6_addr *)n->primary_key; if (!neigh_invalid) { struct dst_entry *dst; - /* Use ipv6_dst_lookup_flow to populate flow6->saddr + /* Use ip6_dst_lookup_flow to populate flow6->saddr * and other fields. This information is only needed * for new entries, lookup can be skipped when an entry * gets invalidated - as only the daddr is needed for @@ -696,7 +696,7 @@ nfp_tun_alloc_neigh_update_work(struct nfp_app *app, struct neighbour *n) { struct nfp_neigh_update_work *update_work; - update_work = kzalloc(sizeof(*update_work), GFP_ATOMIC); + update_work = kzalloc_obj(*update_work, GFP_ATOMIC); if (!update_work) return NULL; @@ -730,7 +730,7 @@ nfp_tun_neigh_event_handler(struct notifier_block *nb, unsigned long event, return NOTIFY_DONE; } #if IS_ENABLED(CONFIG_IPV6) - if (n->tbl != ipv6_stub->nd_tbl && n->tbl != &arp_tbl) + if (n->tbl != &nd_tbl && n->tbl != &arp_tbl) #else if (n->tbl != &arp_tbl) #endif @@ -815,8 +815,7 @@ void nfp_tunnel_request_route_v6(struct nfp_app *app, struct sk_buff *skb) flow.flowi6_proto = IPPROTO_UDP; #if IS_ENABLED(CONFIG_INET) && IS_ENABLED(CONFIG_IPV6) - dst = ipv6_stub->ipv6_dst_lookup_flow(dev_net(netdev), NULL, &flow, - NULL); + dst = ip6_dst_lookup_flow(dev_net(netdev), NULL, &flow, NULL); if (IS_ERR(dst)) goto fail_rcu_unlock; #else @@ -884,7 +883,7 @@ void nfp_tunnel_add_ipv4_off(struct nfp_app *app, __be32 ipv4) } } - entry = kmalloc(sizeof(*entry), GFP_KERNEL); + entry = kmalloc_obj(*entry); if (!entry) { mutex_unlock(&priv->tun.ipv4_off_lock); nfp_flower_cmsg_warn(app, "Mem error when offloading IP address.\n"); @@ -959,7 +958,7 @@ nfp_tunnel_add_ipv6_off(struct nfp_app *app, struct in6_addr *ipv6) return entry; } - entry = kmalloc(sizeof(*entry), GFP_KERNEL); + entry = kmalloc_obj(*entry); if (!entry) { mutex_unlock(&priv->tun.ipv6_off_lock); nfp_flower_cmsg_warn(app, "Mem error when offloading IP address.\n"); @@ -1117,7 +1116,7 @@ nfp_tunnel_add_shared_mac(struct nfp_app *app, struct net_device *netdev, } if (!entry) { - entry = kzalloc(sizeof(*entry), GFP_KERNEL); + entry = kzalloc_obj(*entry); if (!entry) { err = -ENOMEM; goto err_free_ida; diff --git a/drivers/net/ethernet/netronome/nfp/nfd3/rings.c b/drivers/net/ethernet/netronome/nfp/nfd3/rings.c index a03190c9313c..2560c4edee2e 100644 --- a/drivers/net/ethernet/netronome/nfp/nfd3/rings.c +++ b/drivers/net/ethernet/netronome/nfp/nfd3/rings.c @@ -140,8 +140,7 @@ nfp_nfd3_tx_ring_alloc(struct nfp_net_dp *dp, struct nfp_net_tx_ring *tx_ring) goto err_alloc; } - tx_ring->txbufs = kvcalloc(tx_ring->cnt, sizeof(*tx_ring->txbufs), - GFP_KERNEL); + tx_ring->txbufs = kvzalloc_objs(*tx_ring->txbufs, tx_ring->cnt); if (!tx_ring->txbufs) goto err_alloc; diff --git a/drivers/net/ethernet/netronome/nfp/nfdk/rings.c b/drivers/net/ethernet/netronome/nfp/nfdk/rings.c index fdb8144a63e0..10d162e7ae11 100644 --- a/drivers/net/ethernet/netronome/nfp/nfdk/rings.c +++ b/drivers/net/ethernet/netronome/nfp/nfdk/rings.c @@ -105,8 +105,7 @@ nfp_nfdk_tx_ring_alloc(struct nfp_net_dp *dp, struct nfp_net_tx_ring *tx_ring) goto err_alloc; } - tx_ring->ktxbufs = kvcalloc(tx_ring->cnt, sizeof(*tx_ring->ktxbufs), - GFP_KERNEL); + tx_ring->ktxbufs = kvzalloc_objs(*tx_ring->ktxbufs, tx_ring->cnt); if (!tx_ring->ktxbufs) goto err_alloc; diff --git a/drivers/net/ethernet/netronome/nfp/nfp_app.c b/drivers/net/ethernet/netronome/nfp/nfp_app.c index bb3f46c74f77..ad70c9c2e333 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_app.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_app.c @@ -239,7 +239,7 @@ struct nfp_app *nfp_app_alloc(struct nfp_pf *pf, enum nfp_app_id id) if (WARN_ON(!apps[id]->ctrl_msg_rx && apps[id]->ctrl_msg_rx_raw)) return ERR_PTR(-EINVAL); - app = kzalloc(sizeof(*app), GFP_KERNEL); + app = kzalloc_obj(*app); if (!app) return ERR_PTR(-ENOMEM); diff --git a/drivers/net/ethernet/netronome/nfp/nfp_main.c b/drivers/net/ethernet/netronome/nfp/nfp_main.c index 48390b2fd44d..5a9fb5bad405 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_main.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_main.c @@ -33,39 +33,40 @@ static const char nfp_driver_name[] = "nfp"; static const struct pci_device_id nfp_pci_device_ids[] = { - { PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NFP3800, - PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID, - PCI_ANY_ID, 0, NFP_DEV_NFP3800, + { + PCI_VDEVICE_SUB(NETRONOME, PCI_DEVICE_ID_NFP3800, + PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID), + .driver_data = NFP_DEV_NFP3800, + }, { + PCI_VDEVICE_SUB(NETRONOME, PCI_DEVICE_ID_NFP4000, + PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID), + .driver_data = NFP_DEV_NFP6000, + }, { + PCI_VDEVICE_SUB(NETRONOME, PCI_DEVICE_ID_NFP5000, + PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID), + .driver_data = NFP_DEV_NFP6000, + }, { + PCI_VDEVICE_SUB(NETRONOME, PCI_DEVICE_ID_NFP6000, + PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID), + .driver_data = NFP_DEV_NFP6000, + }, { + PCI_VDEVICE_SUB(CORIGINE, PCI_DEVICE_ID_NFP3800, + PCI_VENDOR_ID_CORIGINE, PCI_ANY_ID), + .driver_data = NFP_DEV_NFP3800, + }, { + PCI_VDEVICE_SUB(CORIGINE, PCI_DEVICE_ID_NFP4000, + PCI_VENDOR_ID_CORIGINE, PCI_ANY_ID), + .driver_data = NFP_DEV_NFP6000, + }, { + PCI_VDEVICE_SUB(CORIGINE, PCI_DEVICE_ID_NFP5000, + PCI_VENDOR_ID_CORIGINE, PCI_ANY_ID), + .driver_data = NFP_DEV_NFP6000, + }, { + PCI_VDEVICE_SUB(CORIGINE, PCI_DEVICE_ID_NFP6000, + PCI_VENDOR_ID_CORIGINE, PCI_ANY_ID), + .driver_data = NFP_DEV_NFP6000, }, - { PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NFP4000, - PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID, - PCI_ANY_ID, 0, NFP_DEV_NFP6000, - }, - { PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NFP5000, - PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID, - PCI_ANY_ID, 0, NFP_DEV_NFP6000, - }, - { PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NFP6000, - PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID, - PCI_ANY_ID, 0, NFP_DEV_NFP6000, - }, - { PCI_VENDOR_ID_CORIGINE, PCI_DEVICE_ID_NFP3800, - PCI_VENDOR_ID_CORIGINE, PCI_ANY_ID, - PCI_ANY_ID, 0, NFP_DEV_NFP3800, - }, - { PCI_VENDOR_ID_CORIGINE, PCI_DEVICE_ID_NFP4000, - PCI_VENDOR_ID_CORIGINE, PCI_ANY_ID, - PCI_ANY_ID, 0, NFP_DEV_NFP6000, - }, - { PCI_VENDOR_ID_CORIGINE, PCI_DEVICE_ID_NFP5000, - PCI_VENDOR_ID_CORIGINE, PCI_ANY_ID, - PCI_ANY_ID, 0, NFP_DEV_NFP6000, - }, - { PCI_VENDOR_ID_CORIGINE, PCI_DEVICE_ID_NFP6000, - PCI_VENDOR_ID_CORIGINE, PCI_ANY_ID, - PCI_ANY_ID, 0, NFP_DEV_NFP6000, - }, - { 0, } /* Required last entry. */ + { } /* Required last entry. */ }; MODULE_DEVICE_TABLE(pci, nfp_pci_device_ids); diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c index 9ef72f294117..7928e76da723 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c @@ -1554,7 +1554,7 @@ struct nfp_net_dp *nfp_net_clone_dp(struct nfp_net *nn) { struct nfp_net_dp *new; - new = kmalloc(sizeof(*new), GFP_KERNEL); + new = kmalloc_obj(*new); if (!new) return NULL; @@ -2537,8 +2537,7 @@ nfp_net_alloc(struct pci_dev *pdev, const struct nfp_dev_info *dev_info, nn->dp.num_r_vecs, num_online_cpus()); nn->max_r_vecs = nn->dp.num_r_vecs; - nn->dp.xsk_pools = kcalloc(nn->max_r_vecs, sizeof(*nn->dp.xsk_pools), - GFP_KERNEL); + nn->dp.xsk_pools = kzalloc_objs(*nn->dp.xsk_pools, nn->max_r_vecs); if (!nn->dp.xsk_pools) { err = -ENOMEM; goto err_free_nn; diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_dp.c b/drivers/net/ethernet/netronome/nfp/nfp_net_dp.c index 550df83b798c..3e8222886fe4 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_dp.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_dp.c @@ -184,8 +184,7 @@ int nfp_net_tx_rings_prepare(struct nfp_net *nn, struct nfp_net_dp *dp) { unsigned int r; - dp->tx_rings = kcalloc(dp->num_tx_rings, sizeof(*dp->tx_rings), - GFP_KERNEL); + dp->tx_rings = kzalloc_objs(*dp->tx_rings, dp->num_tx_rings); if (!dp->tx_rings) return -ENOMEM; @@ -340,8 +339,7 @@ int nfp_net_rx_rings_prepare(struct nfp_net *nn, struct nfp_net_dp *dp) { unsigned int r; - dp->rx_rings = kcalloc(dp->num_rx_rings, sizeof(*dp->rx_rings), - GFP_KERNEL); + dp->rx_rings = kzalloc_objs(*dp->rx_rings, dp->num_rx_rings); if (!dp->rx_rings) return -ENOMEM; diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c index 16c828dd5c1a..4e83637715e0 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c @@ -713,7 +713,7 @@ static int nfp_test_nsp(struct net_device *netdev) goto exit_close_nsp; } - nspi = kzalloc(sizeof(*nspi), GFP_KERNEL); + nspi = kzalloc_obj(*nspi); if (!nspi) { err = -ENOMEM; goto exit_close_nsp; @@ -1421,7 +1421,8 @@ static int nfp_net_get_fs_rule(struct nfp_net *nn, struct ethtool_rxnfc *cmd) return -ENOENT; } -static int nfp_net_get_fs_loc(struct nfp_net *nn, u32 *rule_locs) +static int nfp_net_get_fs_loc(struct nfp_net *nn, struct ethtool_rxnfc *cmd, + u32 *rule_locs) { struct nfp_fs_entry *entry; u32 count = 0; @@ -1429,21 +1430,29 @@ static int nfp_net_get_fs_loc(struct nfp_net *nn, u32 *rule_locs) if (!(nn->cap_w1 & NFP_NET_CFG_CTRL_FLOW_STEER)) return -EOPNOTSUPP; - list_for_each_entry(entry, &nn->fs.list, node) + list_for_each_entry(entry, &nn->fs.list, node) { + if (count == cmd->rule_cnt) + return -EMSGSIZE; rule_locs[count++] = entry->loc; + } + cmd->rule_cnt = count; return 0; } +static u32 nfp_net_get_rx_ring_count(struct net_device *netdev) +{ + struct nfp_net *nn = netdev_priv(netdev); + + return nn->dp.num_rx_rings; +} + static int nfp_net_get_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd, u32 *rule_locs) { struct nfp_net *nn = netdev_priv(netdev); switch (cmd->cmd) { - case ETHTOOL_GRXRINGS: - cmd->data = nn->dp.num_rx_rings; - return 0; case ETHTOOL_GRXCLSRLCNT: cmd->rule_cnt = nn->fs.count; return 0; @@ -1451,7 +1460,7 @@ static int nfp_net_get_rxnfc(struct net_device *netdev, return nfp_net_get_fs_rule(nn, cmd); case ETHTOOL_GRXCLSRLALL: cmd->data = NFP_FS_MAX_ENTRY; - return nfp_net_get_fs_loc(nn, rule_locs); + return nfp_net_get_fs_loc(nn, cmd, rule_locs); default: return -EOPNOTSUPP; } @@ -1672,7 +1681,7 @@ static int nfp_net_fs_add(struct nfp_net *nn, struct ethtool_rxnfc *cmd) if (unsupp_mask) return -EOPNOTSUPP; - new = kzalloc(sizeof(*new), GFP_KERNEL); + new = kzalloc_obj(*new); if (!new) return -ENOMEM; @@ -1694,8 +1703,14 @@ static int nfp_net_fs_add(struct nfp_net *nn, struct ethtool_rxnfc *cmd) nn->fs.count--; err = nfp_net_fs_add_hw(nn, new); - if (err) + if (err) { + /* mbox broken, adding the old rule back will + * likely also fail. + */ + list_del(&entry->node); + kfree(entry); goto err; + } nn->fs.count++; list_replace(&entry->node, &new->node); @@ -2501,6 +2516,7 @@ static const struct ethtool_ops nfp_net_ethtool_ops = { .get_sset_count = nfp_net_get_sset_count, .get_rxnfc = nfp_net_get_rxnfc, .set_rxnfc = nfp_net_set_rxnfc, + .get_rx_ring_count = nfp_net_get_rx_ring_count, .get_rxfh_indir_size = nfp_net_get_rxfh_indir_size, .get_rxfh_key_size = nfp_net_get_rxfh_key_size, .get_rxfh = nfp_net_get_rxfh, diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c index cbe4972ba104..06cfabfaa0f7 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c @@ -229,8 +229,7 @@ static int nfp_net_pf_alloc_irqs(struct nfp_pf *pf) wanted_irqs = 0; list_for_each_entry(nn, &pf->vnics, vnic_list) wanted_irqs += NFP_NET_NON_Q_VECTORS + nn->dp.num_r_vecs; - pf->irq_entries = kcalloc(wanted_irqs, sizeof(*pf->irq_entries), - GFP_KERNEL); + pf->irq_entries = kzalloc_objs(*pf->irq_entries, wanted_irqs); if (!pf->irq_entries) return -ENOMEM; diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c index 227e7a5d712e..6f9f67a31d2f 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c @@ -500,7 +500,7 @@ struct nfp_reprs *nfp_reprs_alloc(unsigned int num_reprs) { struct nfp_reprs *reprs; - reprs = kzalloc(struct_size(reprs, reprs, num_reprs), GFP_KERNEL); + reprs = kzalloc_flex(*reprs, reprs, num_reprs); if (!reprs) return NULL; reprs->num_reprs = num_reprs; diff --git a/drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c b/drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c index e19bb0150cb5..6c8f3321048a 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c @@ -38,23 +38,24 @@ struct nfp_net_vf { static const char nfp_net_driver_name[] = "nfp_netvf"; static const struct pci_device_id nfp_netvf_pci_device_ids[] = { - { PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NFP3800_VF, - PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID, - PCI_ANY_ID, 0, NFP_DEV_NFP3800_VF, + { + PCI_VDEVICE_SUB(NETRONOME, PCI_DEVICE_ID_NFP3800_VF, + PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID), + .driver_data = NFP_DEV_NFP3800_VF, + }, { + PCI_VDEVICE_SUB(NETRONOME, PCI_DEVICE_ID_NFP6000_VF, + PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID), + .driver_data = NFP_DEV_NFP6000_VF, + }, { + PCI_VDEVICE_SUB(CORIGINE, PCI_DEVICE_ID_NFP3800_VF, + PCI_VENDOR_ID_CORIGINE, PCI_ANY_ID), + .driver_data = NFP_DEV_NFP3800_VF, + }, { + PCI_VDEVICE_SUB(CORIGINE, PCI_DEVICE_ID_NFP6000_VF, + PCI_VENDOR_ID_CORIGINE, PCI_ANY_ID), + .driver_data = NFP_DEV_NFP6000_VF, }, - { PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NFP6000_VF, - PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID, - PCI_ANY_ID, 0, NFP_DEV_NFP6000_VF, - }, - { PCI_VENDOR_ID_CORIGINE, PCI_DEVICE_ID_NFP3800_VF, - PCI_VENDOR_ID_CORIGINE, PCI_ANY_ID, - PCI_ANY_ID, 0, NFP_DEV_NFP3800_VF, - }, - { PCI_VENDOR_ID_CORIGINE, PCI_DEVICE_ID_NFP6000_VF, - PCI_VENDOR_ID_CORIGINE, PCI_ANY_ID, - PCI_ANY_ID, 0, NFP_DEV_NFP6000_VF, - }, - { 0, } /* Required last entry. */ + { } /* Required last entry. */ }; MODULE_DEVICE_TABLE(pci, nfp_netvf_pci_device_ids); @@ -93,7 +94,7 @@ static int nfp_netvf_pci_probe(struct pci_dev *pdev, dev_info = &nfp_dev_info[pci_id->driver_data]; - vf = kzalloc(sizeof(*vf), GFP_KERNEL); + vf = kzalloc_obj(*vf); if (!vf) return -ENOMEM; pci_set_drvdata(pdev, vf); diff --git a/drivers/net/ethernet/netronome/nfp/nfp_port.c b/drivers/net/ethernet/netronome/nfp/nfp_port.c index 54640bcb70fb..7f5de6bd7218 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_port.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_port.c @@ -203,7 +203,7 @@ nfp_port_alloc(struct nfp_app *app, enum nfp_port_type type, { struct nfp_port *port; - port = kzalloc(sizeof(*port), GFP_KERNEL); + port = kzalloc_obj(*port); if (!port) return ERR_PTR(-ENOMEM); diff --git a/drivers/net/ethernet/netronome/nfp/nfp_shared_buf.c b/drivers/net/ethernet/netronome/nfp/nfp_shared_buf.c index ea2e3f829aba..4ca692727b11 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_shared_buf.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_shared_buf.c @@ -99,8 +99,7 @@ int nfp_shared_buf_register(struct nfp_pf *pf) entry_sz = nfp_cpp_area_size(sb_desc_area) / num_entries; - pf->shared_bufs = kmalloc_array(num_entries, sizeof(pf->shared_bufs[0]), - GFP_KERNEL); + pf->shared_bufs = kmalloc_objs(pf->shared_bufs[0], num_entries); if (!pf->shared_bufs) { err = -ENOMEM; goto err_release_area; diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c index 7c2200b49ce4..0bc9e517c4fd 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c @@ -1320,7 +1320,7 @@ nfp_cpp_from_nfp6000_pcie(struct pci_dev *pdev, const struct nfp_dev_info *dev_i dev_info->chip_names); pcie_print_link_status(pdev); - nfp = kzalloc(sizeof(*nfp), GFP_KERNEL); + nfp = kzalloc_obj(*nfp); if (!nfp) { err = -ENOMEM; goto err_ret; diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c index 669f9f8fb507..85d3554a79a9 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c @@ -802,7 +802,7 @@ int nfp_cpp_area_cache_add(struct nfp_cpp *cpp, size_t size) if (!area) return -ENOMEM; - cache = kzalloc(sizeof(*cache), GFP_KERNEL); + cache = kzalloc_obj(*cache); if (!cache) { nfp_cpp_area_free(area); return -ENOMEM; @@ -1170,7 +1170,7 @@ nfp_cpp_from_operations(const struct nfp_cpp_operations *ops, u32 xpbaddr; size_t tgt; - cpp = kzalloc(sizeof(*cpp), GFP_KERNEL); + cpp = kzalloc_obj(*cpp); if (!cpp) { err = -ENOMEM; goto err_malloc; diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mip.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mip.c index 79e17943519e..aa787c502913 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mip.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mip.c @@ -101,7 +101,7 @@ const struct nfp_mip *nfp_mip_open(struct nfp_cpp *cpp) struct nfp_mip *mip; int err; - mip = kmalloc(sizeof(*mip), GFP_KERNEL); + mip = kmalloc_obj(*mip); if (!mip) return NULL; diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mutex.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mutex.c index 7bc17b94ac60..f079284c0ecd 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mutex.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mutex.c @@ -140,7 +140,7 @@ struct nfp_cpp_mutex *nfp_cpp_mutex_alloc(struct nfp_cpp *cpp, int target, if (tmp != key) return NULL; - mutex = kzalloc(sizeof(*mutex), GFP_KERNEL); + mutex = kzalloc_obj(*mutex); if (!mutex) return NULL; diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nffw.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nffw.c index e2e5fd003ad6..69c2fb9bea48 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nffw.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nffw.c @@ -163,7 +163,7 @@ struct nfp_nffw_info *nfp_nffw_info_open(struct nfp_cpp *cpp) u32 info_ver; int err; - state = kzalloc(sizeof(*state), GFP_KERNEL); + state = kzalloc_obj(*state); if (!state) return ERR_PTR(-ENOMEM); diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c index 0bd6477292a6..5a1aadf6e17e 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c @@ -280,7 +280,7 @@ struct nfp_nsp *nfp_nsp_open(struct nfp_cpp *cpp) if (IS_ERR(res)) return ERR_CAST(res); - state = kzalloc(sizeof(*state), GFP_KERNEL); + state = kzalloc_obj(*state); if (!state) { nfp_resource_release(res); return ERR_PTR(-ENOMEM); @@ -514,7 +514,7 @@ nfp_nsp_command_buf_dma_sg(struct nfp_nsp *nsp, dma_size = BIT_ULL(dma_order); nseg = DIV_ROUND_UP(max_size, chunk_size); - chunks = kcalloc(nseg, sizeof(*chunks), GFP_KERNEL); + chunks = kzalloc_objs(*chunks, nseg); if (!chunks) return -ENOMEM; diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_cmds.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_cmds.c index 0997d127144f..d39c8f282199 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_cmds.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_cmds.c @@ -29,7 +29,7 @@ struct nfp_nsp_identify *__nfp_nsp_identify(struct nfp_nsp *nsp) if (nfp_nsp_get_abi_ver_minor(nsp) < 15) return NULL; - ni = kzalloc(sizeof(*ni), GFP_KERNEL); + ni = kzalloc_obj(*ni); if (!ni) return NULL; @@ -40,7 +40,7 @@ struct nfp_nsp_identify *__nfp_nsp_identify(struct nfp_nsp *nsp) goto exit_free; } - nspi = kzalloc(sizeof(*nspi), GFP_KERNEL); + nspi = kzalloc_obj(*nspi); if (!nspi) goto exit_free; diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c index 5cfddc9a5d87..b0c799fb3013 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c @@ -319,7 +319,7 @@ __nfp_eth_read_ports(struct nfp_cpp *cpp, struct nfp_nsp *nsp) goto err; } - table = kzalloc(struct_size(table, ports, cnt), GFP_KERNEL); + table = kzalloc_flex(*table, ports, cnt); if (!table) goto err; diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c index 279ea0b56955..237300b82b91 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c @@ -96,6 +96,9 @@ static int nfp_cpp_resource_find(struct nfp_cpp *cpp, struct nfp_resource *res) res->mutex = nfp_cpp_mutex_alloc(cpp, NFP_RESOURCE_TBL_TARGET, addr, key); + if (!res->mutex) + return -ENOMEM; + res->cpp_id = NFP_CPP_ID(entry.region.cpp_target, entry.region.cpp_action, entry.region.cpp_token); @@ -155,7 +158,7 @@ nfp_resource_acquire(struct nfp_cpp *cpp, const char *name) struct nfp_resource *res; int err; - res = kzalloc(sizeof(*res), GFP_KERNEL); + res = kzalloc_obj(*res); if (!res) return ERR_PTR(-ENOMEM); diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_target.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_target.c index 79470f198a62..9cf19446657c 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_target.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_target.c @@ -435,12 +435,17 @@ static int nfp_encode_basic_qdr(u64 addr, int dest_island, int cpp_tgt, /* Full Island ID and channel bits overlap? */ ret = nfp_decode_basic(addr, &v, cpp_tgt, mode, addr40, isld1, isld0); - if (ret) + if (ret) { + pr_warn("%s: decode dest_island failed: %d\n", __func__, ret); return ret; + } /* The current address won't go where expected? */ - if (dest_island != -1 && dest_island != v) + if (dest_island != -1 && dest_island != v) { + pr_warn("%s: dest_island mismatch: current (%d) != decoded (%d)\n", + __func__, dest_island, v); return -EINVAL; + } /* If dest_island was -1, we don't care where it goes. */ return 0; @@ -493,7 +498,7 @@ static int nfp_encode_basic(u64 *addr, int dest_island, int cpp_tgt, * the address but we can verify if the existing * contents will point to a valid island. */ - return nfp_encode_basic_qdr(*addr, cpp_tgt, dest_island, + return nfp_encode_basic_qdr(*addr, dest_island, cpp_tgt, mode, addr40, isld1, isld0); iid_lsb = addr40 ? 34 : 26; @@ -504,7 +509,7 @@ static int nfp_encode_basic(u64 *addr, int dest_island, int cpp_tgt, return 0; case 1: if (cpp_tgt == NFP_CPP_TARGET_QDR && !addr40) - return nfp_encode_basic_qdr(*addr, cpp_tgt, dest_island, + return nfp_encode_basic_qdr(*addr, dest_island, cpp_tgt, mode, addr40, isld1, isld0); idx_lsb = addr40 ? 39 : 31; @@ -530,7 +535,7 @@ static int nfp_encode_basic(u64 *addr, int dest_island, int cpp_tgt, * be set before hand and with them select an island. * So we need to confirm that it's at least plausible. */ - return nfp_encode_basic_qdr(*addr, cpp_tgt, dest_island, + return nfp_encode_basic_qdr(*addr, dest_island, cpp_tgt, mode, addr40, isld1, isld0); /* Make sure we compare against isldN values @@ -551,7 +556,7 @@ static int nfp_encode_basic(u64 *addr, int dest_island, int cpp_tgt, * iid<1> = addr<30> = channel<0> * channel<1> = addr<31> = Index */ - return nfp_encode_basic_qdr(*addr, cpp_tgt, dest_island, + return nfp_encode_basic_qdr(*addr, dest_island, cpp_tgt, mode, addr40, isld1, isld0); isld[0] &= ~3; diff --git a/drivers/net/ethernet/netronome/nfp/nic/main.c b/drivers/net/ethernet/netronome/nfp/nic/main.c index 9dd5afe37f6e..f7a4d76899c2 100644 --- a/drivers/net/ethernet/netronome/nfp/nic/main.c +++ b/drivers/net/ethernet/netronome/nfp/nic/main.c @@ -51,7 +51,7 @@ static int nfp_nic_vnic_alloc(struct nfp_app *app, struct nfp_net *nn, return err; if (sizeof(*app_pri)) { - nn->app_priv = kzalloc(sizeof(*app_pri), GFP_KERNEL); + nn->app_priv = kzalloc_obj(*app_pri); if (!nn->app_priv) return -ENOMEM; } |
