~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/netpoll.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 /*
  3  * Common code for low-level network console, dump, and debugger code
  4  *
  5  * Derived from netconsole, kgdb-over-ethernet, and netdump patches
  6  */
  7 
  8 #ifndef _LINUX_NETPOLL_H
  9 #define _LINUX_NETPOLL_H
 10 
 11 #include <linux/netdevice.h>
 12 #include <linux/interrupt.h>
 13 #include <linux/rcupdate.h>
 14 #include <linux/list.h>
 15 #include <linux/refcount.h>
 16 
 17 union inet_addr {
 18         __u32           all[4];
 19         __be32          ip;
 20         __be32          ip6[4];
 21         struct in_addr  in;
 22         struct in6_addr in6;
 23 };
 24 
 25 struct netpoll {
 26         struct net_device *dev;
 27         netdevice_tracker dev_tracker;
 28         char dev_name[IFNAMSIZ];
 29         const char *name;
 30 
 31         union inet_addr local_ip, remote_ip;
 32         bool ipv6;
 33         u16 local_port, remote_port;
 34         u8 remote_mac[ETH_ALEN];
 35 };
 36 
 37 struct netpoll_info {
 38         refcount_t refcnt;
 39 
 40         struct semaphore dev_lock;
 41 
 42         struct sk_buff_head txq;
 43 
 44         struct delayed_work tx_work;
 45 
 46         struct netpoll *netpoll;
 47         struct rcu_head rcu;
 48 };
 49 
 50 #ifdef CONFIG_NETPOLL
 51 void netpoll_poll_dev(struct net_device *dev);
 52 void netpoll_poll_disable(struct net_device *dev);
 53 void netpoll_poll_enable(struct net_device *dev);
 54 #else
 55 static inline void netpoll_poll_disable(struct net_device *dev) { return; }
 56 static inline void netpoll_poll_enable(struct net_device *dev) { return; }
 57 #endif
 58 
 59 void netpoll_send_udp(struct netpoll *np, const char *msg, int len);
 60 void netpoll_print_options(struct netpoll *np);
 61 int netpoll_parse_options(struct netpoll *np, char *opt);
 62 int __netpoll_setup(struct netpoll *np, struct net_device *ndev);
 63 int netpoll_setup(struct netpoll *np);
 64 void __netpoll_cleanup(struct netpoll *np);
 65 void __netpoll_free(struct netpoll *np);
 66 void netpoll_cleanup(struct netpoll *np);
 67 netdev_tx_t netpoll_send_skb(struct netpoll *np, struct sk_buff *skb);
 68 
 69 #ifdef CONFIG_NETPOLL
 70 static inline void *netpoll_poll_lock(struct napi_struct *napi)
 71 {
 72         struct net_device *dev = napi->dev;
 73 
 74         if (dev && dev->npinfo) {
 75                 int owner = smp_processor_id();
 76 
 77                 while (cmpxchg(&napi->poll_owner, -1, owner) != -1)
 78                         cpu_relax();
 79 
 80                 return napi;
 81         }
 82         return NULL;
 83 }
 84 
 85 static inline void netpoll_poll_unlock(void *have)
 86 {
 87         struct napi_struct *napi = have;
 88 
 89         if (napi)
 90                 smp_store_release(&napi->poll_owner, -1);
 91 }
 92 
 93 static inline bool netpoll_tx_running(struct net_device *dev)
 94 {
 95         return irqs_disabled();
 96 }
 97 
 98 #else
 99 static inline void *netpoll_poll_lock(struct napi_struct *napi)
100 {
101         return NULL;
102 }
103 static inline void netpoll_poll_unlock(void *have)
104 {
105 }
106 static inline bool netpoll_tx_running(struct net_device *dev)
107 {
108         return false;
109 }
110 #endif
111 
112 #endif
113 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php