Update to kernel headers v5.3.2.

Test: Builds and run unit tests on taimen/cuttlefish.
Change-Id: I6ebd8f179d159ac974555e8edca588083e8081b3
diff --git a/libc/arch-arm64/bionic/vfork.S b/libc/arch-arm64/bionic/vfork.S
index c307bc3..a76e9ca 100644
--- a/libc/arch-arm64/bionic/vfork.S
+++ b/libc/arch-arm64/bionic/vfork.S
@@ -29,7 +29,10 @@
 #include <platform/bionic/tls_defines.h>
 #include <private/bionic_asm.h>
 #include <asm/signal.h>
-#include <linux/sched.h>
+
+// Must match the defines in linux/sched.h
+#define CLONE_VM 0x00000100
+#define CLONE_VFORK 0x00004000
 
 ENTRY(vfork)
 __BIONIC_WEAK_ASM_FOR_NATIVE_BRIDGE(vfork)
diff --git a/libc/include/bits/glibc-syscalls.h b/libc/include/bits/glibc-syscalls.h
index 6b3e347..aabcaab 100644
--- a/libc/include/bits/glibc-syscalls.h
+++ b/libc/include/bits/glibc-syscalls.h
@@ -114,6 +114,9 @@
 #if defined(__NR_clone)
   #define SYS_clone __NR_clone
 #endif
+#if defined(__NR_clone3)
+  #define SYS_clone3 __NR_clone3
+#endif
 #if defined(__NR_close)
   #define SYS_close __NR_close
 #endif
@@ -717,6 +720,9 @@
 #if defined(__NR_personality)
   #define SYS_personality __NR_personality
 #endif
+#if defined(__NR_pidfd_open)
+  #define SYS_pidfd_open __NR_pidfd_open
+#endif
 #if defined(__NR_pidfd_send_signal)
   #define SYS_pidfd_send_signal __NR_pidfd_send_signal
 #endif
diff --git a/libc/kernel/uapi/asm-arm/asm/kvm.h b/libc/kernel/uapi/asm-arm/asm/kvm.h
index 95f0c4d..72bcb03 100644
--- a/libc/kernel/uapi/asm-arm/asm/kvm.h
+++ b/libc/kernel/uapi/asm-arm/asm/kvm.h
@@ -146,6 +146,16 @@
 #define KVM_REG_ARM_FW (0x0014 << KVM_REG_ARM_COPROC_SHIFT)
 #define KVM_REG_ARM_FW_REG(r) (KVM_REG_ARM | KVM_REG_SIZE_U64 | KVM_REG_ARM_FW | ((r) & 0xffff))
 #define KVM_REG_ARM_PSCI_VERSION KVM_REG_ARM_FW_REG(0)
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1 KVM_REG_ARM_FW_REG(1)
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_NOT_AVAIL 0
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_AVAIL 1
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_NOT_REQUIRED 2
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2 KVM_REG_ARM_FW_REG(2)
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_NOT_AVAIL 0
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_UNKNOWN 1
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_AVAIL 2
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_NOT_REQUIRED 3
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_ENABLED (1U << 4)
 #define KVM_DEV_ARM_VGIC_GRP_ADDR 0
 #define KVM_DEV_ARM_VGIC_GRP_DIST_REGS 1
 #define KVM_DEV_ARM_VGIC_GRP_CPU_REGS 2
diff --git a/libc/kernel/uapi/asm-arm/asm/unistd-common.h b/libc/kernel/uapi/asm-arm/asm/unistd-common.h
index d9e73dc..091bd74 100644
--- a/libc/kernel/uapi/asm-arm/asm/unistd-common.h
+++ b/libc/kernel/uapi/asm-arm/asm/unistd-common.h
@@ -405,4 +405,6 @@
 #define __NR_fsconfig (__NR_SYSCALL_BASE + 431)
 #define __NR_fsmount (__NR_SYSCALL_BASE + 432)
 #define __NR_fspick (__NR_SYSCALL_BASE + 433)
+#define __NR_pidfd_open (__NR_SYSCALL_BASE + 434)
+#define __NR_clone3 (__NR_SYSCALL_BASE + 435)
 #endif
diff --git a/libc/kernel/uapi/asm-arm64/asm/hwcap.h b/libc/kernel/uapi/asm-arm64/asm/hwcap.h
index 80935fc..8a38ab7 100644
--- a/libc/kernel/uapi/asm-arm64/asm/hwcap.h
+++ b/libc/kernel/uapi/asm-arm64/asm/hwcap.h
@@ -57,4 +57,6 @@
 #define HWCAP2_SVEBITPERM (1 << 4)
 #define HWCAP2_SVESHA3 (1 << 5)
 #define HWCAP2_SVESM4 (1 << 6)
+#define HWCAP2_FLAGM2 (1 << 7)
+#define HWCAP2_FRINT (1 << 8)
 #endif
diff --git a/libc/kernel/uapi/asm-arm64/asm/kvm.h b/libc/kernel/uapi/asm-arm64/asm/kvm.h
index b62d9ef..e345744 100644
--- a/libc/kernel/uapi/asm-arm64/asm/kvm.h
+++ b/libc/kernel/uapi/asm-arm64/asm/kvm.h
@@ -141,6 +141,16 @@
 #define KVM_REG_ARM_FW (0x0014 << KVM_REG_ARM_COPROC_SHIFT)
 #define KVM_REG_ARM_FW_REG(r) (KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_FW | ((r) & 0xffff))
 #define KVM_REG_ARM_PSCI_VERSION KVM_REG_ARM_FW_REG(0)
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1 KVM_REG_ARM_FW_REG(1)
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_NOT_AVAIL 0
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_AVAIL 1
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_NOT_REQUIRED 2
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2 KVM_REG_ARM_FW_REG(2)
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_NOT_AVAIL 0
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_UNKNOWN 1
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_AVAIL 2
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_NOT_REQUIRED 3
+#define KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_ENABLED (1U << 4)
 #define KVM_REG_ARM64_SVE (0x15 << KVM_REG_ARM_COPROC_SHIFT)
 #define KVM_REG_ARM64_SVE_ZREG_BASE 0
 #define KVM_REG_ARM64_SVE_PREG_BASE 0x400
diff --git a/libc/kernel/uapi/asm-arm64/asm/ptrace.h b/libc/kernel/uapi/asm-arm64/asm/ptrace.h
index c4c5748..b3e0aea 100644
--- a/libc/kernel/uapi/asm-arm64/asm/ptrace.h
+++ b/libc/kernel/uapi/asm-arm64/asm/ptrace.h
@@ -45,6 +45,8 @@
 #define PSR_s 0x00ff0000
 #define PSR_x 0x0000ff00
 #define PSR_c 0x000000ff
+#define PTRACE_SYSEMU 31
+#define PTRACE_SYSEMU_SINGLESTEP 32
 #ifndef __ASSEMBLY__
 struct user_pt_regs {
   __u64 regs[31];
diff --git a/libc/kernel/uapi/asm-generic/mman-common.h b/libc/kernel/uapi/asm-generic/mman-common.h
index b986825..21d0356 100644
--- a/libc/kernel/uapi/asm-generic/mman-common.h
+++ b/libc/kernel/uapi/asm-generic/mman-common.h
@@ -28,8 +28,13 @@
 #define MAP_TYPE 0x0f
 #define MAP_FIXED 0x10
 #define MAP_ANONYMOUS 0x20
-#define MAP_UNINITIALIZED 0x0
+#define MAP_POPULATE 0x008000
+#define MAP_NONBLOCK 0x010000
+#define MAP_STACK 0x020000
+#define MAP_HUGETLB 0x040000
+#define MAP_SYNC 0x080000
 #define MAP_FIXED_NOREPLACE 0x100000
+#define MAP_UNINITIALIZED 0x4000000
 #define MLOCK_ONFAULT 0x01
 #define MS_ASYNC 1
 #define MS_INVALIDATE 2
diff --git a/libc/kernel/uapi/asm-generic/mman.h b/libc/kernel/uapi/asm-generic/mman.h
index 84caab7..33d43f7 100644
--- a/libc/kernel/uapi/asm-generic/mman.h
+++ b/libc/kernel/uapi/asm-generic/mman.h
@@ -24,11 +24,6 @@
 #define MAP_EXECUTABLE 0x1000
 #define MAP_LOCKED 0x2000
 #define MAP_NORESERVE 0x4000
-#define MAP_POPULATE 0x8000
-#define MAP_NONBLOCK 0x10000
-#define MAP_STACK 0x20000
-#define MAP_HUGETLB 0x40000
-#define MAP_SYNC 0x80000
 #define MCL_CURRENT 1
 #define MCL_FUTURE 2
 #define MCL_ONFAULT 4
diff --git a/libc/kernel/uapi/asm-generic/socket.h b/libc/kernel/uapi/asm-generic/socket.h
index bfc9ce2..11557aa 100644
--- a/libc/kernel/uapi/asm-generic/socket.h
+++ b/libc/kernel/uapi/asm-generic/socket.h
@@ -94,6 +94,7 @@
 #define SO_TIMESTAMPING_NEW 65
 #define SO_RCVTIMEO_NEW 66
 #define SO_SNDTIMEO_NEW 67
+#define SO_DETACH_REUSEPORT_BPF 68
 #if __BITS_PER_LONG == 64 || defined(__x86_64__) && defined(__ILP32__)
 #define SO_TIMESTAMP SO_TIMESTAMP_OLD
 #define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD
diff --git a/libc/kernel/uapi/asm-generic/unistd.h b/libc/kernel/uapi/asm-generic/unistd.h
index 73520e1..2128ff5 100644
--- a/libc/kernel/uapi/asm-generic/unistd.h
+++ b/libc/kernel/uapi/asm-generic/unistd.h
@@ -392,8 +392,12 @@
 #define __NR_fsconfig 431
 #define __NR_fsmount 432
 #define __NR_fspick 433
+#define __NR_pidfd_open 434
+#ifdef __ARCH_WANT_SYS_CLONE3
+#define __NR_clone3 435
+#endif
 #undef __NR_syscalls
-#define __NR_syscalls 434
+#define __NR_syscalls 436
 #if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT)
 #define __NR_fcntl __NR3264_fcntl
 #define __NR_statfs __NR3264_statfs
diff --git a/libc/kernel/uapi/asm-mips/asm/socket.h b/libc/kernel/uapi/asm-mips/asm/socket.h
index fe15ad1..d24c09e 100644
--- a/libc/kernel/uapi/asm-mips/asm/socket.h
+++ b/libc/kernel/uapi/asm-mips/asm/socket.h
@@ -93,6 +93,7 @@
 #define SO_TIMESTAMPING_NEW 65
 #define SO_RCVTIMEO_NEW 66
 #define SO_SNDTIMEO_NEW 67
+#define SO_DETACH_REUSEPORT_BPF 68
 #if __BITS_PER_LONG == 64
 #define SO_TIMESTAMP SO_TIMESTAMP_OLD
 #define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD
diff --git a/libc/kernel/uapi/asm-mips/asm/unistd_n32.h b/libc/kernel/uapi/asm-mips/asm/unistd_n32.h
index ad928ac..285b1f0 100644
--- a/libc/kernel/uapi/asm-mips/asm/unistd_n32.h
+++ b/libc/kernel/uapi/asm-mips/asm/unistd_n32.h
@@ -380,4 +380,5 @@
 #define __NR_fsconfig (__NR_Linux + 431)
 #define __NR_fsmount (__NR_Linux + 432)
 #define __NR_fspick (__NR_Linux + 433)
+#define __NR_pidfd_open (__NR_Linux + 434)
 #endif
diff --git a/libc/kernel/uapi/asm-mips/asm/unistd_n64.h b/libc/kernel/uapi/asm-mips/asm/unistd_n64.h
index 0ffc069..9b2650f 100644
--- a/libc/kernel/uapi/asm-mips/asm/unistd_n64.h
+++ b/libc/kernel/uapi/asm-mips/asm/unistd_n64.h
@@ -356,4 +356,5 @@
 #define __NR_fsconfig (__NR_Linux + 431)
 #define __NR_fsmount (__NR_Linux + 432)
 #define __NR_fspick (__NR_Linux + 433)
+#define __NR_pidfd_open (__NR_Linux + 434)
 #endif
diff --git a/libc/kernel/uapi/asm-mips/asm/unistd_nr_n32.h b/libc/kernel/uapi/asm-mips/asm/unistd_nr_n32.h
index af3c850..a335768 100644
--- a/libc/kernel/uapi/asm-mips/asm/unistd_nr_n32.h
+++ b/libc/kernel/uapi/asm-mips/asm/unistd_nr_n32.h
@@ -19,5 +19,5 @@
 #ifndef _UAPI_ASM_MIPS_UNISTD_NR_N32_H
 #define _UAPI_ASM_MIPS_UNISTD_NR_N32_H
 #define __NR_N32_Linux 6000
-#define __NR_N32_Linux_syscalls 434
+#define __NR_N32_Linux_syscalls 435
 #endif
diff --git a/libc/kernel/uapi/asm-mips/asm/unistd_nr_n64.h b/libc/kernel/uapi/asm-mips/asm/unistd_nr_n64.h
index c78f3e6..c4812a5 100644
--- a/libc/kernel/uapi/asm-mips/asm/unistd_nr_n64.h
+++ b/libc/kernel/uapi/asm-mips/asm/unistd_nr_n64.h
@@ -19,5 +19,5 @@
 #ifndef _UAPI_ASM_MIPS_UNISTD_NR_N64_H
 #define _UAPI_ASM_MIPS_UNISTD_NR_N64_H
 #define __NR_64_Linux 5000
-#define __NR_64_Linux_syscalls 434
+#define __NR_64_Linux_syscalls 435
 #endif
diff --git a/libc/kernel/uapi/asm-mips/asm/unistd_nr_o32.h b/libc/kernel/uapi/asm-mips/asm/unistd_nr_o32.h
index 444710e..041051a 100644
--- a/libc/kernel/uapi/asm-mips/asm/unistd_nr_o32.h
+++ b/libc/kernel/uapi/asm-mips/asm/unistd_nr_o32.h
@@ -19,5 +19,5 @@
 #ifndef _UAPI_ASM_MIPS_UNISTD_NR_O32_H
 #define _UAPI_ASM_MIPS_UNISTD_NR_O32_H
 #define __NR_O32_Linux 4000
-#define __NR_O32_Linux_syscalls 434
+#define __NR_O32_Linux_syscalls 435
 #endif
diff --git a/libc/kernel/uapi/asm-mips/asm/unistd_o32.h b/libc/kernel/uapi/asm-mips/asm/unistd_o32.h
index 5bf392b..acbfa6b 100644
--- a/libc/kernel/uapi/asm-mips/asm/unistd_o32.h
+++ b/libc/kernel/uapi/asm-mips/asm/unistd_o32.h
@@ -426,4 +426,5 @@
 #define __NR_fsconfig (__NR_Linux + 431)
 #define __NR_fsmount (__NR_Linux + 432)
 #define __NR_fspick (__NR_Linux + 433)
+#define __NR_pidfd_open (__NR_Linux + 434)
 #endif
diff --git a/libc/kernel/uapi/asm-x86/asm/bootparam.h b/libc/kernel/uapi/asm-x86/asm/bootparam.h
index dc90f57..af66fdb 100644
--- a/libc/kernel/uapi/asm-x86/asm/bootparam.h
+++ b/libc/kernel/uapi/asm-x86/asm/bootparam.h
@@ -38,6 +38,8 @@
 #define XLF_EFI_HANDOVER_32 (1 << 2)
 #define XLF_EFI_HANDOVER_64 (1 << 3)
 #define XLF_EFI_KEXEC (1 << 4)
+#define XLF_5LEVEL (1 << 5)
+#define XLF_5LEVEL_ENABLED (1 << 6)
 #ifndef __ASSEMBLY__
 #include <linux/types.h>
 #include <linux/screen_info.h>
diff --git a/libc/kernel/uapi/asm-x86/asm/kvm.h b/libc/kernel/uapi/asm-x86/asm/kvm.h
index 4ec3c10..d4865fb 100644
--- a/libc/kernel/uapi/asm-x86/asm/kvm.h
+++ b/libc/kernel/uapi/asm-x86/asm/kvm.h
@@ -318,6 +318,7 @@
 #define KVM_X86_QUIRK_CD_NW_CLEARED (1 << 1)
 #define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2)
 #define KVM_X86_QUIRK_OUT_7E_INC_RIP (1 << 3)
+#define KVM_X86_QUIRK_MISC_ENABLE_NO_MWAIT (1 << 4)
 #define KVM_STATE_NESTED_FORMAT_VMX 0
 #define KVM_STATE_NESTED_FORMAT_SVM 1
 #define KVM_STATE_NESTED_GUEST_MODE 0x00000001
@@ -349,4 +350,14 @@
     struct kvm_vmx_nested_state_data vmx[0];
   } data;
 };
+struct kvm_pmu_event_filter {
+  __u32 action;
+  __u32 nevents;
+  __u32 fixed_counter_bitmap;
+  __u32 flags;
+  __u32 pad[4];
+  __u64 events[0];
+};
+#define KVM_PMU_EVENT_ALLOW 0
+#define KVM_PMU_EVENT_DENY 1
 #endif
diff --git a/libc/kernel/uapi/asm-x86/asm/kvm_para.h b/libc/kernel/uapi/asm-x86/asm/kvm_para.h
index 47ecca9..ad8fe0b 100644
--- a/libc/kernel/uapi/asm-x86/asm/kvm_para.h
+++ b/libc/kernel/uapi/asm-x86/asm/kvm_para.h
@@ -32,6 +32,8 @@
 #define KVM_FEATURE_PV_TLB_FLUSH 9
 #define KVM_FEATURE_ASYNC_PF_VMEXIT 10
 #define KVM_FEATURE_PV_SEND_IPI 11
+#define KVM_FEATURE_POLL_CONTROL 12
+#define KVM_FEATURE_PV_SCHED_YIELD 13
 #define KVM_HINTS_REALTIME 0
 #define KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 24
 #define MSR_KVM_WALL_CLOCK 0x11
@@ -42,6 +44,7 @@
 #define MSR_KVM_ASYNC_PF_EN 0x4b564d02
 #define MSR_KVM_STEAL_TIME 0x4b564d03
 #define MSR_KVM_PV_EOI_EN 0x4b564d04
+#define MSR_KVM_POLL_CONTROL 0x4b564d05
 struct kvm_steal_time {
   __u64 steal;
   __u32 version;
diff --git a/libc/kernel/uapi/asm-x86/asm/unistd_32.h b/libc/kernel/uapi/asm-x86/asm/unistd_32.h
index 09f2e7b..06e4a01 100644
--- a/libc/kernel/uapi/asm-x86/asm/unistd_32.h
+++ b/libc/kernel/uapi/asm-x86/asm/unistd_32.h
@@ -441,4 +441,6 @@
 #define __NR_fsconfig 431
 #define __NR_fsmount 432
 #define __NR_fspick 433
+#define __NR_pidfd_open 434
+#define __NR_clone3 435
 #endif
diff --git a/libc/kernel/uapi/asm-x86/asm/unistd_64.h b/libc/kernel/uapi/asm-x86/asm/unistd_64.h
index 36859b5..bcb6eae 100644
--- a/libc/kernel/uapi/asm-x86/asm/unistd_64.h
+++ b/libc/kernel/uapi/asm-x86/asm/unistd_64.h
@@ -363,4 +363,6 @@
 #define __NR_fsconfig 431
 #define __NR_fsmount 432
 #define __NR_fspick 433
+#define __NR_pidfd_open 434
+#define __NR_clone3 435
 #endif
diff --git a/libc/kernel/uapi/asm-x86/asm/unistd_x32.h b/libc/kernel/uapi/asm-x86/asm/unistd_x32.h
index d3e2d3f..3357bd1 100644
--- a/libc/kernel/uapi/asm-x86/asm/unistd_x32.h
+++ b/libc/kernel/uapi/asm-x86/asm/unistd_x32.h
@@ -316,6 +316,8 @@
 #define __NR_fsconfig (__X32_SYSCALL_BIT + 431)
 #define __NR_fsmount (__X32_SYSCALL_BIT + 432)
 #define __NR_fspick (__X32_SYSCALL_BIT + 433)
+#define __NR_pidfd_open (__X32_SYSCALL_BIT + 434)
+#define __NR_clone3 (__X32_SYSCALL_BIT + 435)
 #define __NR_rt_sigaction (__X32_SYSCALL_BIT + 512)
 #define __NR_rt_sigreturn (__X32_SYSCALL_BIT + 513)
 #define __NR_ioctl (__X32_SYSCALL_BIT + 514)
diff --git a/libc/kernel/uapi/drm/amdgpu_drm.h b/libc/kernel/uapi/drm/amdgpu_drm.h
index 193881d..dda9ced 100644
--- a/libc/kernel/uapi/drm/amdgpu_drm.h
+++ b/libc/kernel/uapi/drm/amdgpu_drm.h
@@ -546,6 +546,7 @@
 #define AMDGPU_VRAM_TYPE_HBM 6
 #define AMDGPU_VRAM_TYPE_DDR3 7
 #define AMDGPU_VRAM_TYPE_DDR4 8
+#define AMDGPU_VRAM_TYPE_GDDR6 9
 struct drm_amdgpu_info_device {
   __u32 device_id;
   __u32 chip_rev;
@@ -594,6 +595,7 @@
   __u32 cu_ao_bitmap[4][4];
   __u64 high_va_offset;
   __u64 high_va_max;
+  __u32 pa_sc_tile_steering_override;
 };
 struct drm_amdgpu_info_hw_ip {
   __u32 hw_ip_version_major;
@@ -628,6 +630,7 @@
 #define AMDGPU_FAMILY_CZ 135
 #define AMDGPU_FAMILY_AI 141
 #define AMDGPU_FAMILY_RV 142
+#define AMDGPU_FAMILY_NV 143
 #ifdef __cplusplus
 }
 #endif
diff --git a/libc/kernel/uapi/drm/drm.h b/libc/kernel/uapi/drm/drm.h
index 66adf99..7c5ffbb 100644
--- a/libc/kernel/uapi/drm/drm.h
+++ b/libc/kernel/uapi/drm/drm.h
@@ -23,6 +23,7 @@
 #include <asm/ioctl.h>
 typedef unsigned int drm_handle_t;
 #else
+#include <stdint.h>
 #include <sys/ioccom.h>
 #include <sys/types.h>
 typedef int8_t __s8;
diff --git a/libc/kernel/uapi/drm/drm_mode.h b/libc/kernel/uapi/drm/drm_mode.h
index 3f321d0..403c787 100644
--- a/libc/kernel/uapi/drm/drm_mode.h
+++ b/libc/kernel/uapi/drm/drm_mode.h
@@ -368,6 +368,26 @@
   __u16 blue;
   __u16 reserved;
 };
+struct hdr_metadata_infoframe {
+  __u8 eotf;
+  __u8 metadata_type;
+  struct {
+    __u16 x, y;
+  } display_primaries[3];
+  struct {
+    __u16 x, y;
+  } white_point;
+  __u16 max_display_mastering_luminance;
+  __u16 min_display_mastering_luminance;
+  __u16 max_cll;
+  __u16 max_fall;
+};
+struct hdr_output_metadata {
+  __u32 metadata_type;
+  union {
+    struct hdr_metadata_infoframe hdmi_metadata_type1;
+  };
+};
 #define DRM_MODE_PAGE_FLIP_EVENT 0x01
 #define DRM_MODE_PAGE_FLIP_ASYNC 0x02
 #define DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 0x4
diff --git a/libc/kernel/uapi/drm/i915_drm.h b/libc/kernel/uapi/drm/i915_drm.h
index d83a4c0..8965f01 100644
--- a/libc/kernel/uapi/drm/i915_drm.h
+++ b/libc/kernel/uapi/drm/i915_drm.h
@@ -46,6 +46,8 @@
 struct i915_engine_class_instance {
   __u16 engine_class;
   __u16 engine_instance;
+#define I915_ENGINE_CLASS_INVALID_NONE - 1
+#define I915_ENGINE_CLASS_INVALID_VIRTUAL - 2
 };
 enum drm_i915_pmu_engine_sample {
   I915_SAMPLE_BUSY = 0,
@@ -212,6 +214,8 @@
 #define DRM_I915_PERF_ADD_CONFIG 0x37
 #define DRM_I915_PERF_REMOVE_CONFIG 0x38
 #define DRM_I915_QUERY 0x39
+#define DRM_I915_GEM_VM_CREATE 0x3a
+#define DRM_I915_GEM_VM_DESTROY 0x3b
 #define DRM_IOCTL_I915_INIT DRM_IOW(DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
 #define DRM_IOCTL_I915_FLUSH DRM_IO(DRM_COMMAND_BASE + DRM_I915_FLUSH)
 #define DRM_IOCTL_I915_FLIP DRM_IO(DRM_COMMAND_BASE + DRM_I915_FLIP)
@@ -270,6 +274,8 @@
 #define DRM_IOCTL_I915_PERF_ADD_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config)
 #define DRM_IOCTL_I915_PERF_REMOVE_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64)
 #define DRM_IOCTL_I915_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query)
+#define DRM_IOCTL_I915_GEM_VM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_VM_CREATE, struct drm_i915_gem_vm_control)
+#define DRM_IOCTL_I915_GEM_VM_DESTROY DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_VM_DESTROY, struct drm_i915_gem_vm_control)
 typedef struct drm_i915_batchbuffer {
   int start;
   int used;
@@ -351,6 +357,7 @@
 #define I915_PARAM_HAS_CONTEXT_ISOLATION 50
 #define I915_PARAM_CS_TIMESTAMP_FREQUENCY 51
 #define I915_PARAM_MMAP_GTT_COHERENT 52
+#define I915_PARAM_HAS_EXEC_SUBMIT_FENCE 53
 typedef struct drm_i915_getparam {
   __s32 param;
   int __user * value;
@@ -540,7 +547,8 @@
 #define I915_EXEC_FENCE_OUT (1 << 17)
 #define I915_EXEC_BATCH_FIRST (1 << 18)
 #define I915_EXEC_FENCE_ARRAY (1 << 19)
-#define __I915_EXEC_UNKNOWN_FLAGS (- (I915_EXEC_FENCE_ARRAY << 1))
+#define I915_EXEC_FENCE_SUBMIT (1 << 20)
+#define __I915_EXEC_UNKNOWN_FLAGS (- (I915_EXEC_FENCE_SUBMIT << 1))
 #define I915_EXEC_CONTEXT_ID_MASK (0xffffffff)
 #define i915_execbuffer2_set_context_id(eb2,context) (eb2).rsvd1 = context & I915_EXEC_CONTEXT_ID_MASK
 #define i915_execbuffer2_get_context_id(eb2) ((eb2).rsvd1 & I915_EXEC_CONTEXT_ID_MASK)
@@ -681,7 +689,8 @@
   __u32 ctx_id;
   __u32 flags;
 #define I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS (1u << 0)
-#define I915_CONTEXT_CREATE_FLAGS_UNKNOWN (- (I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS << 1))
+#define I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE (1u << 1)
+#define I915_CONTEXT_CREATE_FLAGS_UNKNOWN (- (I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE << 1))
   __u64 extensions;
 };
 struct drm_i915_gem_context_param {
@@ -699,22 +708,68 @@
 #define I915_CONTEXT_MIN_USER_PRIORITY - 1023
 #define I915_CONTEXT_PARAM_SSEU 0x7
 #define I915_CONTEXT_PARAM_RECOVERABLE 0x8
+#define I915_CONTEXT_PARAM_VM 0x9
+#define I915_CONTEXT_PARAM_ENGINES 0xa
   __u64 value;
 };
 struct drm_i915_gem_context_param_sseu {
   struct i915_engine_class_instance engine;
   __u32 flags;
+#define I915_CONTEXT_SSEU_FLAG_ENGINE_INDEX (1u << 0)
   __u64 slice_mask;
   __u64 subslice_mask;
   __u16 min_eus_per_subslice;
   __u16 max_eus_per_subslice;
   __u32 rsvd;
 };
+struct i915_context_engines_load_balance {
+  struct i915_user_extension base;
+  __u16 engine_index;
+  __u16 num_siblings;
+  __u32 flags;
+  __u64 mbz64;
+  struct i915_engine_class_instance engines[0];
+} __attribute__((packed));
+#define I915_DEFINE_CONTEXT_ENGINES_LOAD_BALANCE(name__,N__) struct { struct i915_user_extension base; __u16 engine_index; __u16 num_siblings; __u32 flags; __u64 mbz64; struct i915_engine_class_instance engines[N__]; \
+} __attribute__((packed)) name__
+struct i915_context_engines_bond {
+  struct i915_user_extension base;
+  struct i915_engine_class_instance master;
+  __u16 virtual_index;
+  __u16 num_bonds;
+  __u64 flags;
+  __u64 mbz64[4];
+  struct i915_engine_class_instance engines[0];
+} __attribute__((packed));
+#define I915_DEFINE_CONTEXT_ENGINES_BOND(name__,N__) struct { struct i915_user_extension base; struct i915_engine_class_instance master; __u16 virtual_index; __u16 num_bonds; __u64 flags; __u64 mbz64[4]; struct i915_engine_class_instance engines[N__]; \
+} __attribute__((packed)) name__
+struct i915_context_param_engines {
+  __u64 extensions;
+#define I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE 0
+#define I915_CONTEXT_ENGINES_EXT_BOND 1
+  struct i915_engine_class_instance engines[0];
+} __attribute__((packed));
+#define I915_DEFINE_CONTEXT_PARAM_ENGINES(name__,N__) struct { __u64 extensions; struct i915_engine_class_instance engines[N__]; \
+} __attribute__((packed)) name__
 struct drm_i915_gem_context_create_ext_setparam {
 #define I915_CONTEXT_CREATE_EXT_SETPARAM 0
   struct i915_user_extension base;
   struct drm_i915_gem_context_param param;
 };
+struct drm_i915_gem_context_create_ext_clone {
+#define I915_CONTEXT_CREATE_EXT_CLONE 1
+  struct i915_user_extension base;
+  __u32 clone_id;
+  __u32 flags;
+#define I915_CONTEXT_CLONE_ENGINES (1u << 0)
+#define I915_CONTEXT_CLONE_FLAGS (1u << 1)
+#define I915_CONTEXT_CLONE_SCHEDATTR (1u << 2)
+#define I915_CONTEXT_CLONE_SSEU (1u << 3)
+#define I915_CONTEXT_CLONE_TIMELINE (1u << 4)
+#define I915_CONTEXT_CLONE_VM (1u << 5)
+#define I915_CONTEXT_CLONE_UNKNOWN - (I915_CONTEXT_CLONE_VM << 1)
+  __u64 rsvd;
+};
 struct drm_i915_gem_context_destroy {
   __u32 ctx_id;
   __u32 pad;
@@ -799,6 +854,7 @@
 struct drm_i915_query_item {
   __u64 query_id;
 #define DRM_I915_QUERY_TOPOLOGY_INFO 1
+#define DRM_I915_QUERY_ENGINE_INFO 2
   __s32 length;
   __u32 flags;
   __u64 data_ptr;
@@ -819,6 +875,20 @@
   __u16 eu_stride;
   __u8 data[];
 };
+struct drm_i915_engine_info {
+  struct i915_engine_class_instance engine;
+  __u32 rsvd0;
+  __u64 flags;
+  __u64 capabilities;
+#define I915_VIDEO_CLASS_CAPABILITY_HEVC (1 << 0)
+#define I915_VIDEO_AND_ENHANCE_CLASS_CAPABILITY_SFC (1 << 1)
+  __u64 rsvd1[4];
+};
+struct drm_i915_query_engine_info {
+  __u32 num_engines;
+  __u32 rsvd[3];
+  struct drm_i915_engine_info engines[];
+};
 #ifdef __cplusplus
 }
 #endif
diff --git a/libc/kernel/uapi/drm/panfrost_drm.h b/libc/kernel/uapi/drm/panfrost_drm.h
index 17f093b..4da1447 100644
--- a/libc/kernel/uapi/drm/panfrost_drm.h
+++ b/libc/kernel/uapi/drm/panfrost_drm.h
@@ -28,12 +28,16 @@
 #define DRM_PANFROST_MMAP_BO 0x03
 #define DRM_PANFROST_GET_PARAM 0x04
 #define DRM_PANFROST_GET_BO_OFFSET 0x05
+#define DRM_PANFROST_PERFCNT_ENABLE 0x06
+#define DRM_PANFROST_PERFCNT_DUMP 0x07
 #define DRM_IOCTL_PANFROST_SUBMIT DRM_IOW(DRM_COMMAND_BASE + DRM_PANFROST_SUBMIT, struct drm_panfrost_submit)
 #define DRM_IOCTL_PANFROST_WAIT_BO DRM_IOW(DRM_COMMAND_BASE + DRM_PANFROST_WAIT_BO, struct drm_panfrost_wait_bo)
 #define DRM_IOCTL_PANFROST_CREATE_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_CREATE_BO, struct drm_panfrost_create_bo)
 #define DRM_IOCTL_PANFROST_MMAP_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_MMAP_BO, struct drm_panfrost_mmap_bo)
 #define DRM_IOCTL_PANFROST_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_GET_PARAM, struct drm_panfrost_get_param)
 #define DRM_IOCTL_PANFROST_GET_BO_OFFSET DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_GET_BO_OFFSET, struct drm_panfrost_get_bo_offset)
+#define DRM_IOCTL_PANFROST_PERFCNT_ENABLE DRM_IOW(DRM_COMMAND_BASE + DRM_PANFROST_PERFCNT_ENABLE, struct drm_panfrost_perfcnt_enable)
+#define DRM_IOCTL_PANFROST_PERFCNT_DUMP DRM_IOW(DRM_COMMAND_BASE + DRM_PANFROST_PERFCNT_DUMP, struct drm_panfrost_perfcnt_dump)
 #define PANFROST_JD_REQ_FS (1 << 0)
 struct drm_panfrost_submit {
   __u64 jc;
@@ -74,6 +78,13 @@
   __u32 pad;
   __u64 offset;
 };
+struct drm_panfrost_perfcnt_enable {
+  __u32 enable;
+  __u32 counterset;
+};
+struct drm_panfrost_perfcnt_dump {
+  __u64 buf_ptr;
+};
 #ifdef __cplusplus
 }
 #endif
diff --git a/libc/kernel/uapi/drm/v3d_drm.h b/libc/kernel/uapi/drm/v3d_drm.h
index 985f327..0b6b94f 100644
--- a/libc/kernel/uapi/drm/v3d_drm.h
+++ b/libc/kernel/uapi/drm/v3d_drm.h
@@ -29,6 +29,7 @@
 #define DRM_V3D_GET_PARAM 0x04
 #define DRM_V3D_GET_BO_OFFSET 0x05
 #define DRM_V3D_SUBMIT_TFU 0x06
+#define DRM_V3D_SUBMIT_CSD 0x07
 #define DRM_IOCTL_V3D_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_CL, struct drm_v3d_submit_cl)
 #define DRM_IOCTL_V3D_WAIT_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_WAIT_BO, struct drm_v3d_wait_bo)
 #define DRM_IOCTL_V3D_CREATE_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_CREATE_BO, struct drm_v3d_create_bo)
@@ -36,6 +37,7 @@
 #define DRM_IOCTL_V3D_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_GET_PARAM, struct drm_v3d_get_param)
 #define DRM_IOCTL_V3D_GET_BO_OFFSET DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_GET_BO_OFFSET, struct drm_v3d_get_bo_offset)
 #define DRM_IOCTL_V3D_SUBMIT_TFU DRM_IOW(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_TFU, struct drm_v3d_submit_tfu)
+#define DRM_IOCTL_V3D_SUBMIT_CSD DRM_IOW(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_CSD, struct drm_v3d_submit_csd)
 struct drm_v3d_submit_cl {
   __u32 bcl_start;
   __u32 bcl_end;
@@ -76,6 +78,7 @@
   DRM_V3D_PARAM_V3D_CORE0_IDENT1,
   DRM_V3D_PARAM_V3D_CORE0_IDENT2,
   DRM_V3D_PARAM_SUPPORTS_TFU,
+  DRM_V3D_PARAM_SUPPORTS_CSD,
 };
 struct drm_v3d_get_param {
   __u32 param;
@@ -99,6 +102,14 @@
   __u32 in_sync;
   __u32 out_sync;
 };
+struct drm_v3d_submit_csd {
+  __u32 cfg[7];
+  __u32 coef[4];
+  __u64 bo_handles;
+  __u32 bo_handle_count;
+  __u32 in_sync;
+  __u32 out_sync;
+};
 #ifdef __cplusplus
 }
 #endif
diff --git a/libc/kernel/uapi/linux/adfs_fs.h b/libc/kernel/uapi/linux/adfs_fs.h
index 6fb9347..aa1d732 100644
--- a/libc/kernel/uapi/linux/adfs_fs.h
+++ b/libc/kernel/uapi/linux/adfs_fs.h
@@ -41,12 +41,13 @@
   __u8 log2sharesize : 4;
   __u8 unused40 : 4;
   __u8 big_flag : 1;
-  __u8 unused41 : 1;
+  __u8 unused41 : 7;
   __u8 nzones_high;
+  __u8 reserved43;
   __le32 format_version;
   __le32 root_size;
   __u8 unused52[60 - 52];
-};
+} __attribute__((packed, aligned(4)));
 #define ADFS_DISCRECORD (0xc00)
 #define ADFS_DR_OFFSET (0x1c0)
 #define ADFS_DR_SIZE 60
diff --git a/libc/kernel/uapi/linux/audit.h b/libc/kernel/uapi/linux/audit.h
index 509d734..3f1d8f0 100644
--- a/libc/kernel/uapi/linux/audit.h
+++ b/libc/kernel/uapi/linux/audit.h
@@ -211,6 +211,7 @@
 #define AUDIT_OBJ_GID 110
 #define AUDIT_FIELD_COMPARE 111
 #define AUDIT_EXE 112
+#define AUDIT_SADDR_FAM 113
 #define AUDIT_ARG0 200
 #define AUDIT_ARG1 (AUDIT_ARG0 + 1)
 #define AUDIT_ARG2 (AUDIT_ARG0 + 2)
diff --git a/libc/kernel/uapi/linux/batadv_packet.h b/libc/kernel/uapi/linux/batadv_packet.h
index 6d5226c..ede53cf 100644
--- a/libc/kernel/uapi/linux/batadv_packet.h
+++ b/libc/kernel/uapi/linux/batadv_packet.h
@@ -60,6 +60,8 @@
   BATADV_MCAST_WANT_ALL_UNSNOOPABLES = 1UL << 0,
   BATADV_MCAST_WANT_ALL_IPV4 = 1UL << 1,
   BATADV_MCAST_WANT_ALL_IPV6 = 1UL << 2,
+  BATADV_MCAST_WANT_NO_RTR4 = 1UL << 3,
+  BATADV_MCAST_WANT_NO_RTR6 = 1UL << 4,
 };
 #define BATADV_TT_DATA_TYPE_MASK 0x0F
 enum batadv_tt_data_flags {
diff --git a/libc/kernel/uapi/linux/bpf.h b/libc/kernel/uapi/linux/bpf.h
index 3f09421..7e78758 100644
--- a/libc/kernel/uapi/linux/bpf.h
+++ b/libc/kernel/uapi/linux/bpf.h
@@ -148,6 +148,7 @@
   BPF_PROG_TYPE_FLOW_DISSECTOR,
   BPF_PROG_TYPE_CGROUP_SYSCTL,
   BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE,
+  BPF_PROG_TYPE_CGROUP_SOCKOPT,
 };
 enum bpf_attach_type {
   BPF_CGROUP_INET_INGRESS,
@@ -171,6 +172,8 @@
   BPF_CGROUP_SYSCTL,
   BPF_CGROUP_UDP4_RECVMSG,
   BPF_CGROUP_UDP6_RECVMSG,
+  BPF_CGROUP_GETSOCKOPT,
+  BPF_CGROUP_SETSOCKOPT,
   __MAX_BPF_ATTACH_TYPE
 };
 #define MAX_BPF_ATTACH_TYPE __MAX_BPF_ATTACH_TYPE
@@ -178,6 +181,7 @@
 #define BPF_F_ALLOW_MULTI (1U << 1)
 #define BPF_F_STRICT_ALIGNMENT (1U << 0)
 #define BPF_F_ANY_ALIGNMENT (1U << 1)
+#define BPF_F_TEST_RND_HI32 (1U << 2)
 #define BPF_PSEUDO_MAP_FD 1
 #define BPF_PSEUDO_MAP_VALUE 2
 #define BPF_PSEUDO_CALL 1
@@ -326,7 +330,7 @@
     __u64 probe_addr;
   } task_fd_query;
 } __attribute__((aligned(8)));
-#define __BPF_FUNC_MAPPER(FN) FN(unspec), FN(map_lookup_elem), FN(map_update_elem), FN(map_delete_elem), FN(probe_read), FN(ktime_get_ns), FN(trace_printk), FN(get_prandom_u32), FN(get_smp_processor_id), FN(skb_store_bytes), FN(l3_csum_replace), FN(l4_csum_replace), FN(tail_call), FN(clone_redirect), FN(get_current_pid_tgid), FN(get_current_uid_gid), FN(get_current_comm), FN(get_cgroup_classid), FN(skb_vlan_push), FN(skb_vlan_pop), FN(skb_get_tunnel_key), FN(skb_set_tunnel_key), FN(perf_event_read), FN(redirect), FN(get_route_realm), FN(perf_event_output), FN(skb_load_bytes), FN(get_stackid), FN(csum_diff), FN(skb_get_tunnel_opt), FN(skb_set_tunnel_opt), FN(skb_change_proto), FN(skb_change_type), FN(skb_under_cgroup), FN(get_hash_recalc), FN(get_current_task), FN(probe_write_user), FN(current_task_under_cgroup), FN(skb_change_tail), FN(skb_pull_data), FN(csum_update), FN(set_hash_invalid), FN(get_numa_node_id), FN(skb_change_head), FN(xdp_adjust_head), FN(probe_read_str), FN(get_socket_cookie), FN(get_socket_uid), FN(set_hash), FN(setsockopt), FN(skb_adjust_room), FN(redirect_map), FN(sk_redirect_map), FN(sock_map_update), FN(xdp_adjust_meta), FN(perf_event_read_value), FN(perf_prog_read_value), FN(getsockopt), FN(override_return), FN(sock_ops_cb_flags_set), FN(msg_redirect_map), FN(msg_apply_bytes), FN(msg_cork_bytes), FN(msg_pull_data), FN(bind), FN(xdp_adjust_tail), FN(skb_get_xfrm_state), FN(get_stack), FN(skb_load_bytes_relative), FN(fib_lookup), FN(sock_hash_update), FN(msg_redirect_hash), FN(sk_redirect_hash), FN(lwt_push_encap), FN(lwt_seg6_store_bytes), FN(lwt_seg6_adjust_srh), FN(lwt_seg6_action), FN(rc_repeat), FN(rc_keydown), FN(skb_cgroup_id), FN(get_current_cgroup_id), FN(get_local_storage), FN(sk_select_reuseport), FN(skb_ancestor_cgroup_id), FN(sk_lookup_tcp), FN(sk_lookup_udp), FN(sk_release), FN(map_push_elem), FN(map_pop_elem), FN(map_peek_elem), FN(msg_push_data), FN(msg_pop_data), FN(rc_pointer_rel), FN(spin_lock), FN(spin_unlock), FN(sk_fullsock), FN(tcp_sock), FN(skb_ecn_set_ce), FN(get_listener_sock), FN(skc_lookup_tcp), FN(tcp_check_syncookie), FN(sysctl_get_name), FN(sysctl_get_current_value), FN(sysctl_get_new_value), FN(sysctl_set_new_value), FN(strtol), FN(strtoul), FN(sk_storage_get), FN(sk_storage_delete),
+#define __BPF_FUNC_MAPPER(FN) FN(unspec), FN(map_lookup_elem), FN(map_update_elem), FN(map_delete_elem), FN(probe_read), FN(ktime_get_ns), FN(trace_printk), FN(get_prandom_u32), FN(get_smp_processor_id), FN(skb_store_bytes), FN(l3_csum_replace), FN(l4_csum_replace), FN(tail_call), FN(clone_redirect), FN(get_current_pid_tgid), FN(get_current_uid_gid), FN(get_current_comm), FN(get_cgroup_classid), FN(skb_vlan_push), FN(skb_vlan_pop), FN(skb_get_tunnel_key), FN(skb_set_tunnel_key), FN(perf_event_read), FN(redirect), FN(get_route_realm), FN(perf_event_output), FN(skb_load_bytes), FN(get_stackid), FN(csum_diff), FN(skb_get_tunnel_opt), FN(skb_set_tunnel_opt), FN(skb_change_proto), FN(skb_change_type), FN(skb_under_cgroup), FN(get_hash_recalc), FN(get_current_task), FN(probe_write_user), FN(current_task_under_cgroup), FN(skb_change_tail), FN(skb_pull_data), FN(csum_update), FN(set_hash_invalid), FN(get_numa_node_id), FN(skb_change_head), FN(xdp_adjust_head), FN(probe_read_str), FN(get_socket_cookie), FN(get_socket_uid), FN(set_hash), FN(setsockopt), FN(skb_adjust_room), FN(redirect_map), FN(sk_redirect_map), FN(sock_map_update), FN(xdp_adjust_meta), FN(perf_event_read_value), FN(perf_prog_read_value), FN(getsockopt), FN(override_return), FN(sock_ops_cb_flags_set), FN(msg_redirect_map), FN(msg_apply_bytes), FN(msg_cork_bytes), FN(msg_pull_data), FN(bind), FN(xdp_adjust_tail), FN(skb_get_xfrm_state), FN(get_stack), FN(skb_load_bytes_relative), FN(fib_lookup), FN(sock_hash_update), FN(msg_redirect_hash), FN(sk_redirect_hash), FN(lwt_push_encap), FN(lwt_seg6_store_bytes), FN(lwt_seg6_adjust_srh), FN(lwt_seg6_action), FN(rc_repeat), FN(rc_keydown), FN(skb_cgroup_id), FN(get_current_cgroup_id), FN(get_local_storage), FN(sk_select_reuseport), FN(skb_ancestor_cgroup_id), FN(sk_lookup_tcp), FN(sk_lookup_udp), FN(sk_release), FN(map_push_elem), FN(map_pop_elem), FN(map_peek_elem), FN(msg_push_data), FN(msg_pop_data), FN(rc_pointer_rel), FN(spin_lock), FN(spin_unlock), FN(sk_fullsock), FN(tcp_sock), FN(skb_ecn_set_ce), FN(get_listener_sock), FN(skc_lookup_tcp), FN(tcp_check_syncookie), FN(sysctl_get_name), FN(sysctl_get_current_value), FN(sysctl_get_new_value), FN(sysctl_set_new_value), FN(strtol), FN(strtoul), FN(sk_storage_get), FN(sk_storage_delete), FN(send_signal),
 #define __BPF_ENUM_FN(x) BPF_FUNC_ ##x
 enum bpf_func_id {
   __BPF_FUNC_MAPPER(__BPF_ENUM_FN) __BPF_FUNC_MAX_ID,
@@ -475,6 +479,10 @@
   __u32 sacked_out;
   __u64 bytes_received;
   __u64 bytes_acked;
+  __u32 dsack_dups;
+  __u32 delivered;
+  __u32 delivered_ce;
+  __u32 icsk_retransmits;
 };
 struct bpf_sock_tuple {
   union {
@@ -492,6 +500,9 @@
     } ipv6;
   };
 };
+struct bpf_xdp_sock {
+  __u32 queue_id;
+};
 #define XDP_PACKET_HEADROOM 256
 enum xdp_action {
   XDP_ABORTED = 0,
@@ -601,6 +612,7 @@
   __u32 protocol;
   __u32 msg_src_ip4;
   __u32 msg_src_ip6[4];
+  __bpf_md_ptr(struct bpf_sock *, sk);
 };
 struct bpf_sock_ops {
   __u32 op;
@@ -642,11 +654,13 @@
   __u32 sk_txhash;
   __u64 bytes_received;
   __u64 bytes_acked;
+  __bpf_md_ptr(struct bpf_sock *, sk);
 };
 #define BPF_SOCK_OPS_RTO_CB_FLAG (1 << 0)
 #define BPF_SOCK_OPS_RETRANS_CB_FLAG (1 << 1)
 #define BPF_SOCK_OPS_STATE_CB_FLAG (1 << 2)
-#define BPF_SOCK_OPS_ALL_CB_FLAGS 0x7
+#define BPF_SOCK_OPS_RTT_CB_FLAG (1 << 3)
+#define BPF_SOCK_OPS_ALL_CB_FLAGS 0xF
 enum {
   BPF_SOCK_OPS_VOID,
   BPF_SOCK_OPS_TIMEOUT_INIT,
@@ -660,6 +674,7 @@
   BPF_SOCK_OPS_RETRANS_CB,
   BPF_SOCK_OPS_STATE_CB,
   BPF_SOCK_OPS_TCP_LISTEN_CB,
+  BPF_SOCK_OPS_RTT_CB,
 };
 enum {
   BPF_TCP_ESTABLISHED = 1,
@@ -783,4 +798,13 @@
   __u32 write;
   __u32 file_pos;
 };
+struct bpf_sockopt {
+  __bpf_md_ptr(struct bpf_sock *, sk);
+  __bpf_md_ptr(void *, optval);
+  __bpf_md_ptr(void *, optval_end);
+  __s32 level;
+  __s32 optname;
+  __s32 optlen;
+  __s32 retval;
+};
 #endif
diff --git a/libc/kernel/uapi/linux/btrfs_tree.h b/libc/kernel/uapi/linux/btrfs_tree.h
index 0618f66..be0c8b0 100644
--- a/libc/kernel/uapi/linux/btrfs_tree.h
+++ b/libc/kernel/uapi/linux/btrfs_tree.h
@@ -383,6 +383,7 @@
 #define BTRFS_BLOCK_GROUP_TYPE_MASK (BTRFS_BLOCK_GROUP_DATA | BTRFS_BLOCK_GROUP_SYSTEM | BTRFS_BLOCK_GROUP_METADATA)
 #define BTRFS_BLOCK_GROUP_PROFILE_MASK (BTRFS_BLOCK_GROUP_RAID0 | BTRFS_BLOCK_GROUP_RAID1 | BTRFS_BLOCK_GROUP_RAID5 | BTRFS_BLOCK_GROUP_RAID6 | BTRFS_BLOCK_GROUP_DUP | BTRFS_BLOCK_GROUP_RAID10)
 #define BTRFS_BLOCK_GROUP_RAID56_MASK (BTRFS_BLOCK_GROUP_RAID5 | BTRFS_BLOCK_GROUP_RAID6)
+#define BTRFS_BLOCK_GROUP_RAID1_MASK (BTRFS_BLOCK_GROUP_RAID1)
 #define BTRFS_AVAIL_ALLOC_BIT_SINGLE (1ULL << 48)
 #define BTRFS_SPACE_INFO_GLOBAL_RSV (1ULL << 49)
 #define BTRFS_EXTENDED_PROFILE_MASK (BTRFS_BLOCK_GROUP_PROFILE_MASK | BTRFS_AVAIL_ALLOC_BIT_SINGLE)
diff --git a/libc/kernel/uapi/linux/cec.h b/libc/kernel/uapi/linux/cec.h
index 05af529..a3aa2d6 100644
--- a/libc/kernel/uapi/linux/cec.h
+++ b/libc/kernel/uapi/linux/cec.h
@@ -38,6 +38,7 @@
   __u8 tx_error_cnt;
 };
 #define CEC_MSG_FL_REPLY_TO_FOLLOWERS (1 << 0)
+#define CEC_MSG_FL_RAW (1 << 1)
 #define CEC_TX_STATUS_OK (1 << 0)
 #define CEC_TX_STATUS_ARB_LOST (1 << 1)
 #define CEC_TX_STATUS_NACK (1 << 2)
diff --git a/libc/kernel/uapi/linux/coda.h b/libc/kernel/uapi/linux/coda.h
index 93d6f7c..aad1b97 100644
--- a/libc/kernel/uapi/linux/coda.h
+++ b/libc/kernel/uapi/linux/coda.h
@@ -38,10 +38,6 @@
 typedef unsigned long long u_quad_t;
 #endif
 #define inline
-struct timespec {
-  long ts_sec;
-  long ts_nsec;
-};
 #else
 #include <sys/time.h>
 typedef unsigned long long u_quad_t;
@@ -57,12 +53,6 @@
 #else
 #define cdev_t dev_t
 #endif
-#ifdef __CYGWIN32__
-struct timespec {
-  time_t tv_sec;
-  long tv_nsec;
-};
-#endif
 #ifndef __BIT_TYPES_DEFINED__
 #define __BIT_TYPES_DEFINED__
 typedef signed char int8_t;
@@ -132,6 +122,10 @@
   C_VFIFO,
   C_VBAD
 };
+struct coda_timespec {
+  int64_t tv_sec;
+  long tv_nsec;
+};
 struct coda_vattr {
   long va_type;
   u_short va_mode;
@@ -141,9 +135,9 @@
   long va_fileid;
   u_quad_t va_size;
   long va_blocksize;
-  struct timespec va_atime;
-  struct timespec va_mtime;
-  struct timespec va_ctime;
+  struct coda_timespec va_atime;
+  struct coda_timespec va_mtime;
+  struct coda_timespec va_ctime;
   u_long va_gen;
   u_long va_flags;
   cdev_t va_rdev;
@@ -190,17 +184,18 @@
 #define CODA_STATFS 34
 #define CODA_STORE 35
 #define CODA_RELEASE 36
-#define CODA_NCALLS 37
+#define CODA_ACCESS_INTENT 37
+#define CODA_NCALLS 38
 #define DOWNCALL(opcode) (opcode >= CODA_REPLACE && opcode <= CODA_PURGEFID)
 #define VC_MAXDATASIZE 8192
 #define VC_MAXMSGSIZE sizeof(union inputArgs) + sizeof(union outputArgs) + VC_MAXDATASIZE
 #define CIOC_KERNEL_VERSION _IOWR('c', 10, size_t)
-#define CODA_KERNEL_VERSION 3
+#define CODA_KERNEL_VERSION 5
 struct coda_in_hdr {
   u_int32_t opcode;
   u_int32_t unique;
-  pid_t pid;
-  pid_t pgid;
+  __kernel_pid_t pid;
+  __kernel_pid_t pgid;
   vuid_t uid;
 };
 struct coda_out_hdr {
@@ -439,6 +434,21 @@
   struct coda_out_hdr oh;
   struct coda_statfs stat;
 };
+#define CODA_ACCESS_TYPE_READ 1
+#define CODA_ACCESS_TYPE_WRITE 2
+#define CODA_ACCESS_TYPE_MMAP 3
+#define CODA_ACCESS_TYPE_READ_FINISH 4
+#define CODA_ACCESS_TYPE_WRITE_FINISH 5
+struct coda_access_intent_in {
+  struct coda_in_hdr ih;
+  struct CodaFid VFid;
+  int count;
+  int pos;
+  int type;
+};
+struct coda_access_intent_out {
+  struct coda_out_hdr out;
+};
 #define CODA_NOCACHE 0x80000000
 union inputArgs {
   struct coda_in_hdr ih;
@@ -464,6 +474,7 @@
   struct coda_open_by_fd_in coda_open_by_fd;
   struct coda_open_by_path_in coda_open_by_path;
   struct coda_statfs_in coda_statfs;
+  struct coda_access_intent_in coda_access_intent;
 };
 union outputArgs {
   struct coda_out_hdr oh;
diff --git a/libc/kernel/uapi/linux/coda_psdev.h b/libc/kernel/uapi/linux/coda_psdev.h
deleted file mode 100644
index 7850db6..0000000
--- a/libc/kernel/uapi/linux/coda_psdev.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- ***   This header was automatically generated from a Linux kernel header
- ***   of the same name, to make information necessary for userspace to
- ***   call into the kernel available to libc.  It contains only constants,
- ***   structures, and macros generated from the original header, and thus,
- ***   contains no copyrightable information.
- ***
- ***   To edit the content of this header, modify the corresponding
- ***   source file (e.g. under external/kernel-headers/original/) then
- ***   run bionic/libc/kernel/tools/update_all.py
- ***
- ***   Any manual change here will be lost the next time this script will
- ***   be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef _UAPI__CODA_PSDEV_H
-#define _UAPI__CODA_PSDEV_H
-#include <linux/magic.h>
-#define CODA_PSDEV_MAJOR 67
-#define MAX_CODADEVS 5
-#define CODA_REQ_ASYNC 0x1
-#define CODA_REQ_READ 0x2
-#define CODA_REQ_WRITE 0x4
-#define CODA_REQ_ABORT 0x8
-#endif
diff --git a/libc/kernel/uapi/linux/devlink.h b/libc/kernel/uapi/linux/devlink.h
index 972d8cc..1cf9d95 100644
--- a/libc/kernel/uapi/linux/devlink.h
+++ b/libc/kernel/uapi/linux/devlink.h
@@ -83,6 +83,8 @@
   DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET,
   DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR,
   DEVLINK_CMD_FLASH_UPDATE,
+  DEVLINK_CMD_FLASH_UPDATE_END,
+  DEVLINK_CMD_FLASH_UPDATE_STATUS,
   __DEVLINK_CMD_MAX,
   DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1
 };
@@ -119,6 +121,8 @@
   DEVLINK_PORT_FLAVOUR_PHYSICAL,
   DEVLINK_PORT_FLAVOUR_CPU,
   DEVLINK_PORT_FLAVOUR_DSA,
+  DEVLINK_PORT_FLAVOUR_PCI_PF,
+  DEVLINK_PORT_FLAVOUR_PCI_VF,
 };
 enum devlink_param_cmode {
   DEVLINK_PARAM_CMODE_RUNTIME,
@@ -256,6 +260,11 @@
   DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER,
   DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME,
   DEVLINK_ATTR_FLASH_UPDATE_COMPONENT,
+  DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG,
+  DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE,
+  DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL,
+  DEVLINK_ATTR_PORT_PCI_PF_NUMBER,
+  DEVLINK_ATTR_PORT_PCI_VF_NUMBER,
   __DEVLINK_ATTR_MAX,
   DEVLINK_ATTR_MAX = __DEVLINK_ATTR_MAX - 1
 };
diff --git a/libc/kernel/uapi/linux/dma-buf.h b/libc/kernel/uapi/linux/dma-buf.h
index 7771906..3d7c099 100644
--- a/libc/kernel/uapi/linux/dma-buf.h
+++ b/libc/kernel/uapi/linux/dma-buf.h
@@ -28,6 +28,8 @@
 #define DMA_BUF_SYNC_START (0 << 2)
 #define DMA_BUF_SYNC_END (1 << 2)
 #define DMA_BUF_SYNC_VALID_FLAGS_MASK (DMA_BUF_SYNC_RW | DMA_BUF_SYNC_END)
+#define DMA_BUF_NAME_LEN 32
 #define DMA_BUF_BASE 'b'
 #define DMA_BUF_IOCTL_SYNC _IOW(DMA_BUF_BASE, 0, struct dma_buf_sync)
+#define DMA_BUF_SET_NAME _IOW(DMA_BUF_BASE, 1, const char *)
 #endif
diff --git a/libc/kernel/uapi/linux/ethtool.h b/libc/kernel/uapi/linux/ethtool.h
index 67a7efd..6b2b8d5 100644
--- a/libc/kernel/uapi/linux/ethtool.h
+++ b/libc/kernel/uapi/linux/ethtool.h
@@ -604,6 +604,8 @@
   ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
   ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
   ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
+  ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
+  ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
   __ETHTOOL_LINK_MODE_MASK_NBITS
 };
 #define __ETHTOOL_LINK_MODE_LEGACY_MASK(base_name) (1UL << (ETHTOOL_LINK_MODE_ ##base_name ##_BIT))
diff --git a/libc/kernel/uapi/linux/if_ether.h b/libc/kernel/uapi/linux/if_ether.h
index 9e0b15c..dd2dedb 100644
--- a/libc/kernel/uapi/linux/if_ether.h
+++ b/libc/kernel/uapi/linux/if_ether.h
@@ -72,6 +72,7 @@
 #define ETH_P_802_EX1 0x88B5
 #define ETH_P_PREAUTH 0x88C7
 #define ETH_P_TIPC 0x88CA
+#define ETH_P_LLDP 0x88CC
 #define ETH_P_MACSEC 0x88E5
 #define ETH_P_8021AH 0x88E7
 #define ETH_P_MVRP 0x88F5
diff --git a/libc/kernel/uapi/linux/if_link.h b/libc/kernel/uapi/linux/if_link.h
index 8d0080b..45ef92b 100644
--- a/libc/kernel/uapi/linux/if_link.h
+++ b/libc/kernel/uapi/linux/if_link.h
@@ -515,6 +515,7 @@
   IFLA_BOND_AD_USER_PORT_KEY,
   IFLA_BOND_AD_ACTOR_SYSTEM,
   IFLA_BOND_TLB_DYNAMIC_LB,
+  IFLA_BOND_PEER_NOTIF_DELAY,
   __IFLA_BOND_MAX,
 };
 #define IFLA_BOND_MAX (__IFLA_BOND_MAX - 1)
@@ -561,6 +562,7 @@
   IFLA_VF_IB_NODE_GUID,
   IFLA_VF_IB_PORT_GUID,
   IFLA_VF_VLAN_LIST,
+  IFLA_VF_BROADCAST,
   __IFLA_VF_MAX,
 };
 #define IFLA_VF_MAX (__IFLA_VF_MAX - 1)
@@ -568,6 +570,9 @@
   __u32 vf;
   __u8 mac[32];
 };
+struct ifla_vf_broadcast {
+  __u8 broadcast[32];
+};
 struct ifla_vf_vlan {
   __u32 vf;
   __u32 vlan;
diff --git a/libc/kernel/uapi/linux/if_packet.h b/libc/kernel/uapi/linux/if_packet.h
index 300aa7b..db24bbe 100644
--- a/libc/kernel/uapi/linux/if_packet.h
+++ b/libc/kernel/uapi/linux/if_packet.h
@@ -117,7 +117,7 @@
 #define TP_STATUS_WRONG_FORMAT (1 << 2)
 #define TP_STATUS_TS_SOFTWARE (1 << 29)
 #define TP_STATUS_TS_SYS_HARDWARE (1 << 30)
-#define TP_STATUS_TS_RAW_HARDWARE (1 << 31)
+#define TP_STATUS_TS_RAW_HARDWARE (1U << 31)
 #define TP_FT_REQ_FILL_RXHASH 0x1
 struct tpacket_hdr {
   unsigned long tp_status;
diff --git a/libc/kernel/uapi/linux/if_xdp.h b/libc/kernel/uapi/linux/if_xdp.h
index a0935bd..2c2596c 100644
--- a/libc/kernel/uapi/linux/if_xdp.h
+++ b/libc/kernel/uapi/linux/if_xdp.h
@@ -47,6 +47,7 @@
 #define XDP_UMEM_FILL_RING 5
 #define XDP_UMEM_COMPLETION_RING 6
 #define XDP_STATISTICS 7
+#define XDP_OPTIONS 8
 struct xdp_umem_reg {
   __u64 addr;
   __u64 len;
@@ -58,6 +59,10 @@
   __u64 rx_invalid_descs;
   __u64 tx_invalid_descs;
 };
+struct xdp_options {
+  __u32 flags;
+};
+#define XDP_OPTIONS_ZEROCOPY (1 << 0)
 #define XDP_PGOFF_RX_RING 0
 #define XDP_PGOFF_TX_RING 0x80000000
 #define XDP_UMEM_PGOFF_FILL_RING 0x100000000ULL
diff --git a/libc/kernel/uapi/linux/io_uring.h b/libc/kernel/uapi/linux/io_uring.h
index 434b24b..c5055ba 100644
--- a/libc/kernel/uapi/linux/io_uring.h
+++ b/libc/kernel/uapi/linux/io_uring.h
@@ -33,6 +33,7 @@
     __u32 fsync_flags;
     __u16 poll_events;
     __u32 sync_range_flags;
+    __u32 msg_flags;
   };
   __u64 user_data;
   union {
@@ -42,6 +43,7 @@
 };
 #define IOSQE_FIXED_FILE (1U << 0)
 #define IOSQE_IO_DRAIN (1U << 1)
+#define IOSQE_IO_LINK (1U << 2)
 #define IORING_SETUP_IOPOLL (1U << 0)
 #define IORING_SETUP_SQPOLL (1U << 1)
 #define IORING_SETUP_SQ_AFF (1U << 2)
@@ -54,6 +56,8 @@
 #define IORING_OP_POLL_ADD 6
 #define IORING_OP_POLL_REMOVE 7
 #define IORING_OP_SYNC_FILE_RANGE 8
+#define IORING_OP_SENDMSG 9
+#define IORING_OP_RECVMSG 10
 #define IORING_FSYNC_DATASYNC (1U << 0)
 struct io_uring_cqe {
   __u64 user_data;
diff --git a/libc/kernel/uapi/linux/iommu.h b/libc/kernel/uapi/linux/iommu.h
new file mode 100644
index 0000000..3c7849a
--- /dev/null
+++ b/libc/kernel/uapi/linux/iommu.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI_IOMMU_H
+#define _UAPI_IOMMU_H
+#include <linux/types.h>
+#define IOMMU_FAULT_PERM_READ (1 << 0)
+#define IOMMU_FAULT_PERM_WRITE (1 << 1)
+#define IOMMU_FAULT_PERM_EXEC (1 << 2)
+#define IOMMU_FAULT_PERM_PRIV (1 << 3)
+enum iommu_fault_type {
+  IOMMU_FAULT_DMA_UNRECOV = 1,
+  IOMMU_FAULT_PAGE_REQ,
+};
+enum iommu_fault_reason {
+  IOMMU_FAULT_REASON_UNKNOWN = 0,
+  IOMMU_FAULT_REASON_PASID_FETCH,
+  IOMMU_FAULT_REASON_BAD_PASID_ENTRY,
+  IOMMU_FAULT_REASON_PASID_INVALID,
+  IOMMU_FAULT_REASON_WALK_EABT,
+  IOMMU_FAULT_REASON_PTE_FETCH,
+  IOMMU_FAULT_REASON_PERMISSION,
+  IOMMU_FAULT_REASON_ACCESS,
+  IOMMU_FAULT_REASON_OOR_ADDRESS,
+};
+struct iommu_fault_unrecoverable {
+  __u32 reason;
+#define IOMMU_FAULT_UNRECOV_PASID_VALID (1 << 0)
+#define IOMMU_FAULT_UNRECOV_ADDR_VALID (1 << 1)
+#define IOMMU_FAULT_UNRECOV_FETCH_ADDR_VALID (1 << 2)
+  __u32 flags;
+  __u32 pasid;
+  __u32 perm;
+  __u64 addr;
+  __u64 fetch_addr;
+};
+struct iommu_fault_page_request {
+#define IOMMU_FAULT_PAGE_REQUEST_PASID_VALID (1 << 0)
+#define IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE (1 << 1)
+#define IOMMU_FAULT_PAGE_REQUEST_PRIV_DATA (1 << 2)
+  __u32 flags;
+  __u32 pasid;
+  __u32 grpid;
+  __u32 perm;
+  __u64 addr;
+  __u64 private_data[2];
+};
+struct iommu_fault {
+  __u32 type;
+  __u32 padding;
+  union {
+    struct iommu_fault_unrecoverable event;
+    struct iommu_fault_page_request prm;
+    __u8 padding2[56];
+  };
+};
+enum iommu_page_response_code {
+  IOMMU_PAGE_RESP_SUCCESS = 0,
+  IOMMU_PAGE_RESP_INVALID,
+  IOMMU_PAGE_RESP_FAILURE,
+};
+struct iommu_page_response {
+#define IOMMU_PAGE_RESP_VERSION_1 1
+  __u32 version;
+#define IOMMU_PAGE_RESP_PASID_VALID (1 << 0)
+  __u32 flags;
+  __u32 pasid;
+  __u32 grpid;
+  __u32 code;
+};
+#endif
diff --git a/libc/kernel/uapi/linux/ip_vs.h b/libc/kernel/uapi/linux/ip_vs.h
index 0230aae..6e3defe 100644
--- a/libc/kernel/uapi/linux/ip_vs.h
+++ b/libc/kernel/uapi/linux/ip_vs.h
@@ -88,8 +88,12 @@
 enum {
   IP_VS_CONN_F_TUNNEL_TYPE_IPIP = 0,
   IP_VS_CONN_F_TUNNEL_TYPE_GUE,
+  IP_VS_CONN_F_TUNNEL_TYPE_GRE,
   IP_VS_CONN_F_TUNNEL_TYPE_MAX,
 };
+#define IP_VS_TUNNEL_ENCAP_FLAG_NOCSUM (0)
+#define IP_VS_TUNNEL_ENCAP_FLAG_CSUM (1 << 0)
+#define IP_VS_TUNNEL_ENCAP_FLAG_REMCSUM (1 << 1)
 struct ip_vs_service_user {
   __u16 protocol;
   __be32 addr;
@@ -243,6 +247,7 @@
   IPVS_DEST_ATTR_STATS64,
   IPVS_DEST_ATTR_TUN_TYPE,
   IPVS_DEST_ATTR_TUN_PORT,
+  IPVS_DEST_ATTR_TUN_FLAGS,
   __IPVS_DEST_ATTR_MAX,
 };
 #define IPVS_DEST_ATTR_MAX (__IPVS_DEST_ATTR_MAX - 1)
diff --git a/libc/kernel/uapi/linux/isdn.h b/libc/kernel/uapi/linux/isdn.h
deleted file mode 100644
index b1ec37e..0000000
--- a/libc/kernel/uapi/linux/isdn.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- ***   This header was automatically generated from a Linux kernel header
- ***   of the same name, to make information necessary for userspace to
- ***   call into the kernel available to libc.  It contains only constants,
- ***   structures, and macros generated from the original header, and thus,
- ***   contains no copyrightable information.
- ***
- ***   To edit the content of this header, modify the corresponding
- ***   source file (e.g. under external/kernel-headers/original/) then
- ***   run bionic/libc/kernel/tools/update_all.py
- ***
- ***   Any manual change here will be lost the next time this script will
- ***   be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef _UAPI__ISDN_H__
-#define _UAPI__ISDN_H__
-#include <linux/ioctl.h>
-#include <linux/tty.h>
-#define ISDN_MAX_DRIVERS 32
-#define ISDN_MAX_CHANNELS 64
-#define IIOCNETAIF _IO('I', 1)
-#define IIOCNETDIF _IO('I', 2)
-#define IIOCNETSCF _IO('I', 3)
-#define IIOCNETGCF _IO('I', 4)
-#define IIOCNETANM _IO('I', 5)
-#define IIOCNETDNM _IO('I', 6)
-#define IIOCNETGNM _IO('I', 7)
-#define IIOCGETSET _IO('I', 8)
-#define IIOCSETSET _IO('I', 9)
-#define IIOCSETVER _IO('I', 10)
-#define IIOCNETHUP _IO('I', 11)
-#define IIOCSETGST _IO('I', 12)
-#define IIOCSETBRJ _IO('I', 13)
-#define IIOCSIGPRF _IO('I', 14)
-#define IIOCGETPRF _IO('I', 15)
-#define IIOCSETPRF _IO('I', 16)
-#define IIOCGETMAP _IO('I', 17)
-#define IIOCSETMAP _IO('I', 18)
-#define IIOCNETASL _IO('I', 19)
-#define IIOCNETDIL _IO('I', 20)
-#define IIOCGETCPS _IO('I', 21)
-#define IIOCGETDVR _IO('I', 22)
-#define IIOCNETLCR _IO('I', 23)
-#define IIOCNETDWRSET _IO('I', 24)
-#define IIOCNETALN _IO('I', 32)
-#define IIOCNETDLN _IO('I', 33)
-#define IIOCNETGPN _IO('I', 34)
-#define IIOCDBGVAR _IO('I', 127)
-#define IIOCDRVCTL _IO('I', 128)
-#define SIOCGKEEPPERIOD (SIOCDEVPRIVATE + 0)
-#define SIOCSKEEPPERIOD (SIOCDEVPRIVATE + 1)
-#define SIOCGDEBSERINT (SIOCDEVPRIVATE + 2)
-#define SIOCSDEBSERINT (SIOCDEVPRIVATE + 3)
-#define ISDN_NET_ENCAP_ETHER 0
-#define ISDN_NET_ENCAP_RAWIP 1
-#define ISDN_NET_ENCAP_IPTYP 2
-#define ISDN_NET_ENCAP_CISCOHDLC 3
-#define ISDN_NET_ENCAP_SYNCPPP 4
-#define ISDN_NET_ENCAP_UIHDLC 5
-#define ISDN_NET_ENCAP_CISCOHDLCK 6
-#define ISDN_NET_ENCAP_X25IFACE 7
-#define ISDN_NET_ENCAP_MAX_ENCAP ISDN_NET_ENCAP_X25IFACE
-#define ISDN_USAGE_NONE 0
-#define ISDN_USAGE_RAW 1
-#define ISDN_USAGE_MODEM 2
-#define ISDN_USAGE_NET 3
-#define ISDN_USAGE_VOICE 4
-#define ISDN_USAGE_FAX 5
-#define ISDN_USAGE_MASK 7
-#define ISDN_USAGE_DISABLED 32
-#define ISDN_USAGE_EXCLUSIVE 64
-#define ISDN_USAGE_OUTGOING 128
-#define ISDN_MODEM_NUMREG 24
-#define ISDN_LMSNLEN 255
-#define ISDN_CMSGLEN 50
-#define ISDN_MSNLEN 32
-#define NET_DV 0x06
-#define TTY_DV 0x06
-#define INF_DV 0x01
-typedef struct {
-  char drvid[25];
-  unsigned long arg;
-} isdn_ioctl_struct;
-typedef struct {
-  char name[10];
-  char phone[ISDN_MSNLEN];
-  int outgoing;
-} isdn_net_ioctl_phone;
-typedef struct {
-  char name[10];
-  char master[10];
-  char slave[10];
-  char eaz[256];
-  char drvid[25];
-  int onhtime;
-  int charge;
-  int l2_proto;
-  int l3_proto;
-  int p_encap;
-  int exclusive;
-  int dialmax;
-  int slavedelay;
-  int cbdelay;
-  int chargehup;
-  int ihup;
-  int secure;
-  int callback;
-  int cbhup;
-  int pppbind;
-  int chargeint;
-  int triggercps;
-  int dialtimeout;
-  int dialwait;
-  int dialmode;
-} isdn_net_ioctl_cfg;
-#define ISDN_NET_DIALMODE_MASK 0xC0
-#define ISDN_NET_DM_OFF 0x00
-#define ISDN_NET_DM_MANUAL 0x40
-#define ISDN_NET_DM_AUTO 0x80
-#define ISDN_NET_DIALMODE(x) ((& (x))->flags & ISDN_NET_DIALMODE_MASK)
-#endif
diff --git a/libc/kernel/uapi/linux/isdn/capicmd.h b/libc/kernel/uapi/linux/isdn/capicmd.h
index d6ce6ed..419b278 100644
--- a/libc/kernel/uapi/linux/isdn/capicmd.h
+++ b/libc/kernel/uapi/linux/isdn/capicmd.h
@@ -21,6 +21,7 @@
 #define CAPI_MSG_BASELEN 8
 #define CAPI_DATA_B3_REQ_LEN (CAPI_MSG_BASELEN + 4 + 4 + 2 + 2 + 2)
 #define CAPI_DATA_B3_RESP_LEN (CAPI_MSG_BASELEN + 4 + 2)
+#define CAPI_DISCONNECT_B3_RESP_LEN (CAPI_MSG_BASELEN + 4)
 #define CAPI_ALERT 0x01
 #define CAPI_CONNECT 0x02
 #define CAPI_CONNECT_ACTIVE 0x03
diff --git a/libc/kernel/uapi/linux/isdn_ppp.h b/libc/kernel/uapi/linux/isdn_ppp.h
deleted file mode 100644
index 83cb77c..0000000
--- a/libc/kernel/uapi/linux/isdn_ppp.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- ***   This header was automatically generated from a Linux kernel header
- ***   of the same name, to make information necessary for userspace to
- ***   call into the kernel available to libc.  It contains only constants,
- ***   structures, and macros generated from the original header, and thus,
- ***   contains no copyrightable information.
- ***
- ***   To edit the content of this header, modify the corresponding
- ***   source file (e.g. under external/kernel-headers/original/) then
- ***   run bionic/libc/kernel/tools/update_all.py
- ***
- ***   Any manual change here will be lost the next time this script will
- ***   be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef _UAPI_LINUX_ISDN_PPP_H
-#define _UAPI_LINUX_ISDN_PPP_H
-#define CALLTYPE_INCOMING 0x1
-#define CALLTYPE_OUTGOING 0x2
-#define CALLTYPE_CALLBACK 0x4
-#define IPPP_VERSION "2.2.0"
-struct pppcallinfo {
-  int calltype;
-  unsigned char local_num[64];
-  unsigned char remote_num[64];
-  int charge_units;
-};
-#define PPPIOCGCALLINFO _IOWR('t', 128, struct pppcallinfo)
-#define PPPIOCBUNDLE _IOW('t', 129, int)
-#define PPPIOCGMPFLAGS _IOR('t', 130, int)
-#define PPPIOCSMPFLAGS _IOW('t', 131, int)
-#define PPPIOCSMPMTU _IOW('t', 132, int)
-#define PPPIOCSMPMRU _IOW('t', 133, int)
-#define PPPIOCGCOMPRESSORS _IOR('t', 134, unsigned long[8])
-#define PPPIOCSCOMPRESSOR _IOW('t', 135, int)
-#define PPPIOCGIFNAME _IOR('t', 136, char[IFNAMSIZ])
-#define SC_MP_PROT 0x00000200
-#define SC_REJ_MP_PROT 0x00000400
-#define SC_OUT_SHORT_SEQ 0x00000800
-#define SC_IN_SHORT_SEQ 0x00004000
-#define SC_DECOMP_ON 0x01
-#define SC_COMP_ON 0x02
-#define SC_DECOMP_DISCARD 0x04
-#define SC_COMP_DISCARD 0x08
-#define SC_LINK_DECOMP_ON 0x10
-#define SC_LINK_COMP_ON 0x20
-#define SC_LINK_DECOMP_DISCARD 0x40
-#define SC_LINK_COMP_DISCARD 0x80
-#define ISDN_PPP_COMP_MAX_OPTIONS 16
-#define IPPP_COMP_FLAG_XMIT 0x1
-#define IPPP_COMP_FLAG_LINK 0x2
-struct isdn_ppp_comp_data {
-  int num;
-  unsigned char options[ISDN_PPP_COMP_MAX_OPTIONS];
-  int optlen;
-  int flags;
-};
-#endif
diff --git a/libc/kernel/uapi/linux/isdnif.h b/libc/kernel/uapi/linux/isdnif.h
deleted file mode 100644
index 933f4b1..0000000
--- a/libc/kernel/uapi/linux/isdnif.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- ***   This header was automatically generated from a Linux kernel header
- ***   of the same name, to make information necessary for userspace to
- ***   call into the kernel available to libc.  It contains only constants,
- ***   structures, and macros generated from the original header, and thus,
- ***   contains no copyrightable information.
- ***
- ***   To edit the content of this header, modify the corresponding
- ***   source file (e.g. under external/kernel-headers/original/) then
- ***   run bionic/libc/kernel/tools/update_all.py
- ***
- ***   Any manual change here will be lost the next time this script will
- ***   be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef _UAPI__ISDNIF_H__
-#define _UAPI__ISDNIF_H__
-#define ISDN_PTYPE_UNKNOWN 0
-#define ISDN_PTYPE_1TR6 1
-#define ISDN_PTYPE_EURO 2
-#define ISDN_PTYPE_LEASED 3
-#define ISDN_PTYPE_NI1 4
-#define ISDN_PTYPE_MAX 7
-#define ISDN_PROTO_L2_X75I 0
-#define ISDN_PROTO_L2_X75UI 1
-#define ISDN_PROTO_L2_X75BUI 2
-#define ISDN_PROTO_L2_HDLC 3
-#define ISDN_PROTO_L2_TRANS 4
-#define ISDN_PROTO_L2_X25DTE 5
-#define ISDN_PROTO_L2_X25DCE 6
-#define ISDN_PROTO_L2_V11096 7
-#define ISDN_PROTO_L2_V11019 8
-#define ISDN_PROTO_L2_V11038 9
-#define ISDN_PROTO_L2_MODEM 10
-#define ISDN_PROTO_L2_FAX 11
-#define ISDN_PROTO_L2_HDLC_56K 12
-#define ISDN_PROTO_L2_MAX 15
-#define ISDN_PROTO_L3_TRANS 0
-#define ISDN_PROTO_L3_TRANSDSP 1
-#define ISDN_PROTO_L3_FCLASS2 2
-#define ISDN_PROTO_L3_FCLASS1 3
-#define ISDN_PROTO_L3_MAX 7
-#endif
diff --git a/libc/kernel/uapi/linux/isst_if.h b/libc/kernel/uapi/linux/isst_if.h
new file mode 100644
index 0000000..322f70d
--- /dev/null
+++ b/libc/kernel/uapi/linux/isst_if.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef __ISST_IF_H
+#define __ISST_IF_H
+#include <linux/types.h>
+struct isst_if_platform_info {
+  __u16 api_version;
+  __u16 driver_version;
+  __u16 max_cmds_per_ioctl;
+  __u8 mbox_supported;
+  __u8 mmio_supported;
+};
+struct isst_if_cpu_map {
+  __u32 logical_cpu;
+  __u32 physical_cpu;
+};
+struct isst_if_cpu_maps {
+  __u32 cmd_count;
+  struct isst_if_cpu_map cpu_map[1];
+};
+struct isst_if_io_reg {
+  __u32 read_write;
+  __u32 logical_cpu;
+  __u32 reg;
+  __u32 value;
+};
+struct isst_if_io_regs {
+  __u32 req_count;
+  struct isst_if_io_reg io_reg[1];
+};
+struct isst_if_mbox_cmd {
+  __u32 logical_cpu;
+  __u32 parameter;
+  __u32 req_data;
+  __u32 resp_data;
+  __u16 command;
+  __u16 sub_command;
+  __u32 reserved;
+};
+struct isst_if_mbox_cmds {
+  __u32 cmd_count;
+  struct isst_if_mbox_cmd mbox_cmd[1];
+};
+struct isst_if_msr_cmd {
+  __u32 read_write;
+  __u32 logical_cpu;
+  __u64 msr;
+  __u64 data;
+};
+struct isst_if_msr_cmds {
+  __u32 cmd_count;
+  struct isst_if_msr_cmd msr_cmd[1];
+};
+#define ISST_IF_MAGIC 0xFE
+#define ISST_IF_GET_PLATFORM_INFO _IOR(ISST_IF_MAGIC, 0, struct isst_if_platform_info *)
+#define ISST_IF_GET_PHY_ID _IOWR(ISST_IF_MAGIC, 1, struct isst_if_cpu_map *)
+#define ISST_IF_IO_CMD _IOW(ISST_IF_MAGIC, 2, struct isst_if_io_regs *)
+#define ISST_IF_MBOX_COMMAND _IOWR(ISST_IF_MAGIC, 3, struct isst_if_mbox_cmds *)
+#define ISST_IF_MSR_COMMAND _IOWR(ISST_IF_MAGIC, 4, struct isst_if_msr_cmds *)
+#endif
diff --git a/libc/kernel/uapi/linux/keyctl.h b/libc/kernel/uapi/linux/keyctl.h
index 53f0468..e3fef38 100644
--- a/libc/kernel/uapi/linux/keyctl.h
+++ b/libc/kernel/uapi/linux/keyctl.h
@@ -66,6 +66,8 @@
 #define KEYCTL_PKEY_SIGN 27
 #define KEYCTL_PKEY_VERIFY 28
 #define KEYCTL_RESTRICT_KEYRING 29
+#define KEYCTL_MOVE 30
+#define KEYCTL_CAPABILITIES 31
 struct keyctl_dh_params {
   union {
 #ifndef __cplusplus
@@ -104,4 +106,15 @@
   };
   __u32 __spare[7];
 };
+#define KEYCTL_MOVE_EXCL 0x00000001
+#define KEYCTL_CAPS0_CAPABILITIES 0x01
+#define KEYCTL_CAPS0_PERSISTENT_KEYRINGS 0x02
+#define KEYCTL_CAPS0_DIFFIE_HELLMAN 0x04
+#define KEYCTL_CAPS0_PUBLIC_KEY 0x08
+#define KEYCTL_CAPS0_BIG_KEY 0x10
+#define KEYCTL_CAPS0_INVALIDATE 0x20
+#define KEYCTL_CAPS0_RESTRICT_KEYRING 0x40
+#define KEYCTL_CAPS0_MOVE 0x80
+#define KEYCTL_CAPS1_NS_KEYRING_NAME 0x01
+#define KEYCTL_CAPS1_NS_KEY_TAG 0x02
 #endif
diff --git a/libc/kernel/uapi/linux/kfd_ioctl.h b/libc/kernel/uapi/linux/kfd_ioctl.h
index 400c423..8b09f00 100644
--- a/libc/kernel/uapi/linux/kfd_ioctl.h
+++ b/libc/kernel/uapi/linux/kfd_ioctl.h
@@ -26,9 +26,10 @@
   __u32 major_version;
   __u32 minor_version;
 };
-#define KFD_IOC_QUEUE_TYPE_COMPUTE 0
-#define KFD_IOC_QUEUE_TYPE_SDMA 1
-#define KFD_IOC_QUEUE_TYPE_COMPUTE_AQL 2
+#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_MAX_QUEUE_PERCENTAGE 100
 #define KFD_MAX_QUEUE_PRIORITY 15
 struct kfd_ioctl_create_queue_args {
@@ -236,6 +237,7 @@
 #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)
 #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)
@@ -279,6 +281,10 @@
   __u32 gpu_id;
   __u32 dmabuf_fd;
 };
+enum kfd_mmio_remap {
+  KFD_MMIO_REMAP_HDP_MEM_FLUSH_CNTL = 0,
+  KFD_MMIO_REMAP_HDP_REG_FLUSH_CNTL = 4,
+};
 #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)
diff --git a/libc/kernel/uapi/linux/kvm.h b/libc/kernel/uapi/linux/kvm.h
index 374b0d1..7b8fb1b 100644
--- a/libc/kernel/uapi/linux/kvm.h
+++ b/libc/kernel/uapi/linux/kvm.h
@@ -529,7 +529,8 @@
 #define KVM_X86_DISABLE_EXITS_MWAIT (1 << 0)
 #define KVM_X86_DISABLE_EXITS_HLT (1 << 1)
 #define KVM_X86_DISABLE_EXITS_PAUSE (1 << 2)
-#define KVM_X86_DISABLE_VALID_EXITS (KVM_X86_DISABLE_EXITS_MWAIT | KVM_X86_DISABLE_EXITS_HLT | KVM_X86_DISABLE_EXITS_PAUSE)
+#define KVM_X86_DISABLE_EXITS_CSTATE (1 << 3)
+#define KVM_X86_DISABLE_VALID_EXITS (KVM_X86_DISABLE_EXITS_MWAIT | KVM_X86_DISABLE_EXITS_HLT | KVM_X86_DISABLE_EXITS_PAUSE | KVM_X86_DISABLE_EXITS_CSTATE)
 struct kvm_enable_cap {
   __u32 cap;
   __u32 flags;
@@ -775,6 +776,7 @@
 #define KVM_CAP_ARM_SVE 170
 #define KVM_CAP_ARM_PTRAUTH_ADDRESS 171
 #define KVM_CAP_ARM_PTRAUTH_GENERIC 172
+#define KVM_CAP_PMU_EVENT_FILTER 173
 #ifdef KVM_CAP_IRQ_ROUTING
 struct kvm_irq_routing_irqchip {
   __u32 irqchip;
@@ -1017,6 +1019,7 @@
 #define KVM_PPC_CONFIGURE_V3_MMU _IOW(KVMIO, 0xaf, struct kvm_ppc_mmuv3_cfg)
 #define KVM_PPC_GET_RMMU_INFO _IOW(KVMIO, 0xb0, struct kvm_ppc_rmmu_info)
 #define KVM_PPC_GET_CPU_CHAR _IOR(KVMIO, 0xb1, struct kvm_ppc_cpu_char)
+#define KVM_SET_PMU_EVENT_FILTER _IOW(KVMIO, 0xb2, struct kvm_pmu_event_filter)
 #define KVM_CREATE_DEVICE _IOWR(KVMIO, 0xe0, struct kvm_create_device)
 #define KVM_SET_DEVICE_ATTR _IOW(KVMIO, 0xe1, struct kvm_device_attr)
 #define KVM_GET_DEVICE_ATTR _IOW(KVMIO, 0xe2, struct kvm_device_attr)
diff --git a/libc/kernel/uapi/linux/kvm_para.h b/libc/kernel/uapi/linux/kvm_para.h
index b08a605..9a4dd29 100644
--- a/libc/kernel/uapi/linux/kvm_para.h
+++ b/libc/kernel/uapi/linux/kvm_para.h
@@ -34,5 +34,6 @@
 #define KVM_HC_MIPS_CONSOLE_OUTPUT 8
 #define KVM_HC_CLOCK_PAIRING 9
 #define KVM_HC_SEND_IPI 10
+#define KVM_HC_SCHED_YIELD 11
 #include <asm/kvm_para.h>
 #endif
diff --git a/libc/kernel/uapi/linux/magic.h b/libc/kernel/uapi/linux/magic.h
index f3b337e..38b5c85 100644
--- a/libc/kernel/uapi/linux/magic.h
+++ b/libc/kernel/uapi/linux/magic.h
@@ -94,4 +94,6 @@
 #define UDF_SUPER_MAGIC 0x15013346
 #define BALLOON_KVM_MAGIC 0x13661366
 #define ZSMALLOC_MAGIC 0x58295829
+#define DMA_BUF_MAGIC 0x444d4142
+#define Z3FOLD_MAGIC 0x33
 #endif
diff --git a/libc/kernel/uapi/linux/media.h b/libc/kernel/uapi/linux/media.h
index 68821e7..fe29568 100644
--- a/libc/kernel/uapi/linux/media.h
+++ b/libc/kernel/uapi/linux/media.h
@@ -68,7 +68,7 @@
 #define MEDIA_ENT_F_DV_ENCODER (MEDIA_ENT_F_BASE + 0x6002)
 #define MEDIA_ENT_FL_DEFAULT (1 << 0)
 #define MEDIA_ENT_FL_CONNECTOR (1 << 1)
-#define MEDIA_ENT_ID_FLAG_NEXT (1 << 31)
+#define MEDIA_ENT_ID_FLAG_NEXT (1U << 31)
 struct media_entity_desc {
   __u32 id;
   char name[32];
diff --git a/libc/kernel/uapi/linux/mii.h b/libc/kernel/uapi/linux/mii.h
index 5c87990..3c6c564 100644
--- a/libc/kernel/uapi/linux/mii.h
+++ b/libc/kernel/uapi/linux/mii.h
@@ -113,6 +113,8 @@
 #define EXPANSION_NPCAPABLE 0x0008
 #define EXPANSION_MFAULTS 0x0010
 #define EXPANSION_RESV 0xffe0
+#define ESTATUS_1000_XFULL 0x8000
+#define ESTATUS_1000_XHALF 0x4000
 #define ESTATUS_1000_TFULL 0x2000
 #define ESTATUS_1000_THALF 0x1000
 #define NWAYTEST_RESV1 0x00ff
diff --git a/libc/kernel/uapi/linux/wanrouter.h b/libc/kernel/uapi/linux/netfilter/nf_synproxy.h
similarity index 68%
copy from libc/kernel/uapi/linux/wanrouter.h
copy to libc/kernel/uapi/linux/netfilter/nf_synproxy.h
index 9bd45a3..474838e 100644
--- a/libc/kernel/uapi/linux/wanrouter.h
+++ b/libc/kernel/uapi/linux/netfilter/nf_synproxy.h
@@ -16,12 +16,18 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _UAPI_ROUTER_H
-#define _UAPI_ROUTER_H
-enum wan_states {
-  WAN_UNCONFIGURED,
-  WAN_DISCONNECTED,
-  WAN_CONNECTING,
-  WAN_CONNECTED
+#ifndef _NF_SYNPROXY_H
+#define _NF_SYNPROXY_H
+#include <linux/types.h>
+#define NF_SYNPROXY_OPT_MSS 0x01
+#define NF_SYNPROXY_OPT_WSCALE 0x02
+#define NF_SYNPROXY_OPT_SACK_PERM 0x04
+#define NF_SYNPROXY_OPT_TIMESTAMP 0x08
+#define NF_SYNPROXY_OPT_ECN 0x10
+#define NF_SYNPROXY_OPT_MASK (NF_SYNPROXY_OPT_MSS | NF_SYNPROXY_OPT_WSCALE | NF_SYNPROXY_OPT_SACK_PERM | NF_SYNPROXY_OPT_TIMESTAMP)
+struct nf_synproxy_info {
+  __u8 options;
+  __u8 wscale;
+  __u16 mss;
 };
 #endif
diff --git a/libc/kernel/uapi/linux/netfilter/nf_tables.h b/libc/kernel/uapi/linux/netfilter/nf_tables.h
index 6869f58..ec6ac82 100644
--- a/libc/kernel/uapi/linux/netfilter/nf_tables.h
+++ b/libc/kernel/uapi/linux/netfilter/nf_tables.h
@@ -125,6 +125,7 @@
   NFTA_CHAIN_TYPE,
   NFTA_CHAIN_COUNTERS,
   NFTA_CHAIN_PAD,
+  NFTA_CHAIN_FLAGS,
   __NFTA_CHAIN_MAX
 };
 #define NFTA_CHAIN_MAX (__NFTA_CHAIN_MAX - 1)
@@ -372,6 +373,7 @@
 enum nft_exthdr_op {
   NFT_EXTHDR_OP_IPV6,
   NFT_EXTHDR_OP_TCPOPT,
+  NFT_EXTHDR_OP_IPV4,
   __NFT_EXTHDR_OP_MAX
 };
 #define NFT_EXTHDR_OP_MAX (__NFT_EXTHDR_OP_MAX - 1)
@@ -416,6 +418,8 @@
   NFT_META_SECPATH,
   NFT_META_IIFKIND,
   NFT_META_OIFKIND,
+  NFT_META_BRI_IIFPVID,
+  NFT_META_BRI_IIFVPROTO,
 };
 enum nft_rt_keys {
   NFT_RT_CLASSID,
@@ -740,6 +744,16 @@
   __NFTA_CT_TIMEOUT_MAX,
 };
 #define NFTA_CT_TIMEOUT_MAX (__NFTA_CT_TIMEOUT_MAX - 1)
+enum nft_ct_expectation_attributes {
+  NFTA_CT_EXPECT_UNSPEC,
+  NFTA_CT_EXPECT_L3PROTO,
+  NFTA_CT_EXPECT_L4PROTO,
+  NFTA_CT_EXPECT_DPORT,
+  NFTA_CT_EXPECT_TIMEOUT,
+  NFTA_CT_EXPECT_SIZE,
+  __NFTA_CT_EXPECT_MAX,
+};
+#define NFTA_CT_EXPECT_MAX (__NFTA_CT_EXPECT_MAX - 1)
 #define NFT_OBJECT_UNSPEC 0
 #define NFT_OBJECT_COUNTER 1
 #define NFT_OBJECT_QUOTA 2
@@ -749,7 +763,8 @@
 #define NFT_OBJECT_TUNNEL 6
 #define NFT_OBJECT_CT_TIMEOUT 7
 #define NFT_OBJECT_SECMARK 8
-#define __NFT_OBJECT_MAX 9
+#define NFT_OBJECT_CT_EXPECT 9
+#define __NFT_OBJECT_MAX 10
 #define NFT_OBJECT_MAX (__NFT_OBJECT_MAX - 1)
 enum nft_object_attributes {
   NFTA_OBJ_UNSPEC,
@@ -793,6 +808,14 @@
 enum nft_osf_flags {
   NFT_OSF_F_VERSION = (1 << 0),
 };
+enum nft_synproxy_attributes {
+  NFTA_SYNPROXY_UNSPEC,
+  NFTA_SYNPROXY_MSS,
+  NFTA_SYNPROXY_WSCALE,
+  NFTA_SYNPROXY_FLAGS,
+  __NFTA_SYNPROXY_MAX,
+};
+#define NFTA_SYNPROXY_MAX (__NFTA_SYNPROXY_MAX - 1)
 enum nft_devices_attributes {
   NFTA_DEVICE_UNSPEC,
   NFTA_DEVICE_NAME,
diff --git a/libc/kernel/uapi/linux/netfilter/xt_SYNPROXY.h b/libc/kernel/uapi/linux/netfilter/xt_SYNPROXY.h
index cb53431..4d7f436 100644
--- a/libc/kernel/uapi/linux/netfilter/xt_SYNPROXY.h
+++ b/libc/kernel/uapi/linux/netfilter/xt_SYNPROXY.h
@@ -18,15 +18,11 @@
  ****************************************************************************/
 #ifndef _XT_SYNPROXY_H
 #define _XT_SYNPROXY_H
-#include <linux/types.h>
-#define XT_SYNPROXY_OPT_MSS 0x01
-#define XT_SYNPROXY_OPT_WSCALE 0x02
-#define XT_SYNPROXY_OPT_SACK_PERM 0x04
-#define XT_SYNPROXY_OPT_TIMESTAMP 0x08
-#define XT_SYNPROXY_OPT_ECN 0x10
-struct xt_synproxy_info {
-  __u8 options;
-  __u8 wscale;
-  __u16 mss;
-};
+#include <linux/netfilter/nf_synproxy.h>
+#define XT_SYNPROXY_OPT_MSS NF_SYNPROXY_OPT_MSS
+#define XT_SYNPROXY_OPT_WSCALE NF_SYNPROXY_OPT_WSCALE
+#define XT_SYNPROXY_OPT_SACK_PERM NF_SYNPROXY_OPT_SACK_PERM
+#define XT_SYNPROXY_OPT_TIMESTAMP NF_SYNPROXY_OPT_TIMESTAMP
+#define XT_SYNPROXY_OPT_ECN NF_SYNPROXY_OPT_ECN
+#define xt_synproxy_info nf_synproxy_info
 #endif
diff --git a/libc/kernel/uapi/linux/netfilter/xt_connlabel.h b/libc/kernel/uapi/linux/netfilter/xt_connlabel.h
index f59cbee..7548fa1 100644
--- a/libc/kernel/uapi/linux/netfilter/xt_connlabel.h
+++ b/libc/kernel/uapi/linux/netfilter/xt_connlabel.h
@@ -16,6 +16,8 @@
  ***
  ****************************************************************************
  ****************************************************************************/
+#ifndef _UAPI_XT_CONNLABEL_H
+#define _UAPI_XT_CONNLABEL_H
 #include <linux/types.h>
 #define XT_CONNLABEL_MAXBIT 127
 enum xt_connlabel_mtopts {
@@ -26,3 +28,4 @@
   __u16 bit;
   __u16 options;
 };
+#endif
diff --git a/libc/kernel/uapi/linux/netfilter/xt_nfacct.h b/libc/kernel/uapi/linux/netfilter/xt_nfacct.h
index 4060002..a2b042e 100644
--- a/libc/kernel/uapi/linux/netfilter/xt_nfacct.h
+++ b/libc/kernel/uapi/linux/netfilter/xt_nfacct.h
@@ -24,4 +24,8 @@
   char name[NFACCT_NAME_MAX];
   struct nf_acct * nfacct;
 };
+struct xt_nfacct_match_info_v1 {
+  char name[NFACCT_NAME_MAX];
+  struct nf_acct * nfacct __attribute__((aligned(8)));
+};
 #endif
diff --git a/libc/kernel/uapi/linux/netfilter/xt_owner.h b/libc/kernel/uapi/linux/netfilter/xt_owner.h
index d829dab..e077aad 100644
--- a/libc/kernel/uapi/linux/netfilter/xt_owner.h
+++ b/libc/kernel/uapi/linux/netfilter/xt_owner.h
@@ -23,7 +23,9 @@
   XT_OWNER_UID = 1 << 0,
   XT_OWNER_GID = 1 << 1,
   XT_OWNER_SOCKET = 1 << 2,
+  XT_OWNER_SUPPL_GROUPS = 1 << 3,
 };
+#define XT_OWNER_MASK (XT_OWNER_UID | XT_OWNER_GID | XT_OWNER_SOCKET | XT_OWNER_SUPPL_GROUPS)
 struct xt_owner_match_info {
   __u32 uid_min, uid_max;
   __u32 gid_min, gid_max;
diff --git a/libc/kernel/uapi/linux/flat.h b/libc/kernel/uapi/linux/nexthop.h
similarity index 60%
copy from libc/kernel/uapi/linux/flat.h
copy to libc/kernel/uapi/linux/nexthop.h
index d2af100..a2a959f 100644
--- a/libc/kernel/uapi/linux/flat.h
+++ b/libc/kernel/uapi/linux/nexthop.h
@@ -16,27 +16,40 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _UAPI_LINUX_FLAT_H
-#define _UAPI_LINUX_FLAT_H
-#define FLAT_VERSION 0x00000004L
-#define MAX_SHARED_LIBS (1)
-struct flat_hdr {
-  char magic[4];
-  unsigned long rev;
-  unsigned long entry;
-  unsigned long data_start;
-  unsigned long data_end;
-  unsigned long bss_end;
-  unsigned long stack_size;
-  unsigned long reloc_start;
-  unsigned long reloc_count;
-  unsigned long flags;
-  unsigned long build_date;
-  unsigned long filler[5];
+#ifndef _UAPI_LINUX_NEXTHOP_H
+#define _UAPI_LINUX_NEXTHOP_H
+#include <linux/types.h>
+struct nhmsg {
+  unsigned char nh_family;
+  unsigned char nh_scope;
+  unsigned char nh_protocol;
+  unsigned char resvd;
+  unsigned int nh_flags;
 };
-#define FLAT_FLAG_RAM 0x0001
-#define FLAT_FLAG_GOTPIC 0x0002
-#define FLAT_FLAG_GZIP 0x0004
-#define FLAT_FLAG_GZDATA 0x0008
-#define FLAT_FLAG_KTRACE 0x0010
+struct nexthop_grp {
+  __u32 id;
+  __u8 weight;
+  __u8 resvd1;
+  __u16 resvd2;
+};
+enum {
+  NEXTHOP_GRP_TYPE_MPATH,
+  __NEXTHOP_GRP_TYPE_MAX,
+};
+#define NEXTHOP_GRP_TYPE_MAX (__NEXTHOP_GRP_TYPE_MAX - 1)
+enum {
+  NHA_UNSPEC,
+  NHA_ID,
+  NHA_GROUP,
+  NHA_GROUP_TYPE,
+  NHA_BLACKHOLE,
+  NHA_OIF,
+  NHA_GATEWAY,
+  NHA_ENCAP_TYPE,
+  NHA_ENCAP,
+  NHA_GROUPS,
+  NHA_MASTER,
+  __NHA_MAX,
+};
+#define NHA_MAX (__NHA_MAX - 1)
 #endif
diff --git a/libc/kernel/uapi/linux/nl80211.h b/libc/kernel/uapi/linux/nl80211.h
index 12b37ae..082601d 100644
--- a/libc/kernel/uapi/linux/nl80211.h
+++ b/libc/kernel/uapi/linux/nl80211.h
@@ -463,6 +463,8 @@
   NL80211_ATTR_AIRTIME_WEIGHT,
   NL80211_ATTR_STA_TX_POWER_SETTING,
   NL80211_ATTR_STA_TX_POWER,
+  NL80211_ATTR_SAE_PASSWORD,
+  NL80211_ATTR_TWT_RESPONDER,
   __NL80211_ATTR_AFTER_LAST,
   NUM_NL80211_ATTR = __NL80211_ATTR_AFTER_LAST,
   NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1
@@ -1017,6 +1019,7 @@
 enum nl80211_wpa_versions {
   NL80211_WPA_VERSION_1 = 1 << 0,
   NL80211_WPA_VERSION_2 = 1 << 1,
+  NL80211_WPA_VERSION_3 = 1 << 2,
 };
 enum nl80211_key_default_types {
   __NL80211_KEY_DEFAULT_TYPE_INVALID,
@@ -1284,7 +1287,7 @@
   NL80211_FEATURE_TDLS_CHANNEL_SWITCH = 1 << 28,
   NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR = 1 << 29,
   NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR = 1 << 30,
-  NL80211_FEATURE_ND_RANDOM_MAC_ADDR = 1 << 31,
+  NL80211_FEATURE_ND_RANDOM_MAC_ADDR = 1U << 31,
 };
 enum nl80211_ext_feature_index {
   NL80211_EXT_FEATURE_VHT_IBSS,
@@ -1326,6 +1329,7 @@
   NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD,
   NL80211_EXT_FEATURE_EXT_KEY_ID,
   NL80211_EXT_FEATURE_STA_TX_PWR,
+  NL80211_EXT_FEATURE_SAE_OFFLOAD,
   NUM_NL80211_EXT_FEATURES,
   MAX_NL80211_EXT_FEATURES = NUM_NL80211_EXT_FEATURES - 1
 };
diff --git a/libc/kernel/uapi/linux/pci_regs.h b/libc/kernel/uapi/linux/pci_regs.h
index 4c8cc95..bd4d98f 100644
--- a/libc/kernel/uapi/linux/pci_regs.h
+++ b/libc/kernel/uapi/linux/pci_regs.h
@@ -437,6 +437,7 @@
 #define PCI_EXP_LNKCAP_SLS_5_0GB 0x00000002
 #define PCI_EXP_LNKCAP_SLS_8_0GB 0x00000003
 #define PCI_EXP_LNKCAP_SLS_16_0GB 0x00000004
+#define PCI_EXP_LNKCAP_SLS_32_0GB 0x00000005
 #define PCI_EXP_LNKCAP_MLW 0x000003f0
 #define PCI_EXP_LNKCAP_ASPMS 0x00000c00
 #define PCI_EXP_LNKCAP_L0SEL 0x00007000
@@ -465,6 +466,7 @@
 #define PCI_EXP_LNKSTA_CLS_5_0GB 0x0002
 #define PCI_EXP_LNKSTA_CLS_8_0GB 0x0003
 #define PCI_EXP_LNKSTA_CLS_16_0GB 0x0004
+#define PCI_EXP_LNKSTA_CLS_32_0GB 0x0005
 #define PCI_EXP_LNKSTA_NLW 0x03f0
 #define PCI_EXP_LNKSTA_NLW_X1 0x0010
 #define PCI_EXP_LNKSTA_NLW_X2 0x0020
@@ -562,6 +564,7 @@
 #define PCI_EXP_LNKCAP2_SLS_5_0GB 0x00000004
 #define PCI_EXP_LNKCAP2_SLS_8_0GB 0x00000008
 #define PCI_EXP_LNKCAP2_SLS_16_0GB 0x00000010
+#define PCI_EXP_LNKCAP2_SLS_32_0GB 0x00000020
 #define PCI_EXP_LNKCAP2_CROSSLINK 0x00000100
 #define PCI_EXP_LNKCTL2 48
 #define PCI_EXP_LNKCTL2_TLS 0x000f
@@ -569,6 +572,7 @@
 #define PCI_EXP_LNKCTL2_TLS_5_0GT 0x0002
 #define PCI_EXP_LNKCTL2_TLS_8_0GT 0x0003
 #define PCI_EXP_LNKCTL2_TLS_16_0GT 0x0004
+#define PCI_EXP_LNKCTL2_TLS_32_0GT 0x0005
 #define PCI_EXP_LNKSTA2 50
 #define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 52
 #define PCI_EXP_SLTCAP2 52
diff --git a/libc/kernel/uapi/linux/pkt_cls.h b/libc/kernel/uapi/linux/pkt_cls.h
index 6db3a6d..0727916 100644
--- a/libc/kernel/uapi/linux/pkt_cls.h
+++ b/libc/kernel/uapi/linux/pkt_cls.h
@@ -94,6 +94,9 @@
   TCA_ID_SIMP = TCA_ACT_SIMP,
   TCA_ID_IFE = TCA_ACT_IFE,
   TCA_ID_SAMPLE = TCA_ACT_SAMPLE,
+  TCA_ID_CTINFO,
+  TCA_ID_MPLS,
+  TCA_ID_CT,
   __TCA_ID_MAX = 255
 };
 #define TCA_ID_MAX __TCA_ID_MAX
@@ -431,10 +434,24 @@
   TCA_FLOWER_KEY_PORT_SRC_MAX,
   TCA_FLOWER_KEY_PORT_DST_MIN,
   TCA_FLOWER_KEY_PORT_DST_MAX,
+  TCA_FLOWER_KEY_CT_STATE,
+  TCA_FLOWER_KEY_CT_STATE_MASK,
+  TCA_FLOWER_KEY_CT_ZONE,
+  TCA_FLOWER_KEY_CT_ZONE_MASK,
+  TCA_FLOWER_KEY_CT_MARK,
+  TCA_FLOWER_KEY_CT_MARK_MASK,
+  TCA_FLOWER_KEY_CT_LABELS,
+  TCA_FLOWER_KEY_CT_LABELS_MASK,
   __TCA_FLOWER_MAX,
 };
 #define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
 enum {
+  TCA_FLOWER_KEY_CT_FLAGS_NEW = 1 << 0,
+  TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED = 1 << 1,
+  TCA_FLOWER_KEY_CT_FLAGS_RELATED = 1 << 2,
+  TCA_FLOWER_KEY_CT_FLAGS_TRACKED = 1 << 3,
+};
+enum {
   TCA_FLOWER_KEY_ENC_OPTS_UNSPEC,
   TCA_FLOWER_KEY_ENC_OPTS_GENEVE,
   __TCA_FLOWER_KEY_ENC_OPTS_MAX,
diff --git a/libc/kernel/uapi/linux/pkt_sched.h b/libc/kernel/uapi/linux/pkt_sched.h
index 2e1f24b..15ee3b0 100644
--- a/libc/kernel/uapi/linux/pkt_sched.h
+++ b/libc/kernel/uapi/linux/pkt_sched.h
@@ -18,6 +18,7 @@
  ****************************************************************************/
 #ifndef __LINUX_PKT_SCHED_H
 #define __LINUX_PKT_SCHED_H
+#include <linux/const.h>
 #include <linux/types.h>
 #define TC_PRIO_BESTEFFORT 0
 #define TC_PRIO_FILLER 1
@@ -740,8 +741,9 @@
   __s32 delta;
   __s32 clockid;
   __u32 flags;
-#define TC_ETF_DEADLINE_MODE_ON BIT(0)
-#define TC_ETF_OFFLOAD_ON BIT(1)
+#define TC_ETF_DEADLINE_MODE_ON _BITUL(0)
+#define TC_ETF_OFFLOAD_ON _BITUL(1)
+#define TC_ETF_SKIP_SOCK_CHECK _BITUL(2)
 };
 enum {
   TCA_ETF_UNSPEC,
@@ -875,6 +877,7 @@
   __TCA_TAPRIO_SCHED_MAX,
 };
 #define TCA_TAPRIO_SCHED_MAX (__TCA_TAPRIO_SCHED_MAX - 1)
+#define TCA_TAPRIO_ATTR_FLAG_TXTIME_ASSIST 0x1
 enum {
   TCA_TAPRIO_ATTR_UNSPEC,
   TCA_TAPRIO_ATTR_PRIOMAP,
@@ -886,6 +889,8 @@
   TCA_TAPRIO_ATTR_ADMIN_SCHED,
   TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME,
   TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME_EXTENSION,
+  TCA_TAPRIO_ATTR_FLAGS,
+  TCA_TAPRIO_ATTR_TXTIME_DELAY,
   __TCA_TAPRIO_ATTR_MAX,
 };
 #define TCA_TAPRIO_ATTR_MAX (__TCA_TAPRIO_ATTR_MAX - 1)
diff --git a/libc/kernel/uapi/linux/ptrace.h b/libc/kernel/uapi/linux/ptrace.h
index 4a68738..a1528db 100644
--- a/libc/kernel/uapi/linux/ptrace.h
+++ b/libc/kernel/uapi/linux/ptrace.h
@@ -55,6 +55,34 @@
   __u64 filter_off;
   __u64 flags;
 };
+#define PTRACE_GET_SYSCALL_INFO 0x420e
+#define PTRACE_SYSCALL_INFO_NONE 0
+#define PTRACE_SYSCALL_INFO_ENTRY 1
+#define PTRACE_SYSCALL_INFO_EXIT 2
+#define PTRACE_SYSCALL_INFO_SECCOMP 3
+struct ptrace_syscall_info {
+  __u8 op;
+  __u32 arch __attribute__((__aligned__(sizeof(__u32))));
+  __u64 instruction_pointer;
+  __u64 stack_pointer;
+  union {
+    struct {
+      __u64 nr;
+      __u64 args[6];
+    } entry;
+    struct {
+      __s64 rval;
+      __u8 is_error;
+    } exit;
+    struct {
+      __u64 nr;
+      __u64 args[6];
+      __u32 ret_data;
+    } seccomp;
+  };
+};
+#define PTRACE_EVENTMSG_SYSCALL_ENTRY 1
+#define PTRACE_EVENTMSG_SYSCALL_EXIT 2
 #define PTRACE_PEEKSIGINFO_SHARED (1 << 0)
 #define PTRACE_EVENT_FORK 1
 #define PTRACE_EVENT_VFORK 2
diff --git a/libc/kernel/uapi/linux/rds.h b/libc/kernel/uapi/linux/rds.h
index 951427f..537aab5 100644
--- a/libc/kernel/uapi/linux/rds.h
+++ b/libc/kernel/uapi/linux/rds.h
@@ -170,6 +170,8 @@
   __u32 rdma_mr_max;
   __u32 rdma_mr_size;
   __u8 tos;
+  __u8 sl;
+  __u32 cache_allocs;
 };
 struct rds6_info_rdma_connection {
   struct in6_addr src_addr;
@@ -182,6 +184,8 @@
   __u32 rdma_mr_max;
   __u32 rdma_mr_size;
   __u8 tos;
+  __u8 sl;
+  __u32 cache_allocs;
 };
 enum rds_message_rxpath_latency {
   RDS_MSG_RX_HDR_TO_DGRAM_START = 0,
diff --git a/libc/kernel/uapi/linux/rtnetlink.h b/libc/kernel/uapi/linux/rtnetlink.h
index 33af1b3..b0feb7e 100644
--- a/libc/kernel/uapi/linux/rtnetlink.h
+++ b/libc/kernel/uapi/linux/rtnetlink.h
@@ -139,6 +139,12 @@
 #define RTM_DELCHAIN RTM_DELCHAIN
   RTM_GETCHAIN,
 #define RTM_GETCHAIN RTM_GETCHAIN
+  RTM_NEWNEXTHOP = 104,
+#define RTM_NEWNEXTHOP RTM_NEWNEXTHOP
+  RTM_DELNEXTHOP,
+#define RTM_DELNEXTHOP RTM_DELNEXTHOP
+  RTM_GETNEXTHOP,
+#define RTM_GETNEXTHOP RTM_GETNEXTHOP
   __RTM_MAX,
 #define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1)
 };
@@ -257,6 +263,7 @@
   RTA_IP_PROTO,
   RTA_SPORT,
   RTA_DPORT,
+  RTA_NH_ID,
   __RTA_MAX
 };
 #define RTA_MAX (__RTA_MAX - 1)
@@ -522,6 +529,8 @@
 #define RTNLGRP_IPV4_MROUTE_R RTNLGRP_IPV4_MROUTE_R
   RTNLGRP_IPV6_MROUTE_R,
 #define RTNLGRP_IPV6_MROUTE_R RTNLGRP_IPV6_MROUTE_R
+  RTNLGRP_NEXTHOP,
+#define RTNLGRP_NEXTHOP RTNLGRP_NEXTHOP
   __RTNLGRP_MAX
 };
 #define RTNLGRP_MAX (__RTNLGRP_MAX - 1)
diff --git a/libc/kernel/uapi/linux/sched.h b/libc/kernel/uapi/linux/sched.h
index 0460083..b396348 100644
--- a/libc/kernel/uapi/linux/sched.h
+++ b/libc/kernel/uapi/linux/sched.h
@@ -18,6 +18,7 @@
  ****************************************************************************/
 #ifndef _UAPI_LINUX_SCHED_H
 #define _UAPI_LINUX_SCHED_H
+#include <linux/types.h>
 #define CSIGNAL 0x000000ff
 #define CLONE_VM 0x00000100
 #define CLONE_FS 0x00000200
@@ -43,6 +44,16 @@
 #define CLONE_NEWPID 0x20000000
 #define CLONE_NEWNET 0x40000000
 #define CLONE_IO 0x80000000
+struct clone_args {
+  __aligned_u64 flags;
+  __aligned_u64 pidfd;
+  __aligned_u64 child_tid;
+  __aligned_u64 parent_tid;
+  __aligned_u64 exit_signal;
+  __aligned_u64 stack;
+  __aligned_u64 stack_size;
+  __aligned_u64 tls;
+};
 #define SCHED_NORMAL 0
 #define SCHED_FIFO 1
 #define SCHED_RR 2
@@ -53,5 +64,11 @@
 #define SCHED_FLAG_RESET_ON_FORK 0x01
 #define SCHED_FLAG_RECLAIM 0x02
 #define SCHED_FLAG_DL_OVERRUN 0x04
-#define SCHED_FLAG_ALL (SCHED_FLAG_RESET_ON_FORK | SCHED_FLAG_RECLAIM | SCHED_FLAG_DL_OVERRUN)
+#define SCHED_FLAG_KEEP_POLICY 0x08
+#define SCHED_FLAG_KEEP_PARAMS 0x10
+#define SCHED_FLAG_UTIL_CLAMP_MIN 0x20
+#define SCHED_FLAG_UTIL_CLAMP_MAX 0x40
+#define SCHED_FLAG_KEEP_ALL (SCHED_FLAG_KEEP_POLICY | SCHED_FLAG_KEEP_PARAMS)
+#define SCHED_FLAG_UTIL_CLAMP (SCHED_FLAG_UTIL_CLAMP_MIN | SCHED_FLAG_UTIL_CLAMP_MAX)
+#define SCHED_FLAG_ALL (SCHED_FLAG_RESET_ON_FORK | SCHED_FLAG_RECLAIM | SCHED_FLAG_DL_OVERRUN | SCHED_FLAG_KEEP_ALL | SCHED_FLAG_UTIL_CLAMP)
 #endif
diff --git a/libc/kernel/uapi/linux/sched/types.h b/libc/kernel/uapi/linux/sched/types.h
index cf6f1c7..385b21a 100644
--- a/libc/kernel/uapi/linux/sched/types.h
+++ b/libc/kernel/uapi/linux/sched/types.h
@@ -23,6 +23,7 @@
   int sched_priority;
 };
 #define SCHED_ATTR_SIZE_VER0 48
+#define SCHED_ATTR_SIZE_VER1 56
 struct sched_attr {
   __u32 size;
   __u32 sched_policy;
@@ -32,5 +33,7 @@
   __u64 sched_runtime;
   __u64 sched_deadline;
   __u64 sched_period;
+  __u32 sched_util_min;
+  __u32 sched_util_max;
 };
 #endif
diff --git a/libc/kernel/uapi/linux/sed-opal.h b/libc/kernel/uapi/linux/sed-opal.h
index a532073..fc12509 100644
--- a/libc/kernel/uapi/linux/sed-opal.h
+++ b/libc/kernel/uapi/linux/sed-opal.h
@@ -25,6 +25,10 @@
   OPAL_MBR_ENABLE = 0x0,
   OPAL_MBR_DISABLE = 0x01,
 };
+enum opal_mbr_done_flag {
+  OPAL_MBR_NOT_DONE = 0x0,
+  OPAL_MBR_DONE = 0x01
+};
 enum opal_user {
   OPAL_ADMIN1 = 0x0,
   OPAL_USER1 = 0x01,
@@ -81,6 +85,17 @@
   __u8 enable_disable;
   __u8 __align[7];
 };
+struct opal_mbr_done {
+  struct opal_key key;
+  __u8 done_flag;
+  __u8 __align[7];
+};
+struct opal_shadow_mbr {
+  struct opal_key key;
+  const __u64 data;
+  __u64 offset;
+  __u64 size;
+};
 #define IOC_OPAL_SAVE _IOW('p', 220, struct opal_lock_unlock)
 #define IOC_OPAL_LOCK_UNLOCK _IOW('p', 221, struct opal_lock_unlock)
 #define IOC_OPAL_TAKE_OWNERSHIP _IOW('p', 222, struct opal_key)
@@ -93,4 +108,7 @@
 #define IOC_OPAL_ENABLE_DISABLE_MBR _IOW('p', 229, struct opal_mbr_data)
 #define IOC_OPAL_ERASE_LR _IOW('p', 230, struct opal_session_info)
 #define IOC_OPAL_SECURE_ERASE_LR _IOW('p', 231, struct opal_session_info)
+#define IOC_OPAL_PSID_REVERT_TPR _IOW('p', 232, struct opal_key)
+#define IOC_OPAL_MBR_DONE _IOW('p', 233, struct opal_mbr_done)
+#define IOC_OPAL_WRITE_SHADOW_MBR _IOW('p', 234, struct opal_shadow_mbr)
 #endif
diff --git a/libc/kernel/uapi/linux/serial_core.h b/libc/kernel/uapi/linux/serial_core.h
index c5ce9fe..29fcdf4 100644
--- a/libc/kernel/uapi/linux/serial_core.h
+++ b/libc/kernel/uapi/linux/serial_core.h
@@ -88,7 +88,6 @@
 #define PORT_M32R_SIO 68
 #define PORT_JSM 69
 #define PORT_PNX8XXX 70
-#define PORT_NETX 71
 #define PORT_SUNHV 72
 #define PORT_S3C2412 73
 #define PORT_UARTLITE 74
diff --git a/libc/kernel/uapi/linux/snmp.h b/libc/kernel/uapi/linux/snmp.h
index 2a48541..9f500ca 100644
--- a/libc/kernel/uapi/linux/snmp.h
+++ b/libc/kernel/uapi/linux/snmp.h
@@ -251,6 +251,7 @@
   LINUX_MIB_TCPZEROWINDOWDROP,
   LINUX_MIB_TCPRCVQDROP,
   LINUX_MIB_TCPWQUEUETOOBIG,
+  LINUX_MIB_TCPFASTOPENPASSIVEALTKEY,
   __LINUX_MIB_MAX
 };
 enum {
diff --git a/libc/kernel/uapi/linux/socket.h b/libc/kernel/uapi/linux/socket.h
index 4f52bcb..608d31f 100644
--- a/libc/kernel/uapi/linux/socket.h
+++ b/libc/kernel/uapi/linux/socket.h
@@ -19,10 +19,14 @@
 #ifndef _UAPI_LINUX_SOCKET_H
 #define _UAPI_LINUX_SOCKET_H
 #define _K_SS_MAXSIZE 128
-#define _K_SS_ALIGNSIZE (__alignof__(struct sockaddr *))
 typedef unsigned short __kernel_sa_family_t;
 struct sockaddr_storage {
-  __kernel_sa_family_t ss_family;
-  char __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
-} __attribute__((aligned(_K_SS_ALIGNSIZE)));
+  union {
+    struct {
+      __kernel_sa_family_t ss_family;
+      char __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
+    };
+    void * __align;
+  };
+};
 #endif
diff --git a/libc/kernel/uapi/linux/tc_act/tc_ct.h b/libc/kernel/uapi/linux/tc_act/tc_ct.h
new file mode 100644
index 0000000..0443b95
--- /dev/null
+++ b/libc/kernel/uapi/linux/tc_act/tc_ct.h
@@ -0,0 +1,52 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef __UAPI_TC_CT_H
+#define __UAPI_TC_CT_H
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+enum {
+  TCA_CT_UNSPEC,
+  TCA_CT_PARMS,
+  TCA_CT_TM,
+  TCA_CT_ACTION,
+  TCA_CT_ZONE,
+  TCA_CT_MARK,
+  TCA_CT_MARK_MASK,
+  TCA_CT_LABELS,
+  TCA_CT_LABELS_MASK,
+  TCA_CT_NAT_IPV4_MIN,
+  TCA_CT_NAT_IPV4_MAX,
+  TCA_CT_NAT_IPV6_MIN,
+  TCA_CT_NAT_IPV6_MAX,
+  TCA_CT_NAT_PORT_MIN,
+  TCA_CT_NAT_PORT_MAX,
+  TCA_CT_PAD,
+  __TCA_CT_MAX
+};
+#define TCA_CT_MAX (__TCA_CT_MAX - 1)
+#define TCA_CT_ACT_COMMIT (1 << 0)
+#define TCA_CT_ACT_FORCE (1 << 1)
+#define TCA_CT_ACT_CLEAR (1 << 2)
+#define TCA_CT_ACT_NAT (1 << 3)
+#define TCA_CT_ACT_NAT_SRC (1 << 4)
+#define TCA_CT_ACT_NAT_DST (1 << 5)
+struct tc_ct {
+  tc_gen;
+};
+#endif
diff --git a/libc/kernel/uapi/linux/isdn_divertif.h b/libc/kernel/uapi/linux/tc_act/tc_ctinfo.h
similarity index 66%
copy from libc/kernel/uapi/linux/isdn_divertif.h
copy to libc/kernel/uapi/linux/tc_act/tc_ctinfo.h
index d353113..18fdf60 100644
--- a/libc/kernel/uapi/linux/isdn_divertif.h
+++ b/libc/kernel/uapi/linux/tc_act/tc_ctinfo.h
@@ -16,15 +16,26 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _UAPI_LINUX_ISDN_DIVERTIF_H
-#define _UAPI_LINUX_ISDN_DIVERTIF_H
-#define DIVERT_IF_MAGIC 0x25873401
-#define DIVERT_CMD_REG 0x00
-#define DIVERT_CMD_REL 0x01
-#define DIVERT_NO_ERR 0x00
-#define DIVERT_CMD_ERR 0x01
-#define DIVERT_VER_ERR 0x02
-#define DIVERT_REG_ERR 0x03
-#define DIVERT_REL_ERR 0x04
-#define DIVERT_REG_NAME isdn_register_divert
+#ifndef __UAPI_TC_CTINFO_H
+#define __UAPI_TC_CTINFO_H
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+struct tc_ctinfo {
+  tc_gen;
+};
+enum {
+  TCA_CTINFO_UNSPEC,
+  TCA_CTINFO_PAD,
+  TCA_CTINFO_TM,
+  TCA_CTINFO_ACT,
+  TCA_CTINFO_ZONE,
+  TCA_CTINFO_PARMS_DSCP_MASK,
+  TCA_CTINFO_PARMS_DSCP_STATEMASK,
+  TCA_CTINFO_PARMS_CPMARK_MASK,
+  TCA_CTINFO_STATS_DSCP_SET,
+  TCA_CTINFO_STATS_DSCP_ERROR,
+  TCA_CTINFO_STATS_CPMARK_SET,
+  __TCA_CTINFO_MAX
+};
+#define TCA_CTINFO_MAX (__TCA_CTINFO_MAX - 1)
 #endif
diff --git a/libc/kernel/uapi/linux/isdn_divertif.h b/libc/kernel/uapi/linux/tc_act/tc_mpls.h
similarity index 67%
rename from libc/kernel/uapi/linux/isdn_divertif.h
rename to libc/kernel/uapi/linux/tc_act/tc_mpls.h
index d353113..e1a4905 100644
--- a/libc/kernel/uapi/linux/isdn_divertif.h
+++ b/libc/kernel/uapi/linux/tc_act/tc_mpls.h
@@ -16,15 +16,28 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _UAPI_LINUX_ISDN_DIVERTIF_H
-#define _UAPI_LINUX_ISDN_DIVERTIF_H
-#define DIVERT_IF_MAGIC 0x25873401
-#define DIVERT_CMD_REG 0x00
-#define DIVERT_CMD_REL 0x01
-#define DIVERT_NO_ERR 0x00
-#define DIVERT_CMD_ERR 0x01
-#define DIVERT_VER_ERR 0x02
-#define DIVERT_REG_ERR 0x03
-#define DIVERT_REL_ERR 0x04
-#define DIVERT_REG_NAME isdn_register_divert
+#ifndef __LINUX_TC_MPLS_H
+#define __LINUX_TC_MPLS_H
+#include <linux/pkt_cls.h>
+#define TCA_MPLS_ACT_POP 1
+#define TCA_MPLS_ACT_PUSH 2
+#define TCA_MPLS_ACT_MODIFY 3
+#define TCA_MPLS_ACT_DEC_TTL 4
+struct tc_mpls {
+  tc_gen;
+  int m_action;
+};
+enum {
+  TCA_MPLS_UNSPEC,
+  TCA_MPLS_TM,
+  TCA_MPLS_PARMS,
+  TCA_MPLS_PAD,
+  TCA_MPLS_PROTO,
+  TCA_MPLS_LABEL,
+  TCA_MPLS_TC,
+  TCA_MPLS_TTL,
+  TCA_MPLS_BOS,
+  __TCA_MPLS_MAX,
+};
+#define TCA_MPLS_MAX (__TCA_MPLS_MAX - 1)
 #endif
diff --git a/libc/kernel/uapi/linux/tcp.h b/libc/kernel/uapi/linux/tcp.h
index ce3d735..1ec025f 100644
--- a/libc/kernel/uapi/linux/tcp.h
+++ b/libc/kernel/uapi/linux/tcp.h
@@ -92,6 +92,7 @@
 #define TCP_ZEROCOPY_RECEIVE 35
 #define TCP_INQ 36
 #define TCP_CM_INQ TCP_INQ
+#define TCP_TX_DELAY 37
 #define TCP_REPAIR_ON 1
 #define TCP_REPAIR_OFF 0
 #define TCP_REPAIR_OFF_NO_WP - 1
diff --git a/libc/kernel/uapi/linux/unix_diag.h b/libc/kernel/uapi/linux/unix_diag.h
index 837ab5a..4bcc47a 100644
--- a/libc/kernel/uapi/linux/unix_diag.h
+++ b/libc/kernel/uapi/linux/unix_diag.h
@@ -34,6 +34,7 @@
 #define UDIAG_SHOW_ICONS 0x00000008
 #define UDIAG_SHOW_RQLEN 0x00000010
 #define UDIAG_SHOW_MEMINFO 0x00000020
+#define UDIAG_SHOW_UID 0x00000040
 struct unix_diag_msg {
   __u8 udiag_family;
   __u8 udiag_type;
@@ -50,6 +51,7 @@
   UNIX_DIAG_RQLEN,
   UNIX_DIAG_MEMINFO,
   UNIX_DIAG_SHUTDOWN,
+  UNIX_DIAG_UID,
   __UNIX_DIAG_MAX,
 };
 #define UNIX_DIAG_MAX (__UNIX_DIAG_MAX - 1)
diff --git a/libc/kernel/uapi/linux/usbdevice_fs.h b/libc/kernel/uapi/linux/usbdevice_fs.h
index 87afabe..03f3bfb 100644
--- a/libc/kernel/uapi/linux/usbdevice_fs.h
+++ b/libc/kernel/uapi/linux/usbdevice_fs.h
@@ -52,6 +52,14 @@
   unsigned int devnum;
   unsigned char slow;
 };
+struct usbdevfs_conninfo_ex {
+  __u32 size;
+  __u32 busnum;
+  __u32 devnum;
+  __u32 speed;
+  __u8 num_ports;
+  __u8 ports[7];
+};
 #define USBDEVFS_URB_SHORT_NOT_OK 0x01
 #define USBDEVFS_URB_ISO_ASAP 0x02
 #define USBDEVFS_URB_BULK_CONTINUATION 0x04
@@ -101,6 +109,7 @@
 #define USBDEVFS_CAP_REAP_AFTER_DISCONNECT 0x10
 #define USBDEVFS_CAP_MMAP 0x20
 #define USBDEVFS_CAP_DROP_PRIVILEGES 0x40
+#define USBDEVFS_CAP_CONNINFO_EX 0x80
 #define USBDEVFS_DISCONNECT_CLAIM_IF_DRIVER 0x01
 #define USBDEVFS_DISCONNECT_CLAIM_EXCEPT_DRIVER 0x02
 struct usbdevfs_disconnect_claim {
@@ -148,4 +157,5 @@
 #define USBDEVFS_FREE_STREAMS _IOR('U', 29, struct usbdevfs_streams)
 #define USBDEVFS_DROP_PRIVILEGES _IOW('U', 30, __u32)
 #define USBDEVFS_GET_SPEED _IO('U', 31)
+#define USBDEVFS_CONNINFO_EX(len) _IOC(_IOC_READ, 'U', 32, len)
 #endif
diff --git a/libc/kernel/uapi/linux/v4l2-controls.h b/libc/kernel/uapi/linux/v4l2-controls.h
index 7a133f5..9288710 100644
--- a/libc/kernel/uapi/linux/v4l2-controls.h
+++ b/libc/kernel/uapi/linux/v4l2-controls.h
@@ -299,6 +299,8 @@
 #define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE (V4L2_CID_MPEG_BASE + 221)
 enum v4l2_mpeg_video_multi_slice_mode {
   V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE = 0,
+  V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB = 1,
+  V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES = 2,
   V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB = 1,
   V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES = 2,
 };
@@ -310,6 +312,22 @@
 #define V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE (V4L2_CID_MPEG_BASE + 227)
 #define V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE (V4L2_CID_MPEG_BASE + 228)
 #define V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME (V4L2_CID_MPEG_BASE + 229)
+#define V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL (V4L2_CID_MPEG_BASE + 270)
+enum v4l2_mpeg_video_mpeg2_level {
+  V4L2_MPEG_VIDEO_MPEG2_LEVEL_LOW = 0,
+  V4L2_MPEG_VIDEO_MPEG2_LEVEL_MAIN = 1,
+  V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH_1440 = 2,
+  V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH = 3,
+};
+#define V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE (V4L2_CID_MPEG_BASE + 271)
+enum v4l2_mpeg_video_mpeg2_profile {
+  V4L2_MPEG_VIDEO_MPEG2_PROFILE_SIMPLE = 0,
+  V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN = 1,
+  V4L2_MPEG_VIDEO_MPEG2_PROFILE_SNR_SCALABLE = 2,
+  V4L2_MPEG_VIDEO_MPEG2_PROFILE_SPATIALLY_SCALABLE = 3,
+  V4L2_MPEG_VIDEO_MPEG2_PROFILE_HIGH = 4,
+  V4L2_MPEG_VIDEO_MPEG2_PROFILE_MULTIVIEW = 5,
+};
 #define V4L2_CID_FWHT_I_FRAME_QP (V4L2_CID_MPEG_BASE + 290)
 #define V4L2_CID_FWHT_P_FRAME_QP (V4L2_CID_MPEG_BASE + 291)
 #define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP (V4L2_CID_MPEG_BASE + 300)
diff --git a/libc/kernel/uapi/linux/version.h b/libc/kernel/uapi/linux/version.h
index ab29f91..f78358d 100644
--- a/libc/kernel/uapi/linux/version.h
+++ b/libc/kernel/uapi/linux/version.h
@@ -16,5 +16,5 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#define LINUX_VERSION_CODE 328203
+#define LINUX_VERSION_CODE 328450
 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
diff --git a/libc/kernel/uapi/linux/videodev2.h b/libc/kernel/uapi/linux/videodev2.h
index f77c6bd..e81697e 100644
--- a/libc/kernel/uapi/linux/videodev2.h
+++ b/libc/kernel/uapi/linux/videodev2.h
@@ -27,7 +27,7 @@
 #define VIDEO_MAX_FRAME 32
 #define VIDEO_MAX_PLANES 8
 #define v4l2_fourcc(a,b,c,d) ((__u32) (a) | ((__u32) (b) << 8) | ((__u32) (c) << 16) | ((__u32) (d) << 24))
-#define v4l2_fourcc_be(a,b,c,d) (v4l2_fourcc(a, b, c, d) | (1 << 31))
+#define v4l2_fourcc_be(a,b,c,d) (v4l2_fourcc(a, b, c, d) | (1U << 31))
 enum v4l2_field {
   V4L2_FIELD_ANY = 0,
   V4L2_FIELD_NONE = 1,
diff --git a/libc/kernel/uapi/linux/virtio_ids.h b/libc/kernel/uapi/linux/virtio_ids.h
index 010d819..f7e1392 100644
--- a/libc/kernel/uapi/linux/virtio_ids.h
+++ b/libc/kernel/uapi/linux/virtio_ids.h
@@ -32,4 +32,6 @@
 #define VIRTIO_ID_INPUT 18
 #define VIRTIO_ID_VSOCK 19
 #define VIRTIO_ID_CRYPTO 20
+#define VIRTIO_ID_IOMMU 23
+#define VIRTIO_ID_PMEM 27
 #endif
diff --git a/libc/kernel/uapi/linux/virtio_iommu.h b/libc/kernel/uapi/linux/virtio_iommu.h
new file mode 100644
index 0000000..b08de57
--- /dev/null
+++ b/libc/kernel/uapi/linux/virtio_iommu.h
@@ -0,0 +1,136 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI_LINUX_VIRTIO_IOMMU_H
+#define _UAPI_LINUX_VIRTIO_IOMMU_H
+#include <linux/types.h>
+#define VIRTIO_IOMMU_F_INPUT_RANGE 0
+#define VIRTIO_IOMMU_F_DOMAIN_RANGE 1
+#define VIRTIO_IOMMU_F_MAP_UNMAP 2
+#define VIRTIO_IOMMU_F_BYPASS 3
+#define VIRTIO_IOMMU_F_PROBE 4
+#define VIRTIO_IOMMU_F_MMIO 5
+struct virtio_iommu_range_64 {
+  __le64 start;
+  __le64 end;
+};
+struct virtio_iommu_range_32 {
+  __le32 start;
+  __le32 end;
+};
+struct virtio_iommu_config {
+  __le64 page_size_mask;
+  struct virtio_iommu_range_64 input_range;
+  struct virtio_iommu_range_32 domain_range;
+  __le32 probe_size;
+};
+#define VIRTIO_IOMMU_T_ATTACH 0x01
+#define VIRTIO_IOMMU_T_DETACH 0x02
+#define VIRTIO_IOMMU_T_MAP 0x03
+#define VIRTIO_IOMMU_T_UNMAP 0x04
+#define VIRTIO_IOMMU_T_PROBE 0x05
+#define VIRTIO_IOMMU_S_OK 0x00
+#define VIRTIO_IOMMU_S_IOERR 0x01
+#define VIRTIO_IOMMU_S_UNSUPP 0x02
+#define VIRTIO_IOMMU_S_DEVERR 0x03
+#define VIRTIO_IOMMU_S_INVAL 0x04
+#define VIRTIO_IOMMU_S_RANGE 0x05
+#define VIRTIO_IOMMU_S_NOENT 0x06
+#define VIRTIO_IOMMU_S_FAULT 0x07
+#define VIRTIO_IOMMU_S_NOMEM 0x08
+struct virtio_iommu_req_head {
+  __u8 type;
+  __u8 reserved[3];
+};
+struct virtio_iommu_req_tail {
+  __u8 status;
+  __u8 reserved[3];
+};
+struct virtio_iommu_req_attach {
+  struct virtio_iommu_req_head head;
+  __le32 domain;
+  __le32 endpoint;
+  __u8 reserved[8];
+  struct virtio_iommu_req_tail tail;
+};
+struct virtio_iommu_req_detach {
+  struct virtio_iommu_req_head head;
+  __le32 domain;
+  __le32 endpoint;
+  __u8 reserved[8];
+  struct virtio_iommu_req_tail tail;
+};
+#define VIRTIO_IOMMU_MAP_F_READ (1 << 0)
+#define VIRTIO_IOMMU_MAP_F_WRITE (1 << 1)
+#define VIRTIO_IOMMU_MAP_F_MMIO (1 << 2)
+#define VIRTIO_IOMMU_MAP_F_MASK (VIRTIO_IOMMU_MAP_F_READ | VIRTIO_IOMMU_MAP_F_WRITE | VIRTIO_IOMMU_MAP_F_MMIO)
+struct virtio_iommu_req_map {
+  struct virtio_iommu_req_head head;
+  __le32 domain;
+  __le64 virt_start;
+  __le64 virt_end;
+  __le64 phys_start;
+  __le32 flags;
+  struct virtio_iommu_req_tail tail;
+};
+struct virtio_iommu_req_unmap {
+  struct virtio_iommu_req_head head;
+  __le32 domain;
+  __le64 virt_start;
+  __le64 virt_end;
+  __u8 reserved[4];
+  struct virtio_iommu_req_tail tail;
+};
+#define VIRTIO_IOMMU_PROBE_T_NONE 0
+#define VIRTIO_IOMMU_PROBE_T_RESV_MEM 1
+#define VIRTIO_IOMMU_PROBE_T_MASK 0xfff
+struct virtio_iommu_probe_property {
+  __le16 type;
+  __le16 length;
+};
+#define VIRTIO_IOMMU_RESV_MEM_T_RESERVED 0
+#define VIRTIO_IOMMU_RESV_MEM_T_MSI 1
+struct virtio_iommu_probe_resv_mem {
+  struct virtio_iommu_probe_property head;
+  __u8 subtype;
+  __u8 reserved[3];
+  __le64 start;
+  __le64 end;
+};
+struct virtio_iommu_req_probe {
+  struct virtio_iommu_req_head head;
+  __le32 endpoint;
+  __u8 reserved[64];
+  __u8 properties[];
+};
+#define VIRTIO_IOMMU_FAULT_R_UNKNOWN 0
+#define VIRTIO_IOMMU_FAULT_R_DOMAIN 1
+#define VIRTIO_IOMMU_FAULT_R_MAPPING 2
+#define VIRTIO_IOMMU_FAULT_F_READ (1 << 0)
+#define VIRTIO_IOMMU_FAULT_F_WRITE (1 << 1)
+#define VIRTIO_IOMMU_FAULT_F_EXEC (1 << 2)
+#define VIRTIO_IOMMU_FAULT_F_ADDRESS (1 << 8)
+struct virtio_iommu_fault {
+  __u8 reason;
+  __u8 reserved[3];
+  __le32 flags;
+  __le32 endpoint;
+  __u8 reserved2[4];
+  __le64 address;
+};
+#endif
diff --git a/libc/kernel/uapi/linux/wanrouter.h b/libc/kernel/uapi/linux/virtio_pmem.h
similarity index 74%
rename from libc/kernel/uapi/linux/wanrouter.h
rename to libc/kernel/uapi/linux/virtio_pmem.h
index 9bd45a3..38740f3 100644
--- a/libc/kernel/uapi/linux/wanrouter.h
+++ b/libc/kernel/uapi/linux/virtio_pmem.h
@@ -16,12 +16,20 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _UAPI_ROUTER_H
-#define _UAPI_ROUTER_H
-enum wan_states {
-  WAN_UNCONFIGURED,
-  WAN_DISCONNECTED,
-  WAN_CONNECTING,
-  WAN_CONNECTED
+#ifndef _UAPI_LINUX_VIRTIO_PMEM_H
+#define _UAPI_LINUX_VIRTIO_PMEM_H
+#include <linux/types.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+struct virtio_pmem_config {
+  __u64 start;
+  __u64 size;
+};
+#define VIRTIO_PMEM_REQ_TYPE_FLUSH 0
+struct virtio_pmem_resp {
+  __le32 ret;
+};
+struct virtio_pmem_req {
+  __le32 type;
 };
 #endif
diff --git a/libc/kernel/uapi/misc/habanalabs.h b/libc/kernel/uapi/misc/habanalabs.h
index 1029a67..8fcf30f 100644
--- a/libc/kernel/uapi/misc/habanalabs.h
+++ b/libc/kernel/uapi/misc/habanalabs.h
@@ -39,6 +39,23 @@
   GOYA_QUEUE_ID_TPC7,
   GOYA_QUEUE_ID_SIZE
 };
+enum goya_engine_id {
+  GOYA_ENGINE_ID_DMA_0 = 0,
+  GOYA_ENGINE_ID_DMA_1,
+  GOYA_ENGINE_ID_DMA_2,
+  GOYA_ENGINE_ID_DMA_3,
+  GOYA_ENGINE_ID_DMA_4,
+  GOYA_ENGINE_ID_MME_0,
+  GOYA_ENGINE_ID_TPC_0,
+  GOYA_ENGINE_ID_TPC_1,
+  GOYA_ENGINE_ID_TPC_2,
+  GOYA_ENGINE_ID_TPC_3,
+  GOYA_ENGINE_ID_TPC_4,
+  GOYA_ENGINE_ID_TPC_5,
+  GOYA_ENGINE_ID_TPC_6,
+  GOYA_ENGINE_ID_TPC_7,
+  GOYA_ENGINE_ID_SIZE
+};
 enum hl_device_status {
   HL_DEVICE_STATUS_OPERATIONAL,
   HL_DEVICE_STATUS_IN_RESET,
@@ -74,7 +91,7 @@
 };
 struct hl_info_hw_idle {
   __u32 is_idle;
-  __u32 pad;
+  __u32 busy_engines_mask;
 };
 struct hl_info_device_status {
   __u32 status;
diff --git a/libc/kernel/uapi/rdma/ib_user_cm.h b/libc/kernel/uapi/rdma/ib_user_cm.h
deleted file mode 100644
index 5ba46b8..0000000
--- a/libc/kernel/uapi/rdma/ib_user_cm.h
+++ /dev/null
@@ -1,265 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- ***   This header was automatically generated from a Linux kernel header
- ***   of the same name, to make information necessary for userspace to
- ***   call into the kernel available to libc.  It contains only constants,
- ***   structures, and macros generated from the original header, and thus,
- ***   contains no copyrightable information.
- ***
- ***   To edit the content of this header, modify the corresponding
- ***   source file (e.g. under external/kernel-headers/original/) then
- ***   run bionic/libc/kernel/tools/update_all.py
- ***
- ***   Any manual change here will be lost the next time this script will
- ***   be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef IB_USER_CM_H
-#define IB_USER_CM_H
-#include <linux/types.h>
-#include <rdma/ib_user_sa.h>
-#define IB_USER_CM_ABI_VERSION 5
-enum {
-  IB_USER_CM_CMD_CREATE_ID,
-  IB_USER_CM_CMD_DESTROY_ID,
-  IB_USER_CM_CMD_ATTR_ID,
-  IB_USER_CM_CMD_LISTEN,
-  IB_USER_CM_CMD_NOTIFY,
-  IB_USER_CM_CMD_SEND_REQ,
-  IB_USER_CM_CMD_SEND_REP,
-  IB_USER_CM_CMD_SEND_RTU,
-  IB_USER_CM_CMD_SEND_DREQ,
-  IB_USER_CM_CMD_SEND_DREP,
-  IB_USER_CM_CMD_SEND_REJ,
-  IB_USER_CM_CMD_SEND_MRA,
-  IB_USER_CM_CMD_SEND_LAP,
-  IB_USER_CM_CMD_SEND_APR,
-  IB_USER_CM_CMD_SEND_SIDR_REQ,
-  IB_USER_CM_CMD_SEND_SIDR_REP,
-  IB_USER_CM_CMD_EVENT,
-  IB_USER_CM_CMD_INIT_QP_ATTR,
-};
-struct ib_ucm_cmd_hdr {
-  __u32 cmd;
-  __u16 in;
-  __u16 out;
-};
-struct ib_ucm_create_id {
-  __aligned_u64 uid;
-  __aligned_u64 response;
-};
-struct ib_ucm_create_id_resp {
-  __u32 id;
-};
-struct ib_ucm_destroy_id {
-  __aligned_u64 response;
-  __u32 id;
-  __u32 reserved;
-};
-struct ib_ucm_destroy_id_resp {
-  __u32 events_reported;
-};
-struct ib_ucm_attr_id {
-  __aligned_u64 response;
-  __u32 id;
-  __u32 reserved;
-};
-struct ib_ucm_attr_id_resp {
-  __be64 service_id;
-  __be64 service_mask;
-  __be32 local_id;
-  __be32 remote_id;
-};
-struct ib_ucm_init_qp_attr {
-  __aligned_u64 response;
-  __u32 id;
-  __u32 qp_state;
-};
-struct ib_ucm_listen {
-  __be64 service_id;
-  __be64 service_mask;
-  __u32 id;
-  __u32 reserved;
-};
-struct ib_ucm_notify {
-  __u32 id;
-  __u32 event;
-};
-struct ib_ucm_private_data {
-  __aligned_u64 data;
-  __u32 id;
-  __u8 len;
-  __u8 reserved[3];
-};
-struct ib_ucm_req {
-  __u32 id;
-  __u32 qpn;
-  __u32 qp_type;
-  __u32 psn;
-  __be64 sid;
-  __aligned_u64 data;
-  __aligned_u64 primary_path;
-  __aligned_u64 alternate_path;
-  __u8 len;
-  __u8 peer_to_peer;
-  __u8 responder_resources;
-  __u8 initiator_depth;
-  __u8 remote_cm_response_timeout;
-  __u8 flow_control;
-  __u8 local_cm_response_timeout;
-  __u8 retry_count;
-  __u8 rnr_retry_count;
-  __u8 max_cm_retries;
-  __u8 srq;
-  __u8 reserved[5];
-};
-struct ib_ucm_rep {
-  __aligned_u64 uid;
-  __aligned_u64 data;
-  __u32 id;
-  __u32 qpn;
-  __u32 psn;
-  __u8 len;
-  __u8 responder_resources;
-  __u8 initiator_depth;
-  __u8 target_ack_delay;
-  __u8 failover_accepted;
-  __u8 flow_control;
-  __u8 rnr_retry_count;
-  __u8 srq;
-  __u8 reserved[4];
-};
-struct ib_ucm_info {
-  __u32 id;
-  __u32 status;
-  __aligned_u64 info;
-  __aligned_u64 data;
-  __u8 info_len;
-  __u8 data_len;
-  __u8 reserved[6];
-};
-struct ib_ucm_mra {
-  __aligned_u64 data;
-  __u32 id;
-  __u8 len;
-  __u8 timeout;
-  __u8 reserved[2];
-};
-struct ib_ucm_lap {
-  __aligned_u64 path;
-  __aligned_u64 data;
-  __u32 id;
-  __u8 len;
-  __u8 reserved[3];
-};
-struct ib_ucm_sidr_req {
-  __u32 id;
-  __u32 timeout;
-  __be64 sid;
-  __aligned_u64 data;
-  __aligned_u64 path;
-  __u16 reserved_pkey;
-  __u8 len;
-  __u8 max_cm_retries;
-  __u8 reserved[4];
-};
-struct ib_ucm_sidr_rep {
-  __u32 id;
-  __u32 qpn;
-  __u32 qkey;
-  __u32 status;
-  __aligned_u64 info;
-  __aligned_u64 data;
-  __u8 info_len;
-  __u8 data_len;
-  __u8 reserved[6];
-};
-struct ib_ucm_event_get {
-  __aligned_u64 response;
-  __aligned_u64 data;
-  __aligned_u64 info;
-  __u8 data_len;
-  __u8 info_len;
-  __u8 reserved[6];
-};
-struct ib_ucm_req_event_resp {
-  struct ib_user_path_rec primary_path;
-  struct ib_user_path_rec alternate_path;
-  __be64 remote_ca_guid;
-  __u32 remote_qkey;
-  __u32 remote_qpn;
-  __u32 qp_type;
-  __u32 starting_psn;
-  __u8 responder_resources;
-  __u8 initiator_depth;
-  __u8 local_cm_response_timeout;
-  __u8 flow_control;
-  __u8 remote_cm_response_timeout;
-  __u8 retry_count;
-  __u8 rnr_retry_count;
-  __u8 srq;
-  __u8 port;
-  __u8 reserved[7];
-};
-struct ib_ucm_rep_event_resp {
-  __be64 remote_ca_guid;
-  __u32 remote_qkey;
-  __u32 remote_qpn;
-  __u32 starting_psn;
-  __u8 responder_resources;
-  __u8 initiator_depth;
-  __u8 target_ack_delay;
-  __u8 failover_accepted;
-  __u8 flow_control;
-  __u8 rnr_retry_count;
-  __u8 srq;
-  __u8 reserved[5];
-};
-struct ib_ucm_rej_event_resp {
-  __u32 reason;
-};
-struct ib_ucm_mra_event_resp {
-  __u8 timeout;
-  __u8 reserved[3];
-};
-struct ib_ucm_lap_event_resp {
-  struct ib_user_path_rec path;
-};
-struct ib_ucm_apr_event_resp {
-  __u32 status;
-};
-struct ib_ucm_sidr_req_event_resp {
-  __u16 pkey;
-  __u8 port;
-  __u8 reserved;
-};
-struct ib_ucm_sidr_rep_event_resp {
-  __u32 status;
-  __u32 qkey;
-  __u32 qpn;
-};
-#define IB_UCM_PRES_DATA 0x01
-#define IB_UCM_PRES_INFO 0x02
-#define IB_UCM_PRES_PRIMARY 0x04
-#define IB_UCM_PRES_ALTERNATE 0x08
-struct ib_ucm_event_resp {
-  __aligned_u64 uid;
-  __u32 id;
-  __u32 event;
-  __u32 present;
-  __u32 reserved;
-  union {
-    struct ib_ucm_req_event_resp req_resp;
-    struct ib_ucm_rep_event_resp rep_resp;
-    struct ib_ucm_rej_event_resp rej_resp;
-    struct ib_ucm_mra_event_resp mra_resp;
-    struct ib_ucm_lap_event_resp lap_resp;
-    struct ib_ucm_apr_event_resp apr_resp;
-    struct ib_ucm_sidr_req_event_resp sidr_req_resp;
-    struct ib_ucm_sidr_rep_event_resp sidr_rep_resp;
-    __u32 send_status;
-  } u;
-};
-#endif
diff --git a/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h b/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h
index 66bd666..dcd281a 100644
--- a/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h
+++ b/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h
@@ -32,6 +32,7 @@
   MLX5_IB_METHOD_DEVX_OTHER = (1U << UVERBS_ID_NS_SHIFT),
   MLX5_IB_METHOD_DEVX_QUERY_UAR,
   MLX5_IB_METHOD_DEVX_QUERY_EQN,
+  MLX5_IB_METHOD_DEVX_SUBSCRIBE_EVENT,
 };
 enum mlx5_ib_devx_other_attrs {
   MLX5_IB_ATTR_DEVX_OTHER_CMD_IN = (1U << UVERBS_ID_NS_SHIFT),
@@ -66,6 +67,13 @@
   MLX5_IB_ATTR_DEVX_OBJ_QUERY_ASYNC_WR_ID,
   MLX5_IB_ATTR_DEVX_OBJ_QUERY_ASYNC_OUT_LEN,
 };
+enum mlx5_ib_devx_subscribe_event_attrs {
+  MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_FD_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_OBJ_HANDLE,
+  MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_TYPE_NUM_LIST,
+  MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_FD_NUM,
+  MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_COOKIE,
+};
 enum mlx5_ib_devx_query_eqn_attrs {
   MLX5_IB_ATTR_DEVX_QUERY_EQN_USER_VEC = (1U << UVERBS_ID_NS_SHIFT),
   MLX5_IB_ATTR_DEVX_QUERY_EQN_DEV_EQN,
@@ -94,15 +102,23 @@
 enum mlx5_ib_devx_async_cmd_fd_alloc_attrs {
   MLX5_IB_ATTR_DEVX_ASYNC_CMD_FD_ALLOC_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
 };
+enum mlx5_ib_devx_async_event_fd_alloc_attrs {
+  MLX5_IB_ATTR_DEVX_ASYNC_EVENT_FD_ALLOC_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_DEVX_ASYNC_EVENT_FD_ALLOC_FLAGS,
+};
 enum mlx5_ib_devx_async_cmd_fd_methods {
   MLX5_IB_METHOD_DEVX_ASYNC_CMD_FD_ALLOC = (1U << UVERBS_ID_NS_SHIFT),
 };
+enum mlx5_ib_devx_async_event_fd_methods {
+  MLX5_IB_METHOD_DEVX_ASYNC_EVENT_FD_ALLOC = (1U << UVERBS_ID_NS_SHIFT),
+};
 enum mlx5_ib_objects {
   MLX5_IB_OBJECT_DEVX = (1U << UVERBS_ID_NS_SHIFT),
   MLX5_IB_OBJECT_DEVX_OBJ,
   MLX5_IB_OBJECT_DEVX_UMEM,
   MLX5_IB_OBJECT_FLOW_MATCHER,
   MLX5_IB_OBJECT_DEVX_ASYNC_CMD_FD,
+  MLX5_IB_OBJECT_DEVX_ASYNC_EVENT_FD,
 };
 enum mlx5_ib_flow_matcher_create_attrs {
   MLX5_IB_ATTR_FLOW_MATCHER_CREATE_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
diff --git a/libc/kernel/uapi/rdma/mlx5_user_ioctl_verbs.h b/libc/kernel/uapi/rdma/mlx5_user_ioctl_verbs.h
index a75368d..64bc843 100644
--- a/libc/kernel/uapi/rdma/mlx5_user_ioctl_verbs.h
+++ b/libc/kernel/uapi/rdma/mlx5_user_ioctl_verbs.h
@@ -42,4 +42,11 @@
   MLX5_IB_UAPI_DM_TYPE_STEERING_SW_ICM,
   MLX5_IB_UAPI_DM_TYPE_HEADER_MODIFY_SW_ICM,
 };
+enum mlx5_ib_uapi_devx_create_event_channel_flags {
+  MLX5_IB_UAPI_DEVX_CR_EV_CH_FLAGS_OMIT_DATA = 1 << 0,
+};
+struct mlx5_ib_uapi_devx_async_event_hdr {
+  __aligned_u64 cookie;
+  __u8 out_data[];
+};
 #endif
diff --git a/libc/kernel/uapi/rdma/rdma_netlink.h b/libc/kernel/uapi/rdma/rdma_netlink.h
index bbb1822..ed585cf 100644
--- a/libc/kernel/uapi/rdma/rdma_netlink.h
+++ b/libc/kernel/uapi/rdma/rdma_netlink.h
@@ -136,6 +136,15 @@
   IWPM_NLA_HELLO_MAX
 };
 enum {
+  RDMA_NODE_IB_CA = 1,
+  RDMA_NODE_IB_SWITCH,
+  RDMA_NODE_IB_ROUTER,
+  RDMA_NODE_RNIC,
+  RDMA_NODE_USNIC,
+  RDMA_NODE_USNIC_UDP,
+  RDMA_NODE_UNSPECIFIED,
+};
+enum {
   RDMA_NL_LS_OP_RESOLVE = 0,
   RDMA_NL_LS_OP_SET_TIMEOUT,
   RDMA_NL_LS_OP_IP_RESOLVE,
@@ -191,11 +200,12 @@
   RDMA_NLDEV_CMD_RES_CQ_GET,
   RDMA_NLDEV_CMD_RES_MR_GET,
   RDMA_NLDEV_CMD_RES_PD_GET,
+  RDMA_NLDEV_CMD_GET_CHARDEV,
+  RDMA_NLDEV_CMD_STAT_SET,
+  RDMA_NLDEV_CMD_STAT_GET,
+  RDMA_NLDEV_CMD_STAT_DEL,
   RDMA_NLDEV_NUM_OPS
 };
-enum {
-  RDMA_NLDEV_ATTR_ENTRY_STRLEN = 16,
-};
 enum rdma_nldev_print_type {
   RDMA_NLDEV_PRINT_TYPE_UNSPEC,
   RDMA_NLDEV_PRINT_TYPE_HEX,
@@ -271,6 +281,31 @@
   RDMA_NLDEV_SYS_ATTR_NETNS_MODE,
   RDMA_NLDEV_ATTR_DEV_PROTOCOL,
   RDMA_NLDEV_NET_NS_FD,
+  RDMA_NLDEV_ATTR_CHARDEV_TYPE,
+  RDMA_NLDEV_ATTR_CHARDEV_NAME,
+  RDMA_NLDEV_ATTR_CHARDEV_ABI,
+  RDMA_NLDEV_ATTR_CHARDEV,
+  RDMA_NLDEV_ATTR_UVERBS_DRIVER_ID,
+  RDMA_NLDEV_ATTR_STAT_MODE,
+  RDMA_NLDEV_ATTR_STAT_RES,
+  RDMA_NLDEV_ATTR_STAT_AUTO_MODE_MASK,
+  RDMA_NLDEV_ATTR_STAT_COUNTER,
+  RDMA_NLDEV_ATTR_STAT_COUNTER_ENTRY,
+  RDMA_NLDEV_ATTR_STAT_COUNTER_ID,
+  RDMA_NLDEV_ATTR_STAT_HWCOUNTERS,
+  RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY,
+  RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY_NAME,
+  RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY_VALUE,
+  RDMA_NLDEV_ATTR_DEV_DIM,
   RDMA_NLDEV_ATTR_MAX
 };
+enum rdma_nl_counter_mode {
+  RDMA_COUNTER_MODE_NONE,
+  RDMA_COUNTER_MODE_AUTO,
+  RDMA_COUNTER_MODE_MANUAL,
+  RDMA_COUNTER_MODE_MAX,
+};
+enum rdma_nl_counter_mask {
+  RDMA_COUNTER_MASK_QP_TYPE = 1,
+};
 #endif
diff --git a/libc/kernel/uapi/rdma/rdma_user_ioctl_cmds.h b/libc/kernel/uapi/rdma/rdma_user_ioctl_cmds.h
index 2692e3a..b779bc8 100644
--- a/libc/kernel/uapi/rdma/rdma_user_ioctl_cmds.h
+++ b/libc/kernel/uapi/rdma/rdma_user_ioctl_cmds.h
@@ -71,5 +71,6 @@
   RDMA_DRIVER_HFI1,
   RDMA_DRIVER_QIB,
   RDMA_DRIVER_EFA,
+  RDMA_DRIVER_SIW,
 };
 #endif
diff --git a/libc/kernel/uapi/linux/flat.h b/libc/kernel/uapi/rdma/rvt-abi.h
similarity index 61%
rename from libc/kernel/uapi/linux/flat.h
rename to libc/kernel/uapi/rdma/rvt-abi.h
index d2af100..49632ee 100644
--- a/libc/kernel/uapi/linux/flat.h
+++ b/libc/kernel/uapi/rdma/rvt-abi.h
@@ -16,27 +16,32 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _UAPI_LINUX_FLAT_H
-#define _UAPI_LINUX_FLAT_H
-#define FLAT_VERSION 0x00000004L
-#define MAX_SHARED_LIBS (1)
-struct flat_hdr {
-  char magic[4];
-  unsigned long rev;
-  unsigned long entry;
-  unsigned long data_start;
-  unsigned long data_end;
-  unsigned long bss_end;
-  unsigned long stack_size;
-  unsigned long reloc_start;
-  unsigned long reloc_count;
-  unsigned long flags;
-  unsigned long build_date;
-  unsigned long filler[5];
+#ifndef RVT_ABI_USER_H
+#define RVT_ABI_USER_H
+#include <linux/types.h>
+#include <rdma/ib_user_verbs.h>
+#ifndef RDMA_ATOMIC_UAPI
+#define RDMA_ATOMIC_UAPI(_type,_name) struct { _type val; } _name
+#endif
+struct rvt_wqe_sge {
+  __aligned_u64 addr;
+  __u32 length;
+  __u32 lkey;
 };
-#define FLAT_FLAG_RAM 0x0001
-#define FLAT_FLAG_GOTPIC 0x0002
-#define FLAT_FLAG_GZIP 0x0004
-#define FLAT_FLAG_GZDATA 0x0008
-#define FLAT_FLAG_KTRACE 0x0010
+struct rvt_cq_wc {
+  RDMA_ATOMIC_UAPI(__u32, head);
+  RDMA_ATOMIC_UAPI(__u32, tail);
+  struct ib_uverbs_wc uqueue[];
+};
+struct rvt_rwqe {
+  __u64 wr_id;
+  __u8 num_sge;
+  __u8 padding[7];
+  struct rvt_wqe_sge sg_list[];
+};
+struct rvt_rwq {
+  RDMA_ATOMIC_UAPI(__u32, head);
+  RDMA_ATOMIC_UAPI(__u32, tail);
+  struct rvt_rwqe wq[];
+};
 #endif
diff --git a/libc/kernel/uapi/rdma/siw-abi.h b/libc/kernel/uapi/rdma/siw-abi.h
new file mode 100644
index 0000000..e2363a1
--- /dev/null
+++ b/libc/kernel/uapi/rdma/siw-abi.h
@@ -0,0 +1,153 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _SIW_USER_H
+#define _SIW_USER_H
+#include <linux/types.h>
+#define SIW_NODE_DESC_COMMON "Software iWARP stack"
+#define SIW_ABI_VERSION 1
+#define SIW_MAX_SGE 6
+#define SIW_UOBJ_MAX_KEY 0x08FFFF
+#define SIW_INVAL_UOBJ_KEY (SIW_UOBJ_MAX_KEY + 1)
+struct siw_uresp_create_cq {
+  __u32 cq_id;
+  __u32 num_cqe;
+  __aligned_u64 cq_key;
+};
+struct siw_uresp_create_qp {
+  __u32 qp_id;
+  __u32 num_sqe;
+  __u32 num_rqe;
+  __u32 pad;
+  __aligned_u64 sq_key;
+  __aligned_u64 rq_key;
+};
+struct siw_ureq_reg_mr {
+  __u8 stag_key;
+  __u8 reserved[3];
+  __u32 pad;
+};
+struct siw_uresp_reg_mr {
+  __u32 stag;
+  __u32 pad;
+};
+struct siw_uresp_create_srq {
+  __u32 num_rqe;
+  __u32 pad;
+  __aligned_u64 srq_key;
+};
+struct siw_uresp_alloc_ctx {
+  __u32 dev_id;
+  __u32 pad;
+};
+enum siw_opcode {
+  SIW_OP_WRITE,
+  SIW_OP_READ,
+  SIW_OP_READ_LOCAL_INV,
+  SIW_OP_SEND,
+  SIW_OP_SEND_WITH_IMM,
+  SIW_OP_SEND_REMOTE_INV,
+  SIW_OP_FETCH_AND_ADD,
+  SIW_OP_COMP_AND_SWAP,
+  SIW_OP_RECEIVE,
+  SIW_OP_READ_RESPONSE,
+  SIW_OP_INVAL_STAG,
+  SIW_OP_REG_MR,
+  SIW_NUM_OPCODES
+};
+struct siw_sge {
+  __aligned_u64 laddr;
+  __u32 length;
+  __u32 lkey;
+};
+#define SIW_MAX_INLINE (sizeof(struct siw_sge) * (SIW_MAX_SGE - 1))
+#if SIW_MAX_SGE < 2
+#error "SIW_MAX_SGE must be at least 2"
+#endif
+enum siw_wqe_flags {
+  SIW_WQE_VALID = 1,
+  SIW_WQE_INLINE = (1 << 1),
+  SIW_WQE_SIGNALLED = (1 << 2),
+  SIW_WQE_SOLICITED = (1 << 3),
+  SIW_WQE_READ_FENCE = (1 << 4),
+  SIW_WQE_REM_INVAL = (1 << 5),
+  SIW_WQE_COMPLETED = (1 << 6)
+};
+struct siw_sqe {
+  __aligned_u64 id;
+  __u16 flags;
+  __u8 num_sge;
+  __u8 opcode;
+  __u32 rkey;
+  union {
+    __aligned_u64 raddr;
+    __aligned_u64 base_mr;
+  };
+  union {
+    struct siw_sge sge[SIW_MAX_SGE];
+    __aligned_u64 access;
+  };
+};
+struct siw_rqe {
+  __aligned_u64 id;
+  __u16 flags;
+  __u8 num_sge;
+  __u8 opcode;
+  __u32 unused;
+  struct siw_sge sge[SIW_MAX_SGE];
+};
+enum siw_notify_flags {
+  SIW_NOTIFY_NOT = (0),
+  SIW_NOTIFY_SOLICITED = (1 << 0),
+  SIW_NOTIFY_NEXT_COMPLETION = (1 << 1),
+  SIW_NOTIFY_MISSED_EVENTS = (1 << 2),
+  SIW_NOTIFY_ALL = SIW_NOTIFY_SOLICITED | SIW_NOTIFY_NEXT_COMPLETION | SIW_NOTIFY_MISSED_EVENTS
+};
+enum siw_wc_status {
+  SIW_WC_SUCCESS,
+  SIW_WC_LOC_LEN_ERR,
+  SIW_WC_LOC_PROT_ERR,
+  SIW_WC_LOC_QP_OP_ERR,
+  SIW_WC_WR_FLUSH_ERR,
+  SIW_WC_BAD_RESP_ERR,
+  SIW_WC_LOC_ACCESS_ERR,
+  SIW_WC_REM_ACCESS_ERR,
+  SIW_WC_REM_INV_REQ_ERR,
+  SIW_WC_GENERAL_ERR,
+  SIW_NUM_WC_STATUS
+};
+struct siw_cqe {
+  __aligned_u64 id;
+  __u8 flags;
+  __u8 opcode;
+  __u16 status;
+  __u32 bytes;
+  union {
+    __aligned_u64 imm_data;
+    __u32 inval_stag;
+  };
+  union {
+    struct ib_qp * base_qp;
+    __aligned_u64 qp_id;
+  };
+};
+struct siw_cq_ctrl {
+  __u32 flags;
+  __u32 pad;
+};
+#endif
diff --git a/libc/kernel/uapi/sound/sof/abi.h b/libc/kernel/uapi/sound/sof/abi.h
index 2111f5c..0948673 100644
--- a/libc/kernel/uapi/sound/sof/abi.h
+++ b/libc/kernel/uapi/sound/sof/abi.h
@@ -19,7 +19,7 @@
 #ifndef __INCLUDE_UAPI_SOUND_SOF_ABI_H__
 #define __INCLUDE_UAPI_SOUND_SOF_ABI_H__
 #define SOF_ABI_MAJOR 3
-#define SOF_ABI_MINOR 6
+#define SOF_ABI_MINOR 8
 #define SOF_ABI_PATCH 0
 #define SOF_ABI_MAJOR_SHIFT 24
 #define SOF_ABI_MAJOR_MASK 0xff
diff --git a/libc/kernel/uapi/sound/sof/eq.h b/libc/kernel/uapi/sound/sof/eq.h
deleted file mode 100644
index c45ba35..0000000
--- a/libc/kernel/uapi/sound/sof/eq.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- ***   This header was automatically generated from a Linux kernel header
- ***   of the same name, to make information necessary for userspace to
- ***   call into the kernel available to libc.  It contains only constants,
- ***   structures, and macros generated from the original header, and thus,
- ***   contains no copyrightable information.
- ***
- ***   To edit the content of this header, modify the corresponding
- ***   source file (e.g. under external/kernel-headers/original/) then
- ***   run bionic/libc/kernel/tools/update_all.py
- ***
- ***   Any manual change here will be lost the next time this script will
- ***   be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef __INCLUDE_UAPI_SOUND_SOF_USER_EQ_H__
-#define __INCLUDE_UAPI_SOUND_SOF_USER_EQ_H__
-#define SOF_EQ_FIR_IDX_SWITCH 0
-#define SOF_EQ_FIR_MAX_SIZE 4096
-#define SOF_EQ_FIR_MAX_LENGTH 192
-#define SOF_EQ_FIR_MAX_RESPONSES 8
-struct sof_eq_fir_config {
-  uint32_t size;
-  uint16_t channels_in_config;
-  uint16_t number_of_responses;
-  uint32_t reserved[4];
-  int16_t data[];
-} __packed;
-struct sof_eq_fir_coef_data {
-  int16_t length;
-  int16_t out_shift;
-  uint32_t reserved[4];
-  int16_t coef[];
-} __packed;
-#define SOF_EQ_FIR_COEF_NHEADER (sizeof(struct sof_eq_fir_coef_data) / sizeof(int16_t))
-#define SOF_EQ_IIR_IDX_SWITCH 0
-#define SOF_EQ_IIR_MAX_SIZE 1024
-#define SOF_EQ_IIR_MAX_RESPONSES 8
-struct sof_eq_iir_config {
-  uint32_t size;
-  uint32_t channels_in_config;
-  uint32_t number_of_responses;
-  uint32_t reserved[4];
-  int32_t data[];
-} __packed;
-struct sof_eq_iir_header_df2t {
-  uint32_t num_sections;
-  uint32_t num_sections_in_series;
-  uint32_t reserved[4];
-  int32_t biquads[];
-} __packed;
-struct sof_eq_iir_biquad_df2t {
-  int32_t a2;
-  int32_t a1;
-  int32_t b2;
-  int32_t b1;
-  int32_t b0;
-  int32_t output_shift;
-  int32_t output_gain;
-} __packed;
-#define SOF_EQ_IIR_DF2T_BIQUADS_MAX 11
-#define SOF_EQ_IIR_NHEADER_DF2T (sizeof(struct sof_eq_iir_header_df2t) / sizeof(int32_t))
-#define SOF_EQ_IIR_NBIQUAD_DF2T (sizeof(struct sof_eq_iir_biquad_df2t) / sizeof(int32_t))
-#endif
diff --git a/libc/kernel/uapi/sound/sof/manifest.h b/libc/kernel/uapi/sound/sof/manifest.h
deleted file mode 100644
index b8bd3e5..0000000
--- a/libc/kernel/uapi/sound/sof/manifest.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- ***   This header was automatically generated from a Linux kernel header
- ***   of the same name, to make information necessary for userspace to
- ***   call into the kernel available to libc.  It contains only constants,
- ***   structures, and macros generated from the original header, and thus,
- ***   contains no copyrightable information.
- ***
- ***   To edit the content of this header, modify the corresponding
- ***   source file (e.g. under external/kernel-headers/original/) then
- ***   run bionic/libc/kernel/tools/update_all.py
- ***
- ***   Any manual change here will be lost the next time this script will
- ***   be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef __INCLUDE_UAPI_SOUND_SOF_USER_MANIFEST_H__
-#define __INCLUDE_UAPI_SOUND_SOF_USER_MANIFEST_H__
-#define SOF_MAN_ELF_TEXT_OFFSET 0x2000
-#define SOF_MAN_EXT_HEADER_MAGIC 0x31454124
-#define SOF_MAN_MOD_TYPE_BUILTIN 0
-#define SOF_MAN_MOD_TYPE_MODULE 1
-struct sof_man_module_type {
-  uint32_t load_type : 4;
-  uint32_t auto_start : 1;
-  uint32_t domain_ll : 1;
-  uint32_t domain_dp : 1;
-  uint32_t rsvd_ : 25;
-};
-#define SOF_MAN_SEGMENT_TEXT 0
-#define SOF_MAN_SEGMENT_RODATA 1
-#define SOF_MAN_SEGMENT_DATA 1
-#define SOF_MAN_SEGMENT_BSS 2
-#define SOF_MAN_SEGMENT_EMPTY 15
-union sof_man_segment_flags {
-  uint32_t ul;
-  struct {
-    uint32_t contents : 1;
-    uint32_t alloc : 1;
-    uint32_t load : 1;
-    uint32_t readonly : 1;
-    uint32_t code : 1;
-    uint32_t data : 1;
-    uint32_t _rsvd0 : 2;
-    uint32_t type : 4;
-    uint32_t _rsvd1 : 4;
-    uint32_t length : 16;
-  } r;
-} __packed;
-struct sof_man_segment_desc {
-  union sof_man_segment_flags flags;
-  uint32_t v_base_addr;
-  uint32_t file_offset;
-} __packed;
-#define SOF_MAN_MOD_ID_LEN 4
-#define SOF_MAN_MOD_NAME_LEN 8
-#define SOF_MAN_MOD_SHA256_LEN 32
-#define SOF_MAN_MOD_ID { '$', 'A', 'M', 'E' }
-struct sof_man_module {
-  uint8_t struct_id[SOF_MAN_MOD_ID_LEN];
-  uint8_t name[SOF_MAN_MOD_NAME_LEN];
-  uint8_t uuid[16];
-  struct sof_man_module_type type;
-  uint8_t hash[SOF_MAN_MOD_SHA256_LEN];
-  uint32_t entry_point;
-  uint16_t cfg_offset;
-  uint16_t cfg_count;
-  uint32_t affinity_mask;
-  uint16_t instance_max_count;
-  uint16_t instance_bss_size;
-  struct sof_man_segment_desc segment[3];
-} __packed;
-struct sof_man_mod_config {
-  uint32_t par[4];
-  uint32_t is_pages;
-  uint32_t cps;
-  uint32_t ibs;
-  uint32_t obs;
-  uint32_t module_flags;
-  uint32_t cpc;
-  uint32_t obls;
-} __packed;
-#define SOF_MAN_FW_HDR_FW_NAME_LEN 8
-#define SOF_MAN_FW_HDR_ID { '$', 'A', 'M', '1' }
-#define SOF_MAN_FW_HDR_NAME "ADSPFW"
-#define SOF_MAN_FW_HDR_FLAGS 0x0
-#define SOF_MAN_FW_HDR_FEATURES 0xff
-struct sof_man_fw_header {
-  uint8_t header_id[4];
-  uint32_t header_len;
-  uint8_t name[SOF_MAN_FW_HDR_FW_NAME_LEN];
-  uint32_t preload_page_count;
-  uint32_t fw_image_flags;
-  uint32_t feature_mask;
-  uint16_t major_version;
-  uint16_t minor_version;
-  uint16_t hotfix_version;
-  uint16_t build_version;
-  uint32_t num_module_entries;
-  uint32_t hw_buf_base_addr;
-  uint32_t hw_buf_length;
-  uint32_t load_offset;
-} __packed;
-struct sof_man_fw_desc {
-  struct sof_man_fw_header header;
-} __packed;
-struct sof_man_component_desc {
-  uint32_t reserved[2];
-  uint32_t version;
-  uint8_t hash[SOF_MAN_MOD_SHA256_LEN];
-  uint32_t base_offset;
-  uint32_t limit_offset;
-  uint32_t attributes[4];
-} __packed;
-struct sof_man_adsp_meta_file_ext {
-  uint32_t ext_type;
-  uint32_t ext_len;
-  uint32_t imr_type;
-  uint8_t reserved[16];
-  struct sof_man_component_desc comp_desc[1];
-} __packed;
-struct sof_man_module_manifest {
-  struct sof_man_module module;
-  uint32_t text_size;
-} __packed;
-#endif
diff --git a/libc/kernel/uapi/sound/sof/tokens.h b/libc/kernel/uapi/sound/sof/tokens.h
index 748c5fe..0f80cfa 100644
--- a/libc/kernel/uapi/sound/sof/tokens.h
+++ b/libc/kernel/uapi/sound/sof/tokens.h
@@ -55,6 +55,7 @@
 #define SOF_TKN_INTEL_DMIC_NUM_PDM_ACTIVE 605
 #define SOF_TKN_INTEL_DMIC_SAMPLE_RATE 608
 #define SOF_TKN_INTEL_DMIC_FIFO_WORD_LENGTH 609
+#define SOF_TKN_INTEL_DMIC_UNMUTE_RAMP_TIME_MS 610
 #define SOF_TKN_INTEL_DMIC_PDM_CTRL_ID 700
 #define SOF_TKN_INTEL_DMIC_PDM_MIC_A_Enable 701
 #define SOF_TKN_INTEL_DMIC_PDM_MIC_B_Enable 702
diff --git a/libc/kernel/uapi/sound/sof/tone.h b/libc/kernel/uapi/sound/sof/tone.h
deleted file mode 100644
index a4b745e..0000000
--- a/libc/kernel/uapi/sound/sof/tone.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- ***   This header was automatically generated from a Linux kernel header
- ***   of the same name, to make information necessary for userspace to
- ***   call into the kernel available to libc.  It contains only constants,
- ***   structures, and macros generated from the original header, and thus,
- ***   contains no copyrightable information.
- ***
- ***   To edit the content of this header, modify the corresponding
- ***   source file (e.g. under external/kernel-headers/original/) then
- ***   run bionic/libc/kernel/tools/update_all.py
- ***
- ***   Any manual change here will be lost the next time this script will
- ***   be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef __INCLUDE_UAPI_SOUND_SOF_USER_TONE_H__
-#define __INCLUDE_UAPI_SOUND_SOF_USER_TONE_H__
-#define SOF_TONE_IDX_FREQUENCY 0
-#define SOF_TONE_IDX_AMPLITUDE 1
-#define SOF_TONE_IDX_FREQ_MULT 2
-#define SOF_TONE_IDX_AMPL_MULT 3
-#define SOF_TONE_IDX_LENGTH 4
-#define SOF_TONE_IDX_PERIOD 5
-#define SOF_TONE_IDX_REPEATS 6
-#define SOF_TONE_IDX_LIN_RAMP_STEP 7
-#endif
diff --git a/libc/kernel/uapi/sound/sof/trace.h b/libc/kernel/uapi/sound/sof/trace.h
deleted file mode 100644
index a5eed43..0000000
--- a/libc/kernel/uapi/sound/sof/trace.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- ***   This header was automatically generated from a Linux kernel header
- ***   of the same name, to make information necessary for userspace to
- ***   call into the kernel available to libc.  It contains only constants,
- ***   structures, and macros generated from the original header, and thus,
- ***   contains no copyrightable information.
- ***
- ***   To edit the content of this header, modify the corresponding
- ***   source file (e.g. under external/kernel-headers/original/) then
- ***   run bionic/libc/kernel/tools/update_all.py
- ***
- ***   Any manual change here will be lost the next time this script will
- ***   be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef __INCLUDE_UAPI_SOUND_SOF_USER_TRACE_H__
-#define __INCLUDE_UAPI_SOUND_SOF_USER_TRACE_H__
-struct system_time {
-  uint32_t val_l;
-  uint32_t val_u;
-} __packed;
-#define LOG_ENABLE 1
-#define LOG_DISABLE 0
-#define LOG_LEVEL_CRITICAL 1
-#define LOG_LEVEL_VERBOSE 2
-struct log_buffer_layout {
-  uint32_t read_ptr;
-  uint32_t write_ptr;
-  uint32_t buffer[0];
-} __packed;
-struct log_buffer_status {
-  uint32_t core_id;
-} __packed;
-#define TRACE_ID_LENGTH 12
-struct log_entry_header {
-  uint32_t id_0 : TRACE_ID_LENGTH;
-  uint32_t id_1 : TRACE_ID_LENGTH;
-  uint32_t core_id : 8;
-  uint64_t timestamp;
-  uint32_t log_entry_address;
-} __packed;
-#endif