/usr/src/linux-headers-5.15.0-190/include/linux
NameSizeModeActions
amba/-0755rm
atomic/-0755rm
avf/-0755rm
bcma/-0755rm
byteorder/-0755rm
can/-0755rm
ceph/-0755rm
clk/-0755rm
crush/-0755rm
decompress/-0755rm
device/-0755rm
dma/-0755rm
dsa/-0755rm
extcon/-0755rm
firmware/-0755rm
fpga/-0755rm
fsl/-0755rm
gpio/-0755rm
greybus/-0755rm
hsi/-0755rm
i3c/-0755rm
iio/-0755rm
input/-0755rm
irqchip/-0755rm
isdn/-0755rm
lockd/-0755rm
mailbox/-0755rm
mdio/-0755rm
mfd/-0755rm
mlx4/-0755rm
mlx5/-0755rm
mmc/-0755rm
mtd/-0755rm
mux/-0755rm
net/-0755rm
netfilter/-0755rm
netfilter_arp/-0755rm
netfilter_bridge/-0755rm
netfilter_ipv4/-0755rm
netfilter_ipv6/-0755rm
pcs/-0755rm
perf/-0755rm
phy/-0755rm
pinctrl/-0755rm
platform_data/-0755rm
power/-0755rm
qed/-0755rm
raid/-0755rm
regulator/-0755rm
remoteproc/-0755rm
reset/-0755rm
rpmsg/-0755rm
rtc/-0755rm
sched/-0755rm
soc/-0755rm
soundwire/-0755rm
spi/-0755rm
ssb/-0755rm
sunrpc/-0755rm
surface_aggregator/-0755rm
ulpi/-0755rm
unaligned/-0755rm
usb/-0755rm
8250_pci.h10380644editdlrm
a.out.h3540644editdlrm
acct.h25510644editdlrm
acpi.h409020644editdlrm
acpi_dma.h31540644editdlrm
acpi_iort.h24030644editdlrm
acpi_mdio.h8190644editdlrm
acpi_pmtmr.h6740644editdlrm
acpi_viot.h4780644editdlrm
adb.h18320644editdlrm
adfs_fs.h5740644editdlrm
adreno-smmu-priv.h28070644editdlrm
adxl.h3100644editdlrm
aer.h18220644editdlrm
agpgart.h38810644editdlrm
agp_backend.h35340644editdlrm
ahci-remap.h6070644editdlrm
ahci_platform.h17470644editdlrm
aio.h6510644editdlrm
alarmtimer.h19900644editdlrm
alcor_pci.h90430644editdlrm
align.h5520644editdlrm
altera_jtaguart.h3790644editdlrm
altera_uart.h3970644editdlrm
amd-iommu.h63250644editdlrm
anon_inodes.h6700644editdlrm
apm-emulation.h15990644editdlrm
apm_bios.h23050644editdlrm
apple-gmux.h9180644editdlrm
apple_bl.h4980644editdlrm
arch_topology.h25510644editdlrm
arm-cci.h13900644editdlrm
arm-smccc.h173820644editdlrm
armada-37xx-rwtm-mailbox.h4310644editdlrm
arm_ffa.h75450644editdlrm
arm_sdei.h27300644editdlrm
array_size.h3320644editdlrm
ascii85.h5550644editdlrm
asn1.h18320644editdlrm
asn1_ber_bytecode.h25760644editdlrm
asn1_decoder.h4680644editdlrm
asn1_encoder.h10060644editdlrm
assoc_array.h29490644editdlrm
assoc_array_priv.h54230644editdlrm
async.h44390644editdlrm
async_tx.h68600644editdlrm
ata.h337990644editdlrm
atalk.h45860644editdlrm
ata_platform.h7490644editdlrm
ath9k_platform.h14770644editdlrm
atm.h2870644editdlrm
atmdev.h104770644editdlrm
atmel-isc-media.h21150644editdlrm
atmel-mci.h14290644editdlrm
atmel-ssc.h99710644editdlrm
atmel_pdc.h12950644editdlrm
atm_tcp.h5110644editdlrm
atomic.h26440644editdlrm
attribute_container.h28030644editdlrm
audit.h199210644editdlrm
auto_dev-ioctl.h2960644editdlrm
auto_fs.h2780644editdlrm
auxiliary_bus.h25390644editdlrm
auxvec.h3040644editdlrm
average.h24810644editdlrm
backing-dev-defs.h87530644editdlrm
backing-dev.h121890644editdlrm
backlight.h134470644editdlrm
badblocks.h21880644editdlrm
balloon_compaction.h58920644editdlrm
bcd.h5590644editdlrm
bch.h21520644editdlrm
bcm47xx_nvram.h10330644editdlrm
bcm47xx_sprom.h6160644editdlrm
bcm47xx_wdt.h5550644editdlrm
bcm963xx_nvram.h30360644editdlrm
bcm963xx_tag.h36850644editdlrm
binfmts.h46830644editdlrm
bio.h201080644editdlrm
bitfield.h54600644editdlrm
bitmap.h226640644editdlrm
bitops.h87330644editdlrm
bitrev.h25940644editdlrm
bits.h13870644editdlrm
bit_spinlock.h23600644editdlrm
blk-cgroup.h226480644editdlrm
blk-crypto.h41170644editdlrm
blk-mq-pci.h2690644editdlrm
blk-mq-rdma.h2730644editdlrm
blk-mq-virtio.h2930644editdlrm
blk-mq.h198340644editdlrm
blk-pm.h7080644editdlrm
blkdev.h580410644editdlrm
blkpg.h4360644editdlrm
blktrace_api.h38580644editdlrm
blk_types.h156690644editdlrm
blockgroup_lock.h8100644editdlrm
bma150.h12860644editdlrm
bootconfig.h87120644editdlrm
bootmem_info.h17330644editdlrm
bottom_half.h9740644editdlrm
bpf-cgroup.h187960644editdlrm
bpf-netns.h15590644editdlrm
bpf.h762120644editdlrm
bpfilter.h7910644editdlrm
bpfptr.h20290644editdlrm
bpf_lirc.h6980644editdlrm
bpf_local_storage.h53590644editdlrm
bpf_lsm.h14560644editdlrm
bpf_trace.h1660644editdlrm
bpf_types.h55360644editdlrm
bpf_verifier.h208650644editdlrm
brcmphy.h139940644editdlrm
bsearch.h6240644editdlrm
bsg-lib.h17590644editdlrm
bsg.h4920644editdlrm
btf.h74320644editdlrm
btf_ids.h54630644editdlrm
btree-128.h27370644editdlrm
btree-type.h39910644editdlrm
btree.h70000644editdlrm
btrfs.h1450644editdlrm
buffer_head.h148140644editdlrm
bug.h22200644editdlrm
build-salt.h3750644editdlrm
buildid.h5610644editdlrm
build_bug.h28230644editdlrm
bvec.h63190644editdlrm
c2port.h13840644editdlrm
cache.h26160644editdlrm
cacheinfo.h38370644editdlrm
capability.h84860644editdlrm
cb710.h54900644editdlrm
cciss_ioctl.h10530644editdlrm
ccp.h185770644editdlrm
cc_platform.h23780644editdlrm
cdev.h8450644editdlrm
cdrom.h92680644editdlrm
cfag12864b.h15090644editdlrm
cfi.h11520644editdlrm
cgroup-defs.h248150644editdlrm
cgroup.h288400644editdlrm
cgroup_rdma.h12060644editdlrm
cgroup_subsys.h12590644editdlrm
circ_buf.h11200644editdlrm
cleancache.h39820644editdlrm
cleanup.h49860644editdlrm
clk-provider.h593300644editdlrm
clk.h344180644editdlrm
clkdev.h13220644editdlrm
clockchips.h74450644editdlrm
clocksource.h102270644editdlrm
clocksource_ids.h2470644editdlrm
cm4000_cs.h1990644editdlrm
cma.h20040644editdlrm
cnt32_to_63.h35450644editdlrm
cn_proc.h18900644editdlrm
coda.h22150644editdlrm
compaction.h73190644editdlrm
compat.h321220644editdlrm
compiler-clang.h41500644editdlrm
compiler-gcc.h50210644editdlrm
compiler-intel.h9490644editdlrm
compiler-version.h5170644editdlrm
compiler.h85530644editdlrm
compiler_attributes.h135570644editdlrm
compiler_types.h110230644editdlrm
completion.h41010644editdlrm
component.h41630644editdlrm
configfs.h86830644editdlrm
connector.h39270644editdlrm
console.h77580644editdlrm
consolemap.h10760644editdlrm
console_struct.h72530644editdlrm
const.h4210644editdlrm
container.h6100644editdlrm
context_tracking.h33620644editdlrm
context_tracking_state.h16160644editdlrm
cookie.h12540644editdlrm
cordic.h21320644editdlrm
coredump.h11540644editdlrm
coresight-pmu.h13550644editdlrm
coresight-stm.h1520644editdlrm
coresight.h184490644editdlrm
counter.h153180644editdlrm
count_zeros.h14530644editdlrm
cper.h169630644editdlrm
cpu.h84850644editdlrm
cpufeature.h17510644editdlrm
cpufreq.h335390644editdlrm
cpuhotplug.h169490644editdlrm
cpuidle.h105160644editdlrm
cpuidle_haltpoll.h3120644editdlrm
cpumask.h300890644editdlrm
cpuset.h83510644editdlrm
cpu_cooling.h19010644editdlrm
cpu_pm.h24330644editdlrm
cpu_rmap.h17210644editdlrm
crash_core.h34650644editdlrm
crash_dump.h41490644editdlrm
crc-ccitt.h6090644editdlrm
crc-itu-t.h5310644editdlrm
crc-t10dif.h4530644editdlrm
crc4.h1920644editdlrm
crc7.h3160644editdlrm
crc8.h37470644editdlrm
crc16.h5400644editdlrm
crc32.h28940644editdlrm
crc32c.h3310644editdlrm
crc32poly.h6100644editdlrm
crc64.h2800644editdlrm
cred.h128040644editdlrm
crypto.h278900644editdlrm
cs5535.h62770644editdlrm
ctype.h19120644editdlrm
cuda.h6130644editdlrm
damon.h106010644editdlrm
dasd_mod.h2040644editdlrm
davinci_emac.h10800644editdlrm
dax.h67190644editdlrm
dca.h19220644editdlrm
dcache.h190760644editdlrm
dccp.h109880644editdlrm
debugfs.h122530644editdlrm
debugobjects.h40850644editdlrm
debug_locks.h16270644editdlrm
delay.h24900644editdlrm
delayacct.h55840644editdlrm
delayed_call.h7090644editdlrm
devcoredump.h22660644editdlrm
devfreq-event.h60950644editdlrm
devfreq.h143700644editdlrm
devfreq_cooling.h27630644editdlrm
device-mapper.h193710644editdlrm
device.h352260644editdlrm
device_cgroup.h16090644editdlrm
devm-helpers.h27400644editdlrm
devpts_fs.h11560644editdlrm
dev_printk.h98830644editdlrm
dfl.h24350644editdlrm
digsig.h12120644editdlrm
dim.h94210644editdlrm
dio.h110190644editdlrm
dirent.h2150644editdlrm
dlm.h60050644editdlrm
dlm_plock.h5320644editdlrm
dm-bufio.h49920644editdlrm
dm-dirty-log.h40380644editdlrm
dm-io.h19800644editdlrm
dm-kcopyd.h30130644editdlrm
dm-region-hash.h31820644editdlrm
dm9000.h9870644editdlrm
dma-buf-map.h83180644editdlrm
dma-buf.h209620644editdlrm
dma-direct.h36810644editdlrm
dma-direction.h4070644editdlrm
dma-fence-array.h21910644editdlrm
dma-fence-chain.h31440644editdlrm
dma-fence.h213570644editdlrm
dma-heap.h16160644editdlrm
dma-iommu.h22650644editdlrm
dma-map-ops.h131970644editdlrm
dma-mapping.h205960644editdlrm
dma-resv.h122360644editdlrm
dmaengine.h548510644editdlrm
dmapool.h18320644editdlrm
dmar.h79290644editdlrm
dmi.h45120644editdlrm
dnotify.h10440644editdlrm
dns_resolver.h13900644editdlrm
dqblk_qtree.h22380644editdlrm
dqblk_v1.h3270644editdlrm
dqblk_v2.h4060644editdlrm
drbd.h103110644editdlrm
drbd_genl.h220100644editdlrm
drbd_genl_api.h18080644editdlrm
drbd_limits.h80030644editdlrm
ds2782_battery.h1580644editdlrm
dtlk.h35840644editdlrm
dtpm.h16840644editdlrm
dw_apb_timer.h15660644editdlrm
dynamic_debug.h64710644editdlrm
dynamic_queue_limits.h38120644editdlrm
earlycpio.h3590644editdlrm
ecryptfs.h39150644editdlrm
edac.h199240644editdlrm
edd.h10770644editdlrm
eeprom_93cx6.h27070644editdlrm
eeprom_93xx46.h10620644editdlrm
efi-bgrt.h6440644editdlrm
efi.h430380644editdlrm
efi_embedded_fw.h10600644editdlrm
efs_vh.h15850644editdlrm
eisa.h30310644editdlrm
elevator.h56530644editdlrm
elf-fdpic.h20300644editdlrm
elf-randomize.h5830644editdlrm
elf.h30300644editdlrm
elfcore-compat.h13020644editdlrm
elfcore.h42090644editdlrm
elfnote-lto.h3140644editdlrm
elfnote.h36260644editdlrm
enclosure.h41120644editdlrm
energy_model.h83610644editdlrm
entry-common.h173590644editdlrm
entry-kvm.h28000644editdlrm
err.h15270644editdlrm
errname.h2830644editdlrm
errno.h14810644editdlrm
error-injection.h6070644editdlrm
errqueue.h5240644editdlrm
errseq.h3820644editdlrm
etherdevice.h176070644editdlrm
ethtool.h325050644editdlrm
ethtool_netlink.h20290644editdlrm
eventfd.h23360644editdlrm
eventpoll.h24720644editdlrm
evm.h35000644editdlrm
export.h53940644editdlrm
exportfs.h84210644editdlrm
ext2_fs.h9670644editdlrm
extable.h13090644editdlrm
extcon-provider.h39190644editdlrm
extcon.h103990644editdlrm
f2fs_fs.h194710644editdlrm
f75375s.h5410644editdlrm
falloc.h16240644editdlrm
fanotify.h45470644editdlrm
fault-inject-usercopy.h4960644editdlrm
fault-inject.h19750644editdlrm
fb.h289580644editdlrm
fbcon.h22560644editdlrm
fcdevice.h7740644editdlrm
fcntl.h16980644editdlrm
fd.h4900644editdlrm
fddidevice.h8330644editdlrm
fdtable.h35710644editdlrm
fec.h4630644editdlrm
fiemap.h7130644editdlrm
file.h31580644editdlrm
fileattr.h19520644editdlrm
filter.h439950644editdlrm
fips.h3030644editdlrm
firewire.h137180644editdlrm
firmware-map.h9590644editdlrm
firmware.h33480644editdlrm
fixp-arith.h42900644editdlrm
flat.h26290644editdlrm
flex_proportions.h28810644editdlrm
font.h17140644editdlrm
fortify-string.h93290644editdlrm
freelist.h38900644editdlrm
freezer.h91930644editdlrm
frontswap.h31180644editdlrm
fs.h1255060644editdlrm
fscache-cache.h190250644editdlrm
fscache.h303030644editdlrm
fscrypt.h306220644editdlrm
fsi-occ.h6810644editdlrm
fsi-sbefifo.h6290644editdlrm
fsi.h23180644editdlrm
fsl-diu-fb.h39630644editdlrm
fsldma.h2020644editdlrm
fsl_devices.h42610644editdlrm
fsl_hypervisor.h28240644editdlrm
fsl_ifc.h250630644editdlrm
fsnotify.h102870644editdlrm
fsnotify_backend.h300760644editdlrm
fsverity.h69140644editdlrm
fs_context.h88180644editdlrm
fs_enet_pd.h34570644editdlrm
fs_parser.h45430644editdlrm
fs_pin.h5390644editdlrm
fs_stack.h8110644editdlrm
fs_struct.h10660644editdlrm
fs_types.h20710644editdlrm
fs_uart_pd.h15230644editdlrm
ftrace.h355970644editdlrm
ftrace_irq.h8840644editdlrm
futex.h24970644editdlrm
fwnode.h75350644editdlrm
fwnode_mdio.h8580644editdlrm
gameport.h55490644editdlrm
gcd.h1930644editdlrm
genalloc.h79120644editdlrm
generic-radix-tree.h65040644editdlrm
genetlink.h5890644editdlrm
genhd.h90550644editdlrm
genl_magic_func.h118090644editdlrm
genl_magic_struct.h77930644editdlrm
getcpu.h6410644editdlrm
gfp.h268920644editdlrm
glob.h2560644editdlrm
gnss.h16010644editdlrm
goldfish.h8780644editdlrm
gpio-pxa.h5710644editdlrm
gpio.h54230644editdlrm
gpio_keys.h17820644editdlrm
greybus.h42400644editdlrm
hardirq.h35160644editdlrm
hash.h30710644editdlrm
hashtable.h68270644editdlrm
hdlc.h32670644editdlrm
hdlcdrv.h64680644editdlrm
hdmi.h127050644editdlrm
hid-debug.h14580644editdlrm
hid-roccat.h4840644editdlrm
hid-sensor-hub.h91900644editdlrm
hid-sensor-ids.h76170644editdlrm
hid.h389230644editdlrm
hidden.h9660644editdlrm
hiddev.h14580644editdlrm
hidraw.h11460644editdlrm
highmem-internal.h52390644editdlrm
highmem.h97310644editdlrm
highuid.h31940644editdlrm
hil.h188570644editdlrm
hil_mlc.h52480644editdlrm
hippidevice.h10520644editdlrm
hmm.h41680644editdlrm
host1x.h109930644editdlrm
hpet.h26150644editdlrm
hp_sdc.h143520644editdlrm
hrtimer.h165150644editdlrm
hrtimer_defs.h6600644editdlrm
htcpld.h6170644editdlrm
hugetlb.h306060644editdlrm
hugetlb_cgroup.h72410644editdlrm
hugetlb_inline.h3740644editdlrm
huge_mm.h135930644editdlrm
hwmon-sysfs.h28400644editdlrm
hwmon-vid.h8620644editdlrm
hwmon.h151310644editdlrm
hwspinlock.h161740644editdlrm
hw_breakpoint.h42480644editdlrm
hw_random.h21680644editdlrm
hyperv.h502180644editdlrm
hypervisor.h6080644editdlrm
i2c-algo-bit.h14360644editdlrm
i2c-algo-pca.h29560644editdlrm
i2c-algo-pcf.h12360644editdlrm
i2c-dev.h3710644editdlrm
i2c-mux.h16670644editdlrm
i2c-smbus.h17400644editdlrm
i2c.h395260644editdlrm
i8042.h20410644editdlrm
i8253.h8080644editdlrm
icmp.h10290644editdlrm
icmpv6.h27610644editdlrm
idle_inject.h9320644editdlrm
idr.h99350644editdlrm
ieee80211.h1271320644editdlrm
ieee802154.h113850644editdlrm
if_arp.h18580644editdlrm
if_bridge.h49190644editdlrm
if_eql.h11000644editdlrm
if_ether.h12950644editdlrm
if_fddi.h33150644editdlrm
if_hsr.h5860644editdlrm
if_link.h5920644editdlrm
if_ltalk.h1880644editdlrm
if_macvlan.h27570644editdlrm
if_phonet.h3190644editdlrm
if_pppol2tp.h5160644editdlrm
if_pppox.h29130644editdlrm
if_rmnet.h20840644editdlrm
if_tap.h22660644editdlrm
if_team.h80890644editdlrm
if_tun.h15870644editdlrm
if_tunnel.h4090644editdlrm
if_vlan.h216930644editdlrm
igmp.h44130644editdlrm
ihex.h22060644editdlrm
ima.h59340644editdlrm
imx-media.h6050644editdlrm
in.h23450644editdlrm
in6.h16710644editdlrm
indirect_call_wrapper.h24260644editdlrm
inet.h27070644editdlrm
inetdevice.h90850644editdlrm
inet_diag.h28010644editdlrm
init.h116630644editdlrm
initrd.h10440644editdlrm
init_ohci1394_dma.h1960644editdlrm
init_syscalls.h10370644editdlrm
init_task.h13310644editdlrm
inotify.h7130644editdlrm
input.h203620644editdlrm
instrumentation.h19720644editdlrm
instrumented.h36850644editdlrm
integrity.h11790644editdlrm
intel-iommu.h279340644editdlrm
intel-ish-client-if.h40660644editdlrm
intel-svm.h15810644editdlrm
intel_rapl.h42390644editdlrm
intel_th.h25010644editdlrm
interconnect-provider.h56390644editdlrm
interconnect.h29510644editdlrm
interrupt.h258330644editdlrm
interval_tree.h8310644editdlrm
interval_tree_generic.h68630644editdlrm
io-64-nonatomic-hi-lo.h24680644editdlrm
io-64-nonatomic-lo-hi.h24680644editdlrm
io-mapping.h47570644editdlrm
io-pgtable.h88570644editdlrm
io.h51410644editdlrm
ioam6.h2260644editdlrm
ioam6_genl.h2660644editdlrm
ioam6_iptunnel.h2850644editdlrm
ioasid.h21190644editdlrm
iocontext.h46990644editdlrm
iomap.h121980644editdlrm
iommu-helper.h11460644editdlrm
iommu.h348730644editdlrm
iopoll.h77950644editdlrm
ioport.h125770644editdlrm
ioprio.h17720644editdlrm
iova.h63420644editdlrm
io_uring.h8810644editdlrm
ip.h10240644editdlrm
ipack.h89000644editdlrm
ipc.h6130644editdlrm
ipc_namespace.h57640644editdlrm
ipmi.h111460644editdlrm
ipmi_smi.h81690644editdlrm
ipv6.h89120644editdlrm
ipv6_route.h3720644editdlrm
irq.h427640644editdlrm
irqbypass.h35350644editdlrm
irqchip.h23870644editdlrm
irqdesc.h79320644editdlrm
irqdomain.h207270644editdlrm
irqflags.h81000644editdlrm
irqhandler.h3000644editdlrm
irqnr.h8560644editdlrm
irqreturn.h5030644editdlrm
irq_poll.h5750644editdlrm
irq_sim.h7890644editdlrm
irq_work.h18620644editdlrm
isa.h21670644editdlrm
isapnp.h29440644editdlrm
iscsi_boot_sysfs.h37960644editdlrm
iscsi_ibft.h8470644editdlrm
iversion.h126700644editdlrm
jbd2.h524330644editdlrm
jhash.h46730644editdlrm
jiffies.h154300644editdlrm
journal-head.h29840644editdlrm
joystick.h4370644editdlrm
jump_label.h164360644editdlrm
jump_label_ratelimit.h28410644editdlrm
jz4740-adc.h10230644editdlrm
jz4780-nemc.h9760644editdlrm
kallsyms.h47570644editdlrm
kasan-checks.h14950644editdlrm
kasan-tags.h4870644editdlrm
kasan.h137180644editdlrm
kbd_diacr.h1980644editdlrm
kbd_kern.h36870644editdlrm
kbuild.h3800644editdlrm
kconfig.h26910644editdlrm
kcore.h8910644editdlrm
kcov.h25350644editdlrm
kcsan-checks.h162450644editdlrm
kcsan.h19300644editdlrm
kdb.h75080644editdlrm
kdebug.h4870644editdlrm
kdev_t.h18430644editdlrm
kernel-page-flags.h5280644editdlrm
kernel.h174180644editdlrm
kernelcapi.h14850644editdlrm
kernel_read_file.h16760644editdlrm
kernel_stat.h30450644editdlrm
kernfs.h186840644editdlrm
kern_levels.h16110644editdlrm
kexec.h127420644editdlrm
key-type.h67880644editdlrm
key.h161280644editdlrm
keyboard.h6650644editdlrm
keyctl.h12760644editdlrm
keyslot-manager.h38680644editdlrm
kfence.h87680644editdlrm
kfifo.h268040644editdlrm
kgdb.h123420644editdlrm
khugepaged.h28100644editdlrm
klist.h19220644editdlrm
kmemleak.h33490644editdlrm
kmod.h10450644editdlrm
kmsg_dump.h27720644editdlrm
kobject.h78830644editdlrm
kobject_ns.h19430644editdlrm
kobj_map.h5450644editdlrm
kprobes.h150740644editdlrm
kref.h31550644editdlrm
ks0108.h9700644editdlrm
ks8842.h6320644editdlrm
ks8851_mll.h4720644editdlrm
ksm.h25330644editdlrm
kstrtox.h67510644editdlrm
kthread.h78720644editdlrm
ktime.h55120644editdlrm
kvm_dirty_ring.h27940644editdlrm
kvm_host.h600340644editdlrm
kvm_irqfd.h20430644editdlrm
kvm_para.h4020644editdlrm
kvm_types.h22220644editdlrm
l2tp.h2610644editdlrm
lantiq.h3650644editdlrm
lapb.h17520644editdlrm
latencytop.h11920644editdlrm
lcd.h38670644editdlrm
lcm.h2750644editdlrm
led-class-flash.h69000644editdlrm
led-class-multicolor.h33380644editdlrm
led-lm3530.h37860644editdlrm
leds-bd2802.h4760644editdlrm
leds-lp3944.h9500644editdlrm
leds-lp3952.h24100644editdlrm
leds-pca9532.h8660644editdlrm
leds-regulator.h11680644editdlrm
leds-ti-lmu-common.h11490644editdlrm
leds.h184920644editdlrm
libata.h690460644editdlrm
libfdt.h2020644editdlrm
libfdt_env.h4910644editdlrm
libgcc.h4630644editdlrm
libnvdimm.h106240644editdlrm
libps2.h19310644editdlrm
license.h4180644editdlrm
limits.h7150644editdlrm
linear_range.h17660644editdlrm
linkage.h98260644editdlrm
linkmode.h25590644editdlrm
linux_logo.h19560644editdlrm
lis3lv02d.h51250644editdlrm
list.h312000644editdlrm
list_bl.h49050644editdlrm
list_lru.h74630644editdlrm
list_nulls.h43220644editdlrm
list_sort.h3740644editdlrm
litex.h21070644editdlrm
livepatch.h84190644editdlrm
llc.h7490644editdlrm
llist.h92800644editdlrm
local_lock.h13620644editdlrm
local_lock_internal.h34990644editdlrm
lockdep.h220030644editdlrm
lockdep_types.h53080644editdlrm
lockref.h15410644editdlrm
log2.h63660644editdlrm
logic_iomem.h21240644editdlrm
logic_pio.h33100644editdlrm
lp.h28270644editdlrm
lru_cache.h121110644editdlrm
lsm_audit.h28730644editdlrm
lsm_hooks.h761740644editdlrm
lsm_hook_defs.h215110644editdlrm
lz4.h270750644editdlrm
lzo.h19800644editdlrm
mailbox_client.h17540644editdlrm
mailbox_controller.h58350644editdlrm
maple.h27750644editdlrm
marvell_phy.h17340644editdlrm
math.h51850644editdlrm
math64.h76560644editdlrm
mbcache.h22080644editdlrm
mbus.h31680644editdlrm
mc6821.h12090644editdlrm
mc146818rtc.h48000644editdlrm
mcb.h37960644editdlrm
mdev.h60810644editdlrm
mdio-bitbang.h13380644editdlrm
mdio-gpio.h1770644editdlrm
mdio-mux.h10210644editdlrm
mdio.h129900644editdlrm
mei_cl_bus.h38430644editdlrm
memblock.h203530644editdlrm
memcontrol.h446280644editdlrm
memfd.h7190644editdlrm
memory.h61320644editdlrm
memory_hotplug.h116890644editdlrm
mempolicy.h75480644editdlrm
mempool.h34300644editdlrm
memregion.h4170644editdlrm
memremap.h57490644editdlrm
memstick.h98320644editdlrm
mem_encrypt.h8850644editdlrm
mhi.h266640644editdlrm
micrel_phy.h18800644editdlrm
microchipphy.h27100644editdlrm
migrate.h55370644editdlrm
migrate_mode.h7580644editdlrm
mii.h167260644editdlrm
mii_timestamper.h36530644editdlrm
minmax.h102420644editdlrm
min_heap.h33770644editdlrm
miscdevice.h32780644editdlrm
misc_cgroup.h30210644editdlrm
mISDNdsp.h12170644editdlrm
mISDNhw.h55230644editdlrm
mISDNif.h152500644editdlrm
mm.h1082270644editdlrm
mman.h40530644editdlrm
mmap_lock.h43530644editdlrm
mmdebug.h23080644editdlrm
mmiotrace.h31220644editdlrm
mmu_context.h8550644editdlrm
mmu_notifier.h252290644editdlrm
mmzone.h485300644editdlrm
mm_inline.h29860644editdlrm
mm_types.h258110644editdlrm
mm_types_task.h25550644editdlrm
mnt_idmapping.h78380644editdlrm
mnt_namespace.h6970644editdlrm
module.h246150644editdlrm
moduleloader.h34980644editdlrm
moduleparam.h227780644editdlrm
module_signature.h12500644editdlrm
mod_devicetable.h240640644editdlrm
most.h124910644editdlrm
mount.h40230644editdlrm
moxtet.h24210644editdlrm
mpage.h7370644editdlrm
mpi.h86120644editdlrm
mpls.h3940644editdlrm
mpls_iptunnel.h1780644editdlrm
mroute.h20040644editdlrm
mroute6.h24660644editdlrm
mroute_base.h124630644editdlrm
msdos_fs.h2730644editdlrm
msdos_partition.h16550644editdlrm
msg.h3950644editdlrm
msi.h157270644editdlrm
mtio.h13170644editdlrm
mutex.h74830644editdlrm
mv643xx.h522710644editdlrm
mv643xx_eth.h20010644editdlrm
mv643xx_i2c.h3350644editdlrm
mvebu-pmsu.h5200644editdlrm
mxm-wmi.h3990644editdlrm
namei.h46830644editdlrm
nd.h56850644editdlrm
ndctl.h6740644editdlrm
net.h117490644editdlrm
netdevice.h1727810644editdlrm
netdev_features.h110100644editdlrm
netfilter.h138860644editdlrm
netfilter_bridge.h21280644editdlrm
netfilter_defs.h2420644editdlrm
netfilter_ingress.h14740644editdlrm
netfilter_ipv4.h10770644editdlrm
netfilter_ipv6.h59880644editdlrm
netfs.h81250644editdlrm
netlink.h80700644editdlrm
netpoll.h24730644editdlrm
nfs.h15020644editdlrm
nfs3.h2600644editdlrm
nfs4.h198360644editdlrm
nfsacl.h14350644editdlrm
nfs_common.h4020644editdlrm
nfs_fs.h208790644editdlrm
nfs_fs_i.h3080644editdlrm
nfs_fs_sb.h104950644editdlrm
nfs_iostat.h42850644editdlrm
nfs_page.h69640644editdlrm
nfs_ssc.h20610644editdlrm
nfs_xdr.h432720644editdlrm
nitro_enclaves.h2670644editdlrm
nl802154.h39380644editdlrm
nls.h31620644editdlrm
nmi.h69260644editdlrm
node.h47870644editdlrm
nodemask.h175770644editdlrm
nospec.h22900644editdlrm
notifier.h80320644editdlrm
nsc_gpio.h14590644editdlrm
nsproxy.h31650644editdlrm
ns_common.h2830644editdlrm
ntb.h536910644editdlrm
ntb_transport.h38920644editdlrm
nubus.h56750644editdlrm
numa.h12780644editdlrm
nvme-fc-driver.h469580644editdlrm
nvme-fc.h99550644editdlrm
nvme-rdma.h20850644editdlrm
nvme-tcp.h45220644editdlrm
nvme.h392350644editdlrm
nvmem-consumer.h69420644editdlrm
nvmem-provider.h47720644editdlrm
nvram.h35500644editdlrm
objagg.h19830644editdlrm
objtool.h53680644editdlrm
of.h445450644editdlrm
of_address.h42700644editdlrm
of_clk.h8190644editdlrm
of_device.h30350644editdlrm
of_dma.h23530644editdlrm
of_fdt.h37330644editdlrm
of_gpio.h41700644editdlrm
of_graph.h36360644editdlrm
of_iommu.h5050644editdlrm
of_irq.h38430644editdlrm
of_mdio.h39990644editdlrm
of_net.h10090644editdlrm
of_pci.h9150644editdlrm
of_pdt.h11630644editdlrm
of_platform.h39740644editdlrm
of_reserved_mem.h22980644editdlrm
oid_registry.h57670644editdlrm
olpc-ec.h20000644editdlrm
omap-dma.h100210644editdlrm
omap-gpmc.h27040644editdlrm
omap-iommu.h8800644editdlrm
omap-mailbox.h6890644editdlrm
omapfb.h5760644editdlrm
once.h28650644editdlrm
once_lite.h9250644editdlrm
oom.h33410644editdlrm
openvswitch.h4030644editdlrm
osq_lock.h10660644editdlrm
overflow.h80070644editdlrm
packing.h18030644editdlrm
padata.h61040644editdlrm
page-flags-layout.h32870644editdlrm
page-flags.h286730644editdlrm
page-isolation.h16800644editdlrm
pageblock-flags.h23630644editdlrm
pagemap.h312340644editdlrm
pagevec.h20900644editdlrm
pagewalk.h43170644editdlrm
page_counter.h23590644editdlrm
page_ext.h18770644editdlrm
page_idle.h26710644editdlrm
page_owner.h23610644editdlrm
page_ref.h50730644editdlrm
page_reporting.h8950644editdlrm
panic.h26560644editdlrm
panic_notifier.h2960644editdlrm
parman.h29340644editdlrm
parport.h195440644editdlrm
parport_pc.h67130644editdlrm
parser.h11950644editdlrm
part_stat.h24330644editdlrm
pata_arasan_cf_data.h12500644editdlrm
patchkey.h7570644editdlrm
path.h5720644editdlrm
pch_dma.h4080644editdlrm
pci-acpi.h39440644editdlrm
pci-ats.h18020644editdlrm
pci-dma-compat.h37490644editdlrm
pci-ecam.h32800644editdlrm
pci-ep-cfs.h9560644editdlrm
pci-epc.h96980644editdlrm
pci-epf.h72270644editdlrm
pci-p2pdma.h40490644editdlrm
pci.h928510644editdlrm
pci_hotplug.h44580644editdlrm
pci_ids.h1241410644editdlrm
pcs-lynx.h4250644editdlrm
pda_power.h10050644editdlrm
pe.h165540644editdlrm
percpu-defs.h185580644editdlrm
percpu-refcount.h111020644editdlrm
percpu-rwsem.h42570644editdlrm
percpu.h48500644editdlrm
percpu_counter.h56090644editdlrm
perf_event.h483650644editdlrm
perf_regs.h10760644editdlrm
personality.h3930644editdlrm
pfn.h6660644editdlrm
pfn_t.h32870644editdlrm
pgalloc.h9480644editdlrm
pgtable.h455000644editdlrm
phonet.h5370644editdlrm
phy.h594750644editdlrm
phylink.h199390644editdlrm
phy_fixed.h18140644editdlrm
phy_led_triggers.h10350644editdlrm
pid.h65210644editdlrm
pid_namespace.h21330644editdlrm
pim.h27370644editdlrm
pipe_fs_i.h94330644editdlrm
pkeys.h9900644editdlrm
pktcdvd.h60110644editdlrm
pl320-ipc.h2090644editdlrm
platform_device.h130740644editdlrm
platform_profile.h11500644editdlrm
pldmfw.h48790644editdlrm
plist.h88720644editdlrm
pm-trace.h9400644editdlrm
pm.h357090644editdlrm
pmbus.h25430644editdlrm
pmu.h25020644editdlrm
pm_clock.h26370644editdlrm
pm_domain.h135010644editdlrm
pm_opp.h154660644editdlrm
pm_qos.h106630644editdlrm
pm_runtime.h201650644editdlrm
pm_wakeirq.h15180644editdlrm
pm_wakeup.h64270644editdlrm
pnfs_osd_xdr.h94900644editdlrm
pnp.h152530644editdlrm
poison.h25400644editdlrm
poll.h43700644editdlrm
posix-clock.h48080644editdlrm
posix-timers.h73860644editdlrm
posix_acl.h33470644editdlrm
posix_acl_xattr.h19090644editdlrm
powercap.h122630644editdlrm
power_supply.h182270644editdlrm
ppp-comp.h30230644editdlrm
ppp_channel.h30640644editdlrm
ppp_defs.h11470644editdlrm
pps_kernel.h30100644editdlrm
pr.h5660644editdlrm
prandom.h34580644editdlrm
preempt.h150480644editdlrm
prefetch.h17400644editdlrm
prime_numbers.h13840644editdlrm
printk.h227630644editdlrm
prmt.h1430644editdlrm
processor.h18890644editdlrm
proc_fs.h88110644editdlrm
proc_ns.h26270644editdlrm
profile.h26840644editdlrm
projid.h22690644editdlrm
property.h180690644editdlrm
pruss_driver.h12970644editdlrm
psci.h15590644editdlrm
pseudo_fs.h3550644editdlrm
psi.h15960644editdlrm
psi_types.h44160644editdlrm
psp-sev.h181880644editdlrm
psp-tee.h27160644editdlrm
pstore.h78080644editdlrm
pstore_blk.h15670644editdlrm
pstore_ram.h39070644editdlrm
pstore_zone.h23360644editdlrm
ptdump.h5670644editdlrm
pti.h2400644editdlrm
ptp_classify.h49650644editdlrm
ptp_clock_kernel.h124900644editdlrm
ptp_kvm.h4600644editdlrm
ptp_pch.h6230644editdlrm
ptrace.h150010644editdlrm
ptr_ring.h166790644editdlrm
purgatory.h5900644editdlrm
pvclock_gtod.h5480644editdlrm
pwm.h168510644editdlrm
pwm_backlight.h7220644editdlrm
pxa2xx_ssp.h113920644editdlrm
pxa168_eth.h7280644editdlrm
qcom-geni-se.h140650644editdlrm
qcom_scm.h39000644editdlrm
qnx6_fs.h33490644editdlrm
quota.h192170644editdlrm
quotaops.h102960644editdlrm
radix-tree.h160080644editdlrm
raid_class.h20480644editdlrm
ramfs.h7460644editdlrm
random.h40730644editdlrm
randomize_kstack.h25220644editdlrm
range.h7750644editdlrm
ras.h10440644editdlrm
ratelimit.h17610644editdlrm
ratelimit_types.h13570644editdlrm
rational.h6390644editdlrm
rbtree.h91480644editdlrm
rbtree_augmented.h97560644editdlrm
rbtree_latch.h68190644editdlrm
rbtree_types.h9460644editdlrm
rculist.h292420644editdlrm
rculist_bl.h33740644editdlrm
rculist_nulls.h88880644editdlrm
rcupdate.h396200644editdlrm
rcupdate_trace.h31580644editdlrm
rcupdate_wait.h17690644editdlrm
rcutiny.h33970644editdlrm
rcutree.h24010644editdlrm
rcuwait.h18840644editdlrm
rcu_node_tree.h38180644editdlrm
rcu_segcblist.h102730644editdlrm
rcu_sync.h14940644editdlrm
reboot-mode.h6000644editdlrm
reboot.h22350644editdlrm
reciprocal_div.h33560644editdlrm
refcount.h123050644editdlrm
regmap.h655030644editdlrm
regset.h116260644editdlrm
relay.h86690644editdlrm
remoteproc.h253600644editdlrm
resctrl.h66510644editdlrm
reset-controller.h36550644editdlrm
reset.h309640644editdlrm
resource.h3390644editdlrm
resource_ext.h21350644editdlrm
restart_block.h11380644editdlrm
rfkill.h107750644editdlrm
rhashtable-types.h35360644editdlrm
rhashtable.h384920644editdlrm
ring_buffer.h77390644editdlrm
rio.h194720644editdlrm
rio_drv.h146600644editdlrm
rio_ids.h11040644editdlrm
rio_regs.h195240644editdlrm
rmap.h93460644editdlrm
rmi.h123300644editdlrm
rndis.h172690644editdlrm
rodata_test.h3940644editdlrm
root_dev.h6190644editdlrm
rpmsg.h89780644editdlrm
rslib.h37530644editdlrm
rtc.h88610644editdlrm
rtmutex.h30370644editdlrm
rtnetlink.h45620644editdlrm
rtsx_common.h8900644editdlrm
rtsx_pci.h407740644editdlrm
rtsx_usb.h157470644editdlrm
rwbase_rt.h8760644editdlrm
rwlock.h46640644editdlrm
rwlock_api_smp.h78290644editdlrm
rwlock_rt.h30530644editdlrm
rwlock_types.h18140644editdlrm
rwsem.h78100644editdlrm
s3c_adc_battery.h9230644editdlrm
sbitmap.h173060644editdlrm
scatterlist.h179810644editdlrm
scc.h29050644editdlrm
sched.h662820644editdlrm
sched_clock.h14720644editdlrm
scmi_protocol.h266810644editdlrm
scpi_protocol.h27290644editdlrm
screen_info.h1910644editdlrm
scs.h18690644editdlrm
sctp.h234310644editdlrm
scx200.h18630644editdlrm
scx200_gpio.h24380644editdlrm
sdb.h42700644editdlrm
seccomp.h35330644editdlrm
secretmem.h11690644editdlrm
securebits.h2390644editdlrm
security.h603660644editdlrm
sed-opal.h16960644editdlrm
seg6.h1210644editdlrm
seg6_genl.h1360644editdlrm
seg6_hmac.h1360644editdlrm
seg6_iptunnel.h1480644editdlrm
seg6_local.h1000644editdlrm
selection.h18540644editdlrm
sem.h5990644editdlrm
semaphore.h13840644editdlrm
seqlock.h404550644editdlrm
seqno-fence.h36550644editdlrm
seq_buf.h40300644editdlrm
seq_file.h92200644editdlrm
seq_file_net.h7300644editdlrm
serdev.h100510644editdlrm
serial.h6300644editdlrm
serial_8250.h67280644editdlrm
serial_bcm63xx.h48430644editdlrm
serial_core.h209500644editdlrm
serial_max3100.h12160644editdlrm
serial_s3c.h96490644editdlrm
serial_sci.h16350644editdlrm
serio.h43830644editdlrm
set_memory.h16980644editdlrm
sfp.h162530644editdlrm
shdma-base.h43700644editdlrm
shm.h9680644editdlrm
shmem_fs.h59540644editdlrm
shrinker.h33280644editdlrm
sh_clk.h60980644editdlrm
sh_dma.h35500644editdlrm
sh_eth.h3690644editdlrm
sh_intc.h36790644editdlrm
sh_timer.h1720644editdlrm
signal.h140830644editdlrm
signalfd.h8170644editdlrm
signal_types.h17250644editdlrm
siox.h23130644editdlrm
siphash.h57250644editdlrm
sizes.h13050644editdlrm
skbuff.h1415090644editdlrm
skb_array.h53050644editdlrm
skmsg.h137620644editdlrm
slab.h243130644editdlrm
slab_def.h30910644editdlrm
slimbus.h70960644editdlrm
slub_def.h63670644editdlrm
sm501-regs.h119000644editdlrm
sm501.h41140644editdlrm
smc91x.h16040644editdlrm
smc911x.h2940644editdlrm
smp.h78180644editdlrm
smpboot.h17250644editdlrm
smp_types.h13820644editdlrm
smsc911x.h16700644editdlrm
smscphy.h12830644editdlrm
socket.h154600644editdlrm
sockptr.h24140644editdlrm
sock_diag.h23700644editdlrm
sonet.h4690644editdlrm
sony-laptop.h14400644editdlrm
sonypi.h17550644editdlrm
sort.h3460644editdlrm
sound.h6850644editdlrm
soundcard.h16310644editdlrm
spinlock.h154370644editdlrm
spinlock_api_smp.h56050644editdlrm
spinlock_api_up.h33940644editdlrm
spinlock_rt.h42090644editdlrm
spinlock_types.h18260644editdlrm
spinlock_types_raw.h17260644editdlrm
spinlock_types_up.h7260644editdlrm
spinlock_up.h22110644editdlrm
splice.h33900644editdlrm
spmi.h57250644editdlrm
sram.h8440644editdlrm
srcu.h72430644editdlrm
srcutiny.h28130644editdlrm
srcutree.h49160644editdlrm
ssbi.h7260644editdlrm
stackdepot.h6860644editdlrm
stackleak.h9020644editdlrm
stackprotector.h3610644editdlrm
stacktrace.h40660644editdlrm
start_kernel.h4150644editdlrm
stat.h13660644editdlrm
statfs.h18270644editdlrm
static_call.h105000644editdlrm
static_call_types.h28090644editdlrm
static_key.h300644editdlrm
stdarg.h3130644editdlrm
stddef.h32760644editdlrm
stm.h44490644editdlrm
stmmac.h70290644editdlrm
stmp3xxx_rtc_wdt.h3310644editdlrm
stmp_device.h4120644editdlrm
stop_machine.h45170644editdlrm
string.h102480644editdlrm
stringhash.h27150644editdlrm
stringify.h3410644editdlrm
string_helpers.h27580644editdlrm
sungem_phy.h40310644editdlrm
sunserialcore.h11020644editdlrm
sunxi-rsb.h29560644editdlrm
superhyway.h28780644editdlrm
surface_acpi_notify.h10910644editdlrm
suspend.h204960644editdlrm
svga.h38370644editdlrm
sw842.h3280644editdlrm
swab.h5690644editdlrm
swait.h96780644editdlrm
swap.h239920644editdlrm
swapfile.h5560644editdlrm
swapops.h100840644editdlrm
swap_cgroup.h9710644editdlrm
swap_slots.h8410644editdlrm
swiotlb.h54900644editdlrm
switchtec.h111580644editdlrm
sxgbe_platform.h12610644editdlrm
synclink.h9890644editdlrm
sync_core.h5810644editdlrm
sync_file.h16060644editdlrm
sys.h9600644editdlrm
syscalls.h568930644editdlrm
syscall_user_dispatch.h9300644editdlrm
syscore_ops.h6330644editdlrm
sysctl.h88000644editdlrm
sysfb.h27390644editdlrm
sysfs.h180600644editdlrm
syslog.h12660644editdlrm
sysrq.h20020644editdlrm
sysv_fs.h92500644editdlrm
sys_soc.h12940644editdlrm
t10-pi.h15380644editdlrm
taskstats_kern.h9570644editdlrm
task_io_accounting.h11590644editdlrm
task_io_accounting_ops.h26100644editdlrm
task_work.h9340644editdlrm
tboot.h34070644editdlrm
tc.h35340644editdlrm
tca6416_keypad.h6830644editdlrm
tcp.h175530644editdlrm
tee_drv.h187910644editdlrm
textsearch.h48670644editdlrm
textsearch_fsm.h12140644editdlrm
tfrc.h17220644editdlrm
thermal.h158090644editdlrm
threads.h13140644editdlrm
thread_info.h70560644editdlrm
thunderbolt.h212790644editdlrm
ti-emif-sram.h52700644editdlrm
tick.h102880644editdlrm
tifm.h47700644editdlrm
timb_dma.h11930644editdlrm
timb_gpio.h7170644editdlrm
time.h32160644editdlrm
time32.h17950644editdlrm
time64.h45960644editdlrm
timecounter.h42430644editdlrm
timekeeper_internal.h54550644editdlrm
timekeeping.h77890644editdlrm
timer.h80900644editdlrm
timerfd.h5080644editdlrm
timeriomem-rng.h4320644editdlrm
timerqueue.h14300644editdlrm
timex.h68260644editdlrm
time_namespace.h39070644editdlrm
ti_wilink_st.h137810644editdlrm
tnum.h34670644editdlrm
topology.h53770644editdlrm
torture.h45840644editdlrm
toshiba.h4600644editdlrm
tpm.h113400644editdlrm
tpm_command.h8470644editdlrm
tpm_eventlog.h67480644editdlrm
trace.h27900644editdlrm
tracefs.h10180644editdlrm
tracehook.h81580644editdlrm
tracepoint-defs.h23950644editdlrm
tracepoint.h184320644editdlrm
trace_clock.h6670644editdlrm
trace_events.h283420644editdlrm
trace_recursion.h56180644editdlrm
trace_seq.h40390644editdlrm
transport_class.h26410644editdlrm
ts-nbus.h5320644editdlrm
tsacct_kern.h12300644editdlrm
tty.h148690644editdlrm
tty_buffer.h13080644editdlrm
tty_driver.h160620644editdlrm
tty_flip.h17340644editdlrm
tty_ldisc.h86650644editdlrm
tty_port.h74130644editdlrm
typecheck.h7820644editdlrm
types.h58130644editdlrm
u64_stats_sync.h65630644editdlrm
uacce.h38770644editdlrm
uaccess.h133780644editdlrm
ucb1400.h42210644editdlrm
ucs2_string.h6620644editdlrm
udp.h54280644editdlrm
uidgid.h41710644editdlrm
uio.h93190644editdlrm
uio_driver.h48220644editdlrm
umh.h18370644editdlrm
unicode.h10460644editdlrm
units.h26540644editdlrm
uprobes.h61960644editdlrm
usb.h799540644editdlrm
usbdevice_fs.h22340644editdlrm
usb_usual.h36710644editdlrm
user-return-notifier.h12050644editdlrm
user.h220644editdlrm
userfaultfd_k.h65900644editdlrm
usermode_driver.h5150644editdlrm
user_namespace.h61790644editdlrm
util_macros.h25480644editdlrm
uts.h3880644editdlrm
utsname.h18270644editdlrm
uuid.h24000644editdlrm
vbox_utils.h17900644editdlrm
vdpa.h147230644editdlrm
verification.h18150644editdlrm
vermagic.h13080644editdlrm
vexpress.h2970644editdlrm
vfio.h84970644editdlrm
vfio_pci_core.h82660644editdlrm
vfs.h1160644editdlrm
vgaarb.h39720644editdlrm
vga_switcheroo.h88280644editdlrm
vhost_iotlb.h13690644editdlrm
via-core.h67230644editdlrm
via-gpio.h3100644editdlrm
via.h9320644editdlrm
via_i2c.h8440644editdlrm
videodev2.h27690644editdlrm
virtio.h68570644editdlrm
virtio_byteorder.h14910644editdlrm
virtio_caif.h5130644editdlrm
virtio_config.h166430644editdlrm
virtio_console.h19740644editdlrm
virtio_dma_buf.h11470644editdlrm
virtio_net.h61530644editdlrm
virtio_pci_modern.h33310644editdlrm
virtio_ring.h30200644editdlrm
virtio_vsock.h49070644editdlrm
visorbus.h125250644editdlrm
vlynq.h33000644editdlrm
vmacache.h7220644editdlrm
vmalloc.h85970644editdlrm
vme.h57950644editdlrm
vmpressure.h17240644editdlrm
vmstat.h151400644editdlrm
vmw_vmci_api.h29540644editdlrm
vmw_vmci_defs.h307510644editdlrm
vm_event_item.h35380644editdlrm
vringh.h88300644editdlrm
vsc.h19190644editdlrm
vt.h6110644editdlrm
vtime.h47090644editdlrm
vt_buffer.h15300644editdlrm
vt_kern.h54330644editdlrm
w1-gpio.h4930644editdlrm
w1.h91400644editdlrm
wait.h430530644editdlrm
wait_bit.h114680644editdlrm
watchdog.h84090644editdlrm
watch_queue.h39150644editdlrm
win_minmax.h8320644editdlrm
wireless.h16070644editdlrm
wkup_m3_ipc.h17950644editdlrm
wl12xx.h8100644editdlrm
wm97xx.h108420644editdlrm
wmi.h15980644editdlrm
workqueue.h229770644editdlrm
writeback.h131380644editdlrm
wwan.h52550644editdlrm
ww_mutex.h134260644editdlrm
xarray.h578090644editdlrm
xattr.h39770644editdlrm
xxhash.h84730644editdlrm
xz.h114270644editdlrm
yam.h22300644editdlrm
z2_battery.h2990644editdlrm
zconf.h17700644editdlrm
zlib.h287850644editdlrm
zorro.h36530644editdlrm
zpool.h33180644editdlrm
zsmalloc.h16680644editdlrm
zstd.h497460644editdlrm
zutil.h27930644editdlrm
Edit: /usr/src/linux-headers-5.15.0-190/include/linux/sched.h (66282B)
/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _LINUX_SCHED_H #define _LINUX_SCHED_H /* * Define 'struct task_struct' and provide the main scheduler * APIs (schedule(), wakeup variants, etc.) */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* task_struct member predeclarations (sorted alphabetically): */ struct audit_context; struct backing_dev_info; struct bio_list; struct blk_plug; struct bpf_local_storage; struct bpf_run_ctx; struct capture_control; struct cfs_rq; struct fs_struct; struct futex_pi_state; struct io_context; struct io_uring_task; struct mempolicy; struct nameidata; struct nsproxy; struct perf_event_context; struct pid_namespace; struct pipe_inode_info; struct rcu_node; struct reclaim_state; struct robust_list_head; struct root_domain; struct rq; struct sched_attr; struct sched_param; struct seq_file; struct sighand_struct; struct signal_struct; struct task_delay_info; struct task_group; /* * Task state bitmask. NOTE! These bits are also * encoded in fs/proc/array.c: get_task_state(). * * We have two separate sets of flags: task->state * is about runnability, while task->exit_state are * about the task exiting. Confusing, but this way * modifying one set can't modify the other one by * mistake. */ /* Used in tsk->state: */ #define TASK_RUNNING 0x0000 #define TASK_INTERRUPTIBLE 0x0001 #define TASK_UNINTERRUPTIBLE 0x0002 #define __TASK_STOPPED 0x0004 #define __TASK_TRACED 0x0008 /* Used in tsk->exit_state: */ #define EXIT_DEAD 0x0010 #define EXIT_ZOMBIE 0x0020 #define EXIT_TRACE (EXIT_ZOMBIE | EXIT_DEAD) /* Used in tsk->state again: */ #define TASK_PARKED 0x0040 #define TASK_DEAD 0x0080 #define TASK_WAKEKILL 0x0100 #define TASK_WAKING 0x0200 #define TASK_NOLOAD 0x0400 #define TASK_NEW 0x0800 /* RT specific auxilliary flag to mark RT lock waiters */ #define TASK_RTLOCK_WAIT 0x1000 #define TASK_STATE_MAX 0x2000 /* Convenience macros for the sake of set_current_state: */ #define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE) #define TASK_STOPPED (TASK_WAKEKILL | __TASK_STOPPED) #define TASK_TRACED (TASK_WAKEKILL | __TASK_TRACED) #define TASK_IDLE (TASK_UNINTERRUPTIBLE | TASK_NOLOAD) /* Convenience macros for the sake of wake_up(): */ #define TASK_NORMAL (TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE) /* get_task_state(): */ #define TASK_REPORT (TASK_RUNNING | TASK_INTERRUPTIBLE | \ TASK_UNINTERRUPTIBLE | __TASK_STOPPED | \ __TASK_TRACED | EXIT_DEAD | EXIT_ZOMBIE | \ TASK_PARKED) #define task_is_running(task) (READ_ONCE((task)->__state) == TASK_RUNNING) #define task_is_traced(task) ((READ_ONCE(task->__state) & __TASK_TRACED) != 0) #define task_is_stopped(task) ((READ_ONCE(task->__state) & __TASK_STOPPED) != 0) #define task_is_stopped_or_traced(task) ((READ_ONCE(task->__state) & (__TASK_STOPPED | __TASK_TRACED)) != 0) /* * Special states are those that do not use the normal wait-loop pattern. See * the comment with set_special_state(). */ #define is_special_task_state(state) \ ((state) & (__TASK_STOPPED | __TASK_TRACED | TASK_PARKED | TASK_DEAD)) #ifdef CONFIG_DEBUG_ATOMIC_SLEEP # define debug_normal_state_change(state_value) \ do { \ WARN_ON_ONCE(is_special_task_state(state_value)); \ current->task_state_change = _THIS_IP_; \ } while (0) # define debug_special_state_change(state_value) \ do { \ WARN_ON_ONCE(!is_special_task_state(state_value)); \ current->task_state_change = _THIS_IP_; \ } while (0) # define debug_rtlock_wait_set_state() \ do { \ current->saved_state_change = current->task_state_change;\ current->task_state_change = _THIS_IP_; \ } while (0) # define debug_rtlock_wait_restore_state() \ do { \ current->task_state_change = current->saved_state_change;\ } while (0) #else # define debug_normal_state_change(cond) do { } while (0) # define debug_special_state_change(cond) do { } while (0) # define debug_rtlock_wait_set_state() do { } while (0) # define debug_rtlock_wait_restore_state() do { } while (0) #endif /* * set_current_state() includes a barrier so that the write of current->state * is correctly serialised wrt the caller's subsequent test of whether to * actually sleep: * * for (;;) { * set_current_state(TASK_UNINTERRUPTIBLE); * if (CONDITION) * break; * * schedule(); * } * __set_current_state(TASK_RUNNING); * * If the caller does not need such serialisation (because, for instance, the * CONDITION test and condition change and wakeup are under the same lock) then * use __set_current_state(). * * The above is typically ordered against the wakeup, which does: * * CONDITION = 1; * wake_up_state(p, TASK_UNINTERRUPTIBLE); * * where wake_up_state()/try_to_wake_up() executes a full memory barrier before * accessing p->state. * * Wakeup will do: if (@state & p->state) p->state = TASK_RUNNING, that is, * once it observes the TASK_UNINTERRUPTIBLE store the waking CPU can issue a * TASK_RUNNING store which can collide with __set_current_state(TASK_RUNNING). * * However, with slightly different timing the wakeup TASK_RUNNING store can * also collide with the TASK_UNINTERRUPTIBLE store. Losing that store is not * a problem either because that will result in one extra go around the loop * and our @cond test will save the day. * * Also see the comments of try_to_wake_up(). */ #define __set_current_state(state_value) \ do { \ debug_normal_state_change((state_value)); \ WRITE_ONCE(current->__state, (state_value)); \ } while (0) #define set_current_state(state_value) \ do { \ debug_normal_state_change((state_value)); \ smp_store_mb(current->__state, (state_value)); \ } while (0) /* * set_special_state() should be used for those states when the blocking task * can not use the regular condition based wait-loop. In that case we must * serialize against wakeups such that any possible in-flight TASK_RUNNING * stores will not collide with our state change. */ #define set_special_state(state_value) \ do { \ unsigned long flags; /* may shadow */ \ \ raw_spin_lock_irqsave(¤t->pi_lock, flags); \ debug_special_state_change((state_value)); \ WRITE_ONCE(current->__state, (state_value)); \ raw_spin_unlock_irqrestore(¤t->pi_lock, flags); \ } while (0) /* * PREEMPT_RT specific variants for "sleeping" spin/rwlocks * * RT's spin/rwlock substitutions are state preserving. The state of the * task when blocking on the lock is saved in task_struct::saved_state and * restored after the lock has been acquired. These operations are * serialized by task_struct::pi_lock against try_to_wake_up(). Any non RT * lock related wakeups while the task is blocked on the lock are * redirected to operate on task_struct::saved_state to ensure that these * are not dropped. On restore task_struct::saved_state is set to * TASK_RUNNING so any wakeup attempt redirected to saved_state will fail. * * The lock operation looks like this: * * current_save_and_set_rtlock_wait_state(); * for (;;) { * if (try_lock()) * break; * raw_spin_unlock_irq(&lock->wait_lock); * schedule_rtlock(); * raw_spin_lock_irq(&lock->wait_lock); * set_current_state(TASK_RTLOCK_WAIT); * } * current_restore_rtlock_saved_state(); */ #define current_save_and_set_rtlock_wait_state() \ do { \ lockdep_assert_irqs_disabled(); \ raw_spin_lock(¤t->pi_lock); \ current->saved_state = current->__state; \ debug_rtlock_wait_set_state(); \ WRITE_ONCE(current->__state, TASK_RTLOCK_WAIT); \ raw_spin_unlock(¤t->pi_lock); \ } while (0); #define current_restore_rtlock_saved_state() \ do { \ lockdep_assert_irqs_disabled(); \ raw_spin_lock(¤t->pi_lock); \ debug_rtlock_wait_restore_state(); \ WRITE_ONCE(current->__state, current->saved_state); \ current->saved_state = TASK_RUNNING; \ raw_spin_unlock(¤t->pi_lock); \ } while (0); #define get_current_state() READ_ONCE(current->__state) /* Task command name length: */ #define TASK_COMM_LEN 16 extern void scheduler_tick(void); #define MAX_SCHEDULE_TIMEOUT LONG_MAX extern long schedule_timeout(long timeout); extern long schedule_timeout_interruptible(long timeout); extern long schedule_timeout_killable(long timeout); extern long schedule_timeout_uninterruptible(long timeout); extern long schedule_timeout_idle(long timeout); asmlinkage void schedule(void); extern void schedule_preempt_disabled(void); asmlinkage void preempt_schedule_irq(void); #ifdef CONFIG_PREEMPT_RT extern void schedule_rtlock(void); #endif extern int __must_check io_schedule_prepare(void); extern void io_schedule_finish(int token); extern long io_schedule_timeout(long timeout); extern void io_schedule(void); /** * struct prev_cputime - snapshot of system and user cputime * @utime: time spent in user mode * @stime: time spent in system mode * @lock: protects the above two fields * * Stores previous user/system time values such that we can guarantee * monotonicity. */ struct prev_cputime { #ifndef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE u64 utime; u64 stime; raw_spinlock_t lock; #endif }; enum vtime_state { /* Task is sleeping or running in a CPU with VTIME inactive: */ VTIME_INACTIVE = 0, /* Task is idle */ VTIME_IDLE, /* Task runs in kernelspace in a CPU with VTIME active: */ VTIME_SYS, /* Task runs in userspace in a CPU with VTIME active: */ VTIME_USER, /* Task runs as guests in a CPU with VTIME active: */ VTIME_GUEST, }; struct vtime { seqcount_t seqcount; unsigned long long starttime; enum vtime_state state; unsigned int cpu; u64 utime; u64 stime; u64 gtime; }; /* * Utilization clamp constraints. * @UCLAMP_MIN: Minimum utilization * @UCLAMP_MAX: Maximum utilization * @UCLAMP_CNT: Utilization clamp constraints count */ enum uclamp_id { UCLAMP_MIN = 0, UCLAMP_MAX, UCLAMP_CNT }; #ifdef CONFIG_SMP extern struct root_domain def_root_domain; extern struct mutex sched_domains_mutex; #endif struct sched_info { #ifdef CONFIG_SCHED_INFO /* Cumulative counters: */ /* # of times we have run on this CPU: */ unsigned long pcount; /* Time spent waiting on a runqueue: */ unsigned long long run_delay; /* Timestamps: */ /* When did we last run on a CPU? */ unsigned long long last_arrival; /* When were we last queued to run? */ unsigned long long last_queued; #endif /* CONFIG_SCHED_INFO */ }; /* * Integer metrics need fixed point arithmetic, e.g., sched/fair * has a few: load, load_avg, util_avg, freq, and capacity. * * We define a basic fixed point arithmetic range, and then formalize * all these metrics based on that basic range. */ # define SCHED_FIXEDPOINT_SHIFT 10 # define SCHED_FIXEDPOINT_SCALE (1L << SCHED_FIXEDPOINT_SHIFT) /* Increase resolution of cpu_capacity calculations */ # define SCHED_CAPACITY_SHIFT SCHED_FIXEDPOINT_SHIFT # define SCHED_CAPACITY_SCALE (1L << SCHED_CAPACITY_SHIFT) struct load_weight { unsigned long weight; u32 inv_weight; }; /** * struct util_est - Estimation utilization of FAIR tasks * @enqueued: instantaneous estimated utilization of a task/cpu * @ewma: the Exponential Weighted Moving Average (EWMA) * utilization of a task * * Support data structure to track an Exponential Weighted Moving Average * (EWMA) of a FAIR task's utilization. New samples are added to the moving * average each time a task completes an activation. Sample's weight is chosen * so that the EWMA will be relatively insensitive to transient changes to the * task's workload. * * The enqueued attribute has a slightly different meaning for tasks and cpus: * - task: the task's util_avg at last task dequeue time * - cfs_rq: the sum of util_est.enqueued for each RUNNABLE task on that CPU * Thus, the util_est.enqueued of a task represents the contribution on the * estimated utilization of the CPU where that task is currently enqueued. * * Only for tasks we track a moving average of the past instantaneous * estimated utilization. This allows to absorb sporadic drops in utilization * of an otherwise almost periodic task. * * The UTIL_AVG_UNCHANGED flag is used to synchronize util_est with util_avg * updates. When a task is dequeued, its util_est should not be updated if its * util_avg has not been updated in the meantime. * This information is mapped into the MSB bit of util_est.enqueued at dequeue * time. Since max value of util_est.enqueued for a task is 1024 (PELT util_avg * for a task) it is safe to use MSB. */ struct util_est { unsigned int enqueued; unsigned int ewma; #define UTIL_EST_WEIGHT_SHIFT 2 #define UTIL_AVG_UNCHANGED 0x80000000 } __attribute__((__aligned__(sizeof(u64)))); /* * The load/runnable/util_avg accumulates an infinite geometric series * (see __update_load_avg_cfs_rq() in kernel/sched/pelt.c). * * [load_avg definition] * * load_avg = runnable% * scale_load_down(load) * * [runnable_avg definition] * * runnable_avg = runnable% * SCHED_CAPACITY_SCALE * * [util_avg definition] * * util_avg = running% * SCHED_CAPACITY_SCALE * * where runnable% is the time ratio that a sched_entity is runnable and * running% the time ratio that a sched_entity is running. * * For cfs_rq, they are the aggregated values of all runnable and blocked * sched_entities. * * The load/runnable/util_avg doesn't directly factor frequency scaling and CPU * capacity scaling. The scaling is done through the rq_clock_pelt that is used * for computing those signals (see update_rq_clock_pelt()) * * N.B., the above ratios (runnable% and running%) themselves are in the * range of [0, 1]. To do fixed point arithmetics, we therefore scale them * to as large a range as necessary. This is for example reflected by * util_avg's SCHED_CAPACITY_SCALE. * * [Overflow issue] * * The 64-bit load_sum can have 4353082796 (=2^64/47742/88761) entities * with the highest load (=88761), always runnable on a single cfs_rq, * and should not overflow as the number already hits PID_MAX_LIMIT. * * For all other cases (including 32-bit kernels), struct load_weight's * weight will overflow first before we do, because: * * Max(load_avg) <= Max(load.weight) * * Then it is the load_weight's responsibility to consider overflow * issues. */ struct sched_avg { u64 last_update_time; u64 load_sum; u64 runnable_sum; u32 util_sum; u32 period_contrib; unsigned long load_avg; unsigned long runnable_avg; unsigned long util_avg; struct util_est util_est; } ____cacheline_aligned; struct sched_statistics { #ifdef CONFIG_SCHEDSTATS u64 wait_start; u64 wait_max; u64 wait_count; u64 wait_sum; u64 iowait_count; u64 iowait_sum; u64 sleep_start; u64 sleep_max; s64 sum_sleep_runtime; u64 block_start; u64 block_max; u64 exec_max; u64 slice_max; u64 nr_migrations_cold; u64 nr_failed_migrations_affine; u64 nr_failed_migrations_running; u64 nr_failed_migrations_hot; u64 nr_forced_migrations; u64 nr_wakeups; u64 nr_wakeups_sync; u64 nr_wakeups_migrate; u64 nr_wakeups_local; u64 nr_wakeups_remote; u64 nr_wakeups_affine; u64 nr_wakeups_affine_attempts; u64 nr_wakeups_passive; u64 nr_wakeups_idle; #endif } ____cacheline_aligned; struct sched_entity { /* For load-balancing: */ struct load_weight load; struct rb_node run_node; struct list_head group_node; unsigned int on_rq; u64 exec_start; u64 sum_exec_runtime; u64 vruntime; u64 prev_sum_exec_runtime; u64 nr_migrations; #ifdef CONFIG_FAIR_GROUP_SCHED int depth; struct sched_entity *parent; /* rq on which this entity is (to be) queued: */ struct cfs_rq *cfs_rq; /* rq "owned" by this entity/group: */ struct cfs_rq *my_q; /* cached value of my_q->h_nr_running */ unsigned long runnable_weight; #endif #ifdef CONFIG_SMP /* * Per entity load average tracking. * * Put into separate cache line so it does not * collide with read-mostly values above. */ struct sched_avg avg; #endif }; struct sched_rt_entity { struct list_head run_list; unsigned long timeout; unsigned long watchdog_stamp; unsigned int time_slice; unsigned short on_rq; unsigned short on_list; struct sched_rt_entity *back; #ifdef CONFIG_RT_GROUP_SCHED struct sched_rt_entity *parent; /* rq on which this entity is (to be) queued: */ struct rt_rq *rt_rq; /* rq "owned" by this entity/group: */ struct rt_rq *my_q; #endif } __randomize_layout; struct sched_dl_entity { struct rb_node rb_node; /* * Original scheduling parameters. Copied here from sched_attr * during sched_setattr(), they will remain the same until * the next sched_setattr(). */ u64 dl_runtime; /* Maximum runtime for each instance */ u64 dl_deadline; /* Relative deadline of each instance */ u64 dl_period; /* Separation of two instances (period) */ u64 dl_bw; /* dl_runtime / dl_period */ u64 dl_density; /* dl_runtime / dl_deadline */ /* * Actual scheduling parameters. Initialized with the values above, * they are continuously updated during task execution. Note that * the remaining runtime could be < 0 in case we are in overrun. */ s64 runtime; /* Remaining runtime for this instance */ u64 deadline; /* Absolute deadline for this instance */ unsigned int flags; /* Specifying the scheduler behaviour */ /* * Some bool flags: * * @dl_throttled tells if we exhausted the runtime. If so, the * task has to wait for a replenishment to be performed at the * next firing of dl_timer. * * @dl_yielded tells if task gave up the CPU before consuming * all its available runtime during the last job. * * @dl_non_contending tells if the task is inactive while still * contributing to the active utilization. In other words, it * indicates if the inactive timer has been armed and its handler * has not been executed yet. This flag is useful to avoid race * conditions between the inactive timer handler and the wakeup * code. * * @dl_overrun tells if the task asked to be informed about runtime * overruns. */ unsigned int dl_throttled : 1; unsigned int dl_yielded : 1; unsigned int dl_non_contending : 1; unsigned int dl_overrun : 1; /* * Bandwidth enforcement timer. Each -deadline task has its * own bandwidth to be enforced, thus we need one timer per task. */ struct hrtimer dl_timer; /* * Inactive timer, responsible for decreasing the active utilization * at the "0-lag time". When a -deadline task blocks, it contributes * to GRUB's active utilization until the "0-lag time", hence a * timer is needed to decrease the active utilization at the correct * time. */ struct hrtimer inactive_timer; #ifdef CONFIG_RT_MUTEXES /* * Priority Inheritance. When a DEADLINE scheduling entity is boosted * pi_se points to the donor, otherwise points to the dl_se it belongs * to (the original one/itself). */ struct sched_dl_entity *pi_se; #endif }; #ifdef CONFIG_UCLAMP_TASK /* Number of utilization clamp buckets (shorter alias) */ #define UCLAMP_BUCKETS CONFIG_UCLAMP_BUCKETS_COUNT /* * Utilization clamp for a scheduling entity * @value: clamp value "assigned" to a se * @bucket_id: bucket index corresponding to the "assigned" value * @active: the se is currently refcounted in a rq's bucket * @user_defined: the requested clamp value comes from user-space * * The bucket_id is the index of the clamp bucket matching the clamp value * which is pre-computed and stored to avoid expensive integer divisions from * the fast path. * * The active bit is set whenever a task has got an "effective" value assigned, * which can be different from the clamp value "requested" from user-space. * This allows to know a task is refcounted in the rq's bucket corresponding * to the "effective" bucket_id. * * The user_defined bit is set whenever a task has got a task-specific clamp * value requested from userspace, i.e. the system defaults apply to this task * just as a restriction. This allows to relax default clamps when a less * restrictive task-specific value has been requested, thus allowing to * implement a "nice" semantic. For example, a task running with a 20% * default boost can still drop its own boosting to 0%. */ struct uclamp_se { unsigned int value : bits_per(SCHED_CAPACITY_SCALE); unsigned int bucket_id : bits_per(UCLAMP_BUCKETS); unsigned int active : 1; unsigned int user_defined : 1; }; #endif /* CONFIG_UCLAMP_TASK */ union rcu_special { struct { u8 blocked; u8 need_qs; u8 exp_hint; /* Hint for performance. */ u8 need_mb; /* Readers need smp_mb(). */ } b; /* Bits. */ u32 s; /* Set of bits. */ }; enum perf_event_task_context { perf_invalid_context = -1, perf_hw_context = 0, perf_sw_context, perf_nr_task_contexts, }; struct wake_q_node { struct wake_q_node *next; }; struct kmap_ctrl { #ifdef CONFIG_KMAP_LOCAL int idx; pte_t pteval[KM_MAX_IDX]; #endif }; struct task_struct { #ifdef CONFIG_THREAD_INFO_IN_TASK /* * For reasons of header soup (see current_thread_info()), this * must be the first element of task_struct. */ struct thread_info thread_info; #endif unsigned int __state; #ifdef CONFIG_PREEMPT_RT /* saved state for "spinlock sleepers" */ unsigned int saved_state; #endif /* * This begins the randomizable portion of task_struct. Only * scheduling-critical items should be added above here. */ randomized_struct_fields_start void *stack; refcount_t usage; /* Per task flags (PF_*), defined further below: */ unsigned int flags; unsigned int ptrace; #ifdef CONFIG_SMP int on_cpu; struct __call_single_node wake_entry; #ifdef CONFIG_THREAD_INFO_IN_TASK /* Current CPU: */ unsigned int cpu; #endif unsigned int wakee_flips; unsigned long wakee_flip_decay_ts; struct task_struct *last_wakee; /* * recent_used_cpu is initially set as the last CPU used by a task * that wakes affine another task. Waker/wakee relationships can * push tasks around a CPU where each wakeup moves to the next one. * Tracking a recently used CPU allows a quick search for a recently * used CPU that may be idle. */ int recent_used_cpu; int wake_cpu; #endif int on_rq; int prio; int static_prio; int normal_prio; unsigned int rt_priority; const struct sched_class *sched_class; struct sched_entity se; struct sched_rt_entity rt; struct sched_dl_entity dl; #ifdef CONFIG_SCHED_CORE struct rb_node core_node; unsigned long core_cookie; unsigned int core_occupation; #endif #ifdef CONFIG_CGROUP_SCHED struct task_group *sched_task_group; #endif #ifdef CONFIG_UCLAMP_TASK /* * Clamp values requested for a scheduling entity. * Must be updated with task_rq_lock() held. */ struct uclamp_se uclamp_req[UCLAMP_CNT]; /* * Effective clamp values used for a scheduling entity. * Must be updated with task_rq_lock() held. */ struct uclamp_se uclamp[UCLAMP_CNT]; #endif struct sched_statistics stats; #ifdef CONFIG_PREEMPT_NOTIFIERS /* List of struct preempt_notifier: */ struct hlist_head preempt_notifiers; #endif #ifdef CONFIG_BLK_DEV_IO_TRACE unsigned int btrace_seq; #endif unsigned int policy; int nr_cpus_allowed; const cpumask_t *cpus_ptr; cpumask_t *user_cpus_ptr; cpumask_t cpus_mask; void *migration_pending; #ifdef CONFIG_SMP unsigned short migration_disabled; #endif unsigned short migration_flags; #ifdef CONFIG_PREEMPT_RCU int rcu_read_lock_nesting; union rcu_special rcu_read_unlock_special; struct list_head rcu_node_entry; struct rcu_node *rcu_blocked_node; #endif /* #ifdef CONFIG_PREEMPT_RCU */ #ifdef CONFIG_TASKS_RCU unsigned long rcu_tasks_nvcsw; u8 rcu_tasks_holdout; u8 rcu_tasks_idx; int rcu_tasks_idle_cpu; struct list_head rcu_tasks_holdout_list; #endif /* #ifdef CONFIG_TASKS_RCU */ #ifdef CONFIG_TASKS_TRACE_RCU int trc_reader_nesting; int trc_ipi_to_cpu; union rcu_special trc_reader_special; bool trc_reader_checked; struct list_head trc_holdout_list; #endif /* #ifdef CONFIG_TASKS_TRACE_RCU */ struct sched_info sched_info; struct list_head tasks; #ifdef CONFIG_SMP struct plist_node pushable_tasks; struct rb_node pushable_dl_tasks; #endif struct mm_struct *mm; struct mm_struct *active_mm; /* Per-thread vma caching: */ struct vmacache vmacache; #ifdef SPLIT_RSS_COUNTING struct task_rss_stat rss_stat; #endif int exit_state; int exit_code; int exit_signal; /* The signal sent when the parent dies: */ int pdeath_signal; /* JOBCTL_*, siglock protected: */ unsigned long jobctl; /* Used for emulating ABI behavior of previous Linux versions: */ unsigned int personality; /* Scheduler bits, serialized by scheduler locks: */ unsigned sched_reset_on_fork:1; unsigned sched_contributes_to_load:1; unsigned sched_migrated:1; unsigned sched_task_hot:1; /* Force alignment to the next boundary: */ unsigned :0; /* Unserialized, strictly 'current' */ /* * This field must not be in the scheduler word above due to wakelist * queueing no longer being serialized by p->on_cpu. However: * * p->XXX = X; ttwu() * schedule() if (p->on_rq && ..) // false * smp_mb__after_spinlock(); if (smp_load_acquire(&p->on_cpu) && //true * deactivate_task() ttwu_queue_wakelist()) * p->on_rq = 0; p->sched_remote_wakeup = Y; * * guarantees all stores of 'current' are visible before * ->sched_remote_wakeup gets used, so it can be in this word. */ unsigned sched_remote_wakeup:1; /* Save user-dumpable when mm goes away */ unsigned user_dumpable:1; /* Bit to tell LSMs we're in execve(): */ unsigned in_execve:1; unsigned in_iowait:1; #ifndef TIF_RESTORE_SIGMASK unsigned restore_sigmask:1; #endif #ifdef CONFIG_MEMCG unsigned in_user_fault:1; #endif #ifdef CONFIG_COMPAT_BRK unsigned brk_randomized:1; #endif #ifdef CONFIG_CGROUPS /* disallow userland-initiated cgroup migration */ unsigned no_cgroup_migration:1; /* task is frozen/stopped (used by the cgroup freezer) */ unsigned frozen:1; #endif #ifdef CONFIG_BLK_CGROUP unsigned use_memdelay:1; #endif #ifdef CONFIG_PSI /* Stalled due to lack of memory */ unsigned in_memstall:1; #endif #ifdef CONFIG_PAGE_OWNER /* Used by page_owner=on to detect recursion in page tracking. */ unsigned in_page_owner:1; #endif #ifdef CONFIG_EVENTFD /* Recursion prevention for eventfd_signal() */ unsigned in_eventfd:1; #endif unsigned long atomic_flags; /* Flags requiring atomic access. */ struct restart_block restart_block; pid_t pid; pid_t tgid; #ifdef CONFIG_STACKPROTECTOR /* Canary value for the -fstack-protector GCC feature: */ unsigned long stack_canary; #endif /* * Pointers to the (original) parent process, youngest child, younger sibling, * older sibling, respectively. (p->father can be replaced with * p->real_parent->pid) */ /* Real parent process: */ struct task_struct __rcu *real_parent; /* Recipient of SIGCHLD, wait4() reports: */ struct task_struct __rcu *parent; /* * Children/sibling form the list of natural children: */ struct list_head children; struct list_head sibling; struct task_struct *group_leader; /* * 'ptraced' is the list of tasks this task is using ptrace() on. * * This includes both natural children and PTRACE_ATTACH targets. * 'ptrace_entry' is this task's link on the p->parent->ptraced list. */ struct list_head ptraced; struct list_head ptrace_entry; /* PID/PID hash table linkage. */ struct pid *thread_pid; struct hlist_node pid_links[PIDTYPE_MAX]; struct list_head thread_group; struct list_head thread_node; struct completion *vfork_done; /* CLONE_CHILD_SETTID: */ int __user *set_child_tid; /* CLONE_CHILD_CLEARTID: */ int __user *clear_child_tid; /* PF_IO_WORKER */ void *pf_io_worker; u64 utime; u64 stime; #ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME u64 utimescaled; u64 stimescaled; #endif u64 gtime; struct prev_cputime prev_cputime; #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN struct vtime vtime; #endif #ifdef CONFIG_NO_HZ_FULL atomic_t tick_dep_mask; #endif /* Context switch counts: */ unsigned long nvcsw; unsigned long nivcsw; /* Monotonic time in nsecs: */ u64 start_time; /* Boot based time in nsecs: */ u64 start_boottime; /* MM fault and swap info: this can arguably be seen as either mm-specific or thread-specific: */ unsigned long min_flt; unsigned long maj_flt; /* Empty if CONFIG_POSIX_CPUTIMERS=n */ struct posix_cputimers posix_cputimers; #ifdef CONFIG_POSIX_CPU_TIMERS_TASK_WORK struct posix_cputimers_work posix_cputimers_work; #endif /* Process credentials: */ /* Tracer's credentials at attach: */ const struct cred __rcu *ptracer_cred; /* Objective and real subjective task credentials (COW): */ const struct cred __rcu *real_cred; /* Effective (overridable) subjective task credentials (COW): */ const struct cred __rcu *cred; #ifdef CONFIG_KEYS /* Cached requested key. */ struct key *cached_requested_key; #endif /* * executable name, excluding path. * * - normally initialized setup_new_exec() * - access it with [gs]et_task_comm() * - lock it with task_lock() */ char comm[TASK_COMM_LEN]; struct nameidata *nameidata; #ifdef CONFIG_SYSVIPC struct sysv_sem sysvsem; struct sysv_shm sysvshm; #endif #ifdef CONFIG_DETECT_HUNG_TASK unsigned long last_switch_count; unsigned long last_switch_time; #endif /* Filesystem information: */ struct fs_struct *fs; /* Open file information: */ struct files_struct *files; #ifdef CONFIG_IO_URING struct io_uring_task *io_uring; #endif /* Namespaces: */ struct nsproxy *nsproxy; /* Signal handlers: */ struct signal_struct *signal; struct sighand_struct __rcu *sighand; sigset_t blocked; sigset_t real_blocked; /* Restored if set_restore_sigmask() was used: */ sigset_t saved_sigmask; struct sigpending pending; unsigned long sas_ss_sp; size_t sas_ss_size; unsigned int sas_ss_flags; struct callback_head *task_works; #ifdef CONFIG_AUDIT #ifdef CONFIG_AUDITSYSCALL struct audit_context *audit_context; #endif kuid_t loginuid; unsigned int sessionid; #endif struct seccomp seccomp; struct syscall_user_dispatch syscall_dispatch; /* Thread group tracking: */ u64 parent_exec_id; u64 self_exec_id; /* Protection against (de-)allocation: mm, files, fs, tty, keyrings, mems_allowed, mempolicy: */ spinlock_t alloc_lock; /* Protection of the PI data structures: */ raw_spinlock_t pi_lock; struct wake_q_node wake_q; #ifdef CONFIG_RT_MUTEXES /* PI waiters blocked on a rt_mutex held by this task: */ struct rb_root_cached pi_waiters; /* Updated under owner's pi_lock and rq lock */ struct task_struct *pi_top_task; /* Deadlock detection and priority inheritance handling: */ struct rt_mutex_waiter *pi_blocked_on; #endif #ifdef CONFIG_DEBUG_MUTEXES /* Mutex deadlock detection: */ struct mutex_waiter *blocked_on; #endif #ifdef CONFIG_DEBUG_ATOMIC_SLEEP int non_block_count; #endif #ifdef CONFIG_TRACE_IRQFLAGS struct irqtrace_events irqtrace; unsigned int hardirq_threaded; u64 hardirq_chain_key; int softirqs_enabled; int softirq_context; int irq_config; #endif #ifdef CONFIG_PREEMPT_RT int softirq_disable_cnt; #endif #ifdef CONFIG_LOCKDEP # define MAX_LOCK_DEPTH 48UL u64 curr_chain_key; int lockdep_depth; unsigned int lockdep_recursion; struct held_lock held_locks[MAX_LOCK_DEPTH]; #endif #if defined(CONFIG_UBSAN) && !defined(CONFIG_UBSAN_TRAP) unsigned int in_ubsan; #endif /* Journalling filesystem info: */ void *journal_info; /* Stacked block device info: */ struct bio_list *bio_list; #ifdef CONFIG_BLOCK /* Stack plugging: */ struct blk_plug *plug; #endif /* VM state: */ struct reclaim_state *reclaim_state; struct backing_dev_info *backing_dev_info; struct io_context *io_context; #ifdef CONFIG_COMPACTION struct capture_control *capture_control; #endif /* Ptrace state: */ unsigned long ptrace_message; kernel_siginfo_t *last_siginfo; struct task_io_accounting ioac; #ifdef CONFIG_PSI /* Pressure stall state */ unsigned int psi_flags; #endif #ifdef CONFIG_TASK_XACCT /* Accumulated RSS usage: */ u64 acct_rss_mem1; /* Accumulated virtual memory usage: */ u64 acct_vm_mem1; /* stime + utime since last update: */ u64 acct_timexpd; #endif #ifdef CONFIG_CPUSETS /* Protected by ->alloc_lock: */ nodemask_t mems_allowed; /* Sequence number to catch updates: */ seqcount_spinlock_t mems_allowed_seq; int cpuset_mem_spread_rotor; int cpuset_slab_spread_rotor; #endif #ifdef CONFIG_CGROUPS /* Control Group info protected by css_set_lock: */ struct css_set __rcu *cgroups; /* cg_list protected by css_set_lock and tsk->alloc_lock: */ struct list_head cg_list; #endif #ifdef CONFIG_X86_CPU_RESCTRL u32 closid; u32 rmid; #endif #ifdef CONFIG_FUTEX struct robust_list_head __user *robust_list; #ifdef CONFIG_COMPAT struct compat_robust_list_head __user *compat_robust_list; #endif struct list_head pi_state_list; struct futex_pi_state *pi_state_cache; struct mutex futex_exit_mutex; unsigned int futex_state; #endif #ifdef CONFIG_PERF_EVENTS struct perf_event_context *perf_event_ctxp[perf_nr_task_contexts]; struct mutex perf_event_mutex; struct list_head perf_event_list; #endif #ifdef CONFIG_DEBUG_PREEMPT unsigned long preempt_disable_ip; #endif #ifdef CONFIG_NUMA /* Protected by alloc_lock: */ struct mempolicy *mempolicy; short il_prev; short pref_node_fork; #endif #ifdef CONFIG_NUMA_BALANCING int numa_scan_seq; unsigned int numa_scan_period; unsigned int numa_scan_period_max; int numa_preferred_nid; unsigned long numa_migrate_retry; /* Migration stamp: */ u64 node_stamp; u64 last_task_numa_placement; u64 last_sum_exec_runtime; struct callback_head numa_work; /* * This pointer is only modified for current in syscall and * pagefault context (and for tasks being destroyed), so it can be read * from any of the following contexts: * - RCU read-side critical section * - current->numa_group from everywhere * - task's runqueue locked, task not running */ struct numa_group __rcu *numa_group; /* * numa_faults is an array split into four regions: * faults_memory, faults_cpu, faults_memory_buffer, faults_cpu_buffer * in this precise order. * * faults_memory: Exponential decaying average of faults on a per-node * basis. Scheduling placement decisions are made based on these * counts. The values remain static for the duration of a PTE scan. * faults_cpu: Track the nodes the process was running on when a NUMA * hinting fault was incurred. * faults_memory_buffer and faults_cpu_buffer: Record faults per node * during the current scan window. When the scan completes, the counts * in faults_memory and faults_cpu decay and these values are copied. */ unsigned long *numa_faults; unsigned long total_numa_faults; /* * numa_faults_locality tracks if faults recorded during the last * scan window were remote/local or failed to migrate. The task scan * period is adapted based on the locality of the faults with different * weights depending on whether they were shared or private faults */ unsigned long numa_faults_locality[3]; unsigned long numa_pages_migrated; #endif /* CONFIG_NUMA_BALANCING */ #ifdef CONFIG_RSEQ struct rseq __user *rseq; u32 rseq_sig; /* * RmW on rseq_event_mask must be performed atomically * with respect to preemption. */ unsigned long rseq_event_mask; #endif struct tlbflush_unmap_batch tlb_ubc; union { refcount_t rcu_users; struct rcu_head rcu; }; /* Cache last used pipe for splice(): */ struct pipe_inode_info *splice_pipe; struct page_frag task_frag; #ifdef CONFIG_TASK_DELAY_ACCT struct task_delay_info *delays; #endif #ifdef CONFIG_FAULT_INJECTION int make_it_fail; unsigned int fail_nth; #endif /* * When (nr_dirtied >= nr_dirtied_pause), it's time to call * balance_dirty_pages() for a dirty throttling pause: */ int nr_dirtied; int nr_dirtied_pause; /* Start of a write-and-pause period: */ unsigned long dirty_paused_when; #ifdef CONFIG_LATENCYTOP int latency_record_count; struct latency_record latency_record[LT_SAVECOUNT]; #endif /* * Time slack values; these are used to round up poll() and * select() etc timeout values. These are in nanoseconds. */ u64 timer_slack_ns; u64 default_timer_slack_ns; #if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS) unsigned int kasan_depth; #endif #ifdef CONFIG_KCSAN struct kcsan_ctx kcsan_ctx; #ifdef CONFIG_TRACE_IRQFLAGS struct irqtrace_events kcsan_save_irqtrace; #endif #endif #if IS_ENABLED(CONFIG_KUNIT) struct kunit *kunit_test; #endif #ifdef CONFIG_FUNCTION_GRAPH_TRACER /* Index of current stored address in ret_stack: */ int curr_ret_stack; int curr_ret_depth; /* Stack of return addresses for return function tracing: */ struct ftrace_ret_stack *ret_stack; /* Timestamp for last schedule: */ unsigned long long ftrace_timestamp; /* * Number of functions that haven't been traced * because of depth overrun: */ atomic_t trace_overrun; /* Pause tracing: */ atomic_t tracing_graph_pause; #endif #ifdef CONFIG_TRACING /* State flags for use by tracers: */ unsigned long trace; /* Bitmask and counter of trace recursion: */ unsigned long trace_recursion; #endif /* CONFIG_TRACING */ #ifdef CONFIG_KCOV /* See kernel/kcov.c for more details. */ /* Coverage collection mode enabled for this task (0 if disabled): */ unsigned int kcov_mode; /* Size of the kcov_area: */ unsigned int kcov_size; /* Buffer for coverage collection: */ void *kcov_area; /* KCOV descriptor wired with this task or NULL: */ struct kcov *kcov; /* KCOV common handle for remote coverage collection: */ u64 kcov_handle; /* KCOV sequence number: */ int kcov_sequence; /* Collect coverage from softirq context: */ unsigned int kcov_softirq; #endif #ifdef CONFIG_MEMCG struct mem_cgroup *memcg_in_oom; gfp_t memcg_oom_gfp_mask; int memcg_oom_order; /* Number of pages to reclaim on returning to userland: */ unsigned int memcg_nr_pages_over_high; /* Used by memcontrol for targeted memcg charge: */ struct mem_cgroup *active_memcg; #endif #ifdef CONFIG_BLK_CGROUP struct request_queue *throttle_queue; #endif #ifdef CONFIG_UPROBES struct uprobe_task *utask; #endif #if defined(CONFIG_BCACHE) || defined(CONFIG_BCACHE_MODULE) unsigned int sequential_io; unsigned int sequential_io_avg; #endif struct kmap_ctrl kmap_ctrl; #ifdef CONFIG_DEBUG_ATOMIC_SLEEP unsigned long task_state_change; # ifdef CONFIG_PREEMPT_RT unsigned long saved_state_change; # endif #endif int pagefault_disabled; #ifdef CONFIG_MMU struct task_struct *oom_reaper_list; struct timer_list oom_reaper_timer; #endif #ifdef CONFIG_VMAP_STACK struct vm_struct *stack_vm_area; #endif #ifdef CONFIG_THREAD_INFO_IN_TASK /* A live task holds one reference: */ refcount_t stack_refcount; #endif #ifdef CONFIG_LIVEPATCH int patch_state; #endif #ifdef CONFIG_SECURITY /* Used by LSM modules for access restriction: */ void *security; #endif #ifdef CONFIG_BPF_SYSCALL /* Used by BPF task local storage */ struct bpf_local_storage __rcu *bpf_storage; /* Used for BPF run context */ struct bpf_run_ctx *bpf_ctx; #endif #ifdef CONFIG_GCC_PLUGIN_STACKLEAK unsigned long lowest_stack; unsigned long prev_lowest_stack; #endif #ifdef CONFIG_X86_MCE void __user *mce_vaddr; __u64 mce_kflags; u64 mce_addr; __u64 mce_ripv : 1, mce_whole_page : 1, __mce_reserved : 62; struct callback_head mce_kill_me; int mce_count; #endif #ifdef CONFIG_KRETPROBES struct llist_head kretprobe_instances; #endif #ifdef CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH /* * If L1D flush is supported on mm context switch * then we use this callback head to queue kill work * to kill tasks that are not running on SMT disabled * cores */ struct callback_head l1d_flush_kill; #endif /* * New fields for task_struct should be added above here, so that * they are included in the randomized portion of task_struct. */ randomized_struct_fields_end /* CPU-specific state of this task: */ struct thread_struct thread; /* * WARNING: on x86, 'thread_struct' contains a variable-sized * structure. It *MUST* be at the end of 'task_struct'. * * Do not put anything below here! */ }; static inline struct pid *task_pid(struct task_struct *task) { return task->thread_pid; } /* * the helpers to get the task's different pids as they are seen * from various namespaces * * task_xid_nr() : global id, i.e. the id seen from the init namespace; * task_xid_vnr() : virtual id, i.e. the id seen from the pid namespace of * current. * task_xid_nr_ns() : id seen from the ns specified; * * see also pid_nr() etc in include/linux/pid.h */ pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type, struct pid_namespace *ns); static inline pid_t task_pid_nr(struct task_struct *tsk) { return tsk->pid; } static inline pid_t task_pid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns) { return __task_pid_nr_ns(tsk, PIDTYPE_PID, ns); } static inline pid_t task_pid_vnr(struct task_struct *tsk) { return __task_pid_nr_ns(tsk, PIDTYPE_PID, NULL); } static inline pid_t task_tgid_nr(struct task_struct *tsk) { return tsk->tgid; } /** * pid_alive - check that a task structure is not stale * @p: Task structure to be checked. * * Test if a process is not yet dead (at most zombie state) * If pid_alive fails, then pointers within the task structure * can be stale and must not be dereferenced. * * Return: 1 if the process is alive. 0 otherwise. */ static inline int pid_alive(const struct task_struct *p) { return p->thread_pid != NULL; } static inline pid_t task_pgrp_nr_ns(struct task_struct *tsk, struct pid_namespace *ns) { return __task_pid_nr_ns(tsk, PIDTYPE_PGID, ns); } static inline pid_t task_pgrp_vnr(struct task_struct *tsk) { return __task_pid_nr_ns(tsk, PIDTYPE_PGID, NULL); } static inline pid_t task_session_nr_ns(struct task_struct *tsk, struct pid_namespace *ns) { return __task_pid_nr_ns(tsk, PIDTYPE_SID, ns); } static inline pid_t task_session_vnr(struct task_struct *tsk) { return __task_pid_nr_ns(tsk, PIDTYPE_SID, NULL); } static inline pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns) { return __task_pid_nr_ns(tsk, PIDTYPE_TGID, ns); } static inline pid_t task_tgid_vnr(struct task_struct *tsk) { return __task_pid_nr_ns(tsk, PIDTYPE_TGID, NULL); } static inline pid_t task_ppid_nr_ns(const struct task_struct *tsk, struct pid_namespace *ns) { pid_t pid = 0; rcu_read_lock(); if (pid_alive(tsk)) pid = task_tgid_nr_ns(rcu_dereference(tsk->real_parent), ns); rcu_read_unlock(); return pid; } static inline pid_t task_ppid_nr(const struct task_struct *tsk) { return task_ppid_nr_ns(tsk, &init_pid_ns); } /* Obsolete, do not use: */ static inline pid_t task_pgrp_nr(struct task_struct *tsk) { return task_pgrp_nr_ns(tsk, &init_pid_ns); } #define TASK_REPORT_IDLE (TASK_REPORT + 1) #define TASK_REPORT_MAX (TASK_REPORT_IDLE << 1) static inline unsigned int task_state_index(struct task_struct *tsk) { unsigned int tsk_state = READ_ONCE(tsk->__state); unsigned int state = (tsk_state | tsk->exit_state) & TASK_REPORT; BUILD_BUG_ON_NOT_POWER_OF_2(TASK_REPORT_MAX); if (tsk_state == TASK_IDLE) state = TASK_REPORT_IDLE; /* * We're lying here, but rather than expose a completely new task state * to userspace, we can make this appear as if the task has gone through * a regular rt_mutex_lock() call. */ if (tsk_state == TASK_RTLOCK_WAIT) state = TASK_UNINTERRUPTIBLE; return fls(state); } static inline char task_index_to_char(unsigned int state) { static const char state_char[] = "RSDTtXZPI"; BUILD_BUG_ON(1 + ilog2(TASK_REPORT_MAX) != sizeof(state_char) - 1); return state_char[state]; } static inline char task_state_to_char(struct task_struct *tsk) { return task_index_to_char(task_state_index(tsk)); } /** * is_global_init - check if a task structure is init. Since init * is free to have sub-threads we need to check tgid. * @tsk: Task structure to be checked. * * Check if a task structure is the first user space task the kernel created. * * Return: 1 if the task structure is init. 0 otherwise. */ static inline int is_global_init(struct task_struct *tsk) { return task_tgid_nr(tsk) == 1; } extern struct pid *cad_pid; /* * Per process flags */ #define PF_VCPU 0x00000001 /* I'm a virtual CPU */ #define PF_IDLE 0x00000002 /* I am an IDLE thread */ #define PF_EXITING 0x00000004 /* Getting shut down */ #define PF_IO_WORKER 0x00000010 /* Task is an IO worker */ #define PF_WQ_WORKER 0x00000020 /* I'm a workqueue worker */ #define PF_FORKNOEXEC 0x00000040 /* Forked but didn't exec */ #define PF_MCE_PROCESS 0x00000080 /* Process policy on mce errors */ #define PF_SUPERPRIV 0x00000100 /* Used super-user privileges */ #define PF_DUMPCORE 0x00000200 /* Dumped core */ #define PF_SIGNALED 0x00000400 /* Killed by a signal */ #define PF_MEMALLOC 0x00000800 /* Allocating memory */ #define PF_NPROC_EXCEEDED 0x00001000 /* set_user() noticed that RLIMIT_NPROC was exceeded */ #define PF_USED_MATH 0x00002000 /* If unset the fpu must be initialized before use */ #define PF_NOFREEZE 0x00008000 /* This thread should not be frozen */ #define PF_FROZEN 0x00010000 /* Frozen for system suspend */ #define PF_KSWAPD 0x00020000 /* I am kswapd */ #define PF_MEMALLOC_NOFS 0x00040000 /* All allocation requests will inherit GFP_NOFS */ #define PF_MEMALLOC_NOIO 0x00080000 /* All allocation requests will inherit GFP_NOIO */ #define PF_LOCAL_THROTTLE 0x00100000 /* Throttle writes only against the bdi I write to, * I am cleaning dirty pages from some other bdi. */ #define PF_KTHREAD 0x00200000 /* I am a kernel thread */ #define PF_RANDOMIZE 0x00400000 /* Randomize virtual address space */ #define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */ #define PF_NO_SETAFFINITY 0x04000000 /* Userland is not allowed to meddle with cpus_mask */ #define PF_MCE_EARLY 0x08000000 /* Early kill for mce process policy */ #define PF_MEMALLOC_PIN 0x10000000 /* Allocation context constrained to zones which allow long term pinning. */ #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezable */ #define PF_SUSPEND_TASK 0x80000000 /* This thread called freeze_processes() and should not be frozen */ /* * Only the _current_ task can read/write to tsk->flags, but other * tasks can access tsk->flags in readonly mode for example * with tsk_used_math (like during threaded core dumping). * There is however an exception to this rule during ptrace * or during fork: the ptracer task is allowed to write to the * child->flags of its traced child (same goes for fork, the parent * can write to the child->flags), because we're guaranteed the * child is not running and in turn not changing child->flags * at the same time the parent does it. */ #define clear_stopped_child_used_math(child) do { (child)->flags &= ~PF_USED_MATH; } while (0) #define set_stopped_child_used_math(child) do { (child)->flags |= PF_USED_MATH; } while (0) #define clear_used_math() clear_stopped_child_used_math(current) #define set_used_math() set_stopped_child_used_math(current) #define conditional_stopped_child_used_math(condition, child) \ do { (child)->flags &= ~PF_USED_MATH, (child)->flags |= (condition) ? PF_USED_MATH : 0; } while (0) #define conditional_used_math(condition) conditional_stopped_child_used_math(condition, current) #define copy_to_stopped_child_used_math(child) \ do { (child)->flags &= ~PF_USED_MATH, (child)->flags |= current->flags & PF_USED_MATH; } while (0) /* NOTE: this will return 0 or PF_USED_MATH, it will never return 1 */ #define tsk_used_math(p) ((p)->flags & PF_USED_MATH) #define used_math() tsk_used_math(current) static __always_inline bool is_percpu_thread(void) { #ifdef CONFIG_SMP return (current->flags & PF_NO_SETAFFINITY) && (current->nr_cpus_allowed == 1); #else return true; #endif } /* Per-process atomic flags. */ #define PFA_NO_NEW_PRIVS 0 /* May not gain new privileges. */ #define PFA_SPREAD_PAGE 1 /* Spread page cache over cpuset */ #define PFA_SPREAD_SLAB 2 /* Spread some slab caches over cpuset */ #define PFA_SPEC_SSB_DISABLE 3 /* Speculative Store Bypass disabled */ #define PFA_SPEC_SSB_FORCE_DISABLE 4 /* Speculative Store Bypass force disabled*/ #define PFA_SPEC_IB_DISABLE 5 /* Indirect branch speculation restricted */ #define PFA_SPEC_IB_FORCE_DISABLE 6 /* Indirect branch speculation permanently restricted */ #define PFA_SPEC_SSB_NOEXEC 7 /* Speculative Store Bypass clear on execve() */ #define TASK_PFA_TEST(name, func) \ static inline bool task_##func(struct task_struct *p) \ { return test_bit(PFA_##name, &p->atomic_flags); } #define TASK_PFA_SET(name, func) \ static inline void task_set_##func(struct task_struct *p) \ { set_bit(PFA_##name, &p->atomic_flags); } #define TASK_PFA_CLEAR(name, func) \ static inline void task_clear_##func(struct task_struct *p) \ { clear_bit(PFA_##name, &p->atomic_flags); } TASK_PFA_TEST(NO_NEW_PRIVS, no_new_privs) TASK_PFA_SET(NO_NEW_PRIVS, no_new_privs) TASK_PFA_TEST(SPREAD_PAGE, spread_page) TASK_PFA_SET(SPREAD_PAGE, spread_page) TASK_PFA_CLEAR(SPREAD_PAGE, spread_page) TASK_PFA_TEST(SPREAD_SLAB, spread_slab) TASK_PFA_SET(SPREAD_SLAB, spread_slab) TASK_PFA_CLEAR(SPREAD_SLAB, spread_slab) TASK_PFA_TEST(SPEC_SSB_DISABLE, spec_ssb_disable) TASK_PFA_SET(SPEC_SSB_DISABLE, spec_ssb_disable) TASK_PFA_CLEAR(SPEC_SSB_DISABLE, spec_ssb_disable) TASK_PFA_TEST(SPEC_SSB_NOEXEC, spec_ssb_noexec) TASK_PFA_SET(SPEC_SSB_NOEXEC, spec_ssb_noexec) TASK_PFA_CLEAR(SPEC_SSB_NOEXEC, spec_ssb_noexec) TASK_PFA_TEST(SPEC_SSB_FORCE_DISABLE, spec_ssb_force_disable) TASK_PFA_SET(SPEC_SSB_FORCE_DISABLE, spec_ssb_force_disable) TASK_PFA_TEST(SPEC_IB_DISABLE, spec_ib_disable) TASK_PFA_SET(SPEC_IB_DISABLE, spec_ib_disable) TASK_PFA_CLEAR(SPEC_IB_DISABLE, spec_ib_disable) TASK_PFA_TEST(SPEC_IB_FORCE_DISABLE, spec_ib_force_disable) TASK_PFA_SET(SPEC_IB_FORCE_DISABLE, spec_ib_force_disable) static inline void current_restore_flags(unsigned long orig_flags, unsigned long flags) { current->flags &= ~flags; current->flags |= orig_flags & flags; } extern int cpuset_cpumask_can_shrink(const struct cpumask *cur, const struct cpumask *trial); extern int task_can_attach(struct task_struct *p); extern int dl_bw_alloc(int cpu, u64 dl_bw); extern void dl_bw_free(int cpu, u64 dl_bw); #ifdef CONFIG_SMP extern void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask); extern int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask); extern int dup_user_cpus_ptr(struct task_struct *dst, struct task_struct *src, int node); extern void release_user_cpus_ptr(struct task_struct *p); extern int dl_task_check_affinity(struct task_struct *p, const struct cpumask *mask); extern void force_compatible_cpus_allowed_ptr(struct task_struct *p); extern void relax_compatible_cpus_allowed_ptr(struct task_struct *p); #else static inline void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) { } static inline int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask) { if (!cpumask_test_cpu(0, new_mask)) return -EINVAL; return 0; } static inline int dup_user_cpus_ptr(struct task_struct *dst, struct task_struct *src, int node) { if (src->user_cpus_ptr) return -EINVAL; return 0; } static inline void release_user_cpus_ptr(struct task_struct *p) { WARN_ON(p->user_cpus_ptr); } static inline int dl_task_check_affinity(struct task_struct *p, const struct cpumask *mask) { return 0; } #endif extern int yield_to(struct task_struct *p, bool preempt); extern void set_user_nice(struct task_struct *p, long nice); extern int task_prio(const struct task_struct *p); /** * task_nice - return the nice value of a given task. * @p: the task in question. * * Return: The nice value [ -20 ... 0 ... 19 ]. */ static inline int task_nice(const struct task_struct *p) { return PRIO_TO_NICE((p)->static_prio); } extern int can_nice(const struct task_struct *p, const int nice); extern int task_curr(const struct task_struct *p); extern int idle_cpu(int cpu); extern int available_idle_cpu(int cpu); extern int sched_setscheduler(struct task_struct *, int, const struct sched_param *); extern int sched_setscheduler_nocheck(struct task_struct *, int, const struct sched_param *); extern void sched_set_fifo(struct task_struct *p); extern void sched_set_fifo_low(struct task_struct *p); extern void sched_set_normal(struct task_struct *p, int nice); extern int sched_setattr(struct task_struct *, const struct sched_attr *); extern int sched_setattr_nocheck(struct task_struct *, const struct sched_attr *); extern struct task_struct *idle_task(int cpu); /** * is_idle_task - is the specified task an idle task? * @p: the task in question. * * Return: 1 if @p is an idle task. 0 otherwise. */ static __always_inline bool is_idle_task(const struct task_struct *p) { return !!(p->flags & PF_IDLE); } extern struct task_struct *curr_task(int cpu); extern void ia64_set_curr_task(int cpu, struct task_struct *p); void yield(void); union thread_union { #ifndef CONFIG_ARCH_TASK_STRUCT_ON_STACK struct task_struct task; #endif #ifndef CONFIG_THREAD_INFO_IN_TASK struct thread_info thread_info; #endif unsigned long stack[THREAD_SIZE/sizeof(long)]; }; #ifndef CONFIG_THREAD_INFO_IN_TASK extern struct thread_info init_thread_info; #endif extern unsigned long init_stack[THREAD_SIZE / sizeof(unsigned long)]; #ifdef CONFIG_THREAD_INFO_IN_TASK static inline struct thread_info *task_thread_info(struct task_struct *task) { return &task->thread_info; } #elif !defined(__HAVE_THREAD_FUNCTIONS) # define task_thread_info(task) ((struct thread_info *)(task)->stack) #endif /* * find a task by one of its numerical ids * * find_task_by_pid_ns(): * finds a task by its pid in the specified namespace * find_task_by_vpid(): * finds a task by its virtual pid * * see also find_vpid() etc in include/linux/pid.h */ extern struct task_struct *find_task_by_vpid(pid_t nr); extern struct task_struct *find_task_by_pid_ns(pid_t nr, struct pid_namespace *ns); /* * find a task by its virtual pid and get the task struct */ extern struct task_struct *find_get_task_by_vpid(pid_t nr); extern int wake_up_state(struct task_struct *tsk, unsigned int state); extern int wake_up_process(struct task_struct *tsk); extern void wake_up_new_task(struct task_struct *tsk); #ifdef CONFIG_SMP extern void kick_process(struct task_struct *tsk); #else static inline void kick_process(struct task_struct *tsk) { } #endif extern void __set_task_comm(struct task_struct *tsk, const char *from, bool exec); static inline void set_task_comm(struct task_struct *tsk, const char *from) { __set_task_comm(tsk, from, false); } extern char *__get_task_comm(char *to, size_t len, struct task_struct *tsk); #define get_task_comm(buf, tsk) ({ \ BUILD_BUG_ON(sizeof(buf) != TASK_COMM_LEN); \ __get_task_comm(buf, sizeof(buf), tsk); \ }) #ifdef CONFIG_SMP static __always_inline void scheduler_ipi(void) { /* * Fold TIF_NEED_RESCHED into the preempt_count; anybody setting * TIF_NEED_RESCHED remotely (for the first time) will also send * this IPI. */ preempt_fold_need_resched(); } extern unsigned long wait_task_inactive(struct task_struct *, unsigned int match_state); #else static inline void scheduler_ipi(void) { } static inline unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state) { return 1; } #endif /* * Set thread flags in other task's structures. * See asm/thread_info.h for TIF_xxxx flags available: */ static inline void set_tsk_thread_flag(struct task_struct *tsk, int flag) { set_ti_thread_flag(task_thread_info(tsk), flag); } static inline void clear_tsk_thread_flag(struct task_struct *tsk, int flag) { clear_ti_thread_flag(task_thread_info(tsk), flag); } static inline void update_tsk_thread_flag(struct task_struct *tsk, int flag, bool value) { update_ti_thread_flag(task_thread_info(tsk), flag, value); } static inline int test_and_set_tsk_thread_flag(struct task_struct *tsk, int flag) { return test_and_set_ti_thread_flag(task_thread_info(tsk), flag); } static inline int test_and_clear_tsk_thread_flag(struct task_struct *tsk, int flag) { return test_and_clear_ti_thread_flag(task_thread_info(tsk), flag); } static inline int test_tsk_thread_flag(struct task_struct *tsk, int flag) { return test_ti_thread_flag(task_thread_info(tsk), flag); } static inline void set_tsk_need_resched(struct task_struct *tsk) { set_tsk_thread_flag(tsk,TIF_NEED_RESCHED); } static inline void clear_tsk_need_resched(struct task_struct *tsk) { clear_tsk_thread_flag(tsk,TIF_NEED_RESCHED); } static inline int test_tsk_need_resched(struct task_struct *tsk) { return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); } /* * cond_resched() and cond_resched_lock(): latency reduction via * explicit rescheduling in places that are safe. The return * value indicates whether a reschedule was done in fact. * cond_resched_lock() will drop the spinlock before scheduling, */ #if !defined(CONFIG_PREEMPTION) || defined(CONFIG_PREEMPT_DYNAMIC) extern int __cond_resched(void); #ifdef CONFIG_PREEMPT_DYNAMIC DECLARE_STATIC_CALL(cond_resched, __cond_resched); static __always_inline int _cond_resched(void) { return static_call_mod(cond_resched)(); } #else static inline int _cond_resched(void) { return __cond_resched(); } #endif /* CONFIG_PREEMPT_DYNAMIC */ #else static inline int _cond_resched(void) { return 0; } #endif /* !defined(CONFIG_PREEMPTION) || defined(CONFIG_PREEMPT_DYNAMIC) */ #define cond_resched() ({ \ ___might_sleep(__FILE__, __LINE__, 0); \ _cond_resched(); \ }) extern int __cond_resched_lock(spinlock_t *lock); extern int __cond_resched_rwlock_read(rwlock_t *lock); extern int __cond_resched_rwlock_write(rwlock_t *lock); #define cond_resched_lock(lock) ({ \ ___might_sleep(__FILE__, __LINE__, PREEMPT_LOCK_OFFSET);\ __cond_resched_lock(lock); \ }) #define cond_resched_rwlock_read(lock) ({ \ __might_sleep(__FILE__, __LINE__, PREEMPT_LOCK_OFFSET); \ __cond_resched_rwlock_read(lock); \ }) #define cond_resched_rwlock_write(lock) ({ \ __might_sleep(__FILE__, __LINE__, PREEMPT_LOCK_OFFSET); \ __cond_resched_rwlock_write(lock); \ }) static inline void cond_resched_rcu(void) { #if defined(CONFIG_DEBUG_ATOMIC_SLEEP) || !defined(CONFIG_PREEMPT_RCU) rcu_read_unlock(); cond_resched(); rcu_read_lock(); #endif } /* * Does a critical section need to be broken due to another * task waiting?: (technically does not depend on CONFIG_PREEMPTION, * but a general need for low latency) */ static inline int spin_needbreak(spinlock_t *lock) { #ifdef CONFIG_PREEMPTION return spin_is_contended(lock); #else return 0; #endif } /* * Check if a rwlock is contended. * Returns non-zero if there is another task waiting on the rwlock. * Returns zero if the lock is not contended or the system / underlying * rwlock implementation does not support contention detection. * Technically does not depend on CONFIG_PREEMPTION, but a general need * for low latency. */ static inline int rwlock_needbreak(rwlock_t *lock) { #ifdef CONFIG_PREEMPTION return rwlock_is_contended(lock); #else return 0; #endif } static __always_inline bool need_resched(void) { return unlikely(tif_need_resched()); } /* * Wrappers for p->thread_info->cpu access. No-op on UP. */ #ifdef CONFIG_SMP static inline unsigned int task_cpu(const struct task_struct *p) { #ifdef CONFIG_THREAD_INFO_IN_TASK return READ_ONCE(p->cpu); #else return READ_ONCE(task_thread_info(p)->cpu); #endif } extern void set_task_cpu(struct task_struct *p, unsigned int cpu); #else static inline unsigned int task_cpu(const struct task_struct *p) { return 0; } static inline void set_task_cpu(struct task_struct *p, unsigned int cpu) { } #endif /* CONFIG_SMP */ extern bool sched_task_on_rq(struct task_struct *p); extern unsigned long get_wchan(struct task_struct *p); /* * In order to reduce various lock holder preemption latencies provide an * interface to see if a vCPU is currently running or not. * * This allows us to terminate optimistic spin loops and block, analogous to * the native optimistic spin heuristic of testing if the lock owner task is * running or not. */ #ifndef vcpu_is_preempted static inline bool vcpu_is_preempted(int cpu) { return false; } #endif extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask); extern long sched_getaffinity(pid_t pid, struct cpumask *mask); #ifndef TASK_SIZE_OF #define TASK_SIZE_OF(tsk) TASK_SIZE #endif #ifdef CONFIG_SMP /* Returns effective CPU energy utilization, as seen by the scheduler */ unsigned long sched_cpu_util(int cpu, unsigned long max); #endif /* CONFIG_SMP */ #ifdef CONFIG_RSEQ /* * Map the event mask on the user-space ABI enum rseq_cs_flags * for direct mask checks. */ enum rseq_event_mask_bits { RSEQ_EVENT_PREEMPT_BIT = RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT, RSEQ_EVENT_SIGNAL_BIT = RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT, RSEQ_EVENT_MIGRATE_BIT = RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT, }; enum rseq_event_mask { RSEQ_EVENT_PREEMPT = (1U << RSEQ_EVENT_PREEMPT_BIT), RSEQ_EVENT_SIGNAL = (1U << RSEQ_EVENT_SIGNAL_BIT), RSEQ_EVENT_MIGRATE = (1U << RSEQ_EVENT_MIGRATE_BIT), }; static inline void rseq_set_notify_resume(struct task_struct *t) { if (t->rseq) set_tsk_thread_flag(t, TIF_NOTIFY_RESUME); } void __rseq_handle_notify_resume(struct ksignal *sig, struct pt_regs *regs); static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { if (current->rseq) __rseq_handle_notify_resume(ksig, regs); } static inline void rseq_signal_deliver(struct ksignal *ksig, struct pt_regs *regs) { preempt_disable(); __set_bit(RSEQ_EVENT_SIGNAL_BIT, ¤t->rseq_event_mask); preempt_enable(); rseq_handle_notify_resume(ksig, regs); } /* rseq_preempt() requires preemption to be disabled. */ static inline void rseq_preempt(struct task_struct *t) { __set_bit(RSEQ_EVENT_PREEMPT_BIT, &t->rseq_event_mask); rseq_set_notify_resume(t); } /* rseq_migrate() requires preemption to be disabled. */ static inline void rseq_migrate(struct task_struct *t) { __set_bit(RSEQ_EVENT_MIGRATE_BIT, &t->rseq_event_mask); rseq_set_notify_resume(t); } /* * If parent process has a registered restartable sequences area, the * child inherits. Unregister rseq for a clone with CLONE_VM set. */ static inline void rseq_fork(struct task_struct *t, unsigned long clone_flags) { if (clone_flags & CLONE_VM) { t->rseq = NULL; t->rseq_sig = 0; t->rseq_event_mask = 0; } else { t->rseq = current->rseq; t->rseq_sig = current->rseq_sig; t->rseq_event_mask = current->rseq_event_mask; } } static inline void rseq_execve(struct task_struct *t) { t->rseq = NULL; t->rseq_sig = 0; t->rseq_event_mask = 0; } #else static inline void rseq_set_notify_resume(struct task_struct *t) { } static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } static inline void rseq_signal_deliver(struct ksignal *ksig, struct pt_regs *regs) { } static inline void rseq_preempt(struct task_struct *t) { } static inline void rseq_migrate(struct task_struct *t) { } static inline void rseq_fork(struct task_struct *t, unsigned long clone_flags) { } static inline void rseq_execve(struct task_struct *t) { } #endif #ifdef CONFIG_DEBUG_RSEQ void rseq_syscall(struct pt_regs *regs); #else static inline void rseq_syscall(struct pt_regs *regs) { } #endif const struct sched_avg *sched_trace_cfs_rq_avg(struct cfs_rq *cfs_rq); char *sched_trace_cfs_rq_path(struct cfs_rq *cfs_rq, char *str, int len); int sched_trace_cfs_rq_cpu(struct cfs_rq *cfs_rq); const struct sched_avg *sched_trace_rq_avg_rt(struct rq *rq); const struct sched_avg *sched_trace_rq_avg_dl(struct rq *rq); const struct sched_avg *sched_trace_rq_avg_irq(struct rq *rq); int sched_trace_rq_cpu(struct rq *rq); int sched_trace_rq_cpu_capacity(struct rq *rq); int sched_trace_rq_nr_running(struct rq *rq); const struct cpumask *sched_trace_rd_span(struct root_domain *rd); #ifdef CONFIG_SCHED_CORE extern void sched_core_free(struct task_struct *tsk); extern void sched_core_fork(struct task_struct *p); extern int sched_core_share_pid(unsigned int cmd, pid_t pid, enum pid_type type, unsigned long uaddr); #else static inline void sched_core_free(struct task_struct *tsk) { } static inline void sched_core_fork(struct task_struct *p) { } #endif #endif