OXIESEC PANEL
- Current Dir:
/
/
usr
/
src
/
linux-headers-4.15.0-197
/
arch
/
x86
/
include
/
asm
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
11/17/2022 06:42:16 AM
rwxr-xr-x
📄
Kbuild
294 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
a.out-core.h
1.89 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
acenv.h
1.56 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
acpi.h
4.76 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
agp.h
1.04 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
alternative-asm.h
2.43 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
alternative.h
8.28 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
amd_nb.h
2.98 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
apb_timer.h
1.43 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
apic.h
14.53 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
apic_flat_64.h
151 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
apicdef.h
11.26 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
apm.h
1.8 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
arch_hweight.h
1.28 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
archrandom.h
3.03 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
asm-offsets.h
35 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
asm-prototypes.h
946 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
asm.h
4.97 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
atomic.h
6.02 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
atomic64_32.h
8.71 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
atomic64_64.h
6.31 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
barrier.h
3.6 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
bios_ebda.h
914 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
bitops.h
13.78 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
boot.h
1.53 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
bootparam_utils.h
2.86 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
bug.h
2.07 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
bugs.h
493 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
cache.h
641 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
cacheflush.h
306 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
cacheinfo.h
209 bytes
11/01/2022 04:52:05 PM
rw-r--r--
📄
calgary.h
2.31 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
ce4100.h
121 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
checksum.h
133 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
checksum_32.h
4.86 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
checksum_64.h
5.41 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
clocksource.h
488 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
cmdline.h
302 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
cmpxchg.h
7.68 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
cmpxchg_32.h
3.15 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
cmpxchg_64.h
543 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
compat.h
7.37 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
cpu.h
975 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
cpu_device_id.h
1.38 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
cpu_entry_area.h
2.27 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
cpufeature.h
7.75 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
cpufeatures.h
24.62 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
cpumask.h
408 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
crash.h
320 bytes
11/01/2022 04:52:05 PM
rw-r--r--
📁
crypto
-
11/17/2022 06:42:22 AM
rwxr-xr-x
📄
current.h
443 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
debugreg.h
2.67 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
delay.h
208 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
desc.h
11.42 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
desc_defs.h
3.16 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
device.h
568 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
disabled-features.h
2.31 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
div64.h
1.79 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
dma-mapping.h
2.4 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
dma.h
9.58 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
dmi.h
556 bytes
11/01/2022 04:52:05 PM
rw-r--r--
📄
dwarf2.h
2.43 KB
01/28/2018 09:20:33 PM
rw-r--r--
📁
e820
-
11/17/2022 06:42:22 AM
rwxr-xr-x
📄
edac.h
474 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
efi.h
6.9 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
elf.h
10.82 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
emergency-restart.h
202 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
entry_arch.h
1.88 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
espfix.h
426 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
exec.h
37 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
export.h
120 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
extable.h
1.27 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
fb.h
540 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
fixmap.h
6.04 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
floppy.h
6.59 KB
01/28/2018 09:20:33 PM
rw-r--r--
📁
fpu
-
11/17/2022 06:42:22 AM
rwxr-xr-x
📄
frame.h
815 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
ftrace.h
1.8 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
futex.h
2.2 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
gart.h
2.64 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
genapic.h
22 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
geode.h
842 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
hardirq.h
2.3 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
highmem.h
2.6 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
hpet.h
3.38 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
hugetlb.h
2.15 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
hw_breakpoint.h
1.96 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
hw_irq.h
3.85 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
hypervisor.h
1.84 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
i8259.h
1.93 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
ia32.h
1.46 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
ia32_unistd.h
313 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
imr.h
1.81 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
inat.h
6.58 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
inat_types.h
1013 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
init.h
632 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
insn-eval.h
837 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
insn.h
7.46 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
inst.h
5.07 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
intel-family.h
3.29 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
intel-mid.h
4.91 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
intel_ds.h
793 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
intel_mid_vrtc.h
326 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
intel_pmc_ipc.h
2.08 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
intel_pt.h
292 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
intel_punit_ipc.h
4.56 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
intel_rdt_sched.h
2.59 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
intel_scu_ipc.h
2.3 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
intel_telemetry.h
3.96 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
invpcid.h
1.57 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
io.h
12.21 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
io_apic.h
5.63 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
iomap.h
1.22 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
iommu.h
392 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
iommu_table.h
3.82 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
iosf_mbi.h
5.74 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
ipi.h
2.84 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
irq.h
1.12 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
irq_regs.h
679 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
irq_remapping.h
2.96 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
irq_vectors.h
4.12 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
irq_work.h
397 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
irqdomain.h
1.61 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
irqflags.h
4.38 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
ist.h
735 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
jump_label.h
2.44 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
kasan.h
966 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
kaslr.h
424 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
kbdleds.h
454 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
kdebug.h
752 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
kexec-bzimage64.h
189 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
kexec.h
6.69 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
kgdb.h
2.09 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
kmap_types.h
289 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
kprobes.h
3.82 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
kvm_emulate.h
15.23 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
kvm_guest.h
172 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
kvm_host.h
42.72 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
kvm_page_track.h
2.48 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
kvm_para.h
3 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
kvmclock.h
170 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
linkage.h
581 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
livepatch.h
1.12 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
local.h
3.83 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
local64.h
33 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
mach_timer.h
1.55 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
mach_traps.h
1013 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
math_emu.h
395 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
mc146818rtc.h
2.76 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
mce.h
12.54 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
mem_encrypt.h
2.83 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
microcode.h
4.14 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
microcode_amd.h
1.41 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
microcode_intel.h
2.46 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
misc.h
143 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
mmconfig.h
374 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
mmu.h
1.57 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
mmu_context.h
10.27 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
mmx.h
337 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
mmzone.h
129 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
mmzone_32.h
1.16 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
mmzone_64.h
430 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
module.h
2.05 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
mpspec.h
3.93 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
mpspec_def.h
3.93 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
mpx.h
2.97 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
mshyperv.h
10.69 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
msi.h
392 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
msidef.h
1.77 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
msr-index.h
30.36 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
msr-trace.h
1.35 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
msr.h
10.85 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
mtrr.h
4.62 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
mwait.h
3.74 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
nmi.h
1.39 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
nops.h
4.31 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
nospec-branch.h
10.87 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
numa.h
2.18 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
numa_32.h
256 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📁
numachip
-
11/17/2022 06:42:22 AM
rwxr-xr-x
📄
olpc.h
3.16 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
olpc_ofw.h
1.1 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
orc_lookup.h
1.63 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
orc_types.h
3.47 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
page.h
2.18 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
page_32.h
1.01 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
page_32_types.h
1.7 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
page_64.h
1.42 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
page_64_types.h
2.34 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
page_types.h
2.29 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
paravirt.h
23.31 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
paravirt_types.h
22.15 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
parport.h
314 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
pat.h
768 bytes
11/01/2022 04:52:05 PM
rw-r--r--
📄
pci-direct.h
995 bytes
11/01/2022 04:52:05 PM
rw-r--r--
📄
pci-functions.h
654 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
pci.h
3.51 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
pci_64.h
684 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
pci_x86.h
5.71 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
percpu.h
18.97 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
perf_event.h
8.82 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
perf_event_p4.h
26.1 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
pgalloc.h
5.57 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
pgtable-2level.h
2.75 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
pgtable-2level_types.h
867 bytes
11/01/2022 04:52:05 PM
rw-r--r--
📄
pgtable-3level.h
10.24 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
pgtable-3level_types.h
1.06 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
pgtable-invert.h
1.07 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
pgtable.h
33.91 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
pgtable_32.h
3.1 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
pgtable_32_types.h
2.01 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
pgtable_64.h
7.37 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
pgtable_64_types.h
3.67 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
pgtable_types.h
16.75 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
pkeys.h
3.17 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
platform_sst_audio.h
3.18 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
pm-trace.h
611 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
posix_types.h
144 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
preempt.h
3.04 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
probe_roms.h
273 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
processor-cyrix.h
879 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
processor-flags.h
1.71 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
processor.h
24.54 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
prom.h
1 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
proto.h
1003 bytes
11/01/2022 04:52:05 PM
rw-r--r--
📄
pti.h
369 bytes
11/01/2022 04:52:05 PM
rw-r--r--
📄
ptrace.h
8.52 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
purgatory.h
571 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
pvclock-abi.h
1.49 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
pvclock.h
2.64 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
qrwlock.h
199 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
qspinlock.h
2.54 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
qspinlock_paravirt.h
1.85 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
realmode.h
1.76 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
reboot.h
850 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
reboot_fixups.h
183 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
refcount.h
2.83 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
required-features.h
2.81 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
rio.h
2.57 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
rmwcc.h
1.62 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
rwsem.h
7.02 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
seccomp.h
510 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
sections.h
465 bytes
11/01/2022 04:52:05 PM
rw-r--r--
📄
segment.h
9.47 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
serial.h
1.11 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
set_memory.h
3.86 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
setup.h
3.4 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
setup_arch.h
77 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
shmparam.h
193 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
sigcontext.h
261 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
sigframe.h
2.25 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
sighandling.h
649 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
signal.h
2.37 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
simd.h
287 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
smap.h
1.71 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
smp.h
4.73 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
sparsemem.h
1.01 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
spec-ctrl.h
2.81 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
special_insns.h
5.04 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
spinlock.h
1.19 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
spinlock_types.h
719 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
sta2x11.h
352 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
stackprotector.h
4.13 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
stacktrace.h
2.57 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
string.h
129 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
string_32.h
7.74 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
string_64.h
3.56 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
suspend.h
131 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
suspend_32.h
822 bytes
11/01/2022 04:52:05 PM
rw-r--r--
📄
suspend_64.h
1.79 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
svm.h
7.06 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
swiotlb.h
991 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
switch_to.h
2.98 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
sync_bitops.h
3.42 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
sys_ia32.h
1.8 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
syscall.h
5.14 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
syscalls.h
1.39 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
sysfb.h
2.54 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
tce.h
1.68 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
text-patching.h
2.3 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
thread_info.h
9.33 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
time.h
331 bytes
11/01/2022 04:52:05 PM
rw-r--r--
📄
timer.h
1 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
timex.h
546 bytes
11/01/2022 04:52:05 PM
rw-r--r--
📄
tlb.h
1.05 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
tlbbatch.h
332 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
tlbflush.h
17.09 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
topology.h
4.84 KB
11/01/2022 04:52:05 PM
rw-r--r--
📁
trace
-
11/17/2022 06:42:22 AM
rwxr-xr-x
📄
trace_clock.h
406 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
traps.h
5.74 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
tsc.h
1.93 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
uaccess.h
21.69 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
uaccess_32.h
1.54 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
uaccess_64.h
5.32 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
umip.h
329 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
unaligned.h
345 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
unistd.h
1.45 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
unwind.h
3.13 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
unwind_hints.h
3.01 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
uprobes.h
1.57 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
user.h
2.2 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
user32.h
2.11 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
user_32.h
4.92 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
user_64.h
5.21 KB
01/28/2018 09:20:33 PM
rw-r--r--
📁
uv
-
11/17/2022 06:42:22 AM
rwxr-xr-x
📄
vdso.h
1.09 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
vga.h
740 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
vgtod.h
2.13 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
virtext.h
2.62 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
vm86.h
2.16 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
vmx.h
23.5 KB
11/01/2022 04:52:05 PM
rw-r--r--
📄
vsyscall.h
635 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
vvar.h
1.38 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
word-at-a-time.h
2.54 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
x86_init.h
9.25 KB
11/01/2022 04:52:05 PM
rw-r--r--
📁
xen
-
11/17/2022 06:42:22 AM
rwxr-xr-x
📄
xor.h
10.26 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
xor_32.h
14.4 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
xor_64.h
716 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
xor_avx.h
4.5 KB
01/28/2018 09:20:33 PM
rw-r--r--
Editing: percpu.h
Close
/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _ASM_X86_PERCPU_H #define _ASM_X86_PERCPU_H #ifdef CONFIG_X86_64 #define __percpu_seg gs #define __percpu_mov_op movq #else #define __percpu_seg fs #define __percpu_mov_op movl #endif #ifdef __ASSEMBLY__ /* * PER_CPU finds an address of a per-cpu variable. * * Args: * var - variable name * reg - 32bit register * * The resulting address is stored in the "reg" argument. * * Example: * PER_CPU(cpu_gdt_descr, %ebx) */ #ifdef CONFIG_SMP #define PER_CPU(var, reg) \ __percpu_mov_op %__percpu_seg:this_cpu_off, reg; \ lea var(reg), reg #define PER_CPU_VAR(var) %__percpu_seg:var #else /* ! SMP */ #define PER_CPU(var, reg) __percpu_mov_op $var, reg #define PER_CPU_VAR(var) var #endif /* SMP */ #ifdef CONFIG_X86_64_SMP #define INIT_PER_CPU_VAR(var) init_per_cpu__##var #else #define INIT_PER_CPU_VAR(var) var #endif #else /* ...!ASSEMBLY */ #include <linux/kernel.h> #include <linux/stringify.h> #ifdef CONFIG_SMP #define __percpu_prefix "%%"__stringify(__percpu_seg)":" #define __my_cpu_offset this_cpu_read(this_cpu_off) /* * Compared to the generic __my_cpu_offset version, the following * saves one instruction and avoids clobbering a temp register. */ #define arch_raw_cpu_ptr(ptr) \ ({ \ unsigned long tcp_ptr__; \ asm volatile("add " __percpu_arg(1) ", %0" \ : "=r" (tcp_ptr__) \ : "m" (this_cpu_off), "0" (ptr)); \ (typeof(*(ptr)) __kernel __force *)tcp_ptr__; \ }) #else #define __percpu_prefix "" #endif #define __percpu_arg(x) __percpu_prefix "%" #x /* * Initialized pointers to per-cpu variables needed for the boot * processor need to use these macros to get the proper address * offset from __per_cpu_load on SMP. * * There also must be an entry in vmlinux_64.lds.S */ #define DECLARE_INIT_PER_CPU(var) \ extern typeof(var) init_per_cpu_var(var) #ifdef CONFIG_X86_64_SMP #define init_per_cpu_var(var) init_per_cpu__##var #else #define init_per_cpu_var(var) var #endif /* For arch-specific code, we can use direct single-insn ops (they * don't give an lvalue though). */ extern void __bad_percpu_size(void); #define percpu_to_op(op, var, val) \ do { \ typedef typeof(var) pto_T__; \ if (0) { \ pto_T__ pto_tmp__; \ pto_tmp__ = (val); \ (void)pto_tmp__; \ } \ switch (sizeof(var)) { \ case 1: \ asm(op "b %1,"__percpu_arg(0) \ : "+m" (var) \ : "qi" ((pto_T__)(val))); \ break; \ case 2: \ asm(op "w %1,"__percpu_arg(0) \ : "+m" (var) \ : "ri" ((pto_T__)(val))); \ break; \ case 4: \ asm(op "l %1,"__percpu_arg(0) \ : "+m" (var) \ : "ri" ((pto_T__)(val))); \ break; \ case 8: \ asm(op "q %1,"__percpu_arg(0) \ : "+m" (var) \ : "re" ((pto_T__)(val))); \ break; \ default: __bad_percpu_size(); \ } \ } while (0) /* * Generate a percpu add to memory instruction and optimize code * if one is added or subtracted. */ #define percpu_add_op(var, val) \ do { \ typedef typeof(var) pao_T__; \ const int pao_ID__ = (__builtin_constant_p(val) && \ ((val) == 1 || (val) == -1)) ? \ (int)(val) : 0; \ if (0) { \ pao_T__ pao_tmp__; \ pao_tmp__ = (val); \ (void)pao_tmp__; \ } \ switch (sizeof(var)) { \ case 1: \ if (pao_ID__ == 1) \ asm("incb "__percpu_arg(0) : "+m" (var)); \ else if (pao_ID__ == -1) \ asm("decb "__percpu_arg(0) : "+m" (var)); \ else \ asm("addb %1, "__percpu_arg(0) \ : "+m" (var) \ : "qi" ((pao_T__)(val))); \ break; \ case 2: \ if (pao_ID__ == 1) \ asm("incw "__percpu_arg(0) : "+m" (var)); \ else if (pao_ID__ == -1) \ asm("decw "__percpu_arg(0) : "+m" (var)); \ else \ asm("addw %1, "__percpu_arg(0) \ : "+m" (var) \ : "ri" ((pao_T__)(val))); \ break; \ case 4: \ if (pao_ID__ == 1) \ asm("incl "__percpu_arg(0) : "+m" (var)); \ else if (pao_ID__ == -1) \ asm("decl "__percpu_arg(0) : "+m" (var)); \ else \ asm("addl %1, "__percpu_arg(0) \ : "+m" (var) \ : "ri" ((pao_T__)(val))); \ break; \ case 8: \ if (pao_ID__ == 1) \ asm("incq "__percpu_arg(0) : "+m" (var)); \ else if (pao_ID__ == -1) \ asm("decq "__percpu_arg(0) : "+m" (var)); \ else \ asm("addq %1, "__percpu_arg(0) \ : "+m" (var) \ : "re" ((pao_T__)(val))); \ break; \ default: __bad_percpu_size(); \ } \ } while (0) #define percpu_from_op(op, var) \ ({ \ typeof(var) pfo_ret__; \ switch (sizeof(var)) { \ case 1: \ asm volatile(op "b "__percpu_arg(1)",%0"\ : "=q" (pfo_ret__) \ : "m" (var)); \ break; \ case 2: \ asm volatile(op "w "__percpu_arg(1)",%0"\ : "=r" (pfo_ret__) \ : "m" (var)); \ break; \ case 4: \ asm volatile(op "l "__percpu_arg(1)",%0"\ : "=r" (pfo_ret__) \ : "m" (var)); \ break; \ case 8: \ asm volatile(op "q "__percpu_arg(1)",%0"\ : "=r" (pfo_ret__) \ : "m" (var)); \ break; \ default: __bad_percpu_size(); \ } \ pfo_ret__; \ }) #define percpu_stable_op(op, var) \ ({ \ typeof(var) pfo_ret__; \ switch (sizeof(var)) { \ case 1: \ asm(op "b "__percpu_arg(P1)",%0" \ : "=q" (pfo_ret__) \ : "p" (&(var))); \ break; \ case 2: \ asm(op "w "__percpu_arg(P1)",%0" \ : "=r" (pfo_ret__) \ : "p" (&(var))); \ break; \ case 4: \ asm(op "l "__percpu_arg(P1)",%0" \ : "=r" (pfo_ret__) \ : "p" (&(var))); \ break; \ case 8: \ asm(op "q "__percpu_arg(P1)",%0" \ : "=r" (pfo_ret__) \ : "p" (&(var))); \ break; \ default: __bad_percpu_size(); \ } \ pfo_ret__; \ }) #define percpu_unary_op(op, var) \ ({ \ switch (sizeof(var)) { \ case 1: \ asm(op "b "__percpu_arg(0) \ : "+m" (var)); \ break; \ case 2: \ asm(op "w "__percpu_arg(0) \ : "+m" (var)); \ break; \ case 4: \ asm(op "l "__percpu_arg(0) \ : "+m" (var)); \ break; \ case 8: \ asm(op "q "__percpu_arg(0) \ : "+m" (var)); \ break; \ default: __bad_percpu_size(); \ } \ }) /* * Add return operation */ #define percpu_add_return_op(var, val) \ ({ \ typeof(var) paro_ret__ = val; \ switch (sizeof(var)) { \ case 1: \ asm("xaddb %0, "__percpu_arg(1) \ : "+q" (paro_ret__), "+m" (var) \ : : "memory"); \ break; \ case 2: \ asm("xaddw %0, "__percpu_arg(1) \ : "+r" (paro_ret__), "+m" (var) \ : : "memory"); \ break; \ case 4: \ asm("xaddl %0, "__percpu_arg(1) \ : "+r" (paro_ret__), "+m" (var) \ : : "memory"); \ break; \ case 8: \ asm("xaddq %0, "__percpu_arg(1) \ : "+re" (paro_ret__), "+m" (var) \ : : "memory"); \ break; \ default: __bad_percpu_size(); \ } \ paro_ret__ += val; \ paro_ret__; \ }) /* * xchg is implemented using cmpxchg without a lock prefix. xchg is * expensive due to the implied lock prefix. The processor cannot prefetch * cachelines if xchg is used. */ #define percpu_xchg_op(var, nval) \ ({ \ typeof(var) pxo_ret__; \ typeof(var) pxo_new__ = (nval); \ switch (sizeof(var)) { \ case 1: \ asm("\n\tmov "__percpu_arg(1)",%%al" \ "\n1:\tcmpxchgb %2, "__percpu_arg(1) \ "\n\tjnz 1b" \ : "=&a" (pxo_ret__), "+m" (var) \ : "q" (pxo_new__) \ : "memory"); \ break; \ case 2: \ asm("\n\tmov "__percpu_arg(1)",%%ax" \ "\n1:\tcmpxchgw %2, "__percpu_arg(1) \ "\n\tjnz 1b" \ : "=&a" (pxo_ret__), "+m" (var) \ : "r" (pxo_new__) \ : "memory"); \ break; \ case 4: \ asm("\n\tmov "__percpu_arg(1)",%%eax" \ "\n1:\tcmpxchgl %2, "__percpu_arg(1) \ "\n\tjnz 1b" \ : "=&a" (pxo_ret__), "+m" (var) \ : "r" (pxo_new__) \ : "memory"); \ break; \ case 8: \ asm("\n\tmov "__percpu_arg(1)",%%rax" \ "\n1:\tcmpxchgq %2, "__percpu_arg(1) \ "\n\tjnz 1b" \ : "=&a" (pxo_ret__), "+m" (var) \ : "r" (pxo_new__) \ : "memory"); \ break; \ default: __bad_percpu_size(); \ } \ pxo_ret__; \ }) /* * cmpxchg has no such implied lock semantics as a result it is much * more efficient for cpu local operations. */ #define percpu_cmpxchg_op(var, oval, nval) \ ({ \ typeof(var) pco_ret__; \ typeof(var) pco_old__ = (oval); \ typeof(var) pco_new__ = (nval); \ switch (sizeof(var)) { \ case 1: \ asm("cmpxchgb %2, "__percpu_arg(1) \ : "=a" (pco_ret__), "+m" (var) \ : "q" (pco_new__), "0" (pco_old__) \ : "memory"); \ break; \ case 2: \ asm("cmpxchgw %2, "__percpu_arg(1) \ : "=a" (pco_ret__), "+m" (var) \ : "r" (pco_new__), "0" (pco_old__) \ : "memory"); \ break; \ case 4: \ asm("cmpxchgl %2, "__percpu_arg(1) \ : "=a" (pco_ret__), "+m" (var) \ : "r" (pco_new__), "0" (pco_old__) \ : "memory"); \ break; \ case 8: \ asm("cmpxchgq %2, "__percpu_arg(1) \ : "=a" (pco_ret__), "+m" (var) \ : "r" (pco_new__), "0" (pco_old__) \ : "memory"); \ break; \ default: __bad_percpu_size(); \ } \ pco_ret__; \ }) /* * this_cpu_read() makes gcc load the percpu variable every time it is * accessed while this_cpu_read_stable() allows the value to be cached. * this_cpu_read_stable() is more efficient and can be used if its value * is guaranteed to be valid across cpus. The current users include * get_current() and get_thread_info() both of which are actually * per-thread variables implemented as per-cpu variables and thus * stable for the duration of the respective task. */ #define this_cpu_read_stable(var) percpu_stable_op("mov", var) #define raw_cpu_read_1(pcp) percpu_from_op("mov", pcp) #define raw_cpu_read_2(pcp) percpu_from_op("mov", pcp) #define raw_cpu_read_4(pcp) percpu_from_op("mov", pcp) #define raw_cpu_write_1(pcp, val) percpu_to_op("mov", (pcp), val) #define raw_cpu_write_2(pcp, val) percpu_to_op("mov", (pcp), val) #define raw_cpu_write_4(pcp, val) percpu_to_op("mov", (pcp), val) #define raw_cpu_add_1(pcp, val) percpu_add_op((pcp), val) #define raw_cpu_add_2(pcp, val) percpu_add_op((pcp), val) #define raw_cpu_add_4(pcp, val) percpu_add_op((pcp), val) #define raw_cpu_and_1(pcp, val) percpu_to_op("and", (pcp), val) #define raw_cpu_and_2(pcp, val) percpu_to_op("and", (pcp), val) #define raw_cpu_and_4(pcp, val) percpu_to_op("and", (pcp), val) #define raw_cpu_or_1(pcp, val) percpu_to_op("or", (pcp), val) #define raw_cpu_or_2(pcp, val) percpu_to_op("or", (pcp), val) #define raw_cpu_or_4(pcp, val) percpu_to_op("or", (pcp), val) #define raw_cpu_xchg_1(pcp, val) percpu_xchg_op(pcp, val) #define raw_cpu_xchg_2(pcp, val) percpu_xchg_op(pcp, val) #define raw_cpu_xchg_4(pcp, val) percpu_xchg_op(pcp, val) #define this_cpu_read_1(pcp) percpu_from_op("mov", pcp) #define this_cpu_read_2(pcp) percpu_from_op("mov", pcp) #define this_cpu_read_4(pcp) percpu_from_op("mov", pcp) #define this_cpu_write_1(pcp, val) percpu_to_op("mov", (pcp), val) #define this_cpu_write_2(pcp, val) percpu_to_op("mov", (pcp), val) #define this_cpu_write_4(pcp, val) percpu_to_op("mov", (pcp), val) #define this_cpu_add_1(pcp, val) percpu_add_op((pcp), val) #define this_cpu_add_2(pcp, val) percpu_add_op((pcp), val) #define this_cpu_add_4(pcp, val) percpu_add_op((pcp), val) #define this_cpu_and_1(pcp, val) percpu_to_op("and", (pcp), val) #define this_cpu_and_2(pcp, val) percpu_to_op("and", (pcp), val) #define this_cpu_and_4(pcp, val) percpu_to_op("and", (pcp), val) #define this_cpu_or_1(pcp, val) percpu_to_op("or", (pcp), val) #define this_cpu_or_2(pcp, val) percpu_to_op("or", (pcp), val) #define this_cpu_or_4(pcp, val) percpu_to_op("or", (pcp), val) #define this_cpu_xchg_1(pcp, nval) percpu_xchg_op(pcp, nval) #define this_cpu_xchg_2(pcp, nval) percpu_xchg_op(pcp, nval) #define this_cpu_xchg_4(pcp, nval) percpu_xchg_op(pcp, nval) #define raw_cpu_add_return_1(pcp, val) percpu_add_return_op(pcp, val) #define raw_cpu_add_return_2(pcp, val) percpu_add_return_op(pcp, val) #define raw_cpu_add_return_4(pcp, val) percpu_add_return_op(pcp, val) #define raw_cpu_cmpxchg_1(pcp, oval, nval) percpu_cmpxchg_op(pcp, oval, nval) #define raw_cpu_cmpxchg_2(pcp, oval, nval) percpu_cmpxchg_op(pcp, oval, nval) #define raw_cpu_cmpxchg_4(pcp, oval, nval) percpu_cmpxchg_op(pcp, oval, nval) #define this_cpu_add_return_1(pcp, val) percpu_add_return_op(pcp, val) #define this_cpu_add_return_2(pcp, val) percpu_add_return_op(pcp, val) #define this_cpu_add_return_4(pcp, val) percpu_add_return_op(pcp, val) #define this_cpu_cmpxchg_1(pcp, oval, nval) percpu_cmpxchg_op(pcp, oval, nval) #define this_cpu_cmpxchg_2(pcp, oval, nval) percpu_cmpxchg_op(pcp, oval, nval) #define this_cpu_cmpxchg_4(pcp, oval, nval) percpu_cmpxchg_op(pcp, oval, nval) #ifdef CONFIG_X86_CMPXCHG64 #define percpu_cmpxchg8b_double(pcp1, pcp2, o1, o2, n1, n2) \ ({ \ bool __ret; \ typeof(pcp1) __o1 = (o1), __n1 = (n1); \ typeof(pcp2) __o2 = (o2), __n2 = (n2); \ asm volatile("cmpxchg8b "__percpu_arg(1)"\n\tsetz %0\n\t" \ : "=a" (__ret), "+m" (pcp1), "+m" (pcp2), "+d" (__o2) \ : "b" (__n1), "c" (__n2), "a" (__o1)); \ __ret; \ }) #define raw_cpu_cmpxchg_double_4 percpu_cmpxchg8b_double #define this_cpu_cmpxchg_double_4 percpu_cmpxchg8b_double #endif /* CONFIG_X86_CMPXCHG64 */ /* * Per cpu atomic 64 bit operations are only available under 64 bit. * 32 bit must fall back to generic operations. */ #ifdef CONFIG_X86_64 #define raw_cpu_read_8(pcp) percpu_from_op("mov", pcp) #define raw_cpu_write_8(pcp, val) percpu_to_op("mov", (pcp), val) #define raw_cpu_add_8(pcp, val) percpu_add_op((pcp), val) #define raw_cpu_and_8(pcp, val) percpu_to_op("and", (pcp), val) #define raw_cpu_or_8(pcp, val) percpu_to_op("or", (pcp), val) #define raw_cpu_add_return_8(pcp, val) percpu_add_return_op(pcp, val) #define raw_cpu_xchg_8(pcp, nval) percpu_xchg_op(pcp, nval) #define raw_cpu_cmpxchg_8(pcp, oval, nval) percpu_cmpxchg_op(pcp, oval, nval) #define this_cpu_read_8(pcp) percpu_from_op("mov", pcp) #define this_cpu_write_8(pcp, val) percpu_to_op("mov", (pcp), val) #define this_cpu_add_8(pcp, val) percpu_add_op((pcp), val) #define this_cpu_and_8(pcp, val) percpu_to_op("and", (pcp), val) #define this_cpu_or_8(pcp, val) percpu_to_op("or", (pcp), val) #define this_cpu_add_return_8(pcp, val) percpu_add_return_op(pcp, val) #define this_cpu_xchg_8(pcp, nval) percpu_xchg_op(pcp, nval) #define this_cpu_cmpxchg_8(pcp, oval, nval) percpu_cmpxchg_op(pcp, oval, nval) /* * Pretty complex macro to generate cmpxchg16 instruction. The instruction * is not supported on early AMD64 processors so we must be able to emulate * it in software. The address used in the cmpxchg16 instruction must be * aligned to a 16 byte boundary. */ #define percpu_cmpxchg16b_double(pcp1, pcp2, o1, o2, n1, n2) \ ({ \ bool __ret; \ typeof(pcp1) __o1 = (o1), __n1 = (n1); \ typeof(pcp2) __o2 = (o2), __n2 = (n2); \ alternative_io("leaq %P1,%%rsi\n\tcall this_cpu_cmpxchg16b_emu\n\t", \ "cmpxchg16b " __percpu_arg(1) "\n\tsetz %0\n\t", \ X86_FEATURE_CX16, \ ASM_OUTPUT2("=a" (__ret), "+m" (pcp1), \ "+m" (pcp2), "+d" (__o2)), \ "b" (__n1), "c" (__n2), "a" (__o1) : "rsi"); \ __ret; \ }) #define raw_cpu_cmpxchg_double_8 percpu_cmpxchg16b_double #define this_cpu_cmpxchg_double_8 percpu_cmpxchg16b_double #endif static __always_inline bool x86_this_cpu_constant_test_bit(unsigned int nr, const unsigned long __percpu *addr) { unsigned long __percpu *a = (unsigned long __percpu *)addr + nr / BITS_PER_LONG; #ifdef CONFIG_X86_64 return ((1UL << (nr % BITS_PER_LONG)) & raw_cpu_read_8(*a)) != 0; #else return ((1UL << (nr % BITS_PER_LONG)) & raw_cpu_read_4(*a)) != 0; #endif } static inline bool x86_this_cpu_variable_test_bit(int nr, const unsigned long __percpu *addr) { bool oldbit; asm volatile("btl "__percpu_arg(2)",%1" CC_SET(c) : CC_OUT(c) (oldbit) : "m" (*(unsigned long __percpu *)addr), "Ir" (nr)); return oldbit; } #define x86_this_cpu_test_bit(nr, addr) \ (__builtin_constant_p((nr)) \ ? x86_this_cpu_constant_test_bit((nr), (addr)) \ : x86_this_cpu_variable_test_bit((nr), (addr))) #include <asm-generic/percpu.h> /* We can use this directly for local CPU (faster). */ DECLARE_PER_CPU_READ_MOSTLY(unsigned long, this_cpu_off); #endif /* !__ASSEMBLY__ */ #ifdef CONFIG_SMP /* * Define the "EARLY_PER_CPU" macros. These are used for some per_cpu * variables that are initialized and accessed before there are per_cpu * areas allocated. */ #define DEFINE_EARLY_PER_CPU(_type, _name, _initvalue) \ DEFINE_PER_CPU(_type, _name) = _initvalue; \ __typeof__(_type) _name##_early_map[NR_CPUS] __initdata = \ { [0 ... NR_CPUS-1] = _initvalue }; \ __typeof__(_type) *_name##_early_ptr __refdata = _name##_early_map #define DEFINE_EARLY_PER_CPU_READ_MOSTLY(_type, _name, _initvalue) \ DEFINE_PER_CPU_READ_MOSTLY(_type, _name) = _initvalue; \ __typeof__(_type) _name##_early_map[NR_CPUS] __initdata = \ { [0 ... NR_CPUS-1] = _initvalue }; \ __typeof__(_type) *_name##_early_ptr __refdata = _name##_early_map #define EXPORT_EARLY_PER_CPU_SYMBOL(_name) \ EXPORT_PER_CPU_SYMBOL(_name) #define DECLARE_EARLY_PER_CPU(_type, _name) \ DECLARE_PER_CPU(_type, _name); \ extern __typeof__(_type) *_name##_early_ptr; \ extern __typeof__(_type) _name##_early_map[] #define DECLARE_EARLY_PER_CPU_READ_MOSTLY(_type, _name) \ DECLARE_PER_CPU_READ_MOSTLY(_type, _name); \ extern __typeof__(_type) *_name##_early_ptr; \ extern __typeof__(_type) _name##_early_map[] #define early_per_cpu_ptr(_name) (_name##_early_ptr) #define early_per_cpu_map(_name, _idx) (_name##_early_map[_idx]) #define early_per_cpu(_name, _cpu) \ *(early_per_cpu_ptr(_name) ? \ &early_per_cpu_ptr(_name)[_cpu] : \ &per_cpu(_name, _cpu)) #else /* !CONFIG_SMP */ #define DEFINE_EARLY_PER_CPU(_type, _name, _initvalue) \ DEFINE_PER_CPU(_type, _name) = _initvalue #define DEFINE_EARLY_PER_CPU_READ_MOSTLY(_type, _name, _initvalue) \ DEFINE_PER_CPU_READ_MOSTLY(_type, _name) = _initvalue #define EXPORT_EARLY_PER_CPU_SYMBOL(_name) \ EXPORT_PER_CPU_SYMBOL(_name) #define DECLARE_EARLY_PER_CPU(_type, _name) \ DECLARE_PER_CPU(_type, _name) #define DECLARE_EARLY_PER_CPU_READ_MOSTLY(_type, _name) \ DECLARE_PER_CPU_READ_MOSTLY(_type, _name) #define early_per_cpu(_name, _cpu) per_cpu(_name, _cpu) #define early_per_cpu_ptr(_name) NULL /* no early_per_cpu_map() */ #endif /* !CONFIG_SMP */ #endif /* _ASM_X86_PERCPU_H */