Linux jobworks 6.8.0-136-generic #136-Ubuntu SMP PREEMPT_DYNAMIC Wed Jul 1 21:53:05 UTC 2026 x86_64
Apache/2.4.58 (Ubuntu)
Server IP : 10.0.1.5 & Your IP : 216.73.217.52
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
src /
linux-headers-6.8.0-136 /
include /
linux /
Delete
Unzip
Name
Size
Permission
Date
Action
amba
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
atomic
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
avf
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
bcma
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
byteorder
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
can
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
cdx
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
ceph
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
clk
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
comedi
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
crush
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
decompress
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
device
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
dma
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
dsa
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
extcon
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
firmware
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
fpga
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
framer
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
fsl
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
gpio
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
greybus
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
habanalabs
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
hsi
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
i3c
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
iio
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
input
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
io_uring
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
irqchip
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
isdn
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
lockd
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
lsm
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mailbox
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mdio
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mfd
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mlx4
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mlx5
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mmc
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mtd
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mux
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
net
[ DIR ]
drwxr-xr-x
2026-07-17 06:28
netfilter
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
netfilter_arp
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
netfilter_bridge
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
netfilter_ipv4
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
netfilter_ipv6
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
pcs
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
pds
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
perf
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
phy
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
pinctrl
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
platform_data
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
power
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
pse-pd
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
qed
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
raid
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
regulator
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
remoteproc
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
reset
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
rpmsg
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
rtc
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
sched
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
soc
[ DIR ]
drwxr-xr-x
2026-07-17 06:28
soundwire
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
spi
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
ssb
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
sunrpc
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
surface_aggregator
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
ulpi
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
unaligned
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
usb
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
8250_pci.h
1.01
KB
-rw-r--r--
2024-03-10 20:38
acct.h
2.45
KB
-rw-r--r--
2024-03-10 20:38
acpi.h
44.11
KB
-rw-r--r--
2026-07-01 19:48
acpi_amd_wbrf.h
2.24
KB
-rw-r--r--
2024-03-10 20:38
acpi_dma.h
3.08
KB
-rw-r--r--
2024-03-10 20:38
acpi_iort.h
2.64
KB
-rw-r--r--
2024-03-10 20:38
acpi_mdio.h
819
B
-rw-r--r--
2024-03-10 20:38
acpi_pmtmr.h
674
B
-rw-r--r--
2024-03-10 20:38
acpi_viot.h
478
B
-rw-r--r--
2024-03-10 20:38
adb.h
1.79
KB
-rw-r--r--
2024-03-10 20:38
adfs_fs.h
574
B
-rw-r--r--
2024-03-10 20:38
adreno-smmu-priv.h
2.74
KB
-rw-r--r--
2024-03-10 20:38
adxl.h
310
B
-rw-r--r--
2024-03-10 20:38
aer.h
1.29
KB
-rw-r--r--
2024-03-10 20:38
agp_backend.h
3.45
KB
-rw-r--r--
2024-03-10 20:38
agpgart.h
3.79
KB
-rw-r--r--
2024-03-10 20:38
ahci-remap.h
607
B
-rw-r--r--
2024-03-10 20:38
ahci_platform.h
1.81
KB
-rw-r--r--
2024-03-10 20:38
aio.h
570
B
-rw-r--r--
2024-03-10 20:38
alarmtimer.h
1.94
KB
-rw-r--r--
2024-03-10 20:38
alcor_pci.h
8.7
KB
-rw-r--r--
2024-03-10 20:38
align.h
552
B
-rw-r--r--
2024-03-10 20:38
altera_jtaguart.h
379
B
-rw-r--r--
2024-03-10 20:38
altera_uart.h
397
B
-rw-r--r--
2024-03-10 20:38
amd-iommu.h
2.07
KB
-rw-r--r--
2024-03-10 20:38
amd-pmf-io.h
1.25
KB
-rw-r--r--
2024-03-10 20:38
anon_inodes.h
855
B
-rw-r--r--
2024-03-10 20:38
aperture.h
1.61
KB
-rw-r--r--
2024-03-10 20:38
apm-emulation.h
1.56
KB
-rw-r--r--
2024-03-10 20:38
apm_bios.h
2.25
KB
-rw-r--r--
2024-03-10 20:38
apple-gmux.h
4.63
KB
-rw-r--r--
2024-03-10 20:38
arch_topology.h
3
KB
-rw-r--r--
2024-03-10 20:38
args.h
994
B
-rw-r--r--
2024-03-10 20:38
arm-cci.h
1.39
KB
-rw-r--r--
2024-03-10 20:38
arm-smccc.h
17.18
KB
-rw-r--r--
2026-07-01 19:48
arm_ffa.h
13.25
KB
-rw-r--r--
2024-03-10 20:38
arm_sdei.h
2.67
KB
-rw-r--r--
2026-07-01 19:48
armada-37xx-rwtm-mailbox.h
431
B
-rw-r--r--
2024-03-10 20:38
array_size.h
332
B
-rw-r--r--
2024-03-10 20:38
ascii85.h
555
B
-rw-r--r--
2024-03-10 20:38
asn1.h
1.79
KB
-rw-r--r--
2024-03-10 20:38
asn1_ber_bytecode.h
2.52
KB
-rw-r--r--
2024-03-10 20:38
asn1_decoder.h
468
B
-rw-r--r--
2024-03-10 20:38
asn1_encoder.h
1006
B
-rw-r--r--
2024-03-10 20:38
assoc_array.h
2.88
KB
-rw-r--r--
2024-03-10 20:38
assoc_array_priv.h
5.3
KB
-rw-r--r--
2024-03-10 20:38
async.h
4.33
KB
-rw-r--r--
2024-03-10 20:38
async_tx.h
6.7
KB
-rw-r--r--
2024-03-10 20:38
ata.h
30.45
KB
-rw-r--r--
2026-07-01 19:48
ata_platform.h
755
B
-rw-r--r--
2024-03-10 20:38
atalk.h
4.45
KB
-rw-r--r--
2024-03-10 20:38
ath9k_platform.h
1.44
KB
-rw-r--r--
2024-03-10 20:38
atm.h
287
B
-rw-r--r--
2024-03-10 20:38
atm_tcp.h
542
B
-rw-r--r--
2024-03-10 20:38
atmdev.h
10.23
KB
-rw-r--r--
2026-07-01 19:48
atmel-isc-media.h
2.07
KB
-rw-r--r--
2024-03-10 20:38
atmel-ssc.h
9.74
KB
-rw-r--r--
2024-03-10 20:38
atmel_pdc.h
1.26
KB
-rw-r--r--
2024-03-10 20:38
atomic.h
2.58
KB
-rw-r--r--
2024-03-10 20:38
attribute_container.h
2.74
KB
-rw-r--r--
2024-03-10 20:38
audit.h
20.24
KB
-rw-r--r--
2026-07-01 19:48
audit_arch.h
784
B
-rw-r--r--
2026-07-01 19:48
auto_dev-ioctl.h
296
B
-rw-r--r--
2024-03-10 20:38
auto_fs.h
278
B
-rw-r--r--
2024-03-10 20:38
auxiliary_bus.h
9.67
KB
-rw-r--r--
2024-03-10 20:38
auxvec.h
304
B
-rw-r--r--
2024-03-10 20:38
average.h
2.42
KB
-rw-r--r--
2024-03-10 20:38
backing-dev-defs.h
8.4
KB
-rw-r--r--
2024-03-10 20:38
backing-dev.h
10.46
KB
-rw-r--r--
2026-07-01 19:48
backing-file.h
1.34
KB
-rw-r--r--
2024-03-10 20:38
backlight.h
13.13
KB
-rw-r--r--
2024-03-10 20:38
badblocks.h
2.63
KB
-rw-r--r--
2024-03-10 20:38
balloon_compaction.h
5.69
KB
-rw-r--r--
2026-07-01 19:48
base64.h
370
B
-rw-r--r--
2024-03-10 20:38
bcd.h
683
B
-rw-r--r--
2024-03-10 20:38
bch.h
2.1
KB
-rw-r--r--
2024-03-10 20:38
bcm47xx_nvram.h
1.2
KB
-rw-r--r--
2024-03-10 20:38
bcm47xx_sprom.h
616
B
-rw-r--r--
2024-03-10 20:38
bcm47xx_wdt.h
555
B
-rw-r--r--
2024-03-10 20:38
bcm963xx_nvram.h
2.96
KB
-rw-r--r--
2024-03-10 20:38
bcm963xx_tag.h
3.6
KB
-rw-r--r--
2024-03-10 20:38
binfmts.h
4.51
KB
-rw-r--r--
2026-07-01 19:48
bio.h
21.19
KB
-rw-r--r--
2026-07-01 19:48
bit_spinlock.h
2.3
KB
-rw-r--r--
2024-03-10 20:38
bitfield.h
6.37
KB
-rw-r--r--
2024-03-10 20:38
bitmap-str.h
842
B
-rw-r--r--
2024-03-10 20:38
bitmap.h
26.05
KB
-rw-r--r--
2026-07-01 19:48
bitops.h
9.59
KB
-rw-r--r--
2026-07-01 19:48
bitrev.h
2.53
KB
-rw-r--r--
2024-03-10 20:38
bits.h
2.48
KB
-rw-r--r--
2026-07-01 19:48
blk-cgroup.h
1.53
KB
-rw-r--r--
2024-03-10 20:38
blk-crypto-profile.h
5.3
KB
-rw-r--r--
2024-03-10 20:38
blk-crypto.h
4.13
KB
-rw-r--r--
2024-03-10 20:38
blk-integrity.h
4.68
KB
-rw-r--r--
2026-07-01 19:48
blk-mq-pci.h
271
B
-rw-r--r--
2024-03-10 20:38
blk-mq-virtio.h
294
B
-rw-r--r--
2024-03-10 20:38
blk-mq.h
35.19
KB
-rw-r--r--
2026-07-01 19:48
blk-pm.h
647
B
-rw-r--r--
2024-03-10 20:38
blk_types.h
16.5
KB
-rw-r--r--
2026-07-01 19:48
blkdev.h
45.69
KB
-rw-r--r--
2026-07-01 19:48
blkpg.h
436
B
-rw-r--r--
2024-03-10 20:38
blktrace_api.h
3.55
KB
-rw-r--r--
2024-03-10 20:38
blockgroup_lock.h
810
B
-rw-r--r--
2024-03-10 20:38
bma150.h
1.25
KB
-rw-r--r--
2024-03-10 20:38
bootconfig.h
9.27
KB
-rw-r--r--
2026-07-01 19:48
bootmem_info.h
1.69
KB
-rw-r--r--
2024-03-10 20:38
bottom_half.h
1013
B
-rw-r--r--
2024-03-10 20:38
bpf-cgroup-defs.h
2.07
KB
-rw-r--r--
2024-03-10 20:38
bpf-cgroup.h
18.2
KB
-rw-r--r--
2026-07-01 19:48
bpf-netns.h
1.41
KB
-rw-r--r--
2024-03-10 20:38
bpf.h
103.56
KB
-rw-r--r--
2026-07-01 19:48
bpf_lirc.h
698
B
-rw-r--r--
2024-03-10 20:38
bpf_local_storage.h
5.61
KB
-rw-r--r--
2024-03-10 20:38
bpf_lsm.h
2.01
KB
-rw-r--r--
2026-07-01 19:48
bpf_mem_alloc.h
2.05
KB
-rw-r--r--
2026-07-01 19:48
bpf_mprog.h
9.29
KB
-rw-r--r--
2024-03-10 20:38
bpf_trace.h
166
B
-rw-r--r--
2024-03-10 20:38
bpf_types.h
6.01
KB
-rw-r--r--
2024-03-10 20:38
bpf_verifier.h
31.84
KB
-rw-r--r--
2026-07-01 19:48
bpfptr.h
2
KB
-rw-r--r--
2024-03-10 20:38
brcmphy.h
16.93
KB
-rw-r--r--
2024-03-10 20:38
bsearch.h
624
B
-rw-r--r--
2024-03-10 20:38
bsg-lib.h
1.69
KB
-rw-r--r--
2024-03-10 20:38
bsg.h
499
B
-rw-r--r--
2024-03-10 20:38
btf.h
17.37
KB
-rw-r--r--
2026-07-01 19:48
btf_ids.h
7.67
KB
-rw-r--r--
2024-03-10 20:38
btree-128.h
2.67
KB
-rw-r--r--
2024-03-10 20:38
btree-type.h
3.9
KB
-rw-r--r--
2024-03-10 20:38
btree.h
6.84
KB
-rw-r--r--
2024-03-10 20:38
btrfs.h
145
B
-rw-r--r--
2024-03-10 20:38
buffer_head.h
16.34
KB
-rw-r--r--
2026-07-01 19:48
bug.h
2.17
KB
-rw-r--r--
2024-03-10 20:38
build-salt.h
375
B
-rw-r--r--
2024-03-10 20:38
build_bug.h
2.99
KB
-rw-r--r--
2024-03-10 20:38
buildid.h
581
B
-rw-r--r--
2024-03-10 20:38
bvec.h
7.31
KB
-rw-r--r--
2026-07-01 19:48
c2port.h
1.35
KB
-rw-r--r--
2024-03-10 20:38
cache.h
5.51
KB
-rw-r--r--
2026-07-01 19:48
cacheflush.h
675
B
-rw-r--r--
2024-03-10 20:38
cacheinfo.h
4.27
KB
-rw-r--r--
2024-03-10 20:38
call_once.h
1.67
KB
-rw-r--r--
2026-07-01 19:48
capability.h
6.45
KB
-rw-r--r--
2026-07-01 19:48
cb710.h
5.36
KB
-rw-r--r--
2024-03-10 20:38
cc_platform.h
3.07
KB
-rw-r--r--
2024-03-10 20:38
cciss_ioctl.h
1.03
KB
-rw-r--r--
2024-03-10 20:38
ccp.h
18.14
KB
-rw-r--r--
2024-03-10 20:38
cdev.h
845
B
-rw-r--r--
2024-03-10 20:38
cdrom.h
8.99
KB
-rw-r--r--
2026-07-01 19:48
cfag12864b.h
1.47
KB
-rw-r--r--
2024-03-10 20:38
cfi.h
1.23
KB
-rw-r--r--
2024-03-10 20:38
cfi_types.h
1.06
KB
-rw-r--r--
2024-03-10 20:38
cgroup-defs.h
26.29
KB
-rw-r--r--
2026-07-01 19:48
cgroup.h
26.3
KB
-rw-r--r--
2026-07-01 19:48
cgroup_api.h
26
B
-rw-r--r--
2024-03-10 20:38
cgroup_rdma.h
1.18
KB
-rw-r--r--
2024-03-10 20:38
cgroup_refcnt.h
2.59
KB
-rw-r--r--
2024-03-10 20:38
cgroup_subsys.h
1.23
KB
-rw-r--r--
2024-03-10 20:38
circ_buf.h
1.09
KB
-rw-r--r--
2024-03-10 20:38
cleanup.h
9.41
KB
-rw-r--r--
2026-07-01 19:48
clk-provider.h
62.98
KB
-rw-r--r--
2024-03-10 20:38
clk.h
34.21
KB
-rw-r--r--
2026-07-01 19:48
clkdev.h
1.2
KB
-rw-r--r--
2024-03-10 20:38
clockchips.h
7.29
KB
-rw-r--r--
2024-03-10 20:38
clocksource.h
9.99
KB
-rw-r--r--
2026-07-01 19:48
clocksource_ids.h
247
B
-rw-r--r--
2024-03-10 20:38
closure.h
12.33
KB
-rw-r--r--
2024-03-10 20:38
cma.h
2.01
KB
-rw-r--r--
2024-03-10 20:38
cn_proc.h
1.85
KB
-rw-r--r--
2024-03-10 20:38
cnt32_to_63.h
3.46
KB
-rw-r--r--
2024-03-10 20:38
coda.h
2.16
KB
-rw-r--r--
2024-03-10 20:38
compaction.h
4.5
KB
-rw-r--r--
2026-07-01 19:48
compat.h
32.32
KB
-rw-r--r--
2026-07-01 19:48
compiler-clang.h
4.5
KB
-rw-r--r--
2026-07-01 19:48
compiler-gcc.h
4.57
KB
-rw-r--r--
2026-07-01 19:48
compiler-version.h
517
B
-rw-r--r--
2024-03-10 20:38
compiler.h
7.87
KB
-rw-r--r--
2026-07-01 19:48
compiler_attributes.h
15.33
KB
-rw-r--r--
2026-07-01 19:48
compiler_types.h
17.21
KB
-rw-r--r--
2026-07-01 19:48
completion.h
4.14
KB
-rw-r--r--
2024-03-10 20:38
component.h
4.35
KB
-rw-r--r--
2024-03-10 20:38
configfs.h
8.35
KB
-rw-r--r--
2024-03-10 20:38
connector.h
4.01
KB
-rw-r--r--
2024-03-10 20:38
console.h
17.63
KB
-rw-r--r--
2026-07-01 19:48
console_struct.h
7.05
KB
-rw-r--r--
2024-03-10 20:38
consolemap.h
1.25
KB
-rw-r--r--
2024-03-10 20:38
const.h
100
B
-rw-r--r--
2024-03-10 20:38
container.h
616
B
-rw-r--r--
2024-03-10 20:38
container_of.h
1.3
KB
-rw-r--r--
2024-03-10 20:38
context_tracking.h
4.15
KB
-rw-r--r--
2024-03-10 20:38
context_tracking_irq.h
633
B
-rw-r--r--
2026-07-01 19:48
context_tracking_state.h
3.84
KB
-rw-r--r--
2024-03-10 20:38
cookie.h
1.22
KB
-rw-r--r--
2024-03-10 20:38
cordic.h
2.08
KB
-rw-r--r--
2024-03-10 20:38
coredump.h
1.43
KB
-rw-r--r--
2024-03-10 20:38
coresight-pmu.h
1.86
KB
-rw-r--r--
2024-03-10 20:38
coresight-stm.h
152
B
-rw-r--r--
2024-03-10 20:38
coresight.h
21.27
KB
-rw-r--r--
2026-07-01 19:48
count_zeros.h
1.42
KB
-rw-r--r--
2024-03-10 20:38
counter.h
21.39
KB
-rw-r--r--
2026-07-01 19:48
cper.h
17.75
KB
-rw-r--r--
2026-07-01 19:48
cpu.h
7.69
KB
-rw-r--r--
2026-07-01 19:48
cpu_cooling.h
1.86
KB
-rw-r--r--
2024-03-10 20:38
cpu_pm.h
2.38
KB
-rw-r--r--
2024-03-10 20:38
cpu_rmap.h
1.7
KB
-rw-r--r--
2024-03-10 20:38
cpu_smt.h
1.12
KB
-rw-r--r--
2024-03-10 20:38
cpufeature.h
1.71
KB
-rw-r--r--
2024-03-10 20:38
cpufreq.h
37
KB
-rw-r--r--
2026-07-01 19:48
cpuhotplug.h
16.78
KB
-rw-r--r--
2026-07-01 19:48
cpuidle.h
11.42
KB
-rw-r--r--
2024-03-10 20:38
cpuidle_haltpoll.h
312
B
-rw-r--r--
2024-03-10 20:38
cpumask.h
36.17
KB
-rw-r--r--
2026-07-01 19:48
cpumask_api.h
27
B
-rw-r--r--
2024-03-10 20:38
cpuset.h
7.94
KB
-rw-r--r--
2026-07-01 19:48
crash_core.h
4.92
KB
-rw-r--r--
2024-03-10 20:38
crash_dump.h
5.04
KB
-rw-r--r--
2024-03-10 20:38
crc-ccitt.h
369
B
-rw-r--r--
2024-03-10 20:38
crc-itu-t.h
530
B
-rw-r--r--
2024-03-10 20:38
crc-t10dif.h
453
B
-rw-r--r--
2024-03-10 20:38
crc16.h
540
B
-rw-r--r--
2024-03-10 20:38
crc32.h
2.83
KB
-rw-r--r--
2024-03-10 20:38
crc32c.h
293
B
-rw-r--r--
2024-03-10 20:38
crc32poly.h
610
B
-rw-r--r--
2024-03-10 20:38
crc4.h
192
B
-rw-r--r--
2024-03-10 20:38
crc64.h
539
B
-rw-r--r--
2024-03-10 20:38
crc7.h
316
B
-rw-r--r--
2024-03-10 20:38
crc8.h
3.66
KB
-rw-r--r--
2024-03-10 20:38
cred.h
12.46
KB
-rw-r--r--
2024-03-10 20:38
crypto.h
19.01
KB
-rw-r--r--
2024-03-10 20:38
cs5535.h
6.13
KB
-rw-r--r--
2024-03-10 20:38
ctype.h
1.87
KB
-rw-r--r--
2024-03-10 20:38
cuda.h
620
B
-rw-r--r--
2024-03-10 20:38
cxl-event.h
2.93
KB
-rw-r--r--
2024-03-10 20:38
damon.h
27.06
KB
-rw-r--r--
2026-07-01 19:48
dasd_mod.h
204
B
-rw-r--r--
2024-03-10 20:38
davinci_emac.h
1.05
KB
-rw-r--r--
2024-03-10 20:38
dax.h
8.88
KB
-rw-r--r--
2024-03-10 20:38
dca.h
1.88
KB
-rw-r--r--
2024-03-10 20:38
dcache.h
18.11
KB
-rw-r--r--
2026-07-01 19:48
dccp.h
10.74
KB
-rw-r--r--
2024-03-10 20:38
debug_locks.h
1.57
KB
-rw-r--r--
2024-03-10 20:38
debugfs.h
12.5
KB
-rw-r--r--
2024-03-10 20:38
debugobjects.h
3.99
KB
-rw-r--r--
2024-03-10 20:38
delay.h
2.47
KB
-rw-r--r--
2024-03-10 20:38
delayacct.h
6.76
KB
-rw-r--r--
2024-03-10 20:38
delayed_call.h
709
B
-rw-r--r--
2024-03-10 20:38
dev_printk.h
9.65
KB
-rw-r--r--
2026-07-01 19:48
devcoredump.h
2.21
KB
-rw-r--r--
2024-03-10 20:38
devfreq-event.h
5.95
KB
-rw-r--r--
2024-03-10 20:38
devfreq.h
14.52
KB
-rw-r--r--
2024-03-10 20:38
devfreq_cooling.h
2.7
KB
-rw-r--r--
2024-03-10 20:38
device-mapper.h
20.22
KB
-rw-r--r--
2024-03-10 20:38
device.h
44.36
KB
-rw-r--r--
2026-07-01 19:48
device_cgroup.h
1.57
KB
-rw-r--r--
2024-03-10 20:38
devm-helpers.h
2.68
KB
-rw-r--r--
2024-03-10 20:38
devpts_fs.h
1.13
KB
-rw-r--r--
2024-03-10 20:38
dfl.h
2.72
KB
-rw-r--r--
2024-03-10 20:38
digsig.h
1.18
KB
-rw-r--r--
2024-03-10 20:38
dim.h
9.2
KB
-rw-r--r--
2024-03-10 20:38
dio.h
10.76
KB
-rw-r--r--
2024-03-10 20:38
dirent.h
215
B
-rw-r--r--
2024-03-10 20:38
dlm.h
5.62
KB
-rw-r--r--
2024-03-10 20:38
dlm_plock.h
642
B
-rw-r--r--
2024-03-10 20:38
dm-bufio.h
4.9
KB
-rw-r--r--
2024-03-10 20:38
dm-dirty-log.h
4
KB
-rw-r--r--
2024-03-10 20:38
dm-io.h
2.03
KB
-rw-r--r--
2026-07-01 19:48
dm-kcopyd.h
3.03
KB
-rw-r--r--
2024-03-10 20:38
dm-region-hash.h
3.16
KB
-rw-r--r--
2024-03-10 20:38
dm-verity-loadpin.h
617
B
-rw-r--r--
2024-03-10 20:38
dm9000.h
987
B
-rw-r--r--
2024-03-10 20:38
dma-buf.h
21.17
KB
-rw-r--r--
2024-03-10 20:38
dma-direct.h
3.62
KB
-rw-r--r--
2024-03-10 20:38
dma-direction.h
407
B
-rw-r--r--
2024-03-10 20:38
dma-fence-array.h
2.53
KB
-rw-r--r--
2024-03-10 20:38
dma-fence-chain.h
3.49
KB
-rw-r--r--
2024-03-10 20:38
dma-fence-unwrap.h
2.24
KB
-rw-r--r--
2024-03-10 20:38
dma-fence.h
22.67
KB
-rw-r--r--
2024-03-10 20:38
dma-heap.h
1.58
KB
-rw-r--r--
2024-03-10 20:38
dma-map-ops.h
16.73
KB
-rw-r--r--
2024-03-10 20:38
dma-mapping.h
20.25
KB
-rw-r--r--
2026-07-01 19:48
dma-resv.h
16.94
KB
-rw-r--r--
2024-03-10 20:38
dmaengine.h
53.73
KB
-rw-r--r--
2024-03-10 20:38
dmapool.h
1.79
KB
-rw-r--r--
2024-03-10 20:38
dmar.h
8.11
KB
-rw-r--r--
2024-03-10 20:38
dmi.h
4.41
KB
-rw-r--r--
2026-07-01 19:48
dnotify.h
1012
B
-rw-r--r--
2024-03-10 20:38
dns_resolver.h
1.36
KB
-rw-r--r--
2024-03-10 20:38
dpll.h
6.56
KB
-rw-r--r--
2026-07-01 19:48
dqblk_qtree.h
2.19
KB
-rw-r--r--
2024-03-10 20:38
dqblk_v1.h
327
B
-rw-r--r--
2024-03-10 20:38
dqblk_v2.h
406
B
-rw-r--r--
2024-03-10 20:38
drbd.h
9.92
KB
-rw-r--r--
2024-03-10 20:38
drbd_config.h
285
B
-rw-r--r--
2024-03-10 20:38
drbd_genl.h
21.49
KB
-rw-r--r--
2024-03-10 20:38
drbd_genl_api.h
1.76
KB
-rw-r--r--
2024-03-10 20:38
drbd_limits.h
7.92
KB
-rw-r--r--
2024-03-10 20:38
ds2782_battery.h
158
B
-rw-r--r--
2024-03-10 20:38
dtlk.h
3.5
KB
-rw-r--r--
2024-03-10 20:38
dtpm.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
dw_apb_timer.h
1.53
KB
-rw-r--r--
2024-03-10 20:38
dynamic_debug.h
11
KB
-rw-r--r--
2024-03-10 20:38
dynamic_queue_limits.h
3.74
KB
-rw-r--r--
2026-07-01 19:48
earlycpio.h
359
B
-rw-r--r--
2024-03-10 20:38
ecryptfs.h
3.82
KB
-rw-r--r--
2024-03-10 20:38
edac.h
19.44
KB
-rw-r--r--
2024-03-10 20:38
edd.h
1.05
KB
-rw-r--r--
2024-03-10 20:38
eeprom_93cx6.h
2.64
KB
-rw-r--r--
2026-07-01 19:48
eeprom_93xx46.h
1.04
KB
-rw-r--r--
2024-03-10 20:38
efi-bgrt.h
644
B
-rw-r--r--
2024-03-10 20:38
efi.h
45.27
KB
-rw-r--r--
2026-07-01 19:48
efi_embedded_fw.h
1.04
KB
-rw-r--r--
2024-03-10 20:38
efs_vh.h
1.55
KB
-rw-r--r--
2024-03-10 20:38
eisa.h
2.96
KB
-rw-r--r--
2024-03-10 20:38
elf-fdpic.h
2.39
KB
-rw-r--r--
2024-03-10 20:38
elf-randomize.h
583
B
-rw-r--r--
2024-03-10 20:38
elf.h
2.96
KB
-rw-r--r--
2024-03-10 20:38
elfcore-compat.h
1.43
KB
-rw-r--r--
2024-03-10 20:38
elfcore.h
3.93
KB
-rw-r--r--
2024-03-10 20:38
elfnote-lto.h
314
B
-rw-r--r--
2024-03-10 20:38
elfnote.h
3.54
KB
-rw-r--r--
2024-03-10 20:38
enclosure.h
4.02
KB
-rw-r--r--
2024-03-10 20:38
energy_model.h
11.54
KB
-rw-r--r--
2024-03-10 20:38
entry-common.h
18.58
KB
-rw-r--r--
2024-03-10 20:38
entry-kvm.h
2.74
KB
-rw-r--r--
2024-03-10 20:38
err.h
2.94
KB
-rw-r--r--
2026-07-01 19:48
errname.h
283
B
-rw-r--r--
2024-03-10 20:38
errno.h
1.45
KB
-rw-r--r--
2024-03-10 20:38
error-injection.h
630
B
-rw-r--r--
2024-03-10 20:38
errqueue.h
524
B
-rw-r--r--
2024-03-10 20:38
errseq.h
382
B
-rw-r--r--
2024-03-10 20:38
etherdevice.h
19.27
KB
-rw-r--r--
2026-07-01 19:48
ethtool.h
43.95
KB
-rw-r--r--
2026-07-01 19:48
ethtool_netlink.h
3.25
KB
-rw-r--r--
2024-03-10 20:38
eventfd.h
2.1
KB
-rw-r--r--
2024-03-10 20:38
eventpoll.h
2.41
KB
-rw-r--r--
2026-07-01 19:48
evm.h
4.91
KB
-rw-r--r--
2024-03-10 20:38
export-internal.h
2.3
KB
-rw-r--r--
2024-03-10 20:38
export.h
2.21
KB
-rw-r--r--
2026-07-01 19:48
exportfs.h
10.21
KB
-rw-r--r--
2024-03-10 20:38
ext2_fs.h
967
B
-rw-r--r--
2024-03-10 20:38
extable.h
1.28
KB
-rw-r--r--
2024-03-10 20:38
extcon-provider.h
3.83
KB
-rw-r--r--
2024-03-10 20:38
extcon.h
9.99
KB
-rw-r--r--
2024-03-10 20:38
f2fs_fs.h
20.13
KB
-rw-r--r--
2026-07-01 19:48
f75375s.h
541
B
-rw-r--r--
2024-03-10 20:38
falloc.h
1.79
KB
-rw-r--r--
2026-07-01 19:48
fanotify.h
4.67
KB
-rw-r--r--
2026-07-01 19:48
fault-inject-usercopy.h
496
B
-rw-r--r--
2024-03-10 20:38
fault-inject.h
2.76
KB
-rw-r--r--
2024-03-10 20:38
fb.h
29.42
KB
-rw-r--r--
2026-07-01 19:48
fbcon.h
2.2
KB
-rw-r--r--
2026-07-01 19:48
fcdevice.h
774
B
-rw-r--r--
2024-03-10 20:38
fcntl.h
1.66
KB
-rw-r--r--
2024-03-10 20:38
fd.h
490
B
-rw-r--r--
2024-03-10 20:38
fddidevice.h
833
B
-rw-r--r--
2024-03-10 20:38
fdtable.h
3.46
KB
-rw-r--r--
2026-07-01 19:48
fec.h
463
B
-rw-r--r--
2024-03-10 20:38
fiemap.h
713
B
-rw-r--r--
2024-03-10 20:38
file.h
3.19
KB
-rw-r--r--
2026-07-01 19:48
fileattr.h
1.9
KB
-rw-r--r--
2024-03-10 20:38
filelock.h
11.44
KB
-rw-r--r--
2024-03-10 20:38
filter.h
45.03
KB
-rw-r--r--
2026-07-01 19:48
find.h
19.62
KB
-rw-r--r--
2024-03-10 20:38
fips.h
303
B
-rw-r--r--
2024-03-10 20:38
firewire.h
16.41
KB
-rw-r--r--
2024-03-10 20:38
firmware-map.h
959
B
-rw-r--r--
2024-03-10 20:38
firmware.h
5.81
KB
-rw-r--r--
2024-03-10 20:38
fixp-arith.h
4.21
KB
-rw-r--r--
2024-03-10 20:38
flat.h
2.57
KB
-rw-r--r--
2024-03-10 20:38
flex_proportions.h
2.83
KB
-rw-r--r--
2024-03-10 20:38
font.h
1.67
KB
-rw-r--r--
2024-03-10 20:38
fortify-string.h
26.73
KB
-rw-r--r--
2026-07-01 19:48
fprobe.h
3.15
KB
-rw-r--r--
2024-03-10 20:38
freezer.h
2.34
KB
-rw-r--r--
2024-03-10 20:38
fs.h
117.06
KB
-rw-r--r--
2026-07-01 19:48
fs_api.h
22
B
-rw-r--r--
2024-03-10 20:38
fs_context.h
8.18
KB
-rw-r--r--
2026-07-01 19:48
fs_parser.h
4.67
KB
-rw-r--r--
2026-07-01 19:48
fs_pin.h
539
B
-rw-r--r--
2024-03-10 20:38
fs_stack.h
895
B
-rw-r--r--
2024-03-10 20:38
fs_struct.h
1.04
KB
-rw-r--r--
2024-03-10 20:38
fs_types.h
2.02
KB
-rw-r--r--
2024-03-10 20:38
fscache-cache.h
7.09
KB
-rw-r--r--
2026-07-01 19:48
fscache.h
23.85
KB
-rw-r--r--
2024-03-10 20:38
fscrypt.h
32.98
KB
-rw-r--r--
2024-03-10 20:38
fsi-occ.h
715
B
-rw-r--r--
2024-03-10 20:38
fsi-sbefifo.h
629
B
-rw-r--r--
2024-03-10 20:38
fsi.h
2.26
KB
-rw-r--r--
2024-03-10 20:38
fsl-diu-fb.h
3.87
KB
-rw-r--r--
2024-03-10 20:38
fsl_devices.h
4.16
KB
-rw-r--r--
2024-03-10 20:38
fsl_hypervisor.h
2.76
KB
-rw-r--r--
2024-03-10 20:38
fsl_ifc.h
24.48
KB
-rw-r--r--
2024-03-10 20:38
fsldma.h
202
B
-rw-r--r--
2024-03-10 20:38
fsnotify.h
10.93
KB
-rw-r--r--
2026-07-01 19:48
fsnotify_backend.h
29.13
KB
-rw-r--r--
2026-07-01 19:48
fsverity.h
9.29
KB
-rw-r--r--
2024-03-10 20:38
ftrace.h
38.74
KB
-rw-r--r--
2026-07-01 19:48
ftrace_irq.h
884
B
-rw-r--r--
2024-03-10 20:38
futex.h
2.44
KB
-rw-r--r--
2024-03-10 20:38
fw_table.h
1.69
KB
-rw-r--r--
2024-03-10 20:38
fwnode.h
8.12
KB
-rw-r--r--
2026-07-01 19:48
fwnode_mdio.h
858
B
-rw-r--r--
2024-03-10 20:38
gameport.h
5.24
KB
-rw-r--r--
2024-03-10 20:38
gcd.h
193
B
-rw-r--r--
2024-03-10 20:38
genalloc.h
7.73
KB
-rw-r--r--
2026-07-01 19:48
generic-radix-tree.h
8.33
KB
-rw-r--r--
2024-03-10 20:38
genetlink.h
589
B
-rw-r--r--
2024-03-10 20:38
genl_magic_func.h
11.67
KB
-rw-r--r--
2024-03-10 20:38
genl_magic_struct.h
7.58
KB
-rw-r--r--
2024-03-10 20:38
getcpu.h
641
B
-rw-r--r--
2024-03-10 20:38
gfp.h
12.06
KB
-rw-r--r--
2026-07-01 19:48
gfp_api.h
23
B
-rw-r--r--
2024-03-10 20:38
gfp_types.h
14.98
KB
-rw-r--r--
2026-07-01 19:48
glob.h
256
B
-rw-r--r--
2024-03-10 20:38
gnss.h
1.56
KB
-rw-r--r--
2024-03-10 20:38
goldfish.h
878
B
-rw-r--r--
2024-03-10 20:38
gpio-pxa.h
571
B
-rw-r--r--
2024-03-10 20:38
gpio.h
5.44
KB
-rw-r--r--
2024-03-10 20:38
gpio_keys.h
1.81
KB
-rw-r--r--
2024-03-10 20:38
greybus.h
4.14
KB
-rw-r--r--
2024-03-10 20:38
group_cpus.h
310
B
-rw-r--r--
2024-03-10 20:38
hardirq.h
3.25
KB
-rw-r--r--
2024-03-10 20:38
hash.h
2.93
KB
-rw-r--r--
2024-03-10 20:38
hashtable.h
6.67
KB
-rw-r--r--
2024-03-10 20:38
hashtable_api.h
29
B
-rw-r--r--
2024-03-10 20:38
hdlc.h
3.19
KB
-rw-r--r--
2024-03-10 20:38
hdlcdrv.h
6.32
KB
-rw-r--r--
2024-03-10 20:38
hdmi.h
12.55
KB
-rw-r--r--
2024-03-10 20:38
hex.h
884
B
-rw-r--r--
2024-03-10 20:38
hid-debug.h
1.42
KB
-rw-r--r--
2024-03-10 20:38
hid-roccat.h
490
B
-rw-r--r--
2024-03-10 20:38
hid-sensor-hub.h
8.97
KB
-rw-r--r--
2024-03-10 20:38
hid-sensor-ids.h
7.49
KB
-rw-r--r--
2024-03-10 20:38
hid.h
38.89
KB
-rw-r--r--
2026-07-01 19:48
hid_bpf.h
5.24
KB
-rw-r--r--
2024-03-10 20:38
hidden.h
966
B
-rw-r--r--
2024-03-10 20:38
hiddev.h
1.42
KB
-rw-r--r--
2024-03-10 20:38
hidraw.h
1.12
KB
-rw-r--r--
2024-03-10 20:38
highmem-internal.h
6.74
KB
-rw-r--r--
2024-03-10 20:38
highmem.h
18.04
KB
-rw-r--r--
2026-07-01 19:48
highuid.h
3.12
KB
-rw-r--r--
2024-03-10 20:38
hil.h
18.42
KB
-rw-r--r--
2024-03-10 20:38
hil_mlc.h
5.13
KB
-rw-r--r--
2024-03-10 20:38
hippidevice.h
1.08
KB
-rw-r--r--
2024-03-10 20:38
hisi_acc_qm.h
14.04
KB
-rw-r--r--
2026-07-01 19:48
hmm.h
3.93
KB
-rw-r--r--
2024-03-10 20:38
host1x.h
13.49
KB
-rw-r--r--
2024-03-10 20:38
host1x_context_bus.h
331
B
-rw-r--r--
2024-03-10 20:38
hp_sdc.h
14.01
KB
-rw-r--r--
2024-03-10 20:38
hpet.h
2.55
KB
-rw-r--r--
2024-03-10 20:38
hrtimer.h
14.87
KB
-rw-r--r--
2026-07-01 19:48
hrtimer_api.h
27
B
-rw-r--r--
2024-03-10 20:38
hrtimer_defs.h
660
B
-rw-r--r--
2024-03-10 20:38
hrtimer_types.h
1.53
KB
-rw-r--r--
2024-03-10 20:38
hte.h
7.37
KB
-rw-r--r--
2024-03-10 20:38
huge_mm.h
16.06
KB
-rw-r--r--
2026-07-01 19:48
hugetlb.h
35.76
KB
-rw-r--r--
2026-07-01 19:48
hugetlb_cgroup.h
6.78
KB
-rw-r--r--
2024-03-10 20:38
hugetlb_inline.h
374
B
-rw-r--r--
2024-03-10 20:38
hw_breakpoint.h
4.19
KB
-rw-r--r--
2024-03-10 20:38
hw_random.h
2.25
KB
-rw-r--r--
2024-03-10 20:38
hwmon-sysfs.h
2.8
KB
-rw-r--r--
2024-03-10 20:38
hwmon-vid.h
862
B
-rw-r--r--
2024-03-10 20:38
hwmon.h
15.58
KB
-rw-r--r--
2024-03-10 20:38
hwspinlock.h
15.79
KB
-rw-r--r--
2026-07-01 19:48
hyperv.h
49.49
KB
-rw-r--r--
2026-07-01 19:48
hypervisor.h
799
B
-rw-r--r--
2026-07-01 19:48
i2c-algo-bit.h
1.4
KB
-rw-r--r--
2024-03-10 20:38
i2c-algo-pca.h
2.89
KB
-rw-r--r--
2024-03-10 20:38
i2c-algo-pcf.h
1.21
KB
-rw-r--r--
2024-03-10 20:38
i2c-atr.h
3.95
KB
-rw-r--r--
2024-03-10 20:38
i2c-dev.h
371
B
-rw-r--r--
2024-03-10 20:38
i2c-mux.h
1.63
KB
-rw-r--r--
2024-03-10 20:38
i2c-smbus.h
1.52
KB
-rw-r--r--
2024-03-10 20:38
i2c.h
39.03
KB
-rw-r--r--
2026-07-01 19:48
i8042.h
2.02
KB
-rw-r--r--
2024-03-10 20:38
i8253.h
808
B
-rw-r--r--
2026-07-01 19:48
i8254.h
489
B
-rw-r--r--
2024-03-10 20:38
icmp.h
1
KB
-rw-r--r--
2024-03-10 20:38
icmpv6.h
2.87
KB
-rw-r--r--
2024-03-10 20:38
idle_inject.h
1.02
KB
-rw-r--r--
2024-03-10 20:38
idr.h
9.72
KB
-rw-r--r--
2024-03-10 20:38
ieee80211.h
168.2
KB
-rw-r--r--
2026-07-01 19:48
ieee802154.h
14.46
KB
-rw-r--r--
2024-03-10 20:38
if_arp.h
1.81
KB
-rw-r--r--
2024-03-10 20:38
if_bridge.h
5.42
KB
-rw-r--r--
2026-07-01 19:48
if_eql.h
1.13
KB
-rw-r--r--
2024-03-10 20:38
if_ether.h
1.3
KB
-rw-r--r--
2026-07-01 19:48
if_fddi.h
3.24
KB
-rw-r--r--
2024-03-10 20:38
if_hsr.h
1.07
KB
-rw-r--r--
2024-03-10 20:38
if_link.h
592
B
-rw-r--r--
2024-03-10 20:38
if_ltalk.h
188
B
-rw-r--r--
2024-03-10 20:38
if_macvlan.h
2.76
KB
-rw-r--r--
2024-03-10 20:38
if_phonet.h
319
B
-rw-r--r--
2024-03-10 20:38
if_pppol2tp.h
501
B
-rw-r--r--
2024-03-10 20:38
if_pppox.h
2.83
KB
-rw-r--r--
2024-03-10 20:38
if_rmnet.h
2.06
KB
-rw-r--r--
2024-03-10 20:38
if_tap.h
2.21
KB
-rw-r--r--
2024-03-10 20:38
if_team.h
7.94
KB
-rw-r--r--
2024-03-10 20:38
if_tun.h
1.55
KB
-rw-r--r--
2024-03-10 20:38
if_tunnel.h
409
B
-rw-r--r--
2024-03-10 20:38
if_vlan.h
21.92
KB
-rw-r--r--
2026-07-01 19:48
igmp.h
4.36
KB
-rw-r--r--
2024-03-10 20:38
ihex.h
2.15
KB
-rw-r--r--
2024-03-10 20:38
ima.h
6.67
KB
-rw-r--r--
2026-07-01 19:48
imx-media.h
605
B
-rw-r--r--
2024-03-10 20:38
in.h
2.29
KB
-rw-r--r--
2024-03-10 20:38
in6.h
1.63
KB
-rw-r--r--
2024-03-10 20:38
indirect_call_wrapper.h
2.38
KB
-rw-r--r--
2026-07-01 19:48
inet.h
2.64
KB
-rw-r--r--
2024-03-10 20:38
inet_diag.h
2.74
KB
-rw-r--r--
2024-03-10 20:38
inetdevice.h
9.02
KB
-rw-r--r--
2026-07-01 19:48
init.h
12.28
KB
-rw-r--r--
2026-07-01 19:48
init_ohci1394_dma.h
196
B
-rw-r--r--
2024-03-10 20:38
init_syscalls.h
1.01
KB
-rw-r--r--
2024-03-10 20:38
init_task.h
1.1
KB
-rw-r--r--
2024-03-10 20:38
initrd.h
1008
B
-rw-r--r--
2024-03-10 20:38
inotify.h
628
B
-rw-r--r--
2024-03-10 20:38
input.h
20.03
KB
-rw-r--r--
2024-03-10 20:38
instruction_pointer.h
346
B
-rw-r--r--
2024-03-10 20:38
instrumentation.h
1.96
KB
-rw-r--r--
2024-03-10 20:38
instrumented.h
5.15
KB
-rw-r--r--
2024-03-10 20:38
int_log.h
1.26
KB
-rw-r--r--
2024-03-10 20:38
integrity.h
1.15
KB
-rw-r--r--
2024-03-10 20:38
intel-ish-client-if.h
4.29
KB
-rw-r--r--
2026-07-01 19:48
intel_rapl.h
5.01
KB
-rw-r--r--
2026-07-01 19:48
intel_tcc.h
466
B
-rw-r--r--
2026-07-01 19:48
intel_th.h
2.44
KB
-rw-r--r--
2024-03-10 20:38
intel_tpmi.h
1.64
KB
-rw-r--r--
2024-03-10 20:38
interconnect-clk.h
466
B
-rw-r--r--
2024-03-10 20:38
interconnect-provider.h
5.5
KB
-rw-r--r--
2024-03-10 20:38
interconnect.h
3.36
KB
-rw-r--r--
2024-03-10 20:38
interrupt.h
25.4
KB
-rw-r--r--
2026-07-01 19:48
interval_tree.h
2.88
KB
-rw-r--r--
2024-03-10 20:38
interval_tree_generic.h
6.7
KB
-rw-r--r--
2024-03-10 20:38
io-64-nonatomic-hi-lo.h
2.41
KB
-rw-r--r--
2024-03-10 20:38
io-64-nonatomic-lo-hi.h
2.41
KB
-rw-r--r--
2024-03-10 20:38
io-mapping.h
4.69
KB
-rw-r--r--
2024-03-10 20:38
io-pgtable.h
9.58
KB
-rw-r--r--
2024-03-10 20:38
io.h
5.2
KB
-rw-r--r--
2026-07-01 19:48
io_uring.h
1.23
KB
-rw-r--r--
2026-07-01 19:48
io_uring_types.h
17.46
KB
-rw-r--r--
2026-07-01 19:48
ioam6.h
226
B
-rw-r--r--
2024-03-10 20:38
ioam6_genl.h
266
B
-rw-r--r--
2024-03-10 20:38
ioam6_iptunnel.h
285
B
-rw-r--r--
2024-03-10 20:38
iocontext.h
4.16
KB
-rw-r--r--
2024-03-10 20:38
iomap.h
14.46
KB
-rw-r--r--
2026-07-01 19:48
iommu-helper.h
1.12
KB
-rw-r--r--
2024-03-10 20:38
iommu.h
47.63
KB
-rw-r--r--
2026-07-01 19:48
iommufd.h
3.5
KB
-rw-r--r--
2024-03-10 20:38
iopoll.h
7.98
KB
-rw-r--r--
2024-03-10 20:38
ioport.h
13.83
KB
-rw-r--r--
2026-07-01 19:48
ioprio.h
2.17
KB
-rw-r--r--
2026-07-01 19:48
ioremap.h
719
B
-rw-r--r--
2024-03-10 20:38
iosys-map.h
16.73
KB
-rw-r--r--
2026-07-01 19:48
iov_iter.h
7.12
KB
-rw-r--r--
2024-03-10 20:38
iova.h
4.08
KB
-rw-r--r--
2024-03-10 20:38
iova_bitmap.h
1.31
KB
-rw-r--r--
2024-03-10 20:38
ip.h
1.56
KB
-rw-r--r--
2024-03-10 20:38
ipack.h
8.69
KB
-rw-r--r--
2024-03-10 20:38
ipc.h
619
B
-rw-r--r--
2024-03-10 20:38
ipc_namespace.h
5.63
KB
-rw-r--r--
2026-07-01 19:48
ipmi.h
11.09
KB
-rw-r--r--
2024-03-10 20:38
ipmi_smi.h
9.83
KB
-rw-r--r--
2024-03-10 20:38
ipv6.h
8.01
KB
-rw-r--r--
2024-03-10 20:38
ipv6_route.h
372
B
-rw-r--r--
2024-03-10 20:38
irq.h
42.29
KB
-rw-r--r--
2026-07-01 19:48
irq_poll.h
575
B
-rw-r--r--
2024-03-10 20:38
irq_sim.h
789
B
-rw-r--r--
2024-03-10 20:38
irq_work.h
2.04
KB
-rw-r--r--
2024-03-10 20:38
irqbypass.h
3.45
KB
-rw-r--r--
2024-03-10 20:38
irqchip.h
2.65
KB
-rw-r--r--
2024-03-10 20:38
irqdesc.h
7.81
KB
-rw-r--r--
2024-03-10 20:38
irqdomain.h
20.39
KB
-rw-r--r--
2024-03-10 20:38
irqdomain_defs.h
820
B
-rw-r--r--
2024-03-10 20:38
irqflags.h
7.75
KB
-rw-r--r--
2026-07-01 19:48
irqflags_types.h
563
B
-rw-r--r--
2024-03-10 20:38
irqhandler.h
300
B
-rw-r--r--
2024-03-10 20:38
irqnr.h
856
B
-rw-r--r--
2024-03-10 20:38
irqreturn.h
529
B
-rw-r--r--
2024-03-10 20:38
isa-dma.h
276
B
-rw-r--r--
2024-03-10 20:38
isa.h
3.33
KB
-rw-r--r--
2024-03-10 20:38
isapnp.h
2.88
KB
-rw-r--r--
2024-03-10 20:38
iscsi_boot_sysfs.h
3.71
KB
-rw-r--r--
2024-03-10 20:38
iscsi_ibft.h
994
B
-rw-r--r--
2024-03-10 20:38
ism.h
2.2
KB
-rw-r--r--
2026-07-01 19:48
iversion.h
10.96
KB
-rw-r--r--
2024-03-10 20:38
jbd2.h
51.7
KB
-rw-r--r--
2026-07-01 19:48
jhash.h
4.56
KB
-rw-r--r--
2024-03-10 20:38
jiffies.h
19.67
KB
-rw-r--r--
2026-07-01 19:48
journal-head.h
2.91
KB
-rw-r--r--
2024-03-10 20:38
joystick.h
437
B
-rw-r--r--
2024-03-10 20:38
jump_label.h
16.25
KB
-rw-r--r--
2024-03-10 20:38
jump_label_ratelimit.h
2.77
KB
-rw-r--r--
2024-03-10 20:38
jz4740-adc.h
1023
B
-rw-r--r--
2024-03-10 20:38
jz4780-nemc.h
976
B
-rw-r--r--
2024-03-10 20:38
kallsyms.h
4.26
KB
-rw-r--r--
2026-07-01 19:48
kasan-checks.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
kasan-enabled.h
639
B
-rw-r--r--
2024-03-10 20:38
kasan-tags.h
487
B
-rw-r--r--
2024-03-10 20:38
kasan.h
19.22
KB
-rw-r--r--
2026-07-01 19:48
kbd_diacr.h
198
B
-rw-r--r--
2024-03-10 20:38
kbd_kern.h
3.6
KB
-rw-r--r--
2024-03-10 20:38
kbuild.h
380
B
-rw-r--r--
2024-03-10 20:38
kconfig.h
2.63
KB
-rw-r--r--
2024-03-10 20:38
kcore.h
891
B
-rw-r--r--
2024-03-10 20:38
kcov.h
3.16
KB
-rw-r--r--
2026-07-01 19:48
kcsan-checks.h
18.63
KB
-rw-r--r--
2024-03-10 20:38
kcsan.h
2.19
KB
-rw-r--r--
2024-03-10 20:38
kdb.h
7.43
KB
-rw-r--r--
2024-03-10 20:38
kdebug.h
487
B
-rw-r--r--
2024-03-10 20:38
kdev_t.h
1.8
KB
-rw-r--r--
2024-03-10 20:38
kern_levels.h
1.57
KB
-rw-r--r--
2024-03-10 20:38
kernel-page-flags.h
551
B
-rw-r--r--
2024-03-10 20:38
kernel.h
14.07
KB
-rw-r--r--
2024-03-10 20:38
kernel_read_file.h
1.62
KB
-rw-r--r--
2024-03-10 20:38
kernel_stat.h
3.37
KB
-rw-r--r--
2024-03-10 20:38
kernelcapi.h
1.45
KB
-rw-r--r--
2024-03-10 20:38
kernfs.h
19.49
KB
-rw-r--r--
2026-07-01 19:48
kexec.h
14.09
KB
-rw-r--r--
2026-07-01 19:48
key-type.h
6.63
KB
-rw-r--r--
2024-03-10 20:38
key.h
16.05
KB
-rw-r--r--
2024-03-10 20:38
keyboard.h
665
B
-rw-r--r--
2024-03-10 20:38
keyctl.h
1.25
KB
-rw-r--r--
2024-03-10 20:38
kfence.h
8.72
KB
-rw-r--r--
2026-07-01 19:48
kfifo.h
26.18
KB
-rw-r--r--
2024-03-10 20:38
kgdb.h
12.12
KB
-rw-r--r--
2024-03-10 20:38
khugepaged.h
1.77
KB
-rw-r--r--
2024-03-10 20:38
klist.h
1.88
KB
-rw-r--r--
2024-03-10 20:38
kmemleak.h
3.12
KB
-rw-r--r--
2024-03-10 20:38
kmod.h
1.02
KB
-rw-r--r--
2024-03-10 20:38
kmsan-checks.h
2.38
KB
-rw-r--r--
2024-03-10 20:38
kmsan.h
9.24
KB
-rw-r--r--
2024-03-10 20:38
kmsan_string.h
681
B
-rw-r--r--
2024-03-10 20:38
kmsan_types.h
908
B
-rw-r--r--
2024-03-10 20:38
kmsg_dump.h
2.71
KB
-rw-r--r--
2024-03-10 20:38
kobj_map.h
545
B
-rw-r--r--
2024-03-10 20:38
kobject.h
6.95
KB
-rw-r--r--
2024-03-10 20:38
kobject_api.h
27
B
-rw-r--r--
2024-03-10 20:38
kobject_ns.h
1.91
KB
-rw-r--r--
2024-03-10 20:38
kprobes.h
16.45
KB
-rw-r--r--
2026-07-01 19:48
kref.h
3.08
KB
-rw-r--r--
2024-03-10 20:38
kref_api.h
24
B
-rw-r--r--
2024-03-10 20:38
ks0108.h
970
B
-rw-r--r--
2024-03-10 20:38
ks8842.h
632
B
-rw-r--r--
2024-03-10 20:38
ks8851_mll.h
472
B
-rw-r--r--
2024-03-10 20:38
ksm.h
4.31
KB
-rw-r--r--
2026-07-01 19:48
kstrtox.h
6.51
KB
-rw-r--r--
2024-03-10 20:38
kthread.h
7
KB
-rw-r--r--
2024-03-10 20:38
ktime.h
5.33
KB
-rw-r--r--
2024-03-10 20:38
ktime_api.h
25
B
-rw-r--r--
2024-03-10 20:38
kvm_dirty_ring.h
2.68
KB
-rw-r--r--
2024-03-10 20:38
kvm_host.h
73.35
KB
-rw-r--r--
2026-07-01 19:48
kvm_irqfd.h
1.99
KB
-rw-r--r--
2024-03-10 20:38
kvm_para.h
402
B
-rw-r--r--
2024-03-10 20:38
kvm_types.h
2.79
KB
-rw-r--r--
2024-03-10 20:38
l2tp.h
261
B
-rw-r--r--
2024-03-10 20:38
lantiq.h
365
B
-rw-r--r--
2024-03-10 20:38
lapb.h
1.78
KB
-rw-r--r--
2024-03-10 20:38
latencytop.h
1.06
KB
-rw-r--r--
2024-03-10 20:38
lcd.h
3.78
KB
-rw-r--r--
2024-03-10 20:38
lcm.h
275
B
-rw-r--r--
2024-03-10 20:38
led-class-flash.h
6.74
KB
-rw-r--r--
2024-03-10 20:38
led-class-multicolor.h
3.26
KB
-rw-r--r--
2024-03-10 20:38
led-lm3530.h
3.7
KB
-rw-r--r--
2024-03-10 20:38
leds-bd2802.h
476
B
-rw-r--r--
2024-03-10 20:38
leds-lp3944.h
950
B
-rw-r--r--
2024-03-10 20:38
leds-lp3952.h
2.35
KB
-rw-r--r--
2024-03-10 20:38
leds-pca9532.h
866
B
-rw-r--r--
2024-03-10 20:38
leds-regulator.h
1.14
KB
-rw-r--r--
2024-03-10 20:38
leds-ti-lmu-common.h
1.12
KB
-rw-r--r--
2024-03-10 20:38
leds.h
22.56
KB
-rw-r--r--
2026-07-01 19:48
libata.h
68.03
KB
-rw-r--r--
2026-07-01 19:48
libfdt.h
202
B
-rw-r--r--
2024-03-10 20:38
libfdt_env.h
491
B
-rw-r--r--
2024-03-10 20:38
libgcc.h
810
B
-rw-r--r--
2024-03-10 20:38
libnvdimm.h
9.93
KB
-rw-r--r--
2024-03-10 20:38
libps2.h
2.47
KB
-rw-r--r--
2024-03-10 20:38
license.h
418
B
-rw-r--r--
2024-03-10 20:38
limits.h
809
B
-rw-r--r--
2024-03-10 20:38
linear_range.h
2.01
KB
-rw-r--r--
2024-03-10 20:38
linkage.h
9.56
KB
-rw-r--r--
2024-03-10 20:38
linkmode.h
2.5
KB
-rw-r--r--
2024-03-10 20:38
linux_logo.h
1.91
KB
-rw-r--r--
2024-03-10 20:38
lis3lv02d.h
5
KB
-rw-r--r--
2024-03-10 20:38
list.h
35.11
KB
-rw-r--r--
2024-03-10 20:38
list_bl.h
4.79
KB
-rw-r--r--
2024-03-10 20:38
list_lru.h
9.12
KB
-rw-r--r--
2024-03-10 20:38
list_nulls.h
4.22
KB
-rw-r--r--
2024-03-10 20:38
list_sort.h
374
B
-rw-r--r--
2024-03-10 20:38
litex.h
2.06
KB
-rw-r--r--
2024-03-10 20:38
livepatch.h
8.23
KB
-rw-r--r--
2024-03-10 20:38
livepatch_sched.h
802
B
-rw-r--r--
2024-03-10 20:38
llc.h
749
B
-rw-r--r--
2024-03-10 20:38
llist.h
10.43
KB
-rw-r--r--
2024-03-10 20:38
llist_api.h
25
B
-rw-r--r--
2024-03-10 20:38
local_lock.h
1.33
KB
-rw-r--r--
2024-03-10 20:38
local_lock_internal.h
3.42
KB
-rw-r--r--
2024-03-10 20:38
lockdep.h
20.16
KB
-rw-r--r--
2026-07-01 19:48
lockdep_api.h
27
B
-rw-r--r--
2024-03-10 20:38
lockdep_types.h
7.56
KB
-rw-r--r--
2024-03-10 20:38
lockref.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
log2.h
6.23
KB
-rw-r--r--
2024-03-10 20:38
logic_iomem.h
2.07
KB
-rw-r--r--
2024-03-10 20:38
logic_pio.h
3.09
KB
-rw-r--r--
2024-03-10 20:38
lp.h
2.76
KB
-rw-r--r--
2024-03-10 20:38
lru_cache.h
11.66
KB
-rw-r--r--
2024-03-10 20:38
lsm_audit.h
2.87
KB
-rw-r--r--
2024-03-10 20:38
lsm_hook_defs.h
22.43
KB
-rw-r--r--
2026-07-01 19:48
lsm_hooks.h
4.84
KB
-rw-r--r--
2026-07-01 19:48
lwq.h
3.69
KB
-rw-r--r--
2024-03-10 20:38
lz4.h
26.44
KB
-rw-r--r--
2024-03-10 20:38
lzo.h
1.93
KB
-rw-r--r--
2026-07-01 19:48
mISDNdsp.h
1.19
KB
-rw-r--r--
2024-03-10 20:38
mISDNhw.h
5.39
KB
-rw-r--r--
2024-03-10 20:38
mISDNif.h
14.9
KB
-rw-r--r--
2024-03-10 20:38
mailbox_client.h
1.78
KB
-rw-r--r--
2026-07-01 19:48
mailbox_controller.h
5.88
KB
-rw-r--r--
2026-07-01 19:48
map_benchmark.h
1.11
KB
-rw-r--r--
2026-07-01 19:48
maple.h
2.67
KB
-rw-r--r--
2024-03-10 20:38
maple_tree.h
28.19
KB
-rw-r--r--
2026-07-01 19:48
marvell_phy.h
1.74
KB
-rw-r--r--
2024-03-10 20:38
math.h
6.27
KB
-rw-r--r--
2026-07-01 19:48
math64.h
8.28
KB
-rw-r--r--
2024-03-10 20:38
mbcache.h
2.09
KB
-rw-r--r--
2024-03-10 20:38
mbus.h
3.09
KB
-rw-r--r--
2024-03-10 20:38
mc146818rtc.h
4.72
KB
-rw-r--r--
2024-03-10 20:38
mc6821.h
1.18
KB
-rw-r--r--
2024-03-10 20:38
mcb.h
3.67
KB
-rw-r--r--
2024-03-10 20:38
mdev.h
2.36
KB
-rw-r--r--
2024-03-10 20:38
mdio-bitbang.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
mdio-gpio.h
177
B
-rw-r--r--
2024-03-10 20:38
mdio-mux.h
1021
B
-rw-r--r--
2024-03-10 20:38
mdio.h
21.24
KB
-rw-r--r--
2026-07-01 19:48
mei_aux.h
929
B
-rw-r--r--
2024-03-10 20:38
mei_cl_bus.h
4.6
KB
-rw-r--r--
2024-03-10 20:38
mem_encrypt.h
780
B
-rw-r--r--
2024-03-10 20:38
memblock.h
21.04
KB
-rw-r--r--
2024-03-10 20:38
memcontrol.h
47.92
KB
-rw-r--r--
2026-07-01 19:48
memfd.h
717
B
-rw-r--r--
2026-07-01 19:48
memory-tiers.h
3.5
KB
-rw-r--r--
2026-07-01 19:48
memory.h
6.39
KB
-rw-r--r--
2026-07-01 19:48
memory_hotplug.h
11.84
KB
-rw-r--r--
2026-07-01 19:48
mempolicy.h
7.25
KB
-rw-r--r--
2026-07-01 19:48
mempool.h
3.52
KB
-rw-r--r--
2024-03-10 20:38
memregion.h
1.8
KB
-rw-r--r--
2024-03-10 20:38
memremap.h
7.67
KB
-rw-r--r--
2026-07-01 19:48
memstick.h
9.6
KB
-rw-r--r--
2024-03-10 20:38
mhi.h
26.78
KB
-rw-r--r--
2024-03-10 20:38
mhi_ep.h
10.63
KB
-rw-r--r--
2024-03-10 20:38
micrel_phy.h
2.13
KB
-rw-r--r--
2024-03-10 20:38
microchipphy.h
2.65
KB
-rw-r--r--
2024-03-10 20:38
migrate.h
7.81
KB
-rw-r--r--
2026-07-01 19:48
migrate_mode.h
985
B
-rw-r--r--
2024-03-10 20:38
mii.h
15.49
KB
-rw-r--r--
2024-03-10 20:38
mii_timestamper.h
3.66
KB
-rw-r--r--
2024-03-10 20:38
min_heap.h
3.3
KB
-rw-r--r--
2024-03-10 20:38
minmax.h
10.05
KB
-rw-r--r--
2026-07-01 19:48
misc_cgroup.h
2.94
KB
-rw-r--r--
2024-03-10 20:38
miscdevice.h
3.21
KB
-rw-r--r--
2024-03-10 20:38
mm.h
129.25
KB
-rw-r--r--
2026-07-01 19:48
mm_api.h
22
B
-rw-r--r--
2024-03-10 20:38
mm_inline.h
16.7
KB
-rw-r--r--
2024-03-10 20:38
mm_types.h
45.26
KB
-rw-r--r--
2026-07-01 19:48
mm_types_task.h
1.9
KB
-rw-r--r--
2024-03-10 20:38
mman.h
5.48
KB
-rw-r--r--
2026-07-01 19:48
mmap_lock.h
5.04
KB
-rw-r--r--
2026-07-01 19:48
mmdebug.h
3.86
KB
-rw-r--r--
2026-07-01 19:48
mmiotrace.h
3.05
KB
-rw-r--r--
2024-03-10 20:38
mmu_context.h
1.06
KB
-rw-r--r--
2024-03-10 20:38
mmu_notifier.h
23.4
KB
-rw-r--r--
2024-03-10 20:38
mmzone.h
64.68
KB
-rw-r--r--
2026-07-01 19:48
mnt_idmapping.h
6.84
KB
-rw-r--r--
2024-03-10 20:38
mnt_namespace.h
627
B
-rw-r--r--
2024-03-10 20:38
mod_devicetable.h
25.17
KB
-rw-r--r--
2026-07-01 19:48
module.h
27.24
KB
-rw-r--r--
2026-07-01 19:48
module_signature.h
1.22
KB
-rw-r--r--
2024-03-10 20:38
module_symbol.h
409
B
-rw-r--r--
2024-03-10 20:38
moduleloader.h
4.21
KB
-rw-r--r--
2026-07-01 19:48
moduleparam.h
22.4
KB
-rw-r--r--
2026-07-01 19:48
most.h
12.2
KB
-rw-r--r--
2024-03-10 20:38
mount.h
4.29
KB
-rw-r--r--
2026-07-01 19:48
moxtet.h
2.33
KB
-rw-r--r--
2024-03-10 20:38
mpage.h
644
B
-rw-r--r--
2024-03-10 20:38
mpi.h
8.41
KB
-rw-r--r--
2024-03-10 20:38
mpls.h
394
B
-rw-r--r--
2024-03-10 20:38
mpls_iptunnel.h
178
B
-rw-r--r--
2024-03-10 20:38
mroute.h
2.12
KB
-rw-r--r--
2024-03-10 20:38
mroute6.h
2.93
KB
-rw-r--r--
2024-03-10 20:38
mroute_base.h
12.34
KB
-rw-r--r--
2026-07-01 19:48
msdos_fs.h
273
B
-rw-r--r--
2024-03-10 20:38
msdos_partition.h
1.62
KB
-rw-r--r--
2024-03-10 20:38
msg.h
395
B
-rw-r--r--
2024-03-10 20:38
msi.h
22.87
KB
-rw-r--r--
2026-07-01 19:48
msi_api.h
1.96
KB
-rw-r--r--
2024-03-10 20:38
mtio.h
1.29
KB
-rw-r--r--
2024-03-10 20:38
mutex.h
5.71
KB
-rw-r--r--
2026-07-01 19:48
mutex_api.h
25
B
-rw-r--r--
2024-03-10 20:38
mutex_types.h
2.09
KB
-rw-r--r--
2024-03-10 20:38
mv643xx.h
51.05
KB
-rw-r--r--
2024-03-10 20:38
mv643xx_eth.h
2
KB
-rw-r--r--
2024-03-10 20:38
mv643xx_i2c.h
335
B
-rw-r--r--
2024-03-10 20:38
mvebu-pmsu.h
520
B
-rw-r--r--
2024-03-10 20:38
mxm-wmi.h
399
B
-rw-r--r--
2024-03-10 20:38
namei.h
5.56
KB
-rw-r--r--
2024-03-10 20:38
nd.h
6.25
KB
-rw-r--r--
2024-03-10 20:38
ndctl.h
674
B
-rw-r--r--
2024-03-10 20:38
net.h
11.97
KB
-rw-r--r--
2026-07-01 19:48
net_tstamp.h
1.89
KB
-rw-r--r--
2024-03-10 20:38
netdev_features.h
11.56
KB
-rw-r--r--
2026-07-01 19:48
netdevice.h
167.47
KB
-rw-r--r--
2026-07-01 19:48
netfilter.h
14.25
KB
-rw-r--r--
2024-03-10 20:38
netfilter_bridge.h
2.08
KB
-rw-r--r--
2024-03-10 20:38
netfilter_defs.h
242
B
-rw-r--r--
2024-03-10 20:38
netfilter_ipv4.h
1.05
KB
-rw-r--r--
2024-03-10 20:38
netfilter_ipv6.h
5.86
KB
-rw-r--r--
2024-03-10 20:38
netfilter_netdev.h
3.96
KB
-rw-r--r--
2024-03-10 20:38
netfs.h
18.03
KB
-rw-r--r--
2024-03-10 20:38
netlink.h
10.69
KB
-rw-r--r--
2026-07-01 19:48
netpoll.h
2.48
KB
-rw-r--r--
2026-07-01 19:48
nfs.h
1.47
KB
-rw-r--r--
2026-07-01 19:48
nfs3.h
260
B
-rw-r--r--
2024-03-10 20:38
nfs4.h
23.78
KB
-rw-r--r--
2026-07-01 19:48
nfs_common.h
402
B
-rw-r--r--
2026-07-01 19:48
nfs_fs.h
19.97
KB
-rw-r--r--
2026-07-01 19:48
nfs_fs_i.h
308
B
-rw-r--r--
2024-03-10 20:38
nfs_fs_sb.h
11.1
KB
-rw-r--r--
2026-07-01 19:48
nfs_iostat.h
3.92
KB
-rw-r--r--
2024-03-10 20:38
nfs_page.h
8.7
KB
-rw-r--r--
2026-07-01 19:48
nfs_ssc.h
2.01
KB
-rw-r--r--
2024-03-10 20:38
nfs_xdr.h
42.41
KB
-rw-r--r--
2026-07-01 19:48
nfsacl.h
1.4
KB
-rw-r--r--
2024-03-10 20:38
nitro_enclaves.h
267
B
-rw-r--r--
2024-03-10 20:38
nl802154.h
3.87
KB
-rw-r--r--
2024-03-10 20:38
nls.h
3.09
KB
-rw-r--r--
2024-03-10 20:38
nmi.h
7.48
KB
-rw-r--r--
2026-07-01 19:48
node.h
4.7
KB
-rw-r--r--
2026-07-01 19:48
nodemask.h
17.51
KB
-rw-r--r--
2024-03-10 20:38
nodemask_types.h
263
B
-rw-r--r--
2024-03-10 20:38
nospec.h
2.24
KB
-rw-r--r--
2024-03-10 20:38
notifier.h
8.24
KB
-rw-r--r--
2024-03-10 20:38
ns_common.h
283
B
-rw-r--r--
2024-03-10 20:38
nsc_gpio.h
1.42
KB
-rw-r--r--
2024-03-10 20:38
nsproxy.h
3.15
KB
-rw-r--r--
2024-03-10 20:38
ntb.h
52.43
KB
-rw-r--r--
2024-03-10 20:38
ntb_transport.h
3.8
KB
-rw-r--r--
2024-03-10 20:38
nubus.h
5.54
KB
-rw-r--r--
2024-03-10 20:38
numa.h
1.38
KB
-rw-r--r--
2026-07-01 19:48
nvme-auth.h
1.44
KB
-rw-r--r--
2024-03-10 20:38
nvme-fc-driver.h
46.6
KB
-rw-r--r--
2024-03-10 20:38
nvme-fc.h
9.72
KB
-rw-r--r--
2024-03-10 20:38
nvme-keyring.h
732
B
-rw-r--r--
2026-07-01 19:48
nvme-rdma.h
2.07
KB
-rw-r--r--
2024-03-10 20:38
nvme-tcp.h
4.67
KB
-rw-r--r--
2026-07-01 19:48
nvme.h
45.98
KB
-rw-r--r--
2026-07-01 19:48
nvmem-consumer.h
6.87
KB
-rw-r--r--
2024-03-10 20:38
nvmem-provider.h
7.86
KB
-rw-r--r--
2024-03-10 20:38
nvram.h
3.47
KB
-rw-r--r--
2024-03-10 20:38
objagg.h
1.94
KB
-rw-r--r--
2026-07-01 19:48
objpool.h
6.91
KB
-rw-r--r--
2024-03-10 20:38
objtool.h
4.88
KB
-rw-r--r--
2024-03-10 20:38
objtool_types.h
1.8
KB
-rw-r--r--
2024-03-10 20:38
of.h
49.31
KB
-rw-r--r--
2026-07-01 19:48
of_address.h
5.46
KB
-rw-r--r--
2024-03-10 20:38
of_clk.h
819
B
-rw-r--r--
2024-03-10 20:38
of_device.h
2.23
KB
-rw-r--r--
2024-03-10 20:38
of_dma.h
2.3
KB
-rw-r--r--
2024-03-10 20:38
of_fdt.h
3.48
KB
-rw-r--r--
2026-07-01 19:48
of_gpio.h
878
B
-rw-r--r--
2024-03-10 20:38
of_graph.h
3.55
KB
-rw-r--r--
2024-03-10 20:38
of_iommu.h
671
B
-rw-r--r--
2024-03-10 20:38
of_irq.h
3.82
KB
-rw-r--r--
2024-03-10 20:38
of_mdio.h
3.91
KB
-rw-r--r--
2024-03-10 20:38
of_net.h
1.15
KB
-rw-r--r--
2024-03-10 20:38
of_pci.h
915
B
-rw-r--r--
2024-03-10 20:38
of_pdt.h
1.14
KB
-rw-r--r--
2024-03-10 20:38
of_platform.h
4.14
KB
-rw-r--r--
2024-03-10 20:38
of_reserved_mem.h
2.24
KB
-rw-r--r--
2024-03-10 20:38
oid_registry.h
5.99
KB
-rw-r--r--
2026-07-01 19:48
olpc-ec.h
2
KB
-rw-r--r--
2024-03-10 20:38
omap-dma.h
9.54
KB
-rw-r--r--
2024-03-10 20:38
omap-gpmc.h
2.64
KB
-rw-r--r--
2024-03-10 20:38
omap-iommu.h
880
B
-rw-r--r--
2024-03-10 20:38
omap-mailbox.h
689
B
-rw-r--r--
2024-03-10 20:38
omapfb.h
576
B
-rw-r--r--
2024-03-10 20:38
once.h
2.66
KB
-rw-r--r--
2026-07-01 19:48
once_lite.h
926
B
-rw-r--r--
2026-07-01 19:48
oom.h
2.85
KB
-rw-r--r--
2024-03-10 20:38
openvswitch.h
403
B
-rw-r--r--
2024-03-10 20:38
osq_lock.h
912
B
-rw-r--r--
2024-03-10 20:38
overflow.h
12.82
KB
-rw-r--r--
2026-07-01 19:48
packing.h
1.87
KB
-rw-r--r--
2026-07-01 19:48
padata.h
5.98
KB
-rw-r--r--
2026-07-01 19:48
page-flags-layout.h
3.49
KB
-rw-r--r--
2024-03-10 20:38
page-flags.h
37.74
KB
-rw-r--r--
2026-07-01 19:48
page-isolation.h
1.24
KB
-rw-r--r--
2024-03-10 20:38
page_counter.h
2.41
KB
-rw-r--r--
2024-03-10 20:38
page_ext.h
2.91
KB
-rw-r--r--
2024-03-10 20:38
page_idle.h
2.88
KB
-rw-r--r--
2024-03-10 20:38
page_owner.h
2.32
KB
-rw-r--r--
2024-03-10 20:38
page_ref.h
7.54
KB
-rw-r--r--
2026-07-01 19:48
page_reporting.h
895
B
-rw-r--r--
2024-03-10 20:38
page_table_check.h
3.74
KB
-rw-r--r--
2024-03-10 20:38
pageblock-flags.h
2.67
KB
-rw-r--r--
2026-07-01 19:48
pagemap.h
48.04
KB
-rw-r--r--
2026-07-01 19:48
pagevec.h
2.18
KB
-rw-r--r--
2024-03-10 20:38
pagewalk.h
5.17
KB
-rw-r--r--
2024-03-10 20:38
panic.h
2.67
KB
-rw-r--r--
2024-03-10 20:38
panic_notifier.h
296
B
-rw-r--r--
2024-03-10 20:38
parman.h
2.87
KB
-rw-r--r--
2024-03-10 20:38
parport.h
19.02
KB
-rw-r--r--
2024-03-10 20:38
parport_pc.h
6.62
KB
-rw-r--r--
2024-03-10 20:38
parser.h
1.17
KB
-rw-r--r--
2024-03-10 20:38
part_stat.h
2.38
KB
-rw-r--r--
2024-03-10 20:38
pata_arasan_cf_data.h
1.22
KB
-rw-r--r--
2024-03-10 20:38
patchkey.h
757
B
-rw-r--r--
2024-03-10 20:38
path.h
854
B
-rw-r--r--
2026-07-01 19:48
pch_dma.h
408
B
-rw-r--r--
2024-03-10 20:38
pci-acpi.h
4.18
KB
-rw-r--r--
2024-03-10 20:38
pci-ats.h
1.88
KB
-rw-r--r--
2026-07-01 19:48
pci-doe.h
576
B
-rw-r--r--
2024-03-10 20:38
pci-ecam.h
3.28
KB
-rw-r--r--
2024-03-10 20:38
pci-ep-cfs.h
956
B
-rw-r--r--
2024-03-10 20:38
pci-epc.h
10.83
KB
-rw-r--r--
2026-07-01 19:48
pci-epf.h
7.5
KB
-rw-r--r--
2024-03-10 20:38
pci-p2pdma.h
3.01
KB
-rw-r--r--
2024-03-10 20:38
pci.h
99.25
KB
-rw-r--r--
2026-07-01 19:48
pci_hotplug.h
4.35
KB
-rw-r--r--
2024-03-10 20:38
pci_ids.h
125.49
KB
-rw-r--r--
2026-07-01 19:48
pcs-lynx.h
442
B
-rw-r--r--
2024-03-10 20:38
pcs-rzn1-miic.h
385
B
-rw-r--r--
2024-03-10 20:38
pe.h
16.73
KB
-rw-r--r--
2024-03-10 20:38
peci-cpu.h
1.5
KB
-rw-r--r--
2024-03-10 20:38
peci.h
3.17
KB
-rw-r--r--
2024-03-10 20:38
percpu-defs.h
17.22
KB
-rw-r--r--
2024-03-10 20:38
percpu-refcount.h
11.22
KB
-rw-r--r--
2024-03-10 20:38
percpu-rwsem.h
4.33
KB
-rw-r--r--
2024-03-10 20:38
percpu.h
4.72
KB
-rw-r--r--
2024-03-10 20:38
percpu_counter.h
6.81
KB
-rw-r--r--
2024-03-10 20:38
perf_event.h
55.52
KB
-rw-r--r--
2026-07-01 19:48
perf_event_api.h
30
B
-rw-r--r--
2024-03-10 20:38
perf_regs.h
1.05
KB
-rw-r--r--
2024-03-10 20:38
personality.h
393
B
-rw-r--r--
2024-03-10 20:38
pfn.h
666
B
-rw-r--r--
2024-03-10 20:38
pfn_t.h
3.21
KB
-rw-r--r--
2024-03-10 20:38
pgalloc.h
948
B
-rw-r--r--
2026-07-01 19:48
pgtable.h
46.17
KB
-rw-r--r--
2026-07-01 19:48
pgtable_api.h
27
B
-rw-r--r--
2024-03-10 20:38
phonet.h
537
B
-rw-r--r--
2024-03-10 20:38
phy.h
71.52
KB
-rw-r--r--
2026-07-01 19:48
phy_fixed.h
1.82
KB
-rw-r--r--
2024-03-10 20:38
phy_led_triggers.h
1.01
KB
-rw-r--r--
2024-03-10 20:38
phylib_stubs.h
1.5
KB
-rw-r--r--
2024-03-10 20:38
phylink.h
24.63
KB
-rw-r--r--
2024-03-10 20:38
pid.h
9.38
KB
-rw-r--r--
2024-03-10 20:38
pid_namespace.h
3.07
KB
-rw-r--r--
2024-03-10 20:38
pid_types.h
282
B
-rw-r--r--
2024-03-10 20:38
pim.h
2.67
KB
-rw-r--r--
2024-03-10 20:38
pipe_fs_i.h
9.06
KB
-rw-r--r--
2024-03-10 20:38
pkeys.h
990
B
-rw-r--r--
2024-03-10 20:38
pktcdvd.h
5.72
KB
-rw-r--r--
2024-03-10 20:38
pl320-ipc.h
209
B
-rw-r--r--
2024-03-10 20:38
platform_device.h
13.42
KB
-rw-r--r--
2026-07-01 19:48
platform_profile.h
1.16
KB
-rw-r--r--
2026-07-01 19:48
pldmfw.h
4.76
KB
-rw-r--r--
2024-03-10 20:38
plist.h
8.58
KB
-rw-r--r--
2024-03-10 20:38
plist_types.h
315
B
-rw-r--r--
2024-03-10 20:38
pm-trace.h
940
B
-rw-r--r--
2024-03-10 20:38
pm.h
36.78
KB
-rw-r--r--
2024-03-10 20:38
pm_clock.h
2.59
KB
-rw-r--r--
2024-03-10 20:38
pm_domain.h
14.05
KB
-rw-r--r--
2026-07-01 19:48
pm_opp.h
18.38
KB
-rw-r--r--
2024-03-10 20:38
pm_qos.h
10.41
KB
-rw-r--r--
2024-03-10 20:38
pm_runtime.h
20.05
KB
-rw-r--r--
2026-07-01 19:48
pm_wakeirq.h
863
B
-rw-r--r--
2024-03-10 20:38
pm_wakeup.h
7.02
KB
-rw-r--r--
2024-03-10 20:38
pmbus.h
2.48
KB
-rw-r--r--
2024-03-10 20:38
pmu.h
2.45
KB
-rw-r--r--
2024-03-10 20:38
pnp.h
14.86
KB
-rw-r--r--
2026-07-01 19:48
poison.h
2.98
KB
-rw-r--r--
2024-03-10 20:38
poll.h
4.19
KB
-rw-r--r--
2026-07-01 19:48
polynomial.h
814
B
-rw-r--r--
2024-03-10 20:38
posix-clock.h
4.7
KB
-rw-r--r--
2026-07-01 19:48
posix-timers.h
5.35
KB
-rw-r--r--
2024-03-10 20:38
posix-timers_types.h
2.21
KB
-rw-r--r--
2024-03-10 20:38
posix_acl.h
4.28
KB
-rw-r--r--
2024-03-10 20:38
posix_acl_xattr.h
1.95
KB
-rw-r--r--
2024-03-10 20:38
power_supply.h
40.07
KB
-rw-r--r--
2024-03-10 20:38
powercap.h
11.98
KB
-rw-r--r--
2024-03-10 20:38
ppp-comp.h
2.97
KB
-rw-r--r--
2024-03-10 20:38
ppp_channel.h
3.04
KB
-rw-r--r--
2024-03-10 20:38
ppp_defs.h
1.12
KB
-rw-r--r--
2026-07-01 19:48
pps_kernel.h
2.94
KB
-rw-r--r--
2026-07-01 19:48
pr.h
1.33
KB
-rw-r--r--
2024-03-10 20:38
prandom.h
1.28
KB
-rw-r--r--
2024-03-10 20:38
preempt.h
15.75
KB
-rw-r--r--
2026-07-01 19:48
prefetch.h
1.55
KB
-rw-r--r--
2024-03-10 20:38
prime_numbers.h
1.35
KB
-rw-r--r--
2024-03-10 20:38
printk.h
23.3
KB
-rw-r--r--
2026-07-01 19:48
prmt.h
143
B
-rw-r--r--
2024-03-10 20:38
proc_fs.h
9.13
KB
-rw-r--r--
2026-07-01 19:48
proc_ns.h
2.52
KB
-rw-r--r--
2024-03-10 20:38
processor.h
1.84
KB
-rw-r--r--
2024-03-10 20:38
profile.h
1.5
KB
-rw-r--r--
2026-07-01 19:48
projid.h
2.22
KB
-rw-r--r--
2024-03-10 20:38
property.h
19.95
KB
-rw-r--r--
2026-07-01 19:48
pruss_driver.h
4.44
KB
-rw-r--r--
2026-07-01 19:48
psci.h
1.52
KB
-rw-r--r--
2024-03-10 20:38
pseudo_fs.h
362
B
-rw-r--r--
2024-03-10 20:38
psi.h
1.78
KB
-rw-r--r--
2024-03-10 20:38
psi_types.h
4.94
KB
-rw-r--r--
2026-07-01 19:48
psp-platform-access.h
1.83
KB
-rw-r--r--
2024-03-10 20:38
psp-sev.h
18.33
KB
-rw-r--r--
2024-03-10 20:38
psp-tee.h
2.65
KB
-rw-r--r--
2024-03-10 20:38
psp.h
771
B
-rw-r--r--
2026-07-01 19:48
pstore.h
7.76
KB
-rw-r--r--
2024-03-10 20:38
pstore_blk.h
1.53
KB
-rw-r--r--
2024-03-10 20:38
pstore_ram.h
883
B
-rw-r--r--
2024-03-10 20:38
pstore_zone.h
2.28
KB
-rw-r--r--
2024-03-10 20:38
ptdump.h
567
B
-rw-r--r--
2024-03-10 20:38
pti.h
240
B
-rw-r--r--
2024-03-10 20:38
ptp_classify.h
6.88
KB
-rw-r--r--
2024-03-10 20:38
ptp_clock_kernel.h
15.59
KB
-rw-r--r--
2024-03-10 20:38
ptp_kvm.h
486
B
-rw-r--r--
2024-03-10 20:38
ptp_mock.h
670
B
-rw-r--r--
2024-03-10 20:38
ptp_pch.h
666
B
-rw-r--r--
2024-03-10 20:38
ptr_ring.h
16.23
KB
-rw-r--r--
2026-07-01 19:48
ptrace.h
16.79
KB
-rw-r--r--
2024-03-10 20:38
ptrace_api.h
26
B
-rw-r--r--
2024-03-10 20:38
purgatory.h
590
B
-rw-r--r--
2024-03-10 20:38
pvclock_gtod.h
548
B
-rw-r--r--
2024-03-10 20:38
pwm.h
15.65
KB
-rw-r--r--
2026-07-01 19:48
pwm_backlight.h
709
B
-rw-r--r--
2024-03-10 20:38
pxa168_eth.h
728
B
-rw-r--r--
2024-03-10 20:38
pxa2xx_ssp.h
11.13
KB
-rw-r--r--
2024-03-10 20:38
qnx6_fs.h
3.27
KB
-rw-r--r--
2024-03-10 20:38
quota.h
18.76
KB
-rw-r--r--
2026-07-01 19:48
quotaops.h
10.05
KB
-rw-r--r--
2026-07-01 19:48
radix-tree.h
15.95
KB
-rw-r--r--
2024-03-10 20:38
raid_class.h
2.01
KB
-rw-r--r--
2024-03-10 20:38
ramfs.h
746
B
-rw-r--r--
2024-03-10 20:38
random.h
5.14
KB
-rw-r--r--
2024-03-10 20:38
randomize_kstack.h
3.83
KB
-rw-r--r--
2026-07-01 19:48
range.h
743
B
-rw-r--r--
2024-03-10 20:38
ras.h
1.39
KB
-rw-r--r--
2026-07-01 19:48
ratelimit.h
1.72
KB
-rw-r--r--
2024-03-10 20:38
ratelimit_types.h
1.33
KB
-rw-r--r--
2024-03-10 20:38
rational.h
639
B
-rw-r--r--
2024-03-10 20:38
rbtree.h
8.94
KB
-rw-r--r--
2024-03-10 20:38
rbtree_augmented.h
10.18
KB
-rw-r--r--
2024-03-10 20:38
rbtree_latch.h
6.66
KB
-rw-r--r--
2024-03-10 20:38
rbtree_types.h
946
B
-rw-r--r--
2024-03-10 20:38
rcu_node_tree.h
3.73
KB
-rw-r--r--
2024-03-10 20:38
rcu_notifier.h
1.09
KB
-rw-r--r--
2024-03-10 20:38
rcu_segcblist.h
11.72
KB
-rw-r--r--
2024-03-10 20:38
rcu_sync.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
rculist.h
28.56
KB
-rw-r--r--
2024-03-10 20:38
rculist_bl.h
3.29
KB
-rw-r--r--
2024-03-10 20:38
rculist_nulls.h
8.71
KB
-rw-r--r--
2026-07-01 19:48
rcupdate.h
39.69
KB
-rw-r--r--
2026-07-01 19:48
rcupdate_trace.h
3.16
KB
-rw-r--r--
2024-03-10 20:38
rcupdate_wait.h
2.16
KB
-rw-r--r--
2024-03-10 20:38
rcuref.h
4.66
KB
-rw-r--r--
2026-07-01 19:48
rcutiny.h
4.62
KB
-rw-r--r--
2026-07-01 19:48
rcutree.h
4.38
KB
-rw-r--r--
2026-07-01 19:48
rcuwait.h
2.32
KB
-rw-r--r--
2024-03-10 20:38
rcuwait_api.h
27
B
-rw-r--r--
2024-03-10 20:38
reboot-mode.h
600
B
-rw-r--r--
2024-03-10 20:38
reboot.h
4.95
KB
-rw-r--r--
2024-03-10 20:38
reciprocal_div.h
3.28
KB
-rw-r--r--
2024-03-10 20:38
ref_tracker.h
2.35
KB
-rw-r--r--
2024-03-10 20:38
refcount.h
11.78
KB
-rw-r--r--
2024-03-10 20:38
refcount_api.h
28
B
-rw-r--r--
2024-03-10 20:38
refcount_types.h
512
B
-rw-r--r--
2024-03-10 20:38
regmap.h
69.16
KB
-rw-r--r--
2026-07-01 19:48
regset.h
11.35
KB
-rw-r--r--
2024-03-10 20:38
relay.h
8.47
KB
-rw-r--r--
2024-03-10 20:38
remoteproc.h
25.08
KB
-rw-r--r--
2024-03-10 20:38
resctrl.h
8.69
KB
-rw-r--r--
2024-03-10 20:38
reset-controller.h
3.57
KB
-rw-r--r--
2024-03-10 20:38
reset.h
30.96
KB
-rw-r--r--
2026-07-01 19:48
resource.h
223
B
-rw-r--r--
2024-03-10 20:38
resource_ext.h
2.08
KB
-rw-r--r--
2024-03-10 20:38
restart_block.h
1.11
KB
-rw-r--r--
2024-03-10 20:38
resume_user_mode.h
1.88
KB
-rw-r--r--
2024-03-10 20:38
rethook.h
3.15
KB
-rw-r--r--
2024-03-10 20:38
rfkill.h
10.75
KB
-rw-r--r--
2024-03-10 20:38
rhashtable-types.h
3.46
KB
-rw-r--r--
2024-03-10 20:38
rhashtable.h
37.92
KB
-rw-r--r--
2024-03-10 20:38
ring_buffer.h
7.93
KB
-rw-r--r--
2026-07-01 19:48
rio.h
19.02
KB
-rw-r--r--
2024-03-10 20:38
rio_drv.h
14.32
KB
-rw-r--r--
2024-03-10 20:38
rio_ids.h
723
B
-rw-r--r--
2024-03-10 20:38
rio_regs.h
19.07
KB
-rw-r--r--
2024-03-10 20:38
rmap.h
24.05
KB
-rw-r--r--
2024-03-10 20:38
rmi.h
12.04
KB
-rw-r--r--
2024-03-10 20:38
rndis.h
16.86
KB
-rw-r--r--
2024-03-10 20:38
rodata_test.h
394
B
-rw-r--r--
2024-03-10 20:38
root_dev.h
361
B
-rw-r--r--
2024-03-10 20:38
rpmsg.h
9.46
KB
-rw-r--r--
2024-03-10 20:38
rseq.h
3.08
KB
-rw-r--r--
2026-07-01 19:48
rslib.h
3.64
KB
-rw-r--r--
2024-03-10 20:38
rtc.h
9.25
KB
-rw-r--r--
2024-03-10 20:38
rtmutex.h
3.38
KB
-rw-r--r--
2024-03-10 20:38
rtnetlink.h
5.5
KB
-rw-r--r--
2024-03-10 20:38
rtsx_common.h
890
B
-rw-r--r--
2024-03-10 20:38
rtsx_pci.h
40.09
KB
-rw-r--r--
2024-03-10 20:38
rtsx_usb.h
15.38
KB
-rw-r--r--
2024-03-10 20:38
rv.h
1.56
KB
-rw-r--r--
2024-03-10 20:38
rwbase_rt.h
1020
B
-rw-r--r--
2026-07-01 19:48
rwlock.h
4.15
KB
-rw-r--r--
2024-03-10 20:38
rwlock_api_smp.h
7.85
KB
-rw-r--r--
2024-03-10 20:38
rwlock_rt.h
3.29
KB
-rw-r--r--
2024-03-10 20:38
rwlock_types.h
1.77
KB
-rw-r--r--
2024-03-10 20:38
rwsem.h
8.57
KB
-rw-r--r--
2026-07-01 19:48
sbitmap.h
17.81
KB
-rw-r--r--
2026-07-01 19:48
scatterlist.h
21.17
KB
-rw-r--r--
2026-07-01 19:48
scc.h
2.84
KB
-rw-r--r--
2024-03-10 20:38
sched.h
61.03
KB
-rw-r--r--
2026-07-01 19:48
sched_clock.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
scmi_protocol.h
35
KB
-rw-r--r--
2024-03-10 20:38
scpi_protocol.h
2.67
KB
-rw-r--r--
2024-03-10 20:38
screen_info.h
3.35
KB
-rw-r--r--
2026-07-01 19:48
scs.h
2.25
KB
-rw-r--r--
2024-03-10 20:38
sctp.h
23.09
KB
-rw-r--r--
2024-03-10 20:38
scx200.h
1.82
KB
-rw-r--r--
2024-03-10 20:38
scx200_gpio.h
2.38
KB
-rw-r--r--
2024-03-10 20:38
seccomp.h
2.99
KB
-rw-r--r--
2026-07-01 19:48
seccomp_types.h
834
B
-rw-r--r--
2024-03-10 20:38
secretmem.h
706
B
-rw-r--r--
2026-07-01 19:48
securebits.h
239
B
-rw-r--r--
2024-03-10 20:38
security.h
61.1
KB
-rw-r--r--
2026-07-01 19:48
sed-opal-key.h
614
B
-rw-r--r--
2024-03-10 20:38
sed-opal.h
1.92
KB
-rw-r--r--
2024-03-10 20:38
seg6.h
121
B
-rw-r--r--
2024-03-10 20:38
seg6_genl.h
136
B
-rw-r--r--
2024-03-10 20:38
seg6_hmac.h
136
B
-rw-r--r--
2024-03-10 20:38
seg6_iptunnel.h
148
B
-rw-r--r--
2024-03-10 20:38
seg6_local.h
100
B
-rw-r--r--
2024-03-10 20:38
selection.h
1.81
KB
-rw-r--r--
2026-07-01 19:48
sem.h
515
B
-rw-r--r--
2024-03-10 20:38
sem_types.h
234
B
-rw-r--r--
2024-03-10 20:38
semaphore.h
1.58
KB
-rw-r--r--
2024-03-10 20:38
seq_buf.h
4.24
KB
-rw-r--r--
2024-03-10 20:38
seq_file.h
9.99
KB
-rw-r--r--
2024-03-10 20:38
seq_file_net.h
787
B
-rw-r--r--
2024-03-10 20:38
seqlock.h
36.77
KB
-rw-r--r--
2026-07-01 19:48
seqlock_api.h
27
B
-rw-r--r--
2024-03-10 20:38
seqlock_types.h
3.11
KB
-rw-r--r--
2024-03-10 20:38
serdev.h
10.12
KB
-rw-r--r--
2024-03-10 20:38
serial.h
1.03
KB
-rw-r--r--
2024-03-10 20:38
serial_8250.h
7.21
KB
-rw-r--r--
2024-03-10 20:38
serial_bcm63xx.h
4.73
KB
-rw-r--r--
2024-03-10 20:38
serial_core.h
36.91
KB
-rw-r--r--
2026-07-01 19:48
serial_max3100.h
1.19
KB
-rw-r--r--
2024-03-10 20:38
serial_s3c.h
9.32
KB
-rw-r--r--
2024-03-10 20:38
serial_sci.h
1.6
KB
-rw-r--r--
2024-03-10 20:38
serio.h
4.39
KB
-rw-r--r--
2026-07-01 19:48
set_memory.h
1.9
KB
-rw-r--r--
2024-03-10 20:38
sfp.h
16.93
KB
-rw-r--r--
2026-07-01 19:48
sh_clk.h
5.96
KB
-rw-r--r--
2024-03-10 20:38
sh_dma.h
3.47
KB
-rw-r--r--
2024-03-10 20:38
sh_eth.h
369
B
-rw-r--r--
2024-03-10 20:38
sh_intc.h
3.63
KB
-rw-r--r--
2024-03-10 20:38
sh_timer.h
172
B
-rw-r--r--
2024-03-10 20:38
shdma-base.h
4.27
KB
-rw-r--r--
2026-07-01 19:48
shm.h
961
B
-rw-r--r--
2024-03-10 20:38
shmem_fs.h
7.65
KB
-rw-r--r--
2026-07-01 19:48
shrinker.h
4.87
KB
-rw-r--r--
2024-03-10 20:38
signal.h
13.79
KB
-rw-r--r--
2024-03-10 20:38
signal_types.h
1.69
KB
-rw-r--r--
2024-03-10 20:38
signalfd.h
817
B
-rw-r--r--
2024-03-10 20:38
siox.h
2.26
KB
-rw-r--r--
2024-03-10 20:38
siphash.h
5.66
KB
-rw-r--r--
2024-03-10 20:38
sizes.h
1.68
KB
-rw-r--r--
2024-03-10 20:38
skb_array.h
5.22
KB
-rw-r--r--
2026-07-01 19:48
skbuff.h
145.75
KB
-rw-r--r--
2026-07-01 19:48
skmsg.h
15.4
KB
-rw-r--r--
2026-07-01 19:48
slab.h
24.79
KB
-rw-r--r--
2026-07-01 19:48
slimbus.h
6.93
KB
-rw-r--r--
2024-03-10 20:38
sm501-regs.h
11.62
KB
-rw-r--r--
2024-03-10 20:38
sm501.h
4.02
KB
-rw-r--r--
2024-03-10 20:38
smc91x.h
1.57
KB
-rw-r--r--
2024-03-10 20:38
smp.h
7.93
KB
-rw-r--r--
2026-07-01 19:48
smp_types.h
1.35
KB
-rw-r--r--
2024-03-10 20:38
smpboot.h
1.68
KB
-rw-r--r--
2024-03-10 20:38
smsc911x.h
1.63
KB
-rw-r--r--
2024-03-10 20:38
smscphy.h
3.1
KB
-rw-r--r--
2024-03-10 20:38
sock_diag.h
2.42
KB
-rw-r--r--
2026-07-01 19:48
socket.h
15.49
KB
-rw-r--r--
2024-03-10 20:38
sockptr.h
3.8
KB
-rw-r--r--
2026-07-01 19:48
softirq.h
29
B
-rw-r--r--
2024-03-10 20:38
sonet.h
469
B
-rw-r--r--
2024-03-10 20:38
sony-laptop.h
1.41
KB
-rw-r--r--
2024-03-10 20:38
sonypi.h
1.71
KB
-rw-r--r--
2024-03-10 20:38
sort.h
348
B
-rw-r--r--
2024-03-10 20:38
sound.h
685
B
-rw-r--r--
2024-03-10 20:38
soundcard.h
1.59
KB
-rw-r--r--
2024-03-10 20:38
spinlock.h
17.55
KB
-rw-r--r--
2026-07-01 19:48
spinlock_api.h
28
B
-rw-r--r--
2024-03-10 20:38
spinlock_api_smp.h
5.23
KB
-rw-r--r--
2024-03-10 20:38
spinlock_api_up.h
3.38
KB
-rw-r--r--
2024-03-10 20:38
spinlock_rt.h
4.12
KB
-rw-r--r--
2024-03-10 20:38
spinlock_types.h
1.78
KB
-rw-r--r--
2024-03-10 20:38
spinlock_types_raw.h
1.69
KB
-rw-r--r--
2024-03-10 20:38
spinlock_types_up.h
730
B
-rw-r--r--
2024-03-10 20:38
spinlock_up.h
2.08
KB
-rw-r--r--
2026-07-01 19:48
splice.h
3.72
KB
-rw-r--r--
2024-03-10 20:38
spmi.h
5.85
KB
-rw-r--r--
2024-03-10 20:38
sprintf.h
1.24
KB
-rw-r--r--
2026-07-01 19:48
sram.h
437
B
-rw-r--r--
2024-03-10 20:38
srcu.h
11.26
KB
-rw-r--r--
2024-03-10 20:38
srcutiny.h
2.96
KB
-rw-r--r--
2024-03-10 20:38
srcutree.h
7.67
KB
-rw-r--r--
2024-03-10 20:38
ssbi.h
726
B
-rw-r--r--
2024-03-10 20:38
stackdepot.h
8.65
KB
-rw-r--r--
2026-07-01 19:48
stackleak.h
2.36
KB
-rw-r--r--
2024-03-10 20:38
stackprotector.h
859
B
-rw-r--r--
2024-03-10 20:38
stacktrace.h
4
KB
-rw-r--r--
2024-03-10 20:38
start_kernel.h
448
B
-rw-r--r--
2024-03-10 20:38
stat.h
1.69
KB
-rw-r--r--
2024-03-10 20:38
statfs.h
1.78
KB
-rw-r--r--
2024-03-10 20:38
static_call.h
10.66
KB
-rw-r--r--
2026-07-01 19:48
static_call_types.h
2.74
KB
-rw-r--r--
2024-03-10 20:38
static_key.h
30
B
-rw-r--r--
2024-03-10 20:38
stdarg.h
313
B
-rw-r--r--
2024-03-10 20:38
stddef.h
3.17
KB
-rw-r--r--
2024-03-10 20:38
stm.h
4.34
KB
-rw-r--r--
2024-03-10 20:38
stmmac.h
8.35
KB
-rw-r--r--
2026-07-01 19:48
stmp3xxx_rtc_wdt.h
331
B
-rw-r--r--
2024-03-10 20:38
stmp_device.h
412
B
-rw-r--r--
2024-03-10 20:38
stop_machine.h
4.93
KB
-rw-r--r--
2024-03-10 20:38
string.h
12.24
KB
-rw-r--r--
2024-03-10 20:38
string_choices.h
979
B
-rw-r--r--
2026-07-01 19:48
string_helpers.h
3.17
KB
-rw-r--r--
2024-03-10 20:38
stringhash.h
2.65
KB
-rw-r--r--
2024-03-10 20:38
stringify.h
395
B
-rw-r--r--
2024-03-10 20:38
sungem_phy.h
3.96
KB
-rw-r--r--
2024-03-10 20:38
sunserialcore.h
1.08
KB
-rw-r--r--
2024-03-10 20:38
sunxi-rsb.h
2.89
KB
-rw-r--r--
2024-03-10 20:38
surface_acpi_notify.h
1.07
KB
-rw-r--r--
2024-03-10 20:38
suspend.h
21.74
KB
-rw-r--r--
2024-03-10 20:38
svga.h
3.75
KB
-rw-r--r--
2024-03-10 20:38
sw842.h
328
B
-rw-r--r--
2024-03-10 20:38
swab.h
912
B
-rw-r--r--
2024-03-10 20:38
swait.h
9.47
KB
-rw-r--r--
2024-03-10 20:38
swait_api.h
25
B
-rw-r--r--
2024-03-10 20:38
swap.h
21.49
KB
-rw-r--r--
2026-07-01 19:48
swap_cgroup.h
972
B
-rw-r--r--
2024-03-10 20:38
swap_slots.h
842
B
-rw-r--r--
2024-03-10 20:38
swapfile.h
450
B
-rw-r--r--
2024-03-10 20:38
swapops.h
15.55
KB
-rw-r--r--
2026-07-01 19:48
swiotlb.h
8.06
KB
-rw-r--r--
2024-03-10 20:38
switchtec.h
10.92
KB
-rw-r--r--
2024-03-10 20:38
sxgbe_platform.h
1.23
KB
-rw-r--r--
2024-03-10 20:38
sync_core.h
581
B
-rw-r--r--
2024-03-10 20:38
sync_file.h
1.57
KB
-rw-r--r--
2024-03-10 20:38
synclink.h
989
B
-rw-r--r--
2024-03-10 20:38
sys.h
960
B
-rw-r--r--
2024-03-10 20:38
sys_soc.h
1.26
KB
-rw-r--r--
2024-03-10 20:38
syscall_user_dispatch.h
1.31
KB
-rw-r--r--
2024-03-10 20:38
syscall_user_dispatch_types.h
388
B
-rw-r--r--
2024-03-10 20:38
syscalls.h
55.59
KB
-rw-r--r--
2026-07-01 19:48
syscalls_api.h
28
B
-rw-r--r--
2024-03-10 20:38
syscore_ops.h
633
B
-rw-r--r--
2024-03-10 20:38
sysctl.h
9.6
KB
-rw-r--r--
2026-07-01 19:48
sysfb.h
2.76
KB
-rw-r--r--
2026-07-01 19:48
sysfs.h
18.23
KB
-rw-r--r--
2024-03-10 20:38
syslog.h
1.29
KB
-rw-r--r--
2024-03-10 20:38
sysrq.h
1.95
KB
-rw-r--r--
2024-03-10 20:38
sysv_fs.h
9.03
KB
-rw-r--r--
2024-03-10 20:38
t10-pi.h
2.17
KB
-rw-r--r--
2024-03-10 20:38
task_io_accounting.h
1.13
KB
-rw-r--r--
2024-03-10 20:38
task_io_accounting_ops.h
2.55
KB
-rw-r--r--
2024-03-10 20:38
task_work.h
1.1
KB
-rw-r--r--
2026-07-01 19:48
taskstats_kern.h
957
B
-rw-r--r--
2024-03-10 20:38
tboot.h
3.26
KB
-rw-r--r--
2024-03-10 20:38
tc.h
3.45
KB
-rw-r--r--
2024-03-10 20:38
tca6416_keypad.h
683
B
-rw-r--r--
2024-03-10 20:38
tcp.h
20.61
KB
-rw-r--r--
2026-07-01 19:48
tee_drv.h
15.77
KB
-rw-r--r--
2024-03-10 20:38
tegra-icc.h
1.86
KB
-rw-r--r--
2024-03-10 20:38
termios_internal.h
1.48
KB
-rw-r--r--
2024-03-10 20:38
textsearch.h
4.75
KB
-rw-r--r--
2026-07-01 19:48
textsearch_fsm.h
1.19
KB
-rw-r--r--
2024-03-10 20:38
tfrc.h
1.68
KB
-rw-r--r--
2024-03-10 20:38
thermal.h
15.81
KB
-rw-r--r--
2026-07-01 19:48
thread_info.h
7.47
KB
-rw-r--r--
2024-03-10 20:38
threads.h
1.28
KB
-rw-r--r--
2024-03-10 20:38
thunderbolt.h
21.4
KB
-rw-r--r--
2024-03-10 20:38
ti-emif-sram.h
4.75
KB
-rw-r--r--
2024-03-10 20:38
ti_wilink_st.h
13.47
KB
-rw-r--r--
2024-03-10 20:38
tick.h
9.85
KB
-rw-r--r--
2026-07-01 19:48
tifm.h
4.66
KB
-rw-r--r--
2024-03-10 20:38
timb_dma.h
1.17
KB
-rw-r--r--
2024-03-10 20:38
timb_gpio.h
717
B
-rw-r--r--
2024-03-10 20:38
time.h
3.14
KB
-rw-r--r--
2024-03-10 20:38
time32.h
1.75
KB
-rw-r--r--
2024-03-10 20:38
time64.h
4.57
KB
-rw-r--r--
2024-03-10 20:38
time_namespace.h
4.02
KB
-rw-r--r--
2024-03-10 20:38
timecounter.h
4.14
KB
-rw-r--r--
2024-03-10 20:38
timekeeper_internal.h
5.33
KB
-rw-r--r--
2024-03-10 20:38
timekeeping.h
7.67
KB
-rw-r--r--
2024-03-10 20:38
timer.h
7.38
KB
-rw-r--r--
2024-03-10 20:38
timer_types.h
477
B
-rw-r--r--
2024-03-10 20:38
timerfd.h
508
B
-rw-r--r--
2024-03-10 20:38
timeriomem-rng.h
432
B
-rw-r--r--
2024-03-10 20:38
timerqueue.h
1.28
KB
-rw-r--r--
2024-03-10 20:38
timerqueue_types.h
335
B
-rw-r--r--
2024-03-10 20:38
timex.h
6.67
KB
-rw-r--r--
2024-03-10 20:38
tnum.h
4.26
KB
-rw-r--r--
2026-07-01 19:48
topology.h
7.33
KB
-rw-r--r--
2024-03-10 20:38
torture.h
4.9
KB
-rw-r--r--
2024-03-10 20:38
toshiba.h
460
B
-rw-r--r--
2024-03-10 20:38
tpm.h
11.46
KB
-rw-r--r--
2026-07-01 19:48
tpm_command.h
847
B
-rw-r--r--
2024-03-10 20:38
tpm_eventlog.h
6.59
KB
-rw-r--r--
2026-07-01 19:48
trace.h
2.77
KB
-rw-r--r--
2026-07-01 19:48
trace_clock.h
667
B
-rw-r--r--
2024-03-10 20:38
trace_events.h
30.65
KB
-rw-r--r--
2026-07-01 19:48
trace_recursion.h
6.62
KB
-rw-r--r--
2026-07-01 19:48
trace_seq.h
4.52
KB
-rw-r--r--
2026-07-01 19:48
tracefs.h
3.79
KB
-rw-r--r--
2026-07-01 19:48
tracepoint-defs.h
2.36
KB
-rw-r--r--
2024-03-10 20:38
tracepoint.h
18.46
KB
-rw-r--r--
2024-03-10 20:38
transport_class.h
2.58
KB
-rw-r--r--
2024-03-10 20:38
ts-nbus.h
532
B
-rw-r--r--
2024-03-10 20:38
tsacct_kern.h
1.2
KB
-rw-r--r--
2024-03-10 20:38
tsm.h
2.04
KB
-rw-r--r--
2024-03-10 20:38
tty.h
17.65
KB
-rw-r--r--
2024-03-10 20:38
tty_buffer.h
1.29
KB
-rw-r--r--
2024-03-10 20:38
tty_driver.h
22.2
KB
-rw-r--r--
2026-07-01 19:48
tty_flip.h
2.68
KB
-rw-r--r--
2024-03-10 20:38
tty_ldisc.h
10.29
KB
-rw-r--r--
2024-03-10 20:38
tty_port.h
9.69
KB
-rw-r--r--
2026-07-01 19:48
typecheck.h
782
B
-rw-r--r--
2024-03-10 20:38
types.h
6.03
KB
-rw-r--r--
2026-07-01 19:48
u64_stats_sync.h
5.61
KB
-rw-r--r--
2026-07-01 19:48
u64_stats_sync_api.h
34
B
-rw-r--r--
2024-03-10 20:38
uacce.h
4.37
KB
-rw-r--r--
2024-03-10 20:38
uaccess.h
14.36
KB
-rw-r--r--
2026-07-01 19:48
ubsan.h
307
B
-rw-r--r--
2026-07-01 19:48
ucs2_string.h
740
B
-rw-r--r--
2024-03-10 20:38
udp.h
5.55
KB
-rw-r--r--
2026-07-01 19:48
uidgid.h
4.27
KB
-rw-r--r--
2024-03-10 20:38
uidgid_types.h
241
B
-rw-r--r--
2024-03-10 20:38
uio.h
11.2
KB
-rw-r--r--
2024-03-10 20:38
uio_driver.h
4.71
KB
-rw-r--r--
2024-03-10 20:38
umh.h
1.82
KB
-rw-r--r--
2024-03-10 20:38
unicode.h
1.96
KB
-rw-r--r--
2024-03-10 20:38
units.h
2.85
KB
-rw-r--r--
2024-03-10 20:38
uprobes.h
6.09
KB
-rw-r--r--
2026-07-01 19:48
usb.h
78.97
KB
-rw-r--r--
2026-07-01 19:48
usb_usual.h
3.58
KB
-rw-r--r--
2024-03-10 20:38
usbdevice_fs.h
2.18
KB
-rw-r--r--
2024-03-10 20:38
user-return-notifier.h
1.18
KB
-rw-r--r--
2024-03-10 20:38
user.h
22
B
-rw-r--r--
2024-03-10 20:38
user_events.h
1.68
KB
-rw-r--r--
2024-03-10 20:38
user_namespace.h
6.41
KB
-rw-r--r--
2026-07-01 19:48
userfaultfd_k.h
10.9
KB
-rw-r--r--
2026-07-01 19:48
usermode_driver.h
515
B
-rw-r--r--
2024-03-10 20:38
util_macros.h
2.51
KB
-rw-r--r--
2026-07-01 19:48
uts.h
388
B
-rw-r--r--
2024-03-10 20:38
utsname.h
1.8
KB
-rw-r--r--
2024-03-10 20:38
uuid.h
2.49
KB
-rw-r--r--
2024-03-10 20:38
vbox_utils.h
1.75
KB
-rw-r--r--
2024-03-10 20:38
vdpa.h
21.38
KB
-rw-r--r--
2024-03-10 20:38
verification.h
1.93
KB
-rw-r--r--
2024-03-10 20:38
vermagic.h
1.24
KB
-rw-r--r--
2024-03-10 20:38
vexpress.h
297
B
-rw-r--r--
2024-03-10 20:38
vfio.h
13.09
KB
-rw-r--r--
2026-07-01 19:48
vfio_pci_core.h
5.35
KB
-rw-r--r--
2026-07-01 19:48
vfs.h
116
B
-rw-r--r--
2024-03-10 20:38
vga_switcheroo.h
8.62
KB
-rw-r--r--
2024-03-10 20:38
vgaarb.h
2.81
KB
-rw-r--r--
2024-03-10 20:38
vhost_iotlb.h
1.43
KB
-rw-r--r--
2024-03-10 20:38
via-core.h
6.57
KB
-rw-r--r--
2024-03-10 20:38
via.h
932
B
-rw-r--r--
2024-03-10 20:38
via_i2c.h
844
B
-rw-r--r--
2024-03-10 20:38
videodev2.h
2.7
KB
-rw-r--r--
2024-03-10 20:38
virtio.h
8.68
KB
-rw-r--r--
2026-07-01 19:48
virtio_anchor.h
507
B
-rw-r--r--
2024-03-10 20:38
virtio_byteorder.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
virtio_caif.h
513
B
-rw-r--r--
2024-03-10 20:38
virtio_config.h
18.39
KB
-rw-r--r--
2026-07-01 19:48
virtio_dma_buf.h
1.12
KB
-rw-r--r--
2024-03-10 20:38
virtio_net.h
6.53
KB
-rw-r--r--
2026-07-01 19:48
virtio_pci_admin.h
843
B
-rw-r--r--
2024-03-10 20:38
virtio_pci_legacy.h
1.37
KB
-rw-r--r--
2024-03-10 20:38
virtio_pci_modern.h
4.39
KB
-rw-r--r--
2024-03-10 20:38
virtio_ring.h
3.2
KB
-rw-r--r--
2024-03-10 20:38
virtio_vsock.h
8.16
KB
-rw-r--r--
2026-07-01 19:48
vm_event_item.h
3.82
KB
-rw-r--r--
2024-03-10 20:38
vmalloc.h
8.38
KB
-rw-r--r--
2026-07-01 19:48
vmpressure.h
1.68
KB
-rw-r--r--
2024-03-10 20:38
vmstat.h
16.97
KB
-rw-r--r--
2026-07-01 19:48
vmw_vmci_api.h
2.88
KB
-rw-r--r--
2024-03-10 20:38
vmw_vmci_defs.h
30.03
KB
-rw-r--r--
2024-03-10 20:38
vringh.h
9.35
KB
-rw-r--r--
2024-03-10 20:38
vt.h
611
B
-rw-r--r--
2024-03-10 20:38
vt_buffer.h
1.49
KB
-rw-r--r--
2024-03-10 20:38
vt_kern.h
5.28
KB
-rw-r--r--
2024-03-10 20:38
vtime.h
4.6
KB
-rw-r--r--
2024-03-10 20:38
w1.h
8.93
KB
-rw-r--r--
2024-03-10 20:38
wait.h
43.03
KB
-rw-r--r--
2026-07-01 19:48
wait_api.h
24
B
-rw-r--r--
2024-03-10 20:38
wait_bit.h
13.17
KB
-rw-r--r--
2026-07-01 19:48
watch_queue.h
3.83
KB
-rw-r--r--
2024-03-10 20:38
watchdog.h
8.21
KB
-rw-r--r--
2024-03-10 20:38
win_minmax.h
832
B
-rw-r--r--
2024-03-10 20:38
wireless.h
1.57
KB
-rw-r--r--
2024-03-10 20:38
wkup_m3_ipc.h
1.58
KB
-rw-r--r--
2024-03-10 20:38
wm97xx.h
10.44
KB
-rw-r--r--
2024-03-10 20:38
wmi.h
2.75
KB
-rw-r--r--
2024-03-10 20:38
workqueue.h
24.54
KB
-rw-r--r--
2026-07-01 19:48
workqueue_api.h
29
B
-rw-r--r--
2024-03-10 20:38
workqueue_types.h
564
B
-rw-r--r--
2024-03-10 20:38
writeback.h
12.25
KB
-rw-r--r--
2024-03-10 20:38
ww_mutex.h
12.73
KB
-rw-r--r--
2024-03-10 20:38
wwan.h
5.88
KB
-rw-r--r--
2026-07-01 19:48
xarray.h
58
KB
-rw-r--r--
2026-07-01 19:48
xattr.h
4.34
KB
-rw-r--r--
2024-03-10 20:38
xxhash.h
8.27
KB
-rw-r--r--
2024-03-10 20:38
xz.h
16.15
KB
-rw-r--r--
2024-03-10 20:38
yam.h
2.18
KB
-rw-r--r--
2024-03-10 20:38
zconf.h
1.73
KB
-rw-r--r--
2024-03-10 20:38
zlib.h
28.11
KB
-rw-r--r--
2024-03-10 20:38
zorro.h
3.57
KB
-rw-r--r--
2024-03-10 20:38
zpool.h
2.84
KB
-rw-r--r--
2024-03-10 20:38
zsmalloc.h
1.71
KB
-rw-r--r--
2024-03-10 20:38
zstd.h
17.11
KB
-rw-r--r--
2024-03-10 20:38
zstd_errors.h
3.09
KB
-rw-r--r--
2024-03-10 20:38
zstd_lib.h
144.05
KB
-rw-r--r--
2024-03-10 20:38
zswap.h
1.67
KB
-rw-r--r--
2026-07-01 19:48
zutil.h
2.73
KB
-rw-r--r--
2024-03-10 20:38
Save
Rename
/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _LINUX_MM_H #define _LINUX_MM_H #include <linux/errno.h> #include <linux/mmdebug.h> #include <linux/gfp.h> #include <linux/bug.h> #include <linux/list.h> #include <linux/mmzone.h> #include <linux/rbtree.h> #include <linux/atomic.h> #include <linux/debug_locks.h> #include <linux/mm_types.h> #include <linux/mmap_lock.h> #include <linux/range.h> #include <linux/pfn.h> #include <linux/percpu-refcount.h> #include <linux/bit_spinlock.h> #include <linux/shrinker.h> #include <linux/resource.h> #include <linux/page_ext.h> #include <linux/err.h> #include <linux/page-flags.h> #include <linux/page_ref.h> #include <linux/overflow.h> #include <linux/sizes.h> #include <linux/sched.h> #include <linux/pgtable.h> #include <linux/kasan.h> #include <linux/memremap.h> #include <linux/slab.h> struct mempolicy; struct anon_vma; struct anon_vma_chain; struct user_struct; struct pt_regs; extern int sysctl_page_lock_unfairness; void mm_core_init(void); void init_mm_internals(void); #ifndef CONFIG_NUMA /* Don't use mapnrs, do it properly */ extern unsigned long max_mapnr; static inline void set_max_mapnr(unsigned long limit) { max_mapnr = limit; } #else static inline void set_max_mapnr(unsigned long limit) { } #endif extern atomic_long_t _totalram_pages; static inline unsigned long totalram_pages(void) { return (unsigned long)atomic_long_read(&_totalram_pages); } static inline void totalram_pages_inc(void) { atomic_long_inc(&_totalram_pages); } static inline void totalram_pages_dec(void) { atomic_long_dec(&_totalram_pages); } static inline void totalram_pages_add(long count) { atomic_long_add(count, &_totalram_pages); } extern void * high_memory; extern int page_cluster; extern const int page_cluster_max; #ifdef CONFIG_SYSCTL extern int sysctl_legacy_va_layout; #else #define sysctl_legacy_va_layout 0 #endif #ifdef CONFIG_HAVE_ARCH_MMAP_RND_BITS extern const int mmap_rnd_bits_min; extern const int mmap_rnd_bits_max; extern int mmap_rnd_bits __read_mostly; #endif #ifdef CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS extern const int mmap_rnd_compat_bits_min; extern const int mmap_rnd_compat_bits_max; extern int mmap_rnd_compat_bits __read_mostly; #endif #ifndef PHYSMEM_END # define PHYSMEM_END ((1ULL << MAX_PHYSMEM_BITS) - 1) #endif #include <asm/page.h> #include <asm/processor.h> #ifndef __pa_symbol #define __pa_symbol(x) __pa(RELOC_HIDE((unsigned long)(x), 0)) #endif #ifndef page_to_virt #define page_to_virt(x) __va(PFN_PHYS(page_to_pfn(x))) #endif #ifndef lm_alias #define lm_alias(x) __va(__pa_symbol(x)) #endif /* * To prevent common memory management code establishing * a zero page mapping on a read fault. * This macro should be defined within <asm/pgtable.h>. * s390 does this to prevent multiplexing of hardware bits * related to the physical page in case of virtualization. */ #ifndef mm_forbids_zeropage #define mm_forbids_zeropage(X) (0) #endif /* * On some architectures it is expensive to call memset() for small sizes. * If an architecture decides to implement their own version of * mm_zero_struct_page they should wrap the defines below in a #ifndef and * define their own version of this macro in <asm/pgtable.h> */ #if BITS_PER_LONG == 64 /* This function must be updated when the size of struct page grows above 96 * or reduces below 56. The idea that compiler optimizes out switch() * statement, and only leaves move/store instructions. Also the compiler can * combine write statements if they are both assignments and can be reordered, * this can result in several of the writes here being dropped. */ #define mm_zero_struct_page(pp) __mm_zero_struct_page(pp) static inline void __mm_zero_struct_page(struct page *page) { unsigned long *_pp = (void *)page; /* Check that struct page is either 56, 64, 72, 80, 88 or 96 bytes */ BUILD_BUG_ON(sizeof(struct page) & 7); BUILD_BUG_ON(sizeof(struct page) < 56); BUILD_BUG_ON(sizeof(struct page) > 96); switch (sizeof(struct page)) { case 96: _pp[11] = 0; fallthrough; case 88: _pp[10] = 0; fallthrough; case 80: _pp[9] = 0; fallthrough; case 72: _pp[8] = 0; fallthrough; case 64: _pp[7] = 0; fallthrough; case 56: _pp[6] = 0; _pp[5] = 0; _pp[4] = 0; _pp[3] = 0; _pp[2] = 0; _pp[1] = 0; _pp[0] = 0; } } #else #define mm_zero_struct_page(pp) ((void)memset((pp), 0, sizeof(struct page))) #endif /* * Default maximum number of active map areas, this limits the number of vmas * per mm struct. Users can overwrite this number by sysctl but there is a * problem. * * When a program's coredump is generated as ELF format, a section is created * per a vma. In ELF, the number of sections is represented in unsigned short. * This means the number of sections should be smaller than 65535 at coredump. * Because the kernel adds some informative sections to a image of program at * generating coredump, we need some margin. The number of extra sections is * 1-3 now and depends on arch. We use "5" as safe margin, here. * * ELF extended numbering allows more than 65535 sections, so 16-bit bound is * not a hard limit any more. Although some userspace tools can be surprised by * that. */ #define MAPCOUNT_ELF_CORE_MARGIN (5) #define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN) extern int sysctl_max_map_count; extern unsigned long sysctl_user_reserve_kbytes; extern unsigned long sysctl_admin_reserve_kbytes; extern int sysctl_overcommit_memory; extern int sysctl_overcommit_ratio; extern unsigned long sysctl_overcommit_kbytes; int overcommit_ratio_handler(struct ctl_table *, int, void *, size_t *, loff_t *); int overcommit_kbytes_handler(struct ctl_table *, int, void *, size_t *, loff_t *); int overcommit_policy_handler(struct ctl_table *, int, void *, size_t *, loff_t *); #if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) #define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n)) #define folio_page_idx(folio, p) (page_to_pfn(p) - folio_pfn(folio)) #else #define nth_page(page,n) ((page) + (n)) #define folio_page_idx(folio, p) ((p) - &(folio)->page) #endif /* to align the pointer to the (next) page boundary */ #define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE) /* to align the pointer to the (prev) page boundary */ #define PAGE_ALIGN_DOWN(addr) ALIGN_DOWN(addr, PAGE_SIZE) /* test whether an address (unsigned long or pointer) is aligned to PAGE_SIZE */ #define PAGE_ALIGNED(addr) IS_ALIGNED((unsigned long)(addr), PAGE_SIZE) #define lru_to_page(head) (list_entry((head)->prev, struct page, lru)) static inline struct folio *lru_to_folio(struct list_head *head) { return list_entry((head)->prev, struct folio, lru); } void setup_initial_init_mm(void *start_code, void *end_code, void *end_data, void *brk); /* * Linux kernel virtual memory manager primitives. * The idea being to have a "virtual" mm in the same way * we have a virtual fs - giving a cleaner interface to the * mm details, and allowing different kinds of memory mappings * (from shared memory to executable loading to arbitrary * mmap() functions). */ struct vm_area_struct *vm_area_alloc(struct mm_struct *); struct vm_area_struct *vm_area_dup(struct vm_area_struct *); void vm_area_free(struct vm_area_struct *); /* Use only if VMA has no other users */ void __vm_area_free(struct vm_area_struct *vma); #ifndef CONFIG_MMU extern struct rb_root nommu_region_tree; extern struct rw_semaphore nommu_region_sem; extern unsigned int kobjsize(const void *objp); #endif /* * vm_flags in vm_area_struct, see mm_types.h. * When changing, update also include/trace/events/mmflags.h */ #define VM_NONE 0x00000000 #define VM_READ 0x00000001 /* currently active flags */ #define VM_WRITE 0x00000002 #define VM_EXEC 0x00000004 #define VM_SHARED 0x00000008 /* mprotect() hardcodes VM_MAYREAD >> 4 == VM_READ, and so for r/w/x bits. */ #define VM_MAYREAD 0x00000010 /* limits for mprotect() etc */ #define VM_MAYWRITE 0x00000020 #define VM_MAYEXEC 0x00000040 #define VM_MAYSHARE 0x00000080 #define VM_GROWSDOWN 0x00000100 /* general info on the segment */ #ifdef CONFIG_MMU #define VM_UFFD_MISSING 0x00000200 /* missing pages tracking */ #else /* CONFIG_MMU */ #define VM_MAYOVERLAY 0x00000200 /* nommu: R/O MAP_PRIVATE mapping that might overlay a file mapping */ #define VM_UFFD_MISSING 0 #endif /* CONFIG_MMU */ #define VM_PFNMAP 0x00000400 /* Page-ranges managed without "struct page", just pure PFN */ #define VM_UFFD_WP 0x00001000 /* wrprotect pages tracking */ #define VM_LOCKED 0x00002000 #define VM_IO 0x00004000 /* Memory mapped I/O or similar */ /* Used by sys_madvise() */ #define VM_SEQ_READ 0x00008000 /* App will access data sequentially */ #define VM_RAND_READ 0x00010000 /* App will not benefit from clustered reads */ #define VM_DONTCOPY 0x00020000 /* Do not copy this vma on fork */ #define VM_DONTEXPAND 0x00040000 /* Cannot expand with mremap() */ #define VM_LOCKONFAULT 0x00080000 /* Lock the pages covered when they are faulted in */ #define VM_ACCOUNT 0x00100000 /* Is a VM accounted object */ #define VM_NORESERVE 0x00200000 /* should the VM suppress accounting */ #define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */ #define VM_SYNC 0x00800000 /* Synchronous page faults */ #define VM_ARCH_1 0x01000000 /* Architecture-specific flag */ #define VM_WIPEONFORK 0x02000000 /* Wipe VMA contents in child. */ #define VM_DONTDUMP 0x04000000 /* Do not include in the core dump */ #ifdef CONFIG_MEM_SOFT_DIRTY # define VM_SOFTDIRTY 0x08000000 /* Not soft dirty clean area */ #else # define VM_SOFTDIRTY 0 #endif #define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN pages */ #define VM_HUGEPAGE 0x20000000 /* MADV_HUGEPAGE marked this vma */ #define VM_NOHUGEPAGE 0x40000000 /* MADV_NOHUGEPAGE marked this vma */ #define VM_MERGEABLE 0x80000000 /* KSM may merge identical pages */ #ifdef CONFIG_ARCH_USES_HIGH_VMA_FLAGS #define VM_HIGH_ARCH_BIT_0 32 /* bit only usable on 64-bit architectures */ #define VM_HIGH_ARCH_BIT_1 33 /* bit only usable on 64-bit architectures */ #define VM_HIGH_ARCH_BIT_2 34 /* bit only usable on 64-bit architectures */ #define VM_HIGH_ARCH_BIT_3 35 /* bit only usable on 64-bit architectures */ #define VM_HIGH_ARCH_BIT_4 36 /* bit only usable on 64-bit architectures */ #define VM_HIGH_ARCH_BIT_5 37 /* bit only usable on 64-bit architectures */ #define VM_HIGH_ARCH_0 BIT(VM_HIGH_ARCH_BIT_0) #define VM_HIGH_ARCH_1 BIT(VM_HIGH_ARCH_BIT_1) #define VM_HIGH_ARCH_2 BIT(VM_HIGH_ARCH_BIT_2) #define VM_HIGH_ARCH_3 BIT(VM_HIGH_ARCH_BIT_3) #define VM_HIGH_ARCH_4 BIT(VM_HIGH_ARCH_BIT_4) #define VM_HIGH_ARCH_5 BIT(VM_HIGH_ARCH_BIT_5) #endif /* CONFIG_ARCH_USES_HIGH_VMA_FLAGS */ #ifdef CONFIG_ARCH_HAS_PKEYS # define VM_PKEY_SHIFT VM_HIGH_ARCH_BIT_0 # define VM_PKEY_BIT0 VM_HIGH_ARCH_0 /* A protection key is a 4-bit value */ # define VM_PKEY_BIT1 VM_HIGH_ARCH_1 /* on x86 and 5-bit value on ppc64 */ # define VM_PKEY_BIT2 VM_HIGH_ARCH_2 # define VM_PKEY_BIT3 VM_HIGH_ARCH_3 #ifdef CONFIG_PPC # define VM_PKEY_BIT4 VM_HIGH_ARCH_4 #else # define VM_PKEY_BIT4 0 #endif #endif /* CONFIG_ARCH_HAS_PKEYS */ #ifdef CONFIG_X86_USER_SHADOW_STACK /* * VM_SHADOW_STACK should not be set with VM_SHARED because of lack of * support core mm. * * These VMAs will get a single end guard page. This helps userspace protect * itself from attacks. A single page is enough for current shadow stack archs * (x86). See the comments near alloc_shstk() in arch/x86/kernel/shstk.c * for more details on the guard size. */ # define VM_SHADOW_STACK VM_HIGH_ARCH_5 #else # define VM_SHADOW_STACK VM_NONE #endif #if defined(CONFIG_X86) # define VM_PAT VM_ARCH_1 /* PAT reserves whole VMA at once (x86) */ #elif defined(CONFIG_PPC) # define VM_SAO VM_ARCH_1 /* Strong Access Ordering (powerpc) */ #elif defined(CONFIG_PARISC) # define VM_GROWSUP VM_ARCH_1 #elif defined(CONFIG_SPARC64) # define VM_SPARC_ADI VM_ARCH_1 /* Uses ADI tag for access control */ # define VM_ARCH_CLEAR VM_SPARC_ADI #elif defined(CONFIG_ARM64) # define VM_ARM64_BTI VM_ARCH_1 /* BTI guarded page, a.k.a. GP bit */ # define VM_ARCH_CLEAR VM_ARM64_BTI #elif !defined(CONFIG_MMU) # define VM_MAPPED_COPY VM_ARCH_1 /* T if mapped copy of data (nommu mmap) */ #endif #if defined(CONFIG_ARM64_MTE) # define VM_MTE VM_HIGH_ARCH_0 /* Use Tagged memory for access control */ # define VM_MTE_ALLOWED VM_HIGH_ARCH_1 /* Tagged memory permitted */ #else # define VM_MTE VM_NONE # define VM_MTE_ALLOWED VM_NONE #endif #ifndef VM_GROWSUP # define VM_GROWSUP VM_NONE #endif #ifdef CONFIG_HAVE_ARCH_USERFAULTFD_MINOR # define VM_UFFD_MINOR_BIT 38 # define VM_UFFD_MINOR BIT(VM_UFFD_MINOR_BIT) /* UFFD minor faults */ #else /* !CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */ # define VM_UFFD_MINOR VM_NONE #endif /* CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */ /* Bits set in the VMA until the stack is in its final location */ #define VM_STACK_INCOMPLETE_SETUP (VM_RAND_READ | VM_SEQ_READ | VM_STACK_EARLY) #define TASK_EXEC ((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) /* Common data flag combinations */ #define VM_DATA_FLAGS_TSK_EXEC (VM_READ | VM_WRITE | TASK_EXEC | \ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) #define VM_DATA_FLAGS_NON_EXEC (VM_READ | VM_WRITE | VM_MAYREAD | \ VM_MAYWRITE | VM_MAYEXEC) #define VM_DATA_FLAGS_EXEC (VM_READ | VM_WRITE | VM_EXEC | \ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) #ifndef VM_DATA_DEFAULT_FLAGS /* arch can override this */ #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_EXEC #endif #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS #endif #define VM_STARTGAP_FLAGS (VM_GROWSDOWN | VM_SHADOW_STACK) #ifdef CONFIG_STACK_GROWSUP #define VM_STACK VM_GROWSUP #define VM_STACK_EARLY VM_GROWSDOWN #else #define VM_STACK VM_GROWSDOWN #define VM_STACK_EARLY 0 #endif #define VM_STACK_FLAGS (VM_STACK | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT) /* VMA basic access permission flags */ #define VM_ACCESS_FLAGS (VM_READ | VM_WRITE | VM_EXEC) /* * Special vmas that are non-mergable, non-mlock()able. */ #define VM_SPECIAL (VM_IO | VM_DONTEXPAND | VM_PFNMAP | VM_MIXEDMAP) /* This mask prevents VMA from being scanned with khugepaged */ #define VM_NO_KHUGEPAGED (VM_SPECIAL | VM_HUGETLB) /* This mask defines which mm->def_flags a process can inherit its parent */ #define VM_INIT_DEF_MASK VM_NOHUGEPAGE /* This mask represents all the VMA flag bits used by mlock */ #define VM_LOCKED_MASK (VM_LOCKED | VM_LOCKONFAULT) /* Arch-specific flags to clear when updating VM flags on protection change */ #ifndef VM_ARCH_CLEAR # define VM_ARCH_CLEAR VM_NONE #endif #define VM_FLAGS_CLEAR (ARCH_VM_PKEY_FLAGS | VM_ARCH_CLEAR) /* * mapping from the currently active vm_flags protection bits (the * low four bits) to a page protection mask.. */ /* * The default fault flags that should be used by most of the * arch-specific page fault handlers. */ #define FAULT_FLAG_DEFAULT (FAULT_FLAG_ALLOW_RETRY | \ FAULT_FLAG_KILLABLE | \ FAULT_FLAG_INTERRUPTIBLE) /** * fault_flag_allow_retry_first - check ALLOW_RETRY the first time * @flags: Fault flags. * * This is mostly used for places where we want to try to avoid taking * the mmap_lock for too long a time when waiting for another condition * to change, in which case we can try to be polite to release the * mmap_lock in the first round to avoid potential starvation of other * processes that would also want the mmap_lock. * * Return: true if the page fault allows retry and this is the first * attempt of the fault handling; false otherwise. */ static inline bool fault_flag_allow_retry_first(enum fault_flag flags) { return (flags & FAULT_FLAG_ALLOW_RETRY) && (!(flags & FAULT_FLAG_TRIED)); } #define FAULT_FLAG_TRACE \ { FAULT_FLAG_WRITE, "WRITE" }, \ { FAULT_FLAG_MKWRITE, "MKWRITE" }, \ { FAULT_FLAG_ALLOW_RETRY, "ALLOW_RETRY" }, \ { FAULT_FLAG_RETRY_NOWAIT, "RETRY_NOWAIT" }, \ { FAULT_FLAG_KILLABLE, "KILLABLE" }, \ { FAULT_FLAG_TRIED, "TRIED" }, \ { FAULT_FLAG_USER, "USER" }, \ { FAULT_FLAG_REMOTE, "REMOTE" }, \ { FAULT_FLAG_INSTRUCTION, "INSTRUCTION" }, \ { FAULT_FLAG_INTERRUPTIBLE, "INTERRUPTIBLE" }, \ { FAULT_FLAG_VMA_LOCK, "VMA_LOCK" } /* * vm_fault is filled by the pagefault handler and passed to the vma's * ->fault function. The vma's ->fault is responsible for returning a bitmask * of VM_FAULT_xxx flags that give details about how the fault was handled. * * MM layer fills up gfp_mask for page allocations but fault handler might * alter it if its implementation requires a different allocation context. * * pgoff should be used in favour of virtual_address, if possible. */ struct vm_fault { const struct { struct vm_area_struct *vma; /* Target VMA */ gfp_t gfp_mask; /* gfp mask to be used for allocations */ pgoff_t pgoff; /* Logical page offset based on vma */ unsigned long address; /* Faulting virtual address - masked */ unsigned long real_address; /* Faulting virtual address - unmasked */ }; enum fault_flag flags; /* FAULT_FLAG_xxx flags * XXX: should really be 'const' */ pmd_t *pmd; /* Pointer to pmd entry matching * the 'address' */ pud_t *pud; /* Pointer to pud entry matching * the 'address' */ union { pte_t orig_pte; /* Value of PTE at the time of fault */ pmd_t orig_pmd; /* Value of PMD at the time of fault, * used by PMD fault only. */ }; struct page *cow_page; /* Page handler may use for COW fault */ struct page *page; /* ->fault handlers should return a * page here, unless VM_FAULT_NOPAGE * is set (which is also implied by * VM_FAULT_ERROR). */ /* These three entries are valid only while holding ptl lock */ pte_t *pte; /* Pointer to pte entry matching * the 'address'. NULL if the page * table hasn't been allocated. */ spinlock_t *ptl; /* Page table lock. * Protects pte page table if 'pte' * is not NULL, otherwise pmd. */ pgtable_t prealloc_pte; /* Pre-allocated pte page table. * vm_ops->map_pages() sets up a page * table from atomic context. * do_fault_around() pre-allocates * page table to avoid allocation from * atomic context. */ }; /* * These are the virtual MM functions - opening of an area, closing and * unmapping it (needed to keep files on disk up-to-date etc), pointer * to the functions called when a no-page or a wp-page exception occurs. */ struct vm_operations_struct { void (*open)(struct vm_area_struct * area); /** * @close: Called when the VMA is being removed from the MM. * Context: User context. May sleep. Caller holds mmap_lock. */ void (*close)(struct vm_area_struct * area); /* Called any time before splitting to check if it's allowed */ int (*may_split)(struct vm_area_struct *area, unsigned long addr); int (*mremap)(struct vm_area_struct *area); /* * Called by mprotect() to make driver-specific permission * checks before mprotect() is finalised. The VMA must not * be modified. Returns 0 if mprotect() can proceed. */ int (*mprotect)(struct vm_area_struct *vma, unsigned long start, unsigned long end, unsigned long newflags); vm_fault_t (*fault)(struct vm_fault *vmf); vm_fault_t (*huge_fault)(struct vm_fault *vmf, unsigned int order); vm_fault_t (*map_pages)(struct vm_fault *vmf, pgoff_t start_pgoff, pgoff_t end_pgoff); unsigned long (*pagesize)(struct vm_area_struct * area); /* notification that a previously read-only page is about to become * writable, if an error is returned it will cause a SIGBUS */ vm_fault_t (*page_mkwrite)(struct vm_fault *vmf); /* same as page_mkwrite when using VM_PFNMAP|VM_MIXEDMAP */ vm_fault_t (*pfn_mkwrite)(struct vm_fault *vmf); /* called by access_process_vm when get_user_pages() fails, typically * for use by special VMAs. See also generic_access_phys() for a generic * implementation useful for any iomem mapping. */ int (*access)(struct vm_area_struct *vma, unsigned long addr, void *buf, int len, int write); /* Called by the /proc/PID/maps code to ask the vma whether it * has a special name. Returning non-NULL will also cause this * vma to be dumped unconditionally. */ const char *(*name)(struct vm_area_struct *vma); #ifdef CONFIG_NUMA /* * set_policy() op must add a reference to any non-NULL @new mempolicy * to hold the policy upon return. Caller should pass NULL @new to * remove a policy and fall back to surrounding context--i.e. do not * install a MPOL_DEFAULT policy, nor the task or system default * mempolicy. */ int (*set_policy)(struct vm_area_struct *vma, struct mempolicy *new); /* * get_policy() op must add reference [mpol_get()] to any policy at * (vma,addr) marked as MPOL_SHARED. The shared policy infrastructure * in mm/mempolicy.c will do this automatically. * get_policy() must NOT add a ref if the policy at (vma,addr) is not * marked as MPOL_SHARED. vma policies are protected by the mmap_lock. * If no [shared/vma] mempolicy exists at the addr, get_policy() op * must return NULL--i.e., do not "fallback" to task or system default * policy. */ struct mempolicy *(*get_policy)(struct vm_area_struct *vma, unsigned long addr, pgoff_t *ilx); #endif /* * Called by vm_normal_page() for special PTEs to find the * page for @addr. This is useful if the default behavior * (using pte_page()) would not find the correct page. */ struct page *(*find_special_page)(struct vm_area_struct *vma, unsigned long addr); }; #ifdef CONFIG_NUMA_BALANCING static inline void vma_numab_state_init(struct vm_area_struct *vma) { vma->numab_state = NULL; } static inline void vma_numab_state_free(struct vm_area_struct *vma) { kfree(vma->numab_state); } #else static inline void vma_numab_state_init(struct vm_area_struct *vma) {} static inline void vma_numab_state_free(struct vm_area_struct *vma) {} #endif /* CONFIG_NUMA_BALANCING */ #ifdef CONFIG_PER_VMA_LOCK /* * Try to read-lock a vma. The function is allowed to occasionally yield false * locked result to avoid performance overhead, in which case we fall back to * using mmap_lock. The function should never yield false unlocked result. */ static inline bool vma_start_read(struct vm_area_struct *vma) { /* * Check before locking. A race might cause false locked result. * We can use READ_ONCE() for the mm_lock_seq here, and don't need * ACQUIRE semantics, because this is just a lockless check whose result * we don't rely on for anything - the mm_lock_seq read against which we * need ordering is below. */ if (READ_ONCE(vma->vm_lock_seq) == READ_ONCE(vma->vm_mm->mm_lock_seq)) return false; if (unlikely(down_read_trylock(&vma->vm_lock->lock) == 0)) return false; /* * Overflow might produce false locked result. * False unlocked result is impossible because we modify and check * vma->vm_lock_seq under vma->vm_lock protection and mm->mm_lock_seq * modification invalidates all existing locks. * * We must use ACQUIRE semantics for the mm_lock_seq so that if we are * racing with vma_end_write_all(), we only start reading from the VMA * after it has been unlocked. * This pairs with RELEASE semantics in vma_end_write_all(). */ if (unlikely(vma->vm_lock_seq == smp_load_acquire(&vma->vm_mm->mm_lock_seq))) { up_read(&vma->vm_lock->lock); return false; } return true; } static inline void vma_end_read(struct vm_area_struct *vma) { rcu_read_lock(); /* keeps vma alive till the end of up_read */ up_read(&vma->vm_lock->lock); rcu_read_unlock(); } /* WARNING! Can only be used if mmap_lock is expected to be write-locked */ static bool __is_vma_write_locked(struct vm_area_struct *vma, int *mm_lock_seq) { mmap_assert_write_locked(vma->vm_mm); /* * current task is holding mmap_write_lock, both vma->vm_lock_seq and * mm->mm_lock_seq can't be concurrently modified. */ *mm_lock_seq = vma->vm_mm->mm_lock_seq; return (vma->vm_lock_seq == *mm_lock_seq); } /* * Begin writing to a VMA. * Exclude concurrent readers under the per-VMA lock until the currently * write-locked mmap_lock is dropped or downgraded. */ static inline void vma_start_write(struct vm_area_struct *vma) { int mm_lock_seq; if (__is_vma_write_locked(vma, &mm_lock_seq)) return; down_write(&vma->vm_lock->lock); /* * We should use WRITE_ONCE() here because we can have concurrent reads * from the early lockless pessimistic check in vma_start_read(). * We don't really care about the correctness of that early check, but * we should use WRITE_ONCE() for cleanliness and to keep KCSAN happy. */ WRITE_ONCE(vma->vm_lock_seq, mm_lock_seq); up_write(&vma->vm_lock->lock); } static inline void vma_assert_write_locked(struct vm_area_struct *vma) { int mm_lock_seq; VM_BUG_ON_VMA(!__is_vma_write_locked(vma, &mm_lock_seq), vma); } static inline void vma_assert_locked(struct vm_area_struct *vma) { if (!rwsem_is_locked(&vma->vm_lock->lock)) vma_assert_write_locked(vma); } static inline void vma_mark_detached(struct vm_area_struct *vma, bool detached) { /* When detaching vma should be write-locked */ if (detached) vma_assert_write_locked(vma); vma->detached = detached; } static inline void release_fault_lock(struct vm_fault *vmf) { if (vmf->flags & FAULT_FLAG_VMA_LOCK) vma_end_read(vmf->vma); else mmap_read_unlock(vmf->vma->vm_mm); } static inline void assert_fault_locked(struct vm_fault *vmf) { if (vmf->flags & FAULT_FLAG_VMA_LOCK) vma_assert_locked(vmf->vma); else mmap_assert_locked(vmf->vma->vm_mm); } struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm, unsigned long address); #else /* CONFIG_PER_VMA_LOCK */ static inline bool vma_start_read(struct vm_area_struct *vma) { return false; } static inline void vma_end_read(struct vm_area_struct *vma) {} static inline void vma_start_write(struct vm_area_struct *vma) {} static inline void vma_assert_write_locked(struct vm_area_struct *vma) { mmap_assert_write_locked(vma->vm_mm); } static inline void vma_mark_detached(struct vm_area_struct *vma, bool detached) {} static inline struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm, unsigned long address) { return NULL; } static inline void release_fault_lock(struct vm_fault *vmf) { mmap_read_unlock(vmf->vma->vm_mm); } static inline void assert_fault_locked(struct vm_fault *vmf) { mmap_assert_locked(vmf->vma->vm_mm); } #endif /* CONFIG_PER_VMA_LOCK */ extern const struct vm_operations_struct vma_dummy_vm_ops; /* * WARNING: vma_init does not initialize vma->vm_lock. * Use vm_area_alloc()/vm_area_free() if vma needs locking. */ static inline void vma_init(struct vm_area_struct *vma, struct mm_struct *mm) { memset(vma, 0, sizeof(*vma)); vma->vm_mm = mm; vma->vm_ops = &vma_dummy_vm_ops; INIT_LIST_HEAD(&vma->anon_vma_chain); vma_mark_detached(vma, false); vma_numab_state_init(vma); } /* Use when VMA is not part of the VMA tree and needs no locking */ static inline void vm_flags_init(struct vm_area_struct *vma, vm_flags_t flags) { ACCESS_PRIVATE(vma, __vm_flags) = flags; } /* * Use when VMA is part of the VMA tree and modifications need coordination * Note: vm_flags_reset and vm_flags_reset_once do not lock the vma and * it should be locked explicitly beforehand. */ static inline void vm_flags_reset(struct vm_area_struct *vma, vm_flags_t flags) { vma_assert_write_locked(vma); vm_flags_init(vma, flags); } static inline void vm_flags_reset_once(struct vm_area_struct *vma, vm_flags_t flags) { vma_assert_write_locked(vma); WRITE_ONCE(ACCESS_PRIVATE(vma, __vm_flags), flags); } static inline void vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags) { vma_start_write(vma); ACCESS_PRIVATE(vma, __vm_flags) |= flags; } static inline void vm_flags_clear(struct vm_area_struct *vma, vm_flags_t flags) { vma_start_write(vma); ACCESS_PRIVATE(vma, __vm_flags) &= ~flags; } /* * Use only if VMA is not part of the VMA tree or has no other users and * therefore needs no locking. */ static inline void __vm_flags_mod(struct vm_area_struct *vma, vm_flags_t set, vm_flags_t clear) { vm_flags_init(vma, (vma->vm_flags | set) & ~clear); } /* * Use only when the order of set/clear operations is unimportant, otherwise * use vm_flags_{set|clear} explicitly. */ static inline void vm_flags_mod(struct vm_area_struct *vma, vm_flags_t set, vm_flags_t clear) { vma_start_write(vma); __vm_flags_mod(vma, set, clear); } static inline void vma_set_anonymous(struct vm_area_struct *vma) { vma->vm_ops = NULL; } static inline bool vma_is_anonymous(struct vm_area_struct *vma) { return !vma->vm_ops; } /* * Indicate if the VMA is a heap for the given task; for * /proc/PID/maps that is the heap of the main task. */ static inline bool vma_is_initial_heap(const struct vm_area_struct *vma) { return vma->vm_start < vma->vm_mm->brk && vma->vm_end > vma->vm_mm->start_brk; } /* * Indicate if the VMA is a stack for the given task; for * /proc/PID/maps that is the stack of the main task. */ static inline bool vma_is_initial_stack(const struct vm_area_struct *vma) { /* * We make no effort to guess what a given thread considers to be * its "stack". It's not even well-defined for programs written * languages like Go. */ return vma->vm_start <= vma->vm_mm->start_stack && vma->vm_end >= vma->vm_mm->start_stack; } static inline bool vma_is_temporary_stack(struct vm_area_struct *vma) { int maybe_stack = vma->vm_flags & (VM_GROWSDOWN | VM_GROWSUP); if (!maybe_stack) return false; if ((vma->vm_flags & VM_STACK_INCOMPLETE_SETUP) == VM_STACK_INCOMPLETE_SETUP) return true; return false; } static inline bool vma_is_foreign(struct vm_area_struct *vma) { if (!current->mm) return true; if (current->mm != vma->vm_mm) return true; return false; } static inline bool vma_is_accessible(struct vm_area_struct *vma) { return vma->vm_flags & VM_ACCESS_FLAGS; } static inline bool is_shared_maywrite(vm_flags_t vm_flags) { return (vm_flags & (VM_SHARED | VM_MAYWRITE)) == (VM_SHARED | VM_MAYWRITE); } static inline bool vma_is_shared_maywrite(struct vm_area_struct *vma) { return is_shared_maywrite(vma->vm_flags); } static inline struct vm_area_struct *vma_find(struct vma_iterator *vmi, unsigned long max) { return mas_find(&vmi->mas, max - 1); } static inline struct vm_area_struct *vma_next(struct vma_iterator *vmi) { /* * Uses mas_find() to get the first VMA when the iterator starts. * Calling mas_next() could skip the first entry. */ return mas_find(&vmi->mas, ULONG_MAX); } static inline struct vm_area_struct *vma_iter_next_range(struct vma_iterator *vmi) { return mas_next_range(&vmi->mas, ULONG_MAX); } static inline struct vm_area_struct *vma_prev(struct vma_iterator *vmi) { return mas_prev(&vmi->mas, 0); } static inline struct vm_area_struct *vma_iter_prev_range(struct vma_iterator *vmi) { return mas_prev_range(&vmi->mas, 0); } static inline unsigned long vma_iter_addr(struct vma_iterator *vmi) { return vmi->mas.index; } static inline unsigned long vma_iter_end(struct vma_iterator *vmi) { return vmi->mas.last + 1; } static inline int vma_iter_bulk_alloc(struct vma_iterator *vmi, unsigned long count) { return mas_expected_entries(&vmi->mas, count); } static inline int vma_iter_clear_gfp(struct vma_iterator *vmi, unsigned long start, unsigned long end, gfp_t gfp) { __mas_set_range(&vmi->mas, start, end - 1); mas_store_gfp(&vmi->mas, NULL, gfp); if (unlikely(mas_is_err(&vmi->mas))) return -ENOMEM; return 0; } /* Free any unused preallocations */ static inline void vma_iter_free(struct vma_iterator *vmi) { mas_destroy(&vmi->mas); } static inline int vma_iter_bulk_store(struct vma_iterator *vmi, struct vm_area_struct *vma) { vmi->mas.index = vma->vm_start; vmi->mas.last = vma->vm_end - 1; mas_store(&vmi->mas, vma); if (unlikely(mas_is_err(&vmi->mas))) return -ENOMEM; return 0; } static inline void vma_iter_invalidate(struct vma_iterator *vmi) { mas_pause(&vmi->mas); } static inline void vma_iter_set(struct vma_iterator *vmi, unsigned long addr) { mas_set(&vmi->mas, addr); } #define for_each_vma(__vmi, __vma) \ while (((__vma) = vma_next(&(__vmi))) != NULL) /* The MM code likes to work with exclusive end addresses */ #define for_each_vma_range(__vmi, __vma, __end) \ while (((__vma) = vma_find(&(__vmi), (__end))) != NULL) #ifdef CONFIG_SHMEM /* * The vma_is_shmem is not inline because it is used only by slow * paths in userfault. */ bool vma_is_shmem(struct vm_area_struct *vma); bool vma_is_anon_shmem(struct vm_area_struct *vma); #else static inline bool vma_is_shmem(struct vm_area_struct *vma) { return false; } static inline bool vma_is_anon_shmem(struct vm_area_struct *vma) { return false; } #endif int vma_is_stack_for_current(struct vm_area_struct *vma); /* flush_tlb_range() takes a vma, not a mm, and can care about flags */ #define TLB_FLUSH_VMA(mm,flags) { .vm_mm = (mm), .vm_flags = (flags) } struct mmu_gather; struct inode; /* * compound_order() can be called without holding a reference, which means * that niceties like page_folio() don't work. These callers should be * prepared to handle wild return values. For example, PG_head may be * set before the order is initialised, or this may be a tail page. * See compaction.c for some good examples. */ static inline unsigned int compound_order(struct page *page) { struct folio *folio = (struct folio *)page; if (!test_bit(PG_head, &folio->flags)) return 0; return folio->_flags_1 & 0xff; } /** * folio_order - The allocation order of a folio. * @folio: The folio. * * A folio is composed of 2^order pages. See get_order() for the definition * of order. * * Return: The order of the folio. */ static inline unsigned int folio_order(struct folio *folio) { if (!folio_test_large(folio)) return 0; return folio->_flags_1 & 0xff; } #include <linux/huge_mm.h> /* * Methods to modify the page usage count. * * What counts for a page usage: * - cache mapping (page->mapping) * - private data (page->private) * - page mapped in a task's page tables, each mapping * is counted separately * * Also, many kernel routines increase the page count before a critical * routine so they can be sure the page doesn't go away from under them. */ /* * Drop a ref, return true if the refcount fell to zero (the page has no users) */ static inline int put_page_testzero(struct page *page) { VM_BUG_ON_PAGE(page_ref_count(page) == 0, page); return page_ref_dec_and_test(page); } static inline int folio_put_testzero(struct folio *folio) { return put_page_testzero(&folio->page); } /* * Try to grab a ref unless the page has a refcount of zero, return false if * that is the case. * This can be called when MMU is off so it must not access * any of the virtual mappings. */ static inline bool get_page_unless_zero(struct page *page) { return page_ref_add_unless(page, 1, 0); } static inline struct folio *folio_get_nontail_page(struct page *page) { if (unlikely(!get_page_unless_zero(page))) return NULL; return (struct folio *)page; } extern int page_is_ram(unsigned long pfn); enum { REGION_INTERSECTS, REGION_DISJOINT, REGION_MIXED, }; int region_intersects(resource_size_t offset, size_t size, unsigned long flags, unsigned long desc); /* Support for virtually mapped pages */ struct page *vmalloc_to_page(const void *addr); unsigned long vmalloc_to_pfn(const void *addr); /* * Determine if an address is within the vmalloc range * * On nommu, vmalloc/vfree wrap through kmalloc/kfree directly, so there * is no special casing required. */ #ifdef CONFIG_MMU extern bool is_vmalloc_addr(const void *x); extern int is_vmalloc_or_module_addr(const void *x); #else static inline bool is_vmalloc_addr(const void *x) { return false; } static inline int is_vmalloc_or_module_addr(const void *x) { return 0; } #endif /* * How many times the entire folio is mapped as a single unit (eg by a * PMD or PUD entry). This is probably not what you want, except for * debugging purposes - it does not include PTE-mapped sub-pages; look * at folio_mapcount() or page_mapcount() or total_mapcount() instead. */ static inline int folio_entire_mapcount(struct folio *folio) { VM_BUG_ON_FOLIO(!folio_test_large(folio), folio); return atomic_read(&folio->_entire_mapcount) + 1; } /* * The atomic page->_mapcount, starts from -1: so that transitions * both from it and to it can be tracked, using atomic_inc_and_test * and atomic_add_negative(-1). */ static inline void page_mapcount_reset(struct page *page) { atomic_set(&(page)->_mapcount, -1); } /** * page_mapcount() - Number of times this precise page is mapped. * @page: The page. * * The number of times this page is mapped. If this page is part of * a large folio, it includes the number of times this page is mapped * as part of that folio. * * Will report 0 for pages which cannot be mapped into userspace, eg * slab, page tables and similar. */ static inline int page_mapcount(struct page *page) { int mapcount = atomic_read(&page->_mapcount) + 1; /* Handle page_has_type() pages */ if (mapcount < 0) mapcount = 0; if (unlikely(PageCompound(page))) mapcount += folio_entire_mapcount(page_folio(page)); return mapcount; } int folio_total_mapcount(struct folio *folio); /** * folio_mapcount() - Calculate the number of mappings of this folio. * @folio: The folio. * * A large folio tracks both how many times the entire folio is mapped, * and how many times each individual page in the folio is mapped. * This function calculates the total number of times the folio is * mapped. * * Return: The number of times this folio is mapped. */ static inline int folio_mapcount(struct folio *folio) { if (likely(!folio_test_large(folio))) return atomic_read(&folio->_mapcount) + 1; return folio_total_mapcount(folio); } static inline int total_mapcount(struct page *page) { if (likely(!PageCompound(page))) return atomic_read(&page->_mapcount) + 1; return folio_total_mapcount(page_folio(page)); } static inline bool folio_large_is_mapped(struct folio *folio) { /* * Reading _entire_mapcount below could be omitted if hugetlb * participated in incrementing nr_pages_mapped when compound mapped. */ return atomic_read(&folio->_nr_pages_mapped) > 0 || atomic_read(&folio->_entire_mapcount) >= 0; } /** * folio_mapped - Is this folio mapped into userspace? * @folio: The folio. * * Return: True if any page in this folio is referenced by user page tables. */ static inline bool folio_mapped(struct folio *folio) { if (likely(!folio_test_large(folio))) return atomic_read(&folio->_mapcount) >= 0; return folio_large_is_mapped(folio); } /* * Return true if this page is mapped into pagetables. * For compound page it returns true if any sub-page of compound page is mapped, * even if this particular sub-page is not itself mapped by any PTE or PMD. */ static inline bool page_mapped(struct page *page) { if (likely(!PageCompound(page))) return atomic_read(&page->_mapcount) >= 0; return folio_large_is_mapped(page_folio(page)); } static inline struct page *virt_to_head_page(const void *x) { struct page *page = virt_to_page(x); return compound_head(page); } static inline struct folio *virt_to_folio(const void *x) { struct page *page = virt_to_page(x); return page_folio(page); } void __folio_put(struct folio *folio); void put_pages_list(struct list_head *pages); void split_page(struct page *page, unsigned int order); void folio_copy(struct folio *dst, struct folio *src); unsigned long nr_free_buffer_pages(void); void destroy_large_folio(struct folio *folio); /* Returns the number of bytes in this potentially compound page. */ static inline unsigned long page_size(struct page *page) { return PAGE_SIZE << compound_order(page); } /* Returns the number of bits needed for the number of bytes in a page */ static inline unsigned int page_shift(struct page *page) { return PAGE_SHIFT + compound_order(page); } /** * thp_order - Order of a transparent huge page. * @page: Head page of a transparent huge page. */ static inline unsigned int thp_order(struct page *page) { VM_BUG_ON_PGFLAGS(PageTail(page), page); return compound_order(page); } /** * thp_size - Size of a transparent huge page. * @page: Head page of a transparent huge page. * * Return: Number of bytes in this page. */ static inline unsigned long thp_size(struct page *page) { return PAGE_SIZE << thp_order(page); } #ifdef CONFIG_MMU /* * Do pte_mkwrite, but only if the vma says VM_WRITE. We do this when * servicing faults for write access. In the normal case, do always want * pte_mkwrite. But get_user_pages can cause write faults for mappings * that do not have writing enabled, when used by access_process_vm. */ static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma) { if (likely(vma->vm_flags & VM_WRITE)) pte = pte_mkwrite(pte, vma); return pte; } vm_fault_t do_set_pmd(struct vm_fault *vmf, struct page *page); void set_pte_range(struct vm_fault *vmf, struct folio *folio, struct page *page, unsigned int nr, unsigned long addr); vm_fault_t finish_fault(struct vm_fault *vmf); #endif /* * Multiple processes may "see" the same page. E.g. for untouched * mappings of /dev/null, all processes see the same page full of * zeroes, and text pages of executables and shared libraries have * only one copy in memory, at most, normally. * * For the non-reserved pages, page_count(page) denotes a reference count. * page_count() == 0 means the page is free. page->lru is then used for * freelist management in the buddy allocator. * page_count() > 0 means the page has been allocated. * * Pages are allocated by the slab allocator in order to provide memory * to kmalloc and kmem_cache_alloc. In this case, the management of the * page, and the fields in 'struct page' are the responsibility of mm/slab.c * unless a particular usage is carefully commented. (the responsibility of * freeing the kmalloc memory is the caller's, of course). * * A page may be used by anyone else who does a __get_free_page(). * In this case, page_count still tracks the references, and should only * be used through the normal accessor functions. The top bits of page->flags * and page->virtual store page management information, but all other fields * are unused and could be used privately, carefully. The management of this * page is the responsibility of the one who allocated it, and those who have * subsequently been given references to it. * * The other pages (we may call them "pagecache pages") are completely * managed by the Linux memory manager: I/O, buffers, swapping etc. * The following discussion applies only to them. * * A pagecache page contains an opaque `private' member, which belongs to the * page's address_space. Usually, this is the address of a circular list of * the page's disk buffers. PG_private must be set to tell the VM to call * into the filesystem to release these pages. * * A page may belong to an inode's memory mapping. In this case, page->mapping * is the pointer to the inode, and page->index is the file offset of the page, * in units of PAGE_SIZE. * * If pagecache pages are not associated with an inode, they are said to be * anonymous pages. These may become associated with the swapcache, and in that * case PG_swapcache is set, and page->private is an offset into the swapcache. * * In either case (swapcache or inode backed), the pagecache itself holds one * reference to the page. Setting PG_private should also increment the * refcount. The each user mapping also has a reference to the page. * * The pagecache pages are stored in a per-mapping radix tree, which is * rooted at mapping->i_pages, and indexed by offset. * Where 2.4 and early 2.6 kernels kept dirty/clean pages in per-address_space * lists, we instead now tag pages as dirty/writeback in the radix tree. * * All pagecache pages may be subject to I/O: * - inode pages may need to be read from disk, * - inode pages which have been modified and are MAP_SHARED may need * to be written back to the inode on disk, * - anonymous pages (including MAP_PRIVATE file mappings) which have been * modified may need to be swapped out to swap space and (later) to be read * back into memory. */ #if defined(CONFIG_ZONE_DEVICE) && defined(CONFIG_FS_DAX) DECLARE_STATIC_KEY_FALSE(devmap_managed_key); bool __put_devmap_managed_page_refs(struct page *page, int refs); static inline bool put_devmap_managed_page_refs(struct page *page, int refs) { if (!static_branch_unlikely(&devmap_managed_key)) return false; if (!is_zone_device_page(page)) return false; return __put_devmap_managed_page_refs(page, refs); } #else /* CONFIG_ZONE_DEVICE && CONFIG_FS_DAX */ static inline bool put_devmap_managed_page_refs(struct page *page, int refs) { return false; } #endif /* CONFIG_ZONE_DEVICE && CONFIG_FS_DAX */ static inline bool put_devmap_managed_page(struct page *page) { return put_devmap_managed_page_refs(page, 1); } /* 127: arbitrary random number, small enough to assemble well */ #define folio_ref_zero_or_close_to_overflow(folio) \ ((unsigned int) folio_ref_count(folio) + 127u <= 127u) /** * folio_get - Increment the reference count on a folio. * @folio: The folio. * * Context: May be called in any context, as long as you know that * you have a refcount on the folio. If you do not already have one, * folio_try_get() may be the right interface for you to use. */ static inline void folio_get(struct folio *folio) { VM_BUG_ON_FOLIO(folio_ref_zero_or_close_to_overflow(folio), folio); folio_ref_inc(folio); } static inline void get_page(struct page *page) { folio_get(page_folio(page)); } static inline __must_check bool try_get_page(struct page *page) { page = compound_head(page); if (WARN_ON_ONCE(page_ref_count(page) <= 0)) return false; page_ref_inc(page); return true; } /** * folio_put - Decrement the reference count on a folio. * @folio: The folio. * * If the folio's reference count reaches zero, the memory will be * released back to the page allocator and may be used by another * allocation immediately. Do not access the memory or the struct folio * after calling folio_put() unless you can be sure that it wasn't the * last reference. * * Context: May be called in process or interrupt context, but not in NMI * context. May be called while holding a spinlock. */ static inline void folio_put(struct folio *folio) { if (folio_put_testzero(folio)) __folio_put(folio); } /** * folio_put_refs - Reduce the reference count on a folio. * @folio: The folio. * @refs: The amount to subtract from the folio's reference count. * * If the folio's reference count reaches zero, the memory will be * released back to the page allocator and may be used by another * allocation immediately. Do not access the memory or the struct folio * after calling folio_put_refs() unless you can be sure that these weren't * the last references. * * Context: May be called in process or interrupt context, but not in NMI * context. May be called while holding a spinlock. */ static inline void folio_put_refs(struct folio *folio, int refs) { if (folio_ref_sub_and_test(folio, refs)) __folio_put(folio); } /* * union release_pages_arg - an array of pages or folios * * release_pages() releases a simple array of multiple pages, and * accepts various different forms of said page array: either * a regular old boring array of pages, an array of folios, or * an array of encoded page pointers. * * The transparent union syntax for this kind of "any of these * argument types" is all kinds of ugly, so look away. */ typedef union { struct page **pages; struct folio **folios; struct encoded_page **encoded_pages; } release_pages_arg __attribute__ ((__transparent_union__)); void release_pages(release_pages_arg, int nr); /** * folios_put - Decrement the reference count on an array of folios. * @folios: The folios. * @nr: How many folios there are. * * Like folio_put(), but for an array of folios. This is more efficient * than writing the loop yourself as it will optimise the locks which * need to be taken if the folios are freed. * * Context: May be called in process or interrupt context, but not in NMI * context. May be called while holding a spinlock. */ static inline void folios_put(struct folio **folios, unsigned int nr) { release_pages(folios, nr); } static inline void put_page(struct page *page) { struct folio *folio = page_folio(page); /* * For some devmap managed pages we need to catch refcount transition * from 2 to 1: */ if (put_devmap_managed_page(&folio->page)) return; folio_put(folio); } /* * GUP_PIN_COUNTING_BIAS, and the associated functions that use it, overload * the page's refcount so that two separate items are tracked: the original page * reference count, and also a new count of how many pin_user_pages() calls were * made against the page. ("gup-pinned" is another term for the latter). * * With this scheme, pin_user_pages() becomes special: such pages are marked as * distinct from normal pages. As such, the unpin_user_page() call (and its * variants) must be used in order to release gup-pinned pages. * * Choice of value: * * By making GUP_PIN_COUNTING_BIAS a power of two, debugging of page reference * counts with respect to pin_user_pages() and unpin_user_page() becomes * simpler, due to the fact that adding an even power of two to the page * refcount has the effect of using only the upper N bits, for the code that * counts up using the bias value. This means that the lower bits are left for * the exclusive use of the original code that increments and decrements by one * (or at least, by much smaller values than the bias value). * * Of course, once the lower bits overflow into the upper bits (and this is * OK, because subtraction recovers the original values), then visual inspection * no longer suffices to directly view the separate counts. However, for normal * applications that don't have huge page reference counts, this won't be an * issue. * * Locking: the lockless algorithm described in folio_try_get_rcu() * provides safe operation for get_user_pages(), page_mkclean() and * other calls that race to set up page table entries. */ #define GUP_PIN_COUNTING_BIAS (1U << 10) void unpin_user_page(struct page *page); void unpin_user_pages_dirty_lock(struct page **pages, unsigned long npages, bool make_dirty); void unpin_user_page_range_dirty_lock(struct page *page, unsigned long npages, bool make_dirty); void unpin_user_pages(struct page **pages, unsigned long npages); static inline bool is_cow_mapping(vm_flags_t flags) { return (flags & (VM_SHARED | VM_MAYWRITE)) == VM_MAYWRITE; } #ifndef CONFIG_MMU static inline bool is_nommu_shared_mapping(vm_flags_t flags) { /* * NOMMU shared mappings are ordinary MAP_SHARED mappings and selected * R/O MAP_PRIVATE file mappings that are an effective R/O overlay of * a file mapping. R/O MAP_PRIVATE mappings might still modify * underlying memory if ptrace is active, so this is only possible if * ptrace does not apply. Note that there is no mprotect() to upgrade * write permissions later. */ return flags & (VM_MAYSHARE | VM_MAYOVERLAY); } #endif #if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) #define SECTION_IN_PAGE_FLAGS #endif /* * The identification function is mainly used by the buddy allocator for * determining if two pages could be buddies. We are not really identifying * the zone since we could be using the section number id if we do not have * node id available in page flags. * We only guarantee that it will return the same value for two combinable * pages in a zone. */ static inline int page_zone_id(struct page *page) { return (page->flags >> ZONEID_PGSHIFT) & ZONEID_MASK; } #ifdef NODE_NOT_IN_PAGE_FLAGS extern int page_to_nid(const struct page *page); #else static inline int page_to_nid(const struct page *page) { struct page *p = (struct page *)page; return (PF_POISONED_CHECK(p)->flags >> NODES_PGSHIFT) & NODES_MASK; } #endif static inline int folio_nid(const struct folio *folio) { return page_to_nid(&folio->page); } #ifdef CONFIG_NUMA_BALANCING /* page access time bits needs to hold at least 4 seconds */ #define PAGE_ACCESS_TIME_MIN_BITS 12 #if LAST_CPUPID_SHIFT < PAGE_ACCESS_TIME_MIN_BITS #define PAGE_ACCESS_TIME_BUCKETS \ (PAGE_ACCESS_TIME_MIN_BITS - LAST_CPUPID_SHIFT) #else #define PAGE_ACCESS_TIME_BUCKETS 0 #endif #define PAGE_ACCESS_TIME_MASK \ (LAST_CPUPID_MASK << PAGE_ACCESS_TIME_BUCKETS) static inline int cpu_pid_to_cpupid(int cpu, int pid) { return ((cpu & LAST__CPU_MASK) << LAST__PID_SHIFT) | (pid & LAST__PID_MASK); } static inline int cpupid_to_pid(int cpupid) { return cpupid & LAST__PID_MASK; } static inline int cpupid_to_cpu(int cpupid) { return (cpupid >> LAST__PID_SHIFT) & LAST__CPU_MASK; } static inline int cpupid_to_nid(int cpupid) { return cpu_to_node(cpupid_to_cpu(cpupid)); } static inline bool cpupid_pid_unset(int cpupid) { return cpupid_to_pid(cpupid) == (-1 & LAST__PID_MASK); } static inline bool cpupid_cpu_unset(int cpupid) { return cpupid_to_cpu(cpupid) == (-1 & LAST__CPU_MASK); } static inline bool __cpupid_match_pid(pid_t task_pid, int cpupid) { return (task_pid & LAST__PID_MASK) == cpupid_to_pid(cpupid); } #define cpupid_match_pid(task, cpupid) __cpupid_match_pid(task->pid, cpupid) #ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS static inline int folio_xchg_last_cpupid(struct folio *folio, int cpupid) { return xchg(&folio->_last_cpupid, cpupid & LAST_CPUPID_MASK); } static inline int folio_last_cpupid(struct folio *folio) { return folio->_last_cpupid; } static inline void page_cpupid_reset_last(struct page *page) { page->_last_cpupid = -1 & LAST_CPUPID_MASK; } #else static inline int folio_last_cpupid(struct folio *folio) { return (folio->flags >> LAST_CPUPID_PGSHIFT) & LAST_CPUPID_MASK; } int folio_xchg_last_cpupid(struct folio *folio, int cpupid); static inline void page_cpupid_reset_last(struct page *page) { page->flags |= LAST_CPUPID_MASK << LAST_CPUPID_PGSHIFT; } #endif /* LAST_CPUPID_NOT_IN_PAGE_FLAGS */ static inline int folio_xchg_access_time(struct folio *folio, int time) { int last_time; last_time = folio_xchg_last_cpupid(folio, time >> PAGE_ACCESS_TIME_BUCKETS); return last_time << PAGE_ACCESS_TIME_BUCKETS; } static inline void vma_set_access_pid_bit(struct vm_area_struct *vma) { unsigned int pid_bit; pid_bit = hash_32(current->pid, ilog2(BITS_PER_LONG)); if (vma->numab_state && !test_bit(pid_bit, &vma->numab_state->pids_active[1])) { __set_bit(pid_bit, &vma->numab_state->pids_active[1]); } } #else /* !CONFIG_NUMA_BALANCING */ static inline int folio_xchg_last_cpupid(struct folio *folio, int cpupid) { return folio_nid(folio); /* XXX */ } static inline int folio_xchg_access_time(struct folio *folio, int time) { return 0; } static inline int folio_last_cpupid(struct folio *folio) { return folio_nid(folio); /* XXX */ } static inline int cpupid_to_nid(int cpupid) { return -1; } static inline int cpupid_to_pid(int cpupid) { return -1; } static inline int cpupid_to_cpu(int cpupid) { return -1; } static inline int cpu_pid_to_cpupid(int nid, int pid) { return -1; } static inline bool cpupid_pid_unset(int cpupid) { return true; } static inline void page_cpupid_reset_last(struct page *page) { } static inline bool cpupid_match_pid(struct task_struct *task, int cpupid) { return false; } static inline void vma_set_access_pid_bit(struct vm_area_struct *vma) { } #endif /* CONFIG_NUMA_BALANCING */ #if defined(CONFIG_KASAN_SW_TAGS) || defined(CONFIG_KASAN_HW_TAGS) /* * KASAN per-page tags are stored xor'ed with 0xff. This allows to avoid * setting tags for all pages to native kernel tag value 0xff, as the default * value 0x00 maps to 0xff. */ static inline u8 page_kasan_tag(const struct page *page) { u8 tag = KASAN_TAG_KERNEL; if (kasan_enabled()) { tag = (page->flags >> KASAN_TAG_PGSHIFT) & KASAN_TAG_MASK; tag ^= 0xff; } return tag; } static inline void page_kasan_tag_set(struct page *page, u8 tag) { unsigned long old_flags, flags; if (!kasan_enabled()) return; tag ^= 0xff; old_flags = READ_ONCE(page->flags); do { flags = old_flags; flags &= ~(KASAN_TAG_MASK << KASAN_TAG_PGSHIFT); flags |= (tag & KASAN_TAG_MASK) << KASAN_TAG_PGSHIFT; } while (unlikely(!try_cmpxchg(&page->flags, &old_flags, flags))); } static inline void page_kasan_tag_reset(struct page *page) { if (kasan_enabled()) page_kasan_tag_set(page, KASAN_TAG_KERNEL); } #else /* CONFIG_KASAN_SW_TAGS || CONFIG_KASAN_HW_TAGS */ static inline u8 page_kasan_tag(const struct page *page) { return 0xff; } static inline void page_kasan_tag_set(struct page *page, u8 tag) { } static inline void page_kasan_tag_reset(struct page *page) { } #endif /* CONFIG_KASAN_SW_TAGS || CONFIG_KASAN_HW_TAGS */ static inline struct zone *page_zone(const struct page *page) { return &NODE_DATA(page_to_nid(page))->node_zones[page_zonenum(page)]; } static inline pg_data_t *page_pgdat(const struct page *page) { return NODE_DATA(page_to_nid(page)); } static inline struct zone *folio_zone(const struct folio *folio) { return page_zone(&folio->page); } static inline pg_data_t *folio_pgdat(const struct folio *folio) { return page_pgdat(&folio->page); } #ifdef SECTION_IN_PAGE_FLAGS static inline void set_page_section(struct page *page, unsigned long section) { page->flags &= ~(SECTIONS_MASK << SECTIONS_PGSHIFT); page->flags |= (section & SECTIONS_MASK) << SECTIONS_PGSHIFT; } static inline unsigned long page_to_section(const struct page *page) { return (page->flags >> SECTIONS_PGSHIFT) & SECTIONS_MASK; } #endif /** * folio_pfn - Return the Page Frame Number of a folio. * @folio: The folio. * * A folio may contain multiple pages. The pages have consecutive * Page Frame Numbers. * * Return: The Page Frame Number of the first page in the folio. */ static inline unsigned long folio_pfn(struct folio *folio) { return page_to_pfn(&folio->page); } static inline struct folio *pfn_folio(unsigned long pfn) { return page_folio(pfn_to_page(pfn)); } /** * folio_maybe_dma_pinned - Report if a folio may be pinned for DMA. * @folio: The folio. * * This function checks if a folio has been pinned via a call to * a function in the pin_user_pages() family. * * For small folios, the return value is partially fuzzy: false is not fuzzy, * because it means "definitely not pinned for DMA", but true means "probably * pinned for DMA, but possibly a false positive due to having at least * GUP_PIN_COUNTING_BIAS worth of normal folio references". * * False positives are OK, because: a) it's unlikely for a folio to * get that many refcounts, and b) all the callers of this routine are * expected to be able to deal gracefully with a false positive. * * For large folios, the result will be exactly correct. That's because * we have more tracking data available: the _pincount field is used * instead of the GUP_PIN_COUNTING_BIAS scheme. * * For more information, please see Documentation/core-api/pin_user_pages.rst. * * Return: True, if it is likely that the page has been "dma-pinned". * False, if the page is definitely not dma-pinned. */ static inline bool folio_maybe_dma_pinned(struct folio *folio) { if (folio_test_large(folio)) return atomic_read(&folio->_pincount) > 0; /* * folio_ref_count() is signed. If that refcount overflows, then * folio_ref_count() returns a negative value, and callers will avoid * further incrementing the refcount. * * Here, for that overflow case, use the sign bit to count a little * bit higher via unsigned math, and thus still get an accurate result. */ return ((unsigned int)folio_ref_count(folio)) >= GUP_PIN_COUNTING_BIAS; } static inline bool page_maybe_dma_pinned(struct page *page) { return folio_maybe_dma_pinned(page_folio(page)); } /* * This should most likely only be called during fork() to see whether we * should break the cow immediately for an anon page on the src mm. * * The caller has to hold the PT lock and the vma->vm_mm->->write_protect_seq. */ static inline bool folio_needs_cow_for_dma(struct vm_area_struct *vma, struct folio *folio) { VM_BUG_ON(!(raw_read_seqcount(&vma->vm_mm->write_protect_seq) & 1)); if (!test_bit(MMF_HAS_PINNED, &vma->vm_mm->flags)) return false; return folio_maybe_dma_pinned(folio); } /** * is_zero_page - Query if a page is a zero page * @page: The page to query * * This returns true if @page is one of the permanent zero pages. */ static inline bool is_zero_page(const struct page *page) { return is_zero_pfn(page_to_pfn(page)); } /** * is_zero_folio - Query if a folio is a zero page * @folio: The folio to query * * This returns true if @folio is one of the permanent zero pages. */ static inline bool is_zero_folio(const struct folio *folio) { return is_zero_page(&folio->page); } /* MIGRATE_CMA and ZONE_MOVABLE do not allow pin folios */ #ifdef CONFIG_MIGRATION static inline bool folio_is_longterm_pinnable(struct folio *folio) { #ifdef CONFIG_CMA int mt = folio_migratetype(folio); if (mt == MIGRATE_CMA || mt == MIGRATE_ISOLATE) return false; #endif /* The zero page can be "pinned" but gets special handling. */ if (is_zero_folio(folio)) return true; /* Coherent device memory must always allow eviction. */ if (folio_is_device_coherent(folio)) return false; /* Otherwise, non-movable zone folios can be pinned. */ return !folio_is_zone_movable(folio); } #else static inline bool folio_is_longterm_pinnable(struct folio *folio) { return true; } #endif static inline void set_page_zone(struct page *page, enum zone_type zone) { page->flags &= ~(ZONES_MASK << ZONES_PGSHIFT); page->flags |= (zone & ZONES_MASK) << ZONES_PGSHIFT; } static inline void set_page_node(struct page *page, unsigned long node) { page->flags &= ~(NODES_MASK << NODES_PGSHIFT); page->flags |= (node & NODES_MASK) << NODES_PGSHIFT; } static inline void set_page_links(struct page *page, enum zone_type zone, unsigned long node, unsigned long pfn) { set_page_zone(page, zone); set_page_node(page, node); #ifdef SECTION_IN_PAGE_FLAGS set_page_section(page, pfn_to_section_nr(pfn)); #endif } /** * folio_nr_pages - The number of pages in the folio. * @folio: The folio. * * Return: A positive power of two. */ static inline long folio_nr_pages(struct folio *folio) { if (!folio_test_large(folio)) return 1; #ifdef CONFIG_64BIT return folio->_folio_nr_pages; #else return 1L << (folio->_flags_1 & 0xff); #endif } /* * compound_nr() returns the number of pages in this potentially compound * page. compound_nr() can be called on a tail page, and is defined to * return 1 in that case. */ static inline unsigned long compound_nr(struct page *page) { struct folio *folio = (struct folio *)page; if (!test_bit(PG_head, &folio->flags)) return 1; #ifdef CONFIG_64BIT return folio->_folio_nr_pages; #else return 1L << (folio->_flags_1 & 0xff); #endif } /** * thp_nr_pages - The number of regular pages in this huge page. * @page: The head page of a huge page. */ static inline int thp_nr_pages(struct page *page) { return folio_nr_pages((struct folio *)page); } /** * folio_next - Move to the next physical folio. * @folio: The folio we're currently operating on. * * If you have physically contiguous memory which may span more than * one folio (eg a &struct bio_vec), use this function to move from one * folio to the next. Do not use it if the memory is only virtually * contiguous as the folios are almost certainly not adjacent to each * other. This is the folio equivalent to writing ``page++``. * * Context: We assume that the folios are refcounted and/or locked at a * higher level and do not adjust the reference counts. * Return: The next struct folio. */ static inline struct folio *folio_next(struct folio *folio) { return (struct folio *)folio_page(folio, folio_nr_pages(folio)); } /** * folio_shift - The size of the memory described by this folio. * @folio: The folio. * * A folio represents a number of bytes which is a power-of-two in size. * This function tells you which power-of-two the folio is. See also * folio_size() and folio_order(). * * Context: The caller should have a reference on the folio to prevent * it from being split. It is not necessary for the folio to be locked. * Return: The base-2 logarithm of the size of this folio. */ static inline unsigned int folio_shift(struct folio *folio) { return PAGE_SHIFT + folio_order(folio); } /** * folio_size - The number of bytes in a folio. * @folio: The folio. * * Context: The caller should have a reference on the folio to prevent * it from being split. It is not necessary for the folio to be locked. * Return: The number of bytes in this folio. */ static inline size_t folio_size(struct folio *folio) { return PAGE_SIZE << folio_order(folio); } /** * folio_likely_mapped_shared - Estimate if the folio is mapped into the page * tables of more than one MM * @folio: The folio. * * This function checks if the folio is currently mapped into more than one * MM ("mapped shared"), or if the folio is only mapped into a single MM * ("mapped exclusively"). * * As precise information is not easily available for all folios, this function * estimates the number of MMs ("sharers") that are currently mapping a folio * using the number of times the first page of the folio is currently mapped * into page tables. * * For small anonymous folios (except KSM folios) and anonymous hugetlb folios, * the return value will be exactly correct, because they can only be mapped * at most once into an MM, and they cannot be partially mapped. * * For other folios, the result can be fuzzy: * #. For partially-mappable large folios (THP), the return value can wrongly * indicate "mapped exclusively" (false negative) when the folio is * only partially mapped into at least one MM. * #. For pagecache folios (including hugetlb), the return value can wrongly * indicate "mapped shared" (false positive) when two VMAs in the same MM * cover the same file range. * #. For (small) KSM folios, the return value can wrongly indicate "mapped * shared" (false negative), when the folio is mapped multiple times into * the same MM. * * Further, this function only considers current page table mappings that * are tracked using the folio mapcount(s). * * This function does not consider: * #. If the folio might get mapped in the (near) future (e.g., swapcache, * pagecache, temporary unmapping for migration). * #. If the folio is mapped differently (VM_PFNMAP). * #. If hugetlb page table sharing applies. Callers might want to check * hugetlb_pmd_shared(). * * Return: Whether the folio is estimated to be mapped into more than one MM. */ static inline bool folio_likely_mapped_shared(struct folio *folio) { return page_mapcount(folio_page(folio, 0)) > 1; } /** * folio_expected_ref_count - calculate the expected folio refcount * @folio: the folio * * Calculate the expected folio refcount, taking references from the pagecache, * swapcache, PG_private and page table mappings into account. Useful in * combination with folio_ref_count() to detect unexpected references (e.g., * GUP or other temporary references). * * Does currently not consider references from the LRU cache. If the folio * was isolated from the LRU (which is the case during migration or split), * the LRU cache does not apply. * * Calling this function on an unmapped folio -- !folio_mapped() -- that is * locked will return a stable result. * * Calling this function on a mapped folio will not result in a stable result, * because nothing stops additional page table mappings from coming (e.g., * fork()) or going (e.g., munmap()). * * Calling this function without the folio lock will also not result in a * stable result: for example, the folio might get dropped from the swapcache * concurrently. * * However, even when called without the folio lock or on a mapped folio, * this function can be used to detect unexpected references early (for example, * if it makes sense to even lock the folio and unmap it). * * The caller must add any reference (e.g., from folio_try_get()) it might be * holding itself to the result. * * Returns the expected folio refcount. */ static inline int folio_expected_ref_count(struct folio *folio) { const int order = folio_order(folio); int ref_count = 0; if (WARN_ON_ONCE(page_has_type(&folio->page) && !folio_test_hugetlb(folio))) return 0; /* One reference per page from the swapcache. */ ref_count += folio_test_swapcache(folio) << order; if (!folio_test_anon(folio)) { /* One reference per page from the pagecache. */ ref_count += !!folio->mapping << order; /* One reference from PG_private. */ ref_count += folio_test_private(folio); } /* One reference per page table mapping. */ return ref_count + folio_mapcount(folio); } #ifndef HAVE_ARCH_MAKE_PAGE_ACCESSIBLE static inline int arch_make_page_accessible(struct page *page) { return 0; } #endif #ifndef HAVE_ARCH_MAKE_FOLIO_ACCESSIBLE static inline int arch_make_folio_accessible(struct folio *folio) { int ret; long i, nr = folio_nr_pages(folio); for (i = 0; i < nr; i++) { ret = arch_make_page_accessible(folio_page(folio, i)); if (ret) break; } return ret; } #endif /* * Some inline functions in vmstat.h depend on page_zone() */ #include <linux/vmstat.h> static __always_inline void *lowmem_page_address(const struct page *page) { return page_to_virt(page); } #if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL) #define HASHED_PAGE_VIRTUAL #endif #if defined(WANT_PAGE_VIRTUAL) static inline void *page_address(const struct page *page) { return page->virtual; } static inline void set_page_address(struct page *page, void *address) { page->virtual = address; } #define page_address_init() do { } while(0) #endif #if defined(HASHED_PAGE_VIRTUAL) void *page_address(const struct page *page); void set_page_address(struct page *page, void *virtual); void page_address_init(void); #endif #if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_VIRTUAL) #define page_address(page) lowmem_page_address(page) #define set_page_address(page, address) do { } while(0) #define page_address_init() do { } while(0) #endif static inline void *folio_address(const struct folio *folio) { return page_address(&folio->page); } extern pgoff_t __page_file_index(struct page *page); /* * Return the pagecache index of the passed page. Regular pagecache pages * use ->index whereas swapcache pages use swp_offset(->private) */ static inline pgoff_t page_index(struct page *page) { if (unlikely(PageSwapCache(page))) return __page_file_index(page); return page->index; } /* * Return true only if the page has been allocated with * ALLOC_NO_WATERMARKS and the low watermark was not * met implying that the system is under some pressure. */ static inline bool page_is_pfmemalloc(const struct page *page) { /* * lru.next has bit 1 set if the page is allocated from the * pfmemalloc reserves. Callers may simply overwrite it if * they do not need to preserve that information. */ return (uintptr_t)page->lru.next & BIT(1); } /* * Return true only if the folio has been allocated with * ALLOC_NO_WATERMARKS and the low watermark was not * met implying that the system is under some pressure. */ static inline bool folio_is_pfmemalloc(const struct folio *folio) { /* * lru.next has bit 1 set if the page is allocated from the * pfmemalloc reserves. Callers may simply overwrite it if * they do not need to preserve that information. */ return (uintptr_t)folio->lru.next & BIT(1); } /* * Only to be called by the page allocator on a freshly allocated * page. */ static inline void set_page_pfmemalloc(struct page *page) { page->lru.next = (void *)BIT(1); } static inline void clear_page_pfmemalloc(struct page *page) { page->lru.next = NULL; } /* * Can be called by the pagefault handler when it gets a VM_FAULT_OOM. */ extern void pagefault_out_of_memory(void); #define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK) #define offset_in_thp(page, p) ((unsigned long)(p) & (thp_size(page) - 1)) #define offset_in_folio(folio, p) ((unsigned long)(p) & (folio_size(folio) - 1)) /* * Parameter block passed down to zap_pte_range in exceptional cases. */ struct zap_details { struct folio *single_folio; /* Locked folio to be unmapped */ bool even_cows; /* Zap COWed private pages too? */ zap_flags_t zap_flags; /* Extra flags for zapping */ }; /* * Whether to drop the pte markers, for example, the uffd-wp information for * file-backed memory. This should only be specified when we will completely * drop the page in the mm, either by truncation or unmapping of the vma. By * default, the flag is not set. */ #define ZAP_FLAG_DROP_MARKER ((__force zap_flags_t) BIT(0)) /* Set in unmap_vmas() to indicate a final unmap call. Only used by hugetlb */ #define ZAP_FLAG_UNMAP ((__force zap_flags_t) BIT(1)) #ifdef CONFIG_SCHED_MM_CID void sched_mm_cid_before_execve(struct task_struct *t); void sched_mm_cid_after_execve(struct task_struct *t); void sched_mm_cid_fork(struct task_struct *t); void sched_mm_cid_exit_signals(struct task_struct *t); static inline int task_mm_cid(struct task_struct *t) { return t->mm_cid; } #else static inline void sched_mm_cid_before_execve(struct task_struct *t) { } static inline void sched_mm_cid_after_execve(struct task_struct *t) { } static inline void sched_mm_cid_fork(struct task_struct *t) { } static inline void sched_mm_cid_exit_signals(struct task_struct *t) { } static inline int task_mm_cid(struct task_struct *t) { /* * Use the processor id as a fall-back when the mm cid feature is * disabled. This provides functional per-cpu data structure accesses * in user-space, althrough it won't provide the memory usage benefits. */ return raw_smp_processor_id(); } #endif #ifdef CONFIG_MMU extern bool can_do_mlock(void); #else static inline bool can_do_mlock(void) { return false; } #endif extern int user_shm_lock(size_t, struct ucounts *); extern void user_shm_unlock(size_t, struct ucounts *); struct folio *vm_normal_folio(struct vm_area_struct *vma, unsigned long addr, pte_t pte); struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr, pte_t pte); struct folio *vm_normal_folio_pmd(struct vm_area_struct *vma, unsigned long addr, pmd_t pmd); struct page *vm_normal_page_pmd(struct vm_area_struct *vma, unsigned long addr, pmd_t pmd); void zap_vma_ptes(struct vm_area_struct *vma, unsigned long address, unsigned long size); void zap_page_range_single(struct vm_area_struct *vma, unsigned long address, unsigned long size, struct zap_details *details); static inline void zap_vma_pages(struct vm_area_struct *vma) { zap_page_range_single(vma, vma->vm_start, vma->vm_end - vma->vm_start, NULL); } void unmap_vmas(struct mmu_gather *tlb, struct ma_state *mas, struct vm_area_struct *start_vma, unsigned long start, unsigned long end, unsigned long tree_end, bool mm_wr_locked); struct mmu_notifier_range; void free_pgd_range(struct mmu_gather *tlb, unsigned long addr, unsigned long end, unsigned long floor, unsigned long ceiling); int copy_page_range(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma); int follow_pte(struct mm_struct *mm, unsigned long address, pte_t **ptepp, spinlock_t **ptlp); int follow_pfn(struct vm_area_struct *vma, unsigned long address, unsigned long *pfn); int follow_phys(struct vm_area_struct *vma, unsigned long address, unsigned int flags, unsigned long *prot, resource_size_t *phys); int generic_access_phys(struct vm_area_struct *vma, unsigned long addr, void *buf, int len, int write); extern void truncate_pagecache(struct inode *inode, loff_t new); extern void truncate_setsize(struct inode *inode, loff_t newsize); void pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to); void truncate_pagecache_range(struct inode *inode, loff_t offset, loff_t end); int generic_error_remove_folio(struct address_space *mapping, struct folio *folio); struct vm_area_struct *lock_mm_and_find_vma(struct mm_struct *mm, unsigned long address, struct pt_regs *regs); #ifdef CONFIG_MMU extern vm_fault_t handle_mm_fault(struct vm_area_struct *vma, unsigned long address, unsigned int flags, struct pt_regs *regs); extern int fixup_user_fault(struct mm_struct *mm, unsigned long address, unsigned int fault_flags, bool *unlocked); void unmap_mapping_pages(struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows); void unmap_mapping_range(struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows); #else static inline vm_fault_t handle_mm_fault(struct vm_area_struct *vma, unsigned long address, unsigned int flags, struct pt_regs *regs) { /* should never happen if there's no MMU */ BUG(); return VM_FAULT_SIGBUS; } static inline int fixup_user_fault(struct mm_struct *mm, unsigned long address, unsigned int fault_flags, bool *unlocked) { /* should never happen if there's no MMU */ BUG(); return -EFAULT; } static inline void unmap_mapping_pages(struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows) { } static inline void unmap_mapping_range(struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows) { } #endif static inline void unmap_shared_mapping_range(struct address_space *mapping, loff_t const holebegin, loff_t const holelen) { unmap_mapping_range(mapping, holebegin, holelen, 0); } static inline struct vm_area_struct *vma_lookup(struct mm_struct *mm, unsigned long addr); extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, unsigned int gup_flags); extern int access_remote_vm(struct mm_struct *mm, unsigned long addr, void *buf, int len, unsigned int gup_flags); long get_user_pages_remote(struct mm_struct *mm, unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages, int *locked); long pin_user_pages_remote(struct mm_struct *mm, unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages, int *locked); /* * Retrieves a single page alongside its VMA. Does not support FOLL_NOWAIT. */ static inline struct page *get_user_page_vma_remote(struct mm_struct *mm, unsigned long addr, int gup_flags, struct vm_area_struct **vmap) { struct page *page; struct vm_area_struct *vma; int got; if (WARN_ON_ONCE(unlikely(gup_flags & FOLL_NOWAIT))) return ERR_PTR(-EINVAL); got = get_user_pages_remote(mm, addr, 1, gup_flags, &page, NULL); if (got < 0) return ERR_PTR(got); vma = vma_lookup(mm, addr); if (WARN_ON_ONCE(!vma)) { put_page(page); return ERR_PTR(-EINVAL); } *vmap = vma; return page; } long get_user_pages(unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages); long pin_user_pages(unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages); long get_user_pages_unlocked(unsigned long start, unsigned long nr_pages, struct page **pages, unsigned int gup_flags); long pin_user_pages_unlocked(unsigned long start, unsigned long nr_pages, struct page **pages, unsigned int gup_flags); int get_user_pages_fast(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages); int pin_user_pages_fast(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages); void folio_add_pin(struct folio *folio); int account_locked_vm(struct mm_struct *mm, unsigned long pages, bool inc); int __account_locked_vm(struct mm_struct *mm, unsigned long pages, bool inc, struct task_struct *task, bool bypass_rlim); struct kvec; struct page *get_dump_page(unsigned long addr); bool folio_mark_dirty(struct folio *folio); bool set_page_dirty(struct page *page); int set_page_dirty_lock(struct page *page); int get_cmdline(struct task_struct *task, char *buffer, int buflen); extern unsigned long move_page_tables(struct vm_area_struct *vma, unsigned long old_addr, struct vm_area_struct *new_vma, unsigned long new_addr, unsigned long len, bool need_rmap_locks, bool for_stack); /* * Flags used by change_protection(). For now we make it a bitmap so * that we can pass in multiple flags just like parameters. However * for now all the callers are only use one of the flags at the same * time. */ /* * Whether we should manually check if we can map individual PTEs writable, * because something (e.g., COW, uffd-wp) blocks that from happening for all * PTEs automatically in a writable mapping. */ #define MM_CP_TRY_CHANGE_WRITABLE (1UL << 0) /* Whether this protection change is for NUMA hints */ #define MM_CP_PROT_NUMA (1UL << 1) /* Whether this change is for write protecting */ #define MM_CP_UFFD_WP (1UL << 2) /* do wp */ #define MM_CP_UFFD_WP_RESOLVE (1UL << 3) /* Resolve wp */ #define MM_CP_UFFD_WP_ALL (MM_CP_UFFD_WP | \ MM_CP_UFFD_WP_RESOLVE) bool vma_needs_dirty_tracking(struct vm_area_struct *vma); int vma_wants_writenotify(struct vm_area_struct *vma, pgprot_t vm_page_prot); static inline bool vma_wants_manual_pte_write_upgrade(struct vm_area_struct *vma) { /* * We want to check manually if we can change individual PTEs writable * if we can't do that automatically for all PTEs in a mapping. For * private mappings, that's always the case when we have write * permissions as we properly have to handle COW. */ if (vma->vm_flags & VM_SHARED) return vma_wants_writenotify(vma, vma->vm_page_prot); return !!(vma->vm_flags & VM_WRITE); } bool can_change_pte_writable(struct vm_area_struct *vma, unsigned long addr, pte_t pte); extern long change_protection(struct mmu_gather *tlb, struct vm_area_struct *vma, unsigned long start, unsigned long end, unsigned long cp_flags); extern int mprotect_fixup(struct vma_iterator *vmi, struct mmu_gather *tlb, struct vm_area_struct *vma, struct vm_area_struct **pprev, unsigned long start, unsigned long end, unsigned long newflags); /* * doesn't attempt to fault and will return short. */ int get_user_pages_fast_only(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages); static inline bool get_user_page_fast_only(unsigned long addr, unsigned int gup_flags, struct page **pagep) { return get_user_pages_fast_only(addr, 1, gup_flags, pagep) == 1; } /* * per-process(per-mm_struct) statistics. */ static inline unsigned long get_mm_counter(struct mm_struct *mm, int member) { return percpu_counter_read_positive(&mm->rss_stat[member]); } static inline unsigned long get_mm_counter_sum(struct mm_struct *mm, int member) { return percpu_counter_sum_positive(&mm->rss_stat[member]); } void mm_trace_rss_stat(struct mm_struct *mm, int member); static inline void add_mm_counter(struct mm_struct *mm, int member, long value) { percpu_counter_add(&mm->rss_stat[member], value); mm_trace_rss_stat(mm, member); } static inline void inc_mm_counter(struct mm_struct *mm, int member) { percpu_counter_inc(&mm->rss_stat[member]); mm_trace_rss_stat(mm, member); } static inline void dec_mm_counter(struct mm_struct *mm, int member) { percpu_counter_dec(&mm->rss_stat[member]); mm_trace_rss_stat(mm, member); } /* Optimized variant when page is already known not to be PageAnon */ static inline int mm_counter_file(struct page *page) { if (PageSwapBacked(page)) return MM_SHMEMPAGES; return MM_FILEPAGES; } static inline int mm_counter(struct page *page) { if (PageAnon(page)) return MM_ANONPAGES; return mm_counter_file(page); } static inline unsigned long get_mm_rss(struct mm_struct *mm) { return get_mm_counter(mm, MM_FILEPAGES) + get_mm_counter(mm, MM_ANONPAGES) + get_mm_counter(mm, MM_SHMEMPAGES); } static inline unsigned long get_mm_hiwater_rss(struct mm_struct *mm) { return max(mm->hiwater_rss, get_mm_rss(mm)); } static inline unsigned long get_mm_hiwater_vm(struct mm_struct *mm) { return max(mm->hiwater_vm, mm->total_vm); } static inline void update_hiwater_rss(struct mm_struct *mm) { unsigned long _rss = get_mm_rss(mm); if ((mm)->hiwater_rss < _rss) (mm)->hiwater_rss = _rss; } static inline void update_hiwater_vm(struct mm_struct *mm) { if (mm->hiwater_vm < mm->total_vm) mm->hiwater_vm = mm->total_vm; } static inline void reset_mm_hiwater_rss(struct mm_struct *mm) { mm->hiwater_rss = get_mm_rss(mm); } static inline void setmax_mm_hiwater_rss(unsigned long *maxrss, struct mm_struct *mm) { unsigned long hiwater_rss = get_mm_hiwater_rss(mm); if (*maxrss < hiwater_rss) *maxrss = hiwater_rss; } #ifndef CONFIG_ARCH_HAS_PTE_SPECIAL static inline int pte_special(pte_t pte) { return 0; } static inline pte_t pte_mkspecial(pte_t pte) { return pte; } #endif #ifndef CONFIG_ARCH_HAS_PTE_DEVMAP static inline int pte_devmap(pte_t pte) { return 0; } #endif extern pte_t *__get_locked_pte(struct mm_struct *mm, unsigned long addr, spinlock_t **ptl); static inline pte_t *get_locked_pte(struct mm_struct *mm, unsigned long addr, spinlock_t **ptl) { pte_t *ptep; __cond_lock(*ptl, ptep = __get_locked_pte(mm, addr, ptl)); return ptep; } #ifdef __PAGETABLE_P4D_FOLDED static inline int __p4d_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address) { return 0; } #else int __p4d_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address); #endif #if defined(__PAGETABLE_PUD_FOLDED) || !defined(CONFIG_MMU) static inline int __pud_alloc(struct mm_struct *mm, p4d_t *p4d, unsigned long address) { return 0; } static inline void mm_inc_nr_puds(struct mm_struct *mm) {} static inline void mm_dec_nr_puds(struct mm_struct *mm) {} #else int __pud_alloc(struct mm_struct *mm, p4d_t *p4d, unsigned long address); static inline void mm_inc_nr_puds(struct mm_struct *mm) { if (mm_pud_folded(mm)) return; atomic_long_add(PTRS_PER_PUD * sizeof(pud_t), &mm->pgtables_bytes); } static inline void mm_dec_nr_puds(struct mm_struct *mm) { if (mm_pud_folded(mm)) return; atomic_long_sub(PTRS_PER_PUD * sizeof(pud_t), &mm->pgtables_bytes); } #endif #if defined(__PAGETABLE_PMD_FOLDED) || !defined(CONFIG_MMU) static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address) { return 0; } static inline void mm_inc_nr_pmds(struct mm_struct *mm) {} static inline void mm_dec_nr_pmds(struct mm_struct *mm) {} #else int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address); static inline void mm_inc_nr_pmds(struct mm_struct *mm) { if (mm_pmd_folded(mm)) return; atomic_long_add(PTRS_PER_PMD * sizeof(pmd_t), &mm->pgtables_bytes); } static inline void mm_dec_nr_pmds(struct mm_struct *mm) { if (mm_pmd_folded(mm)) return; atomic_long_sub(PTRS_PER_PMD * sizeof(pmd_t), &mm->pgtables_bytes); } #endif #ifdef CONFIG_MMU static inline void mm_pgtables_bytes_init(struct mm_struct *mm) { atomic_long_set(&mm->pgtables_bytes, 0); } static inline unsigned long mm_pgtables_bytes(const struct mm_struct *mm) { return atomic_long_read(&mm->pgtables_bytes); } static inline void mm_inc_nr_ptes(struct mm_struct *mm) { atomic_long_add(PTRS_PER_PTE * sizeof(pte_t), &mm->pgtables_bytes); } static inline void mm_dec_nr_ptes(struct mm_struct *mm) { atomic_long_sub(PTRS_PER_PTE * sizeof(pte_t), &mm->pgtables_bytes); } #else static inline void mm_pgtables_bytes_init(struct mm_struct *mm) {} static inline unsigned long mm_pgtables_bytes(const struct mm_struct *mm) { return 0; } static inline void mm_inc_nr_ptes(struct mm_struct *mm) {} static inline void mm_dec_nr_ptes(struct mm_struct *mm) {} #endif int __pte_alloc(struct mm_struct *mm, pmd_t *pmd); int __pte_alloc_kernel(pmd_t *pmd); #if defined(CONFIG_MMU) static inline p4d_t *p4d_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address) { return (unlikely(pgd_none(*pgd)) && __p4d_alloc(mm, pgd, address)) ? NULL : p4d_offset(pgd, address); } static inline pud_t *pud_alloc(struct mm_struct *mm, p4d_t *p4d, unsigned long address) { return (unlikely(p4d_none(*p4d)) && __pud_alloc(mm, p4d, address)) ? NULL : pud_offset(p4d, address); } static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address) { return (unlikely(pud_none(*pud)) && __pmd_alloc(mm, pud, address))? NULL: pmd_offset(pud, address); } #endif /* CONFIG_MMU */ static inline struct ptdesc *virt_to_ptdesc(const void *x) { return page_ptdesc(virt_to_page(x)); } static inline void *ptdesc_to_virt(const struct ptdesc *pt) { return page_to_virt(ptdesc_page(pt)); } static inline void *ptdesc_address(const struct ptdesc *pt) { return folio_address(ptdesc_folio(pt)); } static inline bool pagetable_is_reserved(struct ptdesc *pt) { return folio_test_reserved(ptdesc_folio(pt)); } /** * pagetable_alloc - Allocate pagetables * @gfp: GFP flags * @order: desired pagetable order * * pagetable_alloc allocates memory for page tables as well as a page table * descriptor to describe that memory. * * Return: The ptdesc describing the allocated page tables. */ static inline struct ptdesc *pagetable_alloc(gfp_t gfp, unsigned int order) { struct page *page = alloc_pages(gfp | __GFP_COMP, order); return page_ptdesc(page); } /** * pagetable_free - Free pagetables * @pt: The page table descriptor * * pagetable_free frees the memory of all page tables described by a page * table descriptor and the memory for the descriptor itself. */ static inline void pagetable_free(struct ptdesc *pt) { struct page *page = ptdesc_page(pt); __free_pages(page, compound_order(page)); } #if USE_SPLIT_PTE_PTLOCKS #if ALLOC_SPLIT_PTLOCKS void __init ptlock_cache_init(void); bool ptlock_alloc(struct ptdesc *ptdesc); void ptlock_free(struct ptdesc *ptdesc); static inline spinlock_t *ptlock_ptr(struct ptdesc *ptdesc) { return ptdesc->ptl; } #else /* ALLOC_SPLIT_PTLOCKS */ static inline void ptlock_cache_init(void) { } static inline bool ptlock_alloc(struct ptdesc *ptdesc) { return true; } static inline void ptlock_free(struct ptdesc *ptdesc) { } static inline spinlock_t *ptlock_ptr(struct ptdesc *ptdesc) { return &ptdesc->ptl; } #endif /* ALLOC_SPLIT_PTLOCKS */ static inline spinlock_t *pte_lockptr(struct mm_struct *mm, pmd_t *pmd) { return ptlock_ptr(page_ptdesc(pmd_page(*pmd))); } static inline bool ptlock_init(struct ptdesc *ptdesc) { /* * prep_new_page() initialize page->private (and therefore page->ptl) * with 0. Make sure nobody took it in use in between. * * It can happen if arch try to use slab for page table allocation: * slab code uses page->slab_cache, which share storage with page->ptl. */ VM_BUG_ON_PAGE(*(unsigned long *)&ptdesc->ptl, ptdesc_page(ptdesc)); if (!ptlock_alloc(ptdesc)) return false; spin_lock_init(ptlock_ptr(ptdesc)); return true; } #else /* !USE_SPLIT_PTE_PTLOCKS */ /* * We use mm->page_table_lock to guard all pagetable pages of the mm. */ static inline spinlock_t *pte_lockptr(struct mm_struct *mm, pmd_t *pmd) { return &mm->page_table_lock; } static inline void ptlock_cache_init(void) {} static inline bool ptlock_init(struct ptdesc *ptdesc) { return true; } static inline void ptlock_free(struct ptdesc *ptdesc) {} #endif /* USE_SPLIT_PTE_PTLOCKS */ static inline bool pagetable_pte_ctor(struct ptdesc *ptdesc) { struct folio *folio = ptdesc_folio(ptdesc); if (!ptlock_init(ptdesc)) return false; __folio_set_pgtable(folio); lruvec_stat_add_folio(folio, NR_PAGETABLE); return true; } static inline void pagetable_pte_dtor(struct ptdesc *ptdesc) { struct folio *folio = ptdesc_folio(ptdesc); ptlock_free(ptdesc); __folio_clear_pgtable(folio); lruvec_stat_sub_folio(folio, NR_PAGETABLE); } pte_t *__pte_offset_map(pmd_t *pmd, unsigned long addr, pmd_t *pmdvalp); static inline pte_t *pte_offset_map(pmd_t *pmd, unsigned long addr) { return __pte_offset_map(pmd, addr, NULL); } pte_t *__pte_offset_map_lock(struct mm_struct *mm, pmd_t *pmd, unsigned long addr, spinlock_t **ptlp); static inline pte_t *pte_offset_map_lock(struct mm_struct *mm, pmd_t *pmd, unsigned long addr, spinlock_t **ptlp) { pte_t *pte; __cond_lock(*ptlp, pte = __pte_offset_map_lock(mm, pmd, addr, ptlp)); return pte; } pte_t *pte_offset_map_nolock(struct mm_struct *mm, pmd_t *pmd, unsigned long addr, spinlock_t **ptlp); #define pte_unmap_unlock(pte, ptl) do { \ spin_unlock(ptl); \ pte_unmap(pte); \ } while (0) #define pte_alloc(mm, pmd) (unlikely(pmd_none(*(pmd))) && __pte_alloc(mm, pmd)) #define pte_alloc_map(mm, pmd, address) \ (pte_alloc(mm, pmd) ? NULL : pte_offset_map(pmd, address)) #define pte_alloc_map_lock(mm, pmd, address, ptlp) \ (pte_alloc(mm, pmd) ? \ NULL : pte_offset_map_lock(mm, pmd, address, ptlp)) #define pte_alloc_kernel(pmd, address) \ ((unlikely(pmd_none(*(pmd))) && __pte_alloc_kernel(pmd))? \ NULL: pte_offset_kernel(pmd, address)) #if USE_SPLIT_PMD_PTLOCKS static inline struct page *pmd_pgtable_page(pmd_t *pmd) { unsigned long mask = ~(PTRS_PER_PMD * sizeof(pmd_t) - 1); return virt_to_page((void *)((unsigned long) pmd & mask)); } static inline struct ptdesc *pmd_ptdesc(pmd_t *pmd) { return page_ptdesc(pmd_pgtable_page(pmd)); } static inline spinlock_t *pmd_lockptr(struct mm_struct *mm, pmd_t *pmd) { return ptlock_ptr(pmd_ptdesc(pmd)); } static inline bool pmd_ptlock_init(struct ptdesc *ptdesc) { #ifdef CONFIG_TRANSPARENT_HUGEPAGE ptdesc->pmd_huge_pte = NULL; #endif return ptlock_init(ptdesc); } static inline void pmd_ptlock_free(struct ptdesc *ptdesc) { #ifdef CONFIG_TRANSPARENT_HUGEPAGE VM_BUG_ON_PAGE(ptdesc->pmd_huge_pte, ptdesc_page(ptdesc)); #endif ptlock_free(ptdesc); } #define pmd_huge_pte(mm, pmd) (pmd_ptdesc(pmd)->pmd_huge_pte) #else static inline spinlock_t *pmd_lockptr(struct mm_struct *mm, pmd_t *pmd) { return &mm->page_table_lock; } static inline bool pmd_ptlock_init(struct ptdesc *ptdesc) { return true; } static inline void pmd_ptlock_free(struct ptdesc *ptdesc) {} #define pmd_huge_pte(mm, pmd) ((mm)->pmd_huge_pte) #endif static inline spinlock_t *pmd_lock(struct mm_struct *mm, pmd_t *pmd) { spinlock_t *ptl = pmd_lockptr(mm, pmd); spin_lock(ptl); return ptl; } static inline bool pagetable_pmd_ctor(struct ptdesc *ptdesc) { struct folio *folio = ptdesc_folio(ptdesc); if (!pmd_ptlock_init(ptdesc)) return false; __folio_set_pgtable(folio); ptdesc_pmd_pts_init(ptdesc); lruvec_stat_add_folio(folio, NR_PAGETABLE); return true; } static inline void pagetable_pmd_dtor(struct ptdesc *ptdesc) { struct folio *folio = ptdesc_folio(ptdesc); pmd_ptlock_free(ptdesc); __folio_clear_pgtable(folio); lruvec_stat_sub_folio(folio, NR_PAGETABLE); } /* * No scalability reason to split PUD locks yet, but follow the same pattern * as the PMD locks to make it easier if we decide to. The VM should not be * considered ready to switch to split PUD locks yet; there may be places * which need to be converted from page_table_lock. */ static inline spinlock_t *pud_lockptr(struct mm_struct *mm, pud_t *pud) { return &mm->page_table_lock; } static inline spinlock_t *pud_lock(struct mm_struct *mm, pud_t *pud) { spinlock_t *ptl = pud_lockptr(mm, pud); spin_lock(ptl); return ptl; } static inline void pagetable_pud_ctor(struct ptdesc *ptdesc) { struct folio *folio = ptdesc_folio(ptdesc); __folio_set_pgtable(folio); lruvec_stat_add_folio(folio, NR_PAGETABLE); } static inline void pagetable_pud_dtor(struct ptdesc *ptdesc) { struct folio *folio = ptdesc_folio(ptdesc); __folio_clear_pgtable(folio); lruvec_stat_sub_folio(folio, NR_PAGETABLE); } extern void __init pagecache_init(void); extern void free_initmem(void); /* * Free reserved pages within range [PAGE_ALIGN(start), end & PAGE_MASK) * into the buddy system. The freed pages will be poisoned with pattern * "poison" if it's within range [0, UCHAR_MAX]. * Return pages freed into the buddy system. */ extern unsigned long free_reserved_area(void *start, void *end, int poison, const char *s); extern void adjust_managed_page_count(struct page *page, long count); extern void reserve_bootmem_region(phys_addr_t start, phys_addr_t end, int nid); /* Free the reserved page into the buddy system, so it gets managed. */ static inline void free_reserved_page(struct page *page) { ClearPageReserved(page); init_page_count(page); __free_page(page); adjust_managed_page_count(page, 1); } #define free_highmem_page(page) free_reserved_page(page) static inline void mark_page_reserved(struct page *page) { SetPageReserved(page); adjust_managed_page_count(page, -1); } static inline void free_reserved_ptdesc(struct ptdesc *pt) { free_reserved_page(ptdesc_page(pt)); } /* * Default method to free all the __init memory into the buddy system. * The freed pages will be poisoned with pattern "poison" if it's within * range [0, UCHAR_MAX]. * Return pages freed into the buddy system. */ static inline unsigned long free_initmem_default(int poison) { extern char __init_begin[], __init_end[]; return free_reserved_area(&__init_begin, &__init_end, poison, "unused kernel image (initmem)"); } static inline unsigned long get_num_physpages(void) { int nid; unsigned long phys_pages = 0; for_each_online_node(nid) phys_pages += node_present_pages(nid); return phys_pages; } /* * Using memblock node mappings, an architecture may initialise its * zones, allocate the backing mem_map and account for memory holes in an * architecture independent manner. * * An architecture is expected to register range of page frames backed by * physical memory with memblock_add[_node]() before calling * free_area_init() passing in the PFN each zone ends at. At a basic * usage, an architecture is expected to do something like * * unsigned long max_zone_pfns[MAX_NR_ZONES] = {max_dma, max_normal_pfn, * max_highmem_pfn}; * for_each_valid_physical_page_range() * memblock_add_node(base, size, nid, MEMBLOCK_NONE) * free_area_init(max_zone_pfns); */ void free_area_init(unsigned long *max_zone_pfn); unsigned long node_map_pfn_alignment(void); unsigned long __absent_pages_in_range(int nid, unsigned long start_pfn, unsigned long end_pfn); extern unsigned long absent_pages_in_range(unsigned long start_pfn, unsigned long end_pfn); extern void get_pfn_range_for_nid(unsigned int nid, unsigned long *start_pfn, unsigned long *end_pfn); #ifndef CONFIG_NUMA static inline int early_pfn_to_nid(unsigned long pfn) { return 0; } #else /* please see mm/page_alloc.c */ extern int __meminit early_pfn_to_nid(unsigned long pfn); #endif extern void set_dma_reserve(unsigned long new_dma_reserve); extern void mem_init(void); extern void __init mmap_init(void); extern void __show_mem(unsigned int flags, nodemask_t *nodemask, int max_zone_idx); static inline void show_mem(void) { __show_mem(0, NULL, MAX_NR_ZONES - 1); } extern long si_mem_available(void); extern void si_meminfo(struct sysinfo * val); extern void si_meminfo_node(struct sysinfo *val, int nid); #ifdef __HAVE_ARCH_RESERVED_KERNEL_PAGES extern unsigned long arch_reserved_kernel_pages(void); #endif extern __printf(3, 4) void warn_alloc(gfp_t gfp_mask, nodemask_t *nodemask, const char *fmt, ...); extern void setup_per_cpu_pageset(void); /* nommu.c */ extern atomic_long_t mmap_pages_allocated; extern int nommu_shrink_inode_mappings(struct inode *, size_t, size_t); /* interval_tree.c */ void vma_interval_tree_insert(struct vm_area_struct *node, struct rb_root_cached *root); void vma_interval_tree_insert_after(struct vm_area_struct *node, struct vm_area_struct *prev, struct rb_root_cached *root); void vma_interval_tree_remove(struct vm_area_struct *node, struct rb_root_cached *root); struct vm_area_struct *vma_interval_tree_iter_first(struct rb_root_cached *root, unsigned long start, unsigned long last); struct vm_area_struct *vma_interval_tree_iter_next(struct vm_area_struct *node, unsigned long start, unsigned long last); #define vma_interval_tree_foreach(vma, root, start, last) \ for (vma = vma_interval_tree_iter_first(root, start, last); \ vma; vma = vma_interval_tree_iter_next(vma, start, last)) void anon_vma_interval_tree_insert(struct anon_vma_chain *node, struct rb_root_cached *root); void anon_vma_interval_tree_remove(struct anon_vma_chain *node, struct rb_root_cached *root); struct anon_vma_chain * anon_vma_interval_tree_iter_first(struct rb_root_cached *root, unsigned long start, unsigned long last); struct anon_vma_chain *anon_vma_interval_tree_iter_next( struct anon_vma_chain *node, unsigned long start, unsigned long last); #ifdef CONFIG_DEBUG_VM_RB void anon_vma_interval_tree_verify(struct anon_vma_chain *node); #endif #define anon_vma_interval_tree_foreach(avc, root, start, last) \ for (avc = anon_vma_interval_tree_iter_first(root, start, last); \ avc; avc = anon_vma_interval_tree_iter_next(avc, start, last)) /* mmap.c */ extern int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin); extern int vma_expand(struct vma_iterator *vmi, struct vm_area_struct *vma, unsigned long start, unsigned long end, pgoff_t pgoff, struct vm_area_struct *next); extern int vma_shrink(struct vma_iterator *vmi, struct vm_area_struct *vma, unsigned long start, unsigned long end, pgoff_t pgoff); extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *); extern int insert_vm_struct(struct mm_struct *, struct vm_area_struct *); extern void unlink_file_vma(struct vm_area_struct *); extern struct vm_area_struct *copy_vma(struct vm_area_struct **, unsigned long addr, unsigned long len, pgoff_t pgoff, bool *need_rmap_locks); extern void exit_mmap(struct mm_struct *); struct vm_area_struct *vma_modify(struct vma_iterator *vmi, struct vm_area_struct *prev, struct vm_area_struct *vma, unsigned long start, unsigned long end, unsigned long vm_flags, struct mempolicy *policy, struct vm_userfaultfd_ctx uffd_ctx, struct anon_vma_name *anon_name); /* We are about to modify the VMA's flags. */ static inline struct vm_area_struct *vma_modify_flags(struct vma_iterator *vmi, struct vm_area_struct *prev, struct vm_area_struct *vma, unsigned long start, unsigned long end, unsigned long new_flags) { return vma_modify(vmi, prev, vma, start, end, new_flags, vma_policy(vma), vma->vm_userfaultfd_ctx, anon_vma_name(vma)); } /* We are about to modify the VMA's flags and/or anon_name. */ static inline struct vm_area_struct *vma_modify_flags_name(struct vma_iterator *vmi, struct vm_area_struct *prev, struct vm_area_struct *vma, unsigned long start, unsigned long end, unsigned long new_flags, struct anon_vma_name *new_name) { return vma_modify(vmi, prev, vma, start, end, new_flags, vma_policy(vma), vma->vm_userfaultfd_ctx, new_name); } /* We are about to modify the VMA's memory policy. */ static inline struct vm_area_struct *vma_modify_policy(struct vma_iterator *vmi, struct vm_area_struct *prev, struct vm_area_struct *vma, unsigned long start, unsigned long end, struct mempolicy *new_pol) { return vma_modify(vmi, prev, vma, start, end, vma->vm_flags, new_pol, vma->vm_userfaultfd_ctx, anon_vma_name(vma)); } /* We are about to modify the VMA's flags and/or uffd context. */ static inline struct vm_area_struct *vma_modify_flags_uffd(struct vma_iterator *vmi, struct vm_area_struct *prev, struct vm_area_struct *vma, unsigned long start, unsigned long end, unsigned long new_flags, struct vm_userfaultfd_ctx new_ctx) { return vma_modify(vmi, prev, vma, start, end, new_flags, vma_policy(vma), new_ctx, anon_vma_name(vma)); } static inline int check_data_rlimit(unsigned long rlim, unsigned long new, unsigned long start, unsigned long end_data, unsigned long start_data) { if (rlim < RLIM_INFINITY) { if (((new - start) + (end_data - start_data)) > rlim) return -ENOSPC; } return 0; } extern int mm_take_all_locks(struct mm_struct *mm); extern void mm_drop_all_locks(struct mm_struct *mm); extern int set_mm_exe_file(struct mm_struct *mm, struct file *new_exe_file); extern int replace_mm_exe_file(struct mm_struct *mm, struct file *new_exe_file); extern struct file *get_mm_exe_file(struct mm_struct *mm); extern struct file *get_task_exe_file(struct task_struct *task); extern bool may_expand_vm(struct mm_struct *, vm_flags_t, unsigned long npages); extern void vm_stat_account(struct mm_struct *, vm_flags_t, long npages); extern bool vma_is_special_mapping(const struct vm_area_struct *vma, const struct vm_special_mapping *sm); extern struct vm_area_struct *_install_special_mapping(struct mm_struct *mm, unsigned long addr, unsigned long len, unsigned long flags, const struct vm_special_mapping *spec); /* This is an obsolete alternative to _install_special_mapping. */ extern int install_special_mapping(struct mm_struct *mm, unsigned long addr, unsigned long len, unsigned long flags, struct page **pages); unsigned long randomize_stack_top(unsigned long stack_top); unsigned long randomize_page(unsigned long start, unsigned long range); extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); extern unsigned long mmap_region(struct file *file, unsigned long addr, unsigned long len, vm_flags_t vm_flags, unsigned long pgoff, struct list_head *uf); extern unsigned long do_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, vm_flags_t vm_flags, unsigned long pgoff, unsigned long *populate, struct list_head *uf); extern int do_vmi_munmap(struct vma_iterator *vmi, struct mm_struct *mm, unsigned long start, size_t len, struct list_head *uf, bool unlock); extern int do_munmap(struct mm_struct *, unsigned long, size_t, struct list_head *uf); extern int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int behavior); #ifdef CONFIG_MMU extern int do_vma_munmap(struct vma_iterator *vmi, struct vm_area_struct *vma, unsigned long start, unsigned long end, struct list_head *uf, bool unlock); extern int __mm_populate(unsigned long addr, unsigned long len, int ignore_errors); static inline void mm_populate(unsigned long addr, unsigned long len) { /* Ignore errors */ (void) __mm_populate(addr, len, 1); } #else static inline void mm_populate(unsigned long addr, unsigned long len) {} #endif /* This takes the mm semaphore itself */ extern int __must_check vm_brk_flags(unsigned long, unsigned long, unsigned long); extern int vm_munmap(unsigned long, size_t); extern unsigned long __must_check vm_mmap(struct file *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); struct vm_unmapped_area_info { #define VM_UNMAPPED_AREA_TOPDOWN 1 unsigned long flags; unsigned long length; unsigned long low_limit; unsigned long high_limit; unsigned long align_mask; unsigned long align_offset; }; extern unsigned long vm_unmapped_area(struct vm_unmapped_area_info *info); /* truncate.c */ extern void truncate_inode_pages(struct address_space *, loff_t); extern void truncate_inode_pages_range(struct address_space *, loff_t lstart, loff_t lend); extern void truncate_inode_pages_final(struct address_space *); /* generic vm_area_ops exported for stackable file systems */ extern vm_fault_t filemap_fault(struct vm_fault *vmf); extern vm_fault_t filemap_map_pages(struct vm_fault *vmf, pgoff_t start_pgoff, pgoff_t end_pgoff); extern vm_fault_t filemap_page_mkwrite(struct vm_fault *vmf); extern unsigned long stack_guard_gap; /* Generic expand stack which grows the stack according to GROWS{UP,DOWN} */ int expand_stack_locked(struct vm_area_struct *vma, unsigned long address); struct vm_area_struct *expand_stack(struct mm_struct * mm, unsigned long addr); /* CONFIG_STACK_GROWSUP still needs to grow downwards at some places */ int expand_downwards(struct vm_area_struct *vma, unsigned long address); /* Look up the first VMA which satisfies addr < vm_end, NULL if none. */ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr); extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr, struct vm_area_struct **pprev); /* * Look up the first VMA which intersects the interval [start_addr, end_addr) * NULL if none. Assume start_addr < end_addr. */ struct vm_area_struct *find_vma_intersection(struct mm_struct *mm, unsigned long start_addr, unsigned long end_addr); /** * vma_lookup() - Find a VMA at a specific address * @mm: The process address space. * @addr: The user address. * * Return: The vm_area_struct at the given address, %NULL otherwise. */ static inline struct vm_area_struct *vma_lookup(struct mm_struct *mm, unsigned long addr) { return mtree_load(&mm->mm_mt, addr); } static inline unsigned long stack_guard_start_gap(struct vm_area_struct *vma) { if (vma->vm_flags & VM_GROWSDOWN) return stack_guard_gap; /* See reasoning around the VM_SHADOW_STACK definition */ if (vma->vm_flags & VM_SHADOW_STACK) return PAGE_SIZE; return 0; } static inline unsigned long vm_start_gap(struct vm_area_struct *vma) { unsigned long gap = stack_guard_start_gap(vma); unsigned long vm_start = vma->vm_start; vm_start -= gap; if (vm_start > vma->vm_start) vm_start = 0; return vm_start; } static inline unsigned long vm_end_gap(struct vm_area_struct *vma) { unsigned long vm_end = vma->vm_end; if (vma->vm_flags & VM_GROWSUP) { vm_end += stack_guard_gap; if (vm_end < vma->vm_end) vm_end = -PAGE_SIZE; } return vm_end; } static inline unsigned long vma_pages(struct vm_area_struct *vma) { return (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; } /* Look up the first VMA which exactly match the interval vm_start ... vm_end */ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm, unsigned long vm_start, unsigned long vm_end) { struct vm_area_struct *vma = vma_lookup(mm, vm_start); if (vma && (vma->vm_start != vm_start || vma->vm_end != vm_end)) vma = NULL; return vma; } static inline bool range_in_vma(struct vm_area_struct *vma, unsigned long start, unsigned long end) { return (vma && vma->vm_start <= start && end <= vma->vm_end); } #ifdef CONFIG_MMU pgprot_t vm_get_page_prot(unsigned long vm_flags); void vma_set_page_prot(struct vm_area_struct *vma); #else static inline pgprot_t vm_get_page_prot(unsigned long vm_flags) { return __pgprot(0); } static inline void vma_set_page_prot(struct vm_area_struct *vma) { vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); } #endif void vma_set_file(struct vm_area_struct *vma, struct file *file); #ifdef CONFIG_NUMA_BALANCING unsigned long change_prot_numa(struct vm_area_struct *vma, unsigned long start, unsigned long end); #endif struct vm_area_struct *find_extend_vma_locked(struct mm_struct *, unsigned long addr); int remap_pfn_range(struct vm_area_struct *, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t); int remap_pfn_range_notrack(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t prot); int vm_insert_page(struct vm_area_struct *, unsigned long addr, struct page *); int vm_insert_pages(struct vm_area_struct *vma, unsigned long addr, struct page **pages, unsigned long *num); int vm_map_pages(struct vm_area_struct *vma, struct page **pages, unsigned long num); int vm_map_pages_zero(struct vm_area_struct *vma, struct page **pages, unsigned long num); vm_fault_t vmf_insert_pfn(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn); vm_fault_t vmf_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, pgprot_t pgprot); vm_fault_t vmf_insert_mixed(struct vm_area_struct *vma, unsigned long addr, pfn_t pfn); vm_fault_t vmf_insert_mixed_mkwrite(struct vm_area_struct *vma, unsigned long addr, pfn_t pfn); int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len); static inline vm_fault_t vmf_insert_page(struct vm_area_struct *vma, unsigned long addr, struct page *page) { int err = vm_insert_page(vma, addr, page); if (err == -ENOMEM) return VM_FAULT_OOM; if (err < 0 && err != -EBUSY) return VM_FAULT_SIGBUS; return VM_FAULT_NOPAGE; } #ifndef io_remap_pfn_range static inline int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t prot) { return remap_pfn_range(vma, addr, pfn, size, pgprot_decrypted(prot)); } #endif static inline vm_fault_t vmf_error(int err) { if (err == -ENOMEM) return VM_FAULT_OOM; else if (err == -EHWPOISON) return VM_FAULT_HWPOISON; return VM_FAULT_SIGBUS; } /* * Convert errno to return value for ->page_mkwrite() calls. * * This should eventually be merged with vmf_error() above, but will need a * careful audit of all vmf_error() callers. */ static inline vm_fault_t vmf_fs_error(int err) { if (err == 0) return VM_FAULT_LOCKED; if (err == -EFAULT || err == -EAGAIN) return VM_FAULT_NOPAGE; if (err == -ENOMEM) return VM_FAULT_OOM; /* -ENOSPC, -EDQUOT, -EIO ... */ return VM_FAULT_SIGBUS; } struct page *follow_page(struct vm_area_struct *vma, unsigned long address, unsigned int foll_flags); static inline int vm_fault_to_errno(vm_fault_t vm_fault, int foll_flags) { if (vm_fault & VM_FAULT_OOM) return -ENOMEM; if (vm_fault & (VM_FAULT_HWPOISON | VM_FAULT_HWPOISON_LARGE)) return (foll_flags & FOLL_HWPOISON) ? -EHWPOISON : -EFAULT; if (vm_fault & (VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV)) return -EFAULT; return 0; } /* * Indicates whether GUP can follow a PROT_NONE mapped page, or whether * a (NUMA hinting) fault is required. */ static inline bool gup_can_follow_protnone(struct vm_area_struct *vma, unsigned int flags) { /* * If callers don't want to honor NUMA hinting faults, no need to * determine if we would actually have to trigger a NUMA hinting fault. */ if (!(flags & FOLL_HONOR_NUMA_FAULT)) return true; /* * NUMA hinting faults don't apply in inaccessible (PROT_NONE) VMAs. * * Requiring a fault here even for inaccessible VMAs would mean that * FOLL_FORCE cannot make any progress, because handle_mm_fault() * refuses to process NUMA hinting faults in inaccessible VMAs. */ return !vma_is_accessible(vma); } typedef int (*pte_fn_t)(pte_t *pte, unsigned long addr, void *data); extern int apply_to_page_range(struct mm_struct *mm, unsigned long address, unsigned long size, pte_fn_t fn, void *data); extern int apply_to_existing_page_range(struct mm_struct *mm, unsigned long address, unsigned long size, pte_fn_t fn, void *data); #ifdef CONFIG_PAGE_POISONING extern void __kernel_poison_pages(struct page *page, int numpages); extern void __kernel_unpoison_pages(struct page *page, int numpages); extern bool _page_poisoning_enabled_early; DECLARE_STATIC_KEY_FALSE(_page_poisoning_enabled); static inline bool page_poisoning_enabled(void) { return _page_poisoning_enabled_early; } /* * For use in fast paths after init_mem_debugging() has run, or when a * false negative result is not harmful when called too early. */ static inline bool page_poisoning_enabled_static(void) { return static_branch_unlikely(&_page_poisoning_enabled); } static inline void kernel_poison_pages(struct page *page, int numpages) { if (page_poisoning_enabled_static()) __kernel_poison_pages(page, numpages); } static inline void kernel_unpoison_pages(struct page *page, int numpages) { if (page_poisoning_enabled_static()) __kernel_unpoison_pages(page, numpages); } #else static inline bool page_poisoning_enabled(void) { return false; } static inline bool page_poisoning_enabled_static(void) { return false; } static inline void __kernel_poison_pages(struct page *page, int nunmpages) { } static inline void kernel_poison_pages(struct page *page, int numpages) { } static inline void kernel_unpoison_pages(struct page *page, int numpages) { } #endif DECLARE_STATIC_KEY_MAYBE(CONFIG_INIT_ON_ALLOC_DEFAULT_ON, init_on_alloc); static inline bool want_init_on_alloc(gfp_t flags) { if (static_branch_maybe(CONFIG_INIT_ON_ALLOC_DEFAULT_ON, &init_on_alloc)) return true; return flags & __GFP_ZERO; } DECLARE_STATIC_KEY_MAYBE(CONFIG_INIT_ON_FREE_DEFAULT_ON, init_on_free); static inline bool want_init_on_free(void) { return static_branch_maybe(CONFIG_INIT_ON_FREE_DEFAULT_ON, &init_on_free); } extern bool _debug_pagealloc_enabled_early; DECLARE_STATIC_KEY_FALSE(_debug_pagealloc_enabled); static inline bool debug_pagealloc_enabled(void) { return IS_ENABLED(CONFIG_DEBUG_PAGEALLOC) && _debug_pagealloc_enabled_early; } /* * For use in fast paths after mem_debugging_and_hardening_init() has run, * or when a false negative result is not harmful when called too early. */ static inline bool debug_pagealloc_enabled_static(void) { if (!IS_ENABLED(CONFIG_DEBUG_PAGEALLOC)) return false; return static_branch_unlikely(&_debug_pagealloc_enabled); } /* * To support DEBUG_PAGEALLOC architecture must ensure that * __kernel_map_pages() never fails */ extern void __kernel_map_pages(struct page *page, int numpages, int enable); #ifdef CONFIG_DEBUG_PAGEALLOC static inline void debug_pagealloc_map_pages(struct page *page, int numpages) { if (debug_pagealloc_enabled_static()) __kernel_map_pages(page, numpages, 1); } static inline void debug_pagealloc_unmap_pages(struct page *page, int numpages) { if (debug_pagealloc_enabled_static()) __kernel_map_pages(page, numpages, 0); } extern unsigned int _debug_guardpage_minorder; DECLARE_STATIC_KEY_FALSE(_debug_guardpage_enabled); static inline unsigned int debug_guardpage_minorder(void) { return _debug_guardpage_minorder; } static inline bool debug_guardpage_enabled(void) { return static_branch_unlikely(&_debug_guardpage_enabled); } static inline bool page_is_guard(struct page *page) { if (!debug_guardpage_enabled()) return false; return PageGuard(page); } bool __set_page_guard(struct zone *zone, struct page *page, unsigned int order, int migratetype); static inline bool set_page_guard(struct zone *zone, struct page *page, unsigned int order, int migratetype) { if (!debug_guardpage_enabled()) return false; return __set_page_guard(zone, page, order, migratetype); } void __clear_page_guard(struct zone *zone, struct page *page, unsigned int order, int migratetype); static inline void clear_page_guard(struct zone *zone, struct page *page, unsigned int order, int migratetype) { if (!debug_guardpage_enabled()) return; __clear_page_guard(zone, page, order, migratetype); } #else /* CONFIG_DEBUG_PAGEALLOC */ static inline void debug_pagealloc_map_pages(struct page *page, int numpages) {} static inline void debug_pagealloc_unmap_pages(struct page *page, int numpages) {} static inline unsigned int debug_guardpage_minorder(void) { return 0; } static inline bool debug_guardpage_enabled(void) { return false; } static inline bool page_is_guard(struct page *page) { return false; } static inline bool set_page_guard(struct zone *zone, struct page *page, unsigned int order, int migratetype) { return false; } static inline void clear_page_guard(struct zone *zone, struct page *page, unsigned int order, int migratetype) {} #endif /* CONFIG_DEBUG_PAGEALLOC */ #ifdef __HAVE_ARCH_GATE_AREA extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm); extern int in_gate_area_no_mm(unsigned long addr); extern int in_gate_area(struct mm_struct *mm, unsigned long addr); #else static inline struct vm_area_struct *get_gate_vma(struct mm_struct *mm) { return NULL; } static inline int in_gate_area_no_mm(unsigned long addr) { return 0; } static inline int in_gate_area(struct mm_struct *mm, unsigned long addr) { return 0; } #endif /* __HAVE_ARCH_GATE_AREA */ extern bool process_shares_mm(struct task_struct *p, struct mm_struct *mm); #ifdef CONFIG_SYSCTL extern int sysctl_drop_caches; int drop_caches_sysctl_handler(struct ctl_table *, int, void *, size_t *, loff_t *); #endif void drop_slab(void); #ifndef CONFIG_MMU #define randomize_va_space 0 #else extern int randomize_va_space; #endif const char * arch_vma_name(struct vm_area_struct *vma); #ifdef CONFIG_MMU void print_vma_addr(char *prefix, unsigned long rip); #else static inline void print_vma_addr(char *prefix, unsigned long rip) { } #endif void *sparse_buffer_alloc(unsigned long size); struct page * __populate_section_memmap(unsigned long pfn, unsigned long nr_pages, int nid, struct vmem_altmap *altmap, struct dev_pagemap *pgmap); void pmd_init(void *addr); void pud_init(void *addr); pgd_t *vmemmap_pgd_populate(unsigned long addr, int node); p4d_t *vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node); pud_t *vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node); pmd_t *vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node); pte_t *vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node, struct vmem_altmap *altmap, struct page *reuse); void *vmemmap_alloc_block(unsigned long size, int node); struct vmem_altmap; void *vmemmap_alloc_block_buf(unsigned long size, int node, struct vmem_altmap *altmap); void vmemmap_verify(pte_t *, int, unsigned long, unsigned long); void vmemmap_set_pmd(pmd_t *pmd, void *p, int node, unsigned long addr, unsigned long next); int vmemmap_check_pmd(pmd_t *pmd, int node, unsigned long addr, unsigned long next); int vmemmap_populate_basepages(unsigned long start, unsigned long end, int node, struct vmem_altmap *altmap); int vmemmap_populate_hugepages(unsigned long start, unsigned long end, int node, struct vmem_altmap *altmap); int vmemmap_populate(unsigned long start, unsigned long end, int node, struct vmem_altmap *altmap); void vmemmap_populate_print_last(void); #ifdef CONFIG_MEMORY_HOTPLUG void vmemmap_free(unsigned long start, unsigned long end, struct vmem_altmap *altmap); #endif #ifdef CONFIG_SPARSEMEM_VMEMMAP static inline unsigned long vmem_altmap_offset(struct vmem_altmap *altmap) { /* number of pfns from base where pfn_to_page() is valid */ if (altmap) return altmap->reserve + altmap->free; return 0; } static inline void vmem_altmap_free(struct vmem_altmap *altmap, unsigned long nr_pfns) { altmap->alloc -= nr_pfns; } #else static inline unsigned long vmem_altmap_offset(struct vmem_altmap *altmap) { return 0; } static inline void vmem_altmap_free(struct vmem_altmap *altmap, unsigned long nr_pfns) { } #endif #define VMEMMAP_RESERVE_NR 2 #ifdef CONFIG_ARCH_WANT_OPTIMIZE_DAX_VMEMMAP static inline bool __vmemmap_can_optimize(struct vmem_altmap *altmap, struct dev_pagemap *pgmap) { unsigned long nr_pages; unsigned long nr_vmemmap_pages; if (!pgmap || !is_power_of_2(sizeof(struct page))) return false; nr_pages = pgmap_vmemmap_nr(pgmap); nr_vmemmap_pages = ((nr_pages * sizeof(struct page)) >> PAGE_SHIFT); /* * For vmemmap optimization with DAX we need minimum 2 vmemmap * pages. See layout diagram in Documentation/mm/vmemmap_dedup.rst */ return !altmap && (nr_vmemmap_pages > VMEMMAP_RESERVE_NR); } /* * If we don't have an architecture override, use the generic rule */ #ifndef vmemmap_can_optimize #define vmemmap_can_optimize __vmemmap_can_optimize #endif #else static inline bool vmemmap_can_optimize(struct vmem_altmap *altmap, struct dev_pagemap *pgmap) { return false; } #endif void register_page_bootmem_memmap(unsigned long section_nr, struct page *map, unsigned long nr_pages); enum mf_flags { MF_COUNT_INCREASED = 1 << 0, MF_ACTION_REQUIRED = 1 << 1, MF_MUST_KILL = 1 << 2, MF_SOFT_OFFLINE = 1 << 3, MF_UNPOISON = 1 << 4, MF_SW_SIMULATED = 1 << 5, MF_NO_RETRY = 1 << 6, MF_MEM_PRE_REMOVE = 1 << 7, }; int mf_dax_kill_procs(struct address_space *mapping, pgoff_t index, unsigned long count, int mf_flags); extern int memory_failure(unsigned long pfn, int flags); extern void memory_failure_queue_kick(int cpu); extern int unpoison_memory(unsigned long pfn); extern void shake_page(struct page *p); extern atomic_long_t num_poisoned_pages __read_mostly; extern int soft_offline_page(unsigned long pfn, int flags); #ifdef CONFIG_MEMORY_FAILURE /* * Sysfs entries for memory failure handling statistics. */ extern const struct attribute_group memory_failure_attr_group; extern void memory_failure_queue(unsigned long pfn, int flags); extern int __get_huge_page_for_hwpoison(unsigned long pfn, int flags, bool *migratable_cleared); void num_poisoned_pages_inc(unsigned long pfn); void num_poisoned_pages_sub(unsigned long pfn, long i); struct task_struct *task_early_kill(struct task_struct *tsk, int force_early); #else static inline void memory_failure_queue(unsigned long pfn, int flags) { } static inline int __get_huge_page_for_hwpoison(unsigned long pfn, int flags, bool *migratable_cleared) { return 0; } static inline void num_poisoned_pages_inc(unsigned long pfn) { } static inline void num_poisoned_pages_sub(unsigned long pfn, long i) { } #endif #if defined(CONFIG_MEMORY_FAILURE) && defined(CONFIG_KSM) void add_to_kill_ksm(struct task_struct *tsk, struct page *p, struct vm_area_struct *vma, struct list_head *to_kill, unsigned long ksm_addr); #endif #if defined(CONFIG_MEMORY_FAILURE) && defined(CONFIG_MEMORY_HOTPLUG) extern void memblk_nr_poison_inc(unsigned long pfn); extern void memblk_nr_poison_sub(unsigned long pfn, long i); #else static inline void memblk_nr_poison_inc(unsigned long pfn) { } static inline void memblk_nr_poison_sub(unsigned long pfn, long i) { } #endif #ifndef arch_memory_failure static inline int arch_memory_failure(unsigned long pfn, int flags) { return -ENXIO; } #endif #ifndef arch_is_platform_page static inline bool arch_is_platform_page(u64 paddr) { return false; } #endif /* * Error handlers for various types of pages. */ enum mf_result { MF_IGNORED, /* Error: cannot be handled */ MF_FAILED, /* Error: handling failed */ MF_DELAYED, /* Will be handled later */ MF_RECOVERED, /* Successfully recovered */ }; enum mf_action_page_type { MF_MSG_KERNEL, MF_MSG_KERNEL_HIGH_ORDER, MF_MSG_SLAB, MF_MSG_DIFFERENT_COMPOUND, MF_MSG_HUGE, MF_MSG_FREE_HUGE, MF_MSG_GET_HWPOISON, MF_MSG_UNMAP_FAILED, MF_MSG_DIRTY_SWAPCACHE, MF_MSG_CLEAN_SWAPCACHE, MF_MSG_DIRTY_MLOCKED_LRU, MF_MSG_CLEAN_MLOCKED_LRU, MF_MSG_DIRTY_UNEVICTABLE_LRU, MF_MSG_CLEAN_UNEVICTABLE_LRU, MF_MSG_DIRTY_LRU, MF_MSG_CLEAN_LRU, MF_MSG_TRUNCATED_LRU, MF_MSG_BUDDY, MF_MSG_DAX, MF_MSG_UNSPLIT_THP, MF_MSG_ALREADY_POISONED, MF_MSG_UNKNOWN, }; #if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLBFS) extern void clear_huge_page(struct page *page, unsigned long addr_hint, unsigned int pages_per_huge_page); int copy_user_large_folio(struct folio *dst, struct folio *src, unsigned long addr_hint, struct vm_area_struct *vma); long copy_folio_from_user(struct folio *dst_folio, const void __user *usr_src, bool allow_pagefault); /** * vma_is_special_huge - Are transhuge page-table entries considered special? * @vma: Pointer to the struct vm_area_struct to consider * * Whether transhuge page-table entries are considered "special" following * the definition in vm_normal_page(). * * Return: true if transhuge page-table entries should be considered special, * false otherwise. */ static inline bool vma_is_special_huge(const struct vm_area_struct *vma) { return vma_is_dax(vma) || (vma->vm_file && (vma->vm_flags & (VM_PFNMAP | VM_MIXEDMAP))); } #endif /* CONFIG_TRANSPARENT_HUGEPAGE || CONFIG_HUGETLBFS */ #if MAX_NUMNODES > 1 void __init setup_nr_node_ids(void); #else static inline void setup_nr_node_ids(void) {} #endif extern int memcmp_pages(struct page *page1, struct page *page2); static inline int pages_identical(struct page *page1, struct page *page2) { return !memcmp_pages(page1, page2); } #ifdef CONFIG_MAPPING_DIRTY_HELPERS unsigned long clean_record_shared_mapping_range(struct address_space *mapping, pgoff_t first_index, pgoff_t nr, pgoff_t bitmap_pgoff, unsigned long *bitmap, pgoff_t *start, pgoff_t *end); unsigned long wp_shared_mapping_range(struct address_space *mapping, pgoff_t first_index, pgoff_t nr); #endif extern int sysctl_nr_trim_pages; #ifdef CONFIG_PRINTK void mem_dump_obj(void *object); #else static inline void mem_dump_obj(void *object) {} #endif static inline bool is_write_sealed(int seals) { return seals & (F_SEAL_WRITE | F_SEAL_FUTURE_WRITE); } /** * is_readonly_sealed - Checks whether write-sealed but mapped read-only, * in which case writes should be disallowing moving * forwards. * @seals: the seals to check * @vm_flags: the VMA flags to check * * Returns whether readonly sealed, in which case writess should be disallowed * going forward. */ static inline bool is_readonly_sealed(int seals, vm_flags_t vm_flags) { /* * Since an F_SEAL_[FUTURE_]WRITE sealed memfd can be mapped as * MAP_SHARED and read-only, take care to not allow mprotect to * revert protections on such mappings. Do this only for shared * mappings. For private mappings, don't need to mask * VM_MAYWRITE as we still want them to be COW-writable. */ if (is_write_sealed(seals) && ((vm_flags & (VM_SHARED | VM_WRITE)) == VM_SHARED)) return true; return false; } /** * seal_check_write - Check for F_SEAL_WRITE or F_SEAL_FUTURE_WRITE flags and * handle them. * @seals: the seals to check * @vma: the vma to operate on * * Check whether F_SEAL_WRITE or F_SEAL_FUTURE_WRITE are set; if so, do proper * check/handling on the vma flags. Return 0 if check pass, or <0 for errors. */ static inline int seal_check_write(int seals, struct vm_area_struct *vma) { if (!is_write_sealed(seals)) return 0; /* * New PROT_WRITE and MAP_SHARED mmaps are not allowed when * write seals are active. */ if ((vma->vm_flags & VM_SHARED) && (vma->vm_flags & VM_WRITE)) return -EPERM; return 0; } #ifdef CONFIG_ANON_VMA_NAME int madvise_set_anon_name(struct mm_struct *mm, unsigned long start, unsigned long len_in, struct anon_vma_name *anon_name); #else static inline int madvise_set_anon_name(struct mm_struct *mm, unsigned long start, unsigned long len_in, struct anon_vma_name *anon_name) { return 0; } #endif #ifdef CONFIG_UNACCEPTED_MEMORY bool range_contains_unaccepted_memory(phys_addr_t start, phys_addr_t end); void accept_memory(phys_addr_t start, phys_addr_t end); #else static inline bool range_contains_unaccepted_memory(phys_addr_t start, phys_addr_t end) { return false; } static inline void accept_memory(phys_addr_t start, phys_addr_t end) { } #endif static inline bool pfn_is_unaccepted_memory(unsigned long pfn) { phys_addr_t paddr = pfn << PAGE_SHIFT; return range_contains_unaccepted_memory(paddr, paddr + PAGE_SIZE); } #endif /* _LINUX_MM_H */