cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

netpoll.h (2485B)


      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
     17union 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
     25struct 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
     37struct 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
     51void netpoll_poll_dev(struct net_device *dev);
     52void netpoll_poll_disable(struct net_device *dev);
     53void netpoll_poll_enable(struct net_device *dev);
     54#else
     55static inline void netpoll_poll_disable(struct net_device *dev) { return; }
     56static inline void netpoll_poll_enable(struct net_device *dev) { return; }
     57#endif
     58
     59void netpoll_send_udp(struct netpoll *np, const char *msg, int len);
     60void netpoll_print_options(struct netpoll *np);
     61int netpoll_parse_options(struct netpoll *np, char *opt);
     62int __netpoll_setup(struct netpoll *np, struct net_device *ndev);
     63int netpoll_setup(struct netpoll *np);
     64void __netpoll_cleanup(struct netpoll *np);
     65void __netpoll_free(struct netpoll *np);
     66void netpoll_cleanup(struct netpoll *np);
     67netdev_tx_t netpoll_send_skb(struct netpoll *np, struct sk_buff *skb);
     68
     69#ifdef CONFIG_NETPOLL
     70static 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
     85static 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
     93static inline bool netpoll_tx_running(struct net_device *dev)
     94{
     95	return irqs_disabled();
     96}
     97
     98#else
     99static inline void *netpoll_poll_lock(struct napi_struct *napi)
    100{
    101	return NULL;
    102}
    103static inline void netpoll_poll_unlock(void *have)
    104{
    105}
    106static inline bool netpoll_tx_running(struct net_device *dev)
    107{
    108	return false;
    109}
    110#endif
    111
    112#endif