From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hyong Youb Kim Subject: Re: [PATCH v2] net/enic: add primary mac address handler Date: Tue, 17 Apr 2018 14:12:14 +0900 Message-ID: <20180417051213.GA12316@HYONKIM-FTCPE.cisco.com> References: <20180219124227.19859-1-david.marchand@6wind.com> <1523871617-15533-1-git-send-email-david.marchand@6wind.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: dev@dpdk.org, johndale@cisco.com, ferruh.yigit@intel.com, neescoba@cisco.com To: David Marchand Return-path: Received: from rcdn-iport-2.cisco.com (rcdn-iport-2.cisco.com [173.37.86.73]) by dpdk.org (Postfix) with ESMTP id 3E5EE8E56 for ; Tue, 17 Apr 2018 07:12:20 +0200 (CEST) Content-Disposition: inline In-Reply-To: <1523871617-15533-1-git-send-email-david.marchand@6wind.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Mon, Apr 16, 2018 at 11:40:17AM +0200, David Marchand wrote: > Modified enic_del_mac_address() to get a return value from the vnic layer. > Reused the .mac_addr_add and .mac_addr_del callbacks code to implement > primary mac address handler. > > Signed-off-by: David Marchand > --- Thanks. The patch looks good to me. I've tested it on top of dpdk-net-next. It works as expected. Acked-by: Hyong Youb Kim > > Changes since v1: > - rebased on dpdk-next-net following mac_addr_set rework, > - since enicpmd_remove_mac_addr() does not return an error code, I chose to > expose the return value from enic_del_mac_address() so that an error > can be detected in the mac_addr_set callback. The log message in > enicpmd_remove_mac_addr() has been preserved. > > --- > drivers/net/enic/enic.h | 2 +- > drivers/net/enic/enic_ethdev.c | 20 +++++++++++++++++++- > drivers/net/enic/enic_main.c | 5 ++--- > 3 files changed, 22 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/enic/enic.h b/drivers/net/enic/enic.h > index 751ddc7..5f15e44 100644 > --- a/drivers/net/enic/enic.h > +++ b/drivers/net/enic/enic.h > @@ -284,7 +284,7 @@ int enic_dev_stats_get(struct enic *enic, > void enic_dev_stats_clear(struct enic *enic); > void enic_add_packet_filter(struct enic *enic); > int enic_set_mac_address(struct enic *enic, uint8_t *mac_addr); > -void enic_del_mac_address(struct enic *enic, int mac_index); > +int enic_del_mac_address(struct enic *enic, int mac_index); > unsigned int enic_cleanup_wq(struct enic *enic, struct vnic_wq *wq); > void enic_send_pkt(struct enic *enic, struct vnic_wq *wq, > struct rte_mbuf *tx_pkt, unsigned short len, > diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c > index 801f470..f503398 100644 > --- a/drivers/net/enic/enic_ethdev.c > +++ b/drivers/net/enic/enic_ethdev.c > @@ -583,7 +583,24 @@ static void enicpmd_remove_mac_addr(struct rte_eth_dev *eth_dev, uint32_t index) > return; > > ENICPMD_FUNC_TRACE(); > - enic_del_mac_address(enic, index); > + if (enic_del_mac_address(enic, index)) > + dev_err(enic, "del mac addr failed\n"); > +} > + > +static int enicpmd_set_mac_addr(struct rte_eth_dev *eth_dev, > + struct ether_addr *addr) > +{ > + struct enic *enic = pmd_priv(eth_dev); > + int ret; > + > + if (rte_eal_process_type() != RTE_PROC_PRIMARY) > + return -E_RTE_SECONDARY; > + > + ENICPMD_FUNC_TRACE(); > + ret = enic_del_mac_address(enic, 0); > + if (ret) > + return ret; > + return enic_set_mac_address(enic, addr->addr_bytes); > } > > static int enicpmd_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu) > @@ -799,6 +816,7 @@ static const struct eth_dev_ops enicpmd_eth_dev_ops = { > .priority_flow_ctrl_set = NULL, > .mac_addr_add = enicpmd_add_mac_addr, > .mac_addr_remove = enicpmd_remove_mac_addr, > + .mac_addr_set = enicpmd_set_mac_addr, > .filter_ctrl = enicpmd_dev_filter_ctrl, > .reta_query = enicpmd_dev_rss_reta_query, > .reta_update = enicpmd_dev_rss_reta_update, > diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c > index 98d4775..d9bc7fd 100644 > --- a/drivers/net/enic/enic_main.c > +++ b/drivers/net/enic/enic_main.c > @@ -162,13 +162,12 @@ int enic_dev_stats_get(struct enic *enic, struct rte_eth_stats *r_stats) > return 0; > } > > -void enic_del_mac_address(struct enic *enic, int mac_index) > +int enic_del_mac_address(struct enic *enic, int mac_index) > { > struct rte_eth_dev *eth_dev = enic->rte_dev; > uint8_t *mac_addr = eth_dev->data->mac_addrs[mac_index].addr_bytes; > > - if (vnic_dev_del_addr(enic->vdev, mac_addr)) > - dev_err(enic, "del mac addr failed\n"); > + return vnic_dev_del_addr(enic->vdev, mac_addr); > } > > int enic_set_mac_address(struct enic *enic, uint8_t *mac_addr) > -- > 2.7.4 >