tun.c (954b3c4397792c8614aa4aaf25030ae87ece8307) tun.c (1efba987c48629c0c64703bb4ea76ca1a3771d17)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * TUN - Universal TUN/TAP device driver.
4 * Copyright (C) 1999-2002 Maxim Krasnyansky <maxk@qualcomm.com>
5 *
6 * $Id: tun.c,v 1.15 2002/03/01 02:44:24 maxk Exp $
7 */
8

--- 1704 unchanged lines hidden (view full) ---

1713 if (act == XDP_REDIRECT || act == XDP_TX) {
1714 get_page(alloc_frag->page);
1715 alloc_frag->offset += buflen;
1716 }
1717 err = tun_xdp_act(tun, xdp_prog, &xdp, act);
1718 if (err < 0)
1719 goto err_xdp;
1720 if (err == XDP_REDIRECT)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * TUN - Universal TUN/TAP device driver.
4 * Copyright (C) 1999-2002 Maxim Krasnyansky <maxk@qualcomm.com>
5 *
6 * $Id: tun.c,v 1.15 2002/03/01 02:44:24 maxk Exp $
7 */
8

--- 1704 unchanged lines hidden (view full) ---

1713 if (act == XDP_REDIRECT || act == XDP_TX) {
1714 get_page(alloc_frag->page);
1715 alloc_frag->offset += buflen;
1716 }
1717 err = tun_xdp_act(tun, xdp_prog, &xdp, act);
1718 if (err < 0)
1719 goto err_xdp;
1720 if (err == XDP_REDIRECT)
1721 xdp_do_flush();
1721 xdp_do_flush_map();
1722 if (err != XDP_PASS)
1723 goto out;
1724
1725 pad = xdp.data - xdp.data_hard_start;
1726 len = xdp.data_end - xdp.data;
1727 }
1728 rcu_read_unlock();
1729 local_bh_enable();

--- 201 unchanged lines hidden (view full) ---

1931 local_bh_disable();
1932 rcu_read_lock();
1933 xdp_prog = rcu_dereference(tun->xdp_prog);
1934 if (xdp_prog) {
1935 ret = do_xdp_generic(xdp_prog, skb);
1936 if (ret != XDP_PASS) {
1937 rcu_read_unlock();
1938 local_bh_enable();
1722 if (err != XDP_PASS)
1723 goto out;
1724
1725 pad = xdp.data - xdp.data_hard_start;
1726 len = xdp.data_end - xdp.data;
1727 }
1728 rcu_read_unlock();
1729 local_bh_enable();

--- 201 unchanged lines hidden (view full) ---

1931 local_bh_disable();
1932 rcu_read_lock();
1933 xdp_prog = rcu_dereference(tun->xdp_prog);
1934 if (xdp_prog) {
1935 ret = do_xdp_generic(xdp_prog, skb);
1936 if (ret != XDP_PASS) {
1937 rcu_read_unlock();
1938 local_bh_enable();
1939 if (frags) {
1940 tfile->napi.skb = NULL;
1941 mutex_unlock(&tfile->napi_mutex);
1942 }
1939 return total_len;
1940 }
1941 }
1942 rcu_read_unlock();
1943 local_bh_enable();
1944 }
1945
1946 /* Compute the costly rx hash only if needed for flow updates.

--- 597 unchanged lines hidden (view full) ---

2544 rcu_read_lock();
2545
2546 for (i = 0; i < n; i++) {
2547 xdp = &((struct xdp_buff *)ctl->ptr)[i];
2548 tun_xdp_one(tun, tfile, xdp, &flush, &tpage);
2549 }
2550
2551 if (flush)
1943 return total_len;
1944 }
1945 }
1946 rcu_read_unlock();
1947 local_bh_enable();
1948 }
1949
1950 /* Compute the costly rx hash only if needed for flow updates.

--- 597 unchanged lines hidden (view full) ---

2548 rcu_read_lock();
2549
2550 for (i = 0; i < n; i++) {
2551 xdp = &((struct xdp_buff *)ctl->ptr)[i];
2552 tun_xdp_one(tun, tfile, xdp, &flush, &tpage);
2553 }
2554
2555 if (flush)
2552 xdp_do_flush();
2556 xdp_do_flush_map();
2553
2554 rcu_read_unlock();
2555 local_bh_enable();
2556
2557 tun_put_page(&tpage);
2558
2559 ret = total_len;
2560 goto out;

--- 1186 unchanged lines hidden ---
2557
2558 rcu_read_unlock();
2559 local_bh_enable();
2560
2561 tun_put_page(&tpage);
2562
2563 ret = total_len;
2564 goto out;

--- 1186 unchanged lines hidden ---