Message ID | 20191204163815.44495-1-ciara.power@intel.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Ferruh Yigit |
Headers | show |
Series | app/testpmd: fix device mcast list error handling | expand |
Context | Check | Description |
---|---|---|
ci/travis-robot | success | Travis build: passed |
ci/iol-mellanox-Performance | success | Performance Testing PASS |
ci/iol-intel-Performance | success | Performance Testing PASS |
ci/Intel-compilation | success | Compilation OK |
ci/iol-compilation | success | Compile Testing PASS |
ci/checkpatch | success | coding style OK |
On 12/4/2019 4:38 PM, Ciara Power wrote: > The multicast set list function now has a return value, which is checked > by the calling functions. A rollback occurs on detection of failure, to > realign local config with the device config. > > The error print statement in the function had included the port_id and > mc_addr_nb values in the wrong order, these are now swapped. > > Fixes: 8fff667578a7 ("app/testpmd: new command to add/remove multicast MAC addresses") > Cc: ivan.boule@6wind.com > Cc: stable@dpdk.org > > Signed-off-by: Ciara Power <ciara.power@intel.com> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
On 12/4/2019 4:48 PM, Ferruh Yigit wrote: > On 12/4/2019 4:38 PM, Ciara Power wrote: >> The multicast set list function now has a return value, which is checked >> by the calling functions. A rollback occurs on detection of failure, to >> realign local config with the device config. >> >> The error print statement in the function had included the port_id and >> mc_addr_nb values in the wrong order, these are now swapped. >> >> Fixes: 8fff667578a7 ("app/testpmd: new command to add/remove multicast MAC addresses") >> Cc: ivan.boule@6wind.com >> Cc: stable@dpdk.org >> >> Signed-off-by: Ciara Power <ciara.power@intel.com> > > Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com> > Applied to dpdk-next-net/master, thanks.
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index d59968278..8c8621779 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -3707,6 +3707,14 @@ mcast_addr_pool_extend(struct rte_port *port) } +static void +mcast_addr_pool_append(struct rte_port *port, struct rte_ether_addr *mc_addr) +{ + if (mcast_addr_pool_extend(port) != 0) + return; + rte_ether_addr_copy(mc_addr, &port->mc_addr_pool[port->mc_addr_nb - 1]); +} + static void mcast_addr_pool_remove(struct rte_port *port, uint32_t addr_idx) { @@ -3725,7 +3733,7 @@ mcast_addr_pool_remove(struct rte_port *port, uint32_t addr_idx) sizeof(struct rte_ether_addr) * (port->mc_addr_nb - addr_idx)); } -static void +static int eth_port_multicast_addr_list_set(portid_t port_id) { struct rte_port *port; @@ -3734,10 +3742,11 @@ eth_port_multicast_addr_list_set(portid_t port_id) port = &ports[port_id]; diag = rte_eth_dev_set_mc_addr_list(port_id, port->mc_addr_pool, port->mc_addr_nb); - if (diag == 0) - return; - printf("rte_eth_dev_set_mc_addr_list(port=%d, nb=%u) failed. diag=%d\n", - port->mc_addr_nb, port_id, -diag); + if (diag < 0) + printf("rte_eth_dev_set_mc_addr_list(port=%d, nb=%u) failed. diag=%d\n", + port_id, port->mc_addr_nb, diag); + + return diag; } void @@ -3762,10 +3771,10 @@ mcast_addr_add(portid_t port_id, struct rte_ether_addr *mc_addr) } } - if (mcast_addr_pool_extend(port) != 0) - return; - rte_ether_addr_copy(mc_addr, &port->mc_addr_pool[i]); - eth_port_multicast_addr_list_set(port_id); + mcast_addr_pool_append(port, mc_addr); + if (eth_port_multicast_addr_list_set(port_id) < 0) + /* Rollback on failure, remove the address from the pool */ + mcast_addr_pool_remove(port, i); } void @@ -3792,7 +3801,9 @@ mcast_addr_remove(portid_t port_id, struct rte_ether_addr *mc_addr) } mcast_addr_pool_remove(port, i); - eth_port_multicast_addr_list_set(port_id); + if (eth_port_multicast_addr_list_set(port_id) < 0) + /* Rollback on failure, add the address back into the pool */ + mcast_addr_pool_append(port, mc_addr); } void
The multicast set list function now has a return value, which is checked by the calling functions. A rollback occurs on detection of failure, to realign local config with the device config. The error print statement in the function had included the port_id and mc_addr_nb values in the wrong order, these are now swapped. Fixes: 8fff667578a7 ("app/testpmd: new command to add/remove multicast MAC addresses") Cc: ivan.boule@6wind.com Cc: stable@dpdk.org Signed-off-by: Ciara Power <ciara.power@intel.com> --- app/test-pmd/config.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-)