__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef __KVM_HOST_H
#define __KVM_HOST_H
#include <linux/types.h>
#include <linux/hardirq.h>
#include <linux/list.h>
#include <linux/mutex.h>
#include <linux/spinlock.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/sched/stat.h>
#include <linux/bug.h>
#include <linux/minmax.h>
#include <linux/mm.h>
#include <linux/mmu_notifier.h>
#include <linux/preempt.h>
#include <linux/msi.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/rcupdate.h>
#include <linux/ratelimit.h>
#include <linux/err.h>
#include <linux/irqflags.h>
#include <linux/context_tracking.h>
#include <linux/irqbypass.h>
#include <linux/rcuwait.h>
#include <linux/refcount.h>
#include <linux/nospec.h>
#include <linux/notifier.h>
#include <linux/ftrace.h>
#include <linux/hashtable.h>
#include <linux/instrumentation.h>
#include <linux/interval_tree.h>
#include <linux/rbtree.h>
#include <linux/xarray.h>
#include <asm/signal.h>
#include <linux/kvm.h>
#include <linux/kvm_para.h>
#include <linux/kvm_types.h>
#include <asm/kvm_host.h>
#include <linux/kvm_dirty_ring.h>
#ifndef KVM_MAX_VCPU_IDS
#define KVM_MAX_VCPU_IDS KVM_MAX_VCPUS
#endif
/*
* The bit 16 ~ bit 31 of kvm_userspace_memory_region::flags are internally
* used in kvm, other bits are visible for userspace which are defined in
* include/linux/kvm_h.
*/
#define KVM_MEMSLOT_INVALID (1UL << 16)
/*
* Bit 63 of the memslot generation number is an "update in-progress flag",
* e.g. is temporarily set for the duration of kvm_swap_active_memslots().
* This flag effectively creates a unique generation number that is used to
* mark cached memslot data, e.g. MMIO accesses, as potentially being stale,
* i.e. may (or may not) have come from the previous memslots generation.
*
* This is necessary because the actual memslots update is not atomic with
* respect to the generation number update. Updating the generation number
* first would allow a vCPU to cache a spte from the old memslots using the
* new generation number, and updating the generation number after switching
* to the new memslots would allow cache hits using the old generation number
* to reference the defunct memslots.
*
* This mechanism is used to prevent getting hits in KVM's caches while a
* memslot update is in-progress, and to prevent cache hits *after* updating
* the actual generation number against accesses that were inserted into the
* cache *before* the memslots were updated.
*/
#define KVM_MEMSLOT_GEN_UPDATE_IN_PROGRESS BIT_ULL(63)
/* Two fragments for cross MMIO pages. */
#define KVM_MAX_MMIO_FRAGMENTS 2
#ifndef KVM_MAX_NR_ADDRESS_SPACES
#define KVM_MAX_NR_ADDRESS_SPACES 1
#endif
/*
* For the normal pfn, the highest 12 bits should be zero,
* so we can mask bit 62 ~ bit 52 to indicate the error pfn,
* mask bit 63 to indicate the noslot pfn.
*/
#define KVM_PFN_ERR_MASK (0x7ffULL << 52)
#define KVM_PFN_ERR_NOSLOT_MASK (0xfffULL << 52)
#define KVM_PFN_NOSLOT (0x1ULL << 63)
#define KVM_PFN_ERR_FAULT (KVM_PFN_ERR_MASK)
#define KVM_PFN_ERR_HWPOISON (KVM_PFN_ERR_MASK + 1)
#define KVM_PFN_ERR_RO_FAULT (KVM_PFN_ERR_MASK + 2)
#define KVM_PFN_ERR_SIGPENDING (KVM_PFN_ERR_MASK + 3)
#define KVM_PFN_ERR_NEEDS_IO (KVM_PFN_ERR_MASK + 4)
/*
* error pfns indicate that the gfn is in slot but faild to
* translate it to pfn on host.
*/
static inline bool is_error_pfn(kvm_pfn_t pfn)
{
return !!(pfn & KVM_PFN_ERR_MASK);
}
/*
* KVM_PFN_ERR_SIGPENDING indicates that fetching the PFN was interrupted
* by a pending signal. Note, the signal may or may not be fatal.
*/
static inline bool is_sigpending_pfn(kvm_pfn_t pfn)
{
return pfn == KVM_PFN_ERR_SIGPENDING;
}
/*
* error_noslot pfns indicate that the gfn can not be
* translated to pfn - it is not in slot or failed to
* translate it to pfn.
*/
static inline bool is_error_noslot_pfn(kvm_pfn_t pfn)
{
return !!(pfn & KVM_PFN_ERR_NOSLOT_MASK);
}
/* noslot pfn indicates that the gfn is not in slot. */
static inline bool is_noslot_pfn(kvm_pfn_t pfn)
{
return pfn == KVM_PFN_NOSLOT;
}
/*
* architectures with KVM_HVA_ERR_BAD other than PAGE_OFFSET (e.g. s390)
* provide own defines and kvm_is_error_hva
*/
#ifndef KVM_HVA_ERR_BAD
#define KVM_HVA_ERR_BAD (PAGE_OFFSET)
#define KVM_HVA_ERR_RO_BAD (PAGE_OFFSET + PAGE_SIZE)
static inline bool kvm_is_error_hva(unsigned long addr)
{
return addr >= PAGE_OFFSET;
}
#endif
static inline bool kvm_is_error_gpa(gpa_t gpa)
{
return gpa == INVALID_GPA;
}
#define KVM_REQUEST_MASK GENMASK(7,0)
#define KVM_REQUEST_NO_WAKEUP BIT(8)
#define KVM_REQUEST_WAIT BIT(9)
#define KVM_REQUEST_NO_ACTION BIT(10)
/*
* Architecture-independent vcpu->requests bit members
* Bits 3-7 are reserved for more arch-independent bits.
*/
#define KVM_REQ_TLB_FLUSH (0 | KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
#define KVM_REQ_VM_DEAD (1 | KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
#define KVM_REQ_UNBLOCK 2
#define KVM_REQ_DIRTY_RING_SOFT_FULL 3
#define KVM_REQUEST_ARCH_BASE 8
/*
* KVM_REQ_OUTSIDE_GUEST_MODE exists is purely as way to force the vCPU to
* OUTSIDE_GUEST_MODE. KVM_REQ_OUTSIDE_GUEST_MODE differs from a vCPU "kick"
* in that it ensures the vCPU has reached OUTSIDE_GUEST_MODE before continuing
* on. A kick only guarantees that the vCPU is on its way out, e.g. a previous
* kick may have set vcpu->mode to EXITING_GUEST_MODE, and so there's no
* guarantee the vCPU received an IPI and has actually exited guest mode.
*/
#define KVM_REQ_OUTSIDE_GUEST_MODE (KVM_REQUEST_NO_ACTION | KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
#define KVM_ARCH_REQ_FLAGS(nr, flags) ({ \
BUILD_BUG_ON((unsigned)(nr) >= (sizeof_field(struct kvm_vcpu, requests) * 8) - KVM_REQUEST_ARCH_BASE); \
(unsigned)(((nr) + KVM_REQUEST_ARCH_BASE) | (flags)); \
})
#define KVM_ARCH_REQ(nr) KVM_ARCH_REQ_FLAGS(nr, 0)
bool kvm_make_vcpus_request_mask(struct kvm *kvm, unsigned int req,
unsigned long *vcpu_bitmap);
bool kvm_make_all_cpus_request(struct kvm *kvm, unsigned int req);
#define KVM_USERSPACE_IRQ_SOURCE_ID 0
#define KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID 1
extern struct mutex kvm_lock;
extern struct list_head vm_list;
struct kvm_io_range {
gpa_t addr;
int len;
struct kvm_io_device *dev;
};
#define NR_IOBUS_DEVS 1000
struct kvm_io_bus {
int dev_count;
int ioeventfd_count;
struct kvm_io_range range[];
};
enum kvm_bus {
KVM_MMIO_BUS,
KVM_PIO_BUS,
KVM_VIRTIO_CCW_NOTIFY_BUS,
KVM_FAST_MMIO_BUS,
KVM_IOCSR_BUS,
KVM_NR_BUSES
};
int kvm_io_bus_write(struct kvm_vcpu *vcpu, enum kvm_bus bus_idx, gpa_t addr,
int len, const void *val);
int kvm_io_bus_write_cookie(struct kvm_vcpu *vcpu, enum kvm_bus bus_idx,
gpa_t addr, int len, const void *val, long cookie);
int kvm_io_bus_read(struct kvm_vcpu *vcpu, enum kvm_bus bus_idx, gpa_t addr,
int len, void *val);
int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,
int len, struct kvm_io_device *dev);
int kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx,
struct kvm_io_device *dev);
struct kvm_io_device *kvm_io_bus_get_dev(struct kvm *kvm, enum kvm_bus bus_idx,
gpa_t addr);
#ifdef CONFIG_KVM_ASYNC_PF
struct kvm_async_pf {
struct work_struct work;
struct list_head link;
struct list_head queue;
struct kvm_vcpu *vcpu;
gpa_t cr2_or_gpa;
unsigned long addr;
struct kvm_arch_async_pf arch;
bool wakeup_all;
bool notpresent_injected;
};
void kvm_clear_async_pf_completion_queue(struct kvm_vcpu *vcpu);
void kvm_check_async_pf_completion(struct kvm_vcpu *vcpu);
bool kvm_setup_async_pf(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
unsigned long hva, struct kvm_arch_async_pf *arch);
int kvm_async_pf_wakeup_all(struct kvm_vcpu *vcpu);
#endif
#ifdef CONFIG_KVM_GENERIC_MMU_NOTIFIER
union kvm_mmu_notifier_arg {
unsigned long attributes;
};
enum kvm_gfn_range_filter {
KVM_FILTER_SHARED = BIT(0),
KVM_FILTER_PRIVATE = BIT(1),
};
struct kvm_gfn_range {
struct kvm_memory_slot *slot;
gfn_t start;
gfn_t end;
union kvm_mmu_notifier_arg arg;
enum kvm_gfn_range_filter attr_filter;
bool may_block;
};
bool kvm_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range);
bool kvm_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range);
bool kvm_test_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range);
#endif
enum {
OUTSIDE_GUEST_MODE,
IN_GUEST_MODE,
EXITING_GUEST_MODE,
READING_SHADOW_PAGE_TABLES,
};
struct kvm_host_map {
/*
* Only valid if the 'pfn' is managed by the host kernel (i.e. There is
* a 'struct page' for it. When using mem= kernel parameter some memory
* can be used as guest memory but they are not managed by host
* kernel).
*/
struct page *pinned_page;
struct page *page;
void *hva;
kvm_pfn_t pfn;
kvm_pfn_t gfn;
bool writable;
};
/*
* Used to check if the mapping is valid or not. Never use 'kvm_host_map'
* directly to check for that.
*/
static inline bool kvm_vcpu_mapped(struct kvm_host_map *map)
{
return !!map->hva;
}
static inline bool kvm_vcpu_can_poll(ktime_t cur, ktime_t stop)
{
return single_task_running() && !need_resched() && ktime_before(cur, stop);
}
/*
* Sometimes a large or cross-page mmio needs to be broken up into separate
* exits for userspace servicing.
*/
struct kvm_mmio_fragment {
gpa_t gpa;
void *data;
unsigned len;
};
struct kvm_vcpu {
struct kvm *kvm;
#ifdef CONFIG_PREEMPT_NOTIFIERS
struct preempt_notifier preempt_notifier;
#endif
int cpu;
int vcpu_id; /* id given by userspace at creation */
int vcpu_idx; /* index into kvm->vcpu_array */
int ____srcu_idx; /* Don't use this directly. You've been warned. */
#ifdef CONFIG_PROVE_RCU
int srcu_depth;
#endif
int mode;
u64 requests;
unsigned long guest_debug;
struct mutex mutex;
struct kvm_run *run;
#ifndef __KVM_HAVE_ARCH_WQP
struct rcuwait wait;
#endif
struct pid *pid;
rwlock_t pid_lock;
int sigset_active;
sigset_t sigset;
unsigned int halt_poll_ns;
bool valid_wakeup;
#ifdef CONFIG_HAS_IOMEM
int mmio_needed;
int mmio_read_completed;
int mmio_is_write;
int mmio_cur_fragment;
int mmio_nr_fragments;
struct kvm_mmio_fragment mmio_fragments[KVM_MAX_MMIO_FRAGMENTS];
#endif
#ifdef CONFIG_KVM_ASYNC_PF
struct {
u32 queued;
struct list_head queue;
struct list_head done;
spinlock_t lock;
} async_pf;
#endif
#ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT
/*
* Cpu relax intercept or pause loop exit optimization
* in_spin_loop: set when a vcpu does a pause loop exit
* or cpu relax intercepted.
* dy_eligible: indicates whether vcpu is eligible for directed yield.
*/
struct {
bool in_spin_loop;
bool dy_eligible;
} spin_loop;
#endif
bool wants_to_run;
bool preempted;
bool ready;
bool scheduled_out;
struct kvm_vcpu_arch arch;
struct kvm_vcpu_stat stat;
char stats_id[KVM_STATS_NAME_SIZE];
struct kvm_dirty_ring dirty_ring;
/*
* The most recently used memslot by this vCPU and the slots generation
* for which it is valid.
* No wraparound protection is needed since generations won't overflow in
* thousands of years, even assuming 1M memslot operations per second.
*/
struct kvm_memory_slot *last_used_slot;
u64 last_used_slot_gen;
};
/*
* Start accounting time towards a guest.
* Must be called before entering guest context.
*/
static __always_inline void guest_timing_enter_irqoff(void)
{
/*
* This is running in ioctl context so its safe to assume that it's the
* stime pending cputime to flush.
*/
instrumentation_begin();
vtime_account_guest_enter();
instrumentation_end();
}
/*
* Enter guest context and enter an RCU extended quiescent state.
*
* Between guest_context_enter_irqoff() and guest_context_exit_irqoff() it is
* unsafe to use any code which may directly or indirectly use RCU, tracing
* (including IRQ flag tracing), or lockdep. All code in this period must be
* non-instrumentable.
*/
static __always_inline void guest_context_enter_irqoff(void)
{
/*
* KVM does not hold any references to rcu protected data when it
* switches CPU into a guest mode. In fact switching to a guest mode
* is very similar to exiting to userspace from rcu point of view. In
* addition CPU may stay in a guest mode for quite a long time (up to
* one time slice). Lets treat guest mode as quiescent state, just like
* we do with user-mode execution.
*/
if (!context_tracking_guest_enter()) {
instrumentation_begin();
rcu_virt_note_context_switch();
instrumentation_end();
}
}
/*
* Deprecated. Architectures should move to guest_timing_enter_irqoff() and
* guest_state_enter_irqoff().
*/
static __always_inline void guest_enter_irqoff(void)
{
guest_timing_enter_irqoff();
guest_context_enter_irqoff();
}
/**
* guest_state_enter_irqoff - Fixup state when entering a guest
*
* Entry to a guest will enable interrupts, but the kernel state is interrupts
* disabled when this is invoked. Also tell RCU about it.
*
* 1) Trace interrupts on state
* 2) Invoke context tracking if enabled to adjust RCU state
* 3) Tell lockdep that interrupts are enabled
*
* Invoked from architecture specific code before entering a guest.
* Must be called with interrupts disabled and the caller must be
* non-instrumentable.
* The caller has to invoke guest_timing_enter_irqoff() before this.
*
* Note: this is analogous to exit_to_user_mode().
*/
static __always_inline void guest_state_enter_irqoff(void)
{
instrumentation_begin();
trace_hardirqs_on_prepare();
lockdep_hardirqs_on_prepare();
instrumentation_end();
guest_context_enter_irqoff();
lockdep_hardirqs_on(CALLER_ADDR0);
}
/*
* Exit guest context and exit an RCU extended quiescent state.
*
* Between guest_context_enter_irqoff() and guest_context_exit_irqoff() it is
* unsafe to use any code which may directly or indirectly use RCU, tracing
* (including IRQ flag tracing), or lockdep. All code in this period must be
* non-instrumentable.
*/
static __always_inline void guest_context_exit_irqoff(void)
{
/*
* Guest mode is treated as a quiescent state, see
* guest_context_enter_irqoff() for more details.
*/
if (!context_tracking_guest_exit()) {
instrumentation_begin();
rcu_virt_note_context_switch();
instrumentation_end();
}
}
/*
* Stop accounting time towards a guest.
* Must be called after exiting guest context.
*/
static __always_inline void guest_timing_exit_irqoff(void)
{
instrumentation_begin();
/* Flush the guest cputime we spent on the guest */
vtime_account_guest_exit();
instrumentation_end();
}
/*
* Deprecated. Architectures should move to guest_state_exit_irqoff() and
* guest_timing_exit_irqoff().
*/
static __always_inline void guest_exit_irqoff(void)
{
guest_context_exit_irqoff();
guest_timing_exit_irqoff();
}
static inline void guest_exit(void)
{
unsigned long flags;
local_irq_save(flags);
guest_exit_irqoff();
local_irq_restore(flags);
}
/**
* guest_state_exit_irqoff - Establish state when returning from guest mode
*
* Entry from a guest disables interrupts, but guest mode is traced as
* interrupts enabled. Also with NO_HZ_FULL RCU might be idle.
*
* 1) Tell lockdep that interrupts are disabled
* 2) Invoke context tracking if enabled to reactivate RCU
* 3) Trace interrupts off state
*
* Invoked from architecture specific code after exiting a guest.
* Must be invoked with interrupts disabled and the caller must be
* non-instrumentable.
* The caller has to invoke guest_timing_exit_irqoff() after this.
*
* Note: this is analogous to enter_from_user_mode().
*/
static __always_inline void guest_state_exit_irqoff(void)
{
lockdep_hardirqs_off(CALLER_ADDR0);
guest_context_exit_irqoff();
instrumentation_begin();
trace_hardirqs_off_finish();
instrumentation_end();
}
static inline int kvm_vcpu_exiting_guest_mode(struct kvm_vcpu *vcpu)
{
/*
* The memory barrier ensures a previous write to vcpu->requests cannot
* be reordered with the read of vcpu->mode. It pairs with the general
* memory barrier following the write of vcpu->mode in VCPU RUN.
*/
smp_mb__before_atomic();
return cmpxchg(&vcpu->mode, IN_GUEST_MODE, EXITING_GUEST_MODE);
}
/*
* Some of the bitops functions do not support too long bitmaps.
* This number must be determined not to exceed such limits.
*/
#define KVM_MEM_MAX_NR_PAGES ((1UL << 31) - 1)
/*
* Since at idle each memslot belongs to two memslot sets it has to contain
* two embedded nodes for each data structure that it forms a part of.
*
* Two memslot sets (one active and one inactive) are necessary so the VM
* continues to run on one memslot set while the other is being modified.
*
* These two memslot sets normally point to the same set of memslots.
* They can, however, be desynchronized when performing a memslot management
* operation by replacing the memslot to be modified by its copy.
* After the operation is complete, both memslot sets once again point to
* the same, common set of memslot data.
*
* The memslots themselves are independent of each other so they can be
* individually added or deleted.
*/
struct kvm_memory_slot {
struct hlist_node id_node[2];
struct interval_tree_node hva_node[2];
struct rb_node gfn_node[2];
gfn_t base_gfn;
unsigned long npages;
unsigned long *dirty_bitmap;
struct kvm_arch_memory_slot arch;
unsigned long userspace_addr;
u32 flags;
short id;
u16 as_id;
#ifdef CONFIG_KVM_PRIVATE_MEM
struct {
/*
* Writes protected by kvm->slots_lock. Acquiring a
* reference via kvm_gmem_get_file() is protected by
* either kvm->slots_lock or kvm->srcu.
*/
struct file *file;
pgoff_t pgoff;
} gmem;
#endif
};
static inline bool kvm_slot_can_be_private(const struct kvm_memory_slot *slot)
{
return slot && (slot->flags & KVM_MEM_GUEST_MEMFD);
}
static inline bool kvm_slot_dirty_track_enabled(const struct kvm_memory_slot *slot)
{
return slot->flags & KVM_MEM_LOG_DIRTY_PAGES;
}
static inline unsigned long kvm_dirty_bitmap_bytes(struct kvm_memory_slot *memslot)
{
return ALIGN(memslot->npages, BITS_PER_LONG) / 8;
}
static inline unsigned long *kvm_second_dirty_bitmap(struct kvm_memory_slot *memslot)
{
unsigned long len = kvm_dirty_bitmap_bytes(memslot);
return memslot->dirty_bitmap + len / sizeof(*memslot->dirty_bitmap);
}
#ifndef KVM_DIRTY_LOG_MANUAL_CAPS
#define KVM_DIRTY_LOG_MANUAL_CAPS KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE
#endif
struct kvm_s390_adapter_int {
u64 ind_addr;
u64 summary_addr;
u64 ind_offset;
u32 summary_offset;
u32 adapter_id;
};
struct kvm_hv_sint {
u32 vcpu;
u32 sint;
};
struct kvm_xen_evtchn {
u32 port;
u32 vcpu_id;
int vcpu_idx;
u32 priority;
};
struct kvm_kernel_irq_routing_entry {
u32 gsi;
u32 type;
int (*set)(struct kvm_kernel_irq_routing_entry *e,
struct kvm *kvm, int irq_source_id, int level,
bool line_status);
union {
struct {
unsigned irqchip;
unsigned pin;
} irqchip;
struct {
u32 address_lo;
u32 address_hi;
u32 data;
u32 flags;
u32 devid;
} msi;
struct kvm_s390_adapter_int adapter;
struct kvm_hv_sint hv_sint;
struct kvm_xen_evtchn xen_evtchn;
};
struct hlist_node link;
};
#ifdef CONFIG_HAVE_KVM_IRQ_ROUTING
struct kvm_irq_routing_table {
int chip[KVM_NR_IRQCHIPS][KVM_IRQCHIP_NUM_PINS];
u32 nr_rt_entries;
/*
* Array indexed by gsi. Each entry contains list of irq chips
* the gsi is connected to.
*/
struct hlist_head map[] __counted_by(nr_rt_entries);
};
#endif
bool kvm_arch_irqchip_in_kernel(struct kvm *kvm);
#ifndef KVM_INTERNAL_MEM_SLOTS
#define KVM_INTERNAL_MEM_SLOTS 0
#endif
#define KVM_MEM_SLOTS_NUM SHRT_MAX
#define KVM_USER_MEM_SLOTS (KVM_MEM_SLOTS_NUM - KVM_INTERNAL_MEM_SLOTS)
#if KVM_MAX_NR_ADDRESS_SPACES == 1
static inline int kvm_arch_nr_memslot_as_ids(struct kvm *kvm)
{
return KVM_MAX_NR_ADDRESS_SPACES;
}
static inline int kvm_arch_vcpu_memslots_id(struct kvm_vcpu *vcpu)
{
return 0;
}
#endif
/*
* Arch code must define kvm_arch_has_private_mem if support for private memory
* is enabled.
*/
#if !defined(kvm_arch_has_private_mem) && !IS_ENABLED(CONFIG_KVM_PRIVATE_MEM)
static inline bool kvm_arch_has_private_mem(struct kvm *kvm)
{
return false;
}
#endif
#ifndef kvm_arch_has_readonly_mem
static inline bool kvm_arch_has_readonly_mem(struct kvm *kvm)
{
return IS_ENABLED(CONFIG_HAVE_KVM_READONLY_MEM);
}
#endif
struct kvm_memslots {
u64 generation;
atomic_long_t last_used_slot;
struct rb_root_cached hva_tree;
struct rb_root gfn_tree;
/*
* The mapping table from slot id to memslot.
*
* 7-bit bucket count matches the size of the old id to index array for
* 512 slots, while giving good performance with this slot count.
* Higher bucket counts bring only small performance improvements but
* always result in higher memory usage (even for lower memslot counts).
*/
DECLARE_HASHTABLE(id_hash, 7);
int node_idx;
};
struct kvm {
#ifdef KVM_HAVE_MMU_RWLOCK
rwlock_t mmu_lock;
#else
spinlock_t mmu_lock;
#endif /* KVM_HAVE_MMU_RWLOCK */
struct mutex slots_lock;
/*
* Protects the arch-specific fields of struct kvm_memory_slots in
* use by the VM. To be used under the slots_lock (above) or in a
* kvm->srcu critical section where acquiring the slots_lock would
* lead to deadlock with the synchronize_srcu in
* kvm_swap_active_memslots().
*/
struct mutex slots_arch_lock;
struct mm_struct *mm; /* userspace tied to this vm */
unsigned long nr_memslot_pages;
/* The two memslot sets - active and inactive (per address space) */
struct kvm_memslots __memslots[KVM_MAX_NR_ADDRESS_SPACES][2];
/* The current active memslot set for each address space */
struct kvm_memslots __rcu *memslots[KVM_MAX_NR_ADDRESS_SPACES];
struct xarray vcpu_array;
/*
* Protected by slots_lock, but can be read outside if an
* incorrect answer is acceptable.
*/
atomic_t nr_memslots_dirty_logging;
/* Used to wait for completion of MMU notifiers. */
spinlock_t mn_invalidate_lock;
unsigned long mn_active_invalidate_count;
struct rcuwait mn_memslots_update_rcuwait;
/* For management / invalidation of gfn_to_pfn_caches */
spinlock_t gpc_lock;
struct list_head gpc_list;
/*
* created_vcpus is protected by kvm->lock, and is incremented
* at the beginning of KVM_CREATE_VCPU. online_vcpus is only
* incremented after storing the kvm_vcpu pointer in vcpus,
* and is accessed atomically.
*/
atomic_t online_vcpus;
int max_vcpus;
int created_vcpus;
int last_boosted_vcpu;
struct list_head vm_list;
struct mutex lock;
struct kvm_io_bus __rcu *buses[KVM_NR_BUSES];
#ifdef CONFIG_HAVE_KVM_IRQCHIP
struct {
spinlock_t lock;
struct list_head items;
/* resampler_list update side is protected by resampler_lock. */
struct list_head resampler_list;
struct mutex resampler_lock;
} irqfds;
#endif
struct list_head ioeventfds;
struct kvm_vm_stat stat;
struct kvm_arch arch;
refcount_t users_count;
#ifdef CONFIG_KVM_MMIO
struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
spinlock_t ring_lock;
struct list_head coalesced_zones;
#endif
struct mutex irq_lock;
#ifdef CONFIG_HAVE_KVM_IRQCHIP
/*
* Update side is protected by irq_lock.
*/
struct kvm_irq_routing_table __rcu *irq_routing;
struct hlist_head irq_ack_notifier_list;
#endif
#ifdef CONFIG_KVM_GENERIC_MMU_NOTIFIER
struct mmu_notifier mmu_notifier;
unsigned long mmu_invalidate_seq;
long mmu_invalidate_in_progress;
gfn_t mmu_invalidate_range_start;
gfn_t mmu_invalidate_range_end;
#endif
struct list_head devices;
u64 manual_dirty_log_protect;
struct dentry *debugfs_dentry;
struct kvm_stat_data **debugfs_stat_data;
struct srcu_struct srcu;
struct srcu_struct irq_srcu;
pid_t userspace_pid;
bool override_halt_poll_ns;
unsigned int max_halt_poll_ns;
u32 dirty_ring_size;
bool dirty_ring_with_bitmap;
bool vm_bugged;
bool vm_dead;
#ifdef CONFIG_HAVE_KVM_PM_NOTIFIER
struct notifier_block pm_notifier;
#endif
#ifdef CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES
/* Protected by slots_locks (for writes) and RCU (for reads) */
struct xarray mem_attr_array;
#endif
char stats_id[KVM_STATS_NAME_SIZE];
};
#define kvm_err(fmt, ...) \
pr_err("kvm [%i]: " fmt, task_pid_nr(current), ## __VA_ARGS__)
#define kvm_info(fmt, ...) \
pr_info("kvm [%i]: " fmt, task_pid_nr(current), ## __VA_ARGS__)
#define kvm_debug(fmt, ...) \
pr_debug("kvm [%i]: " fmt, task_pid_nr(current), ## __VA_ARGS__)
#define kvm_debug_ratelimited(fmt, ...) \
pr_debug_ratelimited("kvm [%i]: " fmt, task_pid_nr(current), \
## __VA_ARGS__)
#define kvm_pr_unimpl(fmt, ...) \
pr_err_ratelimited("kvm [%i]: " fmt, \
task_tgid_nr(current), ## __VA_ARGS__)
/* The guest did something we don't support. */
#define vcpu_unimpl(vcpu, fmt, ...) \
kvm_pr_unimpl("vcpu%i, guest rIP: 0x%lx " fmt, \
(vcpu)->vcpu_id, kvm_rip_read(vcpu), ## __VA_ARGS__)
#define vcpu_debug(vcpu, fmt, ...) \
kvm_debug("vcpu%i " fmt, (vcpu)->vcpu_id, ## __VA_ARGS__)
#define vcpu_debug_ratelimited(vcpu, fmt, ...) \
kvm_debug_ratelimited("vcpu%i " fmt, (vcpu)->vcpu_id, \
## __VA_ARGS__)
#define vcpu_err(vcpu, fmt, ...) \
kvm_err("vcpu%i " fmt, (vcpu)->vcpu_id, ## __VA_ARGS__)
static inline void kvm_vm_dead(struct kvm *kvm)
{
kvm->vm_dead = true;
kvm_make_all_cpus_request(kvm, KVM_REQ_VM_DEAD);
}
static inline void kvm_vm_bugged(struct kvm *kvm)
{
kvm->vm_bugged = true;
kvm_vm_dead(kvm);
}
#define KVM_BUG(cond, kvm, fmt...) \
({ \
bool __ret = !!(cond); \
\
if (WARN_ONCE(__ret && !(kvm)->vm_bugged, fmt)) \
kvm_vm_bugged(kvm); \
unlikely(__ret); \
})
#define KVM_BUG_ON(cond, kvm) \
({ \
bool __ret = !!(cond); \
\
if (WARN_ON_ONCE(__ret && !(kvm)->vm_bugged)) \
kvm_vm_bugged(kvm); \
unlikely(__ret); \
})
/*
* Note, "data corruption" refers to corruption of host kernel data structures,
* not guest data. Guest data corruption, suspected or confirmed, that is tied
* and contained to a single VM should *never* BUG() and potentially panic the
* host, i.e. use this variant of KVM_BUG() if and only if a KVM data structure
* is corrupted and that corruption can have a cascading effect to other parts
* of the hosts and/or to other VMs.
*/
#define KVM_BUG_ON_DATA_CORRUPTION(cond, kvm) \
({ \
bool __ret = !!(cond); \
\
if (IS_ENABLED(CONFIG_BUG_ON_DATA_CORRUPTION)) \
BUG_ON(__ret); \
else if (WARN_ON_ONCE(__ret && !(kvm)->vm_bugged)) \
kvm_vm_bugged(kvm); \
unlikely(__ret); \
})
static inline void kvm_vcpu_srcu_read_lock(struct kvm_vcpu *vcpu)
{
#ifdef CONFIG_PROVE_RCU
WARN_ONCE(vcpu->srcu_depth++,
"KVM: Illegal vCPU srcu_idx LOCK, depth=%d", vcpu->srcu_depth - 1);
#endif
vcpu->____srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
}
static inline void kvm_vcpu_srcu_read_unlock(struct kvm_vcpu *vcpu)
{
srcu_read_unlock(&vcpu->kvm->srcu, vcpu->____srcu_idx);
#ifdef CONFIG_PROVE_RCU
WARN_ONCE(--vcpu->srcu_depth,
"KVM: Illegal vCPU srcu_idx UNLOCK, depth=%d", vcpu->srcu_depth);
#endif
}
static inline bool kvm_dirty_log_manual_protect_and_init_set(struct kvm *kvm)
{
return !!(kvm->manual_dirty_log_protect & KVM_DIRTY_LOG_INITIALLY_SET);
}
static inline struct kvm_io_bus *kvm_get_bus(struct kvm *kvm, enum kvm_bus idx)
{
return srcu_dereference_check(kvm->buses[idx], &kvm->srcu,
lockdep_is_held(&kvm->slots_lock) ||
!refcount_read(&kvm->users_count));
}
static inline struct kvm_vcpu *kvm_get_vcpu(struct kvm *kvm, int i)
{
int num_vcpus = atomic_read(&kvm->online_vcpus);
/*
* Explicitly verify the target vCPU is online, as the anti-speculation
* logic only limits the CPU's ability to speculate, e.g. given a "bad"
* index, clamping the index to 0 would return vCPU0, not NULL.
*/
if (i >= num_vcpus)
return NULL;
i = array_index_nospec(i, num_vcpus);
/* Pairs with smp_wmb() in kvm_vm_ioctl_create_vcpu. */
smp_rmb();
return xa_load(&kvm->vcpu_array, i);
}
#define kvm_for_each_vcpu(idx, vcpup, kvm) \
if (atomic_read(&kvm->online_vcpus)) \
xa_for_each_range(&kvm->vcpu_array, idx, vcpup, 0, \
(atomic_read(&kvm->online_vcpus) - 1))
static inline struct kvm_vcpu *kvm_get_vcpu_by_id(struct kvm *kvm, int id)
{
struct kvm_vcpu *vcpu = NULL;
unsigned long i;
if (id < 0)
return NULL;
if (id < KVM_MAX_VCPUS)
vcpu = kvm_get_vcpu(kvm, id);
if (vcpu && vcpu->vcpu_id == id)
return vcpu;
kvm_for_each_vcpu(i, vcpu, kvm)
if (vcpu->vcpu_id == id)
return vcpu;
return NULL;
}
void kvm_destroy_vcpus(struct kvm *kvm);
void vcpu_load(struct kvm_vcpu *vcpu);
void vcpu_put(struct kvm_vcpu *vcpu);
#ifdef __KVM_HAVE_IOAPIC
void kvm_arch_post_irq_ack_notifier_list_update(struct kvm *kvm);
void kvm_arch_post_irq_routing_update(struct kvm *kvm);
#else
static inline void kvm_arch_post_irq_ack_notifier_list_update(struct kvm *kvm)
{
}
static inline void kvm_arch_post_irq_routing_update(struct kvm *kvm)
{
}
#endif
#ifdef CONFIG_HAVE_KVM_IRQCHIP
int kvm_irqfd_init(void);
void kvm_irqfd_exit(void);
#else
static inline int kvm_irqfd_init(void)
{
return 0;
}
static inline void kvm_irqfd_exit(void)
{
}
#endif
int kvm_init(unsigned vcpu_size, unsigned vcpu_align, struct module *module);
void kvm_exit(void);
void kvm_get_kvm(struct kvm *kvm);
bool kvm_get_kvm_safe(struct kvm *kvm);
void kvm_put_kvm(struct kvm *kvm);
bool file_is_kvm(struct file *file);
void kvm_put_kvm_no_destroy(struct kvm *kvm);
static inline struct kvm_memslots *__kvm_memslots(struct kvm *kvm, int as_id)
{
as_id = array_index_nospec(as_id, KVM_MAX_NR_ADDRESS_SPACES);
return srcu_dereference_check(kvm->memslots[as_id], &kvm->srcu,
lockdep_is_held(&kvm->slots_lock) ||
!refcount_read(&kvm->users_count));
}
static inline struct kvm_memslots *kvm_memslots(struct kvm *kvm)
{
return __kvm_memslots(kvm, 0);
}
static inline struct kvm_memslots *kvm_vcpu_memslots(struct kvm_vcpu *vcpu)
{
int as_id = kvm_arch_vcpu_memslots_id(vcpu);
return __kvm_memslots(vcpu->kvm, as_id);
}
static inline bool kvm_memslots_empty(struct kvm_memslots *slots)
{
return RB_EMPTY_ROOT(&slots->gfn_tree);
}
bool kvm_are_all_memslots_empty(struct kvm *kvm);
#define kvm_for_each_memslot(memslot, bkt, slots) \
hash_for_each(slots->id_hash, bkt, memslot, id_node[slots->node_idx]) \
if (WARN_ON_ONCE(!memslot->npages)) { \
} else
static inline
struct kvm_memory_slot *id_to_memslot(struct kvm_memslots *slots, int id)
{
struct kvm_memory_slot *slot;
int idx = slots->node_idx;
hash_for_each_possible(slots->id_hash, slot, id_node[idx], id) {
if (slot->id == id)
return slot;
}
return NULL;
}
/* Iterator used for walking memslots that overlap a gfn range. */
struct kvm_memslot_iter {
struct kvm_memslots *slots;
struct rb_node *node;
struct kvm_memory_slot *slot;
};
static inline void kvm_memslot_iter_next(struct kvm_memslot_iter *iter)
{
iter->node = rb_next(iter->node);
if (!iter->node)
return;
iter->slot = container_of(iter->node, struct kvm_memory_slot, gfn_node[iter->slots->node_idx]);
}
static inline void kvm_memslot_iter_start(struct kvm_memslot_iter *iter,
struct kvm_memslots *slots,
gfn_t start)
{
int idx = slots->node_idx;
struct rb_node *tmp;
struct kvm_memory_slot *slot;
iter->slots = slots;
/*
* Find the so called "upper bound" of a key - the first node that has
* its key strictly greater than the searched one (the start gfn in our case).
*/
iter->node = NULL;
for (tmp = slots->gfn_tree.rb_node; tmp; ) {
slot = container_of(tmp, struct kvm_memory_slot, gfn_node[idx]);
if (start < slot->base_gfn) {
iter->node = tmp;
tmp = tmp->rb_left;
} else {
tmp = tmp->rb_right;
}
}
/*
* Find the slot with the lowest gfn that can possibly intersect with
* the range, so we'll ideally have slot start <= range start
*/
if (iter->node) {
/*
* A NULL previous node means that the very first slot
* already has a higher start gfn.
* In this case slot start > range start.
*/
tmp = rb_prev(iter->node);
if (tmp)
iter->node = tmp;
} else {
/* a NULL node below means no slots */
iter->node = rb_last(&slots->gfn_tree);
}
if (iter->node) {
iter->slot = container_of(iter->node, struct kvm_memory_slot, gfn_node[idx]);
/*
* It is possible in the slot start < range start case that the
* found slot ends before or at range start (slot end <= range start)
* and so it does not overlap the requested range.
*
* In such non-overlapping case the next slot (if it exists) will
* already have slot start > range start, otherwise the logic above
* would have found it instead of the current slot.
*/
if (iter->slot->base_gfn + iter->slot->npages <= start)
kvm_memslot_iter_next(iter);
}
}
static inline bool kvm_memslot_iter_is_valid(struct kvm_memslot_iter *iter, gfn_t end)
{
if (!iter->node)
return false;
/*
* If this slot starts beyond or at the end of the range so does
* every next one
*/
return iter->slot->base_gfn < end;
}
/* Iterate over each memslot at least partially intersecting [start, end) range */
#define kvm_for_each_memslot_in_gfn_range(iter, slots, start, end) \
for (kvm_memslot_iter_start(iter, slots, start); \
kvm_memslot_iter_is_valid(iter, end); \
kvm_memslot_iter_next(iter))
struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn);
struct kvm_memslots *kvm_vcpu_memslots(struct kvm_vcpu *vcpu);
struct kvm_memory_slot *kvm_vcpu_gfn_to_memslot(struct kvm_vcpu *vcpu, gfn_t gfn);
/*
* KVM_SET_USER_MEMORY_REGION ioctl allows the following operations:
* - create a new memory slot
* - delete an existing memory slot
* - modify an existing memory slot
* -- move it in the guest physical memory space
* -- just change its flags
*
* Since flags can be changed by some of these operations, the following
* differentiation is the best we can do for kvm_set_memory_region():
*/
enum kvm_mr_change {
KVM_MR_CREATE,
KVM_MR_DELETE,
KVM_MR_MOVE,
KVM_MR_FLAGS_ONLY,
};
int kvm_set_internal_memslot(struct kvm *kvm,
const struct kvm_userspace_memory_region2 *mem);
void kvm_arch_free_memslot(struct kvm *kvm, struct kvm_memory_slot *slot);
void kvm_arch_memslots_updated(struct kvm *kvm, u64 gen);
int kvm_arch_prepare_memory_region(struct kvm *kvm,
const struct kvm_memory_slot *old,
struct kvm_memory_slot *new,
enum kvm_mr_change change);
void kvm_arch_commit_memory_region(struct kvm *kvm,
struct kvm_memory_slot *old,
const struct kvm_memory_slot *new,
enum kvm_mr_change change);
/* flush all memory translations */
void kvm_arch_flush_shadow_all(struct kvm *kvm);
/* flush memory translations pointing to 'slot' */
void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
struct kvm_memory_slot *slot);
int kvm_prefetch_pages(struct kvm_memory_slot *slot, gfn_t gfn,
struct page **pages, int nr_pages);
struct page *__gfn_to_page(struct kvm *kvm, gfn_t gfn, bool write);
static inline struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn)
{
return __gfn_to_page(kvm, gfn, true);
}
unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn);
unsigned long gfn_to_hva_prot(struct kvm *kvm, gfn_t gfn, bool *writable);
unsigned long gfn_to_hva_memslot(struct kvm_memory_slot *slot, gfn_t gfn);
unsigned long gfn_to_hva_memslot_prot(struct kvm_memory_slot *slot, gfn_t gfn,
bool *writable);
static inline void kvm_release_page_unused(struct page *page)
{
if (!page)
return;
put_page(page);
}
void kvm_release_page_clean(struct page *page);
void kvm_release_page_dirty(struct page *page);
static inline void kvm_release_faultin_page(struct kvm *kvm, struct page *page,
bool unused, bool dirty)
{
lockdep_assert_once(lockdep_is_held(&kvm->mmu_lock) || unused);
if (!page)
return;
/*
* If the page that KVM got from the *primary MMU* is writable, and KVM
* installed or reused a SPTE, mark the page/folio dirty. Note, this
* may mark a folio dirty even if KVM created a read-only SPTE, e.g. if
* the GFN is write-protected. Folios can't be safely marked dirty
* outside of mmu_lock as doing so could race with writeback on the
* folio. As a result, KVM can't mark folios dirty in the fast page
* fault handler, and so KVM must (somewhat) speculatively mark the
* folio dirty if KVM could locklessly make the SPTE writable.
*/
if (unused)
kvm_release_page_unused(page);
else if (dirty)
kvm_release_page_dirty(page);
else
kvm_release_page_clean(page);
}
kvm_pfn_t __kvm_faultin_pfn(const struct kvm_memory_slot *slot, gfn_t gfn,
unsigned int foll, bool *writable,
struct page **refcounted_page);
static inline kvm_pfn_t kvm_faultin_pfn(struct kvm_vcpu *vcpu, gfn_t gfn,
bool write, bool *writable,
struct page **refcounted_page)
{
return __kvm_faultin_pfn(kvm_vcpu_gfn_to_memslot(vcpu, gfn), gfn,
write ? FOLL_WRITE : 0, writable, refcounted_page);
}
int kvm_read_guest_page(struct kvm *kvm, gfn_t gfn, void *data, int offset,
int len);
int kvm_read_guest(struct kvm *kvm, gpa_t gpa, void *data, unsigned long len);
int kvm_read_guest_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
void *data, unsigned long len);
int kvm_read_guest_offset_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
void *data, unsigned int offset,
unsigned long len);
int kvm_write_guest_page(struct kvm *kvm, gfn_t gfn, const void *data,
int offset, int len);
int kvm_write_guest(struct kvm *kvm, gpa_t gpa, const void *data,
unsigned long len);
int kvm_write_guest_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
void *data, unsigned long len);
int kvm_write_guest_offset_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
void *data, unsigned int offset,
unsigned long len);
int kvm_gfn_to_hva_cache_init(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
gpa_t gpa, unsigned long len);
#define __kvm_get_guest(kvm, gfn, offset, v) \
({ \
unsigned long __addr = gfn_to_hva(kvm, gfn); \
typeof(v) __user *__uaddr = (typeof(__uaddr))(__addr + offset); \
int __ret = -EFAULT; \
\
if (!kvm_is_error_hva(__addr)) \
__ret = get_user(v, __uaddr); \
__ret; \
})
#define kvm_get_guest(kvm, gpa, v) \
({ \
gpa_t __gpa = gpa; \
struct kvm *__kvm = kvm; \
\
__kvm_get_guest(__kvm, __gpa >> PAGE_SHIFT, \
offset_in_page(__gpa), v); \
})
#define __kvm_put_guest(kvm, gfn, offset, v) \
({ \
unsigned long __addr = gfn_to_hva(kvm, gfn); \
typeof(v) __user *__uaddr = (typeof(__uaddr))(__addr + offset); \
int __ret = -EFAULT; \
\
if (!kvm_is_error_hva(__addr)) \
__ret = put_user(v, __uaddr); \
if (!__ret) \
mark_page_dirty(kvm, gfn); \
__ret; \
})
#define kvm_put_guest(kvm, gpa, v) \
({ \
gpa_t __gpa = gpa; \
struct kvm *__kvm = kvm; \
\
__kvm_put_guest(__kvm, __gpa >> PAGE_SHIFT, \
offset_in_page(__gpa), v); \
})
int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len);
bool kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn);
bool kvm_vcpu_is_visible_gfn(struct kvm_vcpu *vcpu, gfn_t gfn);
unsigned long kvm_host_page_size(struct kvm_vcpu *vcpu, gfn_t gfn);
void mark_page_dirty_in_slot(struct kvm *kvm, const struct kvm_memory_slot *memslot, gfn_t gfn);
void mark_page_dirty(struct kvm *kvm, gfn_t gfn);
int __kvm_vcpu_map(struct kvm_vcpu *vcpu, gpa_t gpa, struct kvm_host_map *map,
bool writable);
void kvm_vcpu_unmap(struct kvm_vcpu *vcpu, struct kvm_host_map *map);
static inline int kvm_vcpu_map(struct kvm_vcpu *vcpu, gpa_t gpa,
struct kvm_host_map *map)
{
return __kvm_vcpu_map(vcpu, gpa, map, true);
}
static inline int kvm_vcpu_map_readonly(struct kvm_vcpu *vcpu, gpa_t gpa,
struct kvm_host_map *map)
{
return __kvm_vcpu_map(vcpu, gpa, map, false);
}
unsigned long kvm_vcpu_gfn_to_hva(struct kvm_vcpu *vcpu, gfn_t gfn);
unsigned long kvm_vcpu_gfn_to_hva_prot(struct kvm_vcpu *vcpu, gfn_t gfn, bool *writable);
int kvm_vcpu_read_guest_page(struct kvm_vcpu *vcpu, gfn_t gfn, void *data, int offset,
int len);
int kvm_vcpu_read_guest_atomic(struct kvm_vcpu *vcpu, gpa_t gpa, void *data,
unsigned long len);
int kvm_vcpu_read_guest(struct kvm_vcpu *vcpu, gpa_t gpa, void *data,
unsigned long len);
int kvm_vcpu_write_guest_page(struct kvm_vcpu *vcpu, gfn_t gfn, const void *data,
int offset, int len);
int kvm_vcpu_write_guest(struct kvm_vcpu *vcpu, gpa_t gpa, const void *data,
unsigned long len);
void kvm_vcpu_mark_page_dirty(struct kvm_vcpu *vcpu, gfn_t gfn);
/**
* kvm_gpc_init - initialize gfn_to_pfn_cache.
*
* @gpc: struct gfn_to_pfn_cache object.
* @kvm: pointer to kvm instance.
*
* This sets up a gfn_to_pfn_cache by initializing locks and assigning the
* immutable attributes. Note, the cache must be zero-allocated (or zeroed by
* the caller before init).
*/
void kvm_gpc_init(struct gfn_to_pfn_cache *gpc, struct kvm *kvm);
/**
* kvm_gpc_activate - prepare a cached kernel mapping and HPA for a given guest
* physical address.
*
* @gpc: struct gfn_to_pfn_cache object.
* @gpa: guest physical address to map.
* @len: sanity check; the range being access must fit a single page.
*
* @return: 0 for success.
* -EINVAL for a mapping which would cross a page boundary.
* -EFAULT for an untranslatable guest physical address.
*
* This primes a gfn_to_pfn_cache and links it into the @gpc->kvm's list for
* invalidations to be processed. Callers are required to use kvm_gpc_check()
* to ensure that the cache is valid before accessing the target page.
*/
int kvm_gpc_activate(struct gfn_to_pfn_cache *gpc, gpa_t gpa, unsigned long len);
/**
* kvm_gpc_activate_hva - prepare a cached kernel mapping and HPA for a given HVA.
*
* @gpc: struct gfn_to_pfn_cache object.
* @hva: userspace virtual address to map.
* @len: sanity check; the range being access must fit a single page.
*
* @return: 0 for success.
* -EINVAL for a mapping which would cross a page boundary.
* -EFAULT for an untranslatable guest physical address.
*
* The semantics of this function are the same as those of kvm_gpc_activate(). It
* merely bypasses a layer of address translation.
*/
int kvm_gpc_activate_hva(struct gfn_to_pfn_cache *gpc, unsigned long hva, unsigned long len);
/**
* kvm_gpc_check - check validity of a gfn_to_pfn_cache.
*
* @gpc: struct gfn_to_pfn_cache object.
* @len: sanity check; the range being access must fit a single page.
*
* @return: %true if the cache is still valid and the address matches.
* %false if the cache is not valid.
*
* Callers outside IN_GUEST_MODE context should hold a read lock on @gpc->lock
* while calling this function, and then continue to hold the lock until the
* access is complete.
*
* Callers in IN_GUEST_MODE may do so without locking, although they should
* still hold a read lock on kvm->scru for the memslot checks.
*/
bool kvm_gpc_check(struct gfn_to_pfn_cache *gpc, unsigned long len);
/**
* kvm_gpc_refresh - update a previously initialized cache.
*
* @gpc: struct gfn_to_pfn_cache object.
* @len: sanity check; the range being access must fit a single page.
*
* @return: 0 for success.
* -EINVAL for a mapping which would cross a page boundary.
* -EFAULT for an untranslatable guest physical address.
*
* This will attempt to refresh a gfn_to_pfn_cache. Note that a successful
* return from this function does not mean the page can be immediately
* accessed because it may have raced with an invalidation. Callers must
* still lock and check the cache status, as this function does not return
* with the lock still held to permit access.
*/
int kvm_gpc_refresh(struct gfn_to_pfn_cache *gpc, unsigned long len);
/**
* kvm_gpc_deactivate - deactivate and unlink a gfn_to_pfn_cache.
*
* @gpc: struct gfn_to_pfn_cache object.
*
* This removes a cache from the VM's list to be processed on MMU notifier
* invocation.
*/
void kvm_gpc_deactivate(struct gfn_to_pfn_cache *gpc);
static inline bool kvm_gpc_is_gpa_active(struct gfn_to_pfn_cache *gpc)
{
return gpc->active && !kvm_is_error_gpa(gpc->gpa);
}
static inline bool kvm_gpc_is_hva_active(struct gfn_to_pfn_cache *gpc)
{
return gpc->active && kvm_is_error_gpa(gpc->gpa);
}
void kvm_sigset_activate(struct kvm_vcpu *vcpu);
void kvm_sigset_deactivate(struct kvm_vcpu *vcpu);
void kvm_vcpu_halt(struct kvm_vcpu *vcpu);
bool kvm_vcpu_block(struct kvm_vcpu *vcpu);
void kvm_arch_vcpu_blocking(struct kvm_vcpu *vcpu);
void kvm_arch_vcpu_unblocking(struct kvm_vcpu *vcpu);
bool kvm_vcpu_wake_up(struct kvm_vcpu *vcpu);
void kvm_vcpu_kick(struct kvm_vcpu *vcpu);
int kvm_vcpu_yield_to(struct kvm_vcpu *target);
void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu, bool yield_to_kernel_mode);
void kvm_flush_remote_tlbs(struct kvm *kvm);
void kvm_flush_remote_tlbs_range(struct kvm *kvm, gfn_t gfn, u64 nr_pages);
void kvm_flush_remote_tlbs_memslot(struct kvm *kvm,
const struct kvm_memory_slot *memslot);
#ifdef KVM_ARCH_NR_OBJS_PER_MEMORY_CACHE
int kvm_mmu_topup_memory_cache(struct kvm_mmu_memory_cache *mc, int min);
int __kvm_mmu_topup_memory_cache(struct kvm_mmu_memory_cache *mc, int capacity, int min);
int kvm_mmu_memory_cache_nr_free_objects(struct kvm_mmu_memory_cache *mc);
void kvm_mmu_free_memory_cache(struct kvm_mmu_memory_cache *mc);
void *kvm_mmu_memory_cache_alloc(struct kvm_mmu_memory_cache *mc);
#endif
void kvm_mmu_invalidate_begin(struct kvm *kvm);
void kvm_mmu_invalidate_range_add(struct kvm *kvm, gfn_t start, gfn_t end);
void kvm_mmu_invalidate_end(struct kvm *kvm);
bool kvm_mmu_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range);
long kvm_arch_dev_ioctl(struct file *filp,
unsigned int ioctl, unsigned long arg);
long kvm_arch_vcpu_ioctl(struct file *filp,
unsigned int ioctl, unsigned long arg);
vm_fault_t kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf);
int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext);
void kvm_arch_mmu_enable_log_dirty_pt_masked(struct kvm *kvm,
struct kvm_memory_slot *slot,
gfn_t gfn_offset,
unsigned long mask);
void kvm_arch_sync_dirty_log(struct kvm *kvm, struct kvm_memory_slot *memslot);
#ifndef CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT
int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log);
int kvm_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log,
int *is_dirty, struct kvm_memory_slot **memslot);
#endif
int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_level,
bool line_status);
int kvm_vm_ioctl_enable_cap(struct kvm *kvm,
struct kvm_enable_cap *cap);
int kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg);
long kvm_arch_vm_compat_ioctl(struct file *filp, unsigned int ioctl,
unsigned long arg);
int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu);
int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu);
int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
struct kvm_translation *tr);
int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs);
int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs);
int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
struct kvm_sregs *sregs);
int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
struct kvm_sregs *sregs);
int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
struct kvm_mp_state *mp_state);
int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
struct kvm_mp_state *mp_state);
int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
struct kvm_guest_debug *dbg);
int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu);
void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu);
void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu);
int kvm_arch_vcpu_precreate(struct kvm *kvm, unsigned int id);
int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu);
void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu);
void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu);
#ifdef CONFIG_HAVE_KVM_PM_NOTIFIER
int kvm_arch_pm_notifier(struct kvm *kvm, unsigned long state);
#endif
#ifdef __KVM_HAVE_ARCH_VCPU_DEBUGFS
void kvm_arch_create_vcpu_debugfs(struct kvm_vcpu *vcpu, struct dentry *debugfs_dentry);
#else
static inline void kvm_create_vcpu_debugfs(struct kvm_vcpu *vcpu) {}
#endif
#ifdef CONFIG_KVM_GENERIC_HARDWARE_ENABLING
/*
* kvm_arch_{enable,disable}_virtualization() are called on one CPU, under
* kvm_usage_lock, immediately after/before 0=>1 and 1=>0 transitions of
* kvm_usage_count, i.e. at the beginning of the generic hardware enabling
* sequence, and at the end of the generic hardware disabling sequence.
*/
void kvm_arch_enable_virtualization(void);
void kvm_arch_disable_virtualization(void);
/*
* kvm_arch_{enable,disable}_virtualization_cpu() are called on "every" CPU to
* do the actual twiddling of hardware bits. The hooks are called on all
* online CPUs when KVM enables/disabled virtualization, and on a single CPU
* when that CPU is onlined/offlined (including for Resume/Suspend).
*/
int kvm_arch_enable_virtualization_cpu(void);
void kvm_arch_disable_virtualization_cpu(void);
#endif
int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu);
bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu);
int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu);
bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu);
bool kvm_arch_dy_has_pending_interrupt(struct kvm_vcpu *vcpu);
bool kvm_arch_vcpu_preempted_in_kernel(struct kvm_vcpu *vcpu);
void kvm_arch_pre_destroy_vm(struct kvm *kvm);
void kvm_arch_create_vm_debugfs(struct kvm *kvm);
#ifndef __KVM_HAVE_ARCH_VM_ALLOC
/*
* All architectures that want to use vzalloc currently also
* need their own kvm_arch_alloc_vm implementation.
*/
static inline struct kvm *kvm_arch_alloc_vm(void)
{
return kzalloc(sizeof(struct kvm), GFP_KERNEL_ACCOUNT);
}
#endif
static inline void __kvm_arch_free_vm(struct kvm *kvm)
{
kvfree(kvm);
}
#ifndef __KVM_HAVE_ARCH_VM_FREE
static inline void kvm_arch_free_vm(struct kvm *kvm)
{
__kvm_arch_free_vm(kvm);
}
#endif
#ifndef __KVM_HAVE_ARCH_FLUSH_REMOTE_TLBS
static inline int kvm_arch_flush_remote_tlbs(struct kvm *kvm)
{
return -ENOTSUPP;
}
#else
int kvm_arch_flush_remote_tlbs(struct kvm *kvm);
#endif
#ifndef __KVM_HAVE_ARCH_FLUSH_REMOTE_TLBS_RANGE
static inline int kvm_arch_flush_remote_tlbs_range(struct kvm *kvm,
gfn_t gfn, u64 nr_pages)
{
return -EOPNOTSUPP;
}
#else
int kvm_arch_flush_remote_tlbs_range(struct kvm *kvm, gfn_t gfn, u64 nr_pages);
#endif
#ifdef __KVM_HAVE_ARCH_NONCOHERENT_DMA
void kvm_arch_register_noncoherent_dma(struct kvm *kvm);
void kvm_arch_unregister_noncoherent_dma(struct kvm *kvm);
bool kvm_arch_has_noncoherent_dma(struct kvm *kvm);
#else
static inline void kvm_arch_register_noncoherent_dma(struct kvm *kvm)
{
}
static inline void kvm_arch_unregister_noncoherent_dma(struct kvm *kvm)
{
}
static inline bool kvm_arch_has_noncoherent_dma(struct kvm *kvm)
{
return false;
}
#endif
#ifdef __KVM_HAVE_ARCH_ASSIGNED_DEVICE
void kvm_arch_start_assignment(struct kvm *kvm);
void kvm_arch_end_assignment(struct kvm *kvm);
bool kvm_arch_has_assigned_device(struct kvm *kvm);
#else
static inline void kvm_arch_start_assignment(struct kvm *kvm)
{
}
static inline void kvm_arch_end_assignment(struct kvm *kvm)
{
}
static __always_inline bool kvm_arch_has_assigned_device(struct kvm *kvm)
{
return false;
}
#endif
static inline struct rcuwait *kvm_arch_vcpu_get_wait(struct kvm_vcpu *vcpu)
{
#ifdef __KVM_HAVE_ARCH_WQP
return vcpu->arch.waitp;
#else
return &vcpu->wait;
#endif
}
/*
* Wake a vCPU if necessary, but don't do any stats/metadata updates. Returns
* true if the vCPU was blocking and was awakened, false otherwise.
*/
static inline bool __kvm_vcpu_wake_up(struct kvm_vcpu *vcpu)
{
return !!rcuwait_wake_up(kvm_arch_vcpu_get_wait(vcpu));
}
static inline bool kvm_vcpu_is_blocking(struct kvm_vcpu *vcpu)
{
return rcuwait_active(kvm_arch_vcpu_get_wait(vcpu));
}
#ifdef __KVM_HAVE_ARCH_INTC_INITIALIZED
/*
* returns true if the virtual interrupt controller is initialized and
* ready to accept virtual IRQ. On some architectures the virtual interrupt
* controller is dynamically instantiated and this is not always true.
*/
bool kvm_arch_intc_initialized(struct kvm *kvm);
#else
static inline bool kvm_arch_intc_initialized(struct kvm *kvm)
{
return true;
}
#endif
#ifdef CONFIG_GUEST_PERF_EVENTS
unsigned long kvm_arch_vcpu_get_ip(struct kvm_vcpu *vcpu);
void kvm_register_perf_callbacks(unsigned int (*pt_intr_handler)(void));
void kvm_unregister_perf_callbacks(void);
#else
static inline void kvm_register_perf_callbacks(void *ign) {}
static inline void kvm_unregister_perf_callbacks(void) {}
#endif /* CONFIG_GUEST_PERF_EVENTS */
int kvm_arch_init_vm(struct kvm *kvm, unsigned long type);
void kvm_arch_destroy_vm(struct kvm *kvm);
void kvm_arch_sync_events(struct kvm *kvm);
int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu);
struct kvm_irq_ack_notifier {
struct hlist_node link;
unsigned gsi;
void (*irq_acked)(struct kvm_irq_ack_notifier *kian);
};
int kvm_irq_map_gsi(struct kvm *kvm,
struct kvm_kernel_irq_routing_entry *entries, int gsi);
int kvm_irq_map_chip_pin(struct kvm *kvm, unsigned irqchip, unsigned pin);
int kvm_set_irq(struct kvm *kvm, int irq_source_id, u32 irq, int level,
bool line_status);
int kvm_set_msi(struct kvm_kernel_irq_routing_entry *irq_entry, struct kvm *kvm,
int irq_source_id, int level, bool line_status);
int kvm_arch_set_irq_inatomic(struct kvm_kernel_irq_routing_entry *e,
struct kvm *kvm, int irq_source_id,
int level, bool line_status);
bool kvm_irq_has_notifier(struct kvm *kvm, unsigned irqchip, unsigned pin);
void kvm_notify_acked_gsi(struct kvm *kvm, int gsi);
void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin);
void kvm_register_irq_ack_notifier(struct kvm *kvm,
struct kvm_irq_ack_notifier *kian);
void kvm_unregister_irq_ack_notifier(struct kvm *kvm,
struct kvm_irq_ack_notifier *kian);
int kvm_request_irq_source_id(struct kvm *kvm);
void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id);
bool kvm_arch_irqfd_allowed(struct kvm *kvm, struct kvm_irqfd *args);
/*
* Returns a pointer to the memslot if it contains gfn.
* Otherwise returns NULL.
*/
static inline struct kvm_memory_slot *
try_get_memslot(struct kvm_memory_slot *slot, gfn_t gfn)
{
if (!slot)
return NULL;
if (gfn >= slot->base_gfn && gfn < slot->base_gfn + slot->npages)
return slot;
else
return NULL;
}
/*
* Returns a pointer to the memslot that contains gfn. Otherwise returns NULL.
*
* With "approx" set returns the memslot also when the address falls
* in a hole. In that case one of the memslots bordering the hole is
* returned.
*/
static inline struct kvm_memory_slot *
search_memslots(struct kvm_memslots *slots, gfn_t gfn, bool approx)
{
struct kvm_memory_slot *slot;
struct rb_node *node;
int idx = slots->node_idx;
slot = NULL;
for (node = slots->gfn_tree.rb_node; node; ) {
slot = container_of(node, struct kvm_memory_slot, gfn_node[idx]);
if (gfn >= slot->base_gfn) {
if (gfn < slot->base_gfn + slot->npages)
return slot;
node = node->rb_right;
} else
node = node->rb_left;
}
return approx ? slot : NULL;
}
static inline struct kvm_memory_slot *
____gfn_to_memslot(struct kvm_memslots *slots, gfn_t gfn, bool approx)
{
struct kvm_memory_slot *slot;
slot = (struct kvm_memory_slot *)atomic_long_read(&slots->last_used_slot);
slot = try_get_memslot(slot, gfn);
if (slot)
return slot;
slot = search_memslots(slots, gfn, approx);
if (slot) {
atomic_long_set(&slots->last_used_slot, (unsigned long)slot);
return slot;
}
return NULL;
}
/*
* __gfn_to_memslot() and its descendants are here to allow arch code to inline
* the lookups in hot paths. gfn_to_memslot() itself isn't here as an inline
* because that would bloat other code too much.
*/
static inline struct kvm_memory_slot *
__gfn_to_memslot(struct kvm_memslots *slots, gfn_t gfn)
{
return ____gfn_to_memslot(slots, gfn, false);
}
static inline unsigned long
__gfn_to_hva_memslot(const struct kvm_memory_slot *slot, gfn_t gfn)
{
/*
* The index was checked originally in search_memslots. To avoid
* that a malicious guest builds a Spectre gadget out of e.g. page
* table walks, do not let the processor speculate loads outside
* the guest's registered memslots.
*/
unsigned long offset = gfn - slot->base_gfn;
offset = array_index_nospec(offset, slot->npages);
return slot->userspace_addr + offset * PAGE_SIZE;
}
static inline int memslot_id(struct kvm *kvm, gfn_t gfn)
{
return gfn_to_memslot(kvm, gfn)->id;
}
static inline gfn_t
hva_to_gfn_memslot(unsigned long hva, struct kvm_memory_slot *slot)
{
gfn_t gfn_offset = (hva - slot->userspace_addr) >> PAGE_SHIFT;
return slot->base_gfn + gfn_offset;
}
static inline gpa_t gfn_to_gpa(gfn_t gfn)
{
return (gpa_t)gfn << PAGE_SHIFT;
}
static inline gfn_t gpa_to_gfn(gpa_t gpa)
{
return (gfn_t)(gpa >> PAGE_SHIFT);
}
static inline hpa_t pfn_to_hpa(kvm_pfn_t pfn)
{
return (hpa_t)pfn << PAGE_SHIFT;
}
static inline bool kvm_is_gpa_in_memslot(struct kvm *kvm, gpa_t gpa)
{
unsigned long hva = gfn_to_hva(kvm, gpa_to_gfn(gpa));
return !kvm_is_error_hva(hva);
}
static inline void kvm_gpc_mark_dirty_in_slot(struct gfn_to_pfn_cache *gpc)
{
lockdep_assert_held(&gpc->lock);
if (!gpc->memslot)
return;
mark_page_dirty_in_slot(gpc->kvm, gpc->memslot, gpa_to_gfn(gpc->gpa));
}
enum kvm_stat_kind {
KVM_STAT_VM,
KVM_STAT_VCPU,
};
struct kvm_stat_data {
struct kvm *kvm;
const struct _kvm_stats_desc *desc;
enum kvm_stat_kind kind;
};
struct _kvm_stats_desc {
struct kvm_stats_desc desc;
char name[KVM_STATS_NAME_SIZE];
};
#define STATS_DESC_COMMON(type, unit, base, exp, sz, bsz) \
.flags = type | unit | base | \
BUILD_BUG_ON_ZERO(type & ~KVM_STATS_TYPE_MASK) | \
BUILD_BUG_ON_ZERO(unit & ~KVM_STATS_UNIT_MASK) | \
BUILD_BUG_ON_ZERO(base & ~KVM_STATS_BASE_MASK), \
.exponent = exp, \
.size = sz, \
.bucket_size = bsz
#define VM_GENERIC_STATS_DESC(stat, type, unit, base, exp, sz, bsz) \
{ \
{ \
STATS_DESC_COMMON(type, unit, base, exp, sz, bsz), \
.offset = offsetof(struct kvm_vm_stat, generic.stat) \
}, \
.name = #stat, \
}
#define VCPU_GENERIC_STATS_DESC(stat, type, unit, base, exp, sz, bsz) \
{ \
{ \
STATS_DESC_COMMON(type, unit, base, exp, sz, bsz), \
.offset = offsetof(struct kvm_vcpu_stat, generic.stat) \
}, \
.name = #stat, \
}
#define VM_STATS_DESC(stat, type, unit, base, exp, sz, bsz) \
{ \
{ \
STATS_DESC_COMMON(type, unit, base, exp, sz, bsz), \
.offset = offsetof(struct kvm_vm_stat, stat) \
}, \
.name = #stat, \
}
#define VCPU_STATS_DESC(stat, type, unit, base, exp, sz, bsz) \
{ \
{ \
STATS_DESC_COMMON(type, unit, base, exp, sz, bsz), \
.offset = offsetof(struct kvm_vcpu_stat, stat) \
}, \
.name = #stat, \
}
/* SCOPE: VM, VM_GENERIC, VCPU, VCPU_GENERIC */
#define STATS_DESC(SCOPE, stat, type, unit, base, exp, sz, bsz) \
SCOPE##_STATS_DESC(stat, type, unit, base, exp, sz, bsz)
#define STATS_DESC_CUMULATIVE(SCOPE, name, unit, base, exponent) \
STATS_DESC(SCOPE, name, KVM_STATS_TYPE_CUMULATIVE, \
unit, base, exponent, 1, 0)
#define STATS_DESC_INSTANT(SCOPE, name, unit, base, exponent) \
STATS_DESC(SCOPE, name, KVM_STATS_TYPE_INSTANT, \
unit, base, exponent, 1, 0)
#define STATS_DESC_PEAK(SCOPE, name, unit, base, exponent) \
STATS_DESC(SCOPE, name, KVM_STATS_TYPE_PEAK, \
unit, base, exponent, 1, 0)
#define STATS_DESC_LINEAR_HIST(SCOPE, name, unit, base, exponent, sz, bsz) \
STATS_DESC(SCOPE, name, KVM_STATS_TYPE_LINEAR_HIST, \
unit, base, exponent, sz, bsz)
#define STATS_DESC_LOG_HIST(SCOPE, name, unit, base, exponent, sz) \
STATS_DESC(SCOPE, name, KVM_STATS_TYPE_LOG_HIST, \
unit, base, exponent, sz, 0)
/* Cumulative counter, read/write */
#define STATS_DESC_COUNTER(SCOPE, name) \
STATS_DESC_CUMULATIVE(SCOPE, name, KVM_STATS_UNIT_NONE, \
KVM_STATS_BASE_POW10, 0)
/* Instantaneous counter, read only */
#define STATS_DESC_ICOUNTER(SCOPE, name) \
STATS_DESC_INSTANT(SCOPE, name, KVM_STATS_UNIT_NONE, \
KVM_STATS_BASE_POW10, 0)
/* Peak counter, read/write */
#define STATS_DESC_PCOUNTER(SCOPE, name) \
STATS_DESC_PEAK(SCOPE, name, KVM_STATS_UNIT_NONE, \
KVM_STATS_BASE_POW10, 0)
/* Instantaneous boolean value, read only */
#define STATS_DESC_IBOOLEAN(SCOPE, name) \
STATS_DESC_INSTANT(SCOPE, name, KVM_STATS_UNIT_BOOLEAN, \
KVM_STATS_BASE_POW10, 0)
/* Peak (sticky) boolean value, read/write */
#define STATS_DESC_PBOOLEAN(SCOPE, name) \
STATS_DESC_PEAK(SCOPE, name, KVM_STATS_UNIT_BOOLEAN, \
KVM_STATS_BASE_POW10, 0)
/* Cumulative time in nanosecond */
#define STATS_DESC_TIME_NSEC(SCOPE, name) \
STATS_DESC_CUMULATIVE(SCOPE, name, KVM_STATS_UNIT_SECONDS, \
KVM_STATS_BASE_POW10, -9)
/* Linear histogram for time in nanosecond */
#define STATS_DESC_LINHIST_TIME_NSEC(SCOPE, name, sz, bsz) \
STATS_DESC_LINEAR_HIST(SCOPE, name, KVM_STATS_UNIT_SECONDS, \
KVM_STATS_BASE_POW10, -9, sz, bsz)
/* Logarithmic histogram for time in nanosecond */
#define STATS_DESC_LOGHIST_TIME_NSEC(SCOPE, name, sz) \
STATS_DESC_LOG_HIST(SCOPE, name, KVM_STATS_UNIT_SECONDS, \
KVM_STATS_BASE_POW10, -9, sz)
#define KVM_GENERIC_VM_STATS() \
STATS_DESC_COUNTER(VM_GENERIC, remote_tlb_flush), \
STATS_DESC_COUNTER(VM_GENERIC, remote_tlb_flush_requests)
#define KVM_GENERIC_VCPU_STATS() \
STATS_DESC_COUNTER(VCPU_GENERIC, halt_successful_poll), \
STATS_DESC_COUNTER(VCPU_GENERIC, halt_attempted_poll), \
STATS_DESC_COUNTER(VCPU_GENERIC, halt_poll_invalid), \
STATS_DESC_COUNTER(VCPU_GENERIC, halt_wakeup), \
STATS_DESC_TIME_NSEC(VCPU_GENERIC, halt_poll_success_ns), \
STATS_DESC_TIME_NSEC(VCPU_GENERIC, halt_poll_fail_ns), \
STATS_DESC_TIME_NSEC(VCPU_GENERIC, halt_wait_ns), \
STATS_DESC_LOGHIST_TIME_NSEC(VCPU_GENERIC, halt_poll_success_hist, \
HALT_POLL_HIST_COUNT), \
STATS_DESC_LOGHIST_TIME_NSEC(VCPU_GENERIC, halt_poll_fail_hist, \
HALT_POLL_HIST_COUNT), \
STATS_DESC_LOGHIST_TIME_NSEC(VCPU_GENERIC, halt_wait_hist, \
HALT_POLL_HIST_COUNT), \
STATS_DESC_IBOOLEAN(VCPU_GENERIC, blocking)
ssize_t kvm_stats_read(char *id, const struct kvm_stats_header *header,
const struct _kvm_stats_desc *desc,
void *stats, size_t size_stats,
char __user *user_buffer, size_t size, loff_t *offset);
/**
* kvm_stats_linear_hist_update() - Update bucket value for linear histogram
* statistics data.
*
* @data: start address of the stats data
* @size: the number of bucket of the stats data
* @value: the new value used to update the linear histogram's bucket
* @bucket_size: the size (width) of a bucket
*/
static inline void kvm_stats_linear_hist_update(u64 *data, size_t size,
u64 value, size_t bucket_size)
{
size_t index = div64_u64(value, bucket_size);
index = min(index, size - 1);
++data[index];
}
/**
* kvm_stats_log_hist_update() - Update bucket value for logarithmic histogram
* statistics data.
*
* @data: start address of the stats data
* @size: the number of bucket of the stats data
* @value: the new value used to update the logarithmic histogram's bucket
*/
static inline void kvm_stats_log_hist_update(u64 *data, size_t size, u64 value)
{
size_t index = fls64(value);
index = min(index, size - 1);
++data[index];
}
#define KVM_STATS_LINEAR_HIST_UPDATE(array, value, bsize) \
kvm_stats_linear_hist_update(array, ARRAY_SIZE(array), value, bsize)
#define KVM_STATS_LOG_HIST_UPDATE(array, value) \
kvm_stats_log_hist_update(array, ARRAY_SIZE(array), value)
extern const struct kvm_stats_header kvm_vm_stats_header;
extern const struct _kvm_stats_desc kvm_vm_stats_desc[];
extern const struct kvm_stats_header kvm_vcpu_stats_header;
extern const struct _kvm_stats_desc kvm_vcpu_stats_desc[];
#ifdef CONFIG_KVM_GENERIC_MMU_NOTIFIER
static inline int mmu_invalidate_retry(struct kvm *kvm, unsigned long mmu_seq)
{
if (unlikely(kvm->mmu_invalidate_in_progress))
return 1;
/*
* Ensure the read of mmu_invalidate_in_progress happens before
* the read of mmu_invalidate_seq. This interacts with the
* smp_wmb() in mmu_notifier_invalidate_range_end to make sure
* that the caller either sees the old (non-zero) value of
* mmu_invalidate_in_progress or the new (incremented) value of
* mmu_invalidate_seq.
*
* PowerPC Book3s HV KVM calls this under a per-page lock rather
* than under kvm->mmu_lock, for scalability, so can't rely on
* kvm->mmu_lock to keep things ordered.
*/
smp_rmb();
if (kvm->mmu_invalidate_seq != mmu_seq)
return 1;
return 0;
}
static inline int mmu_invalidate_retry_gfn(struct kvm *kvm,
unsigned long mmu_seq,
gfn_t gfn)
{
lockdep_assert_held(&kvm->mmu_lock);
/*
* If mmu_invalidate_in_progress is non-zero, then the range maintained
* by kvm_mmu_notifier_invalidate_range_start contains all addresses
* that might be being invalidated. Note that it may include some false
* positives, due to shortcuts when handing concurrent invalidations.
*/
if (unlikely(kvm->mmu_invalidate_in_progress)) {
/*
* Dropping mmu_lock after bumping mmu_invalidate_in_progress
* but before updating the range is a KVM bug.
*/
if (WARN_ON_ONCE(kvm->mmu_invalidate_range_start == INVALID_GPA ||
kvm->mmu_invalidate_range_end == INVALID_GPA))
return 1;
if (gfn >= kvm->mmu_invalidate_range_start &&
gfn < kvm->mmu_invalidate_range_end)
return 1;
}
if (kvm->mmu_invalidate_seq != mmu_seq)
return 1;
return 0;
}
/*
* This lockless version of the range-based retry check *must* be paired with a
* call to the locked version after acquiring mmu_lock, i.e. this is safe to
* use only as a pre-check to avoid contending mmu_lock. This version *will*
* get false negatives and false positives.
*/
static inline bool mmu_invalidate_retry_gfn_unsafe(struct kvm *kvm,
unsigned long mmu_seq,
gfn_t gfn)
{
/*
* Use READ_ONCE() to ensure the in-progress flag and sequence counter
* are always read from memory, e.g. so that checking for retry in a
* loop won't result in an infinite retry loop. Don't force loads for
* start+end, as the key to avoiding infinite retry loops is observing
* the 1=>0 transition of in-progress, i.e. getting false negatives
* due to stale start+end values is acceptable.
*/
if (unlikely(READ_ONCE(kvm->mmu_invalidate_in_progress)) &&
gfn >= kvm->mmu_invalidate_range_start &&
gfn < kvm->mmu_invalidate_range_end)
return true;
return READ_ONCE(kvm->mmu_invalidate_seq) != mmu_seq;
}
#endif
#ifdef CONFIG_HAVE_KVM_IRQ_ROUTING
#define KVM_MAX_IRQ_ROUTES 4096 /* might need extension/rework in the future */
bool kvm_arch_can_set_irq_routing(struct kvm *kvm);
int kvm_set_irq_routing(struct kvm *kvm,
const struct kvm_irq_routing_entry *entries,
unsigned nr,
unsigned flags);
int kvm_init_irq_routing(struct kvm *kvm);
int kvm_set_routing_entry(struct kvm *kvm,
struct kvm_kernel_irq_routing_entry *e,
const struct kvm_irq_routing_entry *ue);
void kvm_free_irq_routing(struct kvm *kvm);
#else
static inline void kvm_free_irq_routing(struct kvm *kvm) {}
static inline int kvm_init_irq_routing(struct kvm *kvm)
{
return 0;
}
#endif
int kvm_send_userspace_msi(struct kvm *kvm, struct kvm_msi *msi);
void kvm_eventfd_init(struct kvm *kvm);
int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args);
#ifdef CONFIG_HAVE_KVM_IRQCHIP
int kvm_irqfd(struct kvm *kvm, struct kvm_irqfd *args);
void kvm_irqfd_release(struct kvm *kvm);
bool kvm_notify_irqfd_resampler(struct kvm *kvm,
unsigned int irqchip,
unsigned int pin);
void kvm_irq_routing_update(struct kvm *);
#else
static inline int kvm_irqfd(struct kvm *kvm, struct kvm_irqfd *args)
{
return -EINVAL;
}
static inline void kvm_irqfd_release(struct kvm *kvm) {}
static inline bool kvm_notify_irqfd_resampler(struct kvm *kvm,
unsigned int irqchip,
unsigned int pin)
{
return false;
}
#endif /* CONFIG_HAVE_KVM_IRQCHIP */
void kvm_arch_irq_routing_update(struct kvm *kvm);
static inline void __kvm_make_request(int req, struct kvm_vcpu *vcpu)
{
/*
* Ensure the rest of the request is published to kvm_check_request's
* caller. Paired with the smp_mb__after_atomic in kvm_check_request.
*/
smp_wmb();
set_bit(req & KVM_REQUEST_MASK, (void *)&vcpu->requests);
}
static __always_inline void kvm_make_request(int req, struct kvm_vcpu *vcpu)
{
/*
* Request that don't require vCPU action should never be logged in
* vcpu->requests. The vCPU won't clear the request, so it will stay
* logged indefinitely and prevent the vCPU from entering the guest.
*/
BUILD_BUG_ON(!__builtin_constant_p(req) ||
(req & KVM_REQUEST_NO_ACTION));
__kvm_make_request(req, vcpu);
}
static inline bool kvm_request_pending(struct kvm_vcpu *vcpu)
{
return READ_ONCE(vcpu->requests);
}
static inline bool kvm_test_request(int req, struct kvm_vcpu *vcpu)
{
return test_bit(req & KVM_REQUEST_MASK, (void *)&vcpu->requests);
}
static inline void kvm_clear_request(int req, struct kvm_vcpu *vcpu)
{
clear_bit(req & KVM_REQUEST_MASK, (void *)&vcpu->requests);
}
static inline bool kvm_check_request(int req, struct kvm_vcpu *vcpu)
{
if (kvm_test_request(req, vcpu)) {
kvm_clear_request(req, vcpu);
/*
* Ensure the rest of the request is visible to kvm_check_request's
* caller. Paired with the smp_wmb in kvm_make_request.
*/
smp_mb__after_atomic();
return true;
} else {
return false;
}
}
#ifdef CONFIG_KVM_GENERIC_HARDWARE_ENABLING
extern bool kvm_rebooting;
#endif
extern unsigned int halt_poll_ns;
extern unsigned int halt_poll_ns_grow;
extern unsigned int halt_poll_ns_grow_start;
extern unsigned int halt_poll_ns_shrink;
struct kvm_device {
const struct kvm_device_ops *ops;
struct kvm *kvm;
void *private;
struct list_head vm_node;
};
/* create, destroy, and name are mandatory */
struct kvm_device_ops {
const char *name;
/*
* create is called holding kvm->lock and any operations not suitable
* to do while holding the lock should be deferred to init (see
* below).
*/
int (*create)(struct kvm_device *dev, u32 type);
/*
* init is called after create if create is successful and is called
* outside of holding kvm->lock.
*/
void (*init)(struct kvm_device *dev);
/*
* Destroy is responsible for freeing dev.
*
* Destroy may be called before or after destructors are called
* on emulated I/O regions, depending on whether a reference is
* held by a vcpu or other kvm component that gets destroyed
* after the emulated I/O.
*/
void (*destroy)(struct kvm_device *dev);
/*
* Release is an alternative method to free the device. It is
* called when the device file descriptor is closed. Once
* release is called, the destroy method will not be called
* anymore as the device is removed from the device list of
* the VM. kvm->lock is held.
*/
void (*release)(struct kvm_device *dev);
int (*set_attr)(struct kvm_device *dev, struct kvm_device_attr *attr);
int (*get_attr)(struct kvm_device *dev, struct kvm_device_attr *attr);
int (*has_attr)(struct kvm_device *dev, struct kvm_device_attr *attr);
long (*ioctl)(struct kvm_device *dev, unsigned int ioctl,
unsigned long arg);
int (*mmap)(struct kvm_device *dev, struct vm_area_struct *vma);
};
struct kvm_device *kvm_device_from_filp(struct file *filp);
int kvm_register_device_ops(const struct kvm_device_ops *ops, u32 type);
void kvm_unregister_device_ops(u32 type);
extern struct kvm_device_ops kvm_mpic_ops;
extern struct kvm_device_ops kvm_arm_vgic_v2_ops;
extern struct kvm_device_ops kvm_arm_vgic_v3_ops;
#ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT
static inline void kvm_vcpu_set_in_spin_loop(struct kvm_vcpu *vcpu, bool val)
{
vcpu->spin_loop.in_spin_loop = val;
}
static inline void kvm_vcpu_set_dy_eligible(struct kvm_vcpu *vcpu, bool val)
{
vcpu->spin_loop.dy_eligible = val;
}
#else /* !CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT */
static inline void kvm_vcpu_set_in_spin_loop(struct kvm_vcpu *vcpu, bool val)
{
}
static inline void kvm_vcpu_set_dy_eligible(struct kvm_vcpu *vcpu, bool val)
{
}
#endif /* CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT */
static inline bool kvm_is_visible_memslot(struct kvm_memory_slot *memslot)
{
return (memslot && memslot->id < KVM_USER_MEM_SLOTS &&
!(memslot->flags & KVM_MEMSLOT_INVALID));
}
struct kvm_vcpu *kvm_get_running_vcpu(void);
struct kvm_vcpu * __percpu *kvm_get_running_vcpus(void);
#if IS_ENABLED(CONFIG_HAVE_KVM_IRQ_BYPASS)
bool kvm_arch_has_irq_bypass(void);
int kvm_arch_irq_bypass_add_producer(struct irq_bypass_consumer *,
struct irq_bypass_producer *);
void kvm_arch_irq_bypass_del_producer(struct irq_bypass_consumer *,
struct irq_bypass_producer *);
void kvm_arch_irq_bypass_stop(struct irq_bypass_consumer *);
void kvm_arch_irq_bypass_start(struct irq_bypass_consumer *);
int kvm_arch_update_irqfd_routing(struct kvm *kvm, unsigned int host_irq,
uint32_t guest_irq, bool set);
bool kvm_arch_irqfd_route_changed(struct kvm_kernel_irq_routing_entry *,
struct kvm_kernel_irq_routing_entry *);
#endif /* CONFIG_HAVE_KVM_IRQ_BYPASS */
#ifdef CONFIG_HAVE_KVM_INVALID_WAKEUPS
/* If we wakeup during the poll time, was it a sucessful poll? */
static inline bool vcpu_valid_wakeup(struct kvm_vcpu *vcpu)
{
return vcpu->valid_wakeup;
}
#else
static inline bool vcpu_valid_wakeup(struct kvm_vcpu *vcpu)
{
return true;
}
#endif /* CONFIG_HAVE_KVM_INVALID_WAKEUPS */
#ifdef CONFIG_HAVE_KVM_NO_POLL
/* Callback that tells if we must not poll */
bool kvm_arch_no_poll(struct kvm_vcpu *vcpu);
#else
static inline bool kvm_arch_no_poll(struct kvm_vcpu *vcpu)
{
return false;
}
#endif /* CONFIG_HAVE_KVM_NO_POLL */
#ifdef CONFIG_HAVE_KVM_VCPU_ASYNC_IOCTL
long kvm_arch_vcpu_async_ioctl(struct file *filp,
unsigned int ioctl, unsigned long arg);
#else
static inline long kvm_arch_vcpu_async_ioctl(struct file *filp,
unsigned int ioctl,
unsigned long arg)
{
return -ENOIOCTLCMD;
}
#endif /* CONFIG_HAVE_KVM_VCPU_ASYNC_IOCTL */
void kvm_arch_guest_memory_reclaimed(struct kvm *kvm);
#ifdef CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE
int kvm_arch_vcpu_run_pid_change(struct kvm_vcpu *vcpu);
#else
static inline int kvm_arch_vcpu_run_pid_change(struct kvm_vcpu *vcpu)
{
return 0;
}
#endif /* CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE */
#ifdef CONFIG_KVM_XFER_TO_GUEST_WORK
static inline void kvm_handle_signal_exit(struct kvm_vcpu *vcpu)
{
vcpu->run->exit_reason = KVM_EXIT_INTR;
vcpu->stat.signal_exits++;
}
#endif /* CONFIG_KVM_XFER_TO_GUEST_WORK */
/*
* If more than one page is being (un)accounted, @virt must be the address of
* the first page of a block of pages what were allocated together (i.e
* accounted together).
*
* kvm_account_pgtable_pages() is thread-safe because mod_lruvec_page_state()
* is thread-safe.
*/
static inline void kvm_account_pgtable_pages(void *virt, int nr)
{
mod_lruvec_page_state(virt_to_page(virt), NR_SECONDARY_PAGETABLE, nr);
}
/*
* This defines how many reserved entries we want to keep before we
* kick the vcpu to the userspace to avoid dirty ring full. This
* value can be tuned to higher if e.g. PML is enabled on the host.
*/
#define KVM_DIRTY_RING_RSVD_ENTRIES 64
/* Max number of entries allowed for each kvm dirty ring */
#define KVM_DIRTY_RING_MAX_ENTRIES 65536
static inline void kvm_prepare_memory_fault_exit(struct kvm_vcpu *vcpu,
gpa_t gpa, gpa_t size,
bool is_write, bool is_exec,
bool is_private)
{
vcpu->run->exit_reason = KVM_EXIT_MEMORY_FAULT;
vcpu->run->memory_fault.gpa = gpa;
vcpu->run->memory_fault.size = size;
/* RWX flags are not (yet) defined or communicated to userspace. */
vcpu->run->memory_fault.flags = 0;
if (is_private)
vcpu->run->memory_fault.flags |= KVM_MEMORY_EXIT_FLAG_PRIVATE;
}
#ifdef CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES
static inline unsigned long kvm_get_memory_attributes(struct kvm *kvm, gfn_t gfn)
{
return xa_to_value(xa_load(&kvm->mem_attr_array, gfn));
}
bool kvm_range_has_memory_attributes(struct kvm *kvm, gfn_t start, gfn_t end,
unsigned long mask, unsigned long attrs);
bool kvm_arch_pre_set_memory_attributes(struct kvm *kvm,
struct kvm_gfn_range *range);
bool kvm_arch_post_set_memory_attributes(struct kvm *kvm,
struct kvm_gfn_range *range);
static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn)
{
return IS_ENABLED(CONFIG_KVM_PRIVATE_MEM) &&
kvm_get_memory_attributes(kvm, gfn) & KVM_MEMORY_ATTRIBUTE_PRIVATE;
}
#else
static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn)
{
return false;
}
#endif /* CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES */
#ifdef CONFIG_KVM_PRIVATE_MEM
int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memory_slot *slot,
gfn_t gfn, kvm_pfn_t *pfn, struct page **page,
int *max_order);
#else
static inline int kvm_gmem_get_pfn(struct kvm *kvm,
struct kvm_memory_slot *slot, gfn_t gfn,
kvm_pfn_t *pfn, struct page **page,
int *max_order)
{
KVM_BUG_ON(1, kvm);
return -EIO;
}
#endif /* CONFIG_KVM_PRIVATE_MEM */
#ifdef CONFIG_HAVE_KVM_ARCH_GMEM_PREPARE
int kvm_arch_gmem_prepare(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pfn, int max_order);
#endif
#ifdef CONFIG_KVM_GENERIC_PRIVATE_MEM
/**
* kvm_gmem_populate() - Populate/prepare a GPA range with guest data
*
* @kvm: KVM instance
* @gfn: starting GFN to be populated
* @src: userspace-provided buffer containing data to copy into GFN range
* (passed to @post_populate, and incremented on each iteration
* if not NULL)
* @npages: number of pages to copy from userspace-buffer
* @post_populate: callback to issue for each gmem page that backs the GPA
* range
* @opaque: opaque data to pass to @post_populate callback
*
* This is primarily intended for cases where a gmem-backed GPA range needs
* to be initialized with userspace-provided data prior to being mapped into
* the guest as a private page. This should be called with the slots->lock
* held so that caller-enforced invariants regarding the expected memory
* attributes of the GPA range do not race with KVM_SET_MEMORY_ATTRIBUTES.
*
* Returns the number of pages that were populated.
*/
typedef int (*kvm_gmem_populate_cb)(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pfn,
void __user *src, int order, void *opaque);
long kvm_gmem_populate(struct kvm *kvm, gfn_t gfn, void __user *src, long npages,
kvm_gmem_populate_cb post_populate, void *opaque);
#endif
#ifdef CONFIG_HAVE_KVM_ARCH_GMEM_INVALIDATE
void kvm_arch_gmem_invalidate(kvm_pfn_t start, kvm_pfn_t end);
#endif
#ifdef CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY
long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu,
struct kvm_pre_fault_memory *range);
#endif
#endif
| 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 |
|