Thank you for the patch, Please see the comment below. Regards _Sugesh
> -----Original Message----- > From: Kevin Traynor [mailto:ktray...@redhat.com] > Sent: Tuesday, April 4, 2017 6:35 AM > To: d...@openvswitch.org > Cc: Kevin Traynor <ktray...@redhat.com>; Chandran, Sugesh > <sugesh.chand...@intel.com> > Subject: [PATCH 1/2] netdev-dpdk: Fix Rx checksum reconfigure. > > Rx checksum offload is enabled by default where available, with > reconfiguration through OVSDB options:rx-checksum-offload. > However, setting rx-checksum-offload does not result in a reconfiguration of > the NIC. > > Fix that by checking if the requested port config features (e.g. rx checksum > offload) are currently applied on the NIC and if not, perform a > reconfiguration. > > Fixes: 1a2bb11817a4 ("netdev-dpdk: Enable Rx checksum offloading feature > on DPDK physical ports.") > Cc: Sugesh Chandran <sugesh.chand...@intel.com> > Signed-off-by: Kevin Traynor <ktray...@redhat.com> > --- > lib/netdev-dpdk.c | 14 +++++++++----- > 1 file changed, 9 insertions(+), 5 deletions(-) > > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index ddc651b..d5a9800 > 100644 > --- a/lib/netdev-dpdk.c > +++ b/lib/netdev-dpdk.c > @@ -374,4 +374,5 @@ struct netdev_dpdk { > int requested_rxq_size; > int requested_txq_size; > + uint32_t requested_hwol; > > /* Number of rx/tx descriptors for physical devices */ @@ -647,5 +648,5 > @@ dpdk_eth_dev_queue_setup(struct netdev_dpdk *dev, int n_rxq, int > n_txq) > conf.rxmode.max_rx_pkt_len = 0; > } > - conf.rxmode.hw_ip_checksum = (dev->hw_ol_features & > + conf.rxmode.hw_ip_checksum = (dev->requested_hwol & > NETDEV_RX_CHECKSUM_OFFLOAD) != 0; > /* A device may report more queues than it makes available (this has @@ > -701,4 +702,5 @@ dpdk_eth_dev_queue_setup(struct netdev_dpdk *dev, > int n_rxq, int n_txq) > dev->up.n_rxq = n_rxq; > dev->up.n_txq = n_txq; > + dev->hw_ol_features = dev->requested_hwol; > > return 0; > @@ -718,5 +720,5 @@ dpdk_eth_checksum_offload_configure(struct > netdev_dpdk *dev) > DEV_RX_OFFLOAD_IPV4_CKSUM; > rte_eth_dev_info_get(dev->port_id, &info); > - rx_csum_ol_flag = (dev->hw_ol_features & > NETDEV_RX_CHECKSUM_OFFLOAD) != 0; > + rx_csum_ol_flag = (dev->requested_hwol & > + NETDEV_RX_CHECKSUM_OFFLOAD) != 0; > > if (rx_csum_ol_flag && > @@ -725,5 +727,5 @@ dpdk_eth_checksum_offload_configure(struct > netdev_dpdk *dev) > VLOG_WARN_ONCE("Rx checksum offload is not supported on device > %d", > dev->port_id); > - dev->hw_ol_features &= ~NETDEV_RX_CHECKSUM_OFFLOAD; > + dev->requested_hwol &= ~NETDEV_RX_CHECKSUM_OFFLOAD; > return; > } > @@ -871,4 +873,5 @@ common_construct(struct netdev *netdev, unsigned > int port_no, > /* Initilize the hardware offload flags to 0 */ > dev->hw_ol_features = 0; > + dev->requested_hwol = 0; > > dev->flags = NETDEV_UP | NETDEV_PROMISC; @@ -1259,5 +1262,5 @@ > netdev_dpdk_set_config(struct netdev *netdev, const struct smap *args, > != 0; > if (temp_flag != rx_chksm_ofld) { > - dev->hw_ol_features ^= NETDEV_RX_CHECKSUM_OFFLOAD; > + dev->requested_hwol ^= NETDEV_RX_CHECKSUM_OFFLOAD; > dpdk_eth_checksum_offload_configure(dev); > } > @@ -3124,5 +3127,6 @@ netdev_dpdk_reconfigure(struct netdev *netdev) > && dev->rxq_size == dev->requested_rxq_size > && dev->txq_size == dev->requested_txq_size > - && dev->socket_id == dev->requested_socket_id) { > + && dev->socket_id == dev->requested_socket_id > + && dev->hw_ol_features == dev->requested_hwol) { > /* Reconfiguration is unnecessary */ [Sugesh] The patch fixes the issue however I believe these checks has to be moved to the corresponding functions than here. May be that looks cleaner. Any configuration change that happen to a netdev validated at the corresponding functions than in a common reconfigure. That can avoid the need of 2 struct element for every param. I verified the patch and now it reloads the NIC configuration when there is a change. > > -- > 1.8.3.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev