[ SYSTEM ]: Linux srv.persadacompanies.com 4.18.0-553.56.1.el8_10.x86_64 #1 SMP Tue Jun 10 05:00:59 EDT 2025 x86_64
[ SERVER ]: Apache | PHP: 8.4.20
[ USER ]: persadamedika | IP: 45.64.1.108
GEFORCE FILE MANAGER
/
usr
/
src
/
kernels
/
4.18.0-553.63.1.el8_10.x86_64
/
arch
/
x86
/
include
/
asm
/
UPLOAD:
NAME
SIZE
QUICK PERMS
ACTIONS
📁 crypto
SET
[ DEL ]
📁 e820
SET
[ DEL ]
📁 fpu
SET
[ DEL ]
📁 numachip
SET
[ DEL ]
📁 shared
SET
[ DEL ]
📁 trace
SET
[ DEL ]
📁 uv
SET
[ DEL ]
📁 vdso
SET
[ DEL ]
📁 xen
SET
[ DEL ]
📄 Kbuild
319 B
SET
[ EDIT ]
|
[ DEL ]
📄 a.out-core.h
1,931 B
SET
[ EDIT ]
|
[ DEL ]
📄 acenv.h
1,596 B
SET
[ EDIT ]
|
[ DEL ]
📄 acpi.h
5,225 B
SET
[ EDIT ]
|
[ DEL ]
📄 agp.h
1,070 B
SET
[ EDIT ]
|
[ DEL ]
📄 alternative.h
11,407 B
SET
[ EDIT ]
|
[ DEL ]
📄 amd-ibs.h
5,020 B
SET
[ EDIT ]
|
[ DEL ]
📄 amd_hsmp.h
364 B
SET
[ EDIT ]
|
[ DEL ]
📄 amd_nb.h
3,086 B
SET
[ EDIT ]
|
[ DEL ]
📄 apb_timer.h
1,466 B
SET
[ EDIT ]
|
[ DEL ]
📄 apic.h
14,661 B
SET
[ EDIT ]
|
[ DEL ]
📄 apic_flat_64.h
151 B
SET
[ EDIT ]
|
[ DEL ]
📄 apicdef.h
11,565 B
SET
[ EDIT ]
|
[ DEL ]
📄 apm.h
1,768 B
SET
[ EDIT ]
|
[ DEL ]
📄 arch_hweight.h
1,311 B
SET
[ EDIT ]
|
[ DEL ]
📄 archrandom.h
3,221 B
SET
[ EDIT ]
|
[ DEL ]
📄 asm-offsets.h
35 B
SET
[ EDIT ]
|
[ DEL ]
📄 asm-prototypes.h
946 B
SET
[ EDIT ]
|
[ DEL ]
📄 asm.h
5,186 B
SET
[ EDIT ]
|
[ DEL ]
📄 atomic.h
6,279 B
SET
[ EDIT ]
|
[ DEL ]
📄 atomic64_32.h
8,150 B
SET
[ EDIT ]
|
[ DEL ]
📄 atomic64_64.h
5,933 B
SET
[ EDIT ]
|
[ DEL ]
📄 audit.h
170 B
SET
[ EDIT ]
|
[ DEL ]
📄 barrier.h
2,471 B
SET
[ EDIT ]
|
[ DEL ]
📄 bios_ebda.h
914 B
SET
[ EDIT ]
|
[ DEL ]
📄 bitops.h
10,727 B
SET
[ EDIT ]
|
[ DEL ]
📄 boot.h
1,825 B
SET
[ EDIT ]
|
[ DEL ]
📄 bootparam_utils.h
2,907 B
SET
[ EDIT ]
|
[ DEL ]
📄 bug.h
2,117 B
SET
[ EDIT ]
|
[ DEL ]
📄 bugs.h
533 B
SET
[ EDIT ]
|
[ DEL ]
📄 cache.h
641 B
SET
[ EDIT ]
|
[ DEL ]
📄 cacheflush.h
306 B
SET
[ EDIT ]
|
[ DEL ]
📄 cacheinfo.h
209 B
SET
[ EDIT ]
|
[ DEL ]
📄 calgary.h
2,370 B
SET
[ EDIT ]
|
[ DEL ]
📄 ce4100.h
121 B
SET
[ EDIT ]
|
[ DEL ]
📄 checksum.h
133 B
SET
[ EDIT ]
|
[ DEL ]
📄 checksum_32.h
4,964 B
SET
[ EDIT ]
|
[ DEL ]
📄 checksum_64.h
5,541 B
SET
[ EDIT ]
|
[ DEL ]
📄 clocksource.h
480 B
SET
[ EDIT ]
|
[ DEL ]
📄 cmdline.h
302 B
SET
[ EDIT ]
|
[ DEL ]
📄 cmpxchg.h
7,891 B
SET
[ EDIT ]
|
[ DEL ]
📄 cmpxchg_32.h
3,247 B
SET
[ EDIT ]
|
[ DEL ]
📄 cmpxchg_64.h
552 B
SET
[ EDIT ]
|
[ DEL ]
📄 coco.h
482 B
SET
[ EDIT ]
|
[ DEL ]
📄 compat.h
4,861 B
SET
[ EDIT ]
|
[ DEL ]
📄 cpu.h
2,607 B
SET
[ EDIT ]
|
[ DEL ]
📄 cpu_device_id.h
8,109 B
SET
[ EDIT ]
|
[ DEL ]
📄 cpu_entry_area.h
4,162 B
SET
[ EDIT ]
|
[ DEL ]
📄 cpufeature.h
9,470 B
SET
[ EDIT ]
|
[ DEL ]
📄 cpufeatures.h
32,633 B
SET
[ EDIT ]
|
[ DEL ]
📄 cpuid.h
498 B
SET
[ EDIT ]
|
[ DEL ]
📄 cpuidle_haltpoll.h
189 B
SET
[ EDIT ]
|
[ DEL ]
📄 cpumask.h
408 B
SET
[ EDIT ]
|
[ DEL ]
📄 crash.h
300 B
SET
[ EDIT ]
|
[ DEL ]
📄 current.h
443 B
SET
[ EDIT ]
|
[ DEL ]
📄 debugreg.h
3,411 B
SET
[ EDIT ]
|
[ DEL ]
📄 delay.h
275 B
SET
[ EDIT ]
|
[ DEL ]
📄 desc.h
12,274 B
SET
[ EDIT ]
|
[ DEL ]
📄 desc_defs.h
3,396 B
SET
[ EDIT ]
|
[ DEL ]
📄 device.h
328 B
SET
[ EDIT ]
|
[ DEL ]
📄 disabled-features.h
3,559 B
SET
[ EDIT ]
|
[ DEL ]
📄 div64.h
2,189 B
SET
[ EDIT ]
|
[ DEL ]
📄 dma-mapping.h
288 B
SET
[ EDIT ]
|
[ DEL ]
📄 dma.h
9,827 B
SET
[ EDIT ]
|
[ DEL ]
📄 dmi.h
556 B
SET
[ EDIT ]
|
[ DEL ]
📄 dwarf2.h
2,487 B
SET
[ EDIT ]
|
[ DEL ]
📄 edac.h
474 B
SET
[ EDIT ]
|
[ DEL ]
📄 efi.h
7,416 B
SET
[ EDIT ]
|
[ DEL ]
📄 elf.h
12,640 B
SET
[ EDIT ]
|
[ DEL ]
📄 emergency-restart.h
202 B
SET
[ EDIT ]
|
[ DEL ]
📄 emulate_prefix.h
484 B
SET
[ EDIT ]
|
[ DEL ]
📄 enclu.h
181 B
SET
[ EDIT ]
|
[ DEL ]
📄 entry_arch.h
1,922 B
SET
[ EDIT ]
|
[ DEL ]
📄 espfix.h
426 B
SET
[ EDIT ]
|
[ DEL ]
📄 exec.h
37 B
SET
[ EDIT ]
|
[ DEL ]
📄 export.h
120 B
SET
[ EDIT ]
|
[ DEL ]
📄 extable.h
1,300 B
SET
[ EDIT ]
|
[ DEL ]
📄 fb.h
540 B
SET
[ EDIT ]
|
[ DEL ]
📄 fixmap.h
6,381 B
SET
[ EDIT ]
|
[ DEL ]
📄 floppy.h
6,748 B
SET
[ EDIT ]
|
[ DEL ]
📄 frame.h
2,237 B
SET
[ EDIT ]
|
[ DEL ]
📄 fsgsbase.h
2,072 B
SET
[ EDIT ]
|
[ DEL ]
📄 ftrace.h
2,777 B
SET
[ EDIT ]
|
[ DEL ]
📄 futex.h
2,269 B
SET
[ EDIT ]
|
[ DEL ]
📄 gart.h
2,682 B
SET
[ EDIT ]
|
[ DEL ]
📄 genapic.h
22 B
SET
[ EDIT ]
|
[ DEL ]
📄 geode.h
842 B
SET
[ EDIT ]
|
[ DEL ]
📄 hardirq.h
2,207 B
SET
[ EDIT ]
|
[ DEL ]
📄 highmem.h
2,466 B
SET
[ EDIT ]
|
[ DEL ]
📄 hpet.h
3,461 B
SET
[ EDIT ]
|
[ DEL ]
📄 hugetlb.h
1,867 B
SET
[ EDIT ]
|
[ DEL ]
📄 hw_breakpoint.h
2,112 B
SET
[ EDIT ]
|
[ DEL ]
📄 hw_irq.h
4,126 B
SET
[ EDIT ]
|
[ DEL ]
📄 hyperv-tlfs.h
22,337 B
SET
[ EDIT ]
|
[ DEL ]
📄 hypervisor.h
1,975 B
SET
[ EDIT ]
|
[ DEL ]
📄 i8259.h
1,975 B
SET
[ EDIT ]
|
[ DEL ]
📄 ia32.h
1,789 B
SET
[ EDIT ]
|
[ DEL ]
📄 ia32_unistd.h
313 B
SET
[ EDIT ]
|
[ DEL ]
📄 imr.h
1,849 B
SET
[ EDIT ]
|
[ DEL ]
📄 inat.h
6,736 B
SET
[ EDIT ]
|
[ DEL ]
📄 inat_types.h
1,013 B
SET
[ EDIT ]
|
[ DEL ]
📄 init.h
632 B
SET
[ EDIT ]
|
[ DEL ]
📄 insn-eval.h
1,546 B
SET
[ EDIT ]
|
[ DEL ]
📄 insn.h
8,098 B
SET
[ EDIT ]
|
[ DEL ]
📄 inst.h
5,453 B
SET
[ EDIT ]
|
[ DEL ]
📄 intel-family.h
5,168 B
SET
[ EDIT ]
|
[ DEL ]
📄 intel-mid.h
5,025 B
SET
[ EDIT ]
|
[ DEL ]
📄 intel_ds.h
849 B
SET
[ EDIT ]
|
[ DEL ]
📄 intel_mid_vrtc.h
330 B
SET
[ EDIT ]
|
[ DEL ]
📄 intel_pconfig.h
1,545 B
SET
[ EDIT ]
|
[ DEL ]
📄 intel_pmc_ipc.h
2,267 B
SET
[ EDIT ]
|
[ DEL ]
📄 intel_pt.h
1,276 B
SET
[ EDIT ]
|
[ DEL ]
📄 intel_punit_ipc.h
4,666 B
SET
[ EDIT ]
|
[ DEL ]
📄 intel_scu_ipc.h
2,351 B
SET
[ EDIT ]
|
[ DEL ]
📄 intel_telemetry.h
4,060 B
SET
[ EDIT ]
|
[ DEL ]
📄 invpcid.h
1,604 B
SET
[ EDIT ]
|
[ DEL ]
📄 io.h
11,872 B
SET
[ EDIT ]
|
[ DEL ]
📄 io_apic.h
5,890 B
SET
[ EDIT ]
|
[ DEL ]
📄 iomap.h
1,228 B
SET
[ EDIT ]
|
[ DEL ]
📄 iommu.h
935 B
SET
[ EDIT ]
|
[ DEL ]
📄 iosf_mbi.h
7,354 B
SET
[ EDIT ]
|
[ DEL ]
📄 ipi.h
2,873 B
SET
[ EDIT ]
|
[ DEL ]
📄 irq.h
1,415 B
SET
[ EDIT ]
|
[ DEL ]
📄 irq_regs.h
683 B
SET
[ EDIT ]
|
[ DEL ]
📄 irq_remapping.h
2,865 B
SET
[ EDIT ]
|
[ DEL ]
📄 irq_vectors.h
4,105 B
SET
[ EDIT ]
|
[ DEL ]
📄 irq_work.h
465 B
SET
[ EDIT ]
|
[ DEL ]
📄 irqdomain.h
1,796 B
SET
[ EDIT ]
|
[ DEL ]
📄 irqflags.h
4,161 B
SET
[ EDIT ]
|
[ DEL ]
📄 ist.h
735 B
SET
[ EDIT ]
|
[ DEL ]
📄 jailhouse_para.h
449 B
SET
[ EDIT ]
|
[ DEL ]
📄 jump_label.h
2,529 B
SET
[ EDIT ]
|
[ DEL ]
📄 kasan.h
1,291 B
SET
[ EDIT ]
|
[ DEL ]
📄 kaslr.h
314 B
SET
[ EDIT ]
|
[ DEL ]
📄 kbdleds.h
454 B
SET
[ EDIT ]
|
[ DEL ]
📄 kdebug.h
1,042 B
SET
[ EDIT ]
|
[ DEL ]
📄 kexec-bzimage64.h
195 B
SET
[ EDIT ]
|
[ DEL ]
📄 kexec.h
5,843 B
SET
[ EDIT ]
|
[ DEL ]
📄 kgdb.h
2,143 B
SET
[ EDIT ]
|
[ DEL ]
📄 kprobes.h
3,701 B
SET
[ EDIT ]
|
[ DEL ]
📄 kvm-x86-ops.h
3,989 B
SET
[ EDIT ]
|
[ DEL ]
📄 kvm_host.h
63,925 B
SET
[ EDIT ]
|
[ DEL ]
📄 kvm_page_track.h
2,700 B
SET
[ EDIT ]
|
[ DEL ]
📄 kvm_para.h
4,422 B
SET
[ EDIT ]
|
[ DEL ]
📄 kvm_types.h
178 B
SET
[ EDIT ]
|
[ DEL ]
📄 kvm_vcpu_regs.h
606 B
SET
[ EDIT ]
|
[ DEL ]
📄 kvmclock.h
506 B
SET
[ EDIT ]
|
[ DEL ]
📄 linkage.h
1,268 B
SET
[ EDIT ]
|
[ DEL ]
📄 livepatch.h
1,039 B
SET
[ EDIT ]
|
[ DEL ]
📄 local.h
3,925 B
SET
[ EDIT ]
|
[ DEL ]
📄 local64.h
33 B
SET
[ EDIT ]
|
[ DEL ]
📄 mach_timer.h
1,590 B
SET
[ EDIT ]
|
[ DEL ]
📄 mach_traps.h
1,013 B
SET
[ EDIT ]
|
[ DEL ]
📄 math_emu.h
395 B
SET
[ EDIT ]
|
[ DEL ]
📄 mc146818rtc.h
2,835 B
SET
[ EDIT ]
|
[ DEL ]
📄 mce.h
11,909 B
SET
[ EDIT ]
|
[ DEL ]
📄 mcsafe_test.h
1,418 B
SET
[ EDIT ]
|
[ DEL ]
📄 mem_encrypt.h
3,543 B
SET
[ EDIT ]
|
[ DEL ]
📄 memtype.h
815 B
SET
[ EDIT ]
|
[ DEL ]
📄 microcode.h
3,557 B
SET
[ EDIT ]
|
[ DEL ]
📄 microcode_amd.h
1,373 B
SET
[ EDIT ]
|
[ DEL ]
📄 microcode_intel.h
2,619 B
SET
[ EDIT ]
|
[ DEL ]
📄 misc.h
143 B
SET
[ EDIT ]
|
[ DEL ]
📄 mmconfig.h
374 B
SET
[ EDIT ]
|
[ DEL ]
📄 mmu.h
1,689 B
SET
[ EDIT ]
|
[ DEL ]
📄 mmu_context.h
10,118 B
SET
[ EDIT ]
|
[ DEL ]
📄 mmx.h
337 B
SET
[ EDIT ]
|
[ DEL ]
📄 mmzone.h
129 B
SET
[ EDIT ]
|
[ DEL ]
📄 mmzone_32.h
1,188 B
SET
[ EDIT ]
|
[ DEL ]
📄 mmzone_64.h
430 B
SET
[ EDIT ]
|
[ DEL ]
📄 module.h
2,096 B
SET
[ EDIT ]
|
[ DEL ]
📄 mpspec.h
4,023 B
SET
[ EDIT ]
|
[ DEL ]
📄 mpspec_def.h
4,256 B
SET
[ EDIT ]
|
[ DEL ]
📄 mpx.h
3,125 B
SET
[ EDIT ]
|
[ DEL ]
📄 mshyperv.h
10,142 B
SET
[ EDIT ]
|
[ DEL ]
📄 msi.h
1,508 B
SET
[ EDIT ]
|
[ DEL ]
📄 msidef.h
1,814 B
SET
[ EDIT ]
|
[ DEL ]
📄 msr-index.h
42,400 B
SET
[ EDIT ]
|
[ DEL ]
📄 msr-trace.h
1,387 B
SET
[ EDIT ]
|
[ DEL ]
📄 msr.h
11,290 B
SET
[ EDIT ]
|
[ DEL ]
📄 mtrr.h
4,753 B
SET
[ EDIT ]
|
[ DEL ]
📄 mwait.h
4,968 B
SET
[ EDIT ]
|
[ DEL ]
📄 nmi.h
1,496 B
SET
[ EDIT ]
|
[ DEL ]
📄 nops.h
4,412 B
SET
[ EDIT ]
|
[ DEL ]
📄 nospec-branch.h
14,158 B
SET
[ EDIT ]
|
[ DEL ]
📄 numa.h
2,228 B
SET
[ EDIT ]
|
[ DEL ]
📄 numa_32.h
256 B
SET
[ EDIT ]
|
[ DEL ]
📄 olpc.h
3,240 B
SET
[ EDIT ]
|
[ DEL ]
📄 olpc_ofw.h
1,128 B
SET
[ EDIT ]
|
[ DEL ]
📄 orc_lookup.h
1,665 B
SET
[ EDIT ]
|
[ DEL ]
📄 orc_types.h
3,577 B
SET
[ EDIT ]
|
[ DEL ]
📄 page.h
2,517 B
SET
[ EDIT ]
|
[ DEL ]
📄 page_32.h
1,039 B
SET
[ EDIT ]
|
[ DEL ]
📄 page_32_types.h
1,691 B
SET
[ EDIT ]
|
[ DEL ]
📄 page_64.h
1,573 B
SET
[ EDIT ]
|
[ DEL ]
📄 page_64_types.h
2,208 B
SET
[ EDIT ]
|
[ DEL ]
📄 page_types.h
2,369 B
SET
[ EDIT ]
|
[ DEL ]
📄 paravirt.h
24,608 B
SET
[ EDIT ]
|
[ DEL ]
📄 paravirt_types.h
22,709 B
SET
[ EDIT ]
|
[ DEL ]
📄 parport.h
314 B
SET
[ EDIT ]
|
[ DEL ]
📄 pci-direct.h
740 B
SET
[ EDIT ]
|
[ DEL ]
📄 pci-functions.h
654 B
SET
[ EDIT ]
|
[ DEL ]
📄 pci.h
3,288 B
SET
[ EDIT ]
|
[ DEL ]
📄 pci_64.h
684 B
SET
[ EDIT ]
|
[ DEL ]
📄 pci_x86.h
6,283 B
SET
[ EDIT ]
|
[ DEL ]
📄 percpu.h
20,267 B
SET
[ EDIT ]
|
[ DEL ]
📄 perf_event.h
17,896 B
SET
[ EDIT ]
|
[ DEL ]
📄 perf_event_p4.h
26,731 B
SET
[ EDIT ]
|
[ DEL ]
📄 pgalloc.h
6,591 B
SET
[ EDIT ]
|
[ DEL ]
📄 pgtable-2level.h
2,815 B
SET
[ EDIT ]
|
[ DEL ]
📄 pgtable-2level_types.h
867 B
SET
[ EDIT ]
|
[ DEL ]
📄 pgtable-3level.h
8,832 B
SET
[ EDIT ]
|
[ DEL ]
📄 pgtable-3level_types.h
1,007 B
SET
[ EDIT ]
|
[ DEL ]
📄 pgtable-invert.h
1,091 B
SET
[ EDIT ]
|
[ DEL ]
📄 pgtable.h
35,801 B
SET
[ EDIT ]
|
[ DEL ]
📄 pgtable_32.h
3,159 B
SET
[ EDIT ]
|
[ DEL ]
📄 pgtable_32_types.h
2,121 B
SET
[ EDIT ]
|
[ DEL ]
📄 pgtable_64.h
7,474 B
SET
[ EDIT ]
|
[ DEL ]
📄 pgtable_64_types.h
4,365 B
SET
[ EDIT ]
|
[ DEL ]
📄 pgtable_types.h
17,149 B
SET
[ EDIT ]
|
[ DEL ]
📄 pkeys.h
3,542 B
SET
[ EDIT ]
|
[ DEL ]
📄 pkru.h
1,346 B
SET
[ EDIT ]
|
[ DEL ]
📄 platform_sst_audio.h
3,290 B
SET
[ EDIT ]
|
[ DEL ]
📄 pm-trace.h
611 B
SET
[ EDIT ]
|
[ DEL ]
📄 posix_types.h
144 B
SET
[ EDIT ]
|
[ DEL ]
📄 preempt.h
3,217 B
SET
[ EDIT ]
|
[ DEL ]
📄 probe_roms.h
273 B
SET
[ EDIT ]
|
[ DEL ]
📄 processor-cyrix.h
879 B
SET
[ EDIT ]
|
[ DEL ]
📄 processor-flags.h
1,750 B
SET
[ EDIT ]
|
[ DEL ]
📄 processor.h
24,480 B
SET
[ EDIT ]
|
[ DEL ]
📄 prom.h
1,028 B
SET
[ EDIT ]
|
[ DEL ]
📄 proto.h
1,313 B
SET
[ EDIT ]
|
[ DEL ]
📄 pti.h
429 B
SET
[ EDIT ]
|
[ DEL ]
📄 ptrace.h
8,996 B
SET
[ EDIT ]
|
[ DEL ]
📄 purgatory.h
235 B
SET
[ EDIT ]
|
[ DEL ]
📄 pvclock-abi.h
1,530 B
SET
[ EDIT ]
|
[ DEL ]
📄 pvclock.h
2,702 B
SET
[ EDIT ]
|
[ DEL ]
📄 qrwlock.h
199 B
SET
[ EDIT ]
|
[ DEL ]
📄 qspinlock.h
2,598 B
SET
[ EDIT ]
|
[ DEL ]
📄 qspinlock_paravirt.h
1,908 B
SET
[ EDIT ]
|
[ DEL ]
📄 realmode.h
2,064 B
SET
[ EDIT ]
|
[ DEL ]
📄 reboot.h
898 B
SET
[ EDIT ]
|
[ DEL ]
📄 reboot_fixups.h
183 B
SET
[ EDIT ]
|
[ DEL ]
📄 refcount.h
2,911 B
SET
[ EDIT ]
|
[ DEL ]
📄 required-features.h
3,043 B
SET
[ EDIT ]
|
[ DEL ]
📄 resctrl.h
3,064 B
SET
[ EDIT ]
|
[ DEL ]
📄 rio.h
2,630 B
SET
[ EDIT ]
|
[ DEL ]
📄 rmwcc.h
2,259 B
SET
[ EDIT ]
|
[ DEL ]
📄 seccomp.h
510 B
SET
[ EDIT ]
|
[ DEL ]
📄 sections.h
916 B
SET
[ EDIT ]
|
[ DEL ]
📄 segment.h
11,184 B
SET
[ EDIT ]
|
[ DEL ]
📄 serial.h
1,137 B
SET
[ EDIT ]
|
[ DEL ]
📄 set_memory.h
5,381 B
SET
[ EDIT ]
|
[ DEL ]
📄 setup.h
3,751 B
SET
[ EDIT ]
|
[ DEL ]
📄 setup_arch.h
77 B
SET
[ EDIT ]
|
[ DEL ]
📄 sev-common.h
4,867 B
SET
[ EDIT ]
|
[ DEL ]
📄 sev.h
6,965 B
SET
[ EDIT ]
|
[ DEL ]
📄 sgx.h
13,157 B
SET
[ EDIT ]
|
[ DEL ]
📄 shmparam.h
193 B
SET
[ EDIT ]
|
[ DEL ]
📄 sigcontext.h
261 B
SET
[ EDIT ]
|
[ DEL ]
📄 sigframe.h
2,339 B
SET
[ EDIT ]
|
[ DEL ]
📄 sighandling.h
730 B
SET
[ EDIT ]
|
[ DEL ]
📄 signal.h
2,424 B
SET
[ EDIT ]
|
[ DEL ]
📄 simd.h
287 B
SET
[ EDIT ]
|
[ DEL ]
📄 smap.h
2,247 B
SET
[ EDIT ]
|
[ DEL ]
📄 smp.h
5,500 B
SET
[ EDIT ]
|
[ DEL ]
📄 sparsemem.h
994 B
SET
[ EDIT ]
|
[ DEL ]
📄 spec-ctrl.h
3,143 B
SET
[ EDIT ]
|
[ DEL ]
📄 special_insns.h
7,536 B
SET
[ EDIT ]
|
[ DEL ]
📄 spinlock.h
1,214 B
SET
[ EDIT ]
|
[ DEL ]
📄 spinlock_types.h
719 B
SET
[ EDIT ]
|
[ DEL ]
📄 sta2x11.h
352 B
SET
[ EDIT ]
|
[ DEL ]
📄 stackprotector.h
3,966 B
SET
[ EDIT ]
|
[ DEL ]
📄 stacktrace.h
2,619 B
SET
[ EDIT ]
|
[ DEL ]
📄 string.h
129 B
SET
[ EDIT ]
|
[ DEL ]
📄 string_32.h
7,929 B
SET
[ EDIT ]
|
[ DEL ]
📄 string_64.h
4,237 B
SET
[ EDIT ]
|
[ DEL ]
📄 suspend.h
503 B
SET
[ EDIT ]
|
[ DEL ]
📄 suspend_32.h
938 B
SET
[ EDIT ]
|
[ DEL ]
📄 suspend_64.h
1,838 B
SET
[ EDIT ]
|
[ DEL ]
📄 svm.h
14,672 B
SET
[ EDIT ]
|
[ DEL ]
📄 switch_to.h
3,258 B
SET
[ EDIT ]
|
[ DEL ]
📄 sync_bitops.h
3,503 B
SET
[ EDIT ]
|
[ DEL ]
📄 sync_core.h
3,138 B
SET
[ EDIT ]
|
[ DEL ]
📄 syscall.h
5,489 B
SET
[ EDIT ]
|
[ DEL ]
📄 syscall_wrapper.h
7,780 B
SET
[ EDIT ]
|
[ DEL ]
📄 syscalls.h
1,332 B
SET
[ EDIT ]
|
[ DEL ]
📄 sysfb.h
2,600 B
SET
[ EDIT ]
|
[ DEL ]
📄 tce.h
1,724 B
SET
[ EDIT ]
|
[ DEL ]
📄 tdx.h
2,360 B
SET
[ EDIT ]
|
[ DEL ]
📄 text-patching.h
4,812 B
SET
[ EDIT ]
|
[ DEL ]
📄 thermal.h
428 B
SET
[ EDIT ]
|
[ DEL ]
📄 thread_info.h
8,805 B
SET
[ EDIT ]
|
[ DEL ]
📄 time.h
331 B
SET
[ EDIT ]
|
[ DEL ]
📄 timer.h
1,027 B
SET
[ EDIT ]
|
[ DEL ]
📄 timex.h
305 B
SET
[ EDIT ]
|
[ DEL ]
📄 tlb.h
1,103 B
SET
[ EDIT ]
|
[ DEL ]
📄 tlbbatch.h
332 B
SET
[ EDIT ]
|
[ DEL ]
📄 tlbflush.h
17,814 B
SET
[ EDIT ]
|
[ DEL ]
📄 topology.h
6,654 B
SET
[ EDIT ]
|
[ DEL ]
📄 trace_clock.h
406 B
SET
[ EDIT ]
|
[ DEL ]
📄 trap_pf.h
709 B
SET
[ EDIT ]
|
[ DEL ]
📄 trapnr.h
1,316 B
SET
[ EDIT ]
|
[ DEL ]
📄 traps.h
5,374 B
SET
[ EDIT ]
|
[ DEL ]
📄 tsc.h
1,950 B
SET
[ EDIT ]
|
[ DEL ]
📄 uaccess.h
21,233 B
SET
[ EDIT ]
|
[ DEL ]
📄 uaccess_32.h
1,006 B
SET
[ EDIT ]
|
[ DEL ]
📄 uaccess_64.h
3,129 B
SET
[ EDIT ]
|
[ DEL ]
📄 umip.h
329 B
SET
[ EDIT ]
|
[ DEL ]
📄 unaligned.h
345 B
SET
[ EDIT ]
|
[ DEL ]
📄 unistd.h
1,482 B
SET
[ EDIT ]
|
[ DEL ]
📄 unwind.h
3,220 B
SET
[ EDIT ]
|
[ DEL ]
📄 unwind_hints.h
3,342 B
SET
[ EDIT ]
|
[ DEL ]
📄 uprobes.h
1,686 B
SET
[ EDIT ]
|
[ DEL ]
📄 user.h
2,257 B
SET
[ EDIT ]
|
[ DEL ]
📄 user32.h
2,156 B
SET
[ EDIT ]
|
[ DEL ]
📄 user_32.h
5,042 B
SET
[ EDIT ]
|
[ DEL ]
📄 user_64.h
5,339 B
SET
[ EDIT ]
|
[ DEL ]
📄 vdso.h
1,400 B
SET
[ EDIT ]
|
[ DEL ]
📄 vga.h
740 B
SET
[ EDIT ]
|
[ DEL ]
📄 vgtod.h
518 B
SET
[ EDIT ]
|
[ DEL ]
📄 virtext.h
3,102 B
SET
[ EDIT ]
|
[ DEL ]
📄 vm86.h
2,212 B
SET
[ EDIT ]
|
[ DEL ]
📄 vmware.h
1,942 B
SET
[ EDIT ]
|
[ DEL ]
📄 vmx.h
26,763 B
SET
[ EDIT ]
|
[ DEL ]
📄 vmxfeatures.h
6,049 B
SET
[ EDIT ]
|
[ DEL ]
📄 vsyscall.h
920 B
SET
[ EDIT ]
|
[ DEL ]
📄 vvar.h
1,603 B
SET
[ EDIT ]
|
[ DEL ]
📄 word-at-a-time.h
2,596 B
SET
[ EDIT ]
|
[ DEL ]
📄 x86_init.h
11,520 B
SET
[ EDIT ]
|
[ DEL ]
📄 xor.h
10,508 B
SET
[ EDIT ]
|
[ DEL ]
📄 xor_32.h
14,748 B
SET
[ EDIT ]
|
[ DEL ]
📄 xor_64.h
716 B
SET
[ EDIT ]
|
[ DEL ]
📄 xor_avx.h
4,610 B
SET
[ EDIT ]
|
[ DEL ]
DELETE SELECTED
[ CLOSE ]
EDIT: tlbflush.h
/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _ASM_X86_TLBFLUSH_H #define _ASM_X86_TLBFLUSH_H #include <linux/mm.h> #include <linux/sched.h> #include <asm/processor.h> #include <asm/cpufeature.h> #include <asm/special_insns.h> #include <asm/smp.h> #include <asm/invpcid.h> #include <asm/pti.h> #include <asm/processor-flags.h> /* * The x86 feature is called PCID (Process Context IDentifier). It is similar * to what is traditionally called ASID on the RISC processors. * * We don't use the traditional ASID implementation, where each process/mm gets * its own ASID and flush/restart when we run out of ASID space. * * Instead we have a small per-cpu array of ASIDs and cache the last few mm's * that came by on this CPU, allowing cheaper switch_mm between processes on * this CPU. * * We end up with different spaces for different things. To avoid confusion we * use different names for each of them: * * ASID - [0, TLB_NR_DYN_ASIDS-1] * the canonical identifier for an mm * * kPCID - [1, TLB_NR_DYN_ASIDS] * the value we write into the PCID part of CR3; corresponds to the * ASID+1, because PCID 0 is special. * * uPCID - [2048 + 1, 2048 + TLB_NR_DYN_ASIDS] * for KPTI each mm has two address spaces and thus needs two * PCID values, but we can still do with a single ASID denomination * for each mm. Corresponds to kPCID + 2048. * */ /* There are 12 bits of space for ASIDS in CR3 */ #define CR3_HW_ASID_BITS 12 /* * When enabled, PAGE_TABLE_ISOLATION consumes a single bit for * user/kernel switches */ #ifdef CONFIG_PAGE_TABLE_ISOLATION # define PTI_CONSUMED_PCID_BITS 1 #else # define PTI_CONSUMED_PCID_BITS 0 #endif #define CR3_AVAIL_PCID_BITS (X86_CR3_PCID_BITS - PTI_CONSUMED_PCID_BITS) /* * ASIDs are zero-based: 0->MAX_AVAIL_ASID are valid. -1 below to account * for them being zero-based. Another -1 is because PCID 0 is reserved for * use by non-PCID-aware users. */ #define MAX_ASID_AVAILABLE ((1 << CR3_AVAIL_PCID_BITS) - 2) /* * 6 because 6 should be plenty and struct tlb_state will fit in two cache * lines. */ #define TLB_NR_DYN_ASIDS 6 /* * Given @asid, compute kPCID */ static inline u16 kern_pcid(u16 asid) { VM_WARN_ON_ONCE(asid > MAX_ASID_AVAILABLE); #ifdef CONFIG_PAGE_TABLE_ISOLATION /* * Make sure that the dynamic ASID space does not confict with the * bit we are using to switch between user and kernel ASIDs. */ BUILD_BUG_ON(TLB_NR_DYN_ASIDS >= (1 << X86_CR3_PTI_PCID_USER_BIT)); /* * The ASID being passed in here should have respected the * MAX_ASID_AVAILABLE and thus never have the switch bit set. */ VM_WARN_ON_ONCE(asid & (1 << X86_CR3_PTI_PCID_USER_BIT)); #endif /* * The dynamically-assigned ASIDs that get passed in are small * (<TLB_NR_DYN_ASIDS). They never have the high switch bit set, * so do not bother to clear it. * * If PCID is on, ASID-aware code paths put the ASID+1 into the * PCID bits. This serves two purposes. It prevents a nasty * situation in which PCID-unaware code saves CR3, loads some other * value (with PCID == 0), and then restores CR3, thus corrupting * the TLB for ASID 0 if the saved ASID was nonzero. It also means * that any bugs involving loading a PCID-enabled CR3 with * CR4.PCIDE off will trigger deterministically. */ return asid + 1; } /* * Given @asid, compute uPCID */ static inline u16 user_pcid(u16 asid) { u16 ret = kern_pcid(asid); #ifdef CONFIG_PAGE_TABLE_ISOLATION ret |= 1 << X86_CR3_PTI_PCID_USER_BIT; #endif return ret; } struct pgd_t; static inline unsigned long build_cr3(pgd_t *pgd, u16 asid) { if (static_cpu_has(X86_FEATURE_PCID)) { return __sme_pa(pgd) | kern_pcid(asid); } else { VM_WARN_ON_ONCE(asid != 0); return __sme_pa(pgd); } } static inline unsigned long build_cr3_noflush(pgd_t *pgd, u16 asid) { VM_WARN_ON_ONCE(asid > MAX_ASID_AVAILABLE); /* * Use boot_cpu_has() instead of this_cpu_has() as this function * might be called during early boot. This should work even after * boot because all CPU's the have same capabilities: */ VM_WARN_ON_ONCE(!boot_cpu_has(X86_FEATURE_PCID)); return __sme_pa(pgd) | kern_pcid(asid) | CR3_NOFLUSH; } #ifdef CONFIG_PARAVIRT #include <asm/paravirt.h> #else #define __flush_tlb() __native_flush_tlb() #define __flush_tlb_global() __native_flush_tlb_global() #define __flush_tlb_one_user(addr) __native_flush_tlb_one_user(addr) #endif static inline bool tlb_defer_switch_to_init_mm(void) { /* * If we have PCID, then switching to init_mm is reasonably * fast. If we don't have PCID, then switching to init_mm is * quite slow, so we try to defer it in the hopes that we can * avoid it entirely. The latter approach runs the risk of * receiving otherwise unnecessary IPIs. * * This choice is just a heuristic. The tlb code can handle this * function returning true or false regardless of whether we have * PCID. */ return !static_cpu_has(X86_FEATURE_PCID); } struct tlb_context { u64 ctx_id; u64 tlb_gen; }; struct tlb_state { /* * cpu_tlbstate.loaded_mm should match CR3 whenever interrupts * are on. This means that it may not match current->active_mm, * which will contain the previous user mm when we're in lazy TLB * mode even if we've already switched back to swapper_pg_dir. * * During switch_mm_irqs_off(), loaded_mm will be set to * LOADED_MM_SWITCHING during the brief interrupts-off window * when CR3 and loaded_mm would otherwise be inconsistent. This * is for nmi_uaccess_okay()'s benefit. */ struct mm_struct *loaded_mm; #define LOADED_MM_SWITCHING ((struct mm_struct *)1) /* Last user mm for optimizing IBPB */ union { struct mm_struct *last_user_mm; unsigned long last_user_mm_ibpb; }; u16 loaded_mm_asid; u16 next_asid; /* * We can be in one of several states: * * - Actively using an mm. Our CPU's bit will be set in * mm_cpumask(loaded_mm) and is_lazy == false; * * - Not using a real mm. loaded_mm == &init_mm. Our CPU's bit * will not be set in mm_cpumask(&init_mm) and is_lazy == false. * * - Lazily using a real mm. loaded_mm != &init_mm, our bit * is set in mm_cpumask(loaded_mm), but is_lazy == true. * We're heuristically guessing that the CR3 load we * skipped more than makes up for the overhead added by * lazy mode. */ bool is_lazy; /* * If set we changed the page tables in such a way that we * needed an invalidation of all contexts (aka. PCIDs / ASIDs). * This tells us to go invalidate all the non-loaded ctxs[] * on the next context switch. * * The current ctx was kept up-to-date as it ran and does not * need to be invalidated. */ bool invalidate_other; /* * Mask that contains TLB_NR_DYN_ASIDS+1 bits to indicate * the corresponding user PCID needs a flush next time we * switch to it; see SWITCH_TO_USER_CR3. */ unsigned short user_pcid_flush_mask; /* * Access to this CR4 shadow and to H/W CR4 is protected by * disabling interrupts when modifying either one. */ unsigned long cr4; /* * This is a list of all contexts that might exist in the TLB. * There is one per ASID that we use, and the ASID (what the * CPU calls PCID) is the index into ctxts. * * For each context, ctx_id indicates which mm the TLB's user * entries came from. As an invariant, the TLB will never * contain entries that are out-of-date as when that mm reached * the tlb_gen in the list. * * To be clear, this means that it's legal for the TLB code to * flush the TLB without updating tlb_gen. This can happen * (for now, at least) due to paravirt remote flushes. * * NB: context 0 is a bit special, since it's also used by * various bits of init code. This is fine -- code that * isn't aware of PCID will end up harmlessly flushing * context 0. */ struct tlb_context ctxs[TLB_NR_DYN_ASIDS]; }; DECLARE_PER_CPU_SHARED_ALIGNED(struct tlb_state, cpu_tlbstate); /* * Blindly accessing user memory from NMI context can be dangerous * if we're in the middle of switching the current user task or * switching the loaded mm. It can also be dangerous if we * interrupted some kernel code that was temporarily using a * different mm. */ static inline bool nmi_uaccess_okay(void) { struct mm_struct *loaded_mm = this_cpu_read(cpu_tlbstate.loaded_mm); struct mm_struct *current_mm = current->mm; VM_WARN_ON_ONCE(!loaded_mm); /* * The condition we want to check is * current_mm->pgd == __va(read_cr3_pa()). This may be slow, though, * if we're running in a VM with shadow paging, and nmi_uaccess_okay() * is supposed to be reasonably fast. * * Instead, we check the almost equivalent but somewhat conservative * condition below, and we rely on the fact that switch_mm_irqs_off() * sets loaded_mm to LOADED_MM_SWITCHING before writing to CR3. */ if (loaded_mm != current_mm) return false; VM_WARN_ON_ONCE(current_mm->pgd != __va(read_cr3_pa())); return true; } #define nmi_uaccess_okay nmi_uaccess_okay /* Initialize cr4 shadow for this CPU. */ static inline void cr4_init_shadow(void) { this_cpu_write(cpu_tlbstate.cr4, __read_cr4()); } static inline void __cr4_set(unsigned long cr4) { lockdep_assert_irqs_disabled(); this_cpu_write(cpu_tlbstate.cr4, cr4); __write_cr4(cr4); } /* Set in this cpu's CR4. */ static inline void cr4_set_bits(unsigned long mask) { unsigned long cr4, flags; local_irq_save(flags); cr4 = this_cpu_read(cpu_tlbstate.cr4); if ((cr4 | mask) != cr4) __cr4_set(cr4 | mask); local_irq_restore(flags); } /* Clear in this cpu's CR4. */ static inline void cr4_clear_bits(unsigned long mask) { unsigned long cr4, flags; local_irq_save(flags); cr4 = this_cpu_read(cpu_tlbstate.cr4); if ((cr4 & ~mask) != cr4) __cr4_set(cr4 & ~mask); local_irq_restore(flags); } static inline void cr4_toggle_bits_irqsoff(unsigned long mask) { unsigned long cr4; cr4 = this_cpu_read(cpu_tlbstate.cr4); __cr4_set(cr4 ^ mask); } /* Read the CR4 shadow. */ static inline unsigned long cr4_read_shadow(void) { return this_cpu_read(cpu_tlbstate.cr4); } /* * Mark all other ASIDs as invalid, preserves the current. */ static inline void invalidate_other_asid(void) { this_cpu_write(cpu_tlbstate.invalidate_other, true); } /* * Save some of cr4 feature set we're using (e.g. Pentium 4MB * enable and PPro Global page enable), so that any CPU's that boot * up after us can get the correct flags. This should only be used * during boot on the boot cpu. */ extern unsigned long mmu_cr4_features; extern u32 *trampoline_cr4_features; static inline void cr4_set_bits_and_update_boot(unsigned long mask) { mmu_cr4_features |= mask; if (trampoline_cr4_features) *trampoline_cr4_features = mmu_cr4_features; cr4_set_bits(mask); } extern void initialize_tlbstate_and_flush(void); /* * Given an ASID, flush the corresponding user ASID. We can delay this * until the next time we switch to it. * * See SWITCH_TO_USER_CR3. */ static inline void invalidate_user_asid(u16 asid) { /* There is no user ASID if address space separation is off */ if (!IS_ENABLED(CONFIG_PAGE_TABLE_ISOLATION)) return; /* * We only have a single ASID if PCID is off and the CR3 * write will have flushed it. */ if (!cpu_feature_enabled(X86_FEATURE_PCID)) return; if (!static_cpu_has(X86_FEATURE_PTI)) return; __set_bit(kern_pcid(asid), (unsigned long *)this_cpu_ptr(&cpu_tlbstate.user_pcid_flush_mask)); } /* * flush the entire current user mapping */ static inline void __native_flush_tlb(void) { /* * Preemption or interrupts must be disabled to protect the access * to the per CPU variable and to prevent being preempted between * read_cr3() and write_cr3(). */ WARN_ON_ONCE(preemptible()); invalidate_user_asid(this_cpu_read(cpu_tlbstate.loaded_mm_asid)); /* If current->mm == NULL then the read_cr3() "borrows" an mm */ native_write_cr3(__native_read_cr3()); } /* * flush everything */ static inline void __native_flush_tlb_global(void) { unsigned long cr4, flags; if (static_cpu_has(X86_FEATURE_INVPCID)) { /* * Using INVPCID is considerably faster than a pair of writes * to CR4 sandwiched inside an IRQ flag save/restore. * * Note, this works with CR4.PCIDE=0 or 1. */ invpcid_flush_all(); return; } /* * Read-modify-write to CR4 - protect it from preemption and * from interrupts. (Use the raw variant because this code can * be called from deep inside debugging code.) */ raw_local_irq_save(flags); cr4 = this_cpu_read(cpu_tlbstate.cr4); /* toggle PGE */ native_write_cr4(cr4 ^ X86_CR4_PGE); /* write old PGE again and flush TLBs */ native_write_cr4(cr4); raw_local_irq_restore(flags); } /* * flush one page in the user mapping */ static inline void __native_flush_tlb_one_user(unsigned long addr) { u32 loaded_mm_asid = this_cpu_read(cpu_tlbstate.loaded_mm_asid); asm volatile("invlpg (%0)" ::"r" (addr) : "memory"); if (!static_cpu_has(X86_FEATURE_PTI)) return; /* * Some platforms #GP if we call invpcid(type=1/2) before CR4.PCIDE=1. * Just use invalidate_user_asid() in case we are called early. */ if (!this_cpu_has(X86_FEATURE_INVPCID_SINGLE)) invalidate_user_asid(loaded_mm_asid); else invpcid_flush_one(user_pcid(loaded_mm_asid), addr); } /* * flush everything */ static inline void __flush_tlb_all(void) { /* * This is to catch users with enabled preemption and the PGE feature * and don't trigger the warning in __native_flush_tlb(). */ VM_WARN_ON_ONCE(preemptible()); if (boot_cpu_has(X86_FEATURE_PGE)) { __flush_tlb_global(); } else { /* * !PGE -> !PCID (setup_pcid()), thus every flush is total. */ __flush_tlb(); } } /* * flush one page in the kernel mapping */ static inline void __flush_tlb_one_kernel(unsigned long addr) { count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ONE); /* * If PTI is off, then __flush_tlb_one_user() is just INVLPG or its * paravirt equivalent. Even with PCID, this is sufficient: we only * use PCID if we also use global PTEs for the kernel mapping, and * INVLPG flushes global translations across all address spaces. * * If PTI is on, then the kernel is mapped with non-global PTEs, and * __flush_tlb_one_user() will flush the given address for the current * kernel address space and for its usermode counterpart, but it does * not flush it for other address spaces. */ __flush_tlb_one_user(addr); if (!static_cpu_has(X86_FEATURE_PTI)) return; /* * See above. We need to propagate the flush to all other address * spaces. In principle, we only need to propagate it to kernelmode * address spaces, but the extra bookkeeping we would need is not * worth it. */ invalidate_other_asid(); } #define TLB_FLUSH_ALL -1UL /* * TLB flushing: * * - flush_tlb_all() flushes all processes TLBs * - flush_tlb_mm(mm) flushes the specified mm context TLB's * - flush_tlb_page(vma, vmaddr) flushes one page * - flush_tlb_range(vma, start, end) flushes a range of pages * - flush_tlb_kernel_range(start, end) flushes a range of kernel pages * - flush_tlb_others(cpumask, info) flushes TLBs on other cpus * * ..but the i386 has somewhat limited tlb flushing capabilities, * and page-granular flushes are available only on i486 and up. */ struct flush_tlb_info { /* * We support several kinds of flushes. * * - Fully flush a single mm. .mm will be set, .end will be * TLB_FLUSH_ALL, and .new_tlb_gen will be the tlb_gen to * which the IPI sender is trying to catch us up. * * - Partially flush a single mm. .mm will be set, .start and * .end will indicate the range, and .new_tlb_gen will be set * such that the changes between generation .new_tlb_gen-1 and * .new_tlb_gen are entirely contained in the indicated range. * * - Fully flush all mms whose tlb_gens have been updated. .mm * will be NULL, .end will be TLB_FLUSH_ALL, and .new_tlb_gen * will be zero. */ struct mm_struct *mm; unsigned long start; unsigned long end; u64 new_tlb_gen; unsigned int stride_shift; }; #define local_flush_tlb() __flush_tlb() #define flush_tlb_mm(mm) \ flush_tlb_mm_range(mm, 0UL, TLB_FLUSH_ALL, 0UL, true) #define flush_tlb_range(vma, start, end) \ flush_tlb_mm_range((vma)->vm_mm, start, end, \ ((vma)->vm_flags & VM_HUGETLB) \ ? huge_page_shift(hstate_vma(vma)) \ : PAGE_SHIFT, false) extern void flush_tlb_all(void); extern void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, unsigned long end, unsigned int stride_shift, bool freed_tables); extern void flush_tlb_kernel_range(unsigned long start, unsigned long end); static inline void flush_tlb_page(struct vm_area_struct *vma, unsigned long a) { flush_tlb_mm_range(vma->vm_mm, a, a + PAGE_SIZE, PAGE_SHIFT, false); } void native_flush_tlb_others(const struct cpumask *cpumask, const struct flush_tlb_info *info); static inline u64 inc_mm_tlb_gen(struct mm_struct *mm) { /* * Bump the generation count. This also serves as a full barrier * that synchronizes with switch_mm(): callers are required to order * their read of mm_cpumask after their writes to the paging * structures. */ return atomic64_inc_return(&mm->context.tlb_gen); } static inline void arch_tlbbatch_add_mm(struct arch_tlbflush_unmap_batch *batch, struct mm_struct *mm) { inc_mm_tlb_gen(mm); cpumask_or(&batch->cpumask, &batch->cpumask, mm_cpumask(mm)); } extern void arch_tlbbatch_flush(struct arch_tlbflush_unmap_batch *batch); #ifndef CONFIG_PARAVIRT #define flush_tlb_others(mask, info) \ native_flush_tlb_others(mask, info) #define paravirt_tlb_remove_table(tlb, page) \ tlb_remove_page(tlb, (void *)(page)) #endif #endif /* _ASM_X86_TLBFLUSH_H */