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

generic.h (1175B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * generic net pointers
      4 */
      5
      6#ifndef __NET_GENERIC_H__
      7#define __NET_GENERIC_H__
      8
      9#include <linux/bug.h>
     10#include <linux/rcupdate.h>
     11
     12/*
     13 * Generic net pointers are to be used by modules to put some private
     14 * stuff on the struct net without explicit struct net modification
     15 *
     16 * The rules are simple:
     17 * 1. set pernet_operations->id.  After register_pernet_device you
     18 *    will have the id of your private pointer.
     19 * 2. set pernet_operations->size to have the code allocate and free
     20 *    a private structure pointed to from struct net.
     21 * 3. do not change this pointer while the net is alive;
     22 * 4. do not try to have any private reference on the net_generic object.
     23 *
     24 * After accomplishing all of the above, the private pointer can be
     25 * accessed with the net_generic() call.
     26 */
     27
     28struct net_generic {
     29	union {
     30		struct {
     31			unsigned int len;
     32			struct rcu_head rcu;
     33		} s;
     34
     35		void *ptr[0];
     36	};
     37};
     38
     39static inline void *net_generic(const struct net *net, unsigned int id)
     40{
     41	struct net_generic *ng;
     42	void *ptr;
     43
     44	rcu_read_lock();
     45	ng = rcu_dereference(net->gen);
     46	ptr = ng->ptr[id];
     47	rcu_read_unlock();
     48
     49	return ptr;
     50}
     51#endif