Skip to content

Commit 4e33d7d

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) Verify netlink attributes properly in nf_queue, from Eric Dumazet. 2) Need to bump memory lock rlimit for test_sockmap bpf test, from Yonghong Song. 3) Fix VLAN handling in lan78xx driver, from Dave Stevenson. 4) Fix uninitialized read in nf_log, from Jann Horn. 5) Fix raw command length parsing in mlx5, from Alex Vesker. 6) Cleanup loopback RDS connections upon netns deletion, from Sowmini Varadhan. 7) Fix regressions in FIB rule matching during create, from Jason A. Donenfeld and Roopa Prabhu. 8) Fix mpls ether type detection in nfp, from Pieter Jansen van Vuuren. 9) More bpfilter build fixes/adjustments from Masahiro Yamada. 10) Fix XDP_{TX,REDIRECT} flushing in various drivers, from Jesper Dangaard Brouer. 11) fib_tests.sh file permissions were broken, from Shuah Khan. 12) Make sure BH/preemption is disabled in data path of mac80211, from Denis Kenzior. 13) Don't ignore nla_parse_nested() return values in nl80211, from Johannes berg. 14) Properly account sock objects ot kmemcg, from Shakeel Butt. 15) Adjustments to setting bpf program permissions to read-only, from Daniel Borkmann. 16) TCP Fast Open key endianness was broken, it always took on the host endiannness. Whoops. Explicitly make it little endian. From Yuching Cheng. 17) Fix prefix route setting for link local addresses in ipv6, from David Ahern. 18) Potential Spectre v1 in zatm driver, from Gustavo A. R. Silva. 19) Various bpf sockmap fixes, from John Fastabend. 20) Use after free for GRO with ESP, from Sabrina Dubroca. 21) Passing bogus flags to crypto_alloc_shash() in ipv6 SR code, from Eric Biggers. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (87 commits) qede: Adverstise software timestamp caps when PHC is not available. qed: Fix use of incorrect size in memcpy call. qed: Fix setting of incorrect eswitch mode. qed: Limit msix vectors in kdump kernel to the minimum required count. ipvlan: call dev_change_flags when ipvlan mode is reset ipv6: sr: fix passing wrong flags to crypto_alloc_shash() net: fix use-after-free in GRO with ESP tcp: prevent bogus FRTO undos with non-SACK flows bpf: sockhash, add release routine bpf: sockhash fix omitted bucket lock in sock_close bpf: sockmap, fix smap_list_map_remove when psock is in many maps bpf: sockmap, fix crash when ipv6 sock is added net: fib_rules: bring back rule_exists to match rule during add hv_netvsc: split sub-channel setup into async and sync net: use dev_change_tx_queue_len() for SIOCSIFTXQLEN atm: zatm: Fix potential Spectre v1 s390/qeth: consistently re-enable device features s390/qeth: don't clobber buffer on async TX completion s390/qeth: avoid using is_multicast_ether_addr_64bits on (u8 *)[6] s390/qeth: fix race when setting MAC address ...
2 parents 021c917 + e48e097 commit 4e33d7d

File tree

114 files changed

+1249
-624
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+1249
-624
lines changed

Makefile

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -507,11 +507,6 @@ ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLA
507507
KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO
508508
endif
509509

510-
ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/cc-can-link.sh $(CC)), y)
511-
CC_CAN_LINK := y
512-
export CC_CAN_LINK
513-
endif
514-
515510
# The expansion should be delayed until arch/$(SRCARCH)/Makefile is included.
516511
# Some architectures define CROSS_COMPILE in arch/$(SRCARCH)/Makefile.
517512
# CC_VERSION_TEXT is referenced from Kconfig (so it needs export),

arch/arm/net/bpf_jit_32.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1844,7 +1844,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
18441844
/* there are 2 passes here */
18451845
bpf_jit_dump(prog->len, image_size, 2, ctx.target);
18461846

1847-
set_memory_ro((unsigned long)header, header->pages);
1847+
bpf_jit_binary_lock_ro(header);
18481848
prog->bpf_func = (void *)ctx.target;
18491849
prog->jited = 1;
18501850
prog->jited_len = image_size;

arch/s390/net/bpf_jit_comp.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,6 +1286,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
12861286
goto free_addrs;
12871287
}
12881288
if (bpf_jit_prog(&jit, fp)) {
1289+
bpf_jit_binary_free(header);
12891290
fp = orig_fp;
12901291
goto free_addrs;
12911292
}

drivers/atm/iphase.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1618,7 +1618,7 @@ static int rx_init(struct atm_dev *dev)
16181618
skb_queue_head_init(&iadev->rx_dma_q);
16191619
iadev->rx_free_desc_qhead = NULL;
16201620

1621-
iadev->rx_open = kcalloc(4, iadev->num_vc, GFP_KERNEL);
1621+
iadev->rx_open = kcalloc(iadev->num_vc, sizeof(void *), GFP_KERNEL);
16221622
if (!iadev->rx_open) {
16231623
printk(KERN_ERR DEV_LABEL "itf %d couldn't get free page\n",
16241624
dev->number);

drivers/atm/zatm.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1483,6 +1483,8 @@ static int zatm_ioctl(struct atm_dev *dev,unsigned int cmd,void __user *arg)
14831483
return -EFAULT;
14841484
if (pool < 0 || pool > ZATM_LAST_POOL)
14851485
return -EINVAL;
1486+
pool = array_index_nospec(pool,
1487+
ZATM_LAST_POOL + 1);
14861488
if (copy_from_user(&info,
14871489
&((struct zatm_pool_req __user *) arg)->info,
14881490
sizeof(info))) return -EFAULT;

drivers/infiniband/hw/mlx5/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6113,7 +6113,7 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
61136113
dev->num_ports = max(MLX5_CAP_GEN(mdev, num_ports),
61146114
MLX5_CAP_GEN(mdev, num_vhca_ports));
61156115

6116-
if (MLX5_VPORT_MANAGER(mdev) &&
6116+
if (MLX5_ESWITCH_MANAGER(mdev) &&
61176117
mlx5_ib_eswitch_mode(mdev->priv.eswitch) == SRIOV_OFFLOADS) {
61186118
dev->rep = mlx5_ib_vport_rep(mdev->priv.eswitch, 0);
61196119

drivers/media/rc/bpf-lirc.c

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -207,29 +207,19 @@ void lirc_bpf_free(struct rc_dev *rcdev)
207207
bpf_prog_array_free(rcdev->raw->progs);
208208
}
209209

210-
int lirc_prog_attach(const union bpf_attr *attr)
210+
int lirc_prog_attach(const union bpf_attr *attr, struct bpf_prog *prog)
211211
{
212-
struct bpf_prog *prog;
213212
struct rc_dev *rcdev;
214213
int ret;
215214

216215
if (attr->attach_flags)
217216
return -EINVAL;
218217

219-
prog = bpf_prog_get_type(attr->attach_bpf_fd,
220-
BPF_PROG_TYPE_LIRC_MODE2);
221-
if (IS_ERR(prog))
222-
return PTR_ERR(prog);
223-
224218
rcdev = rc_dev_get_from_fd(attr->target_fd);
225-
if (IS_ERR(rcdev)) {
226-
bpf_prog_put(prog);
219+
if (IS_ERR(rcdev))
227220
return PTR_ERR(rcdev);
228-
}
229221

230222
ret = lirc_bpf_attach(rcdev, prog);
231-
if (ret)
232-
bpf_prog_put(prog);
233223

234224
put_device(&rcdev->dev);
235225

drivers/net/ethernet/atheros/alx/main.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1897,13 +1897,19 @@ static int alx_resume(struct device *dev)
18971897
struct pci_dev *pdev = to_pci_dev(dev);
18981898
struct alx_priv *alx = pci_get_drvdata(pdev);
18991899
struct alx_hw *hw = &alx->hw;
1900+
int err;
19001901

19011902
alx_reset_phy(hw);
19021903

19031904
if (!netif_running(alx->dev))
19041905
return 0;
19051906
netif_device_attach(alx->dev);
1906-
return __alx_open(alx, true);
1907+
1908+
rtnl_lock();
1909+
err = __alx_open(alx, true);
1910+
rtnl_unlock();
1911+
1912+
return err;
19071913
}
19081914

19091915
static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume);

drivers/net/ethernet/broadcom/bnx2x/bnx2x.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,6 +1533,7 @@ struct bnx2x {
15331533
struct link_vars link_vars;
15341534
u32 link_cnt;
15351535
struct bnx2x_link_report_data last_reported_link;
1536+
bool force_link_down;
15361537

15371538
struct mdio_if_info mdio;
15381539

drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1261,6 +1261,11 @@ void __bnx2x_link_report(struct bnx2x *bp)
12611261
{
12621262
struct bnx2x_link_report_data cur_data;
12631263

1264+
if (bp->force_link_down) {
1265+
bp->link_vars.link_up = 0;
1266+
return;
1267+
}
1268+
12641269
/* reread mf_cfg */
12651270
if (IS_PF(bp) && !CHIP_IS_E1(bp))
12661271
bnx2x_read_mf_cfg(bp);
@@ -2817,6 +2822,7 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
28172822
bp->pending_max = 0;
28182823
}
28192824

2825+
bp->force_link_down = false;
28202826
if (bp->port.pmf) {
28212827
rc = bnx2x_initial_phy_init(bp, load_mode);
28222828
if (rc)

drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10279,6 +10279,12 @@ static void bnx2x_sp_rtnl_task(struct work_struct *work)
1027910279
bp->sp_rtnl_state = 0;
1028010280
smp_mb();
1028110281

10282+
/* Immediately indicate link as down */
10283+
bp->link_vars.link_up = 0;
10284+
bp->force_link_down = true;
10285+
netif_carrier_off(bp->dev);
10286+
BNX2X_ERR("Indicating link is down due to Tx-timeout\n");
10287+
1028210288
bnx2x_nic_unload(bp, UNLOAD_NORMAL, true);
1028310289
/* When ret value shows failure of allocation failure,
1028410290
* the nic is rebooted again. If open still fails, a error

drivers/net/ethernet/broadcom/cnic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ static int cnic_init_id_tbl(struct cnic_id_tbl *id_tbl, u32 size, u32 start_id,
660660
id_tbl->max = size;
661661
id_tbl->next = next;
662662
spin_lock_init(&id_tbl->lock);
663-
id_tbl->table = kcalloc(DIV_ROUND_UP(size, 32), 4, GFP_KERNEL);
663+
id_tbl->table = kcalloc(BITS_TO_LONGS(size), sizeof(long), GFP_KERNEL);
664664
if (!id_tbl->table)
665665
return -ENOMEM;
666666

drivers/net/ethernet/cadence/macb_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3726,6 +3726,8 @@ static int at91ether_init(struct platform_device *pdev)
37263726
int err;
37273727
u32 reg;
37283728

3729+
bp->queues[0].bp = bp;
3730+
37293731
dev->netdev_ops = &at91ether_netdev_ops;
37303732
dev->ethtool_ops = &macb_ethtool_ops;
37313733

drivers/net/ethernet/freescale/dpaa/dpaa_eth.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ MODULE_PARM_DESC(tx_timeout, "The Tx timeout in ms");
125125
/* Default alignment for start of data in an Rx FD */
126126
#define DPAA_FD_DATA_ALIGNMENT 16
127127

128+
/* The DPAA requires 256 bytes reserved and mapped for the SGT */
129+
#define DPAA_SGT_SIZE 256
130+
128131
/* Values for the L3R field of the FM Parse Results
129132
*/
130133
/* L3 Type field: First IP Present IPv4 */
@@ -1617,8 +1620,8 @@ static struct sk_buff *dpaa_cleanup_tx_fd(const struct dpaa_priv *priv,
16171620

16181621
if (unlikely(qm_fd_get_format(fd) == qm_fd_sg)) {
16191622
nr_frags = skb_shinfo(skb)->nr_frags;
1620-
dma_unmap_single(dev, addr, qm_fd_get_offset(fd) +
1621-
sizeof(struct qm_sg_entry) * (1 + nr_frags),
1623+
dma_unmap_single(dev, addr,
1624+
qm_fd_get_offset(fd) + DPAA_SGT_SIZE,
16221625
dma_dir);
16231626

16241627
/* The sgt buffer has been allocated with netdev_alloc_frag(),
@@ -1903,8 +1906,7 @@ static int skb_to_sg_fd(struct dpaa_priv *priv,
19031906
void *sgt_buf;
19041907

19051908
/* get a page frag to store the SGTable */
1906-
sz = SKB_DATA_ALIGN(priv->tx_headroom +
1907-
sizeof(struct qm_sg_entry) * (1 + nr_frags));
1909+
sz = SKB_DATA_ALIGN(priv->tx_headroom + DPAA_SGT_SIZE);
19081910
sgt_buf = netdev_alloc_frag(sz);
19091911
if (unlikely(!sgt_buf)) {
19101912
netdev_err(net_dev, "netdev_alloc_frag() failed for size %d\n",
@@ -1972,9 +1974,8 @@ static int skb_to_sg_fd(struct dpaa_priv *priv,
19721974
skbh = (struct sk_buff **)buffer_start;
19731975
*skbh = skb;
19741976

1975-
addr = dma_map_single(dev, buffer_start, priv->tx_headroom +
1976-
sizeof(struct qm_sg_entry) * (1 + nr_frags),
1977-
dma_dir);
1977+
addr = dma_map_single(dev, buffer_start,
1978+
priv->tx_headroom + DPAA_SGT_SIZE, dma_dir);
19781979
if (unlikely(dma_mapping_error(dev, addr))) {
19791980
dev_err(dev, "DMA mapping failed");
19801981
err = -EINVAL;

drivers/net/ethernet/freescale/fman/fman_port.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,10 @@ struct fman_port_qmi_regs {
324324
#define HWP_HXS_PHE_REPORT 0x00000800
325325
#define HWP_HXS_PCAC_PSTAT 0x00000100
326326
#define HWP_HXS_PCAC_PSTOP 0x00000001
327+
#define HWP_HXS_TCP_OFFSET 0xA
328+
#define HWP_HXS_UDP_OFFSET 0xB
329+
#define HWP_HXS_SH_PAD_REM 0x80000000
330+
327331
struct fman_port_hwp_regs {
328332
struct {
329333
u32 ssa; /* Soft Sequence Attachment */
@@ -728,6 +732,10 @@ static void init_hwp(struct fman_port *port)
728732
iowrite32be(0xffffffff, &regs->pmda[i].lcv);
729733
}
730734

735+
/* Short packet padding removal from checksum calculation */
736+
iowrite32be(HWP_HXS_SH_PAD_REM, &regs->pmda[HWP_HXS_TCP_OFFSET].ssa);
737+
iowrite32be(HWP_HXS_SH_PAD_REM, &regs->pmda[HWP_HXS_UDP_OFFSET].ssa);
738+
731739
start_port_hwp(port);
732740
}
733741

drivers/net/ethernet/huawei/hinic/hinic_rx.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,7 @@ static void rx_free_irq(struct hinic_rxq *rxq)
439439
{
440440
struct hinic_rq *rq = rxq->rq;
441441

442+
irq_set_affinity_hint(rq->irq, NULL);
442443
free_irq(rq->irq, rxq);
443444
rx_del_napi(rxq);
444445
}

drivers/net/ethernet/intel/i40e/i40e_txrx.c

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2199,9 +2199,10 @@ static bool i40e_is_non_eop(struct i40e_ring *rx_ring,
21992199
return true;
22002200
}
22012201

2202-
#define I40E_XDP_PASS 0
2203-
#define I40E_XDP_CONSUMED 1
2204-
#define I40E_XDP_TX 2
2202+
#define I40E_XDP_PASS 0
2203+
#define I40E_XDP_CONSUMED BIT(0)
2204+
#define I40E_XDP_TX BIT(1)
2205+
#define I40E_XDP_REDIR BIT(2)
22052206

22062207
static int i40e_xmit_xdp_ring(struct xdp_frame *xdpf,
22072208
struct i40e_ring *xdp_ring);
@@ -2248,7 +2249,7 @@ static struct sk_buff *i40e_run_xdp(struct i40e_ring *rx_ring,
22482249
break;
22492250
case XDP_REDIRECT:
22502251
err = xdp_do_redirect(rx_ring->netdev, xdp, xdp_prog);
2251-
result = !err ? I40E_XDP_TX : I40E_XDP_CONSUMED;
2252+
result = !err ? I40E_XDP_REDIR : I40E_XDP_CONSUMED;
22522253
break;
22532254
default:
22542255
bpf_warn_invalid_xdp_action(act);
@@ -2311,7 +2312,8 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)
23112312
unsigned int total_rx_bytes = 0, total_rx_packets = 0;
23122313
struct sk_buff *skb = rx_ring->skb;
23132314
u16 cleaned_count = I40E_DESC_UNUSED(rx_ring);
2314-
bool failure = false, xdp_xmit = false;
2315+
unsigned int xdp_xmit = 0;
2316+
bool failure = false;
23152317
struct xdp_buff xdp;
23162318

23172319
xdp.rxq = &rx_ring->xdp_rxq;
@@ -2372,8 +2374,10 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)
23722374
}
23732375

23742376
if (IS_ERR(skb)) {
2375-
if (PTR_ERR(skb) == -I40E_XDP_TX) {
2376-
xdp_xmit = true;
2377+
unsigned int xdp_res = -PTR_ERR(skb);
2378+
2379+
if (xdp_res & (I40E_XDP_TX | I40E_XDP_REDIR)) {
2380+
xdp_xmit |= xdp_res;
23772381
i40e_rx_buffer_flip(rx_ring, rx_buffer, size);
23782382
} else {
23792383
rx_buffer->pagecnt_bias++;
@@ -2427,12 +2431,14 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)
24272431
total_rx_packets++;
24282432
}
24292433

2430-
if (xdp_xmit) {
2434+
if (xdp_xmit & I40E_XDP_REDIR)
2435+
xdp_do_flush_map();
2436+
2437+
if (xdp_xmit & I40E_XDP_TX) {
24312438
struct i40e_ring *xdp_ring =
24322439
rx_ring->vsi->xdp_rings[rx_ring->queue_index];
24332440

24342441
i40e_xdp_ring_update_tail(xdp_ring);
2435-
xdp_do_flush_map();
24362442
}
24372443

24382444
rx_ring->skb = skb;

drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2186,9 +2186,10 @@ static struct sk_buff *ixgbe_build_skb(struct ixgbe_ring *rx_ring,
21862186
return skb;
21872187
}
21882188

2189-
#define IXGBE_XDP_PASS 0
2190-
#define IXGBE_XDP_CONSUMED 1
2191-
#define IXGBE_XDP_TX 2
2189+
#define IXGBE_XDP_PASS 0
2190+
#define IXGBE_XDP_CONSUMED BIT(0)
2191+
#define IXGBE_XDP_TX BIT(1)
2192+
#define IXGBE_XDP_REDIR BIT(2)
21922193

21932194
static int ixgbe_xmit_xdp_ring(struct ixgbe_adapter *adapter,
21942195
struct xdp_frame *xdpf);
@@ -2225,7 +2226,7 @@ static struct sk_buff *ixgbe_run_xdp(struct ixgbe_adapter *adapter,
22252226
case XDP_REDIRECT:
22262227
err = xdp_do_redirect(adapter->netdev, xdp, xdp_prog);
22272228
if (!err)
2228-
result = IXGBE_XDP_TX;
2229+
result = IXGBE_XDP_REDIR;
22292230
else
22302231
result = IXGBE_XDP_CONSUMED;
22312232
break;
@@ -2285,7 +2286,7 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
22852286
unsigned int mss = 0;
22862287
#endif /* IXGBE_FCOE */
22872288
u16 cleaned_count = ixgbe_desc_unused(rx_ring);
2288-
bool xdp_xmit = false;
2289+
unsigned int xdp_xmit = 0;
22892290
struct xdp_buff xdp;
22902291

22912292
xdp.rxq = &rx_ring->xdp_rxq;
@@ -2328,8 +2329,10 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
23282329
}
23292330

23302331
if (IS_ERR(skb)) {
2331-
if (PTR_ERR(skb) == -IXGBE_XDP_TX) {
2332-
xdp_xmit = true;
2332+
unsigned int xdp_res = -PTR_ERR(skb);
2333+
2334+
if (xdp_res & (IXGBE_XDP_TX | IXGBE_XDP_REDIR)) {
2335+
xdp_xmit |= xdp_res;
23332336
ixgbe_rx_buffer_flip(rx_ring, rx_buffer, size);
23342337
} else {
23352338
rx_buffer->pagecnt_bias++;
@@ -2401,16 +2404,17 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
24012404
total_rx_packets++;
24022405
}
24032406

2404-
if (xdp_xmit) {
2407+
if (xdp_xmit & IXGBE_XDP_REDIR)
2408+
xdp_do_flush_map();
2409+
2410+
if (xdp_xmit & IXGBE_XDP_TX) {
24052411
struct ixgbe_ring *ring = adapter->xdp_ring[smp_processor_id()];
24062412

24072413
/* Force memory writes to complete before letting h/w
24082414
* know there are new descriptors to fetch.
24092415
*/
24102416
wmb();
24112417
writel(ring->next_to_use, ring->tail);
2412-
2413-
xdp_do_flush_map();
24142418
}
24152419

24162420
u64_stats_update_begin(&rx_ring->syncp);

0 commit comments

Comments
 (0)