On Wed, 14 Apr 2021 22:45:19 -0700 Dexuan Cui <decui@xxxxxxxxxxxxx> wrote: > +static int mana_query_vport_cfg(struct mana_port_context *apc, u32 vport_index, > + u32 *max_sq, u32 *max_rq, u32 *num_indir_entry) > +{ > + struct mana_query_vport_cfg_resp resp = {}; > + struct mana_query_vport_cfg_req req = {}; > + int err; > + > + mana_gd_init_req_hdr(&req.hdr, MANA_QUERY_VPORT_CONFIG, > + sizeof(req), sizeof(resp)); > + > + req.vport_index = vport_index; > + > + err = mana_send_request(apc->ac, &req, sizeof(req), &resp, > + sizeof(resp)); > + if (err) > + return err; > + > + err = mana_verify_resp_hdr(&resp.hdr, MANA_QUERY_VPORT_CONFIG, > + sizeof(resp)); > + if (err) > + return err; > + > + if (resp.hdr.status) > + return -EPROTO; > + > + *max_sq = resp.max_num_sq; > + *max_rq = resp.max_num_rq; > + *num_indir_entry = resp.num_indirection_ent; > + > + apc->port_handle = resp.vport; > + memcpy(apc->mac_addr, resp.mac_addr, ETH_ALEN); You could use ether_addr_copy here. > +int mana_do_attach(struct net_device *ndev, enum mana_attach_caller caller) > +{ > + struct mana_port_context *apc = netdev_priv(ndev); > + struct gdma_dev *gd = apc->ac->gdma_dev; > + u32 max_txq, max_rxq, max_queues; > + int port_idx = apc->port_idx; > + u32 num_indirect_entries; > + int err; > + > + if (caller == MANA_OPEN) > + goto start_open; > + > + err = mana_init_port_context(apc); > + if (err) > + return err; > + > + err = mana_query_vport_cfg(apc, port_idx, &max_txq, &max_rxq, > + &num_indirect_entries); > + if (err) { > + netdev_err(ndev, "Failed to query info for vPort 0\n"); > + goto reset_apc; > + } > + > + max_queues = min_t(u32, max_txq, max_rxq); > + if (apc->max_queues > max_queues) > + apc->max_queues = max_queues; > + > + if (apc->num_queues > apc->max_queues) > + apc->num_queues = apc->max_queues; > + > + memcpy(ndev->dev_addr, apc->mac_addr, ETH_ALEN); And here use ether_addr_copy().