Merge "Update to v5.16 kernel headers."
diff --git a/libc/include/bits/glibc-syscalls.h b/libc/include/bits/glibc-syscalls.h
index 8c8e65c..d17dc12 100644
--- a/libc/include/bits/glibc-syscalls.h
+++ b/libc/include/bits/glibc-syscalls.h
@@ -303,6 +303,9 @@
 #if defined(__NR_futex_time64)
   #define SYS_futex_time64 __NR_futex_time64
 #endif
+#if defined(__NR_futex_waitv)
+  #define SYS_futex_waitv __NR_futex_waitv
+#endif
 #if defined(__NR_futimesat)
   #define SYS_futimesat __NR_futimesat
 #endif
diff --git a/libc/kernel/uapi/asm-arm/asm/unistd-eabi.h b/libc/kernel/uapi/asm-arm/asm/unistd-eabi.h
index 994a669..2af0e97 100644
--- a/libc/kernel/uapi/asm-arm/asm/unistd-eabi.h
+++ b/libc/kernel/uapi/asm-arm/asm/unistd-eabi.h
@@ -419,4 +419,5 @@
 #define __NR_landlock_add_rule (__NR_SYSCALL_BASE + 445)
 #define __NR_landlock_restrict_self (__NR_SYSCALL_BASE + 446)
 #define __NR_process_mrelease (__NR_SYSCALL_BASE + 448)
+#define __NR_futex_waitv (__NR_SYSCALL_BASE + 449)
 #endif
diff --git a/libc/kernel/uapi/asm-arm/asm/unistd-oabi.h b/libc/kernel/uapi/asm-arm/asm/unistd-oabi.h
index 21da4d8..20870bb 100644
--- a/libc/kernel/uapi/asm-arm/asm/unistd-oabi.h
+++ b/libc/kernel/uapi/asm-arm/asm/unistd-oabi.h
@@ -431,4 +431,5 @@
 #define __NR_landlock_add_rule (__NR_SYSCALL_BASE + 445)
 #define __NR_landlock_restrict_self (__NR_SYSCALL_BASE + 446)
 #define __NR_process_mrelease (__NR_SYSCALL_BASE + 448)
+#define __NR_futex_waitv (__NR_SYSCALL_BASE + 449)
 #endif
diff --git a/libc/kernel/uapi/asm-arm64/asm/hwcap.h b/libc/kernel/uapi/asm-arm64/asm/hwcap.h
index 8a70a52..d4d4324 100644
--- a/libc/kernel/uapi/asm-arm64/asm/hwcap.h
+++ b/libc/kernel/uapi/asm-arm64/asm/hwcap.h
@@ -69,4 +69,5 @@
 #define HWCAP2_RNG (1 << 16)
 #define HWCAP2_BTI (1 << 17)
 #define HWCAP2_MTE (1 << 18)
+#define HWCAP2_ECV (1 << 19)
 #endif
diff --git a/libc/kernel/uapi/asm-generic/socket.h b/libc/kernel/uapi/asm-generic/socket.h
index 2c99f48..6767993 100644
--- a/libc/kernel/uapi/asm-generic/socket.h
+++ b/libc/kernel/uapi/asm-generic/socket.h
@@ -99,6 +99,7 @@
 #define SO_BUSY_POLL_BUDGET 70
 #define SO_NETNS_COOKIE 71
 #define SO_BUF_LOCK 72
+#define SO_RESERVE_MEM 73
 #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 e831ce7..1e14ee5 100644
--- a/libc/kernel/uapi/asm-generic/unistd.h
+++ b/libc/kernel/uapi/asm-generic/unistd.h
@@ -411,8 +411,9 @@
 #define __NR_memfd_secret 447
 #endif
 #define __NR_process_mrelease 448
+#define __NR_futex_waitv 449
 #undef __NR_syscalls
-#define __NR_syscalls 449
+#define __NR_syscalls 450
 #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-x86/asm/kvm.h b/libc/kernel/uapi/asm-x86/asm/kvm.h
index 2db4566..fd0f5f8 100644
--- a/libc/kernel/uapi/asm-x86/asm/kvm.h
+++ b/libc/kernel/uapi/asm-x86/asm/kvm.h
@@ -405,4 +405,6 @@
 };
 #define KVM_PMU_EVENT_ALLOW 0
 #define KVM_PMU_EVENT_DENY 1
+#define KVM_VCPU_TSC_CTRL 0
+#define KVM_VCPU_TSC_OFFSET 0
 #endif
diff --git a/libc/kernel/uapi/asm-x86/asm/kvm_para.h b/libc/kernel/uapi/asm-x86/asm/kvm_para.h
index 4407a85..dd72af0 100644
--- a/libc/kernel/uapi/asm-x86/asm/kvm_para.h
+++ b/libc/kernel/uapi/asm-x86/asm/kvm_para.h
@@ -20,6 +20,7 @@
 #define _UAPI_ASM_X86_KVM_PARA_H
 #include <linux/types.h>
 #define KVM_CPUID_SIGNATURE 0x40000000
+#define KVM_SIGNATURE "KVMKVMKVM\0\0\0"
 #define KVM_CPUID_FEATURES 0x40000001
 #define KVM_FEATURE_CLOCKSOURCE 0
 #define KVM_FEATURE_NOP_IO_DELAY 1
diff --git a/libc/kernel/uapi/asm-x86/asm/prctl.h b/libc/kernel/uapi/asm-x86/asm/prctl.h
index 0e6bed9..d8014b1 100644
--- a/libc/kernel/uapi/asm-x86/asm/prctl.h
+++ b/libc/kernel/uapi/asm-x86/asm/prctl.h
@@ -24,6 +24,9 @@
 #define ARCH_GET_GS 0x1004
 #define ARCH_GET_CPUID 0x1011
 #define ARCH_SET_CPUID 0x1012
+#define ARCH_GET_XCOMP_SUPP 0x1021
+#define ARCH_GET_XCOMP_PERM 0x1022
+#define ARCH_REQ_XCOMP_PERM 0x1023
 #define ARCH_MAP_VDSO_X32 0x2001
 #define ARCH_MAP_VDSO_32 0x2002
 #define ARCH_MAP_VDSO_64 0x2003
diff --git a/libc/kernel/uapi/asm-x86/asm/sgx.h b/libc/kernel/uapi/asm-x86/asm/sgx.h
index 349791a..1874b78 100644
--- a/libc/kernel/uapi/asm-x86/asm/sgx.h
+++ b/libc/kernel/uapi/asm-x86/asm/sgx.h
@@ -28,6 +28,7 @@
 #define SGX_IOC_ENCLAVE_ADD_PAGES _IOWR(SGX_MAGIC, 0x01, struct sgx_enclave_add_pages)
 #define SGX_IOC_ENCLAVE_INIT _IOW(SGX_MAGIC, 0x02, struct sgx_enclave_init)
 #define SGX_IOC_ENCLAVE_PROVISION _IOW(SGX_MAGIC, 0x03, struct sgx_enclave_provision)
+#define SGX_IOC_VEPC_REMOVE_ALL _IO(SGX_MAGIC, 0x04)
 struct sgx_enclave_create {
   __u64 src;
 };
diff --git a/libc/kernel/uapi/asm-x86/asm/unistd_32.h b/libc/kernel/uapi/asm-x86/asm/unistd_32.h
index 20810c6..3a353fe 100644
--- a/libc/kernel/uapi/asm-x86/asm/unistd_32.h
+++ b/libc/kernel/uapi/asm-x86/asm/unistd_32.h
@@ -456,4 +456,5 @@
 #define __NR_landlock_restrict_self 446
 #define __NR_memfd_secret 447
 #define __NR_process_mrelease 448
+#define __NR_futex_waitv 449
 #endif
diff --git a/libc/kernel/uapi/asm-x86/asm/unistd_64.h b/libc/kernel/uapi/asm-x86/asm/unistd_64.h
index 0f33ee6..5fa4d2c 100644
--- a/libc/kernel/uapi/asm-x86/asm/unistd_64.h
+++ b/libc/kernel/uapi/asm-x86/asm/unistd_64.h
@@ -378,4 +378,5 @@
 #define __NR_landlock_restrict_self 446
 #define __NR_memfd_secret 447
 #define __NR_process_mrelease 448
+#define __NR_futex_waitv 449
 #endif
diff --git a/libc/kernel/uapi/asm-x86/asm/unistd_x32.h b/libc/kernel/uapi/asm-x86/asm/unistd_x32.h
index c840222..b7abf12 100644
--- a/libc/kernel/uapi/asm-x86/asm/unistd_x32.h
+++ b/libc/kernel/uapi/asm-x86/asm/unistd_x32.h
@@ -331,6 +331,7 @@
 #define __NR_landlock_restrict_self (__X32_SYSCALL_BIT + 446)
 #define __NR_memfd_secret (__X32_SYSCALL_BIT + 447)
 #define __NR_process_mrelease (__X32_SYSCALL_BIT + 448)
+#define __NR_futex_waitv (__X32_SYSCALL_BIT + 449)
 #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 6f74fa3..3764d51 100644
--- a/libc/kernel/uapi/drm/amdgpu_drm.h
+++ b/libc/kernel/uapi/drm/amdgpu_drm.h
@@ -467,9 +467,6 @@
 #define AMDGPU_INFO_NUM_VRAM_CPU_PAGE_FAULTS 0x1E
 #define AMDGPU_INFO_VRAM_LOST_COUNTER 0x1F
 #define AMDGPU_INFO_RAS_ENABLED_FEATURES 0x20
-#define AMDGPU_INFO_VIDEO_CAPS 0x21
-#define AMDGPU_INFO_VIDEO_CAPS_DECODE 0
-#define AMDGPU_INFO_VIDEO_CAPS_ENCODE 1
 #define AMDGPU_INFO_RAS_ENABLED_UMC (1 << 0)
 #define AMDGPU_INFO_RAS_ENABLED_SDMA (1 << 1)
 #define AMDGPU_INFO_RAS_ENABLED_GFX (1 << 2)
@@ -484,6 +481,9 @@
 #define AMDGPU_INFO_RAS_ENABLED_MP0 (1 << 11)
 #define AMDGPU_INFO_RAS_ENABLED_MP1 (1 << 12)
 #define AMDGPU_INFO_RAS_ENABLED_FUSE (1 << 13)
+#define AMDGPU_INFO_VIDEO_CAPS 0x21
+#define AMDGPU_INFO_VIDEO_CAPS_DECODE 0
+#define AMDGPU_INFO_VIDEO_CAPS_ENCODE 1
 #define AMDGPU_INFO_MMR_SE_INDEX_SHIFT 0
 #define AMDGPU_INFO_MMR_SE_INDEX_MASK 0xff
 #define AMDGPU_INFO_MMR_SH_INDEX_SHIFT 8
diff --git a/libc/kernel/uapi/drm/drm_fourcc.h b/libc/kernel/uapi/drm/drm_fourcc.h
index aaa94cd..2b5d202 100644
--- a/libc/kernel/uapi/drm/drm_fourcc.h
+++ b/libc/kernel/uapi/drm/drm_fourcc.h
@@ -27,6 +27,8 @@
 #define DRM_FORMAT_INVALID 0
 #define DRM_FORMAT_C8 fourcc_code('C', '8', ' ', ' ')
 #define DRM_FORMAT_R8 fourcc_code('R', '8', ' ', ' ')
+#define DRM_FORMAT_R10 fourcc_code('R', '1', '0', ' ')
+#define DRM_FORMAT_R12 fourcc_code('R', '1', '2', ' ')
 #define DRM_FORMAT_R16 fourcc_code('R', '1', '6', ' ')
 #define DRM_FORMAT_RG88 fourcc_code('R', 'G', '8', '8')
 #define DRM_FORMAT_GR88 fourcc_code('G', 'R', '8', '8')
@@ -145,6 +147,8 @@
 #define DRM_FORMAT_MOD_VENDOR_ALLWINNER 0x09
 #define DRM_FORMAT_MOD_VENDOR_AMLOGIC 0x0a
 #define DRM_FORMAT_RESERVED ((1ULL << 56) - 1)
+#define fourcc_mod_get_vendor(modifier) (((modifier) >> 56) & 0xff)
+#define fourcc_mod_is_vendor(modifier,vendor) (fourcc_mod_get_vendor(modifier) == DRM_FORMAT_MOD_VENDOR_ ##vendor)
 #define fourcc_mod_code(vendor,val) ((((__u64) DRM_FORMAT_MOD_VENDOR_ ##vendor) << 56) | ((val) & 0x00ffffffffffffffULL))
 #define DRM_FORMAT_MOD_GENERIC_16_16_TILE DRM_FORMAT_MOD_SAMSUNG_16_16_TILE
 #define DRM_FORMAT_MOD_INVALID fourcc_mod_code(NONE, DRM_FORMAT_RESERVED)
diff --git a/libc/kernel/uapi/drm/i915_drm.h b/libc/kernel/uapi/drm/i915_drm.h
index 9e56f4c..52bfad2 100644
--- a/libc/kernel/uapi/drm/i915_drm.h
+++ b/libc/kernel/uapi/drm/i915_drm.h
@@ -741,6 +741,7 @@
 #define I915_CONTEXT_PARAM_ENGINES 0xa
 #define I915_CONTEXT_PARAM_PERSISTENCE 0xb
 #define I915_CONTEXT_PARAM_RINGSIZE 0xc
+#define I915_CONTEXT_PARAM_PROTECTED_CONTENT 0xd
   __u64 value;
 };
 struct drm_i915_gem_context_param_sseu {
@@ -774,10 +775,23 @@
 } __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_engines_parallel_submit {
+  struct i915_user_extension base;
+  __u16 engine_index;
+  __u16 width;
+  __u16 num_siblings;
+  __u16 mbz16;
+  __u64 flags;
+  __u64 mbz64[3];
+  struct i915_engine_class_instance engines[0];
+} __packed;
+#define I915_DEFINE_CONTEXT_ENGINES_PARALLEL_SUBMIT(name__,N__) struct { struct i915_user_extension base; __u16 engine_index; __u16 width; __u16 num_siblings; __u16 mbz16; __u64 flags; __u64 mbz64[3]; 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
+#define I915_CONTEXT_ENGINES_EXT_PARALLEL_SUBMIT 2
   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__]; \
@@ -907,10 +921,13 @@
   struct i915_engine_class_instance engine;
   __u32 rsvd0;
   __u64 flags;
+#define I915_ENGINE_INFO_HAS_LOGICAL_INSTANCE (1 << 0)
   __u64 capabilities;
 #define I915_VIDEO_CLASS_CAPABILITY_HEVC (1 << 0)
 #define I915_VIDEO_AND_ENHANCE_CLASS_CAPABILITY_SFC (1 << 1)
-  __u64 rsvd1[4];
+  __u16 logical_instance;
+  __u16 rsvd1[3];
+  __u64 rsvd2[3];
 };
 struct drm_i915_query_engine_info {
   __u32 num_engines;
@@ -951,6 +968,7 @@
   __u32 handle;
   __u32 flags;
 #define I915_GEM_CREATE_EXT_MEMORY_REGIONS 0
+#define I915_GEM_CREATE_EXT_PROTECTED_CONTENT 1
   __u64 extensions;
 };
 struct drm_i915_gem_create_ext_memory_regions {
@@ -959,6 +977,11 @@
   __u32 num_regions;
   __u64 regions;
 };
+struct drm_i915_gem_create_ext_protected_content {
+  struct i915_user_extension base;
+  __u32 flags;
+};
+#define I915_PROTECTED_CONTENT_DEFAULT_SESSION 0xf
 #ifdef __cplusplus
 }
 #endif
diff --git a/libc/kernel/uapi/drm/mga_drm.h b/libc/kernel/uapi/drm/mga_drm.h
index 4959502..dc62961 100644
--- a/libc/kernel/uapi/drm/mga_drm.h
+++ b/libc/kernel/uapi/drm/mga_drm.h
@@ -175,7 +175,7 @@
     MGA_CLEANUP_DMA = 0x02
   } func;
   unsigned long sarea_priv_offset;
-  int chipset;
+  __struct_group(, always32bit,, int chipset;
   int sgram;
   unsigned int maccess;
   unsigned int fb_cpp;
@@ -185,6 +185,7 @@
   unsigned int depth_offset, depth_pitch;
   unsigned int texture_offset[MGA_NR_TEX_HEAPS];
   unsigned int texture_size[MGA_NR_TEX_HEAPS];
+ );
   unsigned long fb_offset;
   unsigned long mmio_offset;
   unsigned long status_offset;
diff --git a/libc/kernel/uapi/drm/v3d_drm.h b/libc/kernel/uapi/drm/v3d_drm.h
index a393e5d..5887678 100644
--- a/libc/kernel/uapi/drm/v3d_drm.h
+++ b/libc/kernel/uapi/drm/v3d_drm.h
@@ -45,6 +45,35 @@
 #define DRM_IOCTL_V3D_PERFMON_DESTROY DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_PERFMON_DESTROY, struct drm_v3d_perfmon_destroy)
 #define DRM_IOCTL_V3D_PERFMON_GET_VALUES DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_PERFMON_GET_VALUES, struct drm_v3d_perfmon_get_values)
 #define DRM_V3D_SUBMIT_CL_FLUSH_CACHE 0x01
+#define DRM_V3D_SUBMIT_EXTENSION 0x02
+struct drm_v3d_extension {
+  __u64 next;
+  __u32 id;
+#define DRM_V3D_EXT_ID_MULTI_SYNC 0x01
+  __u32 flags;
+};
+struct drm_v3d_sem {
+  __u32 handle;
+  __u32 flags;
+  __u64 point;
+  __u64 mbz[2];
+};
+enum v3d_queue {
+  V3D_BIN,
+  V3D_RENDER,
+  V3D_TFU,
+  V3D_CSD,
+  V3D_CACHE_CLEAN,
+};
+struct drm_v3d_multi_sync {
+  struct drm_v3d_extension base;
+  __u64 in_syncs;
+  __u64 out_syncs;
+  __u32 in_sync_count;
+  __u32 out_sync_count;
+  __u32 wait_stage;
+  __u32 pad;
+};
 struct drm_v3d_submit_cl {
   __u32 bcl_start;
   __u32 bcl_end;
@@ -61,6 +90,7 @@
   __u32 flags;
   __u32 perfmon_id;
   __u32 pad;
+  __u64 extensions;
 };
 struct drm_v3d_wait_bo {
   __u32 handle;
@@ -90,6 +120,7 @@
   DRM_V3D_PARAM_SUPPORTS_CSD,
   DRM_V3D_PARAM_SUPPORTS_CACHE_FLUSH,
   DRM_V3D_PARAM_SUPPORTS_PERFMON,
+  DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT,
 };
 struct drm_v3d_get_param {
   __u32 param;
@@ -112,6 +143,8 @@
   __u32 bo_handles[4];
   __u32 in_sync;
   __u32 out_sync;
+  __u32 flags;
+  __u64 extensions;
 };
 struct drm_v3d_submit_csd {
   __u32 cfg[7];
@@ -121,6 +154,9 @@
   __u32 in_sync;
   __u32 out_sync;
   __u32 perfmon_id;
+  __u64 extensions;
+  __u32 flags;
+  __u32 pad;
 };
 enum {
   V3D_PERFCNT_FEP_VALID_PRIMTS_NO_PIXELS,
diff --git a/libc/kernel/uapi/drm/virtgpu_drm.h b/libc/kernel/uapi/drm/virtgpu_drm.h
index 842c1fd..342282d 100644
--- a/libc/kernel/uapi/drm/virtgpu_drm.h
+++ b/libc/kernel/uapi/drm/virtgpu_drm.h
@@ -32,9 +32,11 @@
 #define DRM_VIRTGPU_WAIT 0x08
 #define DRM_VIRTGPU_GET_CAPS 0x09
 #define DRM_VIRTGPU_RESOURCE_CREATE_BLOB 0x0a
+#define DRM_VIRTGPU_CONTEXT_INIT 0x0b
 #define VIRTGPU_EXECBUF_FENCE_FD_IN 0x01
 #define VIRTGPU_EXECBUF_FENCE_FD_OUT 0x02
-#define VIRTGPU_EXECBUF_FLAGS (VIRTGPU_EXECBUF_FENCE_FD_IN | VIRTGPU_EXECBUF_FENCE_FD_OUT | 0)
+#define VIRTGPU_EXECBUF_RING_IDX 0x04
+#define VIRTGPU_EXECBUF_FLAGS (VIRTGPU_EXECBUF_FENCE_FD_IN | VIRTGPU_EXECBUF_FENCE_FD_OUT | VIRTGPU_EXECBUF_RING_IDX | 0)
 struct drm_virtgpu_map {
   __u64 offset;
   __u32 handle;
@@ -47,12 +49,16 @@
   __u64 bo_handles;
   __u32 num_bo_handles;
   __s32 fence_fd;
+  __u32 ring_idx;
+  __u32 pad;
 };
 #define VIRTGPU_PARAM_3D_FEATURES 1
 #define VIRTGPU_PARAM_CAPSET_QUERY_FIX 2
 #define VIRTGPU_PARAM_RESOURCE_BLOB 3
 #define VIRTGPU_PARAM_HOST_VISIBLE 4
 #define VIRTGPU_PARAM_CROSS_DEVICE 5
+#define VIRTGPU_PARAM_CONTEXT_INIT 6
+#define VIRTGPU_PARAM_SUPPORTED_CAPSET_IDs 7
 struct drm_virtgpu_getparam {
   __u64 param;
   __u64 value;
@@ -132,6 +138,19 @@
   __u64 cmd;
   __u64 blob_id;
 };
+#define VIRTGPU_CONTEXT_PARAM_CAPSET_ID 0x0001
+#define VIRTGPU_CONTEXT_PARAM_NUM_RINGS 0x0002
+#define VIRTGPU_CONTEXT_PARAM_POLL_RINGS_MASK 0x0003
+struct drm_virtgpu_context_set_param {
+  __u64 param;
+  __u64 value;
+};
+struct drm_virtgpu_context_init {
+  __u32 num_params;
+  __u32 pad;
+  __u64 ctx_set_params;
+};
+#define VIRTGPU_EVENT_FENCE_SIGNALED 0x90000000
 #define DRM_IOCTL_VIRTGPU_MAP DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_MAP, struct drm_virtgpu_map)
 #define DRM_IOCTL_VIRTGPU_EXECBUFFER DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_EXECBUFFER, struct drm_virtgpu_execbuffer)
 #define DRM_IOCTL_VIRTGPU_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GETPARAM, struct drm_virtgpu_getparam)
@@ -142,6 +161,7 @@
 #define DRM_IOCTL_VIRTGPU_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_WAIT, struct drm_virtgpu_3d_wait)
 #define DRM_IOCTL_VIRTGPU_GET_CAPS DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GET_CAPS, struct drm_virtgpu_get_caps)
 #define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_BLOB DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE_BLOB, struct drm_virtgpu_resource_create_blob)
+#define DRM_IOCTL_VIRTGPU_CONTEXT_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_CONTEXT_INIT, struct drm_virtgpu_context_init)
 #ifdef __cplusplus
 }
 #endif
diff --git a/libc/kernel/uapi/linux/acrn.h b/libc/kernel/uapi/linux/acrn.h
index 74b719a..c991ac0 100644
--- a/libc/kernel/uapi/linux/acrn.h
+++ b/libc/kernel/uapi/linux/acrn.h
@@ -178,6 +178,7 @@
   } intx;
 };
 #define ACRN_PTDEV_QUIRK_ASSIGN (1U << 0)
+#define ACRN_MMIODEV_RES_NUM 3
 #define ACRN_PCI_NUM_BARS 6
 struct acrn_pcidev {
   __u32 type;
@@ -187,6 +188,29 @@
   __u8 intr_pin;
   __u32 bar[ACRN_PCI_NUM_BARS];
 };
+struct acrn_mmiodev {
+  __u8 name[8];
+  struct {
+    __u64 user_vm_pa;
+    __u64 service_vm_pa;
+    __u64 size;
+    __u64 mem_type;
+  } res[ACRN_MMIODEV_RES_NUM];
+};
+struct acrn_vdev {
+  union {
+    __u64 value;
+    struct {
+      __le16 vendor;
+      __le16 device;
+      __le32 legacy_id;
+    } fields;
+  } id;
+  __u64 slot;
+  __u32 io_addr[ACRN_PCI_NUM_BARS];
+  __u32 io_size[ACRN_PCI_NUM_BARS];
+  __u8 args[128];
+};
 struct acrn_msi_entry {
   __u64 msi_addr;
   __u64 msi_data;
@@ -257,6 +281,10 @@
 #define ACRN_IOCTL_RESET_PTDEV_INTR _IOW(ACRN_IOCTL_TYPE, 0x54, struct acrn_ptdev_irq)
 #define ACRN_IOCTL_ASSIGN_PCIDEV _IOW(ACRN_IOCTL_TYPE, 0x55, struct acrn_pcidev)
 #define ACRN_IOCTL_DEASSIGN_PCIDEV _IOW(ACRN_IOCTL_TYPE, 0x56, struct acrn_pcidev)
+#define ACRN_IOCTL_ASSIGN_MMIODEV _IOW(ACRN_IOCTL_TYPE, 0x57, struct acrn_mmiodev)
+#define ACRN_IOCTL_DEASSIGN_MMIODEV _IOW(ACRN_IOCTL_TYPE, 0x58, struct acrn_mmiodev)
+#define ACRN_IOCTL_CREATE_VDEV _IOW(ACRN_IOCTL_TYPE, 0x59, struct acrn_vdev)
+#define ACRN_IOCTL_DESTROY_VDEV _IOW(ACRN_IOCTL_TYPE, 0x5A, struct acrn_vdev)
 #define ACRN_IOCTL_PM_GET_CPU_STATE _IOWR(ACRN_IOCTL_TYPE, 0x60, __u64)
 #define ACRN_IOCTL_IOEVENTFD _IOW(ACRN_IOCTL_TYPE, 0x70, struct acrn_ioeventfd)
 #define ACRN_IOCTL_IRQFD _IOW(ACRN_IOCTL_TYPE, 0x71, struct acrn_irqfd)
diff --git a/libc/kernel/uapi/linux/amt.h b/libc/kernel/uapi/linux/amt.h
new file mode 100644
index 0000000..049006d
--- /dev/null
+++ b/libc/kernel/uapi/linux/amt.h
@@ -0,0 +1,40 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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_AMT_H_
+#define _UAPI_AMT_H_
+enum ifla_amt_mode {
+  AMT_MODE_GATEWAY = 0,
+  AMT_MODE_RELAY,
+  __AMT_MODE_MAX,
+};
+#define AMT_MODE_MAX (__AMT_MODE_MAX - 1)
+enum {
+  IFLA_AMT_UNSPEC,
+  IFLA_AMT_MODE,
+  IFLA_AMT_RELAY_PORT,
+  IFLA_AMT_GATEWAY_PORT,
+  IFLA_AMT_LINK,
+  IFLA_AMT_LOCAL_IP,
+  IFLA_AMT_REMOTE_IP,
+  IFLA_AMT_DISCOVERY_IP,
+  IFLA_AMT_MAX_TUNNELS,
+  __IFLA_AMT_MAX,
+};
+#define IFLA_AMT_MAX (__IFLA_AMT_MAX - 1)
+#endif
diff --git a/libc/kernel/uapi/linux/audit.h b/libc/kernel/uapi/linux/audit.h
index 2c18e07..342c7ce 100644
--- a/libc/kernel/uapi/linux/audit.h
+++ b/libc/kernel/uapi/linux/audit.h
@@ -83,6 +83,10 @@
 #define AUDIT_TIME_ADJNTPVAL 1333
 #define AUDIT_BPF 1334
 #define AUDIT_EVENT_LISTENER 1335
+#define AUDIT_URINGOP 1336
+#define AUDIT_OPENAT2 1337
+#define AUDIT_DM_CTRL 1338
+#define AUDIT_DM_EVENT 1339
 #define AUDIT_AVC 1400
 #define AUDIT_SELINUX_ERR 1401
 #define AUDIT_AVC_PATH 1402
@@ -126,7 +130,8 @@
 #define AUDIT_FILTER_EXCLUDE 0x05
 #define AUDIT_FILTER_TYPE AUDIT_FILTER_EXCLUDE
 #define AUDIT_FILTER_FS 0x06
-#define AUDIT_NR_FILTERS 7
+#define AUDIT_FILTER_URING_EXIT 0x07
+#define AUDIT_NR_FILTERS 8
 #define AUDIT_FILTER_PREPEND 0x10
 #define AUDIT_NEVER 0
 #define AUDIT_POSSIBLE 1
diff --git a/libc/kernel/uapi/linux/bcache.h b/libc/kernel/uapi/linux/bcache.h
deleted file mode 100644
index 25b6987..0000000
--- a/libc/kernel/uapi/linux/bcache.h
+++ /dev/null
@@ -1,221 +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 _LINUX_BCACHE_H
-#define _LINUX_BCACHE_H
-#include <linux/types.h>
-#define BITMASK(name,type,field,offset,size) static inline __u64 name(const type * k) \
-{ return(k->field >> offset) & ~(~0ULL << size); } static inline void SET_ ##name(type * k, __u64 v) \
-{ k->field &= ~(~(~0ULL << size) << offset); k->field |= (v & ~(~0ULL << size)) << offset; \
-}
-struct bkey {
-  __u64 high;
-  __u64 low;
-  __u64 ptr[];
-};
-#define KEY_FIELD(name,field,offset,size) BITMASK(name, struct bkey, field, offset, size)
-#define PTR_FIELD(name,offset,size) static inline __u64 name(const struct bkey * k, unsigned int i) \
-{ return(k->ptr[i] >> offset) & ~(~0ULL << size); } static inline void SET_ ##name(struct bkey * k, unsigned int i, __u64 v) \
-{ k->ptr[i] &= ~(~(~0ULL << size) << offset); k->ptr[i] |= (v & ~(~0ULL << size)) << offset; \
-}
-#define KEY_SIZE_BITS 16
-#define KEY_MAX_U64S 8
-#define KEY(inode,offset,size) \
-((struct bkey) {.high = (1ULL << 63) | ((__u64) (size) << 20) | (inode),.low = (offset) \
-})
-#define ZERO_KEY KEY(0, 0, 0)
-#define MAX_KEY_INODE (~(~0 << 20))
-#define MAX_KEY_OFFSET (~0ULL >> 1)
-#define MAX_KEY KEY(MAX_KEY_INODE, MAX_KEY_OFFSET, 0)
-#define KEY_START(k) (KEY_OFFSET(k) - KEY_SIZE(k))
-#define START_KEY(k) KEY(KEY_INODE(k), KEY_START(k), 0)
-#define PTR_DEV_BITS 12
-#define PTR_CHECK_DEV ((1 << PTR_DEV_BITS) - 1)
-#define MAKE_PTR(gen,offset,dev) ((((__u64) dev) << 51) | ((__u64) offset) << 8 | gen)
-#define bkey_copy(_dest,_src) memcpy(_dest, _src, bkey_bytes(_src))
-#define BKEY_PAD 8
-#define BKEY_PADDED(key) union { struct bkey key; __u64 key ##_pad[BKEY_PAD]; }
-#define BCACHE_SB_VERSION_CDEV 0
-#define BCACHE_SB_VERSION_BDEV 1
-#define BCACHE_SB_VERSION_CDEV_WITH_UUID 3
-#define BCACHE_SB_VERSION_BDEV_WITH_OFFSET 4
-#define BCACHE_SB_VERSION_CDEV_WITH_FEATURES 5
-#define BCACHE_SB_VERSION_BDEV_WITH_FEATURES 6
-#define BCACHE_SB_MAX_VERSION 6
-#define SB_SECTOR 8
-#define SB_OFFSET (SB_SECTOR << SECTOR_SHIFT)
-#define SB_SIZE 4096
-#define SB_LABEL_SIZE 32
-#define SB_JOURNAL_BUCKETS 256U
-#define MAX_CACHES_PER_SET 8
-#define BDEV_DATA_START_DEFAULT 16
-struct cache_sb_disk {
-  __le64 csum;
-  __le64 offset;
-  __le64 version;
-  __u8 magic[16];
-  __u8 uuid[16];
-  union {
-    __u8 set_uuid[16];
-    __le64 set_magic;
-  };
-  __u8 label[SB_LABEL_SIZE];
-  __le64 flags;
-  __le64 seq;
-  __le64 feature_compat;
-  __le64 feature_incompat;
-  __le64 feature_ro_compat;
-  __le64 pad[5];
-  union {
-    struct {
-      __le64 nbuckets;
-      __le16 block_size;
-      __le16 bucket_size;
-      __le16 nr_in_set;
-      __le16 nr_this_dev;
-    };
-    struct {
-      __le64 data_offset;
-    };
-  };
-  __le32 last_mount;
-  __le16 first_bucket;
-  union {
-    __le16 njournal_buckets;
-    __le16 keys;
-  };
-  __le64 d[SB_JOURNAL_BUCKETS];
-  __le16 obso_bucket_size_hi;
-};
-struct cache_sb {
-  __u64 offset;
-  __u64 version;
-  __u8 magic[16];
-  __u8 uuid[16];
-  union {
-    __u8 set_uuid[16];
-    __u64 set_magic;
-  };
-  __u8 label[SB_LABEL_SIZE];
-  __u64 flags;
-  __u64 seq;
-  __u64 feature_compat;
-  __u64 feature_incompat;
-  __u64 feature_ro_compat;
-  union {
-    struct {
-      __u64 nbuckets;
-      __u16 block_size;
-      __u16 nr_in_set;
-      __u16 nr_this_dev;
-      __u32 bucket_size;
-    };
-    struct {
-      __u64 data_offset;
-    };
-  };
-  __u32 last_mount;
-  __u16 first_bucket;
-  union {
-    __u16 njournal_buckets;
-    __u16 keys;
-  };
-  __u64 d[SB_JOURNAL_BUCKETS];
-};
-#define CACHE_REPLACEMENT_LRU 0U
-#define CACHE_REPLACEMENT_FIFO 1U
-#define CACHE_REPLACEMENT_RANDOM 2U
-#define CACHE_MODE_WRITETHROUGH 0U
-#define CACHE_MODE_WRITEBACK 1U
-#define CACHE_MODE_WRITEAROUND 2U
-#define CACHE_MODE_NONE 3U
-#define BDEV_STATE_NONE 0U
-#define BDEV_STATE_CLEAN 1U
-#define BDEV_STATE_DIRTY 2U
-#define BDEV_STATE_STALE 3U
-#define JSET_MAGIC 0x245235c1a3625032ULL
-#define PSET_MAGIC 0x6750e15f87337f91ULL
-#define BSET_MAGIC 0x90135c78b99e07f5ULL
-#define BCACHE_JSET_VERSION_UUIDv1 1
-#define BCACHE_JSET_VERSION_UUID 1
-#define BCACHE_JSET_VERSION 1
-struct jset {
-  __u64 csum;
-  __u64 magic;
-  __u64 seq;
-  __u32 version;
-  __u32 keys;
-  __u64 last_seq;
-  BKEY_PADDED(uuid_bucket);
-  BKEY_PADDED(btree_root);
-  __u16 btree_level;
-  __u16 pad[3];
-  __u64 prio_bucket[MAX_CACHES_PER_SET];
-  union {
-    struct bkey start[0];
-    __u64 d[0];
-  };
-};
-struct prio_set {
-  __u64 csum;
-  __u64 magic;
-  __u64 seq;
-  __u32 version;
-  __u32 pad;
-  __u64 next_bucket;
-  struct bucket_disk {
-    __u16 prio;
-    __u8 gen;
-  } __attribute((packed)) data[];
-};
-struct uuid_entry {
-  union {
-    struct {
-      __u8 uuid[16];
-      __u8 label[32];
-      __u32 first_reg;
-      __u32 last_reg;
-      __u32 invalidated;
-      __u32 flags;
-      __u64 sectors;
-    };
-    __u8 pad[128];
-  };
-};
-#define BCACHE_BSET_CSUM 1
-#define BCACHE_BSET_VERSION 1
-struct bset {
-  __u64 csum;
-  __u64 magic;
-  __u64 seq;
-  __u32 version;
-  __u32 keys;
-  union {
-    struct bkey start[0];
-    __u64 d[0];
-  };
-};
-struct uuid_entry_v0 {
-  __u8 uuid[16];
-  __u8 label[32];
-  __u32 first_reg;
-  __u32 last_reg;
-  __u32 invalidated;
-  __u32 pad;
-};
-#endif
diff --git a/libc/kernel/uapi/linux/bpf.h b/libc/kernel/uapi/linux/bpf.h
index 81d0386..833f00e 100644
--- a/libc/kernel/uapi/linux/bpf.h
+++ b/libc/kernel/uapi/linux/bpf.h
@@ -149,6 +149,7 @@
   BPF_MAP_TYPE_RINGBUF,
   BPF_MAP_TYPE_INODE_STORAGE,
   BPF_MAP_TYPE_TASK_STORAGE,
+  BPF_MAP_TYPE_BLOOM_FILTER,
 };
 enum bpf_prog_type {
   BPF_PROG_TYPE_UNSPEC,
@@ -313,6 +314,7 @@
     __u32 btf_key_type_id;
     __u32 btf_value_type_id;
     __u32 btf_vmlinux_value_type_id;
+    __u64 map_extra;
   };
   struct {
     __u32 map_fd;
@@ -476,7 +478,7 @@
     __u32 flags;
   } prog_bind_map;
 } __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), FN(send_signal), FN(tcp_gen_syncookie), FN(skb_output), FN(probe_read_user), FN(probe_read_kernel), FN(probe_read_user_str), FN(probe_read_kernel_str), FN(tcp_send_ack), FN(send_signal_thread), FN(jiffies64), FN(read_branch_records), FN(get_ns_current_pid_tgid), FN(xdp_output), FN(get_netns_cookie), FN(get_current_ancestor_cgroup_id), FN(sk_assign), FN(ktime_get_boot_ns), FN(seq_printf), FN(seq_write), FN(sk_cgroup_id), FN(sk_ancestor_cgroup_id), FN(ringbuf_output), FN(ringbuf_reserve), FN(ringbuf_submit), FN(ringbuf_discard), FN(ringbuf_query), FN(csum_level), FN(skc_to_tcp6_sock), FN(skc_to_tcp_sock), FN(skc_to_tcp_timewait_sock), FN(skc_to_tcp_request_sock), FN(skc_to_udp6_sock), FN(get_task_stack), FN(load_hdr_opt), FN(store_hdr_opt), FN(reserve_hdr_opt), FN(inode_storage_get), FN(inode_storage_delete), FN(d_path), FN(copy_from_user), FN(snprintf_btf), FN(seq_printf_btf), FN(skb_cgroup_classid), FN(redirect_neigh), FN(per_cpu_ptr), FN(this_cpu_ptr), FN(redirect_peer), FN(task_storage_get), FN(task_storage_delete), FN(get_current_task_btf), FN(bprm_opts_set), FN(ktime_get_coarse_ns), FN(ima_inode_hash), FN(sock_from_file), FN(check_mtu), FN(for_each_map_elem), FN(snprintf), FN(sys_bpf), FN(btf_find_by_name_kind), FN(sys_close), FN(timer_init), FN(timer_set_callback), FN(timer_start), FN(timer_cancel), FN(get_func_ip), FN(get_attach_cookie), FN(task_pt_regs),
+#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), FN(tcp_gen_syncookie), FN(skb_output), FN(probe_read_user), FN(probe_read_kernel), FN(probe_read_user_str), FN(probe_read_kernel_str), FN(tcp_send_ack), FN(send_signal_thread), FN(jiffies64), FN(read_branch_records), FN(get_ns_current_pid_tgid), FN(xdp_output), FN(get_netns_cookie), FN(get_current_ancestor_cgroup_id), FN(sk_assign), FN(ktime_get_boot_ns), FN(seq_printf), FN(seq_write), FN(sk_cgroup_id), FN(sk_ancestor_cgroup_id), FN(ringbuf_output), FN(ringbuf_reserve), FN(ringbuf_submit), FN(ringbuf_discard), FN(ringbuf_query), FN(csum_level), FN(skc_to_tcp6_sock), FN(skc_to_tcp_sock), FN(skc_to_tcp_timewait_sock), FN(skc_to_tcp_request_sock), FN(skc_to_udp6_sock), FN(get_task_stack), FN(load_hdr_opt), FN(store_hdr_opt), FN(reserve_hdr_opt), FN(inode_storage_get), FN(inode_storage_delete), FN(d_path), FN(copy_from_user), FN(snprintf_btf), FN(seq_printf_btf), FN(skb_cgroup_classid), FN(redirect_neigh), FN(per_cpu_ptr), FN(this_cpu_ptr), FN(redirect_peer), FN(task_storage_get), FN(task_storage_delete), FN(get_current_task_btf), FN(bprm_opts_set), FN(ktime_get_coarse_ns), FN(ima_inode_hash), FN(sock_from_file), FN(check_mtu), FN(for_each_map_elem), FN(snprintf), FN(sys_bpf), FN(btf_find_by_name_kind), FN(sys_close), FN(timer_init), FN(timer_set_callback), FN(timer_start), FN(timer_cancel), FN(get_func_ip), FN(get_attach_cookie), FN(task_pt_regs), FN(get_branch_snapshot), FN(trace_vprintk), FN(skc_to_unix_sock), FN(kallsyms_lookup_name),
 #define __BPF_ENUM_FN(x) BPF_FUNC_ ##x
 enum bpf_func_id {
   __BPF_FUNC_MAPPER(__BPF_ENUM_FN) __BPF_FUNC_MAX_ID,
@@ -624,6 +626,8 @@
   __u32 gso_segs;
   __bpf_md_ptr(struct bpf_sock *, sk);
   __u32 gso_size;
+  __u32 : 32;
+  __u64 hwtstamp;
 };
 struct bpf_tunnel_key {
   __u32 tunnel_id;
@@ -811,6 +815,7 @@
   __u64 run_time_ns;
   __u64 run_cnt;
   __u64 recursion_misses;
+  __u32 verified_insns;
 } __attribute__((aligned(8)));
 struct bpf_map_info {
   __u32 type;
@@ -827,6 +832,8 @@
   __u32 btf_id;
   __u32 btf_key_type_id;
   __u32 btf_value_type_id;
+  __u32 : 32;
+  __u64 map_extra;
 } __attribute__((aligned(8)));
 struct bpf_btf_info {
   __aligned_u64 btf;
diff --git a/libc/kernel/uapi/linux/btf.h b/libc/kernel/uapi/linux/btf.h
index 7f48b7a..1bb64db 100644
--- a/libc/kernel/uapi/linux/btf.h
+++ b/libc/kernel/uapi/linux/btf.h
@@ -45,25 +45,28 @@
 #define BTF_INFO_KIND(info) (((info) >> 24) & 0x1f)
 #define BTF_INFO_VLEN(info) ((info) & 0xffff)
 #define BTF_INFO_KFLAG(info) ((info) >> 31)
-#define BTF_KIND_UNKN 0
-#define BTF_KIND_INT 1
-#define BTF_KIND_PTR 2
-#define BTF_KIND_ARRAY 3
-#define BTF_KIND_STRUCT 4
-#define BTF_KIND_UNION 5
-#define BTF_KIND_ENUM 6
-#define BTF_KIND_FWD 7
-#define BTF_KIND_TYPEDEF 8
-#define BTF_KIND_VOLATILE 9
-#define BTF_KIND_CONST 10
-#define BTF_KIND_RESTRICT 11
-#define BTF_KIND_FUNC 12
-#define BTF_KIND_FUNC_PROTO 13
-#define BTF_KIND_VAR 14
-#define BTF_KIND_DATASEC 15
-#define BTF_KIND_FLOAT 16
-#define BTF_KIND_MAX BTF_KIND_FLOAT
-#define NR_BTF_KINDS (BTF_KIND_MAX + 1)
+enum {
+  BTF_KIND_UNKN = 0,
+  BTF_KIND_INT = 1,
+  BTF_KIND_PTR = 2,
+  BTF_KIND_ARRAY = 3,
+  BTF_KIND_STRUCT = 4,
+  BTF_KIND_UNION = 5,
+  BTF_KIND_ENUM = 6,
+  BTF_KIND_FWD = 7,
+  BTF_KIND_TYPEDEF = 8,
+  BTF_KIND_VOLATILE = 9,
+  BTF_KIND_CONST = 10,
+  BTF_KIND_RESTRICT = 11,
+  BTF_KIND_FUNC = 12,
+  BTF_KIND_FUNC_PROTO = 13,
+  BTF_KIND_VAR = 14,
+  BTF_KIND_DATASEC = 15,
+  BTF_KIND_FLOAT = 16,
+  BTF_KIND_DECL_TAG = 17,
+  NR_BTF_KINDS,
+  BTF_KIND_MAX = NR_BTF_KINDS - 1,
+};
 #define BTF_INT_ENCODING(VAL) (((VAL) & 0x0f000000) >> 24)
 #define BTF_INT_OFFSET(VAL) (((VAL) & 0x00ff0000) >> 16)
 #define BTF_INT_BITS(VAL) ((VAL) & 0x000000ff)
@@ -108,4 +111,7 @@
   __u32 offset;
   __u32 size;
 };
+struct btf_decl_tag {
+  __s32 component_idx;
+};
 #endif
diff --git a/libc/kernel/uapi/linux/btrfs.h b/libc/kernel/uapi/linux/btrfs.h
index a40e24d..08b96a3 100644
--- a/libc/kernel/uapi/linux/btrfs.h
+++ b/libc/kernel/uapi/linux/btrfs.h
@@ -420,14 +420,16 @@
 #define BTRFS_SEND_FLAG_NO_FILE_DATA 0x1
 #define BTRFS_SEND_FLAG_OMIT_STREAM_HEADER 0x2
 #define BTRFS_SEND_FLAG_OMIT_END_CMD 0x4
-#define BTRFS_SEND_FLAG_MASK (BTRFS_SEND_FLAG_NO_FILE_DATA | BTRFS_SEND_FLAG_OMIT_STREAM_HEADER | BTRFS_SEND_FLAG_OMIT_END_CMD)
+#define BTRFS_SEND_FLAG_VERSION 0x8
+#define BTRFS_SEND_FLAG_MASK (BTRFS_SEND_FLAG_NO_FILE_DATA | BTRFS_SEND_FLAG_OMIT_STREAM_HEADER | BTRFS_SEND_FLAG_OMIT_END_CMD | BTRFS_SEND_FLAG_VERSION)
 struct btrfs_ioctl_send_args {
   __s64 send_fd;
   __u64 clone_sources_count;
   __u64 __user * clone_sources;
   __u64 parent_root;
   __u64 flags;
-  __u64 reserved[4];
+  __u32 version;
+  __u8 reserved[28];
 };
 struct btrfs_ioctl_get_subvol_info_args {
   __u64 treeid;
diff --git a/libc/kernel/uapi/linux/byteorder/big_endian.h b/libc/kernel/uapi/linux/byteorder/big_endian.h
index c0ddccc..b6c978b 100644
--- a/libc/kernel/uapi/linux/byteorder/big_endian.h
+++ b/libc/kernel/uapi/linux/byteorder/big_endian.h
@@ -24,6 +24,7 @@
 #ifndef __BIG_ENDIAN_BITFIELD
 #define __BIG_ENDIAN_BITFIELD
 #endif
+#include <linux/stddef.h>
 #include <linux/types.h>
 #include <linux/swab.h>
 #define __constant_htonl(x) ((__force __be32) (__u32) (x))
diff --git a/libc/kernel/uapi/linux/byteorder/little_endian.h b/libc/kernel/uapi/linux/byteorder/little_endian.h
index ea00092..a272d4d 100644
--- a/libc/kernel/uapi/linux/byteorder/little_endian.h
+++ b/libc/kernel/uapi/linux/byteorder/little_endian.h
@@ -24,6 +24,7 @@
 #ifndef __LITTLE_ENDIAN_BITFIELD
 #define __LITTLE_ENDIAN_BITFIELD
 #endif
+#include <linux/stddef.h>
 #include <linux/types.h>
 #include <linux/swab.h>
 #define __constant_htonl(x) ((__force __be32) ___constant_swab32((x)))
diff --git a/libc/kernel/uapi/linux/can/netlink.h b/libc/kernel/uapi/linux/can/netlink.h
index 3e6551d..5ea6346 100644
--- a/libc/kernel/uapi/linux/can/netlink.h
+++ b/libc/kernel/uapi/linux/can/netlink.h
@@ -69,6 +69,8 @@
 #define CAN_CTRLMODE_PRESUME_ACK 0x40
 #define CAN_CTRLMODE_FD_NON_ISO 0x80
 #define CAN_CTRLMODE_CC_LEN8_DLC 0x100
+#define CAN_CTRLMODE_TDC_AUTO 0x200
+#define CAN_CTRLMODE_TDC_MANUAL 0x400
 struct can_device_stats {
   __u32 bus_error;
   __u32 error_warning;
@@ -94,8 +96,23 @@
   IFLA_CAN_BITRATE_CONST,
   IFLA_CAN_DATA_BITRATE_CONST,
   IFLA_CAN_BITRATE_MAX,
-  __IFLA_CAN_MAX
+  IFLA_CAN_TDC,
+  __IFLA_CAN_MAX,
+  IFLA_CAN_MAX = __IFLA_CAN_MAX - 1
 };
-#define IFLA_CAN_MAX (__IFLA_CAN_MAX - 1)
+enum {
+  IFLA_CAN_TDC_UNSPEC,
+  IFLA_CAN_TDC_TDCV_MIN,
+  IFLA_CAN_TDC_TDCV_MAX,
+  IFLA_CAN_TDC_TDCO_MIN,
+  IFLA_CAN_TDC_TDCO_MAX,
+  IFLA_CAN_TDC_TDCF_MIN,
+  IFLA_CAN_TDC_TDCF_MAX,
+  IFLA_CAN_TDC_TDCV,
+  IFLA_CAN_TDC_TDCO,
+  IFLA_CAN_TDC_TDCF,
+  __IFLA_CAN_TDC,
+  IFLA_CAN_TDC_MAX = __IFLA_CAN_TDC - 1
+};
 #define CAN_TERMINATION_DISABLED 0
 #endif
diff --git a/libc/kernel/uapi/linux/cdrom.h b/libc/kernel/uapi/linux/cdrom.h
index 8f1c2f0..0fe0727 100644
--- a/libc/kernel/uapi/linux/cdrom.h
+++ b/libc/kernel/uapi/linux/cdrom.h
@@ -67,6 +67,7 @@
 #define CDROM_SEND_PACKET 0x5393
 #define CDROM_NEXT_WRITABLE 0x5394
 #define CDROM_LAST_WRITTEN 0x5395
+#define CDROM_TIMED_MEDIA_CHANGE 0x5396
 struct cdrom_msf0 {
   __u8 minute;
   __u8 second;
@@ -160,6 +161,11 @@
     void __user * unused;
   };
 };
+struct cdrom_timed_media_change_info {
+  __s64 last_media_change;
+  __u64 media_flags;
+};
+#define MEDIA_CHANGED_FLAG 0x1
 #define CD_MINS 74
 #define CD_SECS 60
 #define CD_FRAMES 75
diff --git a/libc/kernel/uapi/linux/counter.h b/libc/kernel/uapi/linux/counter.h
new file mode 100644
index 0000000..091e33d
--- /dev/null
+++ b/libc/kernel/uapi/linux/counter.h
@@ -0,0 +1,93 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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_COUNTER_H_
+#define _UAPI_COUNTER_H_
+#include <linux/ioctl.h>
+#include <linux/types.h>
+enum counter_component_type {
+  COUNTER_COMPONENT_NONE,
+  COUNTER_COMPONENT_SIGNAL,
+  COUNTER_COMPONENT_COUNT,
+  COUNTER_COMPONENT_FUNCTION,
+  COUNTER_COMPONENT_SYNAPSE_ACTION,
+  COUNTER_COMPONENT_EXTENSION,
+};
+enum counter_scope {
+  COUNTER_SCOPE_DEVICE,
+  COUNTER_SCOPE_SIGNAL,
+  COUNTER_SCOPE_COUNT,
+};
+struct counter_component {
+  __u8 type;
+  __u8 scope;
+  __u8 parent;
+  __u8 id;
+};
+enum counter_event_type {
+  COUNTER_EVENT_OVERFLOW,
+  COUNTER_EVENT_UNDERFLOW,
+  COUNTER_EVENT_OVERFLOW_UNDERFLOW,
+  COUNTER_EVENT_THRESHOLD,
+  COUNTER_EVENT_INDEX,
+};
+struct counter_watch {
+  struct counter_component component;
+  __u8 event;
+  __u8 channel;
+};
+#define COUNTER_ADD_WATCH_IOCTL _IOW(0x3E, 0x00, struct counter_watch)
+#define COUNTER_ENABLE_EVENTS_IOCTL _IO(0x3E, 0x01)
+#define COUNTER_DISABLE_EVENTS_IOCTL _IO(0x3E, 0x02)
+struct counter_event {
+  __aligned_u64 timestamp;
+  __aligned_u64 value;
+  struct counter_watch watch;
+  __u8 status;
+};
+enum counter_count_direction {
+  COUNTER_COUNT_DIRECTION_FORWARD,
+  COUNTER_COUNT_DIRECTION_BACKWARD,
+};
+enum counter_count_mode {
+  COUNTER_COUNT_MODE_NORMAL,
+  COUNTER_COUNT_MODE_RANGE_LIMIT,
+  COUNTER_COUNT_MODE_NON_RECYCLE,
+  COUNTER_COUNT_MODE_MODULO_N,
+};
+enum counter_function {
+  COUNTER_FUNCTION_INCREASE,
+  COUNTER_FUNCTION_DECREASE,
+  COUNTER_FUNCTION_PULSE_DIRECTION,
+  COUNTER_FUNCTION_QUADRATURE_X1_A,
+  COUNTER_FUNCTION_QUADRATURE_X1_B,
+  COUNTER_FUNCTION_QUADRATURE_X2_A,
+  COUNTER_FUNCTION_QUADRATURE_X2_B,
+  COUNTER_FUNCTION_QUADRATURE_X4,
+};
+enum counter_signal_level {
+  COUNTER_SIGNAL_LEVEL_LOW,
+  COUNTER_SIGNAL_LEVEL_HIGH,
+};
+enum counter_synapse_action {
+  COUNTER_SYNAPSE_ACTION_NONE,
+  COUNTER_SYNAPSE_ACTION_RISING_EDGE,
+  COUNTER_SYNAPSE_ACTION_FALLING_EDGE,
+  COUNTER_SYNAPSE_ACTION_BOTH_EDGES,
+};
+#endif
diff --git a/libc/kernel/uapi/linux/devlink.h b/libc/kernel/uapi/linux/devlink.h
index cf2365f..a809306 100644
--- a/libc/kernel/uapi/linux/devlink.h
+++ b/libc/kernel/uapi/linux/devlink.h
@@ -383,6 +383,7 @@
   DEVLINK_ATTR_RATE_TX_MAX,
   DEVLINK_ATTR_RATE_NODE_NAME,
   DEVLINK_ATTR_RATE_PARENT_NODE_NAME,
+  DEVLINK_ATTR_REGION_MAX_SNAPSHOTS,
   __DEVLINK_ATTR_MAX,
   DEVLINK_ATTR_MAX = __DEVLINK_ATTR_MAX - 1
 };
diff --git a/libc/kernel/uapi/linux/dlm_device.h b/libc/kernel/uapi/linux/dlm_device.h
index 9cf41a8..5e54d2e 100644
--- a/libc/kernel/uapi/linux/dlm_device.h
+++ b/libc/kernel/uapi/linux/dlm_device.h
@@ -39,12 +39,12 @@
   void __user * bastaddr;
   struct dlm_lksb __user * lksb;
   char lvb[DLM_USER_LVB_LEN];
-  char name[0];
+  char name[];
 };
 struct dlm_lspace_params {
   __u32 flags;
   __u32 minor;
-  char name[0];
+  char name[];
 };
 struct dlm_purge_params {
   __u32 nodeid;
diff --git a/libc/kernel/uapi/linux/ethtool.h b/libc/kernel/uapi/linux/ethtool.h
index 5f9da4d..baf417d 100644
--- a/libc/kernel/uapi/linux/ethtool.h
+++ b/libc/kernel/uapi/linux/ethtool.h
@@ -207,6 +207,7 @@
   ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE,
   ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED,
   ETHTOOL_LINK_EXT_STATE_OVERHEAT,
+  ETHTOOL_LINK_EXT_STATE_MODULE,
 };
 enum ethtool_link_ext_substate_autoneg {
   ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1,
@@ -239,6 +240,9 @@
   ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1,
   ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE,
 };
+enum ethtool_link_ext_substate_module {
+  ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY = 1,
+};
 #define ETH_GSTRING_LEN 32
 enum ethtool_stringset {
   ETH_SS_TEST = 0,
@@ -264,6 +268,14 @@
   ETH_SS_STATS_RMON,
   ETH_SS_COUNT
 };
+enum ethtool_module_power_mode_policy {
+  ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH = 1,
+  ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO,
+};
+enum ethtool_module_power_mode {
+  ETHTOOL_MODULE_POWER_MODE_LOW = 1,
+  ETHTOOL_MODULE_POWER_MODE_HIGH,
+};
 struct ethtool_gstrings {
   __u32 cmd;
   __u32 string_set;
diff --git a/libc/kernel/uapi/linux/ethtool_netlink.h b/libc/kernel/uapi/linux/ethtool_netlink.h
index f4595da..95d69b4 100644
--- a/libc/kernel/uapi/linux/ethtool_netlink.h
+++ b/libc/kernel/uapi/linux/ethtool_netlink.h
@@ -54,6 +54,8 @@
   ETHTOOL_MSG_MODULE_EEPROM_GET,
   ETHTOOL_MSG_STATS_GET,
   ETHTOOL_MSG_PHC_VCLOCKS_GET,
+  ETHTOOL_MSG_MODULE_GET,
+  ETHTOOL_MSG_MODULE_SET,
   __ETHTOOL_MSG_USER_CNT,
   ETHTOOL_MSG_USER_MAX = __ETHTOOL_MSG_USER_CNT - 1
 };
@@ -93,6 +95,8 @@
   ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY,
   ETHTOOL_MSG_STATS_GET_REPLY,
   ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY,
+  ETHTOOL_MSG_MODULE_GET_REPLY,
+  ETHTOOL_MSG_MODULE_NTF,
   __ETHTOOL_MSG_KERNEL_CNT,
   ETHTOOL_MSG_KERNEL_MAX = __ETHTOOL_MSG_KERNEL_CNT - 1
 };
@@ -588,6 +592,14 @@
   __ETHTOOL_A_STATS_RMON_CNT,
   ETHTOOL_A_STATS_RMON_MAX = (__ETHTOOL_A_STATS_RMON_CNT - 1)
 };
+enum {
+  ETHTOOL_A_MODULE_UNSPEC,
+  ETHTOOL_A_MODULE_HEADER,
+  ETHTOOL_A_MODULE_POWER_MODE_POLICY,
+  ETHTOOL_A_MODULE_POWER_MODE,
+  __ETHTOOL_A_MODULE_CNT,
+  ETHTOOL_A_MODULE_MAX = (__ETHTOOL_A_MODULE_CNT - 1)
+};
 #define ETHTOOL_GENL_NAME "ethtool"
 #define ETHTOOL_GENL_VERSION 1
 #define ETHTOOL_MCGRP_MONITOR_NAME "monitor"
diff --git a/libc/kernel/uapi/linux/fanotify.h b/libc/kernel/uapi/linux/fanotify.h
index 954ce96..b9a9364 100644
--- a/libc/kernel/uapi/linux/fanotify.h
+++ b/libc/kernel/uapi/linux/fanotify.h
@@ -33,6 +33,7 @@
 #define FAN_MOVE_SELF 0x00000800
 #define FAN_OPEN_EXEC 0x00001000
 #define FAN_Q_OVERFLOW 0x00004000
+#define FAN_FS_ERROR 0x00008000
 #define FAN_OPEN_PERM 0x00010000
 #define FAN_ACCESS_PERM 0x00020000
 #define FAN_OPEN_EXEC_PERM 0x00040000
@@ -84,6 +85,7 @@
 #define FAN_EVENT_INFO_TYPE_DFID_NAME 2
 #define FAN_EVENT_INFO_TYPE_DFID 3
 #define FAN_EVENT_INFO_TYPE_PIDFD 4
+#define FAN_EVENT_INFO_TYPE_ERROR 5
 struct fanotify_event_info_header {
   __u8 info_type;
   __u8 pad;
@@ -98,6 +100,11 @@
   struct fanotify_event_info_header hdr;
   __s32 pidfd;
 };
+struct fanotify_event_info_error {
+  struct fanotify_event_info_header hdr;
+  __s32 error;
+  __u32 error_count;
+};
 struct fanotify_response {
   __s32 fd;
   __u32 response;
diff --git a/libc/kernel/uapi/linux/fuse.h b/libc/kernel/uapi/linux/fuse.h
index 114931e..358db19 100644
--- a/libc/kernel/uapi/linux/fuse.h
+++ b/libc/kernel/uapi/linux/fuse.h
@@ -20,7 +20,7 @@
 #define _LINUX_FUSE_H
 #include <stdint.h>
 #define FUSE_KERNEL_VERSION 7
-#define FUSE_KERNEL_MINOR_VERSION 34
+#define FUSE_KERNEL_MINOR_VERSION 35
 #define FUSE_ROOT_ID 1
 struct fuse_attr {
   uint64_t ino;
@@ -75,6 +75,7 @@
 #define FOPEN_NONSEEKABLE (1 << 2)
 #define FOPEN_CACHE_DIR (1 << 3)
 #define FOPEN_STREAM (1 << 4)
+#define FOPEN_NOFLUSH (1 << 5)
 #define FUSE_ASYNC_READ (1 << 0)
 #define FUSE_POSIX_LOCKS (1 << 1)
 #define FUSE_FILE_OPS (1 << 2)
diff --git a/libc/kernel/uapi/linux/futex.h b/libc/kernel/uapi/linux/futex.h
index aa0dac1..c80b90c 100644
--- a/libc/kernel/uapi/linux/futex.h
+++ b/libc/kernel/uapi/linux/futex.h
@@ -50,6 +50,14 @@
 #define FUTEX_WAKE_BITSET_PRIVATE (FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG)
 #define FUTEX_WAIT_REQUEUE_PI_PRIVATE (FUTEX_WAIT_REQUEUE_PI | FUTEX_PRIVATE_FLAG)
 #define FUTEX_CMP_REQUEUE_PI_PRIVATE (FUTEX_CMP_REQUEUE_PI | FUTEX_PRIVATE_FLAG)
+#define FUTEX_32 2
+#define FUTEX_WAITV_MAX 128
+struct futex_waitv {
+  __u64 val;
+  __u64 uaddr;
+  __u32 flags;
+  __u32 __reserved;
+};
 struct robust_list {
   struct robust_list __user * next;
 };
diff --git a/libc/kernel/uapi/linux/if_ether.h b/libc/kernel/uapi/linux/if_ether.h
index 2890b36..1f7f8f2 100644
--- a/libc/kernel/uapi/linux/if_ether.h
+++ b/libc/kernel/uapi/linux/if_ether.h
@@ -67,6 +67,7 @@
 #define ETH_P_LINK_CTL 0x886c
 #define ETH_P_ATMFATE 0x8884
 #define ETH_P_PAE 0x888E
+#define ETH_P_REALTEK 0x8899
 #define ETH_P_AOE 0x88A2
 #define ETH_P_8021AD 0x88A8
 #define ETH_P_802_EX1 0x88B5
diff --git a/libc/kernel/uapi/linux/io_uring.h b/libc/kernel/uapi/linux/io_uring.h
index 17e8050..f6e8250 100644
--- a/libc/kernel/uapi/linux/io_uring.h
+++ b/libc/kernel/uapi/linux/io_uring.h
@@ -134,6 +134,7 @@
 #define IORING_TIMEOUT_BOOTTIME (1U << 2)
 #define IORING_TIMEOUT_REALTIME (1U << 3)
 #define IORING_LINK_TIMEOUT_UPDATE (1U << 4)
+#define IORING_TIMEOUT_ETIME_SUCCESS (1U << 5)
 #define IORING_TIMEOUT_CLOCK_MASK (IORING_TIMEOUT_BOOTTIME | IORING_TIMEOUT_REALTIME)
 #define IORING_TIMEOUT_UPDATE_MASK (IORING_TIMEOUT_UPDATE | IORING_LINK_TIMEOUT_UPDATE)
 #define SPLICE_F_FD_IN_FIXED (1U << 31)
diff --git a/libc/kernel/uapi/linux/ioam6_iptunnel.h b/libc/kernel/uapi/linux/ioam6_iptunnel.h
index 31f1f74..7426225 100644
--- a/libc/kernel/uapi/linux/ioam6_iptunnel.h
+++ b/libc/kernel/uapi/linux/ioam6_iptunnel.h
@@ -19,7 +19,18 @@
 #ifndef _UAPI_LINUX_IOAM6_IPTUNNEL_H
 #define _UAPI_LINUX_IOAM6_IPTUNNEL_H
 enum {
+  __IOAM6_IPTUNNEL_MODE_MIN,
+  IOAM6_IPTUNNEL_MODE_INLINE,
+  IOAM6_IPTUNNEL_MODE_ENCAP,
+  IOAM6_IPTUNNEL_MODE_AUTO,
+  __IOAM6_IPTUNNEL_MODE_MAX,
+};
+#define IOAM6_IPTUNNEL_MODE_MIN (__IOAM6_IPTUNNEL_MODE_MIN + 1)
+#define IOAM6_IPTUNNEL_MODE_MAX (__IOAM6_IPTUNNEL_MODE_MAX - 1)
+enum {
   IOAM6_IPTUNNEL_UNSPEC,
+  IOAM6_IPTUNNEL_MODE,
+  IOAM6_IPTUNNEL_DST,
   IOAM6_IPTUNNEL_TRACE,
   __IOAM6_IPTUNNEL_MAX,
 };
diff --git a/libc/kernel/uapi/linux/ip.h b/libc/kernel/uapi/linux/ip.h
index 564fd8d..9571cac 100644
--- a/libc/kernel/uapi/linux/ip.h
+++ b/libc/kernel/uapi/linux/ip.h
@@ -146,6 +146,7 @@
   IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
   IPV4_DEVCONF_DROP_GRATUITOUS_ARP,
   IPV4_DEVCONF_BC_FORWARDING,
+  IPV4_DEVCONF_ARP_EVICT_NOCARRIER,
   __IPV4_DEVCONF_MAX
 };
 #define IPV4_DEVCONF_MAX (__IPV4_DEVCONF_MAX - 1)
diff --git a/libc/kernel/uapi/linux/ipmi.h b/libc/kernel/uapi/linux/ipmi.h
index cf9928f..dd88f2f 100644
--- a/libc/kernel/uapi/linux/ipmi.h
+++ b/libc/kernel/uapi/linux/ipmi.h
@@ -40,6 +40,14 @@
   unsigned char slave_addr;
   unsigned char lun;
 };
+#define IPMI_IPMB_DIRECT_ADDR_TYPE 0x81
+struct ipmi_ipmb_direct_addr {
+  int addr_type;
+  short channel;
+  unsigned char slave_addr;
+  unsigned char rs_lun;
+  unsigned char rq_lun;
+};
 #define IPMI_LAN_ADDR_TYPE 0x04
 struct ipmi_lan_addr {
   int addr_type;
diff --git a/libc/kernel/uapi/linux/ipv6.h b/libc/kernel/uapi/linux/ipv6.h
index 14c818c..b3db9ce 100644
--- a/libc/kernel/uapi/linux/ipv6.h
+++ b/libc/kernel/uapi/linux/ipv6.h
@@ -147,6 +147,7 @@
   DEVCONF_IOAM6_ENABLED,
   DEVCONF_IOAM6_ID,
   DEVCONF_IOAM6_ID_WIDE,
+  DEVCONF_NDISC_EVICT_NOCARRIER,
   DEVCONF_MAX
 };
 #endif
diff --git a/libc/kernel/uapi/linux/kvm.h b/libc/kernel/uapi/linux/kvm.h
index 78e962c..4e815cc 100644
--- a/libc/kernel/uapi/linux/kvm.h
+++ b/libc/kernel/uapi/linux/kvm.h
@@ -215,6 +215,7 @@
 #define KVM_EXIT_AP_RESET_HOLD 32
 #define KVM_EXIT_X86_BUS_LOCK 33
 #define KVM_EXIT_XEN 34
+#define KVM_EXIT_RISCV_SBI 35
 #define KVM_INTERNAL_ERROR_EMULATION 1
 #define KVM_INTERNAL_ERROR_SIMUL_EX 2
 #define KVM_INTERNAL_ERROR_DELIVERY_EV 3
@@ -305,8 +306,12 @@
       __u32 suberror;
       __u32 ndata;
       __u64 flags;
-      __u8 insn_size;
-      __u8 insn_bytes[15];
+      union {
+        struct {
+          __u8 insn_size;
+          __u8 insn_bytes[15];
+        };
+      };
     } emulation_failure;
     struct {
       __u64 gprs[32];
@@ -361,6 +366,12 @@
       __u64 data;
     } msr;
     struct kvm_xen_exit xen;
+    struct {
+      unsigned long extension_id;
+      unsigned long function_id;
+      unsigned long args[6];
+      unsigned long ret[2];
+    } riscv_sbi;
     char padding[256];
   };
 #define SYNC_REGS_SIZE_BYTES 2048
@@ -874,6 +885,7 @@
 #define KVM_CAP_BINARY_STATS_FD 203
 #define KVM_CAP_EXIT_ON_EMULATION_FAILURE 204
 #define KVM_CAP_ARM_MTE 205
+#define KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM 206
 #ifdef KVM_CAP_IRQ_ROUTING
 struct kvm_irq_routing_irqchip {
   __u32 irqchip;
@@ -958,10 +970,15 @@
   __u8 pad[16];
 };
 #define KVM_CLOCK_TSC_STABLE 2
+#define KVM_CLOCK_REALTIME (1 << 2)
+#define KVM_CLOCK_HOST_TSC (1 << 3)
 struct kvm_clock_data {
   __u64 clock;
   __u32 flags;
-  __u32 pad[9];
+  __u32 pad0;
+  __u64 realtime;
+  __u64 host_tsc;
+  __u32 pad[4];
 };
 #define KVM_MMU_FSL_BOOKE_NOHV 0
 #define KVM_MMU_FSL_BOOKE_HV 1
diff --git a/libc/kernel/uapi/linux/map_to_14segment.h b/libc/kernel/uapi/linux/map_to_14segment.h
new file mode 100644
index 0000000..657df6c
--- /dev/null
+++ b/libc/kernel/uapi/linux/map_to_14segment.h
@@ -0,0 +1,56 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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 MAP_TO_14SEGMENT_H
+#define MAP_TO_14SEGMENT_H
+#include <linux/errno.h>
+#include <linux/types.h>
+#include <asm/byteorder.h>
+#define BIT_SEG14_A 0
+#define BIT_SEG14_B 1
+#define BIT_SEG14_C 2
+#define BIT_SEG14_D 3
+#define BIT_SEG14_E 4
+#define BIT_SEG14_F 5
+#define BIT_SEG14_G1 6
+#define BIT_SEG14_G2 7
+#define BIT_SEG14_H 8
+#define BIT_SEG14_I 9
+#define BIT_SEG14_J 10
+#define BIT_SEG14_K 11
+#define BIT_SEG14_L 12
+#define BIT_SEG14_M 13
+#define BIT_SEG14_RESERVED1 14
+#define BIT_SEG14_RESERVED2 15
+struct seg14_conversion_map {
+  __be16 table[128];
+};
+#define SEG14_CONVERSION_MAP(_name,_map) struct seg14_conversion_map _name = {.table = { _map } }
+#define MAP_TO_SEG14_SYSFS_FILE "map_seg14"
+#define _SEG14(sym,a,b,c,d,e,f,g1,g2,h,j,k,l,m,n) __cpu_to_be16(a << BIT_SEG14_A | b << BIT_SEG14_B | c << BIT_SEG14_C | d << BIT_SEG14_D | e << BIT_SEG14_E | f << BIT_SEG14_F | g1 << BIT_SEG14_G1 | g2 << BIT_SEG14_G2 | h << BIT_SEG14_H | j << BIT_SEG14_I | k << BIT_SEG14_J | l << BIT_SEG14_K | m << BIT_SEG14_L | n << BIT_SEG14_M)
+#define _MAP_0_32_ASCII_SEG14_NON_PRINTABLE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+#define _MAP_33_47_ASCII_SEG14_SYMBOL _SEG14('!', 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), _SEG14('"', 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0), _SEG14('#', 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0), _SEG14('$', 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0), _SEG14('%', 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0), _SEG14('&', 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1), _SEG14('\'', 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0), _SEG14('(', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1), _SEG14(')', 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0), _SEG14('*', 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1), _SEG14('+', 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0), _SEG14(',', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0), _SEG14('-', 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0), _SEG14('.', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1), _SEG14('/', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0),
+#define _MAP_48_57_ASCII_SEG14_NUMERIC _SEG14('0', 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0), _SEG14('1', 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0), _SEG14('2', 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0), _SEG14('3', 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0), _SEG14('4', 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0), _SEG14('5', 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1), _SEG14('6', 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0), _SEG14('7', 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0), _SEG14('8', 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0), _SEG14('9', 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0),
+#define _MAP_58_64_ASCII_SEG14_SYMBOL _SEG14(':', 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0), _SEG14(';', 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0), _SEG14('<', 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1), _SEG14('=', 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0), _SEG14('>', 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0), _SEG14('?', 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0), _SEG14('@', 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0),
+#define _MAP_65_90_ASCII_SEG14_ALPHA_UPPER _SEG14('A', 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0), _SEG14('B', 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0), _SEG14('C', 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0), _SEG14('D', 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0), _SEG14('E', 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0), _SEG14('F', 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0), _SEG14('G', 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0), _SEG14('H', 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0), _SEG14('I', 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0), _SEG14('J', 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), _SEG14('K', 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1), _SEG14('L', 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0), _SEG14('M', 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0), _SEG14('N', 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1), _SEG14('O', 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0), _SEG14('P', 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0), _SEG14('Q', 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1), _SEG14('R', 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1), _SEG14('S', 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0), _SEG14('T', 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0), _SEG14('U', 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0), _SEG14('V', 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0), _SEG14('W', 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1), _SEG14('X', 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1), _SEG14('Y', 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0), _SEG14('Z', 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0),
+#define _MAP_91_96_ASCII_SEG14_SYMBOL _SEG14('[', 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0), _SEG14('\\', 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), _SEG14(']', 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), _SEG14('^', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1), _SEG14('_', 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), _SEG14('`', 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0),
+#define _MAP_97_122_ASCII_SEG14_ALPHA_LOWER _SEG14('a', 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0), _SEG14('b', 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1), _SEG14('c', 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0), _SEG14('d', 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0), _SEG14('e', 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0), _SEG14('f', 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0), _SEG14('g', 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0), _SEG14('h', 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0), _SEG14('i', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0), _SEG14('j', 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0), _SEG14('k', 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1), _SEG14('l', 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0), _SEG14('m', 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0), _SEG14('n', 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0), _SEG14('o', 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0), _SEG14('p', 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0), _SEG14('q', 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0), _SEG14('r', 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0), _SEG14('s', 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1), _SEG14('t', 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0), _SEG14('u', 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0), _SEG14('v', 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0), _SEG14('w', 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1), _SEG14('x', 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1), _SEG14('y', 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0), _SEG14('z', 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0),
+#define _MAP_123_126_ASCII_SEG14_SYMBOL _SEG14('{', 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0), _SEG14('|', 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0), _SEG14('}', 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1), _SEG14('~', 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0),
+#define MAP_ASCII14SEG_ALPHANUM _MAP_0_32_ASCII_SEG14_NON_PRINTABLE _MAP_33_47_ASCII_SEG14_SYMBOL _MAP_48_57_ASCII_SEG14_NUMERIC _MAP_58_64_ASCII_SEG14_SYMBOL _MAP_65_90_ASCII_SEG14_ALPHA_UPPER _MAP_91_96_ASCII_SEG14_SYMBOL _MAP_97_122_ASCII_SEG14_ALPHA_LOWER _MAP_123_126_ASCII_SEG14_SYMBOL
+#define SEG14_DEFAULT_MAP(_name) SEG14_CONVERSION_MAP(_name, MAP_ASCII14SEG_ALPHANUM)
+#endif
diff --git a/libc/kernel/uapi/linux/mctp.h b/libc/kernel/uapi/linux/mctp.h
index b6bee11..21a9a14 100644
--- a/libc/kernel/uapi/linux/mctp.h
+++ b/libc/kernel/uapi/linux/mctp.h
@@ -20,6 +20,7 @@
 #define __UAPI_MCTP_H
 #include <linux/types.h>
 #include <linux/socket.h>
+#include <linux/netdevice.h>
 typedef __u8 mctp_eid_t;
 struct mctp_addr {
   mctp_eid_t s_addr;
@@ -33,9 +34,17 @@
   __u8 smctp_tag;
   __u8 __smctp_pad1;
 };
+struct sockaddr_mctp_ext {
+  struct sockaddr_mctp smctp_base;
+  int smctp_ifindex;
+  __u8 smctp_halen;
+  __u8 __smctp_pad0[3];
+  __u8 smctp_haddr[MAX_ADDR_LEN];
+};
 #define MCTP_NET_ANY 0x0
 #define MCTP_ADDR_NULL 0x00
 #define MCTP_ADDR_ANY 0xff
 #define MCTP_TAG_MASK 0x07
 #define MCTP_TAG_OWNER 0x08
+#define MCTP_OPT_ADDR_EXT 1
 #endif
diff --git a/libc/kernel/uapi/linux/mdio.h b/libc/kernel/uapi/linux/mdio.h
index 4587aa2..d5c9da8 100644
--- a/libc/kernel/uapi/linux/mdio.h
+++ b/libc/kernel/uapi/linux/mdio.h
@@ -55,9 +55,11 @@
 #define MDIO_AN_EEE_LPABLE 61
 #define MDIO_AN_EEE_ADV2 62
 #define MDIO_AN_EEE_LPABLE2 63
+#define MDIO_AN_CTRL2 64
 #define MDIO_PMA_10GBT_SWAPPOL 130
 #define MDIO_PMA_10GBT_TXPWR 131
 #define MDIO_PMA_10GBT_SNR 133
+#define MDIO_PMA_10GBR_FSRT_CSR 147
 #define MDIO_PMA_10GBR_FECABLE 170
 #define MDIO_PCS_10GBX_STAT1 24
 #define MDIO_PCS_10GBRT_STAT1 32
@@ -199,9 +201,11 @@
 #define MDIO_PMA_10GBT_SNR_MAX 127
 #define MDIO_PMA_10GBR_FECABLE_ABLE 0x0001
 #define MDIO_PMA_10GBR_FECABLE_ERRABLE 0x0002
+#define MDIO_PMA_10GBR_FSRT_ENABLE 0x0001
 #define MDIO_PCS_10GBRT_STAT1_BLKLK 0x0001
 #define MDIO_PCS_10GBRT_STAT2_ERR 0x00ff
 #define MDIO_PCS_10GBRT_STAT2_BER 0x3f00
+#define MDIO_AN_10GBT_CTRL_ADVFSRT2_5G 0x0020
 #define MDIO_AN_10GBT_CTRL_ADV2_5G 0x0080
 #define MDIO_AN_10GBT_CTRL_ADV5G 0x0100
 #define MDIO_AN_10GBT_CTRL_ADV10G 0x1000
@@ -228,6 +232,7 @@
 #define MDIO_EEE_100GR_DS 0x2000
 #define MDIO_EEE_2_5GT 0x0001
 #define MDIO_EEE_5GT 0x0002
+#define MDIO_AN_THP_BP2_5GT 0x0008
 #define MDIO_PMA_NG_EXTABLE_2_5GBT 0x0001
 #define MDIO_PMA_NG_EXTABLE_5GBT 0x0002
 #define MDIO_PMA_LASI_RX_PHYXSLFLT 0x0001
diff --git a/libc/kernel/uapi/linux/mptcp.h b/libc/kernel/uapi/linux/mptcp.h
index c51f15e..67b0ce3 100644
--- a/libc/kernel/uapi/linux/mptcp.h
+++ b/libc/kernel/uapi/linux/mptcp.h
@@ -20,6 +20,10 @@
 #define _UAPI_MPTCP_H
 #include <linux/const.h>
 #include <linux/types.h>
+#include <linux/in.h>
+#include <linux/in6.h>
+#include <linux/socket.h>
+#include <sys/socket.h>
 #define MPTCP_SUBFLOW_FLAG_MCAP_REM _BITUL(0)
 #define MPTCP_SUBFLOW_FLAG_MCAP_LOC _BITUL(1)
 #define MPTCP_SUBFLOW_FLAG_JOIN_REM _BITUL(2)
@@ -142,4 +146,28 @@
 #define MPTCP_RST_EWQ2BIG 4
 #define MPTCP_RST_EBADPERF 5
 #define MPTCP_RST_EMIDDLEBOX 6
+struct mptcp_subflow_data {
+  __u32 size_subflow_data;
+  __u32 num_subflows;
+  __u32 size_kernel;
+  __u32 size_user;
+} __attribute__((aligned(8)));
+struct mptcp_subflow_addrs {
+  union {
+    __kernel_sa_family_t sa_family;
+    struct sockaddr sa_local;
+    struct sockaddr_in sin_local;
+    struct sockaddr_in6 sin6_local;
+    struct __kernel_sockaddr_storage ss_local;
+  };
+  union {
+    struct sockaddr sa_remote;
+    struct sockaddr_in sin_remote;
+    struct sockaddr_in6 sin6_remote;
+    struct __kernel_sockaddr_storage ss_remote;
+  };
+};
+#define MPTCP_INFO 1
+#define MPTCP_TCPINFO 2
+#define MPTCP_SUBFLOW_ADDRS 3
 #endif
diff --git a/libc/kernel/uapi/linux/neighbour.h b/libc/kernel/uapi/linux/neighbour.h
index e0e84aa..278f7d1 100644
--- a/libc/kernel/uapi/linux/neighbour.h
+++ b/libc/kernel/uapi/linux/neighbour.h
@@ -45,17 +45,19 @@
   NDA_PROTOCOL,
   NDA_NH_ID,
   NDA_FDB_EXT_ATTRS,
+  NDA_FLAGS_EXT,
   __NDA_MAX
 };
 #define NDA_MAX (__NDA_MAX - 1)
-#define NTF_USE 0x01
-#define NTF_SELF 0x02
-#define NTF_MASTER 0x04
-#define NTF_PROXY 0x08
-#define NTF_EXT_LEARNED 0x10
-#define NTF_OFFLOADED 0x20
-#define NTF_STICKY 0x40
-#define NTF_ROUTER 0x80
+#define NTF_USE (1 << 0)
+#define NTF_SELF (1 << 1)
+#define NTF_MASTER (1 << 2)
+#define NTF_PROXY (1 << 3)
+#define NTF_EXT_LEARNED (1 << 4)
+#define NTF_OFFLOADED (1 << 5)
+#define NTF_STICKY (1 << 6)
+#define NTF_ROUTER (1 << 7)
+#define NTF_EXT_MANAGED (1 << 0)
 #define NUD_INCOMPLETE 0x01
 #define NUD_REACHABLE 0x02
 #define NUD_STALE 0x04
diff --git a/libc/kernel/uapi/linux/netfilter.h b/libc/kernel/uapi/linux/netfilter.h
index 261b979..77b8a91 100644
--- a/libc/kernel/uapi/linux/netfilter.h
+++ b/libc/kernel/uapi/linux/netfilter.h
@@ -47,6 +47,7 @@
 };
 enum nf_dev_hooks {
   NF_NETDEV_INGRESS,
+  NF_NETDEV_EGRESS,
   NF_NETDEV_NUMHOOKS
 };
 enum {
diff --git a/libc/kernel/uapi/linux/netfilter/nf_tables.h b/libc/kernel/uapi/linux/netfilter/nf_tables.h
index 49ae9df..441cd60 100644
--- a/libc/kernel/uapi/linux/netfilter/nf_tables.h
+++ b/libc/kernel/uapi/linux/netfilter/nf_tables.h
@@ -386,6 +386,7 @@
   NFT_PAYLOAD_LL_HEADER,
   NFT_PAYLOAD_NETWORK_HEADER,
   NFT_PAYLOAD_TRANSPORT_HEADER,
+  NFT_PAYLOAD_INNER_HEADER,
 };
 enum nft_payload_csum_types {
   NFT_PAYLOAD_CSUM_NONE,
@@ -440,7 +441,8 @@
   NFT_META_OIF,
   NFT_META_IIFNAME,
   NFT_META_OIFNAME,
-  NFT_META_IIFTYPE,
+  NFT_META_IFTYPE,
+#define NFT_META_IIFTYPE NFT_META_IFTYPE
   NFT_META_OIFTYPE,
   NFT_META_SKUID,
   NFT_META_SKGID,
@@ -467,6 +469,7 @@
   NFT_META_TIME_HOUR,
   NFT_META_SDIF,
   NFT_META_SDIFNAME,
+  __NFT_META_IIFTYPE,
 };
 enum nft_rt_keys {
   NFT_RT_CLASSID,
diff --git a/libc/kernel/uapi/linux/nfc.h b/libc/kernel/uapi/linux/nfc.h
index 72e3520..ff980f4 100644
--- a/libc/kernel/uapi/linux/nfc.h
+++ b/libc/kernel/uapi/linux/nfc.h
@@ -139,14 +139,14 @@
 #define NFC_SE_DISABLED 0x0
 #define NFC_SE_ENABLED 0x1
 struct sockaddr_nfc {
-  sa_family_t sa_family;
+  __kernel_sa_family_t sa_family;
   __u32 dev_idx;
   __u32 target_idx;
   __u32 nfc_protocol;
 };
 #define NFC_LLCP_MAX_SERVICE_NAME 63
 struct sockaddr_nfc_llcp {
-  sa_family_t sa_family;
+  __kernel_sa_family_t sa_family;
   __u32 dev_idx;
   __u32 target_idx;
   __u32 nfc_protocol;
@@ -154,7 +154,7 @@
   __u8 ssap;
   char service_name[NFC_LLCP_MAX_SERVICE_NAME];
 ;
-  size_t service_name_len;
+  __kernel_size_t service_name_len;
 };
 #define NFC_SOCKPROTO_RAW 0
 #define NFC_SOCKPROTO_LLCP 1
diff --git a/libc/kernel/uapi/linux/nfsd/nfsfh.h b/libc/kernel/uapi/linux/nfsd/nfsfh.h
deleted file mode 100644
index 0cb1db8..0000000
--- a/libc/kernel/uapi/linux/nfsd/nfsfh.h
+++ /dev/null
@@ -1,74 +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_NFSD_FH_H
-#define _UAPI_LINUX_NFSD_FH_H
-#include <linux/types.h>
-#include <linux/nfs.h>
-#include <linux/nfs2.h>
-#include <linux/nfs3.h>
-#include <linux/nfs4.h>
-struct nfs_fhbase_old {
-  __u32 fb_dcookie;
-  __u32 fb_ino;
-  __u32 fb_dirino;
-  __u32 fb_dev;
-  __u32 fb_xdev;
-  __u32 fb_xino;
-  __u32 fb_generation;
-};
-struct nfs_fhbase_new {
-  union {
-    struct {
-      __u8 fb_version_aux;
-      __u8 fb_auth_type_aux;
-      __u8 fb_fsid_type_aux;
-      __u8 fb_fileid_type_aux;
-      __u32 fb_auth[1];
-    };
-    struct {
-      __u8 fb_version;
-      __u8 fb_auth_type;
-      __u8 fb_fsid_type;
-      __u8 fb_fileid_type;
-      __u32 fb_auth_flex[];
-    };
-  };
-};
-struct knfsd_fh {
-  unsigned int fh_size;
-  union {
-    struct nfs_fhbase_old fh_old;
-    __u32 fh_pad[NFS4_FHSIZE / 4];
-    struct nfs_fhbase_new fh_new;
-  } fh_base;
-};
-#define ofh_dcookie fh_base.fh_old.fb_dcookie
-#define ofh_ino fh_base.fh_old.fb_ino
-#define ofh_dirino fh_base.fh_old.fb_dirino
-#define ofh_dev fh_base.fh_old.fb_dev
-#define ofh_xdev fh_base.fh_old.fb_xdev
-#define ofh_xino fh_base.fh_old.fb_xino
-#define ofh_generation fh_base.fh_old.fb_generation
-#define fh_version fh_base.fh_new.fb_version
-#define fh_fsid_type fh_base.fh_new.fb_fsid_type
-#define fh_auth_type fh_base.fh_new.fb_auth_type
-#define fh_fileid_type fh_base.fh_new.fb_fileid_type
-#define fh_fsid fh_base.fh_new.fb_auth_flex
-#define fh_auth fh_base.fh_new.fb_auth
-#endif
diff --git a/libc/kernel/uapi/linux/nl80211.h b/libc/kernel/uapi/linux/nl80211.h
index e5c9f8a..edcda8a 100644
--- a/libc/kernel/uapi/linux/nl80211.h
+++ b/libc/kernel/uapi/linux/nl80211.h
@@ -183,6 +183,7 @@
   NL80211_CMD_COLOR_CHANGE_STARTED,
   NL80211_CMD_COLOR_CHANGE_ABORTED,
   NL80211_CMD_COLOR_CHANGE_COMPLETED,
+  NL80211_CMD_SET_FILS_AAD,
   __NL80211_CMD_AFTER_LAST,
   NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1
 };
@@ -505,6 +506,8 @@
   NL80211_ATTR_COLOR_CHANGE_COUNT,
   NL80211_ATTR_COLOR_CHANGE_COLOR,
   NL80211_ATTR_COLOR_CHANGE_ELEMS,
+  NL80211_ATTR_MBSSID_CONFIG,
+  NL80211_ATTR_MBSSID_ELEMS,
   __NL80211_ATTR_AFTER_LAST,
   NUM_NL80211_ATTR = __NL80211_ATTR_AFTER_LAST,
   NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1
@@ -1147,6 +1150,7 @@
   NL80211_BAND_60GHZ,
   NL80211_BAND_6GHZ,
   NL80211_BAND_S1GHZ,
+  NL80211_BAND_LC,
   NUM_NL80211_BANDS,
 };
 enum nl80211_ps_state {
@@ -1463,6 +1467,7 @@
   NL80211_EXT_FEATURE_SECURE_RTT,
   NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE,
   NL80211_EXT_FEATURE_BSS_COLOR,
+  NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD,
   NUM_NL80211_EXT_FEATURES,
   MAX_NL80211_EXT_FEATURES = NUM_NL80211_EXT_FEATURES - 1
 };
@@ -1844,4 +1849,14 @@
   __NL80211_SAR_ATTR_SPECS_LAST,
   NL80211_SAR_ATTR_SPECS_MAX = __NL80211_SAR_ATTR_SPECS_LAST - 1,
 };
+enum nl80211_mbssid_config_attributes {
+  __NL80211_MBSSID_CONFIG_ATTR_INVALID,
+  NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES,
+  NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY,
+  NL80211_MBSSID_CONFIG_ATTR_INDEX,
+  NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX,
+  NL80211_MBSSID_CONFIG_ATTR_EMA,
+  __NL80211_MBSSID_CONFIG_ATTR_LAST,
+  NL80211_MBSSID_CONFIG_ATTR_MAX = __NL80211_MBSSID_CONFIG_ATTR_LAST - 1,
+};
 #endif
diff --git a/libc/kernel/uapi/linux/pci_regs.h b/libc/kernel/uapi/linux/pci_regs.h
index 81450a7..5920633 100644
--- a/libc/kernel/uapi/linux/pci_regs.h
+++ b/libc/kernel/uapi/linux/pci_regs.h
@@ -413,6 +413,12 @@
 #define PCI_EXP_DEVCTL_URRE 0x0008
 #define PCI_EXP_DEVCTL_RELAX_EN 0x0010
 #define PCI_EXP_DEVCTL_PAYLOAD 0x00e0
+#define PCI_EXP_DEVCTL_PAYLOAD_128B 0x0000
+#define PCI_EXP_DEVCTL_PAYLOAD_256B 0x0020
+#define PCI_EXP_DEVCTL_PAYLOAD_512B 0x0040
+#define PCI_EXP_DEVCTL_PAYLOAD_1024B 0x0060
+#define PCI_EXP_DEVCTL_PAYLOAD_2048B 0x0080
+#define PCI_EXP_DEVCTL_PAYLOAD_4096B 0x00a0
 #define PCI_EXP_DEVCTL_EXT_TAG 0x0100
 #define PCI_EXP_DEVCTL_PHANTOM 0x0200
 #define PCI_EXP_DEVCTL_AUX_PME 0x0400
diff --git a/libc/kernel/uapi/linux/perf_event.h b/libc/kernel/uapi/linux/perf_event.h
index 00019ff..dee8cd7 100644
--- a/libc/kernel/uapi/linux/perf_event.h
+++ b/libc/kernel/uapi/linux/perf_event.h
@@ -350,6 +350,7 @@
   PERF_RECORD_BPF_EVENT = 18,
   PERF_RECORD_CGROUP = 19,
   PERF_RECORD_TEXT_POKE = 20,
+  PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
   PERF_RECORD_MAX,
 };
 enum perf_record_ksymbol_type {
@@ -391,14 +392,14 @@
 union perf_mem_data_src {
   __u64 val;
   struct {
-    __u64 mem_op : 5, mem_lvl : 14, mem_snoop : 5, mem_lock : 2, mem_dtlb : 7, mem_lvl_num : 4, mem_remote : 1, mem_snoopx : 2, mem_blk : 3, mem_rsvd : 21;
+    __u64 mem_op : 5, mem_lvl : 14, mem_snoop : 5, mem_lock : 2, mem_dtlb : 7, mem_lvl_num : 4, mem_remote : 1, mem_snoopx : 2, mem_blk : 3, mem_hops : 3, mem_rsvd : 18;
   };
 };
 #elif defined(__BIG_ENDIAN_BITFIELD)
 union perf_mem_data_src {
   __u64 val;
   struct {
-    __u64 mem_rsvd : 21, mem_blk : 3, mem_snoopx : 2, mem_remote : 1, mem_lvl_num : 4, mem_dtlb : 7, mem_lock : 2, mem_snoop : 5, mem_lvl : 14, mem_op : 5;
+    __u64 mem_rsvd : 18, mem_hops : 3, mem_blk : 3, mem_snoopx : 2, mem_remote : 1, mem_lvl_num : 4, mem_dtlb : 7, mem_lock : 2, mem_snoop : 5, mem_lvl : 14, mem_op : 5;
   };
 };
 #else
@@ -460,6 +461,8 @@
 #define PERF_MEM_BLK_DATA 0x02
 #define PERF_MEM_BLK_ADDR 0x04
 #define PERF_MEM_BLK_SHIFT 40
+#define PERF_MEM_HOPS_0 0x01
+#define PERF_MEM_HOPS_SHIFT 43
 #define PERF_MEM_S(a,s) (((__u64) PERF_MEM_ ##a ##_ ##s) << PERF_MEM_ ##a ##_SHIFT)
 struct perf_branch_entry {
   __u64 from;
diff --git a/libc/kernel/uapi/linux/pkt_sched.h b/libc/kernel/uapi/linux/pkt_sched.h
index 6dc8a19..e298b74 100644
--- a/libc/kernel/uapi/linux/pkt_sched.h
+++ b/libc/kernel/uapi/linux/pkt_sched.h
@@ -625,6 +625,8 @@
   TCA_FQ_CODEL_CE_THRESHOLD,
   TCA_FQ_CODEL_DROP_BATCH_SIZE,
   TCA_FQ_CODEL_MEMORY_LIMIT,
+  TCA_FQ_CODEL_CE_THRESHOLD_SELECTOR,
+  TCA_FQ_CODEL_CE_THRESHOLD_MASK,
   __TCA_FQ_CODEL_MAX
 };
 #define TCA_FQ_CODEL_MAX (__TCA_FQ_CODEL_MAX - 1)
diff --git a/libc/kernel/uapi/linux/prctl.h b/libc/kernel/uapi/linux/prctl.h
index 7a4b2d7..9b4c695 100644
--- a/libc/kernel/uapi/linux/prctl.h
+++ b/libc/kernel/uapi/linux/prctl.h
@@ -154,7 +154,7 @@
 #define PR_SET_TAGGED_ADDR_CTRL 55
 #define PR_GET_TAGGED_ADDR_CTRL 56
 #define PR_TAGGED_ADDR_ENABLE (1UL << 0)
-#define PR_MTE_TCF_NONE 0
+#define PR_MTE_TCF_NONE 0UL
 #define PR_MTE_TCF_SYNC (1UL << 1)
 #define PR_MTE_TCF_ASYNC (1UL << 2)
 #define PR_MTE_TCF_MASK (PR_MTE_TCF_SYNC | PR_MTE_TCF_ASYNC)
@@ -176,6 +176,9 @@
 #define PR_SCHED_CORE_SHARE_TO 2
 #define PR_SCHED_CORE_SHARE_FROM 3
 #define PR_SCHED_CORE_MAX 4
+#define PR_SCHED_CORE_SCOPE_THREAD 0
+#define PR_SCHED_CORE_SCOPE_THREAD_GROUP 1
+#define PR_SCHED_CORE_SCOPE_PROCESS_GROUP 2
 #define PR_SET_VMA 0x53564d41
 #define PR_SET_VMA_ANON_NAME 0
 #endif
diff --git a/libc/kernel/uapi/linux/resource.h b/libc/kernel/uapi/linux/resource.h
index d76c273..6f531a0 100644
--- a/libc/kernel/uapi/linux/resource.h
+++ b/libc/kernel/uapi/linux/resource.h
@@ -57,6 +57,6 @@
 #define PRIO_PGRP 1
 #define PRIO_USER 2
 #define _STK_LIM (8 * 1024 * 1024)
-#define MLOCK_LIMIT ((PAGE_SIZE > 64 * 1024) ? PAGE_SIZE : 64 * 1024)
+#define MLOCK_LIMIT (8 * 1024 * 1024)
 #include <asm/resource.h>
 #endif
diff --git a/libc/kernel/uapi/linux/rtc.h b/libc/kernel/uapi/linux/rtc.h
index 7f38483..cf5f22a 100644
--- a/libc/kernel/uapi/linux/rtc.h
+++ b/libc/kernel/uapi/linux/rtc.h
@@ -20,6 +20,7 @@
 #define _UAPI_LINUX_RTC_H_
 #include <linux/const.h>
 #include <linux/ioctl.h>
+#include <linux/types.h>
 struct rtc_time {
   int tm_sec;
   int tm_min;
@@ -45,6 +46,16 @@
   int pll_negmult;
   long pll_clock;
 };
+struct rtc_param {
+  __u64 param;
+  union {
+    __u64 uvalue;
+    __s64 svalue;
+    __u64 ptr;
+  };
+  __u32 index;
+  __u32 __pad;
+};
 #define RTC_AIE_ON _IO('p', 0x01)
 #define RTC_AIE_OFF _IO('p', 0x02)
 #define RTC_UIE_ON _IO('p', 0x03)
@@ -65,6 +76,8 @@
 #define RTC_WKALM_RD _IOR('p', 0x10, struct rtc_wkalrm)
 #define RTC_PLL_GET _IOR('p', 0x11, struct rtc_pll_info)
 #define RTC_PLL_SET _IOW('p', 0x12, struct rtc_pll_info)
+#define RTC_PARAM_GET _IOW('p', 0x13, struct rtc_param)
+#define RTC_PARAM_SET _IOW('p', 0x14, struct rtc_param)
 #define RTC_VL_DATA_INVALID _BITUL(0)
 #define RTC_VL_BACKUP_LOW _BITUL(1)
 #define RTC_VL_BACKUP_EMPTY _BITUL(2)
@@ -79,6 +92,17 @@
 #define RTC_FEATURE_ALARM 0
 #define RTC_FEATURE_ALARM_RES_MINUTE 1
 #define RTC_FEATURE_NEED_WEEK_DAY 2
-#define RTC_FEATURE_CNT 3
+#define RTC_FEATURE_ALARM_RES_2S 3
+#define RTC_FEATURE_UPDATE_INTERRUPT 4
+#define RTC_FEATURE_CORRECTION 5
+#define RTC_FEATURE_BACKUP_SWITCH_MODE 6
+#define RTC_FEATURE_CNT 7
+#define RTC_PARAM_FEATURES 0
+#define RTC_PARAM_CORRECTION 1
+#define RTC_PARAM_BACKUP_SWITCH_MODE 2
+#define RTC_BSM_DISABLED 0
+#define RTC_BSM_DIRECT 1
+#define RTC_BSM_LEVEL 2
+#define RTC_BSM_STANDBY 3
 #define RTC_MAX_FREQ 8192
 #endif
diff --git a/libc/kernel/uapi/linux/smc.h b/libc/kernel/uapi/linux/smc.h
index 83e0bfe..5c07207 100644
--- a/libc/kernel/uapi/linux/smc.h
+++ b/libc/kernel/uapi/linux/smc.h
@@ -38,6 +38,9 @@
 #define SMC_GENL_FAMILY_NAME "SMC_GEN_NETLINK"
 #define SMC_GENL_FAMILY_VERSION 1
 #define SMC_PCI_ID_STR_LEN 16
+#define SMC_MAX_HOSTNAME_LEN 32
+#define SMC_MAX_UEID 4
+#define SMC_MAX_EID_LEN 32
 enum {
   SMC_NETLINK_GET_SYS_INFO = 1,
   SMC_NETLINK_GET_LGR_SMCR,
@@ -47,6 +50,13 @@
   SMC_NETLINK_GET_DEV_SMCR,
   SMC_NETLINK_GET_STATS,
   SMC_NETLINK_GET_FBACK_STATS,
+  SMC_NETLINK_DUMP_UEID,
+  SMC_NETLINK_ADD_UEID,
+  SMC_NETLINK_REMOVE_UEID,
+  SMC_NETLINK_FLUSH_UEID,
+  SMC_NETLINK_DUMP_SEID,
+  SMC_NETLINK_ENABLE_SEID,
+  SMC_NETLINK_DISABLE_SEID,
 };
 enum {
   SMC_GEN_UNSPEC,
@@ -68,6 +78,7 @@
   SMC_NLA_SYS_IS_ISM_V2,
   SMC_NLA_SYS_LOCAL_HOST,
   SMC_NLA_SYS_SEID,
+  SMC_NLA_SYS_IS_SMCR_V2,
   __SMC_NLA_SYS_MAX,
   SMC_NLA_SYS_MAX = __SMC_NLA_SYS_MAX - 1
 };
@@ -77,6 +88,14 @@
   SMC_NLA_LGR_V2_OS,
   SMC_NLA_LGR_V2_NEG_EID,
   SMC_NLA_LGR_V2_PEER_HOST,
+  __SMC_NLA_LGR_V2_MAX,
+  SMC_NLA_LGR_V2_MAX = __SMC_NLA_LGR_V2_MAX - 1
+};
+enum {
+  SMC_NLA_LGR_R_V2_UNSPEC,
+  SMC_NLA_LGR_R_V2_DIRECT,
+  __SMC_NLA_LGR_R_V2_MAX,
+  SMC_NLA_LGR_R_V2_MAX = __SMC_NLA_LGR_R_V2_MAX - 1
 };
 enum {
   SMC_NLA_LGR_R_UNSPEC,
@@ -86,6 +105,8 @@
   SMC_NLA_LGR_R_PNETID,
   SMC_NLA_LGR_R_VLAN_ID,
   SMC_NLA_LGR_R_CONNS_NUM,
+  SMC_NLA_LGR_R_V2_COMMON,
+  SMC_NLA_LGR_R_V2,
   __SMC_NLA_LGR_R_MAX,
   SMC_NLA_LGR_R_MAX = __SMC_NLA_LGR_R_MAX - 1
 };
@@ -114,7 +135,7 @@
   SMC_NLA_LGR_D_PNETID,
   SMC_NLA_LGR_D_CHID,
   SMC_NLA_LGR_D_PAD,
-  SMC_NLA_LGR_V2,
+  SMC_NLA_LGR_D_V2_COMMON,
   __SMC_NLA_LGR_D_MAX,
   SMC_NLA_LGR_D_MAX = __SMC_NLA_LGR_D_MAX - 1
 };
@@ -213,4 +234,17 @@
   __SMC_NLA_FBACK_STATS_MAX,
   SMC_NLA_FBACK_STATS_MAX = __SMC_NLA_FBACK_STATS_MAX - 1
 };
+enum {
+  SMC_NLA_EID_TABLE_UNSPEC,
+  SMC_NLA_EID_TABLE_ENTRY,
+  __SMC_NLA_EID_TABLE_MAX,
+  SMC_NLA_EID_TABLE_MAX = __SMC_NLA_EID_TABLE_MAX - 1
+};
+enum {
+  SMC_NLA_SEID_UNSPEC,
+  SMC_NLA_SEID_ENTRY,
+  SMC_NLA_SEID_ENABLED,
+  __SMC_NLA_SEID_TABLE_MAX,
+  SMC_NLA_SEID_TABLE_MAX = __SMC_NLA_SEID_TABLE_MAX - 1
+};
 #endif
diff --git a/libc/kernel/uapi/linux/stddef.h b/libc/kernel/uapi/linux/stddef.h
index 2a5fd95..d5cdf80 100644
--- a/libc/kernel/uapi/linux/stddef.h
+++ b/libc/kernel/uapi/linux/stddef.h
@@ -20,3 +20,5 @@
 #ifndef __always_inline
 #define __always_inline inline
 #endif
+#define __struct_group(TAG,NAME,ATTRS,MEMBERS...) union { struct { MEMBERS } ATTRS; struct TAG { MEMBERS } ATTRS NAME; }
+#define __DECLARE_FLEX_ARRAY(TYPE,NAME) struct { struct { } __empty_ ##NAME; TYPE NAME[]; }
diff --git a/libc/kernel/uapi/linux/sysctl.h b/libc/kernel/uapi/linux/sysctl.h
index ebaf8a9..ae9c2ba 100644
--- a/libc/kernel/uapi/linux/sysctl.h
+++ b/libc/kernel/uapi/linux/sysctl.h
@@ -407,6 +407,7 @@
   NET_IPV4_CONF_PROMOTE_SECONDARIES = 20,
   NET_IPV4_CONF_ARP_ACCEPT = 21,
   NET_IPV4_CONF_ARP_NOTIFY = 22,
+  NET_IPV4_CONF_ARP_EVICT_NOCARRIER = 23,
 };
 enum {
   NET_IPV4_NF_CONNTRACK_MAX = 1,
diff --git a/libc/kernel/uapi/linux/tls.h b/libc/kernel/uapi/linux/tls.h
index c765f30..c98ea0b 100644
--- a/libc/kernel/uapi/linux/tls.h
+++ b/libc/kernel/uapi/linux/tls.h
@@ -54,6 +54,18 @@
 #define TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE 0
 #define TLS_CIPHER_CHACHA20_POLY1305_TAG_SIZE 16
 #define TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE 8
+#define TLS_CIPHER_SM4_GCM 55
+#define TLS_CIPHER_SM4_GCM_IV_SIZE 8
+#define TLS_CIPHER_SM4_GCM_KEY_SIZE 16
+#define TLS_CIPHER_SM4_GCM_SALT_SIZE 4
+#define TLS_CIPHER_SM4_GCM_TAG_SIZE 16
+#define TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE 8
+#define TLS_CIPHER_SM4_CCM 56
+#define TLS_CIPHER_SM4_CCM_IV_SIZE 8
+#define TLS_CIPHER_SM4_CCM_KEY_SIZE 16
+#define TLS_CIPHER_SM4_CCM_SALT_SIZE 4
+#define TLS_CIPHER_SM4_CCM_TAG_SIZE 16
+#define TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE 8
 #define TLS_SET_RECORD_TYPE 1
 #define TLS_GET_RECORD_TYPE 2
 struct tls_crypto_info {
@@ -88,6 +100,20 @@
   unsigned char salt[TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE];
   unsigned char rec_seq[TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE];
 };
+struct tls12_crypto_info_sm4_gcm {
+  struct tls_crypto_info info;
+  unsigned char iv[TLS_CIPHER_SM4_GCM_IV_SIZE];
+  unsigned char key[TLS_CIPHER_SM4_GCM_KEY_SIZE];
+  unsigned char salt[TLS_CIPHER_SM4_GCM_SALT_SIZE];
+  unsigned char rec_seq[TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE];
+};
+struct tls12_crypto_info_sm4_ccm {
+  struct tls_crypto_info info;
+  unsigned char iv[TLS_CIPHER_SM4_CCM_IV_SIZE];
+  unsigned char key[TLS_CIPHER_SM4_CCM_KEY_SIZE];
+  unsigned char salt[TLS_CIPHER_SM4_CCM_SALT_SIZE];
+  unsigned char rec_seq[TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE];
+};
 enum {
   TLS_INFO_UNSPEC,
   TLS_INFO_VERSION,
diff --git a/libc/kernel/uapi/linux/v4l2-controls.h b/libc/kernel/uapi/linux/v4l2-controls.h
index 0251059..5233c85 100644
--- a/libc/kernel/uapi/linux/v4l2-controls.h
+++ b/libc/kernel/uapi/linux/v4l2-controls.h
@@ -116,6 +116,7 @@
 #define V4L2_CID_USER_ATMEL_ISC_BASE (V4L2_CID_USER_BASE + 0x10c0)
 #define V4L2_CID_USER_CODA_BASE (V4L2_CID_USER_BASE + 0x10e0)
 #define V4L2_CID_USER_CCS_BASE (V4L2_CID_USER_BASE + 0x10f0)
+#define V4L2_CID_USER_ALLEGRO_BASE (V4L2_CID_USER_BASE + 0x1170)
 #define V4L2_CID_CODEC_BASE (V4L2_CTRL_CLASS_CODEC | 0x900)
 #define V4L2_CID_CODEC_CLASS (V4L2_CTRL_CLASS_CODEC | 1)
 #define V4L2_CID_MPEG_STREAM_TYPE (V4L2_CID_CODEC_BASE + 0)
@@ -936,6 +937,7 @@
 #define V4L2_CID_TEST_PATTERN_BLUE (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
 #define V4L2_CID_TEST_PATTERN_GREENB (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
 #define V4L2_CID_UNIT_CELL_SIZE (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 8)
+#define V4L2_CID_NOTIFY_GAINS (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 9)
 #define V4L2_CID_IMAGE_PROC_CLASS_BASE (V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
 #define V4L2_CID_IMAGE_PROC_CLASS (V4L2_CTRL_CLASS_IMAGE_PROC | 1)
 #define V4L2_CID_LINK_FREQ (V4L2_CID_IMAGE_PROC_CLASS_BASE + 1)
diff --git a/libc/kernel/uapi/linux/vdpa.h b/libc/kernel/uapi/linux/vdpa.h
index bee6618..767ce12 100644
--- a/libc/kernel/uapi/linux/vdpa.h
+++ b/libc/kernel/uapi/linux/vdpa.h
@@ -27,6 +27,7 @@
   VDPA_CMD_DEV_NEW,
   VDPA_CMD_DEV_DEL,
   VDPA_CMD_DEV_GET,
+  VDPA_CMD_DEV_CONFIG_GET,
 };
 enum vdpa_attr {
   VDPA_ATTR_UNSPEC,
@@ -38,6 +39,11 @@
   VDPA_ATTR_DEV_VENDOR_ID,
   VDPA_ATTR_DEV_MAX_VQS,
   VDPA_ATTR_DEV_MAX_VQ_SIZE,
+  VDPA_ATTR_DEV_MIN_VQ_SIZE,
+  VDPA_ATTR_DEV_NET_CFG_MACADDR,
+  VDPA_ATTR_DEV_NET_STATUS,
+  VDPA_ATTR_DEV_NET_CFG_MAX_VQP,
+  VDPA_ATTR_DEV_NET_CFG_MTU,
   VDPA_ATTR_MAX,
 };
 #endif
diff --git a/libc/kernel/uapi/linux/version.h b/libc/kernel/uapi/linux/version.h
index 71a3f77..bd323a8 100644
--- a/libc/kernel/uapi/linux/version.h
+++ b/libc/kernel/uapi/linux/version.h
@@ -16,8 +16,8 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#define LINUX_VERSION_CODE 331520
+#define LINUX_VERSION_CODE 331776
 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + ((c) > 255 ? 255 : (c)))
 #define LINUX_VERSION_MAJOR 5
-#define LINUX_VERSION_PATCHLEVEL 15
+#define LINUX_VERSION_PATCHLEVEL 16
 #define LINUX_VERSION_SUBLEVEL 0
diff --git a/libc/kernel/uapi/linux/videodev2.h b/libc/kernel/uapi/linux/videodev2.h
index 8e856ac..5ca1d91 100644
--- a/libc/kernel/uapi/linux/videodev2.h
+++ b/libc/kernel/uapi/linux/videodev2.h
@@ -24,7 +24,7 @@
 #include <linux/types.h>
 #include <linux/v4l2-common.h>
 #include <linux/v4l2-controls.h>
-#define VIDEO_MAX_FRAME 64
+#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) | (1U << 31))
@@ -279,13 +279,10 @@
 #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1')
 #define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4')
 #define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2')
-#define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2')
 #define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2')
 #define V4L2_PIX_FMT_NV21M v4l2_fourcc('N', 'M', '2', '1')
 #define V4L2_PIX_FMT_NV16M v4l2_fourcc('N', 'M', '1', '6')
 #define V4L2_PIX_FMT_NV61M v4l2_fourcc('N', 'M', '6', '1')
-#define V4L2_PIX_FMT_NV12MT v4l2_fourcc('T', 'M', '1', '2')
-#define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2')
 #define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9')
 #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9')
 #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P')
@@ -298,6 +295,11 @@
 #define V4L2_PIX_FMT_YVU422M v4l2_fourcc('Y', 'M', '6', '1')
 #define V4L2_PIX_FMT_YUV444M v4l2_fourcc('Y', 'M', '2', '4')
 #define V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2')
+#define V4L2_PIX_FMT_NV12_4L4 v4l2_fourcc('V', 'T', '1', '2')
+#define V4L2_PIX_FMT_NV12_16L16 v4l2_fourcc('H', 'M', '1', '2')
+#define V4L2_PIX_FMT_NV12_32L32 v4l2_fourcc('S', 'T', '1', '2')
+#define V4L2_PIX_FMT_NV12MT v4l2_fourcc('T', 'M', '1', '2')
+#define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2')
 #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1')
 #define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G')
 #define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G')
@@ -392,8 +394,8 @@
 #define V4L2_PIX_FMT_Y12I v4l2_fourcc('Y', '1', '2', 'I')
 #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ')
 #define V4L2_PIX_FMT_MT21C v4l2_fourcc('M', 'T', '2', '1')
+#define V4L2_PIX_FMT_MM21 v4l2_fourcc('M', 'M', '2', '1')
 #define V4L2_PIX_FMT_INZI v4l2_fourcc('I', 'N', 'Z', 'I')
-#define V4L2_PIX_FMT_SUNXI_TILED_NV12 v4l2_fourcc('S', 'T', '1', '2')
 #define V4L2_PIX_FMT_CNF4 v4l2_fourcc('C', 'N', 'F', '4')
 #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4')
 #define V4L2_PIX_FMT_IPU3_SBGGR10 v4l2_fourcc('i', 'p', '3', 'b')
@@ -528,8 +530,10 @@
   __u32 type;
   __u32 memory;
   __u32 capabilities;
-  __u32 reserved[1];
+  __u8 flags;
+  __u8 reserved[3];
 };
+#define V4L2_MEMORY_FLAG_NON_COHERENT (1 << 0)
 #define V4L2_BUF_CAP_SUPPORTS_MMAP (1 << 0)
 #define V4L2_BUF_CAP_SUPPORTS_USERPTR (1 << 1)
 #define V4L2_BUF_CAP_SUPPORTS_DMABUF (1 << 2)
@@ -1377,7 +1381,8 @@
   __u32 memory;
   struct v4l2_format format;
   __u32 capabilities;
-  __u32 reserved[7];
+  __u32 flags;
+  __u32 reserved[6];
 };
 #define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability)
 #define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc)
@@ -1462,4 +1467,6 @@
 #define VIDIOC_DBG_G_CHIP_INFO _IOWR('V', 102, struct v4l2_dbg_chip_info)
 #define VIDIOC_QUERY_EXT_CTRL _IOWR('V', 103, struct v4l2_query_ext_ctrl)
 #define BASE_VIDIOC_PRIVATE 192
+#define V4L2_PIX_FMT_HM12 V4L2_PIX_FMT_NV12_16L16
+#define V4L2_PIX_FMT_SUNXI_TILED_NV12 V4L2_PIX_FMT_NV12_32L32
 #endif
diff --git a/libc/kernel/uapi/linux/virtio_gpio.h b/libc/kernel/uapi/linux/virtio_gpio.h
index 769bfcf..543fe76 100644
--- a/libc/kernel/uapi/linux/virtio_gpio.h
+++ b/libc/kernel/uapi/linux/virtio_gpio.h
@@ -19,21 +19,29 @@
 #ifndef _LINUX_VIRTIO_GPIO_H
 #define _LINUX_VIRTIO_GPIO_H
 #include <linux/types.h>
+#define VIRTIO_GPIO_F_IRQ 0
 #define VIRTIO_GPIO_MSG_GET_NAMES 0x0001
 #define VIRTIO_GPIO_MSG_GET_DIRECTION 0x0002
 #define VIRTIO_GPIO_MSG_SET_DIRECTION 0x0003
 #define VIRTIO_GPIO_MSG_GET_VALUE 0x0004
 #define VIRTIO_GPIO_MSG_SET_VALUE 0x0005
+#define VIRTIO_GPIO_MSG_IRQ_TYPE 0x0006
 #define VIRTIO_GPIO_STATUS_OK 0x0
 #define VIRTIO_GPIO_STATUS_ERR 0x1
 #define VIRTIO_GPIO_DIRECTION_NONE 0x00
 #define VIRTIO_GPIO_DIRECTION_OUT 0x01
 #define VIRTIO_GPIO_DIRECTION_IN 0x02
+#define VIRTIO_GPIO_IRQ_TYPE_NONE 0x00
+#define VIRTIO_GPIO_IRQ_TYPE_EDGE_RISING 0x01
+#define VIRTIO_GPIO_IRQ_TYPE_EDGE_FALLING 0x02
+#define VIRTIO_GPIO_IRQ_TYPE_EDGE_BOTH 0x03
+#define VIRTIO_GPIO_IRQ_TYPE_LEVEL_HIGH 0x04
+#define VIRTIO_GPIO_IRQ_TYPE_LEVEL_LOW 0x08
 struct virtio_gpio_config {
   __le16 ngpio;
   __u8 padding[2];
   __le32 gpio_names_size;
-} __packed;
+};
 struct virtio_gpio_request {
   __le16 type;
   __le16 gpio;
@@ -47,4 +55,12 @@
   __u8 status;
   __u8 value[];
 };
+struct virtio_gpio_irq_request {
+  __le16 gpio;
+};
+struct virtio_gpio_irq_response {
+  __u8 status;
+};
+#define VIRTIO_GPIO_IRQ_STATUS_INVALID 0x0
+#define VIRTIO_GPIO_IRQ_STATUS_VALID 0x1
 #endif
diff --git a/libc/kernel/uapi/linux/virtio_gpu.h b/libc/kernel/uapi/linux/virtio_gpu.h
index 83ad5a7..8a21afd 100644
--- a/libc/kernel/uapi/linux/virtio_gpu.h
+++ b/libc/kernel/uapi/linux/virtio_gpu.h
@@ -23,6 +23,7 @@
 #define VIRTIO_GPU_F_EDID 1
 #define VIRTIO_GPU_F_RESOURCE_UUID 2
 #define VIRTIO_GPU_F_RESOURCE_BLOB 3
+#define VIRTIO_GPU_F_CONTEXT_INIT 4
 enum virtio_gpu_ctrl_type {
   VIRTIO_GPU_UNDEFINED = 0,
   VIRTIO_GPU_CMD_GET_DISPLAY_INFO = 0x0100,
@@ -70,12 +71,14 @@
   VIRTIO_GPU_SHM_ID_HOST_VISIBLE = 1
 };
 #define VIRTIO_GPU_FLAG_FENCE (1 << 0)
+#define VIRTIO_GPU_FLAG_INFO_RING_IDX (1 << 1)
 struct virtio_gpu_ctrl_hdr {
   __le32 type;
   __le32 flags;
   __le64 fence_id;
   __le32 ctx_id;
-  __le32 padding;
+  __u8 ring_idx;
+  __u8 padding[3];
 };
 struct virtio_gpu_cursor_pos {
   __le32 scanout_id;
@@ -181,10 +184,11 @@
   __le32 flags;
   __le32 padding;
 };
+#define VIRTIO_GPU_CONTEXT_INIT_CAPSET_ID_MASK 0x000000ff
 struct virtio_gpu_ctx_create {
   struct virtio_gpu_ctrl_hdr hdr;
   __le32 nlen;
-  __le32 padding;
+  __le32 context_init;
   char debug_name[64];
 };
 struct virtio_gpu_ctx_destroy {
diff --git a/libc/kernel/uapi/linux/virtio_i2c.h b/libc/kernel/uapi/linux/virtio_i2c.h
index eaba517..9540f26 100644
--- a/libc/kernel/uapi/linux/virtio_i2c.h
+++ b/libc/kernel/uapi/linux/virtio_i2c.h
@@ -20,7 +20,9 @@
 #define _UAPI_LINUX_VIRTIO_I2C_H
 #include <linux/const.h>
 #include <linux/types.h>
+#define VIRTIO_I2C_F_ZERO_LENGTH_REQUEST 0
 #define VIRTIO_I2C_FLAGS_FAIL_NEXT _BITUL(0)
+#define VIRTIO_I2C_FLAGS_M_RD _BITUL(1)
 struct virtio_i2c_out_hdr {
   __le16 addr;
   __le16 padding;
diff --git a/libc/kernel/uapi/linux/virtio_mem.h b/libc/kernel/uapi/linux/virtio_mem.h
index d6542b7..66ffce1 100644
--- a/libc/kernel/uapi/linux/virtio_mem.h
+++ b/libc/kernel/uapi/linux/virtio_mem.h
@@ -23,6 +23,7 @@
 #include <linux/virtio_ids.h>
 #include <linux/virtio_config.h>
 #define VIRTIO_MEM_F_ACPI_PXM 0
+#define VIRTIO_MEM_F_UNPLUGGED_INACCESSIBLE 1
 #define VIRTIO_MEM_REQ_PLUG 0
 #define VIRTIO_MEM_REQ_UNPLUG 1
 #define VIRTIO_MEM_REQ_UNPLUG_ALL 2
diff --git a/libc/kernel/uapi/linux/vm_sockets.h b/libc/kernel/uapi/linux/vm_sockets.h
index 50e8456..58f720d 100644
--- a/libc/kernel/uapi/linux/vm_sockets.h
+++ b/libc/kernel/uapi/linux/vm_sockets.h
@@ -25,8 +25,14 @@
 #define SO_VM_SOCKETS_BUFFER_MAX_SIZE 2
 #define SO_VM_SOCKETS_PEER_HOST_VM_ID 3
 #define SO_VM_SOCKETS_TRUSTED 5
-#define SO_VM_SOCKETS_CONNECT_TIMEOUT 6
+#define SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD 6
 #define SO_VM_SOCKETS_NONBLOCK_TXRX 7
+#define SO_VM_SOCKETS_CONNECT_TIMEOUT_NEW 8
+#if __BITS_PER_LONG == 64 || defined(__x86_64__) && defined(__ILP32__)
+#define SO_VM_SOCKETS_CONNECT_TIMEOUT SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD
+#else
+#define SO_VM_SOCKETS_CONNECT_TIMEOUT (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD : SO_VM_SOCKETS_CONNECT_TIMEOUT_NEW)
+#endif
 #define VMADDR_CID_ANY - 1U
 #define VMADDR_PORT_ANY - 1U
 #define VMADDR_CID_HYPERVISOR 0
diff --git a/libc/kernel/uapi/misc/habanalabs.h b/libc/kernel/uapi/misc/habanalabs.h
index 83e8a19..ed2ba7c 100644
--- a/libc/kernel/uapi/misc/habanalabs.h
+++ b/libc/kernel/uapi/misc/habanalabs.h
@@ -483,14 +483,14 @@
     };
     struct {
       __u64 addr;
-      __u32 target;
-      __u32 interrupt_timeout_us;
+      __u64 target;
     };
   };
   __u32 ctx_id;
   __u32 flags;
   __u8 seq_arr_len;
-  __u8 pad[7];
+  __u8 pad[3];
+  __u32 interrupt_timeout_us;
 };
 #define HL_WAIT_CS_STATUS_COMPLETED 0
 #define HL_WAIT_CS_STATUS_BUSY 1
@@ -514,6 +514,7 @@
 #define HL_MEM_OP_MAP 2
 #define HL_MEM_OP_UNMAP 3
 #define HL_MEM_OP_MAP_BLOCK 4
+#define HL_MEM_OP_EXPORT_DMABUF_FD 5
 #define HL_MEM_CONTIGUOUS 0x1
 #define HL_MEM_SHARED 0x2
 #define HL_MEM_USERPTR 0x4
@@ -541,6 +542,10 @@
     struct {
       __u64 device_virt_addr;
     } unmap;
+    struct {
+      __u64 handle;
+      __u64 mem_size;
+    } export_dmabuf_fd;
   };
   __u32 op;
   __u32 flags;
@@ -556,6 +561,7 @@
       __u32 block_size;
       __u32 pad;
     };
+    __s32 fd;
   };
 };
 union hl_mem_args {
diff --git a/libc/kernel/uapi/rdma/efa-abi.h b/libc/kernel/uapi/rdma/efa-abi.h
index f20e3e0..4b6842b 100644
--- a/libc/kernel/uapi/rdma/efa-abi.h
+++ b/libc/kernel/uapi/rdma/efa-abi.h
@@ -47,11 +47,18 @@
   __u16 pdn;
   __u8 reserved_30[2];
 };
+enum {
+  EFA_CREATE_CQ_WITH_COMPLETION_CHANNEL = 1 << 0,
+};
 struct efa_ibv_create_cq {
   __u32 comp_mask;
   __u32 cq_entry_size;
   __u16 num_sub_cqs;
-  __u8 reserved_50[6];
+  __u8 flags;
+  __u8 reserved_58[5];
+};
+enum {
+  EFA_CREATE_CQ_RESP_DB_OFF = 1 << 0,
 };
 struct efa_ibv_create_cq_resp {
   __u32 comp_mask;
@@ -59,7 +66,9 @@
   __aligned_u64 q_mmap_key;
   __aligned_u64 q_mmap_size;
   __u16 cq_idx;
-  __u8 reserved_d0[6];
+  __u8 reserved_d0[2];
+  __u32 db_off;
+  __aligned_u64 db_mmap_key;
 };
 enum {
   EFA_QP_DRIVER_TYPE_SRD = 0,
@@ -92,6 +101,7 @@
 enum {
   EFA_QUERY_DEVICE_CAPS_RDMA_READ = 1 << 0,
   EFA_QUERY_DEVICE_CAPS_RNR_RETRY = 1 << 1,
+  EFA_QUERY_DEVICE_CAPS_CQ_NOTIFICATIONS = 1 << 2,
 };
 struct efa_ibv_ex_query_device_resp {
   __u32 comp_mask;
diff --git a/libc/kernel/uapi/rdma/rdma_netlink.h b/libc/kernel/uapi/rdma/rdma_netlink.h
index 8072a43..bdb5fdd 100644
--- a/libc/kernel/uapi/rdma/rdma_netlink.h
+++ b/libc/kernel/uapi/rdma/rdma_netlink.h
@@ -209,6 +209,7 @@
   RDMA_NLDEV_CMD_RES_MR_GET_RAW,
   RDMA_NLDEV_CMD_RES_CTX_GET,
   RDMA_NLDEV_CMD_RES_SRQ_GET,
+  RDMA_NLDEV_CMD_STAT_GET_STATUS,
   RDMA_NLDEV_NUM_OPS
 };
 enum rdma_nldev_print_type {
@@ -311,6 +312,8 @@
   RDMA_NLDEV_ATTR_MIN_RANGE,
   RDMA_NLDEV_ATTR_MAX_RANGE,
   RDMA_NLDEV_SYS_ATTR_COPY_ON_FORK,
+  RDMA_NLDEV_ATTR_STAT_HWCOUNTER_INDEX,
+  RDMA_NLDEV_ATTR_STAT_HWCOUNTER_DYNAMIC,
   RDMA_NLDEV_ATTR_MAX
 };
 enum rdma_nl_counter_mode {
diff --git a/libc/kernel/uapi/rdma/rdma_user_rxe.h b/libc/kernel/uapi/rdma/rdma_user_rxe.h
index 098bf6c..cdb00c7 100644
--- a/libc/kernel/uapi/rdma/rdma_user_rxe.h
+++ b/libc/kernel/uapi/rdma/rdma_user_rxe.h
@@ -76,6 +76,10 @@
       __u32 remote_qpn;
       __u32 remote_qkey;
       __u16 pkey_index;
+      __u16 reserved;
+      __u32 ah_num;
+      __u32 pad[4];
+      struct rxe_av av;
     } ud;
     struct {
       __aligned_u64 addr;
@@ -105,13 +109,12 @@
   __u32 sge_offset;
   __u32 reserved;
   union {
-    __u8 inline_data[0];
-    struct rxe_sge sge[0];
+    __DECLARE_FLEX_ARRAY(__u8, inline_data);
+    __DECLARE_FLEX_ARRAY(struct rxe_sge, sge);
   };
 };
 struct rxe_send_wqe {
   struct rxe_send_wr wr;
-  struct rxe_av av;
   __u32 status;
   __u32 state;
   __aligned_u64 iova;
@@ -129,6 +132,10 @@
   __u32 padding;
   struct rxe_dma_info dma;
 };
+struct rxe_create_ah_resp {
+  __u32 ah_num;
+  __u32 reserved;
+};
 struct rxe_create_cq_resp {
   struct mminfo mi;
 };
diff --git a/libc/kernel/uapi/sound/asoc.h b/libc/kernel/uapi/sound/asoc.h
index c962603..eeb12b0 100644
--- a/libc/kernel/uapi/sound/asoc.h
+++ b/libc/kernel/uapi/sound/asoc.h
@@ -157,8 +157,8 @@
 struct snd_soc_tplg_private {
   __le32 size;
   union {
-    char data[0];
-    struct snd_soc_tplg_vendor_array array[0];
+    __DECLARE_FLEX_ARRAY(char, data);
+    __DECLARE_FLEX_ARRAY(struct snd_soc_tplg_vendor_array, array);
   };
 } __attribute__((packed));
 struct snd_soc_tplg_tlv_dbscale {
diff --git a/libc/kernel/uapi/sound/firewire.h b/libc/kernel/uapi/sound/firewire.h
index 67c010b..198a8f4 100644
--- a/libc/kernel/uapi/sound/firewire.h
+++ b/libc/kernel/uapi/sound/firewire.h
@@ -26,6 +26,7 @@
 #define SNDRV_FIREWIRE_EVENT_DIGI00X_MESSAGE 0x746e736c
 #define SNDRV_FIREWIRE_EVENT_MOTU_NOTIFICATION 0x64776479
 #define SNDRV_FIREWIRE_EVENT_TASCAM_CONTROL 0x7473636d
+#define SNDRV_FIREWIRE_EVENT_MOTU_REGISTER_DSP_CHANGE 0x4d545244
 struct snd_firewire_event_common {
   unsigned int type;
 };
@@ -68,6 +69,11 @@
   unsigned int type;
   struct snd_firewire_tascam_change changes[0];
 };
+struct snd_firewire_event_motu_register_dsp_change {
+  unsigned int type;
+  __u32 count;
+  __u32 changes[];
+};
 union snd_firewire_event {
   struct snd_firewire_event_common common;
   struct snd_firewire_event_lock_status lock_status;
@@ -76,11 +82,15 @@
   struct snd_firewire_event_digi00x_message digi00x_message;
   struct snd_firewire_event_tascam_control tascam_control;
   struct snd_firewire_event_motu_notification motu_notification;
+  struct snd_firewire_event_motu_register_dsp_change motu_register_dsp_change;
 };
 #define SNDRV_FIREWIRE_IOCTL_GET_INFO _IOR('H', 0xf8, struct snd_firewire_get_info)
 #define SNDRV_FIREWIRE_IOCTL_LOCK _IO('H', 0xf9)
 #define SNDRV_FIREWIRE_IOCTL_UNLOCK _IO('H', 0xfa)
 #define SNDRV_FIREWIRE_IOCTL_TASCAM_STATE _IOR('H', 0xfb, struct snd_firewire_tascam_state)
+#define SNDRV_FIREWIRE_IOCTL_MOTU_REGISTER_DSP_METER _IOR('H', 0xfc, struct snd_firewire_motu_register_dsp_meter)
+#define SNDRV_FIREWIRE_IOCTL_MOTU_COMMAND_DSP_METER _IOR('H', 0xfd, struct snd_firewire_motu_command_dsp_meter)
+#define SNDRV_FIREWIRE_IOCTL_MOTU_REGISTER_DSP_PARAMETER _IOR('H', 0xfe, struct snd_firewire_motu_register_dsp_parameter)
 #define SNDRV_FIREWIRE_TYPE_DICE 1
 #define SNDRV_FIREWIRE_TYPE_FIREWORKS 2
 #define SNDRV_FIREWIRE_TYPE_BEBOB 3
@@ -99,4 +109,49 @@
 struct snd_firewire_tascam_state {
   __be32 data[SNDRV_FIREWIRE_TASCAM_STATE_COUNT];
 };
+#define SNDRV_FIREWIRE_MOTU_REGISTER_DSP_METER_INPUT_COUNT 24
+#define SNDRV_FIREWIRE_MOTU_REGISTER_DSP_METER_OUTPUT_COUNT 24
+#define SNDRV_FIREWIRE_MOTU_REGISTER_DSP_METER_COUNT (SNDRV_FIREWIRE_MOTU_REGISTER_DSP_METER_INPUT_COUNT + SNDRV_FIREWIRE_MOTU_REGISTER_DSP_METER_OUTPUT_COUNT)
+struct snd_firewire_motu_register_dsp_meter {
+  __u8 data[SNDRV_FIREWIRE_MOTU_REGISTER_DSP_METER_COUNT];
+};
+#define SNDRV_FIREWIRE_MOTU_REGISTER_DSP_MIXER_COUNT 4
+#define SNDRV_FIREWIRE_MOTU_REGISTER_DSP_MIXER_SRC_COUNT 20
+#define SNDRV_FIREWIRE_MOTU_REGISTER_DSP_INPUT_COUNT 10
+#define SNDRV_FIREWIRE_MOTU_REGISTER_DSP_ALIGNED_INPUT_COUNT (SNDRV_FIREWIRE_MOTU_REGISTER_DSP_INPUT_COUNT + 2)
+struct snd_firewire_motu_register_dsp_parameter {
+  struct {
+    struct {
+      __u8 gain[SNDRV_FIREWIRE_MOTU_REGISTER_DSP_MIXER_SRC_COUNT];
+      __u8 pan[SNDRV_FIREWIRE_MOTU_REGISTER_DSP_MIXER_SRC_COUNT];
+      __u8 flag[SNDRV_FIREWIRE_MOTU_REGISTER_DSP_MIXER_SRC_COUNT];
+      __u8 paired_balance[SNDRV_FIREWIRE_MOTU_REGISTER_DSP_MIXER_SRC_COUNT];
+      __u8 paired_width[SNDRV_FIREWIRE_MOTU_REGISTER_DSP_MIXER_SRC_COUNT];
+    } source[SNDRV_FIREWIRE_MOTU_REGISTER_DSP_MIXER_COUNT];
+    struct {
+      __u8 paired_volume[SNDRV_FIREWIRE_MOTU_REGISTER_DSP_MIXER_COUNT];
+      __u8 paired_flag[SNDRV_FIREWIRE_MOTU_REGISTER_DSP_MIXER_COUNT];
+    } output;
+  } mixer;
+  struct {
+    __u8 main_paired_volume;
+    __u8 hp_paired_volume;
+    __u8 hp_paired_assignment;
+    __u8 reserved[5];
+  } output;
+  struct {
+    __u8 boost_flag;
+    __u8 nominal_level_flag;
+    __u8 reserved[6];
+  } line_input;
+  struct {
+    __u8 gain_and_invert[SNDRV_FIREWIRE_MOTU_REGISTER_DSP_ALIGNED_INPUT_COUNT];
+    __u8 flag[SNDRV_FIREWIRE_MOTU_REGISTER_DSP_ALIGNED_INPUT_COUNT];
+  } input;
+  __u8 reserved[64];
+};
+#define SNDRV_FIREWIRE_MOTU_COMMAND_DSP_METER_COUNT 400
+struct snd_firewire_motu_command_dsp_meter {
+  float data[SNDRV_FIREWIRE_MOTU_COMMAND_DSP_METER_COUNT];
+};
 #endif
diff --git a/libc/kernel/uapi/sound/snd_ar_tokens.h b/libc/kernel/uapi/sound/snd_ar_tokens.h
new file mode 100644
index 0000000..39c0684
--- /dev/null
+++ b/libc/kernel/uapi/sound/snd_ar_tokens.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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 __SND_AR_TOKENS_H__
+#define __SND_AR_TOKENS_H__
+#define APM_SUB_GRAPH_PERF_MODE_LOW_POWER 0x1
+#define APM_SUB_GRAPH_PERF_MODE_LOW_LATENCY 0x2
+#define APM_SUB_GRAPH_DIRECTION_TX 0x1
+#define APM_SUB_GRAPH_DIRECTION_RX 0x2
+#define APM_SUB_GRAPH_SID_AUDIO_PLAYBACK 0x1
+#define APM_SUB_GRAPH_SID_AUDIO_RECORD 0x2
+#define APM_SUB_GRAPH_SID_VOICE_CALL 0x3
+#define APM_CONTAINER_CAP_ID_PP 0x1
+#define APM_CONTAINER_CAP_ID_CD 0x2
+#define APM_CONTAINER_CAP_ID_EP 0x3
+#define APM_CONTAINER_CAP_ID_OLC 0x4
+#define APM_CONT_GRAPH_POS_STREAM 0x1
+#define APM_CONT_GRAPH_POS_PER_STR_PER_DEV 0x2
+#define APM_CONT_GRAPH_POS_STR_DEV 0x3
+#define APM_CONT_GRAPH_POS_GLOBAL_DEV 0x4
+#define APM_PROC_DOMAIN_ID_MDSP 0x1
+#define APM_PROC_DOMAIN_ID_ADSP 0x2
+#define APM_PROC_DOMAIN_ID_SDSP 0x4
+#define APM_PROC_DOMAIN_ID_CDSP 0x5
+#define PCM_INTERLEAVED 1
+#define PCM_DEINTERLEAVED_PACKED 2
+#define PCM_DEINTERLEAVED_UNPACKED 3
+#define AR_I2S_WS_SRC_EXTERNAL 0
+#define AR_I2S_WS_SRC_INTERNAL 1
+enum ar_event_types {
+  AR_EVENT_NONE = 0,
+  AR_PGA_DAPM_EVENT
+};
+#define SND_SOC_AR_TPLG_FE_BE_GRAPH_CTL_MIX 256
+#define SND_SOC_AR_TPLG_VOL_CTL 257
+#define AR_TKN_DAI_INDEX 1
+#define AR_TKN_U32_SUB_GRAPH_INSTANCE_ID 2
+#define AR_TKN_U32_SUB_GRAPH_PERF_MODE 3
+#define AR_TKN_U32_SUB_GRAPH_DIRECTION 4
+#define AR_TKN_U32_SUB_GRAPH_SCENARIO_ID 5
+#define AR_TKN_U32_CONTAINER_INSTANCE_ID 100
+#define AR_TKN_U32_CONTAINER_CAPABILITY_ID 101
+#define AR_TKN_U32_CONTAINER_STACK_SIZE 102
+#define AR_TKN_U32_CONTAINER_GRAPH_POS 103
+#define AR_TKN_U32_CONTAINER_PROC_DOMAIN 104
+#define AR_TKN_U32_MODULE_ID 200
+#define AR_TKN_U32_MODULE_INSTANCE_ID 201
+#define AR_TKN_U32_MODULE_MAX_IP_PORTS 202
+#define AR_TKN_U32_MODULE_MAX_OP_PORTS 203
+#define AR_TKN_U32_MODULE_IN_PORTS 204
+#define AR_TKN_U32_MODULE_OUT_PORTS 205
+#define AR_TKN_U32_MODULE_SRC_OP_PORT_ID 206
+#define AR_TKN_U32_MODULE_DST_IN_PORT_ID 207
+#define AR_TKN_U32_MODULE_SRC_INSTANCE_ID 208
+#define AR_TKN_U32_MODULE_DST_INSTANCE_ID 209
+#define AR_TKN_U32_MODULE_HW_IF_IDX 250
+#define AR_TKN_U32_MODULE_HW_IF_TYPE 251
+#define AR_TKN_U32_MODULE_FMT_INTERLEAVE 252
+#define AR_TKN_U32_MODULE_FMT_DATA 253
+#define AR_TKN_U32_MODULE_FMT_SAMPLE_RATE 254
+#define AR_TKN_U32_MODULE_FMT_BIT_DEPTH 255
+#define AR_TKN_U32_MODULE_SD_LINE_IDX 256
+#define AR_TKN_U32_MODULE_WS_SRC 257
+#define AR_TKN_U32_MODULE_FRAME_SZ_FACTOR 258
+#define AR_TKN_U32_MODULE_LOG_CODE 259
+#define AR_TKN_U32_MODULE_LOG_TAP_POINT_ID 260
+#define AR_TKN_U32_MODULE_LOG_MODE 261
+#endif
diff --git a/libc/kernel/uapi/sound/sof/tokens.h b/libc/kernel/uapi/sound/sof/tokens.h
index ef62372..4499cd3 100644
--- a/libc/kernel/uapi/sound/sof/tokens.h
+++ b/libc/kernel/uapi/sound/sof/tokens.h
@@ -36,6 +36,7 @@
 #define SOF_TKN_SCHED_CORE 203
 #define SOF_TKN_SCHED_FRAMES 204
 #define SOF_TKN_SCHED_TIME_DOMAIN 205
+#define SOF_TKN_SCHED_DYNAMIC_PIPELINE 206
 #define SOF_TKN_VOLUME_RAMP_STEP_TYPE 250
 #define SOF_TKN_VOLUME_RAMP_STEP_MS 251
 #define SOF_TKN_SRC_RATE_IN 300