golden hour
/usr/include/linux
⬆️ Go Up
Upload
File/Folder
Size
Actions
a.out.h
6.73 KB
Del
OK
acct.h
3.82 KB
Del
OK
acrn.h
16.29 KB
Del
OK
adb.h
1.11 KB
Del
OK
adfs_fs.h
993 B
Del
OK
affs_hardblocks.h
1.54 KB
Del
OK
agpgart.h
3.85 KB
Del
OK
aio_abi.h
3.32 KB
Del
OK
am437x-vpfe.h
3.59 KB
Del
OK
android
-
Del
OK
apm_bios.h
3.6 KB
Del
OK
arcfb.h
213 B
Del
OK
arm_sdei.h
2.69 KB
Del
OK
aspeed-lpc-ctrl.h
1.74 KB
Del
OK
aspeed-p2a-ctrl.h
1.86 KB
Del
OK
atalk.h
1023 B
Del
OK
atm.h
7.7 KB
Del
OK
atm_eni.h
648 B
Del
OK
atm_he.h
406 B
Del
OK
atm_idt77105.h
955 B
Del
OK
atm_nicstar.h
1.25 KB
Del
OK
atm_tcp.h
1.58 KB
Del
OK
atm_zatm.h
1.5 KB
Del
OK
atmapi.h
952 B
Del
OK
atmarp.h
1.27 KB
Del
OK
atmbr2684.h
3.19 KB
Del
OK
atmclip.h
576 B
Del
OK
atmdev.h
7.5 KB
Del
OK
atmioc.h
1.61 KB
Del
OK
atmlec.h
2.33 KB
Del
OK
atmmpc.h
4.13 KB
Del
OK
atmppp.h
639 B
Del
OK
atmsap.h
4.85 KB
Del
OK
atmsvc.h
1.81 KB
Del
OK
audit.h
21.06 KB
Del
OK
auto_dev-ioctl.h
4.87 KB
Del
OK
auto_fs.h
6.28 KB
Del
OK
auto_fs4.h
451 B
Del
OK
auxvec.h
1.56 KB
Del
OK
ax25.h
2.76 KB
Del
OK
batadv_packet.h
19.87 KB
Del
OK
batman_adv.h
16.49 KB
Del
OK
baycom.h
883 B
Del
OK
bcm933xx_hcs.h
419 B
Del
OK
bfs_fs.h
1.86 KB
Del
OK
binfmts.h
776 B
Del
OK
bits.h
447 B
Del
OK
blkpg.h
904 B
Del
OK
blktrace_api.h
4.59 KB
Del
OK
blkzoned.h
6.34 KB
Del
OK
bpf.h
272.11 KB
Del
OK
bpf_common.h
1.33 KB
Del
OK
bpf_perf_event.h
529 B
Del
OK
bpfilter.h
465 B
Del
OK
bpqether.h
981 B
Del
OK
bsg.h
2.44 KB
Del
OK
bt-bmc.h
572 B
Del
OK
btf.h
5.46 KB
Del
OK
btrfs.h
29.85 KB
Del
OK
btrfs_tree.h
25.22 KB
Del
OK
byteorder
-
Del
OK
cachefiles.h
1.61 KB
Del
OK
caif
-
Del
OK
can
-
Del
OK
can.h
11.03 KB
Del
OK
capability.h
13.17 KB
Del
OK
capi.h
3.05 KB
Del
OK
cciss_defs.h
3.2 KB
Del
OK
cciss_ioctl.h
2.7 KB
Del
OK
ccs.h
767 B
Del
OK
cdrom.h
28.87 KB
Del
OK
cec-funcs.h
53.14 KB
Del
OK
cec.h
40.47 KB
Del
OK
cfm_bridge.h
1.42 KB
Del
OK
cgroupstats.h
2.17 KB
Del
OK
chio.h
5.16 KB
Del
OK
cifs
-
Del
OK
close_range.h
377 B
Del
OK
cm4000_cs.h
1.76 KB
Del
OK
cn_proc.h
4.05 KB
Del
OK
coda.h
17.79 KB
Del
OK
coff.h
12.25 KB
Del
OK
connector.h
2.2 KB
Del
OK
const.h
987 B
Del
OK
coresight-stm.h
747 B
Del
OK
cramfs_fs.h
3.47 KB
Del
OK
cryptouser.h
5.2 KB
Del
OK
cuda.h
905 B
Del
OK
cxl_mem.h
7.73 KB
Del
OK
cycx_cfm.h
2.92 KB
Del
OK
dcbnl.h
24.7 KB
Del
OK
dccp.h
6.29 KB
Del
OK
devlink.h
22.3 KB
Del
OK
dlm.h
2.49 KB
Del
OK
dlm_device.h
2.48 KB
Del
OK
dlm_netlink.h
1.13 KB
Del
OK
dlm_plock.h
894 B
Del
OK
dlmconstants.h
4.96 KB
Del
OK
dm-ioctl.h
11.48 KB
Del
OK
dm-log-userspace.h
14.83 KB
Del
OK
dma-buf.h
5.12 KB
Del
OK
dma-heap.h
1.36 KB
Del
OK
dn.h
4.53 KB
Del
OK
dns_resolver.h
3.86 KB
Del
OK
dpll.h
7.19 KB
Del
OK
dqblk_xfs.h
9.17 KB
Del
OK
dvb
-
Del
OK
edd.h
5.47 KB
Del
OK
efs_fs_sb.h
2.17 KB
Del
OK
elf-em.h
2.57 KB
Del
OK
elf-fdpic.h
1.1 KB
Del
OK
elf.h
14.69 KB
Del
OK
errno.h
23 B
Del
OK
errqueue.h
1.94 KB
Del
OK
erspan.h
1.03 KB
Del
OK
ethtool.h
100.09 KB
Del
OK
ethtool_netlink.h
29.87 KB
Del
OK
eventfd.h
264 B
Del
OK
eventpoll.h
2.84 KB
Del
OK
f2fs.h
3.22 KB
Del
OK
fadvise.h
842 B
Del
OK
falloc.h
3.5 KB
Del
OK
fanotify.h
6.64 KB
Del
OK
fb.h
16.09 KB
Del
OK
fcntl.h
4.22 KB
Del
OK
fd.h
11.83 KB
Del
OK
fdreg.h
5.24 KB
Del
OK
fib_rules.h
1.99 KB
Del
OK
fiemap.h
2.71 KB
Del
OK
filter.h
2.16 KB
Del
OK
firewire-cdev.h
43.2 KB
Del
OK
firewire-constants.h
3.16 KB
Del
OK
fou.h
819 B
Del
OK
fpga-dfl.h
8.52 KB
Del
OK
fs.h
12.88 KB
Del
OK
fscrypt.h
6.41 KB
Del
OK
fsi.h
2.2 KB
Del
OK
fsl_hypervisor.h
7.13 KB
Del
OK
fsl_mc.h
734 B
Del
OK
fsmap.h
4.29 KB
Del
OK
fsverity.h
3.11 KB
Del
OK
fuse.h
25.36 KB
Del
OK
futex.h
5.98 KB
Del
OK
gameport.h
897 B
Del
OK
gen_stats.h
1.49 KB
Del
OK
genetlink.h
2.19 KB
Del
OK
genwqe
-
Del
OK
gfs2_ondisk.h
14.43 KB
Del
OK
gpio.h
19.46 KB
Del
OK
gsmmux.h
4.4 KB
Del
OK
gtp.h
734 B
Del
OK
handshake.h
1.61 KB
Del
OK
hash_info.h
971 B
Del
OK
hdlc
-
Del
OK
hdlc.h
637 B
Del
OK
hdlcdrv.h
2.84 KB
Del
OK
hdreg.h
22.17 KB
Del
OK
hid.h
2.04 KB
Del
OK
hiddev.h
6.2 KB
Del
OK
hidraw.h
1.95 KB
Del
OK
hpet.h
743 B
Del
OK
hsi
-
Del
OK
hsr_netlink.h
1.08 KB
Del
OK
hw_breakpoint.h
742 B
Del
OK
hyperv.h
10.89 KB
Del
OK
i2c-dev.h
1.83 KB
Del
OK
i2c.h
6.73 KB
Del
OK
i2o-dev.h
11.28 KB
Del
OK
i8k.h
1.49 KB
Del
OK
icmp.h
4.67 KB
Del
OK
icmpv6.h
4.2 KB
Del
OK
idxd.h
9.11 KB
Del
OK
if.h
10.67 KB
Del
OK
if_addr.h
1.84 KB
Del
OK
if_addrlabel.h
721 B
Del
OK
if_alg.h
1.53 KB
Del
OK
if_arcnet.h
3.63 KB
Del
OK
if_arp.h
6.41 KB
Del
OK
if_bonding.h
5.02 KB
Del
OK
if_bridge.h
20.18 KB
Del
OK
if_cablemodem.h
986 B
Del
OK
if_eql.h
1.32 KB
Del
OK
if_ether.h
8.21 KB
Del
OK
if_fc.h
1.7 KB
Del
OK
if_fddi.h
4.27 KB
Del
OK
if_hippi.h
4.14 KB
Del
OK
if_infiniband.h
1.22 KB
Del
OK
if_link.h
52.83 KB
Del
OK
if_ltalk.h
210 B
Del
OK
if_macsec.h
6.35 KB
Del
OK
if_packet.h
7.99 KB
Del
OK
if_phonet.h
424 B
Del
OK
if_plip.h
660 B
Del
OK
if_ppp.h
29 B
Del
OK
if_pppol2tp.h
3.23 KB
Del
OK
if_pppox.h
4.76 KB
Del
OK
if_slip.h
872 B
Del
OK
if_team.h
2.54 KB
Del
OK
if_tun.h
4 KB
Del
OK
if_tunnel.h
5.36 KB
Del
OK
if_vlan.h
1.79 KB
Del
OK
if_x25.h
881 B
Del
OK
if_xdp.h
4.89 KB
Del
OK
ife.h
351 B
Del
OK
igmp.h
2.99 KB
Del
OK
iio
-
Del
OK
ila.h
1.22 KB
Del
OK
in.h
10.15 KB
Del
OK
in6.h
7.36 KB
Del
OK
in_route.h
936 B
Del
OK
inet_diag.h
4.9 KB
Del
OK
inotify.h
3.21 KB
Del
OK
input-event-codes.h
29.5 KB
Del
OK
input.h
15.84 KB
Del
OK
io_uring.h
20.4 KB
Del
OK
ioctl.h
163 B
Del
OK
iommufd.h
28.39 KB
Del
OK
ioprio.h
4.08 KB
Del
OK
ip.h
4.7 KB
Del
OK
ip6_tunnel.h
1.91 KB
Del
OK
ip_vs.h
13.8 KB
Del
OK
ipc.h
2.05 KB
Del
OK
ipmi.h
15.08 KB
Del
OK
ipmi_bmc.h
488 B
Del
OK
ipmi_msgdefs.h
3.35 KB
Del
OK
ipmi_ssif_bmc.h
441 B
Del
OK
ipsec.h
947 B
Del
OK
ipv6.h
4.07 KB
Del
OK
ipv6_route.h
1.86 KB
Del
OK
ipx.h
2.29 KB
Del
OK
irqnr.h
104 B
Del
OK
isdn
-
Del
OK
iso_fs.h
6.33 KB
Del
OK
isst_if.h
14.92 KB
Del
OK
ivtv.h
2.95 KB
Del
OK
ivtvfb.h
1.18 KB
Del
OK
jffs2.h
6.66 KB
Del
OK
joystick.h
3.35 KB
Del
OK
kcm.h
822 B
Del
OK
kcmp.h
522 B
Del
OK
kcov.h
1.92 KB
Del
OK
kd.h
6.3 KB
Del
OK
kdev_t.h
383 B
Del
OK
kernel-page-flags.h
900 B
Del
OK
kernel.h
194 B
Del
OK
kernelcapi.h
1019 B
Del
OK
kexec.h
2.05 KB
Del
OK
keyboard.h
13.14 KB
Del
OK
keyctl.h
5.86 KB
Del
OK
kfd_ioctl.h
56.75 KB
Del
OK
kfd_sysfs.h
5.1 KB
Del
OK
kvm.h
46.76 KB
Del
OK
kvm_para.h
1001 B
Del
OK
l2tp.h
5.61 KB
Del
OK
landlock.h
10.14 KB
Del
OK
libc-compat.h
8.09 KB
Del
OK
limits.h
937 B
Del
OK
lirc.h
7.95 KB
Del
OK
llc.h
3.09 KB
Del
OK
loadpin.h
834 B
Del
OK
loop.h
3.32 KB
Del
OK
lp.h
4.09 KB
Del
OK
lsm.h
1.51 KB
Del
OK
lwtunnel.h
2.31 KB
Del
OK
magic.h
3.73 KB
Del
OK
major.h
4.55 KB
Del
OK
map_to_7segment.h
6.45 KB
Del
OK
matroxfb.h
1.43 KB
Del
OK
max2175.h
1.01 KB
Del
OK
mdio.h
23.78 KB
Del
OK
media-bus-format.h
6.75 KB
Del
OK
media.h
12.46 KB
Del
OK
mei.h
3.4 KB
Del
OK
mei_uuid.h
738 B
Del
OK
membarrier.h
9.14 KB
Del
OK
memfd.h
1.43 KB
Del
OK
mempolicy.h
2.51 KB
Del
OK
meye.h
2.47 KB
Del
OK
mii.h
9.27 KB
Del
OK
minix_fs.h
2.07 KB
Del
OK
misc
-
Del
OK
mman.h
1.75 KB
Del
OK
mmc
-
Del
OK
mmtimer.h
2.07 KB
Del
OK
module.h
293 B
Del
OK
mount.h
4.9 KB
Del
OK
mpls.h
2.25 KB
Del
OK
mpls_iptunnel.h
761 B
Del
OK
mptcp.h
3.67 KB
Del
OK
mptcp_pm.h
4.3 KB
Del
OK
mqueue.h
2.15 KB
Del
OK
mroute.h
5.78 KB
Del
OK
mroute6.h
4.81 KB
Del
OK
mrp_bridge.h
1.67 KB
Del
OK
msdos_fs.h
6.57 KB
Del
OK
msg.h
3.31 KB
Del
OK
mtio.h
7.98 KB
Del
OK
nbd-netlink.h
2.35 KB
Del
OK
nbd.h
3.77 KB
Del
OK
ncsi.h
4.71 KB
Del
OK
ndctl.h
6.67 KB
Del
OK
neighbour.h
5.91 KB
Del
OK
net.h
2.04 KB
Del
OK
net_dropmon.h
2.85 KB
Del
OK
net_namespace.h
715 B
Del
OK
net_tstamp.h
5.97 KB
Del
OK
netconf.h
614 B
Del
OK
netdev.h
5.39 KB
Del
OK
netdevice.h
2.2 KB
Del
OK
netfilter
-
Del
OK
netfilter.h
1.69 KB
Del
OK
netfilter_arp
-
Del
OK
netfilter_arp.h
445 B
Del
OK
netfilter_bridge
-
Del
OK
netfilter_bridge.h
1.14 KB
Del
OK
netfilter_decnet.h
1.72 KB
Del
OK
netfilter_ipv4
-
Del
OK
netfilter_ipv4.h
1.45 KB
Del
OK
netfilter_ipv6
-
Del
OK
netfilter_ipv6.h
1.35 KB
Del
OK
netlink.h
12.09 KB
Del
OK
netlink_diag.h
1.49 KB
Del
OK
netrom.h
807 B
Del
OK
nexthop.h
3.97 KB
Del
OK
nfc.h
10.95 KB
Del
OK
nfs.h
4.36 KB
Del
OK
nfs2.h
1.43 KB
Del
OK
nfs3.h
2.4 KB
Del
OK
nfs4.h
6.54 KB
Del
OK
nfs4_mount.h
1.89 KB
Del
OK
nfs_fs.h
1.62 KB
Del
OK
nfs_idmap.h
2.19 KB
Del
OK
nfs_mount.h
2.09 KB
Del
OK
nfsacl.h
718 B
Del
OK
nfsd
-
Del
OK
nfsd_netlink.h
1.95 KB
Del
OK
nilfs2_api.h
7.41 KB
Del
OK
nilfs2_ondisk.h
17.66 KB
Del
OK
nitro_enclaves.h
12.85 KB
Del
OK
nl80211.h
338.95 KB
Del
OK
nsfs.h
639 B
Del
OK
nubus.h
8 KB
Del
OK
nvme_ioctl.h
2.43 KB
Del
OK
nvram.h
532 B
Del
OK
omap3isp.h
20.36 KB
Del
OK
omapfb.h
5.78 KB
Del
OK
oom.h
511 B
Del
OK
openat2.h
1.42 KB
Del
OK
openvswitch.h
40.41 KB
Del
OK
packet_diag.h
1.63 KB
Del
OK
param.h
141 B
Del
OK
parport.h
3.56 KB
Del
OK
patchkey.h
892 B
Del
OK
pci.h
1.35 KB
Del
OK
pci_regs.h
60.58 KB
Del
OK
pcitest.h
920 B
Del
OK
perf_event.h
42.43 KB
Del
OK
personality.h
2.05 KB
Del
OK
pfkeyv2.h
10.32 KB
Del
OK
pfrut.h
7.8 KB
Del
OK
pg.h
2.34 KB
Del
OK
phantom.h
1.62 KB
Del
OK
phonet.h
4.57 KB
Del
OK
pidfd.h
256 B
Del
OK
pkt_cls.h
18.65 KB
Del
OK
pkt_sched.h
28.66 KB
Del
OK
pktcdvd.h
2.63 KB
Del
OK
pmu.h
5.32 KB
Del
OK
poll.h
22 B
Del
OK
posix_acl.h
1.22 KB
Del
OK
posix_acl_xattr.h
1.09 KB
Del
OK
posix_types.h
1.07 KB
Del
OK
ppdev.h
3.21 KB
Del
OK
ppp-comp.h
2.47 KB
Del
OK
ppp-ioctl.h
5.59 KB
Del
OK
ppp_defs.h
5.43 KB
Del
OK
pps.h
4.62 KB
Del
OK
pr.h
1.59 KB
Del
OK
prctl.h
10.81 KB
Del
OK
psample.h
2.57 KB
Del
OK
psci.h
5.02 KB
Del
OK
psp-dbc.h
5.16 KB
Del
OK
psp-sev.h
6.26 KB
Del
OK
ptp_clock.h
7.35 KB
Del
OK
ptrace.h
4.29 KB
Del
OK
qemu_fw_cfg.h
2.41 KB
Del
OK
qnx4_fs.h
2.27 KB
Del
OK
qnxtypes.h
624 B
Del
OK
qrtr.h
893 B
Del
OK
quota.h
6.16 KB
Del
OK
radeonfb.h
360 B
Del
OK
raid
-
Del
OK
random.h
1.38 KB
Del
OK
rds.h
10.91 KB
Del
OK
reboot.h
1.31 KB
Del
OK
reiserfs_fs.h
775 B
Del
OK
reiserfs_xattr.h
533 B
Del
OK
remoteproc_cdev.h
1.08 KB
Del
OK
resource.h
2.32 KB
Del
OK
rfkill.h
6.45 KB
Del
OK
rio_cm_cdev.h
3.17 KB
Del
OK
rio_mport_cdev.h
9.11 KB
Del
OK
rkisp1-config.h
30.63 KB
Del
OK
romfs_fs.h
1.21 KB
Del
OK
rose.h
2.18 KB
Del
OK
route.h
2.28 KB
Del
OK
rpl.h
814 B
Del
OK
rpl_iptunnel.h
424 B
Del
OK
rpmsg.h
1.03 KB
Del
OK
rpmsg_types.h
288 B
Del
OK
rseq.h
4.79 KB
Del
OK
rtc.h
5.19 KB
Del
OK
rtnetlink.h
20.8 KB
Del
OK
rxrpc.h
4.81 KB
Del
OK
scc.h
4.52 KB
Del
OK
sched
-
Del
OK
sched.h
6.12 KB
Del
OK
scif_ioctl.h
6.23 KB
Del
OK
screen_info.h
2.42 KB
Del
OK
sctp.h
35.18 KB
Del
OK
seccomp.h
5.6 KB
Del
OK
securebits.h
2.64 KB
Del
OK
sed-opal.h
5.29 KB
Del
OK
seg6.h
1.14 KB
Del
OK
seg6_genl.h
589 B
Del
OK
seg6_hmac.h
423 B
Del
OK
seg6_iptunnel.h
984 B
Del
OK
seg6_local.h
3.78 KB
Del
OK
selinux_netlink.h
1.17 KB
Del
OK
sem.h
2.98 KB
Del
OK
serial.h
4.9 KB
Del
OK
serial_core.h
4.93 KB
Del
OK
serial_reg.h
15.65 KB
Del
OK
serio.h
2.09 KB
Del
OK
sev-guest.h
2.47 KB
Del
OK
shm.h
3.71 KB
Del
OK
signal.h
388 B
Del
OK
signalfd.h
1.2 KB
Del
OK
smc.h
8.31 KB
Del
OK
smc_diag.h
2.77 KB
Del
OK
smiapp.h
1.03 KB
Del
OK
snmp.h
13.92 KB
Del
OK
sock_diag.h
1.27 KB
Del
OK
socket.h
919 B
Del
OK
sockios.h
6.69 KB
Del
OK
sonet.h
2.24 KB
Del
OK
sonypi.h
5.18 KB
Del
OK
sound.h
1.21 KB
Del
OK
soundcard.h
44.96 KB
Del
OK
spi
-
Del
OK
stat.h
7.23 KB
Del
OK
stddef.h
1.69 KB
Del
OK
stm.h
1.25 KB
Del
OK
string.h
238 B
Del
OK
sunrpc
-
Del
OK
surface_aggregator
-
Del
OK
suspend_ioctls.h
1.4 KB
Del
OK
swab.h
6.76 KB
Del
OK
switchtec_ioctl.h
5.14 KB
Del
OK
sync_file.h
3.49 KB
Del
OK
synclink.h
8.77 KB
Del
OK
sysctl.h
25.3 KB
Del
OK
sysinfo.h
1.02 KB
Del
OK
target_core_user.h
4.52 KB
Del
OK
taskstats.h
8.13 KB
Del
OK
tc_act
-
Del
OK
tc_ematch
-
Del
OK
tcp.h
11.65 KB
Del
OK
tcp_metrics.h
1.94 KB
Del
OK
tdx-guest.h
1.27 KB
Del
OK
tee.h
13.09 KB
Del
OK
termios.h
172 B
Del
OK
thermal.h
3.23 KB
Del
OK
time.h
1.71 KB
Del
OK
time_types.h
1.24 KB
Del
OK
timerfd.h
936 B
Del
OK
times.h
278 B
Del
OK
timex.h
7.63 KB
Del
OK
tiocl.h
1.69 KB
Del
OK
tipc.h
8.62 KB
Del
OK
tipc_config.h
14.52 KB
Del
OK
tipc_netlink.h
9.17 KB
Del
OK
tipc_sockets_diag.h
468 B
Del
OK
tls.h
7.06 KB
Del
OK
toshiba.h
1.88 KB
Del
OK
tps6594_pfsm.h
1.13 KB
Del
OK
tty.h
1.55 KB
Del
OK
tty_flags.h
4.4 KB
Del
OK
types.h
1.6 KB
Del
OK
udf_fs_i.h
697 B
Del
OK
udmabuf.h
643 B
Del
OK
udp.h
1.65 KB
Del
OK
uhid.h
4.54 KB
Del
OK
uinput.h
9.04 KB
Del
OK
uio.h
732 B
Del
OK
uleds.h
798 B
Del
OK
ultrasound.h
4.46 KB
Del
OK
um_timetravel.h
3.87 KB
Del
OK
un.h
384 B
Del
OK
unistd.h
220 B
Del
OK
unix_diag.h
1.3 KB
Del
OK
usb
-
Del
OK
usbdevice_fs.h
8.12 KB
Del
OK
usbip.h
1.47 KB
Del
OK
userfaultfd.h
10.68 KB
Del
OK
userio.h
1.48 KB
Del
OK
utime.h
223 B
Del
OK
utsname.h
669 B
Del
OK
uuid.h
28 B
Del
OK
uvcvideo.h
2.57 KB
Del
OK
v4l2-common.h
2.01 KB
Del
OK
v4l2-controls.h
94.59 KB
Del
OK
v4l2-dv-timings.h
30.39 KB
Del
OK
v4l2-mediabus.h
5.3 KB
Del
OK
v4l2-subdev.h
9.76 KB
Del
OK
vbox_err.h
7.09 KB
Del
OK
vbox_vmmdev_types.h
11.38 KB
Del
OK
vboxguest.h
9.15 KB
Del
OK
vdpa.h
1.74 KB
Del
OK
vduse.h
9.58 KB
Del
OK
version.h
374 B
Del
OK
veth.h
224 B
Del
OK
vfio.h
70.12 KB
Del
OK
vfio_ccw.h
1.29 KB
Del
OK
vfio_zdev.h
2.48 KB
Del
OK
vhost.h
8.24 KB
Del
OK
vhost_types.h
4.77 KB
Del
OK
videodev2.h
98.83 KB
Del
OK
virtio_9p.h
2 KB
Del
OK
virtio_balloon.h
5.16 KB
Del
OK
virtio_blk.h
9.75 KB
Del
OK
virtio_bt.h
910 B
Del
OK
virtio_config.h
4.36 KB
Del
OK
virtio_console.h
3.08 KB
Del
OK
virtio_crypto.h
13.56 KB
Del
OK
virtio_fs.h
573 B
Del
OK
virtio_gpio.h
1.7 KB
Del
OK
virtio_gpu.h
11.28 KB
Del
OK
virtio_i2c.h
1.16 KB
Del
OK
virtio_ids.h
3.7 KB
Del
OK
virtio_input.h
2.46 KB
Del
OK
virtio_iommu.h
3.84 KB
Del
OK
virtio_mem.h
6.99 KB
Del
OK
virtio_mmio.h
4.85 KB
Del
OK
virtio_net.h
14.72 KB
Del
OK
virtio_pci.h
7.3 KB
Del
OK
virtio_pcidev.h
2.33 KB
Del
OK
virtio_pmem.h
641 B
Del
OK
virtio_ring.h
8.52 KB
Del
OK
virtio_rng.h
265 B
Del
OK
virtio_scmi.h
637 B
Del
OK
virtio_scsi.h
5.94 KB
Del
OK
virtio_snd.h
12.86 KB
Del
OK
virtio_types.h
2.1 KB
Del
OK
virtio_vsock.h
3.27 KB
Del
OK
vm_sockets.h
7.18 KB
Del
OK
vm_sockets_diag.h
963 B
Del
OK
vmcore.h
455 B
Del
OK
vsockmon.h
1.84 KB
Del
OK
vt.h
2.99 KB
Del
OK
vtpm_proxy.h
1.68 KB
Del
OK
wait.h
682 B
Del
OK
watch_queue.h
3.41 KB
Del
OK
watchdog.h
2.28 KB
Del
OK
wireguard.h
7.57 KB
Del
OK
wireless.h
41.7 KB
Del
OK
wmi.h
1.72 KB
Del
OK
wwan.h
295 B
Del
OK
x25.h
3.48 KB
Del
OK
xattr.h
2.95 KB
Del
OK
xdp_diag.h
1.43 KB
Del
OK
xfrm.h
12.33 KB
Del
OK
xilinx-v4l2-controls.h
2.91 KB
Del
OK
zorro.h
3.22 KB
Del
OK
zorro_ids.h
29.26 KB
Del
OK
Edit: kfd_ioctl.h
/* * Copyright 2014 Advanced Micro Devices, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ #ifndef KFD_IOCTL_H_INCLUDED #define KFD_IOCTL_H_INCLUDED #include <drm/drm.h> #include <linux/ioctl.h> /* * - 1.1 - initial version * - 1.3 - Add SMI events support * - 1.4 - Indicate new SRAM EDC bit in device properties * - 1.5 - Add SVM API * - 1.6 - Query clear flags in SVM get_attr API * - 1.7 - Checkpoint Restore (CRIU) API * - 1.8 - CRIU - Support for SDMA transfers with GTT BOs * - 1.9 - Add available memory ioctl * - 1.10 - Add SMI profiler event log * - 1.11 - Add unified memory for ctx save/restore area * - 1.12 - Add DMA buf export ioctl * - 1.13 - Add debugger API * - 1.14 - Update kfd_event_data * - 1.15 - Enable managing mappings in compute VMs with GEM_VA ioctl * - 1.16 - Add contiguous VRAM allocation flag * - 1.17 - Add SDMA queue creation with target SDMA engine ID */ #define KFD_IOCTL_MAJOR_VERSION 1 #define KFD_IOCTL_MINOR_VERSION 17 struct kfd_ioctl_get_version_args { __u32 major_version; /* from KFD */ __u32 minor_version; /* from KFD */ }; /* For kfd_ioctl_create_queue_args.queue_type. */ #define KFD_IOC_QUEUE_TYPE_COMPUTE 0x0 #define KFD_IOC_QUEUE_TYPE_SDMA 0x1 #define KFD_IOC_QUEUE_TYPE_COMPUTE_AQL 0x2 #define KFD_IOC_QUEUE_TYPE_SDMA_XGMI 0x3 #define KFD_IOC_QUEUE_TYPE_SDMA_BY_ENG_ID 0x4 #define KFD_MAX_QUEUE_PERCENTAGE 100 #define KFD_MAX_QUEUE_PRIORITY 15 struct kfd_ioctl_create_queue_args { __u64 ring_base_address; /* to KFD */ __u64 write_pointer_address; /* from KFD */ __u64 read_pointer_address; /* from KFD */ __u64 doorbell_offset; /* from KFD */ __u32 ring_size; /* to KFD */ __u32 gpu_id; /* to KFD */ __u32 queue_type; /* to KFD */ __u32 queue_percentage; /* to KFD */ __u32 queue_priority; /* to KFD */ __u32 queue_id; /* from KFD */ __u64 eop_buffer_address; /* to KFD */ __u64 eop_buffer_size; /* to KFD */ __u64 ctx_save_restore_address; /* to KFD */ __u32 ctx_save_restore_size; /* to KFD */ __u32 ctl_stack_size; /* to KFD */ __u32 sdma_engine_id; /* to KFD */ __u32 pad; }; struct kfd_ioctl_destroy_queue_args { __u32 queue_id; /* to KFD */ __u32 pad; }; struct kfd_ioctl_update_queue_args { __u64 ring_base_address; /* to KFD */ __u32 queue_id; /* to KFD */ __u32 ring_size; /* to KFD */ __u32 queue_percentage; /* to KFD */ __u32 queue_priority; /* to KFD */ }; struct kfd_ioctl_set_cu_mask_args { __u32 queue_id; /* to KFD */ __u32 num_cu_mask; /* to KFD */ __u64 cu_mask_ptr; /* to KFD */ }; struct kfd_ioctl_get_queue_wave_state_args { __u64 ctl_stack_address; /* to KFD */ __u32 ctl_stack_used_size; /* from KFD */ __u32 save_area_used_size; /* from KFD */ __u32 queue_id; /* to KFD */ __u32 pad; }; struct kfd_ioctl_get_available_memory_args { __u64 available; /* from KFD */ __u32 gpu_id; /* to KFD */ __u32 pad; }; struct kfd_dbg_device_info_entry { __u64 exception_status; __u64 lds_base; __u64 lds_limit; __u64 scratch_base; __u64 scratch_limit; __u64 gpuvm_base; __u64 gpuvm_limit; __u32 gpu_id; __u32 location_id; __u32 vendor_id; __u32 device_id; __u32 revision_id; __u32 subsystem_vendor_id; __u32 subsystem_device_id; __u32 fw_version; __u32 gfx_target_version; __u32 simd_count; __u32 max_waves_per_simd; __u32 array_count; __u32 simd_arrays_per_engine; __u32 num_xcc; __u32 capability; __u32 debug_prop; }; /* For kfd_ioctl_set_memory_policy_args.default_policy and alternate_policy */ #define KFD_IOC_CACHE_POLICY_COHERENT 0 #define KFD_IOC_CACHE_POLICY_NONCOHERENT 1 struct kfd_ioctl_set_memory_policy_args { __u64 alternate_aperture_base; /* to KFD */ __u64 alternate_aperture_size; /* to KFD */ __u32 gpu_id; /* to KFD */ __u32 default_policy; /* to KFD */ __u32 alternate_policy; /* to KFD */ __u32 pad; }; /* * All counters are monotonic. They are used for profiling of compute jobs. * The profiling is done by userspace. * * In case of GPU reset, the counter should not be affected. */ struct kfd_ioctl_get_clock_counters_args { __u64 gpu_clock_counter; /* from KFD */ __u64 cpu_clock_counter; /* from KFD */ __u64 system_clock_counter; /* from KFD */ __u64 system_clock_freq; /* from KFD */ __u32 gpu_id; /* to KFD */ __u32 pad; }; struct kfd_process_device_apertures { __u64 lds_base; /* from KFD */ __u64 lds_limit; /* from KFD */ __u64 scratch_base; /* from KFD */ __u64 scratch_limit; /* from KFD */ __u64 gpuvm_base; /* from KFD */ __u64 gpuvm_limit; /* from KFD */ __u32 gpu_id; /* from KFD */ __u32 pad; }; /* * AMDKFD_IOC_GET_PROCESS_APERTURES is deprecated. Use * AMDKFD_IOC_GET_PROCESS_APERTURES_NEW instead, which supports an * unlimited number of GPUs. */ #define NUM_OF_SUPPORTED_GPUS 7 struct kfd_ioctl_get_process_apertures_args { struct kfd_process_device_apertures process_apertures[NUM_OF_SUPPORTED_GPUS];/* from KFD */ /* from KFD, should be in the range [1 - NUM_OF_SUPPORTED_GPUS] */ __u32 num_of_nodes; __u32 pad; }; struct kfd_ioctl_get_process_apertures_new_args { /* User allocated. Pointer to struct kfd_process_device_apertures * filled in by Kernel */ __u64 kfd_process_device_apertures_ptr; /* to KFD - indicates amount of memory present in * kfd_process_device_apertures_ptr * from KFD - Number of entries filled by KFD. */ __u32 num_of_nodes; __u32 pad; }; #define MAX_ALLOWED_NUM_POINTS 100 #define MAX_ALLOWED_AW_BUFF_SIZE 4096 #define MAX_ALLOWED_WAC_BUFF_SIZE 128 struct kfd_ioctl_dbg_register_args { __u32 gpu_id; /* to KFD */ __u32 pad; }; struct kfd_ioctl_dbg_unregister_args { __u32 gpu_id; /* to KFD */ __u32 pad; }; struct kfd_ioctl_dbg_address_watch_args { __u64 content_ptr; /* a pointer to the actual content */ __u32 gpu_id; /* to KFD */ __u32 buf_size_in_bytes; /*including gpu_id and buf_size */ }; struct kfd_ioctl_dbg_wave_control_args { __u64 content_ptr; /* a pointer to the actual content */ __u32 gpu_id; /* to KFD */ __u32 buf_size_in_bytes; /*including gpu_id and buf_size */ }; #define KFD_INVALID_FD 0xffffffff /* Matching HSA_EVENTTYPE */ #define KFD_IOC_EVENT_SIGNAL 0 #define KFD_IOC_EVENT_NODECHANGE 1 #define KFD_IOC_EVENT_DEVICESTATECHANGE 2 #define KFD_IOC_EVENT_HW_EXCEPTION 3 #define KFD_IOC_EVENT_SYSTEM_EVENT 4 #define KFD_IOC_EVENT_DEBUG_EVENT 5 #define KFD_IOC_EVENT_PROFILE_EVENT 6 #define KFD_IOC_EVENT_QUEUE_EVENT 7 #define KFD_IOC_EVENT_MEMORY 8 #define KFD_IOC_WAIT_RESULT_COMPLETE 0 #define KFD_IOC_WAIT_RESULT_TIMEOUT 1 #define KFD_IOC_WAIT_RESULT_FAIL 2 #define KFD_SIGNAL_EVENT_LIMIT 4096 /* For kfd_event_data.hw_exception_data.reset_type. */ #define KFD_HW_EXCEPTION_WHOLE_GPU_RESET 0 #define KFD_HW_EXCEPTION_PER_ENGINE_RESET 1 /* For kfd_event_data.hw_exception_data.reset_cause. */ #define KFD_HW_EXCEPTION_GPU_HANG 0 #define KFD_HW_EXCEPTION_ECC 1 /* For kfd_hsa_memory_exception_data.ErrorType */ #define KFD_MEM_ERR_NO_RAS 0 #define KFD_MEM_ERR_SRAM_ECC 1 #define KFD_MEM_ERR_POISON_CONSUMED 2 #define KFD_MEM_ERR_GPU_HANG 3 struct kfd_ioctl_create_event_args { __u64 event_page_offset; /* from KFD */ __u32 event_trigger_data; /* from KFD - signal events only */ __u32 event_type; /* to KFD */ __u32 auto_reset; /* to KFD */ __u32 node_id; /* to KFD - only valid for certain event types */ __u32 event_id; /* from KFD */ __u32 event_slot_index; /* from KFD */ }; struct kfd_ioctl_destroy_event_args { __u32 event_id; /* to KFD */ __u32 pad; }; struct kfd_ioctl_set_event_args { __u32 event_id; /* to KFD */ __u32 pad; }; struct kfd_ioctl_reset_event_args { __u32 event_id; /* to KFD */ __u32 pad; }; struct kfd_memory_exception_failure { __u32 NotPresent; /* Page not present or supervisor privilege */ __u32 ReadOnly; /* Write access to a read-only page */ __u32 NoExecute; /* Execute access to a page marked NX */ __u32 imprecise; /* Can't determine the exact fault address */ }; /* memory exception data */ struct kfd_hsa_memory_exception_data { struct kfd_memory_exception_failure failure; __u64 va; __u32 gpu_id; __u32 ErrorType; /* 0 = no RAS error, * 1 = ECC_SRAM, * 2 = Link_SYNFLOOD (poison), * 3 = GPU hang (not attributable to a specific cause), * other values reserved */ }; /* hw exception data */ struct kfd_hsa_hw_exception_data { __u32 reset_type; __u32 reset_cause; __u32 memory_lost; __u32 gpu_id; }; /* hsa signal event data */ struct kfd_hsa_signal_event_data { __u64 last_event_age; /* to and from KFD */ }; /* Event data */ struct kfd_event_data { union { /* From KFD */ struct kfd_hsa_memory_exception_data memory_exception_data; struct kfd_hsa_hw_exception_data hw_exception_data; /* To and From KFD */ struct kfd_hsa_signal_event_data signal_event_data; }; __u64 kfd_event_data_ext; /* pointer to an extension structure for future exception types */ __u32 event_id; /* to KFD */ __u32 pad; }; struct kfd_ioctl_wait_events_args { __u64 events_ptr; /* pointed to struct kfd_event_data array, to KFD */ __u32 num_events; /* to KFD */ __u32 wait_for_all; /* to KFD */ __u32 timeout; /* to KFD */ __u32 wait_result; /* from KFD */ }; struct kfd_ioctl_set_scratch_backing_va_args { __u64 va_addr; /* to KFD */ __u32 gpu_id; /* to KFD */ __u32 pad; }; struct kfd_ioctl_get_tile_config_args { /* to KFD: pointer to tile array */ __u64 tile_config_ptr; /* to KFD: pointer to macro tile array */ __u64 macro_tile_config_ptr; /* to KFD: array size allocated by user mode * from KFD: array size filled by kernel */ __u32 num_tile_configs; /* to KFD: array size allocated by user mode * from KFD: array size filled by kernel */ __u32 num_macro_tile_configs; __u32 gpu_id; /* to KFD */ __u32 gb_addr_config; /* from KFD */ __u32 num_banks; /* from KFD */ __u32 num_ranks; /* from KFD */ /* struct size can be extended later if needed * without breaking ABI compatibility */ }; struct kfd_ioctl_set_trap_handler_args { __u64 tba_addr; /* to KFD */ __u64 tma_addr; /* to KFD */ __u32 gpu_id; /* to KFD */ __u32 pad; }; struct kfd_ioctl_acquire_vm_args { __u32 drm_fd; /* to KFD */ __u32 gpu_id; /* to KFD */ }; /* Allocation flags: memory types */ #define KFD_IOC_ALLOC_MEM_FLAGS_VRAM (1 << 0) #define KFD_IOC_ALLOC_MEM_FLAGS_GTT (1 << 1) #define KFD_IOC_ALLOC_MEM_FLAGS_USERPTR (1 << 2) #define KFD_IOC_ALLOC_MEM_FLAGS_DOORBELL (1 << 3) #define KFD_IOC_ALLOC_MEM_FLAGS_MMIO_REMAP (1 << 4) /* Allocation flags: attributes/access options */ #define KFD_IOC_ALLOC_MEM_FLAGS_WRITABLE (1 << 31) #define KFD_IOC_ALLOC_MEM_FLAGS_EXECUTABLE (1 << 30) #define KFD_IOC_ALLOC_MEM_FLAGS_PUBLIC (1 << 29) #define KFD_IOC_ALLOC_MEM_FLAGS_NO_SUBSTITUTE (1 << 28) #define KFD_IOC_ALLOC_MEM_FLAGS_AQL_QUEUE_MEM (1 << 27) #define KFD_IOC_ALLOC_MEM_FLAGS_COHERENT (1 << 26) #define KFD_IOC_ALLOC_MEM_FLAGS_UNCACHED (1 << 25) #define KFD_IOC_ALLOC_MEM_FLAGS_EXT_COHERENT (1 << 24) #define KFD_IOC_ALLOC_MEM_FLAGS_CONTIGUOUS (1 << 23) /* Allocate memory for later SVM (shared virtual memory) mapping. * * @va_addr: virtual address of the memory to be allocated * all later mappings on all GPUs will use this address * @size: size in bytes * @handle: buffer handle returned to user mode, used to refer to * this allocation for mapping, unmapping and freeing * @mmap_offset: for CPU-mapping the allocation by mmapping a render node * for userptrs this is overloaded to specify the CPU address * @gpu_id: device identifier * @flags: memory type and attributes. See KFD_IOC_ALLOC_MEM_FLAGS above */ struct kfd_ioctl_alloc_memory_of_gpu_args { __u64 va_addr; /* to KFD */ __u64 size; /* to KFD */ __u64 handle; /* from KFD */ __u64 mmap_offset; /* to KFD (userptr), from KFD (mmap offset) */ __u32 gpu_id; /* to KFD */ __u32 flags; }; /* Free memory allocated with kfd_ioctl_alloc_memory_of_gpu * * @handle: memory handle returned by alloc */ struct kfd_ioctl_free_memory_of_gpu_args { __u64 handle; /* to KFD */ }; /* Map memory to one or more GPUs * * @handle: memory handle returned by alloc * @device_ids_array_ptr: array of gpu_ids (__u32 per device) * @n_devices: number of devices in the array * @n_success: number of devices mapped successfully * * @n_success returns information to the caller how many devices from * the start of the array have mapped the buffer successfully. It can * be passed into a subsequent retry call to skip those devices. For * the first call the caller should initialize it to 0. * * If the ioctl completes with return code 0 (success), n_success == * n_devices. */ struct kfd_ioctl_map_memory_to_gpu_args { __u64 handle; /* to KFD */ __u64 device_ids_array_ptr; /* to KFD */ __u32 n_devices; /* to KFD */ __u32 n_success; /* to/from KFD */ }; /* Unmap memory from one or more GPUs * * same arguments as for mapping */ struct kfd_ioctl_unmap_memory_from_gpu_args { __u64 handle; /* to KFD */ __u64 device_ids_array_ptr; /* to KFD */ __u32 n_devices; /* to KFD */ __u32 n_success; /* to/from KFD */ }; /* Allocate GWS for specific queue * * @queue_id: queue's id that GWS is allocated for * @num_gws: how many GWS to allocate * @first_gws: index of the first GWS allocated. * only support contiguous GWS allocation */ struct kfd_ioctl_alloc_queue_gws_args { __u32 queue_id; /* to KFD */ __u32 num_gws; /* to KFD */ __u32 first_gws; /* from KFD */ __u32 pad; }; struct kfd_ioctl_get_dmabuf_info_args { __u64 size; /* from KFD */ __u64 metadata_ptr; /* to KFD */ __u32 metadata_size; /* to KFD (space allocated by user) * from KFD (actual metadata size) */ __u32 gpu_id; /* from KFD */ __u32 flags; /* from KFD (KFD_IOC_ALLOC_MEM_FLAGS) */ __u32 dmabuf_fd; /* to KFD */ }; struct kfd_ioctl_import_dmabuf_args { __u64 va_addr; /* to KFD */ __u64 handle; /* from KFD */ __u32 gpu_id; /* to KFD */ __u32 dmabuf_fd; /* to KFD */ }; struct kfd_ioctl_export_dmabuf_args { __u64 handle; /* to KFD */ __u32 flags; /* to KFD */ __u32 dmabuf_fd; /* from KFD */ }; /* * KFD SMI(System Management Interface) events */ enum kfd_smi_event { KFD_SMI_EVENT_NONE = 0, /* not used */ KFD_SMI_EVENT_VMFAULT = 1, /* event start counting at 1 */ KFD_SMI_EVENT_THERMAL_THROTTLE = 2, KFD_SMI_EVENT_GPU_PRE_RESET = 3, KFD_SMI_EVENT_GPU_POST_RESET = 4, KFD_SMI_EVENT_MIGRATE_START = 5, KFD_SMI_EVENT_MIGRATE_END = 6, KFD_SMI_EVENT_PAGE_FAULT_START = 7, KFD_SMI_EVENT_PAGE_FAULT_END = 8, KFD_SMI_EVENT_QUEUE_EVICTION = 9, KFD_SMI_EVENT_QUEUE_RESTORE = 10, KFD_SMI_EVENT_UNMAP_FROM_GPU = 11, /* * max event number, as a flag bit to get events from all processes, * this requires super user permission, otherwise will not be able to * receive event from any process. Without this flag to receive events * from same process. */ KFD_SMI_EVENT_ALL_PROCESS = 64 }; /* The reason of the page migration event */ enum KFD_MIGRATE_TRIGGERS { KFD_MIGRATE_TRIGGER_PREFETCH, /* Prefetch to GPU VRAM or system memory */ KFD_MIGRATE_TRIGGER_PAGEFAULT_GPU, /* GPU page fault recover */ KFD_MIGRATE_TRIGGER_PAGEFAULT_CPU, /* CPU page fault recover */ KFD_MIGRATE_TRIGGER_TTM_EVICTION /* TTM eviction */ }; /* The reason of user queue evition event */ enum KFD_QUEUE_EVICTION_TRIGGERS { KFD_QUEUE_EVICTION_TRIGGER_SVM, /* SVM buffer migration */ KFD_QUEUE_EVICTION_TRIGGER_USERPTR, /* userptr movement */ KFD_QUEUE_EVICTION_TRIGGER_TTM, /* TTM move buffer */ KFD_QUEUE_EVICTION_TRIGGER_SUSPEND, /* GPU suspend */ KFD_QUEUE_EVICTION_CRIU_CHECKPOINT, /* CRIU checkpoint */ KFD_QUEUE_EVICTION_CRIU_RESTORE /* CRIU restore */ }; /* The reason of unmap buffer from GPU event */ enum KFD_SVM_UNMAP_TRIGGERS { KFD_SVM_UNMAP_TRIGGER_MMU_NOTIFY, /* MMU notifier CPU buffer movement */ KFD_SVM_UNMAP_TRIGGER_MMU_NOTIFY_MIGRATE,/* MMU notifier page migration */ KFD_SVM_UNMAP_TRIGGER_UNMAP_FROM_CPU /* Unmap to free the buffer */ }; #define KFD_SMI_EVENT_MASK_FROM_INDEX(i) (1ULL << ((i) - 1)) #define KFD_SMI_EVENT_MSG_SIZE 96 struct kfd_ioctl_smi_events_args { __u32 gpuid; /* to KFD */ __u32 anon_fd; /* from KFD */ }; /* * SVM event tracing via SMI system management interface * * Open event file descriptor * use ioctl AMDKFD_IOC_SMI_EVENTS, pass in gpuid and return a anonymous file * descriptor to receive SMI events. * If calling with sudo permission, then file descriptor can be used to receive * SVM events from all processes, otherwise, to only receive SVM events of same * process. * * To enable the SVM event * Write event file descriptor with KFD_SMI_EVENT_MASK_FROM_INDEX(event) bitmap * mask to start record the event to the kfifo, use bitmap mask combination * for multiple events. New event mask will overwrite the previous event mask. * KFD_SMI_EVENT_MASK_FROM_INDEX(KFD_SMI_EVENT_ALL_PROCESS) bit requires sudo * permisson to receive SVM events from all process. * * To receive the event * Application can poll file descriptor to wait for the events, then read event * from the file into a buffer. Each event is one line string message, starting * with the event id, then the event specific information. * * To decode event information * The following event format string macro can be used with sscanf to decode * the specific event information. * event triggers: the reason to generate the event, defined as enum for unmap, * eviction and migrate events. * node, from, to, prefetch_loc, preferred_loc: GPU ID, or 0 for system memory. * addr: user mode address, in pages * size: in pages * pid: the process ID to generate the event * ns: timestamp in nanosecond-resolution, starts at system boot time but * stops during suspend * migrate_update: GPU page fault is recovered by 'M' for migrate, 'U' for update * rw: 'W' for write page fault, 'R' for read page fault * rescheduled: 'R' if the queue restore failed and rescheduled to try again */ #define KFD_EVENT_FMT_UPDATE_GPU_RESET(reset_seq_num, reset_cause)\ "%x %s\n", (reset_seq_num), (reset_cause) #define KFD_EVENT_FMT_THERMAL_THROTTLING(bitmask, counter)\ "%llx:%llx\n", (bitmask), (counter) #define KFD_EVENT_FMT_VMFAULT(pid, task_name)\ "%x:%s\n", (pid), (task_name) #define KFD_EVENT_FMT_PAGEFAULT_START(ns, pid, addr, node, rw)\ "%lld -%d @%lx(%x) %c\n", (ns), (pid), (addr), (node), (rw) #define KFD_EVENT_FMT_PAGEFAULT_END(ns, pid, addr, node, migrate_update)\ "%lld -%d @%lx(%x) %c\n", (ns), (pid), (addr), (node), (migrate_update) #define KFD_EVENT_FMT_MIGRATE_START(ns, pid, start, size, from, to, prefetch_loc,\ preferred_loc, migrate_trigger)\ "%lld -%d @%lx(%lx) %x->%x %x:%x %d\n", (ns), (pid), (start), (size),\ (from), (to), (prefetch_loc), (preferred_loc), (migrate_trigger) #define KFD_EVENT_FMT_MIGRATE_END(ns, pid, start, size, from, to, migrate_trigger)\ "%lld -%d @%lx(%lx) %x->%x %d\n", (ns), (pid), (start), (size),\ (from), (to), (migrate_trigger) #define KFD_EVENT_FMT_QUEUE_EVICTION(ns, pid, node, evict_trigger)\ "%lld -%d %x %d\n", (ns), (pid), (node), (evict_trigger) #define KFD_EVENT_FMT_QUEUE_RESTORE(ns, pid, node, rescheduled)\ "%lld -%d %x %c\n", (ns), (pid), (node), (rescheduled) #define KFD_EVENT_FMT_UNMAP_FROM_GPU(ns, pid, addr, size, node, unmap_trigger)\ "%lld -%d @%lx(%lx) %x %d\n", (ns), (pid), (addr), (size),\ (node), (unmap_trigger) /************************************************************************************************** * CRIU IOCTLs (Checkpoint Restore In Userspace) * * When checkpointing a process, the userspace application will perform: * 1. PROCESS_INFO op to determine current process information. This pauses execution and evicts * all the queues. * 2. CHECKPOINT op to checkpoint process contents (BOs, queues, events, svm-ranges) * 3. UNPAUSE op to un-evict all the queues * * When restoring a process, the CRIU userspace application will perform: * * 1. RESTORE op to restore process contents * 2. RESUME op to start the process * * Note: Queues are forced into an evicted state after a successful PROCESS_INFO. User * application needs to perform an UNPAUSE operation after calling PROCESS_INFO. */ enum kfd_criu_op { KFD_CRIU_OP_PROCESS_INFO, KFD_CRIU_OP_CHECKPOINT, KFD_CRIU_OP_UNPAUSE, KFD_CRIU_OP_RESTORE, KFD_CRIU_OP_RESUME, }; /** * kfd_ioctl_criu_args - Arguments perform CRIU operation * @devices: [in/out] User pointer to memory location for devices information. * This is an array of type kfd_criu_device_bucket. * @bos: [in/out] User pointer to memory location for BOs information * This is an array of type kfd_criu_bo_bucket. * @priv_data: [in/out] User pointer to memory location for private data * @priv_data_size: [in/out] Size of priv_data in bytes * @num_devices: [in/out] Number of GPUs used by process. Size of @devices array. * @num_bos [in/out] Number of BOs used by process. Size of @bos array. * @num_objects: [in/out] Number of objects used by process. Objects are opaque to * user application. * @pid: [in/out] PID of the process being checkpointed * @op [in] Type of operation (kfd_criu_op) * * Return: 0 on success, -errno on failure */ struct kfd_ioctl_criu_args { __u64 devices; /* Used during ops: CHECKPOINT, RESTORE */ __u64 bos; /* Used during ops: CHECKPOINT, RESTORE */ __u64 priv_data; /* Used during ops: CHECKPOINT, RESTORE */ __u64 priv_data_size; /* Used during ops: PROCESS_INFO, RESTORE */ __u32 num_devices; /* Used during ops: PROCESS_INFO, RESTORE */ __u32 num_bos; /* Used during ops: PROCESS_INFO, RESTORE */ __u32 num_objects; /* Used during ops: PROCESS_INFO, RESTORE */ __u32 pid; /* Used during ops: PROCESS_INFO, RESUME */ __u32 op; }; struct kfd_criu_device_bucket { __u32 user_gpu_id; __u32 actual_gpu_id; __u32 drm_fd; __u32 pad; }; struct kfd_criu_bo_bucket { __u64 addr; __u64 size; __u64 offset; __u64 restored_offset; /* During restore, updated offset for BO */ __u32 gpu_id; /* This is the user_gpu_id */ __u32 alloc_flags; __u32 dmabuf_fd; __u32 pad; }; /* CRIU IOCTLs - END */ /**************************************************************************************************/ /* Register offset inside the remapped mmio page */ enum kfd_mmio_remap { KFD_MMIO_REMAP_HDP_MEM_FLUSH_CNTL = 0, KFD_MMIO_REMAP_HDP_REG_FLUSH_CNTL = 4, }; /* Guarantee host access to memory */ #define KFD_IOCTL_SVM_FLAG_HOST_ACCESS 0x00000001 /* Fine grained coherency between all devices with access */ #define KFD_IOCTL_SVM_FLAG_COHERENT 0x00000002 /* Use any GPU in same hive as preferred device */ #define KFD_IOCTL_SVM_FLAG_HIVE_LOCAL 0x00000004 /* GPUs only read, allows replication */ #define KFD_IOCTL_SVM_FLAG_GPU_RO 0x00000008 /* Allow execution on GPU */ #define KFD_IOCTL_SVM_FLAG_GPU_EXEC 0x00000010 /* GPUs mostly read, may allow similar optimizations as RO, but writes fault */ #define KFD_IOCTL_SVM_FLAG_GPU_READ_MOSTLY 0x00000020 /* Keep GPU memory mapping always valid as if XNACK is disable */ #define KFD_IOCTL_SVM_FLAG_GPU_ALWAYS_MAPPED 0x00000040 /* Fine grained coherency between all devices using device-scope atomics */ #define KFD_IOCTL_SVM_FLAG_EXT_COHERENT 0x00000080 /** * kfd_ioctl_svm_op - SVM ioctl operations * * @KFD_IOCTL_SVM_OP_SET_ATTR: Modify one or more attributes * @KFD_IOCTL_SVM_OP_GET_ATTR: Query one or more attributes */ enum kfd_ioctl_svm_op { KFD_IOCTL_SVM_OP_SET_ATTR, KFD_IOCTL_SVM_OP_GET_ATTR }; /** kfd_ioctl_svm_location - Enum for preferred and prefetch locations * * GPU IDs are used to specify GPUs as preferred and prefetch locations. * Below definitions are used for system memory or for leaving the preferred * location unspecified. */ enum kfd_ioctl_svm_location { KFD_IOCTL_SVM_LOCATION_SYSMEM = 0, KFD_IOCTL_SVM_LOCATION_UNDEFINED = 0xffffffff }; /** * kfd_ioctl_svm_attr_type - SVM attribute types * * @KFD_IOCTL_SVM_ATTR_PREFERRED_LOC: gpuid of the preferred location, 0 for * system memory * @KFD_IOCTL_SVM_ATTR_PREFETCH_LOC: gpuid of the prefetch location, 0 for * system memory. Setting this triggers an * immediate prefetch (migration). * @KFD_IOCTL_SVM_ATTR_ACCESS: * @KFD_IOCTL_SVM_ATTR_ACCESS_IN_PLACE: * @KFD_IOCTL_SVM_ATTR_NO_ACCESS: specify memory access for the gpuid given * by the attribute value * @KFD_IOCTL_SVM_ATTR_SET_FLAGS: bitmask of flags to set (see * KFD_IOCTL_SVM_FLAG_...) * @KFD_IOCTL_SVM_ATTR_CLR_FLAGS: bitmask of flags to clear * @KFD_IOCTL_SVM_ATTR_GRANULARITY: migration granularity * (log2 num pages) */ enum kfd_ioctl_svm_attr_type { KFD_IOCTL_SVM_ATTR_PREFERRED_LOC, KFD_IOCTL_SVM_ATTR_PREFETCH_LOC, KFD_IOCTL_SVM_ATTR_ACCESS, KFD_IOCTL_SVM_ATTR_ACCESS_IN_PLACE, KFD_IOCTL_SVM_ATTR_NO_ACCESS, KFD_IOCTL_SVM_ATTR_SET_FLAGS, KFD_IOCTL_SVM_ATTR_CLR_FLAGS, KFD_IOCTL_SVM_ATTR_GRANULARITY }; /** * kfd_ioctl_svm_attribute - Attributes as pairs of type and value * * The meaning of the @value depends on the attribute type. * * @type: attribute type (see enum @kfd_ioctl_svm_attr_type) * @value: attribute value */ struct kfd_ioctl_svm_attribute { __u32 type; __u32 value; }; /** * kfd_ioctl_svm_args - Arguments for SVM ioctl * * @op specifies the operation to perform (see enum * @kfd_ioctl_svm_op). @start_addr and @size are common for all * operations. * * A variable number of attributes can be given in @attrs. * @nattr specifies the number of attributes. New attributes can be * added in the future without breaking the ABI. If unknown attributes * are given, the function returns -EINVAL. * * @KFD_IOCTL_SVM_OP_SET_ATTR sets attributes for a virtual address * range. It may overlap existing virtual address ranges. If it does, * the existing ranges will be split such that the attribute changes * only apply to the specified address range. * * @KFD_IOCTL_SVM_OP_GET_ATTR returns the intersection of attributes * over all memory in the given range and returns the result as the * attribute value. If different pages have different preferred or * prefetch locations, 0xffffffff will be returned for * @KFD_IOCTL_SVM_ATTR_PREFERRED_LOC or * @KFD_IOCTL_SVM_ATTR_PREFETCH_LOC resepctively. For * @KFD_IOCTL_SVM_ATTR_SET_FLAGS, flags of all pages will be * aggregated by bitwise AND. That means, a flag will be set in the * output, if that flag is set for all pages in the range. For * @KFD_IOCTL_SVM_ATTR_CLR_FLAGS, flags of all pages will be * aggregated by bitwise NOR. That means, a flag will be set in the * output, if that flag is clear for all pages in the range. * The minimum migration granularity throughout the range will be * returned for @KFD_IOCTL_SVM_ATTR_GRANULARITY. * * Querying of accessibility attributes works by initializing the * attribute type to @KFD_IOCTL_SVM_ATTR_ACCESS and the value to the * GPUID being queried. Multiple attributes can be given to allow * querying multiple GPUIDs. The ioctl function overwrites the * attribute type to indicate the access for the specified GPU. */ struct kfd_ioctl_svm_args { __u64 start_addr; __u64 size; __u32 op; __u32 nattr; /* Variable length array of attributes */ struct kfd_ioctl_svm_attribute attrs[]; }; /** * kfd_ioctl_set_xnack_mode_args - Arguments for set_xnack_mode * * @xnack_enabled: [in/out] Whether to enable XNACK mode for this process * * @xnack_enabled indicates whether recoverable page faults should be * enabled for the current process. 0 means disabled, positive means * enabled, negative means leave unchanged. If enabled, virtual address * translations on GFXv9 and later AMD GPUs can return XNACK and retry * the access until a valid PTE is available. This is used to implement * device page faults. * * On output, @xnack_enabled returns the (new) current mode (0 or * positive). Therefore, a negative input value can be used to query * the current mode without changing it. * * The XNACK mode fundamentally changes the way SVM managed memory works * in the driver, with subtle effects on application performance and * functionality. * * Enabling XNACK mode requires shader programs to be compiled * differently. Furthermore, not all GPUs support changing the mode * per-process. Therefore changing the mode is only allowed while no * user mode queues exist in the process. This ensure that no shader * code is running that may be compiled for the wrong mode. And GPUs * that cannot change to the requested mode will prevent the XNACK * mode from occurring. All GPUs used by the process must be in the * same XNACK mode. * * GFXv8 or older GPUs do not support 48 bit virtual addresses or SVM. * Therefore those GPUs are not considered for the XNACK mode switch. * * Return: 0 on success, -errno on failure */ struct kfd_ioctl_set_xnack_mode_args { __s32 xnack_enabled; }; /* Wave launch override modes */ enum kfd_dbg_trap_override_mode { KFD_DBG_TRAP_OVERRIDE_OR = 0, KFD_DBG_TRAP_OVERRIDE_REPLACE = 1 }; /* Wave launch overrides */ enum kfd_dbg_trap_mask { KFD_DBG_TRAP_MASK_FP_INVALID = 1, KFD_DBG_TRAP_MASK_FP_INPUT_DENORMAL = 2, KFD_DBG_TRAP_MASK_FP_DIVIDE_BY_ZERO = 4, KFD_DBG_TRAP_MASK_FP_OVERFLOW = 8, KFD_DBG_TRAP_MASK_FP_UNDERFLOW = 16, KFD_DBG_TRAP_MASK_FP_INEXACT = 32, KFD_DBG_TRAP_MASK_INT_DIVIDE_BY_ZERO = 64, KFD_DBG_TRAP_MASK_DBG_ADDRESS_WATCH = 128, KFD_DBG_TRAP_MASK_DBG_MEMORY_VIOLATION = 256, KFD_DBG_TRAP_MASK_TRAP_ON_WAVE_START = (1 << 30), KFD_DBG_TRAP_MASK_TRAP_ON_WAVE_END = (1 << 31) }; /* Wave launch modes */ enum kfd_dbg_trap_wave_launch_mode { KFD_DBG_TRAP_WAVE_LAUNCH_MODE_NORMAL = 0, KFD_DBG_TRAP_WAVE_LAUNCH_MODE_HALT = 1, KFD_DBG_TRAP_WAVE_LAUNCH_MODE_DEBUG = 3 }; /* Address watch modes */ enum kfd_dbg_trap_address_watch_mode { KFD_DBG_TRAP_ADDRESS_WATCH_MODE_READ = 0, KFD_DBG_TRAP_ADDRESS_WATCH_MODE_NONREAD = 1, KFD_DBG_TRAP_ADDRESS_WATCH_MODE_ATOMIC = 2, KFD_DBG_TRAP_ADDRESS_WATCH_MODE_ALL = 3 }; /* Additional wave settings */ enum kfd_dbg_trap_flags { KFD_DBG_TRAP_FLAG_SINGLE_MEM_OP = 1, KFD_DBG_TRAP_FLAG_SINGLE_ALU_OP = 2, }; /* Trap exceptions */ enum kfd_dbg_trap_exception_code { EC_NONE = 0, /* per queue */ EC_QUEUE_WAVE_ABORT = 1, EC_QUEUE_WAVE_TRAP = 2, EC_QUEUE_WAVE_MATH_ERROR = 3, EC_QUEUE_WAVE_ILLEGAL_INSTRUCTION = 4, EC_QUEUE_WAVE_MEMORY_VIOLATION = 5, EC_QUEUE_WAVE_APERTURE_VIOLATION = 6, EC_QUEUE_PACKET_DISPATCH_DIM_INVALID = 16, EC_QUEUE_PACKET_DISPATCH_GROUP_SEGMENT_SIZE_INVALID = 17, EC_QUEUE_PACKET_DISPATCH_CODE_INVALID = 18, EC_QUEUE_PACKET_RESERVED = 19, EC_QUEUE_PACKET_UNSUPPORTED = 20, EC_QUEUE_PACKET_DISPATCH_WORK_GROUP_SIZE_INVALID = 21, EC_QUEUE_PACKET_DISPATCH_REGISTER_INVALID = 22, EC_QUEUE_PACKET_VENDOR_UNSUPPORTED = 23, EC_QUEUE_PREEMPTION_ERROR = 30, EC_QUEUE_NEW = 31, /* per device */ EC_DEVICE_QUEUE_DELETE = 32, EC_DEVICE_MEMORY_VIOLATION = 33, EC_DEVICE_RAS_ERROR = 34, EC_DEVICE_FATAL_HALT = 35, EC_DEVICE_NEW = 36, /* per process */ EC_PROCESS_RUNTIME = 48, EC_PROCESS_DEVICE_REMOVE = 49, EC_MAX }; /* Mask generated by ecode in kfd_dbg_trap_exception_code */ #define KFD_EC_MASK(ecode) (1ULL << (ecode - 1)) /* Masks for exception code type checks below */ #define KFD_EC_MASK_QUEUE (KFD_EC_MASK(EC_QUEUE_WAVE_ABORT) | \ KFD_EC_MASK(EC_QUEUE_WAVE_TRAP) | \ KFD_EC_MASK(EC_QUEUE_WAVE_MATH_ERROR) | \ KFD_EC_MASK(EC_QUEUE_WAVE_ILLEGAL_INSTRUCTION) | \ KFD_EC_MASK(EC_QUEUE_WAVE_MEMORY_VIOLATION) | \ KFD_EC_MASK(EC_QUEUE_WAVE_APERTURE_VIOLATION) | \ KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_DIM_INVALID) | \ KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_GROUP_SEGMENT_SIZE_INVALID) | \ KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_CODE_INVALID) | \ KFD_EC_MASK(EC_QUEUE_PACKET_RESERVED) | \ KFD_EC_MASK(EC_QUEUE_PACKET_UNSUPPORTED) | \ KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_WORK_GROUP_SIZE_INVALID) | \ KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_REGISTER_INVALID) | \ KFD_EC_MASK(EC_QUEUE_PACKET_VENDOR_UNSUPPORTED) | \ KFD_EC_MASK(EC_QUEUE_PREEMPTION_ERROR) | \ KFD_EC_MASK(EC_QUEUE_NEW)) #define KFD_EC_MASK_DEVICE (KFD_EC_MASK(EC_DEVICE_QUEUE_DELETE) | \ KFD_EC_MASK(EC_DEVICE_RAS_ERROR) | \ KFD_EC_MASK(EC_DEVICE_FATAL_HALT) | \ KFD_EC_MASK(EC_DEVICE_MEMORY_VIOLATION) | \ KFD_EC_MASK(EC_DEVICE_NEW)) #define KFD_EC_MASK_PROCESS (KFD_EC_MASK(EC_PROCESS_RUNTIME) | \ KFD_EC_MASK(EC_PROCESS_DEVICE_REMOVE)) #define KFD_EC_MASK_PACKET (KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_DIM_INVALID) | \ KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_GROUP_SEGMENT_SIZE_INVALID) | \ KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_CODE_INVALID) | \ KFD_EC_MASK(EC_QUEUE_PACKET_RESERVED) | \ KFD_EC_MASK(EC_QUEUE_PACKET_UNSUPPORTED) | \ KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_WORK_GROUP_SIZE_INVALID) | \ KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_REGISTER_INVALID) | \ KFD_EC_MASK(EC_QUEUE_PACKET_VENDOR_UNSUPPORTED)) /* Checks for exception code types for KFD search */ #define KFD_DBG_EC_IS_VALID(ecode) (ecode > EC_NONE && ecode < EC_MAX) #define KFD_DBG_EC_TYPE_IS_QUEUE(ecode) \ (KFD_DBG_EC_IS_VALID(ecode) && !!(KFD_EC_MASK(ecode) & KFD_EC_MASK_QUEUE)) #define KFD_DBG_EC_TYPE_IS_DEVICE(ecode) \ (KFD_DBG_EC_IS_VALID(ecode) && !!(KFD_EC_MASK(ecode) & KFD_EC_MASK_DEVICE)) #define KFD_DBG_EC_TYPE_IS_PROCESS(ecode) \ (KFD_DBG_EC_IS_VALID(ecode) && !!(KFD_EC_MASK(ecode) & KFD_EC_MASK_PROCESS)) #define KFD_DBG_EC_TYPE_IS_PACKET(ecode) \ (KFD_DBG_EC_IS_VALID(ecode) && !!(KFD_EC_MASK(ecode) & KFD_EC_MASK_PACKET)) /* Runtime enable states */ enum kfd_dbg_runtime_state { DEBUG_RUNTIME_STATE_DISABLED = 0, DEBUG_RUNTIME_STATE_ENABLED = 1, DEBUG_RUNTIME_STATE_ENABLED_BUSY = 2, DEBUG_RUNTIME_STATE_ENABLED_ERROR = 3 }; /* Runtime enable status */ struct kfd_runtime_info { __u64 r_debug; __u32 runtime_state; __u32 ttmp_setup; }; /* Enable modes for runtime enable */ #define KFD_RUNTIME_ENABLE_MODE_ENABLE_MASK 1 #define KFD_RUNTIME_ENABLE_MODE_TTMP_SAVE_MASK 2 /** * kfd_ioctl_runtime_enable_args - Arguments for runtime enable * * Coordinates debug exception signalling and debug device enablement with runtime. * * @r_debug - pointer to user struct for sharing information between ROCr and the debuggger * @mode_mask - mask to set mode * KFD_RUNTIME_ENABLE_MODE_ENABLE_MASK - enable runtime for debugging, otherwise disable * KFD_RUNTIME_ENABLE_MODE_TTMP_SAVE_MASK - enable trap temporary setup (ignore on disable) * @capabilities_mask - mask to notify runtime on what KFD supports * * Return - 0 on SUCCESS. * - EBUSY if runtime enable call already pending. * - EEXIST if user queues already active prior to call. * If process is debug enabled, runtime enable will enable debug devices and * wait for debugger process to send runtime exception EC_PROCESS_RUNTIME * to unblock - see kfd_ioctl_dbg_trap_args. * */ struct kfd_ioctl_runtime_enable_args { __u64 r_debug; __u32 mode_mask; __u32 capabilities_mask; }; /* Queue information */ struct kfd_queue_snapshot_entry { __u64 exception_status; __u64 ring_base_address; __u64 write_pointer_address; __u64 read_pointer_address; __u64 ctx_save_restore_address; __u32 queue_id; __u32 gpu_id; __u32 ring_size; __u32 queue_type; __u32 ctx_save_restore_area_size; __u32 reserved; }; /* Queue status return for suspend/resume */ #define KFD_DBG_QUEUE_ERROR_BIT 30 #define KFD_DBG_QUEUE_INVALID_BIT 31 #define KFD_DBG_QUEUE_ERROR_MASK (1 << KFD_DBG_QUEUE_ERROR_BIT) #define KFD_DBG_QUEUE_INVALID_MASK (1 << KFD_DBG_QUEUE_INVALID_BIT) /* Context save area header information */ struct kfd_context_save_area_header { struct { __u32 control_stack_offset; __u32 control_stack_size; __u32 wave_state_offset; __u32 wave_state_size; } wave_state; __u32 debug_offset; __u32 debug_size; __u64 err_payload_addr; __u32 err_event_id; __u32 reserved1; }; /* * Debug operations * * For specifics on usage and return values, see documentation per operation * below. Otherwise, generic error returns apply: * - ESRCH if the process to debug does not exist. * * - EINVAL (with KFD_IOC_DBG_TRAP_ENABLE exempt) if operation * KFD_IOC_DBG_TRAP_ENABLE has not succeeded prior. * Also returns this error if GPU hardware scheduling is not supported. * * - EPERM (with KFD_IOC_DBG_TRAP_DISABLE exempt) if target process is not * PTRACE_ATTACHED. KFD_IOC_DBG_TRAP_DISABLE is exempt to allow * clean up of debug mode as long as process is debug enabled. * * - EACCES if any DBG_HW_OP (debug hardware operation) is requested when * AMDKFD_IOC_RUNTIME_ENABLE has not succeeded prior. * * - ENODEV if any GPU does not support debugging on a DBG_HW_OP call. * * - Other errors may be returned when a DBG_HW_OP occurs while the GPU * is in a fatal state. * */ enum kfd_dbg_trap_operations { KFD_IOC_DBG_TRAP_ENABLE = 0, KFD_IOC_DBG_TRAP_DISABLE = 1, KFD_IOC_DBG_TRAP_SEND_RUNTIME_EVENT = 2, KFD_IOC_DBG_TRAP_SET_EXCEPTIONS_ENABLED = 3, KFD_IOC_DBG_TRAP_SET_WAVE_LAUNCH_OVERRIDE = 4, /* DBG_HW_OP */ KFD_IOC_DBG_TRAP_SET_WAVE_LAUNCH_MODE = 5, /* DBG_HW_OP */ KFD_IOC_DBG_TRAP_SUSPEND_QUEUES = 6, /* DBG_HW_OP */ KFD_IOC_DBG_TRAP_RESUME_QUEUES = 7, /* DBG_HW_OP */ KFD_IOC_DBG_TRAP_SET_NODE_ADDRESS_WATCH = 8, /* DBG_HW_OP */ KFD_IOC_DBG_TRAP_CLEAR_NODE_ADDRESS_WATCH = 9, /* DBG_HW_OP */ KFD_IOC_DBG_TRAP_SET_FLAGS = 10, KFD_IOC_DBG_TRAP_QUERY_DEBUG_EVENT = 11, KFD_IOC_DBG_TRAP_QUERY_EXCEPTION_INFO = 12, KFD_IOC_DBG_TRAP_GET_QUEUE_SNAPSHOT = 13, KFD_IOC_DBG_TRAP_GET_DEVICE_SNAPSHOT = 14 }; /** * kfd_ioctl_dbg_trap_enable_args * * Arguments for KFD_IOC_DBG_TRAP_ENABLE. * * Enables debug session for target process. Call @op KFD_IOC_DBG_TRAP_DISABLE in * kfd_ioctl_dbg_trap_args to disable debug session. * * @exception_mask (IN) - exceptions to raise to the debugger * @rinfo_ptr (IN) - pointer to runtime info buffer (see kfd_runtime_info) * @rinfo_size (IN/OUT) - size of runtime info buffer in bytes * @dbg_fd (IN) - fd the KFD will nofify the debugger with of raised * exceptions set in exception_mask. * * Generic errors apply (see kfd_dbg_trap_operations). * Return - 0 on SUCCESS. * Copies KFD saved kfd_runtime_info to @rinfo_ptr on enable. * Size of kfd_runtime saved by the KFD returned to @rinfo_size. * - EBADF if KFD cannot get a reference to dbg_fd. * - EFAULT if KFD cannot copy runtime info to rinfo_ptr. * - EINVAL if target process is already debug enabled. * */ struct kfd_ioctl_dbg_trap_enable_args { __u64 exception_mask; __u64 rinfo_ptr; __u32 rinfo_size; __u32 dbg_fd; }; /** * kfd_ioctl_dbg_trap_send_runtime_event_args * * * Arguments for KFD_IOC_DBG_TRAP_SEND_RUNTIME_EVENT. * Raises exceptions to runtime. * * @exception_mask (IN) - exceptions to raise to runtime * @gpu_id (IN) - target device id * @queue_id (IN) - target queue id * * Generic errors apply (see kfd_dbg_trap_operations). * Return - 0 on SUCCESS. * - ENODEV if gpu_id not found. * If exception_mask contains EC_PROCESS_RUNTIME, unblocks pending * AMDKFD_IOC_RUNTIME_ENABLE call - see kfd_ioctl_runtime_enable_args. * All other exceptions are raised to runtime through err_payload_addr. * See kfd_context_save_area_header. */ struct kfd_ioctl_dbg_trap_send_runtime_event_args { __u64 exception_mask; __u32 gpu_id; __u32 queue_id; }; /** * kfd_ioctl_dbg_trap_set_exceptions_enabled_args * * Arguments for KFD_IOC_SET_EXCEPTIONS_ENABLED * Set new exceptions to be raised to the debugger. * * @exception_mask (IN) - new exceptions to raise the debugger * * Generic errors apply (see kfd_dbg_trap_operations). * Return - 0 on SUCCESS. */ struct kfd_ioctl_dbg_trap_set_exceptions_enabled_args { __u64 exception_mask; }; /** * kfd_ioctl_dbg_trap_set_wave_launch_override_args * * Arguments for KFD_IOC_DBG_TRAP_SET_WAVE_LAUNCH_OVERRIDE * Enable HW exceptions to raise trap. * * @override_mode (IN) - see kfd_dbg_trap_override_mode * @enable_mask (IN/OUT) - reference kfd_dbg_trap_mask. * IN is the override modes requested to be enabled. * OUT is referenced in Return below. * @support_request_mask (IN/OUT) - reference kfd_dbg_trap_mask. * IN is the override modes requested for support check. * OUT is referenced in Return below. * * Generic errors apply (see kfd_dbg_trap_operations). * Return - 0 on SUCCESS. * Previous enablement is returned in @enable_mask. * Actual override support is returned in @support_request_mask. * - EINVAL if override mode is not supported. * - EACCES if trap support requested is not actually supported. * i.e. enable_mask (IN) is not a subset of support_request_mask (OUT). * Otherwise it is considered a generic error (see kfd_dbg_trap_operations). */ struct kfd_ioctl_dbg_trap_set_wave_launch_override_args { __u32 override_mode; __u32 enable_mask; __u32 support_request_mask; __u32 pad; }; /** * kfd_ioctl_dbg_trap_set_wave_launch_mode_args * * Arguments for KFD_IOC_DBG_TRAP_SET_WAVE_LAUNCH_MODE * Set wave launch mode. * * @mode (IN) - see kfd_dbg_trap_wave_launch_mode * * Generic errors apply (see kfd_dbg_trap_operations). * Return - 0 on SUCCESS. */ struct kfd_ioctl_dbg_trap_set_wave_launch_mode_args { __u32 launch_mode; __u32 pad; }; /** * kfd_ioctl_dbg_trap_suspend_queues_ags * * Arguments for KFD_IOC_DBG_TRAP_SUSPEND_QUEUES * Suspend queues. * * @exception_mask (IN) - raised exceptions to clear * @queue_array_ptr (IN) - pointer to array of queue ids (u32 per queue id) * to suspend * @num_queues (IN) - number of queues to suspend in @queue_array_ptr * @grace_period (IN) - wave time allowance before preemption * per 1K GPU clock cycle unit * * Generic errors apply (see kfd_dbg_trap_operations). * Destruction of a suspended queue is blocked until the queue is * resumed. This allows the debugger to access queue information and * the its context save area without running into a race condition on * queue destruction. * Automatically copies per queue context save area header information * into the save area base * (see kfd_queue_snapshot_entry and kfd_context_save_area_header). * * Return - Number of queues suspended on SUCCESS. * . KFD_DBG_QUEUE_ERROR_MASK and KFD_DBG_QUEUE_INVALID_MASK masked * for each queue id in @queue_array_ptr array reports unsuccessful * suspend reason. * KFD_DBG_QUEUE_ERROR_MASK = HW failure. * KFD_DBG_QUEUE_INVALID_MASK = queue does not exist, is new or * is being destroyed. */ struct kfd_ioctl_dbg_trap_suspend_queues_args { __u64 exception_mask; __u64 queue_array_ptr; __u32 num_queues; __u32 grace_period; }; /** * kfd_ioctl_dbg_trap_resume_queues_args * * Arguments for KFD_IOC_DBG_TRAP_RESUME_QUEUES * Resume queues. * * @queue_array_ptr (IN) - pointer to array of queue ids (u32 per queue id) * to resume * @num_queues (IN) - number of queues to resume in @queue_array_ptr * * Generic errors apply (see kfd_dbg_trap_operations). * Return - Number of queues resumed on SUCCESS. * KFD_DBG_QUEUE_ERROR_MASK and KFD_DBG_QUEUE_INVALID_MASK mask * for each queue id in @queue_array_ptr array reports unsuccessful * resume reason. * KFD_DBG_QUEUE_ERROR_MASK = HW failure. * KFD_DBG_QUEUE_INVALID_MASK = queue does not exist. */ struct kfd_ioctl_dbg_trap_resume_queues_args { __u64 queue_array_ptr; __u32 num_queues; __u32 pad; }; /** * kfd_ioctl_dbg_trap_set_node_address_watch_args * * Arguments for KFD_IOC_DBG_TRAP_SET_NODE_ADDRESS_WATCH * Sets address watch for device. * * @address (IN) - watch address to set * @mode (IN) - see kfd_dbg_trap_address_watch_mode * @mask (IN) - watch address mask * @gpu_id (IN) - target gpu to set watch point * @id (OUT) - watch id allocated * * Generic errors apply (see kfd_dbg_trap_operations). * Return - 0 on SUCCESS. * Allocated watch ID returned to @id. * - ENODEV if gpu_id not found. * - ENOMEM if watch IDs can be allocated */ struct kfd_ioctl_dbg_trap_set_node_address_watch_args { __u64 address; __u32 mode; __u32 mask; __u32 gpu_id; __u32 id; }; /** * kfd_ioctl_dbg_trap_clear_node_address_watch_args * * Arguments for KFD_IOC_DBG_TRAP_CLEAR_NODE_ADDRESS_WATCH * Clear address watch for device. * * @gpu_id (IN) - target device to clear watch point * @id (IN) - allocated watch id to clear * * Generic errors apply (see kfd_dbg_trap_operations). * Return - 0 on SUCCESS. * - ENODEV if gpu_id not found. * - EINVAL if watch ID has not been allocated. */ struct kfd_ioctl_dbg_trap_clear_node_address_watch_args { __u32 gpu_id; __u32 id; }; /** * kfd_ioctl_dbg_trap_set_flags_args * * Arguments for KFD_IOC_DBG_TRAP_SET_FLAGS * Sets flags for wave behaviour. * * @flags (IN/OUT) - IN = flags to enable, OUT = flags previously enabled * * Generic errors apply (see kfd_dbg_trap_operations). * Return - 0 on SUCCESS. * - EACCESS if any debug device does not allow flag options. */ struct kfd_ioctl_dbg_trap_set_flags_args { __u32 flags; __u32 pad; }; /** * kfd_ioctl_dbg_trap_query_debug_event_args * * Arguments for KFD_IOC_DBG_TRAP_QUERY_DEBUG_EVENT * * Find one or more raised exceptions. This function can return multiple * exceptions from a single queue or a single device with one call. To find * all raised exceptions, this function must be called repeatedly until it * returns -EAGAIN. Returned exceptions can optionally be cleared by * setting the corresponding bit in the @exception_mask input parameter. * However, clearing an exception prevents retrieving further information * about it with KFD_IOC_DBG_TRAP_QUERY_EXCEPTION_INFO. * * @exception_mask (IN/OUT) - exception to clear (IN) and raised (OUT) * @gpu_id (OUT) - gpu id of exceptions raised * @queue_id (OUT) - queue id of exceptions raised * * Generic errors apply (see kfd_dbg_trap_operations). * Return - 0 on raised exception found * Raised exceptions found are returned in @exception mask * with reported source id returned in @gpu_id or @queue_id. * - EAGAIN if no raised exception has been found */ struct kfd_ioctl_dbg_trap_query_debug_event_args { __u64 exception_mask; __u32 gpu_id; __u32 queue_id; }; /** * kfd_ioctl_dbg_trap_query_exception_info_args * * Arguments KFD_IOC_DBG_TRAP_QUERY_EXCEPTION_INFO * Get additional info on raised exception. * * @info_ptr (IN) - pointer to exception info buffer to copy to * @info_size (IN/OUT) - exception info buffer size (bytes) * @source_id (IN) - target gpu or queue id * @exception_code (IN) - target exception * @clear_exception (IN) - clear raised @exception_code exception * (0 = false, 1 = true) * * Generic errors apply (see kfd_dbg_trap_operations). * Return - 0 on SUCCESS. * If @exception_code is EC_DEVICE_MEMORY_VIOLATION, copy @info_size(OUT) * bytes of memory exception data to @info_ptr. * If @exception_code is EC_PROCESS_RUNTIME, copy saved * kfd_runtime_info to @info_ptr. * Actual required @info_ptr size (bytes) is returned in @info_size. */ struct kfd_ioctl_dbg_trap_query_exception_info_args { __u64 info_ptr; __u32 info_size; __u32 source_id; __u32 exception_code; __u32 clear_exception; }; /** * kfd_ioctl_dbg_trap_get_queue_snapshot_args * * Arguments KFD_IOC_DBG_TRAP_GET_QUEUE_SNAPSHOT * Get queue information. * * @exception_mask (IN) - exceptions raised to clear * @snapshot_buf_ptr (IN) - queue snapshot entry buffer (see kfd_queue_snapshot_entry) * @num_queues (IN/OUT) - number of queue snapshot entries * The debugger specifies the size of the array allocated in @num_queues. * KFD returns the number of queues that actually existed. If this is * larger than the size specified by the debugger, KFD will not overflow * the array allocated by the debugger. * * @entry_size (IN/OUT) - size per entry in bytes * The debugger specifies sizeof(struct kfd_queue_snapshot_entry) in * @entry_size. KFD returns the number of bytes actually populated per * entry. The debugger should use the KFD_IOCTL_MINOR_VERSION to determine, * which fields in struct kfd_queue_snapshot_entry are valid. This allows * growing the ABI in a backwards compatible manner. * Note that entry_size(IN) should still be used to stride the snapshot buffer in the * event that it's larger than actual kfd_queue_snapshot_entry. * * Generic errors apply (see kfd_dbg_trap_operations). * Return - 0 on SUCCESS. * Copies @num_queues(IN) queue snapshot entries of size @entry_size(IN) * into @snapshot_buf_ptr if @num_queues(IN) > 0. * Otherwise return @num_queues(OUT) queue snapshot entries that exist. */ struct kfd_ioctl_dbg_trap_queue_snapshot_args { __u64 exception_mask; __u64 snapshot_buf_ptr; __u32 num_queues; __u32 entry_size; }; /** * kfd_ioctl_dbg_trap_get_device_snapshot_args * * Arguments for KFD_IOC_DBG_TRAP_GET_DEVICE_SNAPSHOT * Get device information. * * @exception_mask (IN) - exceptions raised to clear * @snapshot_buf_ptr (IN) - pointer to snapshot buffer (see kfd_dbg_device_info_entry) * @num_devices (IN/OUT) - number of debug devices to snapshot * The debugger specifies the size of the array allocated in @num_devices. * KFD returns the number of devices that actually existed. If this is * larger than the size specified by the debugger, KFD will not overflow * the array allocated by the debugger. * * @entry_size (IN/OUT) - size per entry in bytes * The debugger specifies sizeof(struct kfd_dbg_device_info_entry) in * @entry_size. KFD returns the number of bytes actually populated. The * debugger should use KFD_IOCTL_MINOR_VERSION to determine, which fields * in struct kfd_dbg_device_info_entry are valid. This allows growing the * ABI in a backwards compatible manner. * Note that entry_size(IN) should still be used to stride the snapshot buffer in the * event that it's larger than actual kfd_dbg_device_info_entry. * * Generic errors apply (see kfd_dbg_trap_operations). * Return - 0 on SUCCESS. * Copies @num_devices(IN) device snapshot entries of size @entry_size(IN) * into @snapshot_buf_ptr if @num_devices(IN) > 0. * Otherwise return @num_devices(OUT) queue snapshot entries that exist. */ struct kfd_ioctl_dbg_trap_device_snapshot_args { __u64 exception_mask; __u64 snapshot_buf_ptr; __u32 num_devices; __u32 entry_size; }; /** * kfd_ioctl_dbg_trap_args * * Arguments to debug target process. * * @pid - target process to debug * @op - debug operation (see kfd_dbg_trap_operations) * * @op determines which union struct args to use. * Refer to kern docs for each kfd_ioctl_dbg_trap_*_args struct. */ struct kfd_ioctl_dbg_trap_args { __u32 pid; __u32 op; union { struct kfd_ioctl_dbg_trap_enable_args enable; struct kfd_ioctl_dbg_trap_send_runtime_event_args send_runtime_event; struct kfd_ioctl_dbg_trap_set_exceptions_enabled_args set_exceptions_enabled; struct kfd_ioctl_dbg_trap_set_wave_launch_override_args launch_override; struct kfd_ioctl_dbg_trap_set_wave_launch_mode_args launch_mode; struct kfd_ioctl_dbg_trap_suspend_queues_args suspend_queues; struct kfd_ioctl_dbg_trap_resume_queues_args resume_queues; struct kfd_ioctl_dbg_trap_set_node_address_watch_args set_node_address_watch; struct kfd_ioctl_dbg_trap_clear_node_address_watch_args clear_node_address_watch; struct kfd_ioctl_dbg_trap_set_flags_args set_flags; struct kfd_ioctl_dbg_trap_query_debug_event_args query_debug_event; struct kfd_ioctl_dbg_trap_query_exception_info_args query_exception_info; struct kfd_ioctl_dbg_trap_queue_snapshot_args queue_snapshot; struct kfd_ioctl_dbg_trap_device_snapshot_args device_snapshot; }; }; #define AMDKFD_IOCTL_BASE 'K' #define AMDKFD_IO(nr) _IO(AMDKFD_IOCTL_BASE, nr) #define AMDKFD_IOR(nr, type) _IOR(AMDKFD_IOCTL_BASE, nr, type) #define AMDKFD_IOW(nr, type) _IOW(AMDKFD_IOCTL_BASE, nr, type) #define AMDKFD_IOWR(nr, type) _IOWR(AMDKFD_IOCTL_BASE, nr, type) #define AMDKFD_IOC_GET_VERSION \ AMDKFD_IOR(0x01, struct kfd_ioctl_get_version_args) #define AMDKFD_IOC_CREATE_QUEUE \ AMDKFD_IOWR(0x02, struct kfd_ioctl_create_queue_args) #define AMDKFD_IOC_DESTROY_QUEUE \ AMDKFD_IOWR(0x03, struct kfd_ioctl_destroy_queue_args) #define AMDKFD_IOC_SET_MEMORY_POLICY \ AMDKFD_IOW(0x04, struct kfd_ioctl_set_memory_policy_args) #define AMDKFD_IOC_GET_CLOCK_COUNTERS \ AMDKFD_IOWR(0x05, struct kfd_ioctl_get_clock_counters_args) #define AMDKFD_IOC_GET_PROCESS_APERTURES \ AMDKFD_IOR(0x06, struct kfd_ioctl_get_process_apertures_args) #define AMDKFD_IOC_UPDATE_QUEUE \ AMDKFD_IOW(0x07, struct kfd_ioctl_update_queue_args) #define AMDKFD_IOC_CREATE_EVENT \ AMDKFD_IOWR(0x08, struct kfd_ioctl_create_event_args) #define AMDKFD_IOC_DESTROY_EVENT \ AMDKFD_IOW(0x09, struct kfd_ioctl_destroy_event_args) #define AMDKFD_IOC_SET_EVENT \ AMDKFD_IOW(0x0A, struct kfd_ioctl_set_event_args) #define AMDKFD_IOC_RESET_EVENT \ AMDKFD_IOW(0x0B, struct kfd_ioctl_reset_event_args) #define AMDKFD_IOC_WAIT_EVENTS \ AMDKFD_IOWR(0x0C, struct kfd_ioctl_wait_events_args) #define AMDKFD_IOC_DBG_REGISTER_DEPRECATED \ AMDKFD_IOW(0x0D, struct kfd_ioctl_dbg_register_args) #define AMDKFD_IOC_DBG_UNREGISTER_DEPRECATED \ AMDKFD_IOW(0x0E, struct kfd_ioctl_dbg_unregister_args) #define AMDKFD_IOC_DBG_ADDRESS_WATCH_DEPRECATED \ AMDKFD_IOW(0x0F, struct kfd_ioctl_dbg_address_watch_args) #define AMDKFD_IOC_DBG_WAVE_CONTROL_DEPRECATED \ AMDKFD_IOW(0x10, struct kfd_ioctl_dbg_wave_control_args) #define AMDKFD_IOC_SET_SCRATCH_BACKING_VA \ AMDKFD_IOWR(0x11, struct kfd_ioctl_set_scratch_backing_va_args) #define AMDKFD_IOC_GET_TILE_CONFIG \ AMDKFD_IOWR(0x12, struct kfd_ioctl_get_tile_config_args) #define AMDKFD_IOC_SET_TRAP_HANDLER \ AMDKFD_IOW(0x13, struct kfd_ioctl_set_trap_handler_args) #define AMDKFD_IOC_GET_PROCESS_APERTURES_NEW \ AMDKFD_IOWR(0x14, \ struct kfd_ioctl_get_process_apertures_new_args) #define AMDKFD_IOC_ACQUIRE_VM \ AMDKFD_IOW(0x15, struct kfd_ioctl_acquire_vm_args) #define AMDKFD_IOC_ALLOC_MEMORY_OF_GPU \ AMDKFD_IOWR(0x16, struct kfd_ioctl_alloc_memory_of_gpu_args) #define AMDKFD_IOC_FREE_MEMORY_OF_GPU \ AMDKFD_IOW(0x17, struct kfd_ioctl_free_memory_of_gpu_args) #define AMDKFD_IOC_MAP_MEMORY_TO_GPU \ AMDKFD_IOWR(0x18, struct kfd_ioctl_map_memory_to_gpu_args) #define AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU \ AMDKFD_IOWR(0x19, struct kfd_ioctl_unmap_memory_from_gpu_args) #define AMDKFD_IOC_SET_CU_MASK \ AMDKFD_IOW(0x1A, struct kfd_ioctl_set_cu_mask_args) #define AMDKFD_IOC_GET_QUEUE_WAVE_STATE \ AMDKFD_IOWR(0x1B, struct kfd_ioctl_get_queue_wave_state_args) #define AMDKFD_IOC_GET_DMABUF_INFO \ AMDKFD_IOWR(0x1C, struct kfd_ioctl_get_dmabuf_info_args) #define AMDKFD_IOC_IMPORT_DMABUF \ AMDKFD_IOWR(0x1D, struct kfd_ioctl_import_dmabuf_args) #define AMDKFD_IOC_ALLOC_QUEUE_GWS \ AMDKFD_IOWR(0x1E, struct kfd_ioctl_alloc_queue_gws_args) #define AMDKFD_IOC_SMI_EVENTS \ AMDKFD_IOWR(0x1F, struct kfd_ioctl_smi_events_args) #define AMDKFD_IOC_SVM AMDKFD_IOWR(0x20, struct kfd_ioctl_svm_args) #define AMDKFD_IOC_SET_XNACK_MODE \ AMDKFD_IOWR(0x21, struct kfd_ioctl_set_xnack_mode_args) #define AMDKFD_IOC_CRIU_OP \ AMDKFD_IOWR(0x22, struct kfd_ioctl_criu_args) #define AMDKFD_IOC_AVAILABLE_MEMORY \ AMDKFD_IOWR(0x23, struct kfd_ioctl_get_available_memory_args) #define AMDKFD_IOC_EXPORT_DMABUF \ AMDKFD_IOWR(0x24, struct kfd_ioctl_export_dmabuf_args) #define AMDKFD_IOC_RUNTIME_ENABLE \ AMDKFD_IOWR(0x25, struct kfd_ioctl_runtime_enable_args) #define AMDKFD_IOC_DBG_TRAP \ AMDKFD_IOWR(0x26, struct kfd_ioctl_dbg_trap_args) #define AMDKFD_COMMAND_START 0x01 #define AMDKFD_COMMAND_END 0x27 #endif
Save