__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* memcontrol.h - Memory Controller
 *
 * Copyright IBM Corporation, 2007
 * Author Balbir Singh <[email protected]>
 *
 * Copyright 2007 OpenVZ SWsoft Inc
 * Author: Pavel Emelianov <[email protected]>
 */

#ifndef _LINUX_MEMCONTROL_H
#define _LINUX_MEMCONTROL_H
#include <linux/cgroup.h>
#include <linux/vm_event_item.h>
#include <linux/hardirq.h>
#include <linux/jump_label.h>
#include <linux/kernel.h>
#include <linux/page_counter.h>
#include <linux/vmpressure.h>
#include <linux/eventfd.h>
#include <linux/mm.h>
#include <linux/vmstat.h>
#include <linux/writeback.h>
#include <linux/page-flags.h>
#include <linux/shrinker.h>

struct mem_cgroup;
struct obj_cgroup;
struct page;
struct mm_struct;
struct kmem_cache;

/* Cgroup-specific page state, on top of universal node page state */
enum memcg_stat_item {
	MEMCG_SWAP = NR_VM_NODE_STAT_ITEMS,
	MEMCG_SOCK,
	MEMCG_PERCPU_B,
	MEMCG_VMALLOC,
	MEMCG_KMEM,
	MEMCG_ZSWAP_B,
	MEMCG_ZSWAPPED,
	MEMCG_NR_STAT,
};

enum memcg_memory_event {
	MEMCG_LOW,
	MEMCG_HIGH,
	MEMCG_MAX,
	MEMCG_OOM,
	MEMCG_OOM_KILL,
	MEMCG_OOM_GROUP_KILL,
	MEMCG_SWAP_HIGH,
	MEMCG_SWAP_MAX,
	MEMCG_SWAP_FAIL,
	MEMCG_NR_MEMORY_EVENTS,
};

struct mem_cgroup_reclaim_cookie {
	pg_data_t *pgdat;
	int generation;
};

#ifdef CONFIG_MEMCG

#define MEM_CGROUP_ID_SHIFT	16

struct mem_cgroup_id {
	int id;
	refcount_t ref;
};

struct memcg_vmstats_percpu;
struct memcg1_events_percpu;
struct memcg_vmstats;
struct lruvec_stats_percpu;
struct lruvec_stats;

struct mem_cgroup_reclaim_iter {
	struct mem_cgroup *position;
	/* scan generation, increased every round-trip */
	atomic_t generation;
};

/*
 * per-node information in memory controller.
 */
struct mem_cgroup_per_node {
	/* Keep the read-only fields at the start */
	struct mem_cgroup	*memcg;		/* Back pointer, we cannot */
						/* use container_of	   */

	struct lruvec_stats_percpu __percpu	*lruvec_stats_percpu;
	struct lruvec_stats			*lruvec_stats;
	struct shrinker_info __rcu	*shrinker_info;

#ifdef CONFIG_MEMCG_V1
	/*
	 * Memcg-v1 only stuff in middle as buffer between read mostly fields
	 * and update often fields to avoid false sharing. If v1 stuff is
	 * not present, an explicit padding is needed.
	 */

	struct rb_node		tree_node;	/* RB tree node */
	unsigned long		usage_in_excess;/* Set to the value by which */
						/* the soft limit is exceeded*/
	bool			on_tree;
#else
	CACHELINE_PADDING(_pad1_);
#endif

	/* Fields which get updated often at the end. */
	struct lruvec		lruvec;
	CACHELINE_PADDING(_pad2_);
	unsigned long		lru_zone_size[MAX_NR_ZONES][NR_LRU_LISTS];
	struct mem_cgroup_reclaim_iter	iter;
};

struct mem_cgroup_threshold {
	struct eventfd_ctx *eventfd;
	unsigned long threshold;
};

/* For threshold */
struct mem_cgroup_threshold_ary {
	/* An array index points to threshold just below or equal to usage. */
	int current_threshold;
	/* Size of entries[] */
	unsigned int size;
	/* Array of thresholds */
	struct mem_cgroup_threshold entries[] __counted_by(size);
};

struct mem_cgroup_thresholds {
	/* Primary thresholds array */
	struct mem_cgroup_threshold_ary *primary;
	/*
	 * Spare threshold array.
	 * This is needed to make mem_cgroup_unregister_event() "never fail".
	 * It must be able to store at least primary->size - 1 entries.
	 */
	struct mem_cgroup_threshold_ary *spare;
};

/*
 * Remember four most recent foreign writebacks with dirty pages in this
 * cgroup.  Inode sharing is expected to be uncommon and, even if we miss
 * one in a given round, we're likely to catch it later if it keeps
 * foreign-dirtying, so a fairly low count should be enough.
 *
 * See mem_cgroup_track_foreign_dirty_slowpath() for details.
 */
#define MEMCG_CGWB_FRN_CNT	4

struct memcg_cgwb_frn {
	u64 bdi_id;			/* bdi->id of the foreign inode */
	int memcg_id;			/* memcg->css.id of foreign inode */
	u64 at;				/* jiffies_64 at the time of dirtying */
	struct wb_completion done;	/* tracks in-flight foreign writebacks */
};

/*
 * Bucket for arbitrarily byte-sized objects charged to a memory
 * cgroup. The bucket can be reparented in one piece when the cgroup
 * is destroyed, without having to round up the individual references
 * of all live memory objects in the wild.
 */
struct obj_cgroup {
	struct percpu_ref refcnt;
	struct mem_cgroup *memcg;
	atomic_t nr_charged_bytes;
	union {
		struct list_head list; /* protected by objcg_lock */
		struct rcu_head rcu;
	};
};

/*
 * The memory controller data structure. The memory controller controls both
 * page cache and RSS per cgroup. We would eventually like to provide
 * statistics based on the statistics developed by Rik Van Riel for clock-pro,
 * to help the administrator determine what knobs to tune.
 */
struct mem_cgroup {
	struct cgroup_subsys_state css;

	/* Private memcg ID. Used to ID objects that outlive the cgroup */
	struct mem_cgroup_id id;

	/* Accounted resources */
	struct page_counter memory;		/* Both v1 & v2 */

	union {
		struct page_counter swap;	/* v2 only */
		struct page_counter memsw;	/* v1 only */
	};

	/* registered local peak watchers */
	struct list_head memory_peaks;
	struct list_head swap_peaks;
	spinlock_t	 peaks_lock;

	/* Range enforcement for interrupt charges */
	struct work_struct high_work;

#ifdef CONFIG_ZSWAP
	unsigned long zswap_max;

	/*
	 * Prevent pages from this memcg from being written back from zswap to
	 * swap, and from being swapped out on zswap store failures.
	 */
	bool zswap_writeback;
#endif

	/* vmpressure notifications */
	struct vmpressure vmpressure;

	/*
	 * Should the OOM killer kill all belonging tasks, had it kill one?
	 */
	bool oom_group;

	int swappiness;

	/* memory.events and memory.events.local */
	struct cgroup_file events_file;
	struct cgroup_file events_local_file;

	/* handle for "memory.swap.events" */
	struct cgroup_file swap_events_file;

	/* memory.stat */
	struct memcg_vmstats	*vmstats;

	/* memory.events */
	atomic_long_t		memory_events[MEMCG_NR_MEMORY_EVENTS];
	atomic_long_t		memory_events_local[MEMCG_NR_MEMORY_EVENTS];

	/*
	 * Hint of reclaim pressure for socket memroy management. Note
	 * that this indicator should NOT be used in legacy cgroup mode
	 * where socket memory is accounted/charged separately.
	 */
	unsigned long		socket_pressure;

	int kmemcg_id;
	/*
	 * memcg->objcg is wiped out as a part of the objcg repaprenting
	 * process. memcg->orig_objcg preserves a pointer (and a reference)
	 * to the original objcg until the end of live of memcg.
	 */
	struct obj_cgroup __rcu	*objcg;
	struct obj_cgroup	*orig_objcg;
	/* list of inherited objcgs, protected by objcg_lock */
	struct list_head objcg_list;

	struct memcg_vmstats_percpu __percpu *vmstats_percpu;

#ifdef CONFIG_CGROUP_WRITEBACK
	struct list_head cgwb_list;
	struct wb_domain cgwb_domain;
	struct memcg_cgwb_frn cgwb_frn[MEMCG_CGWB_FRN_CNT];
#endif

#ifdef CONFIG_TRANSPARENT_HUGEPAGE
	struct deferred_split deferred_split_queue;
#endif

#ifdef CONFIG_LRU_GEN_WALKS_MMU
	/* per-memcg mm_struct list */
	struct lru_gen_mm_list mm_list;
#endif

#ifdef CONFIG_MEMCG_V1
	/* Legacy consumer-oriented counters */
	struct page_counter kmem;		/* v1 only */
	struct page_counter tcpmem;		/* v1 only */

	struct memcg1_events_percpu __percpu *events_percpu;

	unsigned long soft_limit;

	/* protected by memcg_oom_lock */
	bool oom_lock;
	int under_oom;

	/* OOM-Killer disable */
	int oom_kill_disable;

	/* protect arrays of thresholds */
	struct mutex thresholds_lock;

	/* thresholds for memory usage. RCU-protected */
	struct mem_cgroup_thresholds thresholds;

	/* thresholds for mem+swap usage. RCU-protected */
	struct mem_cgroup_thresholds memsw_thresholds;

	/* For oom notifier event fd */
	struct list_head oom_notify;

	/* Legacy tcp memory accounting */
	bool tcpmem_active;
	int tcpmem_pressure;

	/* List of events which userspace want to receive */
	struct list_head event_list;
	spinlock_t event_list_lock;
#endif /* CONFIG_MEMCG_V1 */

	struct mem_cgroup_per_node *nodeinfo[];
};

/*
 * size of first charge trial.
 * TODO: maybe necessary to use big numbers in big irons or dynamic based of the
 * workload.
 */
#define MEMCG_CHARGE_BATCH 64U

extern struct mem_cgroup *root_mem_cgroup;

enum page_memcg_data_flags {
	/* page->memcg_data is a pointer to an slabobj_ext vector */
	MEMCG_DATA_OBJEXTS = (1UL << 0),
	/* page has been accounted as a non-slab kernel page */
	MEMCG_DATA_KMEM = (1UL << 1),
	/* the next bit after the last actual flag */
	__NR_MEMCG_DATA_FLAGS  = (1UL << 2),
};

#define __FIRST_OBJEXT_FLAG	__NR_MEMCG_DATA_FLAGS

#else /* CONFIG_MEMCG */

#define __FIRST_OBJEXT_FLAG	(1UL << 0)

#endif /* CONFIG_MEMCG */

enum objext_flags {
	/* slabobj_ext vector failed to allocate */
	OBJEXTS_ALLOC_FAIL = __FIRST_OBJEXT_FLAG,
	/* the next bit after the last actual flag */
	__NR_OBJEXTS_FLAGS  = (__FIRST_OBJEXT_FLAG << 1),
};

#define OBJEXTS_FLAGS_MASK (__NR_OBJEXTS_FLAGS - 1)

#ifdef CONFIG_MEMCG

static inline bool folio_memcg_kmem(struct folio *folio);

/*
 * After the initialization objcg->memcg is always pointing at
 * a valid memcg, but can be atomically swapped to the parent memcg.
 *
 * The caller must ensure that the returned memcg won't be released.
 */
static inline struct mem_cgroup *obj_cgroup_memcg(struct obj_cgroup *objcg)
{
	lockdep_assert_once(rcu_read_lock_held() || lockdep_is_held(&cgroup_mutex));
	return READ_ONCE(objcg->memcg);
}

/*
 * __folio_memcg - Get the memory cgroup associated with a non-kmem folio
 * @folio: Pointer to the folio.
 *
 * Returns a pointer to the memory cgroup associated with the folio,
 * or NULL. This function assumes that the folio is known to have a
 * proper memory cgroup pointer. It's not safe to call this function
 * against some type of folios, e.g. slab folios or ex-slab folios or
 * kmem folios.
 */
static inline struct mem_cgroup *__folio_memcg(struct folio *folio)
{
	unsigned long memcg_data = folio->memcg_data;

	VM_BUG_ON_FOLIO(folio_test_slab(folio), folio);
	VM_BUG_ON_FOLIO(memcg_data & MEMCG_DATA_OBJEXTS, folio);
	VM_BUG_ON_FOLIO(memcg_data & MEMCG_DATA_KMEM, folio);

	return (struct mem_cgroup *)(memcg_data & ~OBJEXTS_FLAGS_MASK);
}

/*
 * __folio_objcg - get the object cgroup associated with a kmem folio.
 * @folio: Pointer to the folio.
 *
 * Returns a pointer to the object cgroup associated with the folio,
 * or NULL. This function assumes that the folio is known to have a
 * proper object cgroup pointer. It's not safe to call this function
 * against some type of folios, e.g. slab folios or ex-slab folios or
 * LRU folios.
 */
static inline struct obj_cgroup *__folio_objcg(struct folio *folio)
{
	unsigned long memcg_data = folio->memcg_data;

	VM_BUG_ON_FOLIO(folio_test_slab(folio), folio);
	VM_BUG_ON_FOLIO(memcg_data & MEMCG_DATA_OBJEXTS, folio);
	VM_BUG_ON_FOLIO(!(memcg_data & MEMCG_DATA_KMEM), folio);

	return (struct obj_cgroup *)(memcg_data & ~OBJEXTS_FLAGS_MASK);
}

/*
 * folio_memcg - Get the memory cgroup associated with a folio.
 * @folio: Pointer to the folio.
 *
 * Returns a pointer to the memory cgroup associated with the folio,
 * or NULL. This function assumes that the folio is known to have a
 * proper memory cgroup pointer. It's not safe to call this function
 * against some type of folios, e.g. slab folios or ex-slab folios.
 *
 * For a non-kmem folio any of the following ensures folio and memcg binding
 * stability:
 *
 * - the folio lock
 * - LRU isolation
 * - exclusive reference
 *
 * For a kmem folio a caller should hold an rcu read lock to protect memcg
 * associated with a kmem folio from being released.
 */
static inline struct mem_cgroup *folio_memcg(struct folio *folio)
{
	if (folio_memcg_kmem(folio))
		return obj_cgroup_memcg(__folio_objcg(folio));
	return __folio_memcg(folio);
}

/*
 * folio_memcg_charged - If a folio is charged to a memory cgroup.
 * @folio: Pointer to the folio.
 *
 * Returns true if folio is charged to a memory cgroup, otherwise returns false.
 */
static inline bool folio_memcg_charged(struct folio *folio)
{
	if (folio_memcg_kmem(folio))
		return __folio_objcg(folio) != NULL;
	return __folio_memcg(folio) != NULL;
}

/*
 * folio_memcg_check - Get the memory cgroup associated with a folio.
 * @folio: Pointer to the folio.
 *
 * Returns a pointer to the memory cgroup associated with the folio,
 * or NULL. This function unlike folio_memcg() can take any folio
 * as an argument. It has to be used in cases when it's not known if a folio
 * has an associated memory cgroup pointer or an object cgroups vector or
 * an object cgroup.
 *
 * For a non-kmem folio any of the following ensures folio and memcg binding
 * stability:
 *
 * - the folio lock
 * - LRU isolation
 * - exclusive reference
 *
 * For a kmem folio a caller should hold an rcu read lock to protect memcg
 * associated with a kmem folio from being released.
 */
static inline struct mem_cgroup *folio_memcg_check(struct folio *folio)
{
	/*
	 * Because folio->memcg_data might be changed asynchronously
	 * for slabs, READ_ONCE() should be used here.
	 */
	unsigned long memcg_data = READ_ONCE(folio->memcg_data);

	if (memcg_data & MEMCG_DATA_OBJEXTS)
		return NULL;

	if (memcg_data & MEMCG_DATA_KMEM) {
		struct obj_cgroup *objcg;

		objcg = (void *)(memcg_data & ~OBJEXTS_FLAGS_MASK);
		return obj_cgroup_memcg(objcg);
	}

	return (struct mem_cgroup *)(memcg_data & ~OBJEXTS_FLAGS_MASK);
}

static inline struct mem_cgroup *page_memcg_check(struct page *page)
{
	if (PageTail(page))
		return NULL;
	return folio_memcg_check((struct folio *)page);
}

static inline struct mem_cgroup *get_mem_cgroup_from_objcg(struct obj_cgroup *objcg)
{
	struct mem_cgroup *memcg;

	rcu_read_lock();
retry:
	memcg = obj_cgroup_memcg(objcg);
	if (unlikely(!css_tryget(&memcg->css)))
		goto retry;
	rcu_read_unlock();

	return memcg;
}

/*
 * folio_memcg_kmem - Check if the folio has the memcg_kmem flag set.
 * @folio: Pointer to the folio.
 *
 * Checks if the folio has MemcgKmem flag set. The caller must ensure
 * that the folio has an associated memory cgroup. It's not safe to call
 * this function against some types of folios, e.g. slab folios.
 */
static inline bool folio_memcg_kmem(struct folio *folio)
{
	VM_BUG_ON_PGFLAGS(PageTail(&folio->page), &folio->page);
	VM_BUG_ON_FOLIO(folio->memcg_data & MEMCG_DATA_OBJEXTS, folio);
	return folio->memcg_data & MEMCG_DATA_KMEM;
}

static inline bool PageMemcgKmem(struct page *page)
{
	return folio_memcg_kmem(page_folio(page));
}

static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)
{
	return (memcg == root_mem_cgroup);
}

static inline bool mem_cgroup_disabled(void)
{
	return !cgroup_subsys_enabled(memory_cgrp_subsys);
}

static inline void mem_cgroup_protection(struct mem_cgroup *root,
					 struct mem_cgroup *memcg,
					 unsigned long *min,
					 unsigned long *low)
{
	*min = *low = 0;

	if (mem_cgroup_disabled())
		return;

	/*
	 * There is no reclaim protection applied to a targeted reclaim.
	 * We are special casing this specific case here because
	 * mem_cgroup_calculate_protection is not robust enough to keep
	 * the protection invariant for calculated effective values for
	 * parallel reclaimers with different reclaim target. This is
	 * especially a problem for tail memcgs (as they have pages on LRU)
	 * which would want to have effective values 0 for targeted reclaim
	 * but a different value for external reclaim.
	 *
	 * Example
	 * Let's have global and A's reclaim in parallel:
	 *  |
	 *  A (low=2G, usage = 3G, max = 3G, children_low_usage = 1.5G)
	 *  |\
	 *  | C (low = 1G, usage = 2.5G)
	 *  B (low = 1G, usage = 0.5G)
	 *
	 * For the global reclaim
	 * A.elow = A.low
	 * B.elow = min(B.usage, B.low) because children_low_usage <= A.elow
	 * C.elow = min(C.usage, C.low)
	 *
	 * With the effective values resetting we have A reclaim
	 * A.elow = 0
	 * B.elow = B.low
	 * C.elow = C.low
	 *
	 * If the global reclaim races with A's reclaim then
	 * B.elow = C.elow = 0 because children_low_usage > A.elow)
	 * is possible and reclaiming B would be violating the protection.
	 *
	 */
	if (root == memcg)
		return;

	*min = READ_ONCE(memcg->memory.emin);
	*low = READ_ONCE(memcg->memory.elow);
}

void mem_cgroup_calculate_protection(struct mem_cgroup *root,
				     struct mem_cgroup *memcg);

static inline bool mem_cgroup_unprotected(struct mem_cgroup *target,
					  struct mem_cgroup *memcg)
{
	/*
	 * The root memcg doesn't account charges, and doesn't support
	 * protection. The target memcg's protection is ignored, see
	 * mem_cgroup_calculate_protection() and mem_cgroup_protection()
	 */
	return mem_cgroup_disabled() || mem_cgroup_is_root(memcg) ||
		memcg == target;
}

static inline bool mem_cgroup_below_low(struct mem_cgroup *target,
					struct mem_cgroup *memcg)
{
	if (mem_cgroup_unprotected(target, memcg))
		return false;

	return READ_ONCE(memcg->memory.elow) >=
		page_counter_read(&memcg->memory);
}

static inline bool mem_cgroup_below_min(struct mem_cgroup *target,
					struct mem_cgroup *memcg)
{
	if (mem_cgroup_unprotected(target, memcg))
		return false;

	return READ_ONCE(memcg->memory.emin) >=
		page_counter_read(&memcg->memory);
}

int __mem_cgroup_charge(struct folio *folio, struct mm_struct *mm, gfp_t gfp);

/**
 * mem_cgroup_charge - Charge a newly allocated folio to a cgroup.
 * @folio: Folio to charge.
 * @mm: mm context of the allocating task.
 * @gfp: Reclaim mode.
 *
 * Try to charge @folio to the memcg that @mm belongs to, reclaiming
 * pages according to @gfp if necessary.  If @mm is NULL, try to
 * charge to the active memcg.
 *
 * Do not use this for folios allocated for swapin.
 *
 * Return: 0 on success. Otherwise, an error code is returned.
 */
static inline int mem_cgroup_charge(struct folio *folio, struct mm_struct *mm,
				    gfp_t gfp)
{
	if (mem_cgroup_disabled())
		return 0;
	return __mem_cgroup_charge(folio, mm, gfp);
}

int mem_cgroup_charge_hugetlb(struct folio* folio, gfp_t gfp);

int mem_cgroup_swapin_charge_folio(struct folio *folio, struct mm_struct *mm,
				  gfp_t gfp, swp_entry_t entry);

void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry, unsigned int nr_pages);

void __mem_cgroup_uncharge(struct folio *folio);

/**
 * mem_cgroup_uncharge - Uncharge a folio.
 * @folio: Folio to uncharge.
 *
 * Uncharge a folio previously charged with mem_cgroup_charge().
 */
static inline void mem_cgroup_uncharge(struct folio *folio)
{
	if (mem_cgroup_disabled())
		return;
	__mem_cgroup_uncharge(folio);
}

void __mem_cgroup_uncharge_folios(struct folio_batch *folios);
static inline void mem_cgroup_uncharge_folios(struct folio_batch *folios)
{
	if (mem_cgroup_disabled())
		return;
	__mem_cgroup_uncharge_folios(folios);
}

void mem_cgroup_replace_folio(struct folio *old, struct folio *new);
void mem_cgroup_migrate(struct folio *old, struct folio *new);

/**
 * mem_cgroup_lruvec - get the lru list vector for a memcg & node
 * @memcg: memcg of the wanted lruvec
 * @pgdat: pglist_data
 *
 * Returns the lru list vector holding pages for a given @memcg &
 * @pgdat combination. This can be the node lruvec, if the memory
 * controller is disabled.
 */
static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,
					       struct pglist_data *pgdat)
{
	struct mem_cgroup_per_node *mz;
	struct lruvec *lruvec;

	if (mem_cgroup_disabled()) {
		lruvec = &pgdat->__lruvec;
		goto out;
	}

	if (!memcg)
		memcg = root_mem_cgroup;

	mz = memcg->nodeinfo[pgdat->node_id];
	lruvec = &mz->lruvec;
out:
	/*
	 * Since a node can be onlined after the mem_cgroup was created,
	 * we have to be prepared to initialize lruvec->pgdat here;
	 * and if offlined then reonlined, we need to reinitialize it.
	 */
	if (unlikely(lruvec->pgdat != pgdat))
		lruvec->pgdat = pgdat;
	return lruvec;
}

/**
 * folio_lruvec - return lruvec for isolating/putting an LRU folio
 * @folio: Pointer to the folio.
 *
 * This function relies on folio->mem_cgroup being stable.
 */
static inline struct lruvec *folio_lruvec(struct folio *folio)
{
	struct mem_cgroup *memcg = folio_memcg(folio);

	VM_WARN_ON_ONCE_FOLIO(!memcg && !mem_cgroup_disabled(), folio);
	return mem_cgroup_lruvec(memcg, folio_pgdat(folio));
}

struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);

struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm);

struct mem_cgroup *get_mem_cgroup_from_current(void);

struct mem_cgroup *get_mem_cgroup_from_folio(struct folio *folio);

struct lruvec *folio_lruvec_lock(struct folio *folio);
struct lruvec *folio_lruvec_lock_irq(struct folio *folio);
struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio,
						unsigned long *flags);

#ifdef CONFIG_DEBUG_VM
void lruvec_memcg_debug(struct lruvec *lruvec, struct folio *folio);
#else
static inline
void lruvec_memcg_debug(struct lruvec *lruvec, struct folio *folio)
{
}
#endif

static inline
struct mem_cgroup *mem_cgroup_from_css(struct cgroup_subsys_state *css){
	return css ? container_of(css, struct mem_cgroup, css) : NULL;
}

static inline bool obj_cgroup_tryget(struct obj_cgroup *objcg)
{
	return percpu_ref_tryget(&objcg->refcnt);
}

static inline void obj_cgroup_get(struct obj_cgroup *objcg)
{
	percpu_ref_get(&objcg->refcnt);
}

static inline void obj_cgroup_get_many(struct obj_cgroup *objcg,
				       unsigned long nr)
{
	percpu_ref_get_many(&objcg->refcnt, nr);
}

static inline void obj_cgroup_put(struct obj_cgroup *objcg)
{
	if (objcg)
		percpu_ref_put(&objcg->refcnt);
}

static inline bool mem_cgroup_tryget(struct mem_cgroup *memcg)
{
	return !memcg || css_tryget(&memcg->css);
}

static inline bool mem_cgroup_tryget_online(struct mem_cgroup *memcg)
{
	return !memcg || css_tryget_online(&memcg->css);
}

static inline void mem_cgroup_put(struct mem_cgroup *memcg)
{
	if (memcg)
		css_put(&memcg->css);
}

#define mem_cgroup_from_counter(counter, member)	\
	container_of(counter, struct mem_cgroup, member)

struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *,
				   struct mem_cgroup *,
				   struct mem_cgroup_reclaim_cookie *);
void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *);
void mem_cgroup_scan_tasks(struct mem_cgroup *memcg,
			   int (*)(struct task_struct *, void *), void *arg);

static inline unsigned short mem_cgroup_id(struct mem_cgroup *memcg)
{
	if (mem_cgroup_disabled())
		return 0;

	return memcg->id.id;
}
struct mem_cgroup *mem_cgroup_from_id(unsigned short id);

#ifdef CONFIG_SHRINKER_DEBUG
static inline unsigned long mem_cgroup_ino(struct mem_cgroup *memcg)
{
	return memcg ? cgroup_ino(memcg->css.cgroup) : 0;
}

struct mem_cgroup *mem_cgroup_get_from_ino(unsigned long ino);
#endif

static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m)
{
	return mem_cgroup_from_css(seq_css(m));
}

static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)
{
	struct mem_cgroup_per_node *mz;

	if (mem_cgroup_disabled())
		return NULL;

	mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
	return mz->memcg;
}

/**
 * parent_mem_cgroup - find the accounting parent of a memcg
 * @memcg: memcg whose parent to find
 *
 * Returns the parent memcg, or NULL if this is the root.
 */
static inline struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg)
{
	return mem_cgroup_from_css(memcg->css.parent);
}

static inline bool mem_cgroup_is_descendant(struct mem_cgroup *memcg,
			      struct mem_cgroup *root)
{
	if (root == memcg)
		return true;
	return cgroup_is_descendant(memcg->css.cgroup, root->css.cgroup);
}

static inline bool mm_match_cgroup(struct mm_struct *mm,
				   struct mem_cgroup *memcg)
{
	struct mem_cgroup *task_memcg;
	bool match = false;

	rcu_read_lock();
	task_memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
	if (task_memcg)
		match = mem_cgroup_is_descendant(task_memcg, memcg);
	rcu_read_unlock();
	return match;
}

struct cgroup_subsys_state *mem_cgroup_css_from_folio(struct folio *folio);
ino_t page_cgroup_ino(struct page *page);

static inline bool mem_cgroup_online(struct mem_cgroup *memcg)
{
	if (mem_cgroup_disabled())
		return true;
	return !!(memcg->css.flags & CSS_ONLINE);
}

void mem_cgroup_update_lru_size(struct lruvec *lruvec, enum lru_list lru,
		int zid, int nr_pages);

static inline
unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec,
		enum lru_list lru, int zone_idx)
{
	struct mem_cgroup_per_node *mz;

	mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
	return READ_ONCE(mz->lru_zone_size[zone_idx][lru]);
}

void mem_cgroup_handle_over_high(gfp_t gfp_mask);

unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg);

unsigned long mem_cgroup_size(struct mem_cgroup *memcg);

void mem_cgroup_print_oom_context(struct mem_cgroup *memcg,
				struct task_struct *p);

void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg);

struct mem_cgroup *mem_cgroup_get_oom_group(struct task_struct *victim,
					    struct mem_cgroup *oom_domain);
void mem_cgroup_print_oom_group(struct mem_cgroup *memcg);

void __mod_memcg_state(struct mem_cgroup *memcg, enum memcg_stat_item idx,
		       int val);

/* idx can be of type enum memcg_stat_item or node_stat_item */
static inline void mod_memcg_state(struct mem_cgroup *memcg,
				   enum memcg_stat_item idx, int val)
{
	unsigned long flags;

	local_irq_save(flags);
	__mod_memcg_state(memcg, idx, val);
	local_irq_restore(flags);
}

static inline void mod_memcg_page_state(struct page *page,
					enum memcg_stat_item idx, int val)
{
	struct mem_cgroup *memcg;

	if (mem_cgroup_disabled())
		return;

	rcu_read_lock();
	memcg = folio_memcg(page_folio(page));
	if (memcg)
		mod_memcg_state(memcg, idx, val);
	rcu_read_unlock();
}

unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx);
unsigned long lruvec_page_state(struct lruvec *lruvec, enum node_stat_item idx);
unsigned long lruvec_page_state_local(struct lruvec *lruvec,
				      enum node_stat_item idx);

void mem_cgroup_flush_stats(struct mem_cgroup *memcg);
void mem_cgroup_flush_stats_ratelimited(struct mem_cgroup *memcg);

void __mod_lruvec_kmem_state(void *p, enum node_stat_item idx, int val);

static inline void mod_lruvec_kmem_state(void *p, enum node_stat_item idx,
					 int val)
{
	unsigned long flags;

	local_irq_save(flags);
	__mod_lruvec_kmem_state(p, idx, val);
	local_irq_restore(flags);
}

void __count_memcg_events(struct mem_cgroup *memcg, enum vm_event_item idx,
			  unsigned long count);

static inline void count_memcg_events(struct mem_cgroup *memcg,
				      enum vm_event_item idx,
				      unsigned long count)
{
	unsigned long flags;

	local_irq_save(flags);
	__count_memcg_events(memcg, idx, count);
	local_irq_restore(flags);
}

static inline void count_memcg_folio_events(struct folio *folio,
		enum vm_event_item idx, unsigned long nr)
{
	struct mem_cgroup *memcg = folio_memcg(folio);

	if (memcg)
		count_memcg_events(memcg, idx, nr);
}

static inline void count_memcg_events_mm(struct mm_struct *mm,
					enum vm_event_item idx, unsigned long count)
{
	struct mem_cgroup *memcg;

	if (mem_cgroup_disabled())
		return;

	rcu_read_lock();
	memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
	if (likely(memcg))
		count_memcg_events(memcg, idx, count);
	rcu_read_unlock();
}

static inline void count_memcg_event_mm(struct mm_struct *mm,
					enum vm_event_item idx)
{
	count_memcg_events_mm(mm, idx, 1);
}

static inline void memcg_memory_event(struct mem_cgroup *memcg,
				      enum memcg_memory_event event)
{
	bool swap_event = event == MEMCG_SWAP_HIGH || event == MEMCG_SWAP_MAX ||
			  event == MEMCG_SWAP_FAIL;

	atomic_long_inc(&memcg->memory_events_local[event]);
	if (!swap_event)
		cgroup_file_notify(&memcg->events_local_file);

	do {
		atomic_long_inc(&memcg->memory_events[event]);
		if (swap_event)
			cgroup_file_notify(&memcg->swap_events_file);
		else
			cgroup_file_notify(&memcg->events_file);

		if (!cgroup_subsys_on_dfl(memory_cgrp_subsys))
			break;
		if (cgrp_dfl_root.flags & CGRP_ROOT_MEMORY_LOCAL_EVENTS)
			break;
	} while ((memcg = parent_mem_cgroup(memcg)) &&
		 !mem_cgroup_is_root(memcg));
}

static inline void memcg_memory_event_mm(struct mm_struct *mm,
					 enum memcg_memory_event event)
{
	struct mem_cgroup *memcg;

	if (mem_cgroup_disabled())
		return;

	rcu_read_lock();
	memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
	if (likely(memcg))
		memcg_memory_event(memcg, event);
	rcu_read_unlock();
}

void split_page_memcg(struct page *head, int old_order, int new_order);

static inline u64 cgroup_id_from_mm(struct mm_struct *mm)
{
	struct mem_cgroup *memcg;
	u64 id;

	if (mem_cgroup_disabled())
		return 0;

	rcu_read_lock();
	memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
	if (!memcg)
		memcg = root_mem_cgroup;
	id = cgroup_id(memcg->css.cgroup);
	rcu_read_unlock();
	return id;
}

#else /* CONFIG_MEMCG */

#define MEM_CGROUP_ID_SHIFT	0

static inline struct mem_cgroup *folio_memcg(struct folio *folio)
{
	return NULL;
}

static inline bool folio_memcg_charged(struct folio *folio)
{
	return false;
}

static inline struct mem_cgroup *folio_memcg_check(struct folio *folio)
{
	return NULL;
}

static inline struct mem_cgroup *page_memcg_check(struct page *page)
{
	return NULL;
}

static inline struct mem_cgroup *get_mem_cgroup_from_objcg(struct obj_cgroup *objcg)
{
	return NULL;
}

static inline bool folio_memcg_kmem(struct folio *folio)
{
	return false;
}

static inline bool PageMemcgKmem(struct page *page)
{
	return false;
}

static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)
{
	return true;
}

static inline bool mem_cgroup_disabled(void)
{
	return true;
}

static inline void memcg_memory_event(struct mem_cgroup *memcg,
				      enum memcg_memory_event event)
{
}

static inline void memcg_memory_event_mm(struct mm_struct *mm,
					 enum memcg_memory_event event)
{
}

static inline void mem_cgroup_protection(struct mem_cgroup *root,
					 struct mem_cgroup *memcg,
					 unsigned long *min,
					 unsigned long *low)
{
	*min = *low = 0;
}

static inline void mem_cgroup_calculate_protection(struct mem_cgroup *root,
						   struct mem_cgroup *memcg)
{
}

static inline bool mem_cgroup_unprotected(struct mem_cgroup *target,
					  struct mem_cgroup *memcg)
{
	return true;
}
static inline bool mem_cgroup_below_low(struct mem_cgroup *target,
					struct mem_cgroup *memcg)
{
	return false;
}

static inline bool mem_cgroup_below_min(struct mem_cgroup *target,
					struct mem_cgroup *memcg)
{
	return false;
}

static inline int mem_cgroup_charge(struct folio *folio,
		struct mm_struct *mm, gfp_t gfp)
{
	return 0;
}

static inline int mem_cgroup_charge_hugetlb(struct folio* folio, gfp_t gfp)
{
        return 0;
}

static inline int mem_cgroup_swapin_charge_folio(struct folio *folio,
			struct mm_struct *mm, gfp_t gfp, swp_entry_t entry)
{
	return 0;
}

static inline void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry, unsigned int nr)
{
}

static inline void mem_cgroup_uncharge(struct folio *folio)
{
}

static inline void mem_cgroup_uncharge_folios(struct folio_batch *folios)
{
}

static inline void mem_cgroup_replace_folio(struct folio *old,
		struct folio *new)
{
}

static inline void mem_cgroup_migrate(struct folio *old, struct folio *new)
{
}

static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,
					       struct pglist_data *pgdat)
{
	return &pgdat->__lruvec;
}

static inline struct lruvec *folio_lruvec(struct folio *folio)
{
	struct pglist_data *pgdat = folio_pgdat(folio);
	return &pgdat->__lruvec;
}

static inline
void lruvec_memcg_debug(struct lruvec *lruvec, struct folio *folio)
{
}

static inline struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg)
{
	return NULL;
}

static inline bool mm_match_cgroup(struct mm_struct *mm,
		struct mem_cgroup *memcg)
{
	return true;
}

static inline struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm)
{
	return NULL;
}

static inline struct mem_cgroup *get_mem_cgroup_from_current(void)
{
	return NULL;
}

static inline struct mem_cgroup *get_mem_cgroup_from_folio(struct folio *folio)
{
	return NULL;
}

static inline
struct mem_cgroup *mem_cgroup_from_css(struct cgroup_subsys_state *css)
{
	return NULL;
}

static inline void obj_cgroup_get(struct obj_cgroup *objcg)
{
}

static inline void obj_cgroup_put(struct obj_cgroup *objcg)
{
}

static inline bool mem_cgroup_tryget(struct mem_cgroup *memcg)
{
	return true;
}

static inline bool mem_cgroup_tryget_online(struct mem_cgroup *memcg)
{
	return true;
}

static inline void mem_cgroup_put(struct mem_cgroup *memcg)
{
}

static inline struct lruvec *folio_lruvec_lock(struct folio *folio)
{
	struct pglist_data *pgdat = folio_pgdat(folio);

	spin_lock(&pgdat->__lruvec.lru_lock);
	return &pgdat->__lruvec;
}

static inline struct lruvec *folio_lruvec_lock_irq(struct folio *folio)
{
	struct pglist_data *pgdat = folio_pgdat(folio);

	spin_lock_irq(&pgdat->__lruvec.lru_lock);
	return &pgdat->__lruvec;
}

static inline struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio,
		unsigned long *flagsp)
{
	struct pglist_data *pgdat = folio_pgdat(folio);

	spin_lock_irqsave(&pgdat->__lruvec.lru_lock, *flagsp);
	return &pgdat->__lruvec;
}

static inline struct mem_cgroup *
mem_cgroup_iter(struct mem_cgroup *root,
		struct mem_cgroup *prev,
		struct mem_cgroup_reclaim_cookie *reclaim)
{
	return NULL;
}

static inline void mem_cgroup_iter_break(struct mem_cgroup *root,
					 struct mem_cgroup *prev)
{
}

static inline void mem_cgroup_scan_tasks(struct mem_cgroup *memcg,
		int (*fn)(struct task_struct *, void *), void *arg)
{
}

static inline unsigned short mem_cgroup_id(struct mem_cgroup *memcg)
{
	return 0;
}

static inline struct mem_cgroup *mem_cgroup_from_id(unsigned short id)
{
	WARN_ON_ONCE(id);
	/* XXX: This should always return root_mem_cgroup */
	return NULL;
}

#ifdef CONFIG_SHRINKER_DEBUG
static inline unsigned long mem_cgroup_ino(struct mem_cgroup *memcg)
{
	return 0;
}

static inline struct mem_cgroup *mem_cgroup_get_from_ino(unsigned long ino)
{
	return NULL;
}
#endif

static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m)
{
	return NULL;
}

static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)
{
	return NULL;
}

static inline bool mem_cgroup_online(struct mem_cgroup *memcg)
{
	return true;
}

static inline
unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec,
		enum lru_list lru, int zone_idx)
{
	return 0;
}

static inline unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg)
{
	return 0;
}

static inline unsigned long mem_cgroup_size(struct mem_cgroup *memcg)
{
	return 0;
}

static inline void
mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p)
{
}

static inline void
mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg)
{
}

static inline void mem_cgroup_handle_over_high(gfp_t gfp_mask)
{
}

static inline struct mem_cgroup *mem_cgroup_get_oom_group(
	struct task_struct *victim, struct mem_cgroup *oom_domain)
{
	return NULL;
}

static inline void mem_cgroup_print_oom_group(struct mem_cgroup *memcg)
{
}

static inline void __mod_memcg_state(struct mem_cgroup *memcg,
				     enum memcg_stat_item idx,
				     int nr)
{
}

static inline void mod_memcg_state(struct mem_cgroup *memcg,
				   enum memcg_stat_item idx,
				   int nr)
{
}

static inline void mod_memcg_page_state(struct page *page,
					enum memcg_stat_item idx, int val)
{
}

static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)
{
	return 0;
}

static inline unsigned long lruvec_page_state(struct lruvec *lruvec,
					      enum node_stat_item idx)
{
	return node_page_state(lruvec_pgdat(lruvec), idx);
}

static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
						    enum node_stat_item idx)
{
	return node_page_state(lruvec_pgdat(lruvec), idx);
}

static inline void mem_cgroup_flush_stats(struct mem_cgroup *memcg)
{
}

static inline void mem_cgroup_flush_stats_ratelimited(struct mem_cgroup *memcg)
{
}

static inline void __mod_lruvec_kmem_state(void *p, enum node_stat_item idx,
					   int val)
{
	struct page *page = virt_to_head_page(p);

	__mod_node_page_state(page_pgdat(page), idx, val);
}

static inline void mod_lruvec_kmem_state(void *p, enum node_stat_item idx,
					 int val)
{
	struct page *page = virt_to_head_page(p);

	mod_node_page_state(page_pgdat(page), idx, val);
}

static inline void count_memcg_events(struct mem_cgroup *memcg,
				      enum vm_event_item idx,
				      unsigned long count)
{
}

static inline void __count_memcg_events(struct mem_cgroup *memcg,
					enum vm_event_item idx,
					unsigned long count)
{
}

static inline void count_memcg_folio_events(struct folio *folio,
		enum vm_event_item idx, unsigned long nr)
{
}

static inline void count_memcg_events_mm(struct mm_struct *mm,
					enum vm_event_item idx, unsigned long count)
{
}

static inline
void count_memcg_event_mm(struct mm_struct *mm, enum vm_event_item idx)
{
}

static inline void split_page_memcg(struct page *head, int old_order, int new_order)
{
}

static inline u64 cgroup_id_from_mm(struct mm_struct *mm)
{
	return 0;
}
#endif /* CONFIG_MEMCG */

/*
 * Extended information for slab objects stored as an array in page->memcg_data
 * if MEMCG_DATA_OBJEXTS is set.
 */
struct slabobj_ext {
#ifdef CONFIG_MEMCG
	struct obj_cgroup *objcg;
#endif
#ifdef CONFIG_MEM_ALLOC_PROFILING
	union codetag_ref ref;
#endif
} __aligned(8);

static inline void __inc_lruvec_kmem_state(void *p, enum node_stat_item idx)
{
	__mod_lruvec_kmem_state(p, idx, 1);
}

static inline void __dec_lruvec_kmem_state(void *p, enum node_stat_item idx)
{
	__mod_lruvec_kmem_state(p, idx, -1);
}

static inline struct lruvec *parent_lruvec(struct lruvec *lruvec)
{
	struct mem_cgroup *memcg;

	memcg = lruvec_memcg(lruvec);
	if (!memcg)
		return NULL;
	memcg = parent_mem_cgroup(memcg);
	if (!memcg)
		return NULL;
	return mem_cgroup_lruvec(memcg, lruvec_pgdat(lruvec));
}

static inline void unlock_page_lruvec(struct lruvec *lruvec)
{
	spin_unlock(&lruvec->lru_lock);
}

static inline void unlock_page_lruvec_irq(struct lruvec *lruvec)
{
	spin_unlock_irq(&lruvec->lru_lock);
}

static inline void unlock_page_lruvec_irqrestore(struct lruvec *lruvec,
		unsigned long flags)
{
	spin_unlock_irqrestore(&lruvec->lru_lock, flags);
}

/* Test requires a stable folio->memcg binding, see folio_memcg() */
static inline bool folio_matches_lruvec(struct folio *folio,
		struct lruvec *lruvec)
{
	return lruvec_pgdat(lruvec) == folio_pgdat(folio) &&
	       lruvec_memcg(lruvec) == folio_memcg(folio);
}

/* Don't lock again iff page's lruvec locked */
static inline struct lruvec *folio_lruvec_relock_irq(struct folio *folio,
		struct lruvec *locked_lruvec)
{
	if (locked_lruvec) {
		if (folio_matches_lruvec(folio, locked_lruvec))
			return locked_lruvec;

		unlock_page_lruvec_irq(locked_lruvec);
	}

	return folio_lruvec_lock_irq(folio);
}

/* Don't lock again iff folio's lruvec locked */
static inline void folio_lruvec_relock_irqsave(struct folio *folio,
		struct lruvec **lruvecp, unsigned long *flags)
{
	if (*lruvecp) {
		if (folio_matches_lruvec(folio, *lruvecp))
			return;

		unlock_page_lruvec_irqrestore(*lruvecp, *flags);
	}

	*lruvecp = folio_lruvec_lock_irqsave(folio, flags);
}

#ifdef CONFIG_CGROUP_WRITEBACK

struct wb_domain *mem_cgroup_wb_domain(struct bdi_writeback *wb);
void mem_cgroup_wb_stats(struct bdi_writeback *wb, unsigned long *pfilepages,
			 unsigned long *pheadroom, unsigned long *pdirty,
			 unsigned long *pwriteback);

void mem_cgroup_track_foreign_dirty_slowpath(struct folio *folio,
					     struct bdi_writeback *wb);

static inline void mem_cgroup_track_foreign_dirty(struct folio *folio,
						  struct bdi_writeback *wb)
{
	struct mem_cgroup *memcg;

	if (mem_cgroup_disabled())
		return;

	memcg = folio_memcg(folio);
	if (unlikely(memcg && &memcg->css != wb->memcg_css))
		mem_cgroup_track_foreign_dirty_slowpath(folio, wb);
}

void mem_cgroup_flush_foreign(struct bdi_writeback *wb);

#else	/* CONFIG_CGROUP_WRITEBACK */

static inline struct wb_domain *mem_cgroup_wb_domain(struct bdi_writeback *wb)
{
	return NULL;
}

static inline void mem_cgroup_wb_stats(struct bdi_writeback *wb,
				       unsigned long *pfilepages,
				       unsigned long *pheadroom,
				       unsigned long *pdirty,
				       unsigned long *pwriteback)
{
}

static inline void mem_cgroup_track_foreign_dirty(struct folio *folio,
						  struct bdi_writeback *wb)
{
}

static inline void mem_cgroup_flush_foreign(struct bdi_writeback *wb)
{
}

#endif	/* CONFIG_CGROUP_WRITEBACK */

struct sock;
bool mem_cgroup_charge_skmem(struct mem_cgroup *memcg, unsigned int nr_pages,
			     gfp_t gfp_mask);
void mem_cgroup_uncharge_skmem(struct mem_cgroup *memcg, unsigned int nr_pages);
#ifdef CONFIG_MEMCG
extern struct static_key_false memcg_sockets_enabled_key;
#define mem_cgroup_sockets_enabled static_branch_unlikely(&memcg_sockets_enabled_key)
void mem_cgroup_sk_alloc(struct sock *sk);
void mem_cgroup_sk_free(struct sock *sk);
static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *memcg)
{
#ifdef CONFIG_MEMCG_V1
	if (!cgroup_subsys_on_dfl(memory_cgrp_subsys))
		return !!memcg->tcpmem_pressure;
#endif /* CONFIG_MEMCG_V1 */
	do {
		if (time_before(jiffies, READ_ONCE(memcg->socket_pressure)))
			return true;
	} while ((memcg = parent_mem_cgroup(memcg)));
	return false;
}

int alloc_shrinker_info(struct mem_cgroup *memcg);
void free_shrinker_info(struct mem_cgroup *memcg);
void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id);
void reparent_shrinker_deferred(struct mem_cgroup *memcg);
#else
#define mem_cgroup_sockets_enabled 0
static inline void mem_cgroup_sk_alloc(struct sock *sk) { };
static inline void mem_cgroup_sk_free(struct sock *sk) { };
static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *memcg)
{
	return false;
}

static inline void set_shrinker_bit(struct mem_cgroup *memcg,
				    int nid, int shrinker_id)
{
}
#endif

#ifdef CONFIG_MEMCG
bool mem_cgroup_kmem_disabled(void);
int __memcg_kmem_charge_page(struct page *page, gfp_t gfp, int order);
void __memcg_kmem_uncharge_page(struct page *page, int order);

/*
 * The returned objcg pointer is safe to use without additional
 * protection within a scope. The scope is defined either by
 * the current task (similar to the "current" global variable)
 * or by set_active_memcg() pair.
 * Please, use obj_cgroup_get() to get a reference if the pointer
 * needs to be used outside of the local scope.
 */
struct obj_cgroup *current_obj_cgroup(void);
struct obj_cgroup *get_obj_cgroup_from_folio(struct folio *folio);

static inline struct obj_cgroup *get_obj_cgroup_from_current(void)
{
	struct obj_cgroup *objcg = current_obj_cgroup();

	if (objcg)
		obj_cgroup_get(objcg);

	return objcg;
}

int obj_cgroup_charge(struct obj_cgroup *objcg, gfp_t gfp, size_t size);
void obj_cgroup_uncharge(struct obj_cgroup *objcg, size_t size);

extern struct static_key_false memcg_bpf_enabled_key;
static inline bool memcg_bpf_enabled(void)
{
	return static_branch_likely(&memcg_bpf_enabled_key);
}

extern struct static_key_false memcg_kmem_online_key;

static inline bool memcg_kmem_online(void)
{
	return static_branch_likely(&memcg_kmem_online_key);
}

static inline int memcg_kmem_charge_page(struct page *page, gfp_t gfp,
					 int order)
{
	if (memcg_kmem_online())
		return __memcg_kmem_charge_page(page, gfp, order);
	return 0;
}

static inline void memcg_kmem_uncharge_page(struct page *page, int order)
{
	if (memcg_kmem_online())
		__memcg_kmem_uncharge_page(page, order);
}

/*
 * A helper for accessing memcg's kmem_id, used for getting
 * corresponding LRU lists.
 */
static inline int memcg_kmem_id(struct mem_cgroup *memcg)
{
	return memcg ? memcg->kmemcg_id : -1;
}

struct mem_cgroup *mem_cgroup_from_slab_obj(void *p);

static inline void count_objcg_events(struct obj_cgroup *objcg,
				      enum vm_event_item idx,
				      unsigned long count)
{
	struct mem_cgroup *memcg;

	if (!memcg_kmem_online())
		return;

	rcu_read_lock();
	memcg = obj_cgroup_memcg(objcg);
	count_memcg_events(memcg, idx, count);
	rcu_read_unlock();
}

#else
static inline bool mem_cgroup_kmem_disabled(void)
{
	return true;
}

static inline int memcg_kmem_charge_page(struct page *page, gfp_t gfp,
					 int order)
{
	return 0;
}

static inline void memcg_kmem_uncharge_page(struct page *page, int order)
{
}

static inline int __memcg_kmem_charge_page(struct page *page, gfp_t gfp,
					   int order)
{
	return 0;
}

static inline void __memcg_kmem_uncharge_page(struct page *page, int order)
{
}

static inline struct obj_cgroup *get_obj_cgroup_from_folio(struct folio *folio)
{
	return NULL;
}

static inline bool memcg_bpf_enabled(void)
{
	return false;
}

static inline bool memcg_kmem_online(void)
{
	return false;
}

static inline int memcg_kmem_id(struct mem_cgroup *memcg)
{
	return -1;
}

static inline struct mem_cgroup *mem_cgroup_from_slab_obj(void *p)
{
	return NULL;
}

static inline void count_objcg_events(struct obj_cgroup *objcg,
				      enum vm_event_item idx,
				      unsigned long count)
{
}

#endif /* CONFIG_MEMCG */

#if defined(CONFIG_MEMCG) && defined(CONFIG_ZSWAP)
bool obj_cgroup_may_zswap(struct obj_cgroup *objcg);
void obj_cgroup_charge_zswap(struct obj_cgroup *objcg, size_t size);
void obj_cgroup_uncharge_zswap(struct obj_cgroup *objcg, size_t size);
bool mem_cgroup_zswap_writeback_enabled(struct mem_cgroup *memcg);
#else
static inline bool obj_cgroup_may_zswap(struct obj_cgroup *objcg)
{
	return true;
}
static inline void obj_cgroup_charge_zswap(struct obj_cgroup *objcg,
					   size_t size)
{
}
static inline void obj_cgroup_uncharge_zswap(struct obj_cgroup *objcg,
					     size_t size)
{
}
static inline bool mem_cgroup_zswap_writeback_enabled(struct mem_cgroup *memcg)
{
	/* if zswap is disabled, do not block pages going to the swapping device */
	return true;
}
#endif


/* Cgroup v1-related declarations */

#ifdef CONFIG_MEMCG_V1
unsigned long memcg1_soft_limit_reclaim(pg_data_t *pgdat, int order,
					gfp_t gfp_mask,
					unsigned long *total_scanned);

bool mem_cgroup_oom_synchronize(bool wait);

static inline bool task_in_memcg_oom(struct task_struct *p)
{
	return p->memcg_in_oom;
}

static inline void mem_cgroup_enter_user_fault(void)
{
	WARN_ON(current->in_user_fault);
	current->in_user_fault = 1;
}

static inline void mem_cgroup_exit_user_fault(void)
{
	WARN_ON(!current->in_user_fault);
	current->in_user_fault = 0;
}

#else /* CONFIG_MEMCG_V1 */
static inline
unsigned long memcg1_soft_limit_reclaim(pg_data_t *pgdat, int order,
					gfp_t gfp_mask,
					unsigned long *total_scanned)
{
	return 0;
}

static inline bool task_in_memcg_oom(struct task_struct *p)
{
	return false;
}

static inline bool mem_cgroup_oom_synchronize(bool wait)
{
	return false;
}

static inline void mem_cgroup_enter_user_fault(void)
{
}

static inline void mem_cgroup_exit_user_fault(void)
{
}

#endif /* CONFIG_MEMCG_V1 */

#endif /* _LINUX_MEMCONTROL_H */

Filemanager

Name Type Size Permission Actions
amba Folder 0755
atomic Folder 0755
avf Folder 0755
bcma Folder 0755
bus Folder 0755
byteorder Folder 0755
can Folder 0755
cdx Folder 0755
ceph Folder 0755
clk Folder 0755
comedi Folder 0755
crush Folder 0755
decompress Folder 0755
device Folder 0755
dma Folder 0755
dsa Folder 0755
extcon Folder 0755
firmware Folder 0755
fpga Folder 0755
framer Folder 0755
fsl Folder 0755
gpio Folder 0755
greybus Folder 0755
habanalabs Folder 0755
hsi Folder 0755
i3c Folder 0755
iio Folder 0755
input Folder 0755
io_uring Folder 0755
irqchip Folder 0755
isdn Folder 0755
lockd Folder 0755
lsm Folder 0755
mailbox Folder 0755
mdio Folder 0755
memory Folder 0755
mfd Folder 0755
misc Folder 0755
mlx4 Folder 0755
mlx5 Folder 0755
mmc Folder 0755
mtd Folder 0755
mux Folder 0755
net Folder 0755
netfilter Folder 0755
netfilter_arp Folder 0755
netfilter_bridge Folder 0755
netfilter_ipv4 Folder 0755
netfilter_ipv6 Folder 0755
pcs Folder 0755
pds Folder 0755
perf Folder 0755
phy Folder 0755
pinctrl Folder 0755
platform_data Folder 0755
power Folder 0755
pse-pd Folder 0755
pwrseq Folder 0755
qat Folder 0755
qed Folder 0755
raid Folder 0755
regulator Folder 0755
remoteproc Folder 0755
reset Folder 0755
rpmsg Folder 0755
rtc Folder 0755
sched Folder 0755
soc Folder 0755
soundwire Folder 0755
spi Folder 0755
ssb Folder 0755
sunrpc Folder 0755
surface_aggregator Folder 0755
ulpi Folder 0755
unaligned Folder 0755
usb Folder 0755
8250_pci.h File 1.01 KB 0644
acct.h File 2.45 KB 0644
acpi.h File 44.88 KB 0644
acpi_amd_wbrf.h File 2.24 KB 0644
acpi_dma.h File 2.95 KB 0644
acpi_iort.h File 2.64 KB 0644
acpi_mdio.h File 819 B 0644
acpi_pmtmr.h File 1.02 KB 0644
acpi_viot.h File 478 B 0644
adb.h File 1.79 KB 0644
adfs_fs.h File 574 B 0644
adreno-smmu-priv.h File 3.15 KB 0644
adxl.h File 310 B 0644
aer.h File 1.49 KB 0644
agp_backend.h File 3.45 KB 0644
agpgart.h File 3.79 KB 0644
ahci-remap.h File 607 B 0644
ahci_platform.h File 1.81 KB 0644
aio.h File 570 B 0644
alarmtimer.h File 1.83 KB 0644
alcor_pci.h File 8.74 KB 0644
align.h File 552 B 0644
alloc_tag.h File 6.4 KB 0644
altera_jtaguart.h File 379 B 0644
altera_uart.h File 397 B 0644
amd-iommu.h File 2.12 KB 0644
amd-pmf-io.h File 1.58 KB 0644
anon_inodes.h File 1021 B 0644
aperture.h File 1.61 KB 0644
apm-emulation.h File 1.56 KB 0644
apm_bios.h File 2.25 KB 0644
apple-gmux.h File 4.63 KB 0644
arch_topology.h File 2.93 KB 0644
args.h File 1021 B 0644
arm-cci.h File 1.39 KB 0644
arm-smccc.h File 20.7 KB 0644
arm_ffa.h File 14.71 KB 0644
arm_sdei.h File 2.67 KB 0644
armada-37xx-rwtm-mailbox.h File 431 B 0644
array_size.h File 332 B 0644
ascii85.h File 555 B 0644
asn1.h File 1.79 KB 0644
asn1_ber_bytecode.h File 2.52 KB 0644
asn1_decoder.h File 493 B 0644
asn1_encoder.h File 983 B 0644
assoc_array.h File 2.88 KB 0644
assoc_array_priv.h File 5.3 KB 0644
async.h File 4.36 KB 0644
async_tx.h File 6.7 KB 0644
ata.h File 30.39 KB 0644
ata_platform.h File 755 B 0644
atalk.h File 4.45 KB 0644
atm.h File 287 B 0644
atm_tcp.h File 542 B 0644
atmdev.h File 10.17 KB 0644
atmel-isc-media.h File 2.07 KB 0644
atmel-ssc.h File 9.74 KB 0644
atmel_pdc.h File 1.26 KB 0644
atomic.h File 2.58 KB 0644
attribute_container.h File 2.47 KB 0644
audit.h File 20.48 KB 0644
audit_arch.h File 559 B 0644
auto_dev-ioctl.h File 296 B 0644
auto_fs.h File 278 B 0644
auxiliary_bus.h File 10.33 KB 0644
auxvec.h File 304 B 0644
average.h File 2.42 KB 0644
backing-dev-defs.h File 8.4 KB 0644
backing-dev.h File 10.41 KB 0644
backing-file.h File 1.51 KB 0644
backlight.h File 11.9 KB 0644
badblocks.h File 2.66 KB 0644
balloon_compaction.h File 6 KB 0644
base64.h File 370 B 0644
bcd.h File 683 B 0644
bch.h File 2.1 KB 0644
bcm47xx_nvram.h File 1.2 KB 0644
bcm47xx_sprom.h File 616 B 0644
bcm47xx_wdt.h File 555 B 0644
bcm963xx_nvram.h File 2.96 KB 0644
bcm963xx_tag.h File 3.6 KB 0644
binfmts.h File 4.63 KB 0644
bio-integrity.h File 4.16 KB 0644
bio.h File 18.01 KB 0644
bit_spinlock.h File 2.3 KB 0644
bitfield.h File 6.39 KB 0644
bitmap-str.h File 842 B 0644
bitmap.h File 29.11 KB 0644
bitops.h File 10.14 KB 0644
bitrev.h File 2.53 KB 0644
bits.h File 1.57 KB 0644
blk-cgroup.h File 1.53 KB 0644
blk-crypto-profile.h File 5.3 KB 0644
blk-crypto.h File 4.13 KB 0644
blk-integrity.h File 3.99 KB 0644
blk-mq.h File 33.72 KB 0644
blk-pm.h File 647 B 0644
blk_types.h File 15.31 KB 0644
blkdev.h File 49.82 KB 0644
blkpg.h File 436 B 0644
blktrace_api.h File 3.55 KB 0644
blockgroup_lock.h File 810 B 0644
bma150.h File 1.25 KB 0644
bootconfig.h File 9.27 KB 0644
bootmem_info.h File 2.04 KB 0644
bottom_half.h File 1013 B 0644
bpf-cgroup-defs.h File 2.07 KB 0644
bpf-cgroup.h File 18.4 KB 0644
bpf-netns.h File 1.41 KB 0644
bpf.h File 110.52 KB 0644
bpf_crypto.h File 865 B 0644
bpf_lirc.h File 698 B 0644
bpf_local_storage.h File 6.61 KB 0644
bpf_lsm.h File 2.01 KB 0644
bpf_mem_alloc.h File 2.05 KB 0644
bpf_mprog.h File 9.29 KB 0644
bpf_trace.h File 166 B 0644
bpf_types.h File 6.1 KB 0644
bpf_verifier.h File 33.06 KB 0644
bpfptr.h File 2.09 KB 0644
brcmphy.h File 21.77 KB 0644
bsearch.h File 624 B 0644
bsg-lib.h File 1.71 KB 0644
bsg.h File 499 B 0644
btf.h File 20.05 KB 0644
btf_ids.h File 8.18 KB 0644
btree-128.h File 2.67 KB 0644
btree-type.h File 3.9 KB 0644
btree.h File 6.84 KB 0644
btrfs.h File 145 B 0644
buffer_head.h File 17.37 KB 0644
bug.h File 2.33 KB 0644
build-salt.h File 375 B 0644
build_bug.h File 2.99 KB 0644
buildid.h File 671 B 0644
bvec.h File 7.54 KB 0644
c2port.h File 1.35 KB 0644
cache.h File 5.51 KB 0644
cacheflush.h File 675 B 0644
cacheinfo.h File 4.92 KB 0644
call_once.h File 1.67 KB 0644
capability.h File 6.27 KB 0644
cb710.h File 5.36 KB 0644
cc_platform.h File 3.42 KB 0644
cciss_ioctl.h File 1.03 KB 0644
ccp.h File 18.14 KB 0644
cdev.h File 845 B 0644
cdrom.h File 8.92 KB 0644
cfag12864b.h File 1.07 KB 0644
cfi.h File 1.23 KB 0644
cfi_types.h File 1.06 KB 0644
cgroup-defs.h File 26.77 KB 0644
cgroup.h File 26.33 KB 0644
cgroup_api.h File 26 B 0644
cgroup_dmem.h File 1.91 KB 0644
cgroup_rdma.h File 1.18 KB 0644
cgroup_refcnt.h File 2.59 KB 0644
cgroup_subsys.h File 1.28 KB 0644
circ_buf.h File 1.09 KB 0644
cleanup.h File 13.45 KB 0644
clk-provider.h File 65.77 KB 0644
clk.h File 36.18 KB 0644
clkdev.h File 1.2 KB 0644
clockchips.h File 7.29 KB 0644
clocksource.h File 11.01 KB 0644
clocksource_ids.h File 333 B 0644
closure.h File 14.22 KB 0644
cma.h File 2.26 KB 0644
cmpxchg-emu.h File 435 B 0644
cn_proc.h File 1.85 KB 0644
cnt32_to_63.h File 3.46 KB 0644
coda.h File 2.16 KB 0644
codetag.h File 3.4 KB 0644
compaction.h File 4.5 KB 0644
compat.h File 32.32 KB 0644
compiler-clang.h File 4.13 KB 0644
compiler-gcc.h File 3.92 KB 0644
compiler-version.h File 517 B 0644
compiler.h File 12.26 KB 0644
compiler_attributes.h File 15.91 KB 0644
compiler_types.h File 18.79 KB 0644
completion.h File 4.14 KB 0644
component.h File 4.35 KB 0644
configfs.h File 8.54 KB 0644
connector.h File 4.01 KB 0644
console.h File 24.18 KB 0644
console_struct.h File 6.98 KB 0644
consolemap.h File 1.25 KB 0644
const.h File 100 B 0644
container.h File 616 B 0644
container_of.h File 1.3 KB 0644
context_tracking.h File 4.4 KB 0644
context_tracking_irq.h File 633 B 0644
context_tracking_state.h File 3.8 KB 0644
cookie.h File 1.22 KB 0644
cordic.h File 2.08 KB 0644
coredump.h File 2.17 KB 0644
coresight-pmu.h File 2.32 KB 0644
coresight-stm.h File 152 B 0644
coresight.h File 22.68 KB 0644
count_zeros.h File 1.42 KB 0644
counter.h File 21.48 KB 0644
cper.h File 17.59 KB 0644
cpu.h File 6.67 KB 0644
cpu_cooling.h File 1.83 KB 0644
cpu_pm.h File 2.38 KB 0644
cpu_rmap.h File 1.7 KB 0644
cpu_smt.h File 1.12 KB 0644
cpufeature.h File 1.71 KB 0644
cpufreq.h File 36.37 KB 0644
cpuhotplug.h File 16.95 KB 0644
cpuhplock.h File 1.52 KB 0644
cpuidle.h File 11.42 KB 0644
cpuidle_haltpoll.h File 312 B 0644
cpumask.h File 37.26 KB 0644
cpumask_api.h File 27 B 0644
cpumask_types.h File 2.18 KB 0644
cpuset.h File 8.01 KB 0644
crash_core.h File 2.65 KB 0644
crash_dump.h File 6.29 KB 0644
crash_reserve.h File 1.33 KB 0644
crc-ccitt.h File 369 B 0644
crc-itu-t.h File 530 B 0644
crc-t10dif.h File 759 B 0644
crc16.h File 540 B 0644
crc32.h File 4.23 KB 0644
crc32c.h File 346 B 0644
crc32poly.h File 610 B 0644
crc4.h File 192 B 0644
crc64.h File 539 B 0644
crc7.h File 316 B 0644
crc8.h File 3.66 KB 0644
cred.h File 11.95 KB 0644
crypto.h File 19.01 KB 0644
cs5535.h File 6.13 KB 0644
ctype.h File 1.87 KB 0644
cuda.h File 620 B 0644
damon.h File 33.47 KB 0644
dasd_mod.h File 204 B 0644
davinci_emac.h File 1.05 KB 0644
dax.h File 8.75 KB 0644
dca.h File 1.88 KB 0644
dcache.h File 18.81 KB 0644
dccp.h File 10.74 KB 0644
debug_locks.h File 1.57 KB 0644
debugfs.h File 15.87 KB 0644
debugobjects.h File 4.09 KB 0644
delay.h File 4.18 KB 0644
delayacct.h File 7.08 KB 0644
delayed_call.h File 709 B 0644
dev_printk.h File 9.74 KB 0644
devcoredump.h File 3.53 KB 0644
devfreq-event.h File 5.95 KB 0644
devfreq.h File 14.52 KB 0644
devfreq_cooling.h File 2.7 KB 0644
device-mapper.h File 21.11 KB 0644
device.h File 43.19 KB 0644
device_cgroup.h File 1.57 KB 0644
devm-helpers.h File 2.67 KB 0644
devpts_fs.h File 1.13 KB 0644
dfl.h File 2.72 KB 0644
digsig.h File 1.18 KB 0644
dim.h File 12.69 KB 0644
dio.h File 10.77 KB 0644
dirent.h File 215 B 0644
dlm.h File 6.44 KB 0644
dlm_plock.h File 642 B 0644
dm-bufio.h File 5.16 KB 0644
dm-dirty-log.h File 4 KB 0644
dm-io.h File 2.03 KB 0644
dm-kcopyd.h File 3.03 KB 0644
dm-region-hash.h File 3.16 KB 0644
dm-verity-loadpin.h File 617 B 0644
dm9000.h File 987 B 0644
dma-buf.h File 21.21 KB 0644
dma-direct.h File 4.16 KB 0644
dma-direction.h File 407 B 0644
dma-fence-array.h File 2.86 KB 0644
dma-fence-chain.h File 3.66 KB 0644
dma-fence-unwrap.h File 2.24 KB 0644
dma-fence.h File 22.94 KB 0644
dma-heap.h File 1.13 KB 0644
dma-map-ops.h File 15.89 KB 0644
dma-mapping.h File 21.19 KB 0644
dma-resv.h File 16.94 KB 0644
dmaengine.h File 55.21 KB 0644
dmapool.h File 1.79 KB 0644
dmar.h File 8.06 KB 0644
dmi.h File 4.27 KB 0644
dnotify.h File 1012 B 0644
dns_resolver.h File 1.36 KB 0644
dpll.h File 6.78 KB 0644
dqblk_qtree.h File 2.19 KB 0644
dqblk_v1.h File 327 B 0644
dqblk_v2.h File 406 B 0644
drbd.h File 9.92 KB 0644
drbd_config.h File 285 B 0644
drbd_genl.h File 21.49 KB 0644
drbd_genl_api.h File 1.76 KB 0644
drbd_limits.h File 7.92 KB 0644
ds2782_battery.h File 158 B 0644
dtlk.h File 3.5 KB 0644
dtpm.h File 1.46 KB 0644
dw_apb_timer.h File 1.32 KB 0644
dynamic_debug.h File 10.96 KB 0644
dynamic_queue_limits.h File 5.43 KB 0644
earlycpio.h File 359 B 0644
ecryptfs.h File 3.82 KB 0644
edac.h File 19.44 KB 0644
edd.h File 1.05 KB 0644
eeprom_93cx6.h File 2.64 KB 0644
efi-bgrt.h File 644 B 0644
efi.h File 44.59 KB 0644
efi_embedded_fw.h File 1.04 KB 0644
efs_vh.h File 1.55 KB 0644
eisa.h File 2.97 KB 0644
elf-fdpic.h File 2.39 KB 0644
elf-randomize.h File 583 B 0644
elf.h File 2.97 KB 0644
elfcore-compat.h File 1.43 KB 0644
elfcore.h File 3.93 KB 0644
elfnote-lto.h File 314 B 0644
elfnote.h File 3.54 KB 0644
enclosure.h File 4.02 KB 0644
energy_model.h File 13.12 KB 0644
entry-common.h File 18.62 KB 0644
entry-kvm.h File 2.77 KB 0644
err.h File 3.35 KB 0644
errname.h File 283 B 0644
errno.h File 1.45 KB 0644
error-injection.h File 630 B 0644
errqueue.h File 524 B 0644
errseq.h File 382 B 0644
etherdevice.h File 19.37 KB 0644
ethtool.h File 52.71 KB 0644
ethtool_netlink.h File 3.74 KB 0644
eventfd.h File 2.1 KB 0644
eventpoll.h File 2.41 KB 0644
evm.h File 2.12 KB 0644
execmem.h File 5.72 KB 0644
export-internal.h File 2.3 KB 0644
export.h File 2.67 KB 0644
exportfs.h File 11.19 KB 0644
ext2_fs.h File 967 B 0644
extable.h File 1.28 KB 0644
extcon-provider.h File 3.83 KB 0644
extcon.h File 9.99 KB 0644
f2fs_fs.h File 20.26 KB 0644
f75375s.h File 541 B 0644
falloc.h File 1.79 KB 0644
fanotify.h File 4.99 KB 0644
fault-inject-usercopy.h File 496 B 0644
fault-inject.h File 3.07 KB 0644
fb.h File 30.04 KB 0644
fbcon.h File 2.09 KB 0644
fcdevice.h File 774 B 0644
fcntl.h File 1.66 KB 0644
fd.h File 490 B 0644
fddidevice.h File 833 B 0644
fdtable.h File 3.08 KB 0644
fec.h File 463 B 0644
fiemap.h File 831 B 0644
file.h File 3.66 KB 0644
file_ref.h File 5.46 KB 0644
fileattr.h File 1.9 KB 0644
filelock.h File 13.17 KB 0644
filter.h File 48.89 KB 0644
find.h File 20.71 KB 0644
fips.h File 303 B 0644
firewire.h File 17.27 KB 0644
firmware-map.h File 959 B 0644
firmware.h File 6.3 KB 0644
fixp-arith.h File 4.21 KB 0644
flat.h File 2.57 KB 0644
flex_proportions.h File 1.98 KB 0644
folio_queue.h File 9.99 KB 0644
font.h File 1.7 KB 0644
fortify-string.h File 28.64 KB 0644
fprobe.h File 3.92 KB 0644
fpu.h File 246 B 0644
freezer.h File 2.34 KB 0644
fs.h File 129.11 KB 0644
fs_api.h File 22 B 0644
fs_context.h File 8.36 KB 0644
fs_parser.h File 5.01 KB 0644
fs_pin.h File 539 B 0644
fs_stack.h File 895 B 0644
fs_struct.h File 1.04 KB 0644
fs_types.h File 2.02 KB 0644
fscache-cache.h File 7.09 KB 0644
fscache.h File 24.09 KB 0644
fscrypt.h File 34.57 KB 0644
fsi-occ.h File 715 B 0644
fsi-sbefifo.h File 629 B 0644
fsi.h File 2.27 KB 0644
fsl-diu-fb.h File 3.87 KB 0644
fsl_devices.h File 4.16 KB 0644
fsl_hypervisor.h File 2.76 KB 0644
fsl_ifc.h File 24.48 KB 0644
fsldma.h File 202 B 0644
fsnotify.h File 13.17 KB 0644
fsnotify_backend.h File 31.2 KB 0644
fsverity.h File 9.29 KB 0644
ftrace.h File 43.74 KB 0644
ftrace_irq.h File 884 B 0644
ftrace_regs.h File 1.31 KB 0644
futex.h File 2.44 KB 0644
fw_table.h File 1.75 KB 0644
fwnode.h File 7.81 KB 0644
fwnode_mdio.h File 858 B 0644
gameport.h File 5.24 KB 0644
gcd.h File 193 B 0644
genalloc.h File 7.68 KB 0644
generic-radix-tree.h File 11.43 KB 0644
genl_magic_func.h File 11.67 KB 0644
genl_magic_struct.h File 7.58 KB 0644
getcpu.h File 641 B 0644
gfp.h File 14.84 KB 0644
gfp_api.h File 23 B 0644
gfp_types.h File 16.57 KB 0644
glob.h File 256 B 0644
gnss.h File 1.56 KB 0644
goldfish.h File 878 B 0644
gpio-pxa.h File 571 B 0644
gpio.h File 5.01 KB 0644
gpio_keys.h File 1.81 KB 0644
greybus.h File 3.57 KB 0644
group_cpus.h File 310 B 0644
hardirq.h File 3.25 KB 0644
hash.h File 2.93 KB 0644
hashtable.h File 6.67 KB 0644
hashtable_api.h File 29 B 0644
hdlc.h File 3.19 KB 0644
hdlcdrv.h File 6.32 KB 0644
hdmi.h File 12.84 KB 0644
hex.h File 884 B 0644
hid-debug.h File 1.42 KB 0644
hid-over-i2c.h File 3.53 KB 0644
hid-over-spi.h File 4.91 KB 0644
hid-roccat.h File 490 B 0644
hid-sensor-hub.h File 8.97 KB 0644
hid-sensor-ids.h File 7.85 KB 0644
hid.h File 39.52 KB 0644
hid_bpf.h File 8.19 KB 0644
hidden.h File 966 B 0644
hiddev.h File 1.42 KB 0644
hidraw.h File 1.13 KB 0644
highmem-internal.h File 6.62 KB 0644
highmem.h File 18.61 KB 0644
highuid.h File 3.12 KB 0644
hil.h File 18.42 KB 0644
hil_mlc.h File 5.13 KB 0644
hippidevice.h File 1.08 KB 0644
hisi_acc_qm.h File 14.13 KB 0644
hmm.h File 3.93 KB 0644
host1x.h File 13.67 KB 0644
host1x_context_bus.h File 337 B 0644
hp_sdc.h File 14.01 KB 0644
hpet.h File 2.55 KB 0644
hrtimer.h File 11.36 KB 0644
hrtimer_api.h File 27 B 0644
hrtimer_defs.h File 4.22 KB 0644
hrtimer_types.h File 1.53 KB 0644
hte.h File 7.37 KB 0644
huge_mm.h File 18.87 KB 0644
hugetlb.h File 36.03 KB 0644
hugetlb_cgroup.h File 6.78 KB 0644
hugetlb_inline.h File 374 B 0644
hw_breakpoint.h File 4.19 KB 0644
hw_random.h File 2.23 KB 0644
hwmon-sysfs.h File 2.8 KB 0644
hwmon-vid.h File 862 B 0644
hwmon.h File 15.94 KB 0644
hwspinlock.h File 15.79 KB 0644
hyperv.h File 49.31 KB 0644
hypervisor.h File 748 B 0644
i2c-algo-bit.h File 1.4 KB 0644
i2c-algo-pca.h File 2.89 KB 0644
i2c-algo-pcf.h File 1.21 KB 0644
i2c-atr.h File 3.95 KB 0644
i2c-dev.h File 371 B 0644
i2c-mux.h File 1.61 KB 0644
i2c-of-prober.h File 4.94 KB 0644
i2c-smbus.h File 1.69 KB 0644
i2c.h File 39.67 KB 0644
i8042.h File 2.45 KB 0644
i8253.h File 808 B 0644
i8254.h File 489 B 0644
icmp.h File 1 KB 0644
icmpv6.h File 2.87 KB 0644
idle_inject.h File 1.02 KB 0644
idr.h File 9.72 KB 0644
ieee80211.h File 180.45 KB 0644
ieee802154.h File 14.46 KB 0644
if_arp.h File 1.81 KB 0644
if_bridge.h File 5.42 KB 0644
if_eql.h File 1.13 KB 0644
if_ether.h File 1.26 KB 0644
if_fddi.h File 3.24 KB 0644
if_hsr.h File 1.5 KB 0644
if_link.h File 592 B 0644
if_macvlan.h File 2.76 KB 0644
if_phonet.h File 319 B 0644
if_pppol2tp.h File 501 B 0644
if_pppox.h File 2.83 KB 0644
if_rmnet.h File 2.06 KB 0644
if_tap.h File 2.21 KB 0644
if_team.h File 7.94 KB 0644
if_tun.h File 1.54 KB 0644
if_tunnel.h File 409 B 0644
if_vlan.h File 22.16 KB 0644
igmp.h File 4.42 KB 0644
ihex.h File 2.15 KB 0644
ima.h File 2.71 KB 0644
imx-media.h File 605 B 0644
in.h File 2.29 KB 0644
in6.h File 1.63 KB 0644
indirect_call_wrapper.h File 2.24 KB 0644
inet.h File 2.64 KB 0644
inet_diag.h File 2.76 KB 0644
inetdevice.h File 9.53 KB 0644
init.h File 12 KB 0644
init_ohci1394_dma.h File 196 B 0644
init_syscalls.h File 1.01 KB 0644
init_task.h File 1.1 KB 0644
initrd.h File 1008 B 0644
inotify.h File 628 B 0644
input.h File 20.81 KB 0644
instruction_pointer.h File 346 B 0644
instrumentation.h File 1.85 KB 0644
instrumented.h File 6.21 KB 0644
int_log.h File 1.26 KB 0644
integrity.h File 1.46 KB 0644
intel-ish-client-if.h File 4.13 KB 0644
intel_rapl.h File 6 KB 0644
intel_tcc.h File 466 B 0644
intel_th.h File 2.44 KB 0644
intel_tpmi.h File 1.99 KB 0644
intel_vsec.h File 4.24 KB 0644
interconnect-clk.h File 648 B 0644
interconnect-provider.h File 5.53 KB 0644
interconnect.h File 3.36 KB 0644
interrupt.h File 27.29 KB 0644
interval_tree.h File 2.88 KB 0644
interval_tree_generic.h File 6.7 KB 0644
io-64-nonatomic-hi-lo.h File 2.41 KB 0644
io-64-nonatomic-lo-hi.h File 2.41 KB 0644
io-mapping.h File 4.69 KB 0644
io-pgtable.h File 10.18 KB 0644
io.h File 5.51 KB 0644
io_uring.h File 1.04 KB 0644
io_uring_types.h File 18.69 KB 0644
ioam6.h File 226 B 0644
ioam6_genl.h File 266 B 0644
ioam6_iptunnel.h File 285 B 0644
iocontext.h File 4.16 KB 0644
iomap.h File 15.6 KB 0644
iommu-dma.h File 2.98 KB 0644
iommu-helper.h File 1.12 KB 0644
iommu.h File 53.6 KB 0644
iommufd.h File 7.34 KB 0644
iopoll.h File 7.9 KB 0644
ioport.h File 15.09 KB 0644
ioprio.h File 2.17 KB 0644
ioremap.h File 744 B 0644
iosys-map.h File 16.8 KB 0644
iov_iter.h File 10.36 KB 0644
iova.h File 4.2 KB 0644
iova_bitmap.h File 1.31 KB 0644
ip.h File 1.56 KB 0644
ipack.h File 8.69 KB 0644
ipc.h File 619 B 0644
ipc_namespace.h File 5.63 KB 0644
ipmi.h File 11.09 KB 0644
ipmi_smi.h File 9.83 KB 0644
ipv6.h File 8.23 KB 0644
ipv6_route.h File 372 B 0644
irq.h File 43.49 KB 0644
irq_poll.h File 575 B 0644
irq_sim.h File 1.35 KB 0644
irq_work.h File 2.04 KB 0644
irqbypass.h File 3.45 KB 0644
irqchip.h File 2.65 KB 0644
irqdesc.h File 8.04 KB 0644
irqdomain.h File 24.75 KB 0644
irqdomain_defs.h File 842 B 0644
irqflags.h File 7.96 KB 0644
irqflags_types.h File 563 B 0644
irqhandler.h File 284 B 0644
irqnr.h File 1.5 KB 0644
irqreturn.h File 529 B 0644
isa-dma.h File 276 B 0644
isa.h File 3.33 KB 0644
isapnp.h File 2.88 KB 0644
iscsi_boot_sysfs.h File 3.71 KB 0644
iscsi_ibft.h File 994 B 0644
ism.h File 2.2 KB 0644
iversion.h File 10.96 KB 0644
jbd2.h File 51.56 KB 0644
jhash.h File 4.56 KB 0644
jiffies.h File 20.07 KB 0644
journal-head.h File 2.91 KB 0644
joystick.h File 437 B 0644
jump_label.h File 16.45 KB 0644
jump_label_ratelimit.h File 2.77 KB 0644
jz4740-adc.h File 1023 B 0644
jz4780-nemc.h File 976 B 0644
kallsyms.h File 4.26 KB 0644
kasan-checks.h File 1.46 KB 0644
kasan-enabled.h File 639 B 0644
kasan-tags.h File 487 B 0644
kasan.h File 20.56 KB 0644
kbd_diacr.h File 198 B 0644
kbd_kern.h File 3.6 KB 0644
kbuild.h File 380 B 0644
kconfig.h File 2.63 KB 0644
kcore.h File 611 B 0644
kcov.h File 4.31 KB 0644
kcsan-checks.h File 18.63 KB 0644
kcsan.h File 2.19 KB 0644
kdb.h File 7.36 KB 0644
kdebug.h File 487 B 0644
kdev_t.h File 1.8 KB 0644
kern_levels.h File 1.57 KB 0644
kernel-page-flags.h File 522 B 0644
kernel.h File 12.88 KB 0644
kernel_read_file.h File 1.62 KB 0644
kernel_stat.h File 3.63 KB 0644
kernelcapi.h File 1.45 KB 0644
kernfs.h File 19.49 KB 0644
kexec.h File 12.68 KB 0644
key-type.h File 6.63 KB 0644
key.h File 16.05 KB 0644
keyboard.h File 665 B 0644
keyctl.h File 1.25 KB 0644
kfence.h File 8.7 KB 0644
kfifo.h File 28.9 KB 0644
kgdb.h File 12.02 KB 0644
khugepaged.h File 1.78 KB 0644
klist.h File 1.88 KB 0644
kmemleak.h File 3.24 KB 0644
kmod.h File 1.02 KB 0644
kmsan-checks.h File 2.86 KB 0644
kmsan.h File 11.52 KB 0644
kmsan_string.h File 681 B 0644
kmsan_types.h File 906 B 0644
kmsg_dump.h File 3.12 KB 0644
kobj_map.h File 545 B 0644
kobject.h File 6.96 KB 0644
kobject_api.h File 27 B 0644
kobject_ns.h File 1.79 KB 0644
kprobes.h File 16.25 KB 0644
kref.h File 3.84 KB 0644
kref_api.h File 24 B 0644
ks0108.h File 970 B 0644
ks8842.h File 632 B 0644
ks8851_mll.h File 472 B 0644
ksm.h File 4.08 KB 0644
kstrtox.h File 6.51 KB 0644
kthread.h File 8.48 KB 0644
ktime.h File 5.4 KB 0644
ktime_api.h File 25 B 0644
kvm_dirty_ring.h File 2.68 KB 0644
kvm_host.h File 77.92 KB 0644
kvm_irqfd.h File 1.99 KB 0644
kvm_para.h File 402 B 0644
kvm_types.h File 2.6 KB 0644
l2tp.h File 261 B 0644
lantiq.h File 365 B 0644
lapb.h File 1.78 KB 0644
latencytop.h File 1.06 KB 0644
lcd.h File 4.18 KB 0644
lcm.h File 275 B 0644
led-class-flash.h File 6.08 KB 0644
led-class-multicolor.h File 2.44 KB 0644
led-lm3530.h File 3.7 KB 0644
leds-bd2802.h File 476 B 0644
leds-expresswire.h File 1.13 KB 0644
leds-lp3944.h File 950 B 0644
leds-lp3952.h File 2.35 KB 0644
leds-pca9532.h File 866 B 0644
leds-regulator.h File 1.14 KB 0644
leds-ti-lmu-common.h File 1.12 KB 0644
leds.h File 23.34 KB 0644
libata.h File 69.91 KB 0644
libfdt.h File 202 B 0644
libfdt_env.h File 491 B 0644
libgcc.h File 875 B 0644
libnvdimm.h File 9.93 KB 0644
libps2.h File 2.47 KB 0644
license.h File 418 B 0644
limits.h File 809 B 0644
linear_range.h File 2.01 KB 0644
linkage.h File 9.56 KB 0644
linkmode.h File 2.17 KB 0644
linux_logo.h File 1.81 KB 0644
lis3lv02d.h File 5 KB 0644
list.h File 35.12 KB 0644
list_bl.h File 4.79 KB 0644
list_lru.h File 9.8 KB 0644
list_nulls.h File 4.22 KB 0644
list_sort.h File 374 B 0644
litex.h File 2.06 KB 0644
livepatch.h File 8.26 KB 0644
livepatch_sched.h File 802 B 0644
llc.h File 749 B 0644
llist.h File 10.43 KB 0644
llist_api.h File 25 B 0644
local_lock.h File 1.98 KB 0644
local_lock_internal.h File 4.24 KB 0644
lockdep.h File 20.9 KB 0644
lockdep_api.h File 27 B 0644
lockdep_types.h File 7.61 KB 0644
lockref.h File 1.65 KB 0644
log2.h File 6.24 KB 0644
logic_iomem.h File 2.07 KB 0644
logic_pio.h File 3.11 KB 0644
lp.h File 2.76 KB 0644
lru_cache.h File 11.67 KB 0644
lsm_audit.h File 3.22 KB 0644
lsm_count.h File 2.36 KB 0644
lsm_hook_defs.h File 24.09 KB 0644
lsm_hooks.h File 4.81 KB 0644
lwq.h File 3.69 KB 0644
lz4.h File 26.69 KB 0644
lzo.h File 1.93 KB 0644
mISDNdsp.h File 1.19 KB 0644
mISDNhw.h File 5.39 KB 0644
mISDNif.h File 14.9 KB 0644
mailbox_client.h File 1.78 KB 0644
mailbox_controller.h File 5.7 KB 0644
map_benchmark.h File 1.07 KB 0644
maple.h File 2.68 KB 0644
maple_tree.h File 28.94 KB 0644
marvell_phy.h File 1.94 KB 0644
math.h File 6.31 KB 0644
math64.h File 9 KB 0644
mbcache.h File 2.09 KB 0644
mbus.h File 3.09 KB 0644
mc146818rtc.h File 4.72 KB 0644
mc6821.h File 1.18 KB 0644
mcb.h File 3.62 KB 0644
mdev.h File 2.36 KB 0644
mdio-bitbang.h File 1.46 KB 0644
mdio-gpio.h File 177 B 0644
mdio-mux.h File 1021 B 0644
mdio.h File 22.72 KB 0644
mei_aux.h File 929 B 0644
mei_cl_bus.h File 4.6 KB 0644
mem_encrypt.h File 1.31 KB 0644
memblock.h File 20.4 KB 0644
memcontrol.h File 45.83 KB 0644
memfd.h File 950 B 0644
memory-tiers.h File 3.94 KB 0644
memory.h File 6.42 KB 0644
memory_hotplug.h File 10.77 KB 0644
mempolicy.h File 7.25 KB 0644
mempool.h File 4.28 KB 0644
memregion.h File 1.8 KB 0644
memremap.h File 7.67 KB 0644
memstick.h File 9.61 KB 0644
mhi.h File 27.42 KB 0644
mhi_ep.h File 10.63 KB 0644
micrel_phy.h File 2.1 KB 0644
microchipphy.h File 2.65 KB 0644
migrate.h File 7.72 KB 0644
migrate_mode.h File 713 B 0644
mii.h File 15.51 KB 0644
mii_timestamper.h File 3.66 KB 0644
min_heap.h File 15.78 KB 0644
minmax.h File 10 KB 0644
misc_cgroup.h File 3.23 KB 0644
miscdevice.h File 3.21 KB 0644
mm.h File 126.61 KB 0644
mm_api.h File 22 B 0644
mm_inline.h File 17.38 KB 0644
mm_types.h File 51.72 KB 0644
mm_types_task.h File 2.32 KB 0644
mman.h File 5.48 KB 0644
mmap_lock.h File 6.03 KB 0644
mmdebug.h File 4.28 KB 0644
mmiotrace.h File 3.05 KB 0644
mmu_context.h File 1.13 KB 0644
mmu_notifier.h File 21.93 KB 0644
mmzone.h File 66.74 KB 0644
mnt_idmapping.h File 6.88 KB 0644
mnt_namespace.h File 767 B 0644
mod_devicetable.h File 25.41 KB 0644
module.h File 27.85 KB 0644
module_signature.h File 1.22 KB 0644
module_symbol.h File 409 B 0644
moduleloader.h File 3.84 KB 0644
moduleparam.h File 22.51 KB 0644
most.h File 12.2 KB 0644
mount.h File 4.21 KB 0644
moxtet.h File 2.27 KB 0644
mpage.h File 644 B 0644
mpi.h File 3.17 KB 0644
mpls.h File 394 B 0644
mpls_iptunnel.h File 178 B 0644
mroute.h File 2.12 KB 0644
mroute6.h File 2.93 KB 0644
mroute_base.h File 12.45 KB 0644
msdos_fs.h File 273 B 0644
msdos_partition.h File 1.62 KB 0644
msg.h File 395 B 0644
msi.h File 22.01 KB 0644
msi_api.h File 1.93 KB 0644
mtio.h File 1.29 KB 0644
mutex.h File 5.82 KB 0644
mutex_api.h File 25 B 0644
mutex_types.h File 2.09 KB 0644
mv643xx_eth.h File 2 KB 0644
mv643xx_i2c.h File 335 B 0644
mvebu-pmsu.h File 520 B 0644
mxm-wmi.h File 399 B 0644
namei.h File 5.46 KB 0644
nd.h File 6.19 KB 0644
ndctl.h File 674 B 0644
net.h File 11.86 KB 0644
net_tstamp.h File 2.97 KB 0644
netdev_features.h File 10.5 KB 0644
netdevice.h File 170.32 KB 0644
netdevice_xmit.h File 223 B 0644
netfilter.h File 14.03 KB 0644
netfilter_bridge.h File 2.08 KB 0644
netfilter_defs.h File 242 B 0644
netfilter_ipv4.h File 1.05 KB 0644
netfilter_ipv6.h File 5.86 KB 0644
netfilter_netdev.h File 3.97 KB 0644
netfs.h File 21.8 KB 0644
netlink.h File 10.69 KB 0644
netpoll.h File 2.52 KB 0644
nfs.h File 1.71 KB 0644
nfs3.h File 260 B 0644
nfs4.h File 24.25 KB 0644
nfs_common.h File 458 B 0644
nfs_fs.h File 20.45 KB 0644
nfs_fs_i.h File 308 B 0644
nfs_fs_sb.h File 11.34 KB 0644
nfs_iostat.h File 3.92 KB 0644
nfs_page.h File 8.48 KB 0644
nfs_ssc.h File 2.01 KB 0644
nfs_xdr.h File 43.3 KB 0644
nfsacl.h File 1.4 KB 0644
nfslocalio.h File 3.47 KB 0644
nitro_enclaves.h File 267 B 0644
nl802154.h File 3.87 KB 0644
nls.h File 3.09 KB 0644
nmi.h File 7.21 KB 0644
node.h File 4.67 KB 0644
nodemask.h File 17.89 KB 0644
nodemask_types.h File 263 B 0644
nospec.h File 2.24 KB 0644
notifier.h File 8.18 KB 0644
ns_common.h File 284 B 0644
nsc_gpio.h File 1.42 KB 0644
nsproxy.h File 3.67 KB 0644
ntb.h File 52.43 KB 0644
ntb_transport.h File 3.8 KB 0644
nubus.h File 5.54 KB 0644
numa.h File 1.6 KB 0644
numa_memblks.h File 1.57 KB 0644
nvme-auth.h File 1.44 KB 0644
nvme-fc-driver.h File 46.78 KB 0644
nvme-fc.h File 9.72 KB 0644
nvme-keyring.h File 732 B 0644
nvme-rdma.h File 2.31 KB 0644
nvme-tcp.h File 4.67 KB 0644
nvme.h File 50.91 KB 0644
nvmem-consumer.h File 6.87 KB 0644
nvmem-provider.h File 8.03 KB 0644
nvram.h File 3.47 KB 0644
oa_tc6.h File 947 B 0644
objagg.h File 1.94 KB 0644
objpool.h File 9.58 KB 0644
objtool.h File 6.62 KB 0644
objtool_types.h File 2.08 KB 0644
of.h File 51.38 KB 0644
of_address.h File 5.5 KB 0644
of_clk.h File 819 B 0644
of_device.h File 2.23 KB 0644
of_dma.h File 2.3 KB 0644
of_fdt.h File 3.48 KB 0644
of_gpio.h File 878 B 0644
of_graph.h File 5.4 KB 0644
of_iommu.h File 671 B 0644
of_irq.h File 3.83 KB 0644
of_mdio.h File 3.91 KB 0644
of_net.h File 1.15 KB 0644
of_pci.h File 915 B 0644
of_pdt.h File 1.14 KB 0644
of_platform.h File 4.07 KB 0644
of_reserved_mem.h File 2.22 KB 0644
oid_registry.h File 6.02 KB 0644
olpc-ec.h File 2 KB 0644
omap-dma.h File 9.54 KB 0644
omap-gpmc.h File 2.29 KB 0644
omap-iommu.h File 880 B 0644
omap-mailbox.h File 272 B 0644
omapfb.h File 576 B 0644
once.h File 2.66 KB 0644
once_lite.h File 926 B 0644
oom.h File 2.81 KB 0644
openvswitch.h File 403 B 0644
osq_lock.h File 912 B 0644
overflow.h File 14.82 KB 0644
packing.h File 16 KB 0644
padata.h File 6.21 KB 0644
page-flags-layout.h File 3.73 KB 0644
page-flags.h File 39.15 KB 0644
page-isolation.h File 1.04 KB 0644
page_counter.h File 3.21 KB 0644
page_ext.h File 2.9 KB 0644
page_frag_cache.h File 1.71 KB 0644
page_idle.h File 1.95 KB 0644
page_owner.h File 2.38 KB 0644
page_ref.h File 7.6 KB 0644
page_reporting.h File 895 B 0644
page_table_check.h File 3.74 KB 0644
pageblock-flags.h File 2.8 KB 0644
pagemap.h File 51.01 KB 0644
pagevec.h File 2.62 KB 0644
pagewalk.h File 7.36 KB 0644
panic.h File 2.83 KB 0644
panic_notifier.h File 296 B 0644
papr_scm.h File 2.17 KB 0644
parman.h File 2.87 KB 0644
parport.h File 18.87 KB 0644
parport_pc.h File 6.62 KB 0644
parser.h File 1.17 KB 0644
part_stat.h File 2.38 KB 0644
pata_arasan_cf_data.h File 1.22 KB 0644
patchkey.h File 757 B 0644
path.h File 752 B 0644
pch_dma.h File 408 B 0644
pci-acpi.h File 4.18 KB 0644
pci-ats.h File 2.01 KB 0644
pci-bwctrl.h File 650 B 0644
pci-doe.h File 576 B 0644
pci-ecam.h File 3.43 KB 0644
pci-ep-cfs.h File 956 B 0644
pci-epc.h File 12.02 KB 0644
pci-epf.h File 7.84 KB 0644
pci-p2pdma.h File 3.01 KB 0644
pci-pwrctrl.h File 1.74 KB 0644
pci-tph.h File 1.44 KB 0644
pci.h File 98.79 KB 0644
pci_hotplug.h File 4.35 KB 0644
pci_ids.h File 125.8 KB 0644
pcs-lynx.h File 442 B 0644
pcs-rzn1-miic.h File 385 B 0644
pe.h File 16.73 KB 0644
peci-cpu.h File 2.29 KB 0644
peci.h File 3.08 KB 0644
percpu-defs.h File 17.3 KB 0644
percpu-refcount.h File 11.22 KB 0644
percpu-rwsem.h File 4.32 KB 0644
percpu.h File 5.17 KB 0644
percpu_counter.h File 6.81 KB 0644
perf_event.h File 59.38 KB 0644
perf_event_api.h File 30 B 0644
perf_regs.h File 1.05 KB 0644
personality.h File 393 B 0644
pfn.h File 666 B 0644
pfn_t.h File 3.21 KB 0644
pgalloc_tag.h File 6.2 KB 0644
pgtable.h File 53.52 KB 0644
pgtable_api.h File 27 B 0644
phonet.h File 537 B 0644
phy.h File 77.74 KB 0644
phy_fixed.h File 1.82 KB 0644
phy_led_triggers.h File 1.01 KB 0644
phy_link_topology.h File 1.74 KB 0644
phylib_stubs.h File 2.64 KB 0644
phylink.h File 29.83 KB 0644
pid.h File 9.4 KB 0644
pid_namespace.h File 3.29 KB 0644
pid_types.h File 282 B 0644
pidfs.h File 356 B 0644
pim.h File 2.67 KB 0644
pipe_fs_i.h File 10.26 KB 0644
pkeys.h File 990 B 0644
pktcdvd.h File 5.7 KB 0644
pl320-ipc.h File 209 B 0644
platform_device.h File 13.15 KB 0644
platform_profile.h File 2.02 KB 0644
pldmfw.h File 4.91 KB 0644
plist.h File 8.58 KB 0644
plist_types.h File 315 B 0644
pm-trace.h File 940 B 0644
pm.h File 36.63 KB 0644
pm_clock.h File 2.59 KB 0644
pm_domain.h File 16.68 KB 0644
pm_opp.h File 18.9 KB 0644
pm_qos.h File 10.41 KB 0644
pm_runtime.h File 20.47 KB 0644
pm_wakeirq.h File 1009 B 0644
pm_wakeup.h File 7.43 KB 0644
pmbus.h File 2.86 KB 0644
pmu.h File 2.45 KB 0644
pnp.h File 14.98 KB 0644
poison.h File 2.84 KB 0644
poll.h File 3.86 KB 0644
polynomial.h File 814 B 0644
posix-clock.h File 4.52 KB 0644
posix-timers.h File 7.09 KB 0644
posix-timers_types.h File 2.21 KB 0644
posix_acl.h File 4.32 KB 0644
posix_acl_xattr.h File 1.95 KB 0644
power_supply.h File 41.09 KB 0644
powercap.h File 11.98 KB 0644
ppp-comp.h File 2.97 KB 0644
ppp_channel.h File 3.04 KB 0644
ppp_defs.h File 663 B 0644
pps_gen_kernel.h File 1.95 KB 0644
pps_kernel.h File 2.94 KB 0644
pr.h File 1.33 KB 0644
prandom.h File 1.31 KB 0644
preempt.h File 15.9 KB 0644
prefetch.h File 1.55 KB 0644
prime_numbers.h File 1.35 KB 0644
printk.h File 23.79 KB 0644
prmt.h File 342 B 0644
proc_fs.h File 9.13 KB 0644
proc_ns.h File 2.52 KB 0644
processor.h File 1.84 KB 0644
profile.h File 1.39 KB 0644
projid.h File 2.22 KB 0644
property.h File 19.91 KB 0644
pruss_driver.h File 4.44 KB 0644
psci.h File 1.52 KB 0644
pseudo_fs.h File 401 B 0644
psi.h File 1.78 KB 0644
psi_types.h File 4.94 KB 0644
psp-platform-access.h File 1.86 KB 0644
psp-sev.h File 27.29 KB 0644
psp-tee.h File 2.65 KB 0644
psp.h File 697 B 0644
pstore.h File 7.77 KB 0644
pstore_blk.h File 1.53 KB 0644
pstore_ram.h File 883 B 0644
pstore_zone.h File 2.28 KB 0644
ptdump.h File 815 B 0644
pti.h File 251 B 0644
ptp_classify.h File 6.89 KB 0644
ptp_clock_kernel.h File 16.23 KB 0644
ptp_kvm.h File 505 B 0644
ptp_mock.h File 670 B 0644
ptp_pch.h File 666 B 0644
ptr_ring.h File 16.54 KB 0644
ptrace.h File 16.79 KB 0644
ptrace_api.h File 26 B 0644
purgatory.h File 590 B 0644
pvclock_gtod.h File 548 B 0644
pwm.h File 18.78 KB 0644
pwm_backlight.h File 649 B 0644
pxa168_eth.h File 728 B 0644
pxa2xx_ssp.h File 11.13 KB 0644
qnx6_fs.h File 3.27 KB 0644
quota.h File 18.76 KB 0644
quotaops.h File 10.27 KB 0644
radix-tree.h File 15.95 KB 0644
raid_class.h File 2.01 KB 0644
ramfs.h File 746 B 0644
random.h File 4.97 KB 0644
randomize_kstack.h File 3.96 KB 0644
range.h File 1.07 KB 0644
ras.h File 1.53 KB 0644
ratelimit.h File 1.72 KB 0644
ratelimit_types.h File 1.33 KB 0644
rational.h File 639 B 0644
rbtree.h File 11.32 KB 0644
rbtree_augmented.h File 10.18 KB 0644
rbtree_latch.h File 6.73 KB 0644
rbtree_types.h File 946 B 0644
rcu_node_tree.h File 3.73 KB 0644
rcu_notifier.h File 1.09 KB 0644
rcu_segcblist.h File 10.77 KB 0644
rcu_sync.h File 1.41 KB 0644
rculist.h File 30.59 KB 0644
rculist_bl.h File 3.29 KB 0644
rculist_nulls.h File 6.6 KB 0644
rcupdate.h File 42.48 KB 0644
rcupdate_trace.h File 3.27 KB 0644
rcupdate_wait.h File 2.55 KB 0644
rcuref.h File 4.66 KB 0644
rcutiny.h File 4.55 KB 0644
rcutree.h File 4.34 KB 0644
rcuwait.h File 2.32 KB 0644
rcuwait_api.h File 27 B 0644
reboot-mode.h File 600 B 0644
reboot.h File 5.3 KB 0644
reciprocal_div.h File 3.28 KB 0644
ref_tracker.h File 2.35 KB 0644
refcount.h File 11.83 KB 0644
refcount_api.h File 28 B 0644
refcount_types.h File 512 B 0644
regmap.h File 72.65 KB 0644
regset.h File 11.35 KB 0644
relay.h File 8.47 KB 0644
remoteproc.h File 25.08 KB 0644
resctrl.h File 11.58 KB 0644
reset-controller.h File 3.79 KB 0644
reset.h File 37.86 KB 0644
resource.h File 223 B 0644
resource_ext.h File 2.08 KB 0644
restart_block.h File 1.11 KB 0644
resume_user_mode.h File 1.88 KB 0644
rethook.h File 3.15 KB 0644
rfkill.h File 10.79 KB 0644
rhashtable-types.h File 3.72 KB 0644
rhashtable.h File 37.93 KB 0644
ring_buffer.h File 8.82 KB 0644
rio.h File 19.02 KB 0644
rio_drv.h File 14.32 KB 0644
rio_ids.h File 723 B 0644
rio_regs.h File 19.07 KB 0644
rmap.h File 25.2 KB 0644
rmi.h File 12.04 KB 0644
rndis.h File 16.86 KB 0644
rodata_test.h File 394 B 0644
rolling_buffer.h File 2.16 KB 0644
root_dev.h File 361 B 0644
rpmb.h File 3.16 KB 0644
rpmsg.h File 9.46 KB 0644
rseq.h File 2.99 KB 0644
rslib.h File 3.64 KB 0644
rtc.h File 9.32 KB 0644
rtmutex.h File 3.38 KB 0644
rtnetlink.h File 7.36 KB 0644
rtsx_common.h File 846 B 0644
rtsx_pci.h File 40.09 KB 0644
rtsx_usb.h File 15.51 KB 0644
rv.h File 1.56 KB 0644
rw_hint.h File 702 B 0644
rwbase_rt.h File 1 KB 0644
rwlock.h File 4.15 KB 0644
rwlock_api_smp.h File 7.85 KB 0644
rwlock_rt.h File 3.38 KB 0644
rwlock_types.h File 1.77 KB 0644
rwsem.h File 8.6 KB 0644
sbitmap.h File 17.82 KB 0644
scatterlist.h File 21.17 KB 0644
scc.h File 2.84 KB 0644
sched.h File 64.53 KB 0644
sched_clock.h File 1.46 KB 0644
scmi_imx_protocol.h File 1.54 KB 0644
scmi_protocol.h File 38.75 KB 0644
scpi_protocol.h File 2.67 KB 0644
screen_info.h File 3.35 KB 0644
scs.h File 2.25 KB 0644
sctp.h File 23.09 KB 0644
scx200.h File 1.82 KB 0644
scx200_gpio.h File 2.38 KB 0644
seccomp.h File 2.99 KB 0644
seccomp_types.h File 834 B 0644
secretmem.h File 706 B 0644
securebits.h File 239 B 0644
security.h File 64.62 KB 0644
sed-opal-key.h File 614 B 0644
sed-opal.h File 1.95 KB 0644
seg6.h File 121 B 0644
seg6_genl.h File 136 B 0644
seg6_hmac.h File 136 B 0644
seg6_iptunnel.h File 148 B 0644
seg6_local.h File 100 B 0644
selection.h File 1.67 KB 0644
sem.h File 515 B 0644
sem_types.h File 234 B 0644
semaphore.h File 1.58 KB 0644
seq_buf.h File 4.24 KB 0644
seq_file.h File 10.18 KB 0644
seq_file_net.h File 787 B 0644
seqlock.h File 37.14 KB 0644
seqlock_api.h File 27 B 0644
seqlock_types.h File 3.11 KB 0644
serdev.h File 10.12 KB 0644
serial.h File 1.03 KB 0644
serial_8250.h File 7.38 KB 0644
serial_bcm63xx.h File 4.73 KB 0644
serial_core.h File 39.9 KB 0644
serial_s3c.h File 9.54 KB 0644
serial_sci.h File 1.62 KB 0644
serio.h File 4.41 KB 0644
set_memory.h File 2.06 KB 0644
sfp.h File 16.54 KB 0644
sh_clk.h File 5.96 KB 0644
sh_dma.h File 3.47 KB 0644
sh_eth.h File 369 B 0644
sh_intc.h File 3.63 KB 0644
sh_timer.h File 172 B 0644
shdma-base.h File 4.27 KB 0644
shm.h File 835 B 0644
shmem_fs.h File 7.74 KB 0644
shrinker.h File 4.87 KB 0644
signal.h File 13.79 KB 0644
signal_types.h File 1.69 KB 0644
signalfd.h File 817 B 0644
siox.h File 2.26 KB 0644
siphash.h File 5.66 KB 0644
sizes.h File 1.68 KB 0644
skb_array.h File 5.43 KB 0644
skbuff.h File 148.33 KB 0644
skbuff_ref.h File 1.74 KB 0644
skmsg.h File 13.94 KB 0644
slab.h File 37.02 KB 0644
slimbus.h File 6.94 KB 0644
sm501-regs.h File 11.62 KB 0644
sm501.h File 4.02 KB 0644
smc91x.h File 1.57 KB 0644
smp.h File 8.03 KB 0644
smp_types.h File 1.35 KB 0644
smpboot.h File 1.68 KB 0644
smsc911x.h File 1.63 KB 0644
smscphy.h File 3.1 KB 0644
sock_diag.h File 2.42 KB 0644
socket.h File 15.52 KB 0644
sockptr.h File 4.05 KB 0644
softirq.h File 29 B 0644
sonet.h File 469 B 0644
sony-laptop.h File 1.41 KB 0644
sonypi.h File 1.71 KB 0644
sort.h File 348 B 0644
sound.h File 685 B 0644
soundcard.h File 1.59 KB 0644
spinlock.h File 17.55 KB 0644
spinlock_api.h File 28 B 0644
spinlock_api_smp.h File 5.23 KB 0644
spinlock_api_up.h File 3.38 KB 0644
spinlock_rt.h File 4.12 KB 0644
spinlock_types.h File 1.78 KB 0644
spinlock_types_raw.h File 1.69 KB 0644
spinlock_types_up.h File 732 B 0644
spinlock_up.h File 2.08 KB 0644
splice.h File 3.72 KB 0644
spmi.h File 5.85 KB 0644
sprintf.h File 1.24 KB 0644
sram.h File 437 B 0644
srcu.h File 15.35 KB 0644
srcutiny.h File 3.15 KB 0644
srcutree.h File 10.6 KB 0644
ssbi.h File 726 B 0644
stackdepot.h File 8.95 KB 0644
stackleak.h File 2.36 KB 0644
stackprotector.h File 859 B 0644
stacktrace.h File 4 KB 0644
start_kernel.h File 345 B 0644
stat.h File 1.82 KB 0644
statfs.h File 1.78 KB 0644
static_call.h File 10.66 KB 0644
static_call_types.h File 2.74 KB 0644
static_key.h File 30 B 0644
stdarg.h File 313 B 0644
stddef.h File 3.17 KB 0644
stm.h File 4.6 KB 0644
stmmac.h File 7.79 KB 0644
stmp3xxx_rtc_wdt.h File 331 B 0644
stmp_device.h File 412 B 0644
stop_machine.h File 4.94 KB 0644
string.h File 17.88 KB 0644
string_choices.h File 2.22 KB 0644
string_helpers.h File 3.29 KB 0644
stringhash.h File 2.65 KB 0644
stringify.h File 395 B 0644
sungem_phy.h File 3.97 KB 0644
sunserialcore.h File 1.08 KB 0644
sunxi-rsb.h File 2.89 KB 0644
surface_acpi_notify.h File 1.07 KB 0644
suspend.h File 20.63 KB 0644
svga.h File 3.75 KB 0644
sw842.h File 328 B 0644
swab.h File 912 B 0644
swait.h File 9.47 KB 0644
swait_api.h File 25 B 0644
swap.h File 21.47 KB 0644
swap_cgroup.h File 1004 B 0644
swap_slots.h File 721 B 0644
swapfile.h File 450 B 0644
swapops.h File 16.33 KB 0644
swiotlb.h File 9.09 KB 0644
switchtec.h File 10.92 KB 0644
sxgbe_platform.h File 1.23 KB 0644
sync_core.h File 1.03 KB 0644
sync_file.h File 1.57 KB 0644
synclink.h File 989 B 0644
sys.h File 960 B 0644
sys_soc.h File 1.26 KB 0644
syscall_user_dispatch.h File 1.31 KB 0644
syscall_user_dispatch_types.h File 388 B 0644
syscalls.h File 56.4 KB 0644
syscalls_api.h File 28 B 0644
syscore_ops.h File 633 B 0644
sysctl.h File 9.6 KB 0644
sysfb.h File 2.87 KB 0644
sysfs.h File 24.5 KB 0644
syslog.h File 1.29 KB 0644
sysrq.h File 1.95 KB 0644
sysv_fs.h File 9.03 KB 0644
t10-pi.h File 1.85 KB 0644
task_io_accounting.h File 1.13 KB 0644
task_io_accounting_ops.h File 2.55 KB 0644
task_work.h File 1.06 KB 0644
taskstats_kern.h File 957 B 0644
tboot.h File 3.26 KB 0644
tc.h File 3.46 KB 0644
tca6416_keypad.h File 683 B 0644
tcp.h File 20.67 KB 0644
tee_core.h File 9.67 KB 0644
tee_drv.h File 8.94 KB 0644
tegra-icc.h File 1.86 KB 0644
termios_internal.h File 1.48 KB 0644
text-patching.h File 349 B 0644
textsearch.h File 4.73 KB 0644
textsearch_fsm.h File 1.19 KB 0644
tfrc.h File 1.68 KB 0644
thermal.h File 11.63 KB 0644
thread_info.h File 7.75 KB 0644
threads.h File 1.31 KB 0644
thunderbolt.h File 21.38 KB 0644
ti-emif-sram.h File 4.75 KB 0644
ti_wilink_st.h File 13.47 KB 0644
tick.h File 9.89 KB 0644
tifm.h File 4.66 KB 0644
timb_dma.h File 1.17 KB 0644
timb_gpio.h File 717 B 0644
time.h File 3.14 KB 0644
time32.h File 1.75 KB 0644
time64.h File 4.68 KB 0644
time_namespace.h File 4.02 KB 0644
timecounter.h File 4.38 KB 0644
timekeeper_internal.h File 5.72 KB 0644
timekeeping.h File 8.82 KB 0644
timer.h File 7.4 KB 0644
timer_types.h File 477 B 0644
timerfd.h File 508 B 0644
timeriomem-rng.h File 432 B 0644
timerqueue.h File 1.18 KB 0644
timerqueue_types.h File 335 B 0644
timex.h File 6.41 KB 0644
tnum.h File 4.15 KB 0644
topology.h File 7.33 KB 0644
torture.h File 4.91 KB 0644
toshiba.h File 460 B 0644
tpm.h File 14.74 KB 0644
tpm_command.h File 847 B 0644
tpm_eventlog.h File 6.53 KB 0644
trace.h File 2.77 KB 0644
trace_clock.h File 667 B 0644
trace_events.h File 30.39 KB 0644
trace_recursion.h File 5 KB 0644
trace_seq.h File 4.52 KB 0644
tracefs.h File 3.79 KB 0644
tracepoint-defs.h File 2.46 KB 0644
tracepoint.h File 20.39 KB 0644
transport_class.h File 2.58 KB 0644
ts-nbus.h File 532 B 0644
tsacct_kern.h File 1.2 KB 0644
tsm.h File 3.78 KB 0644
tty.h File 17.21 KB 0644
tty_buffer.h File 1.29 KB 0644
tty_driver.h File 22.2 KB 0644
tty_flip.h File 2.68 KB 0644
tty_ldisc.h File 10.29 KB 0644
tty_port.h File 9.21 KB 0644
turris-omnia-mcu-interface.h File 11.13 KB 0644
typecheck.h File 782 B 0644
types.h File 6.04 KB 0644
u64_stats_sync.h File 5.45 KB 0644
u64_stats_sync_api.h File 34 B 0644
uacce.h File 4.37 KB 0644
uaccess.h File 18.83 KB 0644
ubsan.h File 307 B 0644
ucs2_string.h File 740 B 0644
udp.h File 6.09 KB 0644
uidgid.h File 4.27 KB 0644
uidgid_types.h File 241 B 0644
uio.h File 12.13 KB 0644
uio_driver.h File 5.25 KB 0644
umh.h File 1.82 KB 0644
unaligned.h File 3.14 KB 0644
unicode.h File 2.05 KB 0644
union_find.h File 1.14 KB 0644
units.h File 2.88 KB 0644
unroll.h File 1.77 KB 0644
uprobes.h File 9.44 KB 0644
usb.h File 78.94 KB 0644
usb_usual.h File 3.58 KB 0644
usbdevice_fs.h File 2.18 KB 0644
user-return-notifier.h File 1.18 KB 0644
user.h File 22 B 0644
user_events.h File 1.68 KB 0644
user_namespace.h File 6.42 KB 0644
userfaultfd_k.h File 13.22 KB 0644
usermode_driver.h File 515 B 0644
util_macros.h File 2.51 KB 0644
uts.h File 388 B 0644
utsname.h File 1.8 KB 0644
uuid.h File 2.49 KB 0644
vbox_utils.h File 1.75 KB 0644
vdpa.h File 22.11 KB 0644
verification.h File 1.86 KB 0644
vermagic.h File 1.24 KB 0644
vexpress.h File 297 B 0644
vfio.h File 13.34 KB 0644
vfio_pci_core.h File 5.59 KB 0644
vfs.h File 116 B 0644
vga_switcheroo.h File 8.62 KB 0644
vgaarb.h File 2.81 KB 0644
vhost_iotlb.h File 1.43 KB 0644
via-core.h File 6.57 KB 0644
via.h File 932 B 0644
via_i2c.h File 844 B 0644
videodev2.h File 2.7 KB 0644
virtio.h File 10.57 KB 0644
virtio_anchor.h File 507 B 0644
virtio_byteorder.h File 1.46 KB 0644
virtio_caif.h File 513 B 0644
virtio_config.h File 18.11 KB 0644
virtio_dma_buf.h File 1.12 KB 0644
virtio_net.h File 6.53 KB 0644
virtio_pci_admin.h File 1.47 KB 0644
virtio_pci_legacy.h File 1.37 KB 0644
virtio_pci_modern.h File 4.39 KB 0644
virtio_ring.h File 3.2 KB 0644
virtio_vsock.h File 7.44 KB 0644
vm_event_item.h File 4.29 KB 0644
vmalloc.h File 10.61 KB 0644
vmcore_info.h File 3.08 KB 0644
vmpressure.h File 1.68 KB 0644
vmstat.h File 16.78 KB 0644
vmw_vmci_api.h File 2.88 KB 0644
vmw_vmci_defs.h File 29.93 KB 0644
vringh.h File 9.35 KB 0644
vt.h File 611 B 0644
vt_buffer.h File 1.13 KB 0644
vt_kern.h File 5.32 KB 0644
vtime.h File 4.47 KB 0644
w1.h File 8.93 KB 0644
wait.h File 43.03 KB 0644
wait_api.h File 24 B 0644
wait_bit.h File 22.51 KB 0644
watch_queue.h File 3.83 KB 0644
watchdog.h File 8.21 KB 0644
win_minmax.h File 831 B 0644
wireless.h File 1.56 KB 0644
wkup_m3_ipc.h File 1.58 KB 0644
wm97xx.h File 10.44 KB 0644
wmi.h File 3.36 KB 0644
wordpart.h File 1.5 KB 0644
workqueue.h File 29.84 KB 0644
workqueue_api.h File 29 B 0644
workqueue_types.h File 564 B 0644
writeback.h File 12.67 KB 0644
ww_mutex.h File 13.38 KB 0644
wwan.h File 6 KB 0644
xarray.h File 58.06 KB 0644
xattr.h File 4.5 KB 0644
xxhash.h File 8.27 KB 0644
xz.h File 15.66 KB 0644
yam.h File 2.18 KB 0644
zconf.h File 1.73 KB 0644
zlib.h File 28.11 KB 0644
zorro.h File 3.57 KB 0644
zpool.h File 2.84 KB 0644
zsmalloc.h File 1.71 KB 0644
zstd.h File 22.47 KB 0644
zstd_errors.h File 3.09 KB 0644
zstd_lib.h File 144.05 KB 0644
zswap.h File 1.82 KB 0644
zutil.h File 2.73 KB 0644
Filemanager