--- a/gre/test/nss_connmgr_gre_test.c +++ b/gre/test/nss_connmgr_gre_test.c @@ -223,7 +223,7 @@ static int nss_connmgr_gre_test_show_pro */ static int nss_connmgr_gre_test_open_proc(struct inode *inode, struct file *filp) { - return single_open(filp, nss_connmgr_gre_test_show_proc, PDE_DATA(inode)); + return single_open(filp, nss_connmgr_gre_test_show_proc, pde_data(inode)); } /* --- a/gre/nss_connmgr_gre.c +++ b/gre/nss_connmgr_gre.c @@ -279,10 +279,10 @@ static struct rtnl_link_stats64 *nss_con #else start = u64_stats_fetch_begin_irq(&tstats->syncp); #endif - rx_packets = tstats->rx_packets; - tx_packets = tstats->tx_packets; - rx_bytes = tstats->rx_bytes; - tx_bytes = tstats->tx_bytes; + rx_packets = u64_stats_read(&tstats->rx_packets); + tx_packets = u64_stats_read(&tstats->tx_packets); + rx_bytes = u64_stats_read(&tstats->rx_bytes); + tx_bytes = u64_stats_read(&tstats->tx_bytes); #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)) } while (u64_stats_fetch_retry_bh(&tstats->syncp, start)); #else @@ -697,11 +697,11 @@ static void nss_connmgr_gre_event_receiv tstats = this_cpu_ptr(dev->tstats); u64_stats_update_begin(&tstats->syncp); if (interface_type == NSS_DYNAMIC_INTERFACE_TYPE_GRE_INNER) { - tstats->tx_packets += stats->tx_packets; - tstats->tx_bytes += stats->tx_bytes; + u64_stats_add(&tstats->tx_packets, stats->tx_packets); + u64_stats_add(&tstats->tx_bytes, stats->tx_bytes); } else if (interface_type == NSS_DYNAMIC_INTERFACE_TYPE_GRE_OUTER) { - tstats->rx_packets += stats->rx_packets; - tstats->rx_bytes += stats->rx_bytes; + u64_stats_add(&tstats->rx_packets, stats->rx_packets); + u64_stats_add(&tstats->rx_bytes, stats->rx_bytes); } u64_stats_update_end(&tstats->syncp); dev->stats.rx_dropped += nss_cmn_rx_dropped_sum(stats); --- a/tunipip6/nss_connmgr_tunipip6.c +++ b/tunipip6/nss_connmgr_tunipip6.c @@ -354,11 +354,11 @@ static void nss_tunipip6_update_dev_stat memset(&stats, 0, sizeof(stats)); if (interface_type == NSS_DYNAMIC_INTERFACE_TYPE_TUNIPIP6_INNER) { - stats.tx_packets = sync_stats->node_stats.tx_packets; - stats.tx_bytes = sync_stats->node_stats.tx_bytes; + u64_stats_set(&stats.tx_packets, sync_stats->node_stats.tx_packets); + u64_stats_set(&stats.tx_bytes, sync_stats->node_stats.tx_bytes); } else if (interface_type == NSS_DYNAMIC_INTERFACE_TYPE_TUNIPIP6_OUTER) { - stats.rx_packets = sync_stats->node_stats.rx_packets; - stats.rx_bytes = sync_stats->node_stats.rx_bytes; + u64_stats_set(&stats.rx_packets, sync_stats->node_stats.rx_packets); + u64_stats_set(&stats.rx_bytes, sync_stats->node_stats.rx_bytes); } else { nss_tunipip6_warning("%px: Invalid interface type received from NSS\n", dev); return; --- a/nss_qdisc/igs/nss_mirred.c +++ b/nss_qdisc/igs/nss_mirred.c @@ -317,7 +317,7 @@ static int nss_mirred_act(struct sk_buff * Update the last use of action. */ tcf_lastuse_update(&act->tcf_tm); - bstats_cpu_update(this_cpu_ptr(act->common.cpu_bstats), skb); + bstats_update(this_cpu_ptr(act->common.cpu_bstats), skb); rcu_read_lock(); retval = READ_ONCE(act->tcf_action); --- a/nss_qdisc/nss_qdisc.h +++ b/nss_qdisc/nss_qdisc.h @@ -217,7 +217,7 @@ struct nss_qdisc { /* Shaper configure callback for reading shaper specific * responses (e.g. memory size). */ - struct gnet_stats_basic_packed bstats; /* Basic class statistics */ + struct gnet_stats_basic_sync bstats; /* Basic class statistics */ struct gnet_stats_queue qstats; /* Qstats for use by classes */ #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)) atomic_t refcnt; /* Reference count for class use */ @@ -464,7 +464,7 @@ extern int nss_qdisc_init(struct Qdisc * * Wrapper around gnet_stats_copy_basic() */ extern int nss_qdisc_gnet_stats_copy_basic(struct Qdisc *sch, - struct gnet_dump *d, struct gnet_stats_basic_packed *b); + struct gnet_dump *d, struct gnet_stats_basic_sync *b); /* * nss_qdisc_gnet_stats_copy_queue() --- a/nss_qdisc/igs/nss_ifb.c +++ b/nss_qdisc/igs/nss_ifb.c @@ -544,8 +544,10 @@ static void nss_ifb_update_dev_stats(str * post shaping. Therefore IFB interface's stats should be updated * with NSS firmware's IFB TX stats only. */ - stats.rx_packets = stats.tx_packets = node_stats->tx_packets; - stats.rx_bytes = stats.tx_bytes = node_stats->tx_bytes; + u64_stats_set(&stats.rx_packets, node_stats->tx_packets); + u64_stats_set(&stats.tx_packets, node_stats->tx_packets); + u64_stats_set(&stats.rx_bytes, node_stats->tx_bytes); + u64_stats_set(&stats.tx_bytes, node_stats->tx_bytes); dev->stats.rx_dropped = dev->stats.tx_dropped += sync_stats->igs_stats.tx_dropped; u64_stats_update_end(&stats.syncp); --- a/nss_qdisc/nss_qdisc.c +++ b/nss_qdisc/nss_qdisc.c @@ -2189,7 +2189,7 @@ int __nss_qdisc_init(struct Qdisc *sch, * This is to prevent mixing NSS and PPE qdisc with linux qdisc. */ if ((parent != TC_H_ROOT) && (root->ops->owner != THIS_MODULE)) { - nss_qdisc_warning("NSS qdisc %px (type %d) used along with non-nss qdiscs," + nss_qdisc_info("NSS qdisc %px (type %d) used along with non-nss qdiscs," " or the interface is currently down", nq->qdisc, nq->type); } @@ -2606,12 +2606,14 @@ int nss_qdisc_init(struct Qdisc *sch, st * Wrapper around gnet_stats_copy_basic() */ int nss_qdisc_gnet_stats_copy_basic(struct Qdisc *sch, struct gnet_dump *d, - struct gnet_stats_basic_packed *b) + struct gnet_stats_basic_sync *b) { #if (LINUX_VERSION_CODE <= KERNEL_VERSION(3, 18, 0)) return gnet_stats_copy_basic(d, b); #elif (LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0)) return gnet_stats_copy_basic(d, NULL, b); +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 16, 0)) + return gnet_stats_copy_basic(d, NULL, b, true); #else return gnet_stats_copy_basic(qdisc_root_sleeping_running(sch), d, NULL, b); #endif --- a/nss_qdisc/nss_qdisc_stats.c +++ b/nss_qdisc/nss_qdisc_stats.c @@ -161,7 +161,7 @@ static void nss_qdisc_stats_process_node { struct Qdisc *qdisc; struct nss_qdisc *nq; - struct gnet_stats_basic_packed *bstats; + struct gnet_stats_basic_sync *bstats; struct gnet_stats_queue *qstats; uint32_t qos_tag = response->qos_tag; #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)) @@ -215,8 +215,8 @@ static void nss_qdisc_stats_process_node * Update qdisc->bstats */ spin_lock_bh(&nq->lock); - bstats->bytes += (__u64)response->sn_stats.delta.dequeued_bytes; - bstats->packets += response->sn_stats.delta.dequeued_packets; + u64_stats_add(&bstats->bytes, (__u64)response->sn_stats.delta.dequeued_bytes); + u64_stats_add(&bstats->packets, response->sn_stats.delta.dequeued_packets); /* * Update qdisc->qstats --- a/vxlanmgr/nss_vxlanmgr_tunnel.c +++ b/vxlanmgr/nss_vxlanmgr_tunnel.c @@ -489,8 +489,8 @@ static void nss_vxlanmgr_tunnel_inner_st tstats = this_cpu_ptr(dev->tstats); u64_stats_update_begin(&tstats->syncp); - tstats->tx_packets += stats->node_stats.tx_packets; - tstats->tx_bytes += stats->node_stats.tx_bytes; + u64_stats_add(&tstats->tx_packets, stats->node_stats.tx_packets); + u64_stats_add(&tstats->tx_bytes, stats->node_stats.tx_bytes); u64_stats_update_end(&tstats->syncp); netdev_stats->tx_dropped += dropped; } @@ -526,8 +526,8 @@ static void nss_vxlanmgr_tunnel_outer_st tstats = this_cpu_ptr(dev->tstats); u64_stats_update_begin(&tstats->syncp); - tstats->rx_packets += stats->node_stats.tx_packets; - tstats->rx_bytes += stats->node_stats.tx_bytes; + u64_stats_add(&tstats->rx_packets, stats->node_stats.tx_packets); + u64_stats_add(&tstats->rx_bytes, stats->node_stats.tx_bytes); u64_stats_update_end(&tstats->syncp); netdev_stats->rx_dropped += dropped; dev_put(dev); --- a/pvxlanmgr/nss_pvxlanmgr.c +++ b/pvxlanmgr/nss_pvxlanmgr.c @@ -177,7 +177,7 @@ static struct rtnl_link_stats64 *nss_pvx * Netdev seems to be incrementing rx_dropped because we don't give IP header. * So reset it as it's of no use for us. */ - atomic_long_set(&dev->rx_dropped, 0); + atomic_long_set(&(dev)->stats.__rx_dropped, 0); priv = netdev_priv(dev); memset(stats, 0, sizeof(struct rtnl_link_stats64)); memcpy(stats, &priv->stats, sizeof(struct rtnl_link_stats64)); @@ -305,9 +305,9 @@ static void nss_pvxlanmgr_dummy_netdev_s dev->priv_destructor = NULL; #endif - memcpy(dev->dev_addr, "\x00\x00\x00\x00\x00\x00", dev->addr_len); - memset(dev->broadcast, 0xff, dev->addr_len); - memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); + const uint8_t mac_addr[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + eth_hw_addr_set(dev, mac_addr); + eth_broadcast_addr(dev->broadcast); } /* --- a/clmapmgr/nss_clmapmgr.c +++ b/clmapmgr/nss_clmapmgr.c @@ -103,7 +103,7 @@ static struct rtnl_link_stats64 *nss_clm * Netdev seems to be incrementing rx_dropped because we don't give IP header. * So reset it as it's of no use for us. */ - atomic_long_set(&dev->rx_dropped, 0); + atomic_long_set(&(dev)->stats.__rx_dropped, 0); priv = netdev_priv(dev); memset(stats, 0, sizeof(struct rtnl_link_stats64)); memcpy(stats, &priv->stats, sizeof(struct rtnl_link_stats64)); --- a/tls/nss_tlsmgr_tun.c +++ b/tls/nss_tlsmgr_tun.c @@ -185,7 +185,7 @@ static void nss_tlsmgr_tun_setup(struct /* * Get the MAC address from the ethernet device */ - random_ether_addr(dev->dev_addr); + eth_random_addr((u8 *) dev->dev_addr); memset(dev->broadcast, 0xff, dev->addr_len); memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); --- a/netlink/nss_nlgre_redir_cmn.c +++ b/netlink/nss_nlgre_redir_cmn.c @@ -384,7 +384,7 @@ static int nss_nlgre_redir_cmn_set_mac_a return -EINVAL; } - memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); + memcpy((void *) dev->dev_addr, addr->sa_data, ETH_ALEN); return 0; } --- a/nss_connmgr_tun6rd.c +++ b/nss_connmgr_tun6rd.c @@ -101,10 +101,10 @@ static void nss_tun6rd_update_dev_stats( u64_stats_init(&stats.syncp); u64_stats_update_begin(&stats.syncp); - stats.rx_packets = sync_stats->node_stats.rx_packets; - stats.rx_bytes = sync_stats->node_stats.rx_bytes; - stats.tx_packets = sync_stats->node_stats.tx_packets; - stats.tx_bytes = sync_stats->node_stats.tx_bytes; + u64_stats_set(&stats.rx_packets, sync_stats->node_stats.rx_packets); + u64_stats_set(&stats.rx_bytes, sync_stats->node_stats.rx_bytes); + u64_stats_set(&stats.tx_packets, sync_stats->node_stats.tx_packets); + u64_stats_set(&stats.tx_bytes, sync_stats->node_stats.tx_bytes); u64_stats_update_end(&stats.syncp); #else struct nss_tun6rd_stats stats; --- a/ipsecmgr/v1.0/nss_ipsecmgr.c +++ b/ipsecmgr/v1.0/nss_ipsecmgr.c @@ -445,7 +445,7 @@ static void nss_ipsecmgr_tunnel_setup(st /* * get the MAC address from the ethernet device */ - random_ether_addr(dev->dev_addr); + eth_random_addr((u8 *) dev->dev_addr); memset(dev->broadcast, 0xff, dev->addr_len); memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); --- a/ipsecmgr/v2.0/nss_ipsecmgr_tunnel.c +++ b/ipsecmgr/v2.0/nss_ipsecmgr_tunnel.c @@ -445,7 +445,7 @@ static void nss_ipsecmgr_tunnel_setup(st /* * Get the MAC address from the ethernet device */ - random_ether_addr(dev->dev_addr); + eth_random_addr((u8 *) dev->dev_addr); memset(dev->broadcast, 0xff, dev->addr_len); memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);