Update to v4.19 kernel headers.

Test: Builds and boots.
Change-Id: I99a9ed79666e143b47f02ca4e59eed94f69b7e4a
(cherry picked from commit a981e2e52e2e95a65fa9c9b6fb16dcb4c83dd576)
diff --git a/libc/include/bits/glibc-syscalls.h b/libc/include/bits/glibc-syscalls.h
index ffd92cc..52eff56 100644
--- a/libc/include/bits/glibc-syscalls.h
+++ b/libc/include/bits/glibc-syscalls.h
@@ -418,6 +418,9 @@
 #if defined(__NR_io_getevents)
   #define SYS_io_getevents __NR_io_getevents
 #endif
+#if defined(__NR_io_pgetevents)
+  #define SYS_io_pgetevents __NR_io_pgetevents
+#endif
 #if defined(__NR_io_setup)
   #define SYS_io_setup __NR_io_setup
 #endif
@@ -799,6 +802,9 @@
 #if defined(__NR_rmdir)
   #define SYS_rmdir __NR_rmdir
 #endif
+#if defined(__NR_rseq)
+  #define SYS_rseq __NR_rseq
+#endif
 #if defined(__NR_rt_sigaction)
   #define SYS_rt_sigaction __NR_rt_sigaction
 #endif
diff --git a/libc/kernel/uapi/asm-arm/asm/kvm.h b/libc/kernel/uapi/asm-arm/asm/kvm.h
index 6cbc533..95f0c4d 100644
--- a/libc/kernel/uapi/asm-arm/asm/kvm.h
+++ b/libc/kernel/uapi/asm-arm/asm/kvm.h
@@ -24,6 +24,7 @@
 #define __KVM_HAVE_GUEST_DEBUG
 #define __KVM_HAVE_IRQ_LINE
 #define __KVM_HAVE_READONLY_MEM
+#define __KVM_HAVE_VCPU_EVENTS
 #define KVM_COALESCED_MMIO_PAGE_OFFSET 1
 #define KVM_REG_SIZE(id) (1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT))
 #define KVM_ARM_SVC_sp svc_regs[0]
@@ -69,6 +70,7 @@
 #define KVM_VGIC_V3_ADDR_TYPE_DIST 2
 #define KVM_VGIC_V3_ADDR_TYPE_REDIST 3
 #define KVM_VGIC_ITS_ADDR_TYPE 4
+#define KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION 5
 #define KVM_VGIC_V3_DIST_SIZE SZ_64K
 #define KVM_VGIC_V3_REDIST_SIZE (2 * SZ_64K)
 #define KVM_VGIC_V3_ITS_SIZE (2 * SZ_64K)
@@ -91,6 +93,15 @@
 };
 struct kvm_arch_memory_slot {
 };
+struct kvm_vcpu_events {
+  struct {
+    __u8 serror_pending;
+    __u8 serror_has_esr;
+    __u8 pad[6];
+    __u64 serror_esr;
+  } exception;
+  __u32 reserved[12];
+};
 #define KVM_REG_ARM_COPROC_MASK 0x000000000FFF0000
 #define KVM_REG_ARM_COPROC_SHIFT 16
 #define KVM_REG_ARM_32_OPC2_MASK 0x0000000000000007
diff --git a/libc/kernel/uapi/asm-arm/asm/unistd-common.h b/libc/kernel/uapi/asm-arm/asm/unistd-common.h
index c9ee555..824a7d3 100644
--- a/libc/kernel/uapi/asm-arm/asm/unistd-common.h
+++ b/libc/kernel/uapi/asm-arm/asm/unistd-common.h
@@ -371,4 +371,6 @@
 #define __NR_pkey_alloc (__NR_SYSCALL_BASE + 395)
 #define __NR_pkey_free (__NR_SYSCALL_BASE + 396)
 #define __NR_statx (__NR_SYSCALL_BASE + 397)
+#define __NR_rseq (__NR_SYSCALL_BASE + 398)
+#define __NR_io_pgetevents (__NR_SYSCALL_BASE + 399)
 #endif
diff --git a/libc/kernel/uapi/asm-arm64/asm/auxvec.h b/libc/kernel/uapi/asm-arm64/asm/auxvec.h
index 74fca55..4735fd5 100644
--- a/libc/kernel/uapi/asm-arm64/asm/auxvec.h
+++ b/libc/kernel/uapi/asm-arm64/asm/auxvec.h
@@ -19,5 +19,6 @@
 #ifndef __ASM_AUXVEC_H
 #define __ASM_AUXVEC_H
 #define AT_SYSINFO_EHDR 33
-#define AT_VECTOR_SIZE_ARCH 1
+#define AT_MINSIGSTKSZ 51
+#define AT_VECTOR_SIZE_ARCH 2
 #endif
diff --git a/libc/kernel/uapi/asm-arm64/asm/kvm.h b/libc/kernel/uapi/asm-arm64/asm/kvm.h
index 167d811..e79562c 100644
--- a/libc/kernel/uapi/asm-arm64/asm/kvm.h
+++ b/libc/kernel/uapi/asm-arm64/asm/kvm.h
@@ -32,6 +32,7 @@
 #define __KVM_HAVE_GUEST_DEBUG
 #define __KVM_HAVE_IRQ_LINE
 #define __KVM_HAVE_READONLY_MEM
+#define __KVM_HAVE_VCPU_EVENTS
 #define KVM_COALESCED_MMIO_PAGE_OFFSET 1
 #define KVM_REG_SIZE(id) (1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT))
 struct kvm_regs {
@@ -60,6 +61,7 @@
 #define KVM_VGIC_V3_ADDR_TYPE_DIST 2
 #define KVM_VGIC_V3_ADDR_TYPE_REDIST 3
 #define KVM_VGIC_ITS_ADDR_TYPE 4
+#define KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION 5
 #define KVM_VGIC_V3_DIST_SIZE SZ_64K
 #define KVM_VGIC_V3_REDIST_SIZE (2 * SZ_64K)
 #define KVM_VGIC_V3_ITS_SIZE (2 * SZ_64K)
@@ -93,6 +95,15 @@
 };
 struct kvm_arch_memory_slot {
 };
+struct kvm_vcpu_events {
+  struct {
+    __u8 serror_pending;
+    __u8 serror_has_esr;
+    __u8 pad[6];
+    __u64 serror_esr;
+  } exception;
+  __u32 reserved[12];
+};
 #define KVM_REG_ARM_COPROC_MASK 0x000000000FFF0000
 #define KVM_REG_ARM_COPROC_SHIFT 16
 #define KVM_REG_ARM_CORE (0x0010 << KVM_REG_ARM_COPROC_SHIFT)
diff --git a/libc/kernel/uapi/asm-generic/hugetlb_encode.h b/libc/kernel/uapi/asm-generic/hugetlb_encode.h
index 68849b3..01a10ce 100644
--- a/libc/kernel/uapi/asm-generic/hugetlb_encode.h
+++ b/libc/kernel/uapi/asm-generic/hugetlb_encode.h
@@ -26,7 +26,9 @@
 #define HUGETLB_FLAG_ENCODE_2MB (21 << HUGETLB_FLAG_ENCODE_SHIFT)
 #define HUGETLB_FLAG_ENCODE_8MB (23 << HUGETLB_FLAG_ENCODE_SHIFT)
 #define HUGETLB_FLAG_ENCODE_16MB (24 << HUGETLB_FLAG_ENCODE_SHIFT)
+#define HUGETLB_FLAG_ENCODE_32MB (25 << HUGETLB_FLAG_ENCODE_SHIFT)
 #define HUGETLB_FLAG_ENCODE_256MB (28 << HUGETLB_FLAG_ENCODE_SHIFT)
+#define HUGETLB_FLAG_ENCODE_512MB (29 << HUGETLB_FLAG_ENCODE_SHIFT)
 #define HUGETLB_FLAG_ENCODE_1GB (30 << HUGETLB_FLAG_ENCODE_SHIFT)
 #define HUGETLB_FLAG_ENCODE_2GB (31 << HUGETLB_FLAG_ENCODE_SHIFT)
 #define HUGETLB_FLAG_ENCODE_16GB (34 << HUGETLB_FLAG_ENCODE_SHIFT)
diff --git a/libc/kernel/uapi/asm-generic/msgbuf.h b/libc/kernel/uapi/asm-generic/msgbuf.h
index 86a80a4..a8af16e 100644
--- a/libc/kernel/uapi/asm-generic/msgbuf.h
+++ b/libc/kernel/uapi/asm-generic/msgbuf.h
@@ -21,24 +21,24 @@
 #include <asm/bitsperlong.h>
 struct msqid64_ds {
   struct ipc64_perm msg_perm;
+#if __BITS_PER_LONG == 64
   __kernel_time_t msg_stime;
-#if __BITS_PER_LONG != 64
-  unsigned long __unused1;
-#endif
   __kernel_time_t msg_rtime;
-#if __BITS_PER_LONG != 64
-  unsigned long __unused2;
-#endif
   __kernel_time_t msg_ctime;
-#if __BITS_PER_LONG != 64
-  unsigned long __unused3;
+#else
+  unsigned long msg_stime;
+  unsigned long msg_stime_high;
+  unsigned long msg_rtime;
+  unsigned long msg_rtime_high;
+  unsigned long msg_ctime;
+  unsigned long msg_ctime_high;
 #endif
-  __kernel_ulong_t msg_cbytes;
-  __kernel_ulong_t msg_qnum;
-  __kernel_ulong_t msg_qbytes;
+  unsigned long msg_cbytes;
+  unsigned long msg_qnum;
+  unsigned long msg_qbytes;
   __kernel_pid_t msg_lspid;
   __kernel_pid_t msg_lrpid;
-  __kernel_ulong_t __unused4;
-  __kernel_ulong_t __unused5;
+  unsigned long __unused4;
+  unsigned long __unused5;
 };
 #endif
diff --git a/libc/kernel/uapi/asm-generic/posix_types.h b/libc/kernel/uapi/asm-generic/posix_types.h
index 1bafe1b..5aaa56d 100644
--- a/libc/kernel/uapi/asm-generic/posix_types.h
+++ b/libc/kernel/uapi/asm-generic/posix_types.h
@@ -75,6 +75,7 @@
 typedef __kernel_long_t __kernel_off_t;
 typedef long long __kernel_loff_t;
 typedef __kernel_long_t __kernel_time_t;
+typedef long long __kernel_time64_t;
 typedef __kernel_long_t __kernel_clock_t;
 typedef int __kernel_timer_t;
 typedef int __kernel_clockid_t;
diff --git a/libc/kernel/uapi/asm-generic/sembuf.h b/libc/kernel/uapi/asm-generic/sembuf.h
index 1a94bff..c8c1d29 100644
--- a/libc/kernel/uapi/asm-generic/sembuf.h
+++ b/libc/kernel/uapi/asm-generic/sembuf.h
@@ -21,13 +21,14 @@
 #include <asm/bitsperlong.h>
 struct semid64_ds {
   struct ipc64_perm sem_perm;
+#if __BITS_PER_LONG == 64
   __kernel_time_t sem_otime;
-#if __BITS_PER_LONG != 64
-  unsigned long __unused1;
-#endif
   __kernel_time_t sem_ctime;
-#if __BITS_PER_LONG != 64
-  unsigned long __unused2;
+#else
+  unsigned long sem_otime;
+  unsigned long sem_otime_high;
+  unsigned long sem_ctime;
+  unsigned long sem_ctime_high;
 #endif
   unsigned long sem_nsems;
   unsigned long __unused3;
diff --git a/libc/kernel/uapi/asm-generic/shmbuf.h b/libc/kernel/uapi/asm-generic/shmbuf.h
index 6d4d867..1d003ba 100644
--- a/libc/kernel/uapi/asm-generic/shmbuf.h
+++ b/libc/kernel/uapi/asm-generic/shmbuf.h
@@ -22,33 +22,33 @@
 struct shmid64_ds {
   struct ipc64_perm shm_perm;
   size_t shm_segsz;
+#if __BITS_PER_LONG == 64
   __kernel_time_t shm_atime;
-#if __BITS_PER_LONG != 64
-  unsigned long __unused1;
-#endif
   __kernel_time_t shm_dtime;
-#if __BITS_PER_LONG != 64
-  unsigned long __unused2;
-#endif
   __kernel_time_t shm_ctime;
-#if __BITS_PER_LONG != 64
-  unsigned long __unused3;
+#else
+  unsigned long shm_atime;
+  unsigned long shm_atime_high;
+  unsigned long shm_dtime;
+  unsigned long shm_dtime_high;
+  unsigned long shm_ctime;
+  unsigned long shm_ctime_high;
 #endif
   __kernel_pid_t shm_cpid;
   __kernel_pid_t shm_lpid;
-  __kernel_ulong_t shm_nattch;
-  __kernel_ulong_t __unused4;
-  __kernel_ulong_t __unused5;
+  unsigned long shm_nattch;
+  unsigned long __unused4;
+  unsigned long __unused5;
 };
 struct shminfo64 {
-  __kernel_ulong_t shmmax;
-  __kernel_ulong_t shmmin;
-  __kernel_ulong_t shmmni;
-  __kernel_ulong_t shmseg;
-  __kernel_ulong_t shmall;
-  __kernel_ulong_t __unused1;
-  __kernel_ulong_t __unused2;
-  __kernel_ulong_t __unused3;
-  __kernel_ulong_t __unused4;
+  unsigned long shmmax;
+  unsigned long shmmin;
+  unsigned long shmmni;
+  unsigned long shmseg;
+  unsigned long shmall;
+  unsigned long __unused1;
+  unsigned long __unused2;
+  unsigned long __unused3;
+  unsigned long __unused4;
 };
 #endif
diff --git a/libc/kernel/uapi/asm-generic/siginfo.h b/libc/kernel/uapi/asm-generic/siginfo.h
index af3d98e..166193b 100644
--- a/libc/kernel/uapi/asm-generic/siginfo.h
+++ b/libc/kernel/uapi/asm-generic/siginfo.h
@@ -194,7 +194,8 @@
 #define TRAP_TRACE 2
 #define TRAP_BRANCH 3
 #define TRAP_HWBKPT 4
-#define NSIGTRAP 4
+#define TRAP_UNK 5
+#define NSIGTRAP 5
 #define CLD_EXITED 1
 #define CLD_KILLED 2
 #define CLD_DUMPED 3
diff --git a/libc/kernel/uapi/asm-generic/socket.h b/libc/kernel/uapi/asm-generic/socket.h
index b821554..7c52ccc 100644
--- a/libc/kernel/uapi/asm-generic/socket.h
+++ b/libc/kernel/uapi/asm-generic/socket.h
@@ -88,4 +88,6 @@
 #define SCM_TIMESTAMPING_PKTINFO 58
 #define SO_PEERGROUPS 59
 #define SO_ZEROCOPY 60
+#define SO_TXTIME 61
+#define SCM_TXTIME SO_TXTIME
 #endif
diff --git a/libc/kernel/uapi/asm-generic/unistd.h b/libc/kernel/uapi/asm-generic/unistd.h
index 39b7c1a..52f0b57 100644
--- a/libc/kernel/uapi/asm-generic/unistd.h
+++ b/libc/kernel/uapi/asm-generic/unistd.h
@@ -317,8 +317,10 @@
 #define __NR_pkey_alloc 289
 #define __NR_pkey_free 290
 #define __NR_statx 291
+#define __NR_io_pgetevents 292
+#define __NR_rseq 293
 #undef __NR_syscalls
-#define __NR_syscalls 292
+#define __NR_syscalls 294
 #if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT)
 #define __NR_fcntl __NR3264_fcntl
 #define __NR_statfs __NR3264_statfs
diff --git a/libc/kernel/uapi/asm-mips/asm/msgbuf.h b/libc/kernel/uapi/asm-mips/asm/msgbuf.h
index e64d9a9..e41761a 100644
--- a/libc/kernel/uapi/asm-mips/asm/msgbuf.h
+++ b/libc/kernel/uapi/asm-mips/asm/msgbuf.h
@@ -18,20 +18,12 @@
  ****************************************************************************/
 #ifndef _ASM_MSGBUF_H
 #define _ASM_MSGBUF_H
+#ifdef __mips64
 struct msqid64_ds {
   struct ipc64_perm msg_perm;
   __kernel_time_t msg_stime;
-#ifndef __mips64
-  unsigned long __unused1;
-#endif
   __kernel_time_t msg_rtime;
-#ifndef __mips64
-  unsigned long __unused2;
-#endif
   __kernel_time_t msg_ctime;
-#ifndef __mips64
-  unsigned long __unused3;
-#endif
   unsigned long msg_cbytes;
   unsigned long msg_qnum;
   unsigned long msg_qbytes;
@@ -40,4 +32,22 @@
   unsigned long __unused4;
   unsigned long __unused5;
 };
+#elif 1
+struct msqid64_ds {
+  struct ipc64_perm msg_perm;
+  unsigned long msg_stime;
+  unsigned long msg_stime_high;
+  unsigned long msg_rtime;
+  unsigned long msg_rtime_high;
+  unsigned long msg_ctime;
+  unsigned long msg_ctime_high;
+  unsigned long msg_cbytes;
+  unsigned long msg_qnum;
+  unsigned long msg_qbytes;
+  __kernel_pid_t msg_lspid;
+  __kernel_pid_t msg_lrpid;
+  unsigned long __unused4;
+  unsigned long __unused5;
+};
+#endif
 #endif
diff --git a/libc/kernel/uapi/asm-mips/asm/sembuf.h b/libc/kernel/uapi/asm-mips/asm/sembuf.h
index 25979ac..a46f326 100644
--- a/libc/kernel/uapi/asm-mips/asm/sembuf.h
+++ b/libc/kernel/uapi/asm-mips/asm/sembuf.h
@@ -18,6 +18,7 @@
  ****************************************************************************/
 #ifndef _ASM_SEMBUF_H
 #define _ASM_SEMBUF_H
+#ifdef __mips64
 struct semid64_ds {
   struct ipc64_perm sem_perm;
   __kernel_time_t sem_otime;
@@ -26,4 +27,14 @@
   unsigned long __unused1;
   unsigned long __unused2;
 };
+#else
+struct semid64_ds {
+  struct ipc64_perm sem_perm;
+  unsigned long sem_otime;
+  unsigned long sem_ctime;
+  unsigned long sem_nsems;
+  unsigned long sem_otime_high;
+  unsigned long sem_ctime_high;
+};
+#endif
 #endif
diff --git a/libc/kernel/uapi/asm-mips/asm/shmbuf.h b/libc/kernel/uapi/asm-mips/asm/shmbuf.h
index 0d1e8a1..9c42cee 100644
--- a/libc/kernel/uapi/asm-mips/asm/shmbuf.h
+++ b/libc/kernel/uapi/asm-mips/asm/shmbuf.h
@@ -18,6 +18,7 @@
  ****************************************************************************/
 #ifndef _ASM_SHMBUF_H
 #define _ASM_SHMBUF_H
+#ifdef __mips64
 struct shmid64_ds {
   struct ipc64_perm shm_perm;
   size_t shm_segsz;
@@ -30,6 +31,22 @@
   unsigned long __unused1;
   unsigned long __unused2;
 };
+#else
+struct shmid64_ds {
+  struct ipc64_perm shm_perm;
+  size_t shm_segsz;
+  unsigned long shm_atime;
+  unsigned long shm_dtime;
+  unsigned long shm_ctime;
+  __kernel_pid_t shm_cpid;
+  __kernel_pid_t shm_lpid;
+  unsigned long shm_nattch;
+  unsigned short shm_atime_high;
+  unsigned short shm_dtime_high;
+  unsigned short shm_ctime_high;
+  unsigned short __unused1;
+};
+#endif
 struct shminfo64 {
   unsigned long shmmax;
   unsigned long shmmin;
diff --git a/libc/kernel/uapi/asm-mips/asm/socket.h b/libc/kernel/uapi/asm-mips/asm/socket.h
index b8de15c..960b141 100644
--- a/libc/kernel/uapi/asm-mips/asm/socket.h
+++ b/libc/kernel/uapi/asm-mips/asm/socket.h
@@ -87,4 +87,6 @@
 #define SCM_TIMESTAMPING_PKTINFO 58
 #define SO_PEERGROUPS 59
 #define SO_ZEROCOPY 60
+#define SO_TXTIME 61
+#define SCM_TXTIME SO_TXTIME
 #endif
diff --git a/libc/kernel/uapi/asm-mips/asm/unistd.h b/libc/kernel/uapi/asm-mips/asm/unistd.h
index 76d7b81..e4dee2b 100644
--- a/libc/kernel/uapi/asm-mips/asm/unistd.h
+++ b/libc/kernel/uapi/asm-mips/asm/unistd.h
@@ -387,10 +387,12 @@
 #define __NR_pkey_alloc (__NR_Linux + 364)
 #define __NR_pkey_free (__NR_Linux + 365)
 #define __NR_statx (__NR_Linux + 366)
-#define __NR_Linux_syscalls 366
+#define __NR_rseq (__NR_Linux + 367)
+#define __NR_io_pgetevents (__NR_Linux + 368)
+#define __NR_Linux_syscalls 368
 #endif
 #define __NR_O32_Linux 4000
-#define __NR_O32_Linux_syscalls 366
+#define __NR_O32_Linux_syscalls 368
 #if _MIPS_SIM == _MIPS_SIM_ABI64
 #define __NR_Linux 5000
 #define __NR_read (__NR_Linux + 0)
@@ -719,10 +721,12 @@
 #define __NR_pkey_alloc (__NR_Linux + 324)
 #define __NR_pkey_free (__NR_Linux + 325)
 #define __NR_statx (__NR_Linux + 326)
-#define __NR_Linux_syscalls 326
+#define __NR_rseq (__NR_Linux + 327)
+#define __NR_io_pgetevents (__NR_Linux + 328)
+#define __NR_Linux_syscalls 328
 #endif
 #define __NR_64_Linux 5000
-#define __NR_64_Linux_syscalls 326
+#define __NR_64_Linux_syscalls 328
 #if _MIPS_SIM == _MIPS_SIM_NABI32
 #define __NR_Linux 6000
 #define __NR_read (__NR_Linux + 0)
@@ -1055,8 +1059,10 @@
 #define __NR_pkey_alloc (__NR_Linux + 328)
 #define __NR_pkey_free (__NR_Linux + 329)
 #define __NR_statx (__NR_Linux + 330)
-#define __NR_Linux_syscalls 330
+#define __NR_rseq (__NR_Linux + 331)
+#define __NR_io_pgetevents (__NR_Linux + 332)
+#define __NR_Linux_syscalls 332
 #endif
 #define __NR_N32_Linux 6000
-#define __NR_N32_Linux_syscalls 330
+#define __NR_N32_Linux_syscalls 332
 #endif
diff --git a/libc/kernel/uapi/asm-x86/asm/kvm.h b/libc/kernel/uapi/asm-x86/asm/kvm.h
index df1b396..1d7f767 100644
--- a/libc/kernel/uapi/asm-x86/asm/kvm.h
+++ b/libc/kernel/uapi/asm-x86/asm/kvm.h
@@ -313,4 +313,26 @@
 };
 #define KVM_X86_QUIRK_LINT0_REENABLED (1 << 0)
 #define KVM_X86_QUIRK_CD_NW_CLEARED (1 << 1)
+#define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2)
+#define KVM_STATE_NESTED_GUEST_MODE 0x00000001
+#define KVM_STATE_NESTED_RUN_PENDING 0x00000002
+#define KVM_STATE_NESTED_SMM_GUEST_MODE 0x00000001
+#define KVM_STATE_NESTED_SMM_VMXON 0x00000002
+struct kvm_vmx_nested_state {
+  __u64 vmxon_pa;
+  __u64 vmcs_pa;
+  struct {
+    __u16 flags;
+  } smm;
+};
+struct kvm_nested_state {
+  __u16 flags;
+  __u16 format;
+  __u32 size;
+  union {
+    struct kvm_vmx_nested_state vmx;
+    __u8 pad[120];
+  };
+  __u8 data[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 0e4f2e0..47ecca9 100644
--- a/libc/kernel/uapi/asm-x86/asm/kvm_para.h
+++ b/libc/kernel/uapi/asm-x86/asm/kvm_para.h
@@ -31,6 +31,7 @@
 #define KVM_FEATURE_PV_UNHALT 7
 #define KVM_FEATURE_PV_TLB_FLUSH 9
 #define KVM_FEATURE_ASYNC_PF_VMEXIT 10
+#define KVM_FEATURE_PV_SEND_IPI 11
 #define KVM_HINTS_REALTIME 0
 #define KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 24
 #define MSR_KVM_WALL_CLOCK 0x11
diff --git a/libc/kernel/uapi/asm-x86/asm/sembuf.h b/libc/kernel/uapi/asm-x86/asm/sembuf.h
index 9b7e109..9b96722 100644
--- a/libc/kernel/uapi/asm-x86/asm/sembuf.h
+++ b/libc/kernel/uapi/asm-x86/asm/sembuf.h
@@ -20,10 +20,17 @@
 #define _ASM_X86_SEMBUF_H
 struct semid64_ds {
   struct ipc64_perm sem_perm;
+#ifdef __i386__
+  unsigned long sem_otime;
+  unsigned long sem_otime_high;
+  unsigned long sem_ctime;
+  unsigned long sem_ctime_high;
+#else
   __kernel_time_t sem_otime;
   __kernel_ulong_t __unused1;
   __kernel_time_t sem_ctime;
   __kernel_ulong_t __unused2;
+#endif
   __kernel_ulong_t sem_nsems;
   __kernel_ulong_t __unused3;
   __kernel_ulong_t __unused4;
diff --git a/libc/kernel/uapi/asm-x86/asm/unistd_32.h b/libc/kernel/uapi/asm-x86/asm/unistd_32.h
index 0038efb..4afa676 100644
--- a/libc/kernel/uapi/asm-x86/asm/unistd_32.h
+++ b/libc/kernel/uapi/asm-x86/asm/unistd_32.h
@@ -399,4 +399,6 @@
 #define __NR_pkey_free 382
 #define __NR_statx 383
 #define __NR_arch_prctl 384
+#define __NR_io_pgetevents 385
+#define __NR_rseq 386
 #endif
diff --git a/libc/kernel/uapi/asm-x86/asm/unistd_64.h b/libc/kernel/uapi/asm-x86/asm/unistd_64.h
index 3cde166..a118200 100644
--- a/libc/kernel/uapi/asm-x86/asm/unistd_64.h
+++ b/libc/kernel/uapi/asm-x86/asm/unistd_64.h
@@ -351,4 +351,6 @@
 #define __NR_pkey_alloc 330
 #define __NR_pkey_free 331
 #define __NR_statx 332
+#define __NR_io_pgetevents 333
+#define __NR_rseq 334
 #endif
diff --git a/libc/kernel/uapi/asm-x86/asm/unistd_x32.h b/libc/kernel/uapi/asm-x86/asm/unistd_x32.h
index e10cc6b..b5f3fb1 100644
--- a/libc/kernel/uapi/asm-x86/asm/unistd_x32.h
+++ b/libc/kernel/uapi/asm-x86/asm/unistd_x32.h
@@ -304,6 +304,8 @@
 #define __NR_pkey_alloc (__X32_SYSCALL_BIT + 330)
 #define __NR_pkey_free (__X32_SYSCALL_BIT + 331)
 #define __NR_statx (__X32_SYSCALL_BIT + 332)
+#define __NR_io_pgetevents (__X32_SYSCALL_BIT + 333)
+#define __NR_rseq (__X32_SYSCALL_BIT + 334)
 #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 59f5260..bdf59d6 100644
--- a/libc/kernel/uapi/drm/amdgpu_drm.h
+++ b/libc/kernel/uapi/drm/amdgpu_drm.h
@@ -59,6 +59,7 @@
 #define AMDGPU_GEM_DOMAIN_GDS 0x8
 #define AMDGPU_GEM_DOMAIN_GWS 0x10
 #define AMDGPU_GEM_DOMAIN_OA 0x20
+#define AMDGPU_GEM_DOMAIN_MASK (AMDGPU_GEM_DOMAIN_CPU | AMDGPU_GEM_DOMAIN_GTT | AMDGPU_GEM_DOMAIN_VRAM | AMDGPU_GEM_DOMAIN_GDS | AMDGPU_GEM_DOMAIN_GWS | AMDGPU_GEM_DOMAIN_OA)
 #define AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED (1 << 0)
 #define AMDGPU_GEM_CREATE_NO_CPU_ACCESS (1 << 1)
 #define AMDGPU_GEM_CREATE_CPU_GTT_USWC (1 << 2)
@@ -67,6 +68,7 @@
 #define AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS (1 << 5)
 #define AMDGPU_GEM_CREATE_VM_ALWAYS_VALID (1 << 6)
 #define AMDGPU_GEM_CREATE_EXPLICIT_SYNC (1 << 7)
+#define AMDGPU_GEM_CREATE_MQD_GFX9 (1 << 8)
 struct drm_amdgpu_gem_create_in {
   __u64 bo_size;
   __u64 alignment;
@@ -305,13 +307,15 @@
 #define AMDGPU_HW_IP_UVD_ENC 5
 #define AMDGPU_HW_IP_VCN_DEC 6
 #define AMDGPU_HW_IP_VCN_ENC 7
-#define AMDGPU_HW_IP_NUM 8
+#define AMDGPU_HW_IP_VCN_JPEG 8
+#define AMDGPU_HW_IP_NUM 9
 #define AMDGPU_HW_IP_INSTANCE_MAX_COUNT 1
 #define AMDGPU_CHUNK_ID_IB 0x01
 #define AMDGPU_CHUNK_ID_FENCE 0x02
 #define AMDGPU_CHUNK_ID_DEPENDENCIES 0x03
 #define AMDGPU_CHUNK_ID_SYNCOBJ_IN 0x04
 #define AMDGPU_CHUNK_ID_SYNCOBJ_OUT 0x05
+#define AMDGPU_CHUNK_ID_BO_HANDLES 0x06
 struct drm_amdgpu_cs_chunk {
   __u32 chunk_id;
   __u32 length_dw;
@@ -334,6 +338,7 @@
 #define AMDGPU_IB_FLAG_CE (1 << 0)
 #define AMDGPU_IB_FLAG_PREAMBLE (1 << 1)
 #define AMDGPU_IB_FLAG_PREEMPT (1 << 2)
+#define AMDGPU_IB_FLAG_TC_WB_NOT_INVALIDATE (1 << 3)
 struct drm_amdgpu_cs_chunk_ib {
   __u32 _pad;
   __u32 flags;
@@ -397,6 +402,9 @@
 #define AMDGPU_INFO_FW_SOS 0x0c
 #define AMDGPU_INFO_FW_ASD 0x0d
 #define AMDGPU_INFO_FW_VCN 0x0e
+#define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_CNTL 0x0f
+#define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_GPM_MEM 0x10
+#define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_SRM_MEM 0x11
 #define AMDGPU_INFO_NUM_BYTES_MOVED 0x0f
 #define AMDGPU_INFO_VRAM_USAGE 0x10
 #define AMDGPU_INFO_GTT_USAGE 0x11
diff --git a/libc/kernel/uapi/drm/drm.h b/libc/kernel/uapi/drm/drm.h
index ec0c1fa..21f23f4 100644
--- a/libc/kernel/uapi/drm/drm.h
+++ b/libc/kernel/uapi/drm/drm.h
@@ -369,6 +369,8 @@
 #define DRM_CLIENT_CAP_STEREO_3D 1
 #define DRM_CLIENT_CAP_UNIVERSAL_PLANES 2
 #define DRM_CLIENT_CAP_ATOMIC 3
+#define DRM_CLIENT_CAP_ASPECT_RATIO 4
+#define DRM_CLIENT_CAP_WRITEBACK_CONNECTORS 5
 struct drm_set_client_cap {
   __u64 capability;
   __u64 value;
diff --git a/libc/kernel/uapi/drm/drm_fourcc.h b/libc/kernel/uapi/drm/drm_fourcc.h
index d5fb055..9634e99 100644
--- a/libc/kernel/uapi/drm/drm_fourcc.h
+++ b/libc/kernel/uapi/drm/drm_fourcc.h
@@ -106,6 +106,7 @@
 #define DRM_FORMAT_MOD_VENDOR_QCOM 0x05
 #define DRM_FORMAT_MOD_VENDOR_VIVANTE 0x06
 #define DRM_FORMAT_MOD_VENDOR_BROADCOM 0x07
+#define DRM_FORMAT_MOD_VENDOR_ARM 0x08
 #define DRM_FORMAT_RESERVED ((1ULL << 56) - 1)
 #define fourcc_mod_code(vendor,val) ((((__u64) DRM_FORMAT_MOD_VENDOR_ ##vendor) << 56) | ((val) & 0x00ffffffffffffffULL))
 #define DRM_FORMAT_MOD_INVALID fourcc_mod_code(NONE, DRM_FORMAT_RESERVED)
@@ -116,6 +117,7 @@
 #define I915_FORMAT_MOD_Y_TILED_CCS fourcc_mod_code(INTEL, 4)
 #define I915_FORMAT_MOD_Yf_TILED_CCS fourcc_mod_code(INTEL, 5)
 #define DRM_FORMAT_MOD_SAMSUNG_64_32_TILE fourcc_mod_code(SAMSUNG, 1)
+#define DRM_FORMAT_MOD_QCOM_COMPRESSED fourcc_mod_code(QCOM, 1)
 #define DRM_FORMAT_MOD_VIVANTE_TILED fourcc_mod_code(VIVANTE, 1)
 #define DRM_FORMAT_MOD_VIVANTE_SUPER_TILED fourcc_mod_code(VIVANTE, 2)
 #define DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED fourcc_mod_code(VIVANTE, 3)
@@ -128,7 +130,31 @@
 #define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB fourcc_mod_code(NVIDIA, 0x13)
 #define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB fourcc_mod_code(NVIDIA, 0x14)
 #define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB fourcc_mod_code(NVIDIA, 0x15)
+#define __fourcc_mod_broadcom_param_shift 8
+#define __fourcc_mod_broadcom_param_bits 48
+#define fourcc_mod_broadcom_code(val,params) fourcc_mod_code(BROADCOM, ((((__u64) params) << __fourcc_mod_broadcom_param_shift) | val))
+#define fourcc_mod_broadcom_param(m) ((int) (((m) >> __fourcc_mod_broadcom_param_shift) & ((1ULL << __fourcc_mod_broadcom_param_bits) - 1)))
+#define fourcc_mod_broadcom_mod(m) ((m) & ~(((1ULL << __fourcc_mod_broadcom_param_bits) - 1) << __fourcc_mod_broadcom_param_shift))
 #define DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED fourcc_mod_code(BROADCOM, 1)
+#define DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(v) fourcc_mod_broadcom_code(2, v)
+#define DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(v) fourcc_mod_broadcom_code(3, v)
+#define DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(v) fourcc_mod_broadcom_code(4, v)
+#define DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(v) fourcc_mod_broadcom_code(5, v)
+#define DRM_FORMAT_MOD_BROADCOM_SAND32 DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(0)
+#define DRM_FORMAT_MOD_BROADCOM_SAND64 DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(0)
+#define DRM_FORMAT_MOD_BROADCOM_SAND128 DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(0)
+#define DRM_FORMAT_MOD_BROADCOM_SAND256 DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(0)
+#define DRM_FORMAT_MOD_BROADCOM_UIF fourcc_mod_code(BROADCOM, 6)
+#define DRM_FORMAT_MOD_ARM_AFBC(__afbc_mode) fourcc_mod_code(ARM, __afbc_mode)
+#define AFBC_FORMAT_MOD_BLOCK_SIZE_MASK 0xf
+#define AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 (1ULL)
+#define AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 (2ULL)
+#define AFBC_FORMAT_MOD_YTR (1ULL << 4)
+#define AFBC_FORMAT_MOD_SPLIT (1ULL << 5)
+#define AFBC_FORMAT_MOD_SPARSE (1ULL << 6)
+#define AFBC_FORMAT_MOD_CBR (1ULL << 7)
+#define AFBC_FORMAT_MOD_TILED (1ULL << 8)
+#define AFBC_FORMAT_MOD_SC (1ULL << 9)
 #ifdef __cplusplus
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/drm_mode.h b/libc/kernel/uapi/drm/drm_mode.h
index b91f161..06c26e4 100644
--- a/libc/kernel/uapi/drm/drm_mode.h
+++ b/libc/kernel/uapi/drm/drm_mode.h
@@ -60,10 +60,19 @@
 #define DRM_MODE_PICTURE_ASPECT_NONE 0
 #define DRM_MODE_PICTURE_ASPECT_4_3 1
 #define DRM_MODE_PICTURE_ASPECT_16_9 2
+#define DRM_MODE_PICTURE_ASPECT_64_27 3
+#define DRM_MODE_PICTURE_ASPECT_256_135 4
+#define DRM_MODE_CONTENT_TYPE_NO_DATA 0
+#define DRM_MODE_CONTENT_TYPE_GRAPHICS 1
+#define DRM_MODE_CONTENT_TYPE_PHOTO 2
+#define DRM_MODE_CONTENT_TYPE_CINEMA 3
+#define DRM_MODE_CONTENT_TYPE_GAME 4
 #define DRM_MODE_FLAG_PIC_AR_MASK (0x0F << 19)
 #define DRM_MODE_FLAG_PIC_AR_NONE (DRM_MODE_PICTURE_ASPECT_NONE << 19)
 #define DRM_MODE_FLAG_PIC_AR_4_3 (DRM_MODE_PICTURE_ASPECT_4_3 << 19)
 #define DRM_MODE_FLAG_PIC_AR_16_9 (DRM_MODE_PICTURE_ASPECT_16_9 << 19)
+#define DRM_MODE_FLAG_PIC_AR_64_27 (DRM_MODE_PICTURE_ASPECT_64_27 << 19)
+#define DRM_MODE_FLAG_PIC_AR_256_135 (DRM_MODE_PICTURE_ASPECT_256_135 << 19)
 #define DRM_MODE_FLAG_ALL (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLSCAN | DRM_MODE_FLAG_CSYNC | DRM_MODE_FLAG_PCSYNC | DRM_MODE_FLAG_NCSYNC | DRM_MODE_FLAG_HSKEW | DRM_MODE_FLAG_DBLCLK | DRM_MODE_FLAG_CLKDIV2 | DRM_MODE_FLAG_3D_MASK)
 #define DRM_MODE_DPMS_ON 0
 #define DRM_MODE_DPMS_STANDBY 1
@@ -207,6 +216,7 @@
 #define DRM_MODE_CONNECTOR_VIRTUAL 15
 #define DRM_MODE_CONNECTOR_DSI 16
 #define DRM_MODE_CONNECTOR_DPI 17
+#define DRM_MODE_CONNECTOR_WRITEBACK 18
 struct drm_mode_get_connector {
   __u64 encoders_ptr;
   __u64 modes_ptr;
diff --git a/libc/kernel/uapi/drm/exynos_drm.h b/libc/kernel/uapi/drm/exynos_drm.h
index ed9022b..8b27cbb 100644
--- a/libc/kernel/uapi/drm/exynos_drm.h
+++ b/libc/kernel/uapi/drm/exynos_drm.h
@@ -80,6 +80,109 @@
 struct drm_exynos_g2d_exec {
   __u64 async;
 };
+struct drm_exynos_ioctl_ipp_get_res {
+  __u32 count_ipps;
+  __u32 reserved;
+  __u64 ipp_id_ptr;
+};
+enum drm_exynos_ipp_format_type {
+  DRM_EXYNOS_IPP_FORMAT_SOURCE = 0x01,
+  DRM_EXYNOS_IPP_FORMAT_DESTINATION = 0x02,
+};
+struct drm_exynos_ipp_format {
+  __u32 fourcc;
+  __u32 type;
+  __u64 modifier;
+};
+enum drm_exynos_ipp_capability {
+  DRM_EXYNOS_IPP_CAP_CROP = 0x01,
+  DRM_EXYNOS_IPP_CAP_ROTATE = 0x02,
+  DRM_EXYNOS_IPP_CAP_SCALE = 0x04,
+  DRM_EXYNOS_IPP_CAP_CONVERT = 0x08,
+};
+struct drm_exynos_ioctl_ipp_get_caps {
+  __u32 ipp_id;
+  __u32 capabilities;
+  __u32 reserved;
+  __u32 formats_count;
+  __u64 formats_ptr;
+};
+enum drm_exynos_ipp_limit_type {
+  DRM_EXYNOS_IPP_LIMIT_TYPE_SIZE = 0x0001,
+  DRM_EXYNOS_IPP_LIMIT_TYPE_SCALE = 0x0002,
+  DRM_EXYNOS_IPP_LIMIT_SIZE_BUFFER = 0x0001 << 16,
+  DRM_EXYNOS_IPP_LIMIT_SIZE_AREA = 0x0002 << 16,
+  DRM_EXYNOS_IPP_LIMIT_SIZE_ROTATED = 0x0003 << 16,
+  DRM_EXYNOS_IPP_LIMIT_TYPE_MASK = 0x000f,
+  DRM_EXYNOS_IPP_LIMIT_SIZE_MASK = 0x000f << 16,
+};
+struct drm_exynos_ipp_limit_val {
+  __u32 min;
+  __u32 max;
+  __u32 align;
+  __u32 reserved;
+};
+struct drm_exynos_ipp_limit {
+  __u32 type;
+  __u32 reserved;
+  struct drm_exynos_ipp_limit_val h;
+  struct drm_exynos_ipp_limit_val v;
+};
+struct drm_exynos_ioctl_ipp_get_limits {
+  __u32 ipp_id;
+  __u32 fourcc;
+  __u64 modifier;
+  __u32 type;
+  __u32 limits_count;
+  __u64 limits_ptr;
+};
+enum drm_exynos_ipp_task_id {
+  DRM_EXYNOS_IPP_TASK_BUFFER = 0x0001,
+  DRM_EXYNOS_IPP_TASK_RECTANGLE = 0x0002,
+  DRM_EXYNOS_IPP_TASK_TRANSFORM = 0x0003,
+  DRM_EXYNOS_IPP_TASK_ALPHA = 0x0004,
+  DRM_EXYNOS_IPP_TASK_TYPE_SOURCE = 0x0001 << 16,
+  DRM_EXYNOS_IPP_TASK_TYPE_DESTINATION = 0x0002 << 16,
+};
+struct drm_exynos_ipp_task_buffer {
+  __u32 id;
+  __u32 fourcc;
+  __u32 width, height;
+  __u32 gem_id[4];
+  __u32 offset[4];
+  __u32 pitch[4];
+  __u64 modifier;
+};
+struct drm_exynos_ipp_task_rect {
+  __u32 id;
+  __u32 reserved;
+  __u32 x;
+  __u32 y;
+  __u32 w;
+  __u32 h;
+};
+struct drm_exynos_ipp_task_transform {
+  __u32 id;
+  __u32 rotation;
+};
+struct drm_exynos_ipp_task_alpha {
+  __u32 id;
+  __u32 value;
+};
+enum drm_exynos_ipp_flag {
+  DRM_EXYNOS_IPP_FLAG_EVENT = 0x01,
+  DRM_EXYNOS_IPP_FLAG_TEST_ONLY = 0x02,
+  DRM_EXYNOS_IPP_FLAG_NONBLOCK = 0x04,
+};
+#define DRM_EXYNOS_IPP_FLAGS (DRM_EXYNOS_IPP_FLAG_EVENT | DRM_EXYNOS_IPP_FLAG_TEST_ONLY | DRM_EXYNOS_IPP_FLAG_NONBLOCK)
+struct drm_exynos_ioctl_ipp_commit {
+  __u32 ipp_id;
+  __u32 flags;
+  __u32 reserved;
+  __u32 params_size;
+  __u64 params_ptr;
+  __u64 user_data;
+};
 #define DRM_EXYNOS_GEM_CREATE 0x00
 #define DRM_EXYNOS_GEM_MAP 0x01
 #define DRM_EXYNOS_GEM_GET 0x04
@@ -87,6 +190,10 @@
 #define DRM_EXYNOS_G2D_GET_VER 0x20
 #define DRM_EXYNOS_G2D_SET_CMDLIST 0x21
 #define DRM_EXYNOS_G2D_EXEC 0x22
+#define DRM_EXYNOS_IPP_GET_RESOURCES 0x40
+#define DRM_EXYNOS_IPP_GET_CAPS 0x41
+#define DRM_EXYNOS_IPP_GET_LIMITS 0x42
+#define DRM_EXYNOS_IPP_COMMIT 0x43
 #define DRM_IOCTL_EXYNOS_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
 #define DRM_IOCTL_EXYNOS_GEM_MAP DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_GEM_MAP, struct drm_exynos_gem_map)
 #define DRM_IOCTL_EXYNOS_GEM_GET DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_GEM_GET, struct drm_exynos_gem_info)
@@ -94,7 +201,12 @@
 #define DRM_IOCTL_EXYNOS_G2D_GET_VER DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_G2D_GET_VER, struct drm_exynos_g2d_get_ver)
 #define DRM_IOCTL_EXYNOS_G2D_SET_CMDLIST DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_G2D_SET_CMDLIST, struct drm_exynos_g2d_set_cmdlist)
 #define DRM_IOCTL_EXYNOS_G2D_EXEC DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec)
+#define DRM_IOCTL_EXYNOS_IPP_GET_RESOURCES DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_IPP_GET_RESOURCES, struct drm_exynos_ioctl_ipp_get_res)
+#define DRM_IOCTL_EXYNOS_IPP_GET_CAPS DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_IPP_GET_CAPS, struct drm_exynos_ioctl_ipp_get_caps)
+#define DRM_IOCTL_EXYNOS_IPP_GET_LIMITS DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_IPP_GET_LIMITS, struct drm_exynos_ioctl_ipp_get_limits)
+#define DRM_IOCTL_EXYNOS_IPP_COMMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_IPP_COMMIT, struct drm_exynos_ioctl_ipp_commit)
 #define DRM_EXYNOS_G2D_EVENT 0x80000000
+#define DRM_EXYNOS_IPP_EVENT 0x80000002
 struct drm_exynos_g2d_event {
   struct drm_event base;
   __u64 user_data;
@@ -103,6 +215,15 @@
   __u32 cmdlist_no;
   __u32 reserved;
 };
+struct drm_exynos_ipp_event {
+  struct drm_event base;
+  __u64 user_data;
+  __u32 tv_sec;
+  __u32 tv_usec;
+  __u32 ipp_id;
+  __u32 sequence;
+  __u64 reserved;
+};
 #ifdef __cplusplus
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/tegra_drm.h b/libc/kernel/uapi/drm/tegra_drm.h
index e0bcf95..ee111dc 100644
--- a/libc/kernel/uapi/drm/tegra_drm.h
+++ b/libc/kernel/uapi/drm/tegra_drm.h
@@ -154,7 +154,7 @@
 #define DRM_IOCTL_TEGRA_SYNCPT_INCR DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_INCR, struct drm_tegra_syncpt_incr)
 #define DRM_IOCTL_TEGRA_SYNCPT_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_WAIT, struct drm_tegra_syncpt_wait)
 #define DRM_IOCTL_TEGRA_OPEN_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_OPEN_CHANNEL, struct drm_tegra_open_channel)
-#define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_open_channel)
+#define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_close_channel)
 #define DRM_IOCTL_TEGRA_GET_SYNCPT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT, struct drm_tegra_get_syncpt)
 #define DRM_IOCTL_TEGRA_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SUBMIT, struct drm_tegra_submit)
 #define DRM_IOCTL_TEGRA_GET_SYNCPT_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT_BASE, struct drm_tegra_get_syncpt_base)
diff --git a/libc/kernel/uapi/drm/v3d_drm.h b/libc/kernel/uapi/drm/v3d_drm.h
new file mode 100644
index 0000000..c3e58cb
--- /dev/null
+++ b/libc/kernel/uapi/drm/v3d_drm.h
@@ -0,0 +1,87 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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 _V3D_DRM_H_
+#define _V3D_DRM_H_
+#include "drm.h"
+#ifdef __cplusplus
+#endif
+#define DRM_V3D_SUBMIT_CL 0x00
+#define DRM_V3D_WAIT_BO 0x01
+#define DRM_V3D_CREATE_BO 0x02
+#define DRM_V3D_MMAP_BO 0x03
+#define DRM_V3D_GET_PARAM 0x04
+#define DRM_V3D_GET_BO_OFFSET 0x05
+#define DRM_IOCTL_V3D_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_SUBMIT_CL, struct drm_v3d_submit_cl)
+#define DRM_IOCTL_V3D_WAIT_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_WAIT_BO, struct drm_v3d_wait_bo)
+#define DRM_IOCTL_V3D_CREATE_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_CREATE_BO, struct drm_v3d_create_bo)
+#define DRM_IOCTL_V3D_MMAP_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_MMAP_BO, struct drm_v3d_mmap_bo)
+#define DRM_IOCTL_V3D_GET_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_GET_PARAM, struct drm_v3d_get_param)
+#define DRM_IOCTL_V3D_GET_BO_OFFSET DRM_IOWR(DRM_COMMAND_BASE + DRM_V3D_GET_BO_OFFSET, struct drm_v3d_get_bo_offset)
+struct drm_v3d_submit_cl {
+  __u32 bcl_start;
+  __u32 bcl_end;
+  __u32 rcl_start;
+  __u32 rcl_end;
+  __u32 in_sync_bcl;
+  __u32 in_sync_rcl;
+  __u32 out_sync;
+  __u32 qma;
+  __u32 qms;
+  __u32 qts;
+  __u64 bo_handles;
+  __u32 bo_handle_count;
+  __u32 pad;
+};
+struct drm_v3d_wait_bo {
+  __u32 handle;
+  __u32 pad;
+  __u64 timeout_ns;
+};
+struct drm_v3d_create_bo {
+  __u32 size;
+  __u32 flags;
+  __u32 handle;
+  __u32 offset;
+};
+struct drm_v3d_mmap_bo {
+  __u32 handle;
+  __u32 flags;
+  __u64 offset;
+};
+enum drm_v3d_param {
+  DRM_V3D_PARAM_V3D_UIFCFG,
+  DRM_V3D_PARAM_V3D_HUB_IDENT1,
+  DRM_V3D_PARAM_V3D_HUB_IDENT2,
+  DRM_V3D_PARAM_V3D_HUB_IDENT3,
+  DRM_V3D_PARAM_V3D_CORE0_IDENT0,
+  DRM_V3D_PARAM_V3D_CORE0_IDENT1,
+  DRM_V3D_PARAM_V3D_CORE0_IDENT2,
+};
+struct drm_v3d_get_param {
+  __u32 param;
+  __u32 pad;
+  __u64 value;
+};
+struct drm_v3d_get_bo_offset {
+  __u32 handle;
+  __u32 offset;
+};
+#ifdef __cplusplus
+#endif
+#endif
diff --git a/libc/kernel/uapi/drm/vc4_drm.h b/libc/kernel/uapi/drm/vc4_drm.h
index 05ed172..29eb872 100644
--- a/libc/kernel/uapi/drm/vc4_drm.h
+++ b/libc/kernel/uapi/drm/vc4_drm.h
@@ -91,6 +91,8 @@
   __u32 flags;
   __u64 seqno;
   __u32 perfmonid;
+  __u32 in_sync;
+  __u32 out_sync;
   __u32 pad2;
 };
 struct drm_vc4_wait_seqno {
diff --git a/libc/kernel/uapi/drm/vmwgfx_drm.h b/libc/kernel/uapi/drm/vmwgfx_drm.h
index f6a7b14..7df722a 100644
--- a/libc/kernel/uapi/drm/vmwgfx_drm.h
+++ b/libc/kernel/uapi/drm/vmwgfx_drm.h
@@ -25,6 +25,7 @@
 #define DRM_VMW_MAX_MIP_LEVELS 24
 #define DRM_VMW_GET_PARAM 0
 #define DRM_VMW_ALLOC_DMABUF 1
+#define DRM_VMW_ALLOC_BO 1
 #define DRM_VMW_UNREF_DMABUF 2
 #define DRM_VMW_HANDLE_CLOSE 2
 #define DRM_VMW_CURSOR_BYPASS 3
@@ -51,6 +52,8 @@
 #define DRM_VMW_GB_SURFACE_REF 24
 #define DRM_VMW_SYNCCPU 25
 #define DRM_VMW_CREATE_EXTENDED_CONTEXT 26
+#define DRM_VMW_GB_SURFACE_CREATE_EXT 27
+#define DRM_VMW_GB_SURFACE_REF_EXT 28
 #define DRM_VMW_PARAM_NUM_STREAMS 0
 #define DRM_VMW_PARAM_NUM_FREE_STREAMS 1
 #define DRM_VMW_PARAM_3D 2
@@ -64,6 +67,8 @@
 #define DRM_VMW_PARAM_MAX_MOB_SIZE 10
 #define DRM_VMW_PARAM_SCREEN_TARGET 11
 #define DRM_VMW_PARAM_DX 12
+#define DRM_VMW_PARAM_HW_CAPS2 13
+#define DRM_VMW_PARAM_SM4_1 14
 enum drm_vmw_handle_type {
   DRM_VMW_HANDLE_LEGACY = 0,
   DRM_VMW_HANDLE_PRIME = 1
@@ -124,25 +129,24 @@
   __s32 fd;
   __s32 error;
 };
-struct drm_vmw_alloc_dmabuf_req {
+struct drm_vmw_alloc_bo_req {
   __u32 size;
   __u32 pad64;
 };
-struct drm_vmw_dmabuf_rep {
+#define drm_vmw_alloc_dmabuf_req drm_vmw_alloc_bo_req
+struct drm_vmw_bo_rep {
   __u64 map_handle;
   __u32 handle;
   __u32 cur_gmr_id;
   __u32 cur_gmr_offset;
   __u32 pad64;
 };
-union drm_vmw_alloc_dmabuf_arg {
-  struct drm_vmw_alloc_dmabuf_req req;
-  struct drm_vmw_dmabuf_rep rep;
+#define drm_vmw_dmabuf_rep drm_vmw_bo_rep
+union drm_vmw_alloc_bo_arg {
+  struct drm_vmw_alloc_bo_req req;
+  struct drm_vmw_bo_rep rep;
 };
-struct drm_vmw_unref_dmabuf_arg {
-  __u32 handle;
-  __u32 pad64;
-};
+#define drm_vmw_alloc_dmabuf_arg drm_vmw_alloc_bo_arg
 struct drm_vmw_rect {
   __s32 x;
   __s32 y;
@@ -321,6 +325,30 @@
   __u32 handle;
   __u32 pad64;
 };
+#define drm_vmw_unref_dmabuf_arg drm_vmw_handle_close_arg
+enum drm_vmw_surface_version {
+  drm_vmw_gb_surface_v1
+};
+struct drm_vmw_gb_surface_create_ext_req {
+  struct drm_vmw_gb_surface_create_req base;
+  enum drm_vmw_surface_version version;
+  uint32_t svga3d_flags_upper_32_bits;
+  SVGA3dMSPattern multisample_pattern;
+  SVGA3dMSQualityLevel quality_level;
+  uint64_t must_be_zero;
+};
+union drm_vmw_gb_surface_create_ext_arg {
+  struct drm_vmw_gb_surface_create_rep rep;
+  struct drm_vmw_gb_surface_create_ext_req req;
+};
+struct drm_vmw_gb_surface_ref_ext_rep {
+  struct drm_vmw_gb_surface_create_ext_req creq;
+  struct drm_vmw_gb_surface_create_rep crep;
+};
+union drm_vmw_gb_surface_reference_ext_arg {
+  struct drm_vmw_gb_surface_ref_ext_rep rep;
+  struct drm_vmw_surface_arg req;
+};
 #ifdef __cplusplus
 #endif
 #endif
diff --git a/libc/kernel/uapi/linux/aio_abi.h b/libc/kernel/uapi/linux/aio_abi.h
index e71936d..17ca2f9 100644
--- a/libc/kernel/uapi/linux/aio_abi.h
+++ b/libc/kernel/uapi/linux/aio_abi.h
@@ -27,11 +27,13 @@
   IOCB_CMD_PWRITE = 1,
   IOCB_CMD_FSYNC = 2,
   IOCB_CMD_FDSYNC = 3,
+  IOCB_CMD_POLL = 5,
   IOCB_CMD_NOOP = 6,
   IOCB_CMD_PREADV = 7,
   IOCB_CMD_PWRITEV = 8,
 };
 #define IOCB_FLAG_RESFD (1 << 0)
+#define IOCB_FLAG_IOPRIO (1 << 1)
 struct io_event {
   __u64 data;
   __u64 obj;
diff --git a/libc/kernel/uapi/linux/audit.h b/libc/kernel/uapi/linux/audit.h
index be48b44..235a0e7 100644
--- a/libc/kernel/uapi/linux/audit.h
+++ b/libc/kernel/uapi/linux/audit.h
@@ -110,13 +110,16 @@
 #define AUDIT_INTEGRITY_HASH 1803
 #define AUDIT_INTEGRITY_PCR 1804
 #define AUDIT_INTEGRITY_RULE 1805
+#define AUDIT_INTEGRITY_EVM_XATTR 1806
+#define AUDIT_INTEGRITY_POLICY_RULE 1807
 #define AUDIT_KERNEL 2000
 #define AUDIT_FILTER_USER 0x00
 #define AUDIT_FILTER_TASK 0x01
 #define AUDIT_FILTER_ENTRY 0x02
 #define AUDIT_FILTER_WATCH 0x03
 #define AUDIT_FILTER_EXIT 0x04
-#define AUDIT_FILTER_TYPE 0x05
+#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_PREPEND 0x10
@@ -335,6 +338,7 @@
   __u32 log_passwd;
 };
 #define AUDIT_UID_UNSET (unsigned int) - 1
+#define AUDIT_SID_UNSET ((unsigned int) - 1)
 struct audit_rule_data {
   __u32 flags;
   __u32 action;
diff --git a/libc/kernel/uapi/linux/auto_fs.h b/libc/kernel/uapi/linux/auto_fs.h
index 93a3724..0264b86 100644
--- a/libc/kernel/uapi/linux/auto_fs.h
+++ b/libc/kernel/uapi/linux/auto_fs.h
@@ -21,9 +21,10 @@
 #include <linux/types.h>
 #include <linux/limits.h>
 #include <sys/ioctl.h>
-#define AUTOFS_PROTO_VERSION 3
-#define AUTOFS_MAX_PROTO_VERSION AUTOFS_PROTO_VERSION
-#define AUTOFS_MIN_PROTO_VERSION AUTOFS_PROTO_VERSION
+#define AUTOFS_PROTO_VERSION 5
+#define AUTOFS_MIN_PROTO_VERSION 3
+#define AUTOFS_MAX_PROTO_VERSION 5
+#define AUTOFS_PROTO_SUBVERSION 3
 #if defined(__ia64__) || defined(__alpha__)
 typedef unsigned long autofs_wqt_t;
 #else
@@ -62,4 +63,66 @@
 #define AUTOFS_IOC_SETTIMEOUT32 _IOWR(AUTOFS_IOCTL, AUTOFS_IOC_SETTIMEOUT_CMD, compat_ulong_t)
 #define AUTOFS_IOC_SETTIMEOUT _IOWR(AUTOFS_IOCTL, AUTOFS_IOC_SETTIMEOUT_CMD, unsigned long)
 #define AUTOFS_IOC_EXPIRE _IOR(AUTOFS_IOCTL, AUTOFS_IOC_EXPIRE_CMD, struct autofs_packet_expire)
+#define AUTOFS_EXP_NORMAL 0x00
+#define AUTOFS_EXP_IMMEDIATE 0x01
+#define AUTOFS_EXP_LEAVES 0x02
+#define AUTOFS_EXP_FORCED 0x04
+#define AUTOFS_TYPE_ANY 0U
+#define AUTOFS_TYPE_INDIRECT 1U
+#define AUTOFS_TYPE_DIRECT 2U
+#define AUTOFS_TYPE_OFFSET 4U
+enum autofs_notify {
+  NFY_NONE,
+  NFY_MOUNT,
+  NFY_EXPIRE
+};
+#define autofs_ptype_expire_multi 2
+#define autofs_ptype_missing_indirect 3
+#define autofs_ptype_expire_indirect 4
+#define autofs_ptype_missing_direct 5
+#define autofs_ptype_expire_direct 6
+struct autofs_packet_expire_multi {
+  struct autofs_packet_hdr hdr;
+  autofs_wqt_t wait_queue_token;
+  int len;
+  char name[NAME_MAX + 1];
+};
+union autofs_packet_union {
+  struct autofs_packet_hdr hdr;
+  struct autofs_packet_missing missing;
+  struct autofs_packet_expire expire;
+  struct autofs_packet_expire_multi expire_multi;
+};
+struct autofs_v5_packet {
+  struct autofs_packet_hdr hdr;
+  autofs_wqt_t wait_queue_token;
+  __u32 dev;
+  __u64 ino;
+  __u32 uid;
+  __u32 gid;
+  __u32 pid;
+  __u32 tgid;
+  __u32 len;
+  char name[NAME_MAX + 1];
+};
+typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
+typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
+typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
+typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
+union autofs_v5_packet_union {
+  struct autofs_packet_hdr hdr;
+  struct autofs_v5_packet v5_packet;
+  autofs_packet_missing_indirect_t missing_indirect;
+  autofs_packet_expire_indirect_t expire_indirect;
+  autofs_packet_missing_direct_t missing_direct;
+  autofs_packet_expire_direct_t expire_direct;
+};
+enum {
+  AUTOFS_IOC_EXPIRE_MULTI_CMD = 0x66,
+  AUTOFS_IOC_PROTOSUBVER_CMD,
+  AUTOFS_IOC_ASKUMOUNT_CMD = 0x70,
+};
+#define AUTOFS_IOC_EXPIRE_MULTI _IOW(AUTOFS_IOCTL, AUTOFS_IOC_EXPIRE_MULTI_CMD, int)
+#define AUTOFS_IOC_PROTOSUBVER _IOR(AUTOFS_IOCTL, AUTOFS_IOC_PROTOSUBVER_CMD, int)
+#define AUTOFS_IOC_ASKUMOUNT _IOR(AUTOFS_IOCTL, AUTOFS_IOC_ASKUMOUNT_CMD, int)
 #endif
diff --git a/libc/kernel/uapi/linux/auto_fs4.h b/libc/kernel/uapi/linux/auto_fs4.h
index be6766b..41f3c8c 100644
--- a/libc/kernel/uapi/linux/auto_fs4.h
+++ b/libc/kernel/uapi/linux/auto_fs4.h
@@ -16,75 +16,7 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _LINUX_AUTO_FS4_H
-#define _LINUX_AUTO_FS4_H
-#include <linux/types.h>
+#ifndef _UAPI_LINUX_AUTO_FS4_H
+#define _UAPI_LINUX_AUTO_FS4_H
 #include <linux/auto_fs.h>
-#undef AUTOFS_PROTO_VERSION
-#undef AUTOFS_MIN_PROTO_VERSION
-#undef AUTOFS_MAX_PROTO_VERSION
-#define AUTOFS_PROTO_VERSION 5
-#define AUTOFS_MIN_PROTO_VERSION 3
-#define AUTOFS_MAX_PROTO_VERSION 5
-#define AUTOFS_PROTO_SUBVERSION 2
-#define AUTOFS_EXP_IMMEDIATE 1
-#define AUTOFS_EXP_LEAVES 2
-#define AUTOFS_TYPE_ANY 0U
-#define AUTOFS_TYPE_INDIRECT 1U
-#define AUTOFS_TYPE_DIRECT 2U
-#define AUTOFS_TYPE_OFFSET 4U
-enum autofs_notify {
-  NFY_NONE,
-  NFY_MOUNT,
-  NFY_EXPIRE
-};
-#define autofs_ptype_expire_multi 2
-#define autofs_ptype_missing_indirect 3
-#define autofs_ptype_expire_indirect 4
-#define autofs_ptype_missing_direct 5
-#define autofs_ptype_expire_direct 6
-struct autofs_packet_expire_multi {
-  struct autofs_packet_hdr hdr;
-  autofs_wqt_t wait_queue_token;
-  int len;
-  char name[NAME_MAX + 1];
-};
-union autofs_packet_union {
-  struct autofs_packet_hdr hdr;
-  struct autofs_packet_missing missing;
-  struct autofs_packet_expire expire;
-  struct autofs_packet_expire_multi expire_multi;
-};
-struct autofs_v5_packet {
-  struct autofs_packet_hdr hdr;
-  autofs_wqt_t wait_queue_token;
-  __u32 dev;
-  __u64 ino;
-  __u32 uid;
-  __u32 gid;
-  __u32 pid;
-  __u32 tgid;
-  __u32 len;
-  char name[NAME_MAX + 1];
-};
-typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
-typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
-typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
-typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
-union autofs_v5_packet_union {
-  struct autofs_packet_hdr hdr;
-  struct autofs_v5_packet v5_packet;
-  autofs_packet_missing_indirect_t missing_indirect;
-  autofs_packet_expire_indirect_t expire_indirect;
-  autofs_packet_missing_direct_t missing_direct;
-  autofs_packet_expire_direct_t expire_direct;
-};
-enum {
-  AUTOFS_IOC_EXPIRE_MULTI_CMD = 0x66,
-  AUTOFS_IOC_PROTOSUBVER_CMD,
-  AUTOFS_IOC_ASKUMOUNT_CMD = 0x70,
-};
-#define AUTOFS_IOC_EXPIRE_MULTI _IOW(AUTOFS_IOCTL, AUTOFS_IOC_EXPIRE_MULTI_CMD, int)
-#define AUTOFS_IOC_PROTOSUBVER _IOR(AUTOFS_IOCTL, AUTOFS_IOC_PROTOSUBVER_CMD, int)
-#define AUTOFS_IOC_ASKUMOUNT _IOR(AUTOFS_IOCTL, AUTOFS_IOC_ASKUMOUNT_CMD, int)
 #endif
diff --git a/libc/kernel/uapi/linux/bcache.h b/libc/kernel/uapi/linux/bcache.h
index 4c7e32a..1bee0a3 100644
--- a/libc/kernel/uapi/linux/bcache.h
+++ b/libc/kernel/uapi/linux/bcache.h
@@ -29,8 +29,8 @@
   __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 i) \
-{ return(k->ptr[i] >> offset) & ~(~0ULL << size); } static inline void SET_ ##name(struct bkey * k, unsigned i, __u64 v) \
+#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
diff --git a/libc/kernel/uapi/linux/blkzoned.h b/libc/kernel/uapi/linux/blkzoned.h
index c071c98..eaff1d8 100644
--- a/libc/kernel/uapi/linux/blkzoned.h
+++ b/libc/kernel/uapi/linux/blkzoned.h
@@ -50,7 +50,7 @@
   __u32 nr_zones;
   __u8 reserved[4];
   struct blk_zone zones[0];
-} __packed;
+};
 struct blk_zone_range {
   __u64 sector;
   __u64 nr_sectors;
diff --git a/libc/kernel/uapi/linux/bpf.h b/libc/kernel/uapi/linux/bpf.h
index 0eb0d45..a187913 100644
--- a/libc/kernel/uapi/linux/bpf.h
+++ b/libc/kernel/uapi/linux/bpf.h
@@ -65,6 +65,10 @@
   __u32 prefixlen;
   __u8 data[0];
 };
+struct bpf_cgroup_storage_key {
+  __u64 cgroup_inode_id;
+  __u32 attach_type;
+};
 enum bpf_cmd {
   BPF_MAP_CREATE,
   BPF_MAP_LOOKUP_ELEM,
@@ -84,6 +88,9 @@
   BPF_OBJ_GET_INFO_BY_FD,
   BPF_PROG_QUERY,
   BPF_RAW_TRACEPOINT_OPEN,
+  BPF_BTF_LOAD,
+  BPF_BTF_GET_FD_BY_ID,
+  BPF_TASK_FD_QUERY,
 };
 enum bpf_map_type {
   BPF_MAP_TYPE_UNSPEC,
@@ -103,6 +110,10 @@
   BPF_MAP_TYPE_DEVMAP,
   BPF_MAP_TYPE_SOCKMAP,
   BPF_MAP_TYPE_CPUMAP,
+  BPF_MAP_TYPE_XSKMAP,
+  BPF_MAP_TYPE_SOCKHASH,
+  BPF_MAP_TYPE_CGROUP_STORAGE,
+  BPF_MAP_TYPE_REUSEPORT_SOCKARRAY,
 };
 enum bpf_prog_type {
   BPF_PROG_TYPE_UNSPEC,
@@ -124,6 +135,9 @@
   BPF_PROG_TYPE_SK_MSG,
   BPF_PROG_TYPE_RAW_TRACEPOINT,
   BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
+  BPF_PROG_TYPE_LWT_SEG6LOCAL,
+  BPF_PROG_TYPE_LIRC_MODE2,
+  BPF_PROG_TYPE_SK_REUSEPORT,
 };
 enum bpf_attach_type {
   BPF_CGROUP_INET_INGRESS,
@@ -140,6 +154,9 @@
   BPF_CGROUP_INET6_CONNECT,
   BPF_CGROUP_INET4_POST_BIND,
   BPF_CGROUP_INET6_POST_BIND,
+  BPF_CGROUP_UDP4_SENDMSG,
+  BPF_CGROUP_UDP6_SENDMSG,
+  BPF_LIRC_MODE2,
   __MAX_BPF_ATTACH_TYPE
 };
 #define MAX_BPF_ATTACH_TYPE __MAX_BPF_ATTACH_TYPE
@@ -184,6 +201,9 @@
     __u32 numa_node;
     char map_name[BPF_OBJ_NAME_LEN];
     __u32 map_ifindex;
+    __u32 btf_fd;
+    __u32 btf_key_type_id;
+    __u32 btf_value_type_id;
   };
   struct {
     __u32 map_fd;
@@ -234,6 +254,7 @@
       __u32 start_id;
       __u32 prog_id;
       __u32 map_id;
+      __u32 btf_id;
     };
     __u32 next_id;
     __u32 open_flags;
@@ -255,8 +276,26 @@
     __u64 name;
     __u32 prog_fd;
   } raw_tracepoint;
+  struct {
+    __aligned_u64 btf;
+    __aligned_u64 btf_log_buf;
+    __u32 btf_size;
+    __u32 btf_log_size;
+    __u32 btf_log_level;
+  };
+  struct {
+    __u32 pid;
+    __u32 fd;
+    __u32 flags;
+    __u32 buf_len;
+    __aligned_u64 buf;
+    __u32 prog_id;
+    __u32 fd_type;
+    __u64 probe_offset;
+    __u64 probe_addr;
+  } task_fd_query;
 } __attribute__((aligned(8)));
-#define __BPF_FUNC_MAPPER(FN) FN(unspec), FN(map_lookup_elem), FN(map_update_elem), FN(map_delete_elem), FN(probe_read), FN(ktime_get_ns), FN(trace_printk), FN(get_prandom_u32), FN(get_smp_processor_id), FN(skb_store_bytes), FN(l3_csum_replace), FN(l4_csum_replace), FN(tail_call), FN(clone_redirect), FN(get_current_pid_tgid), FN(get_current_uid_gid), FN(get_current_comm), FN(get_cgroup_classid), FN(skb_vlan_push), FN(skb_vlan_pop), FN(skb_get_tunnel_key), FN(skb_set_tunnel_key), FN(perf_event_read), FN(redirect), FN(get_route_realm), FN(perf_event_output), FN(skb_load_bytes), FN(get_stackid), FN(csum_diff), FN(skb_get_tunnel_opt), FN(skb_set_tunnel_opt), FN(skb_change_proto), FN(skb_change_type), FN(skb_under_cgroup), FN(get_hash_recalc), FN(get_current_task), FN(probe_write_user), FN(current_task_under_cgroup), FN(skb_change_tail), FN(skb_pull_data), FN(csum_update), FN(set_hash_invalid), FN(get_numa_node_id), FN(skb_change_head), FN(xdp_adjust_head), FN(probe_read_str), FN(get_socket_cookie), FN(get_socket_uid), FN(set_hash), FN(setsockopt), FN(skb_adjust_room), FN(redirect_map), FN(sk_redirect_map), FN(sock_map_update), FN(xdp_adjust_meta), FN(perf_event_read_value), FN(perf_prog_read_value), FN(getsockopt), FN(override_return), FN(sock_ops_cb_flags_set), FN(msg_redirect_map), FN(msg_apply_bytes), FN(msg_cork_bytes), FN(msg_pull_data), FN(bind),
+#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),
 #define __BPF_ENUM_FN(x) BPF_FUNC_ ##x
 enum bpf_func_id {
   __BPF_FUNC_MAPPER(__BPF_ENUM_FN) __BPF_FUNC_MAX_ID,
@@ -274,6 +313,7 @@
 #define BPF_F_USER_STACK (1ULL << 8)
 #define BPF_F_FAST_STACK_CMP (1ULL << 9)
 #define BPF_F_REUSE_STACKID (1ULL << 10)
+#define BPF_F_USER_BUILD_ID (1ULL << 11)
 #define BPF_F_ZERO_CSUM_TX (1ULL << 1)
 #define BPF_F_DONT_FRAGMENT (1ULL << 2)
 #define BPF_F_SEQ_NUMBER (1ULL << 3)
@@ -283,6 +323,14 @@
 enum bpf_adj_room_mode {
   BPF_ADJ_ROOM_NET,
 };
+enum bpf_hdr_start_off {
+  BPF_HDR_START_MAC,
+  BPF_HDR_START_NET,
+};
+enum bpf_lwt_encap_mode {
+  BPF_LWT_ENCAP_SEG6,
+  BPF_LWT_ENCAP_SEG6_INLINE
+};
 struct __sk_buff {
   __u32 len;
   __u32 pkt_type;
@@ -322,6 +370,16 @@
   __u16 tunnel_ext;
   __u32 tunnel_label;
 };
+struct bpf_xfrm_state {
+  __u32 reqid;
+  __u32 spi;
+  __u16 family;
+  __u16 ext;
+  union {
+    __u32 remote_ipv4;
+    __u32 remote_ipv6[4];
+  };
+};
 enum bpf_ret_code {
   BPF_OK = 0,
   BPF_DROP = 2,
@@ -360,6 +418,22 @@
 struct sk_msg_md {
   void * data;
   void * data_end;
+  __u32 family;
+  __u32 remote_ip4;
+  __u32 local_ip4;
+  __u32 remote_ip6[4];
+  __u32 local_ip6[4];
+  __u32 remote_port;
+  __u32 local_port;
+};
+struct sk_reuseport_md {
+  void * data;
+  void * data_end;
+  __u32 len;
+  __u32 eth_protocol;
+  __u32 ip_protocol;
+  __u32 bind_inany;
+  __u32 hash;
 };
 #define BPF_TAG_SIZE 8
 struct bpf_prog_info {
@@ -376,9 +450,13 @@
   __aligned_u64 map_ids;
   char name[BPF_OBJ_NAME_LEN];
   __u32 ifindex;
-  __u32 : 32;
+  __u32 gpl_compatible : 1;
   __u64 netns_dev;
   __u64 netns_ino;
+  __u32 nr_jited_ksyms;
+  __u32 nr_jited_func_lens;
+  __aligned_u64 jited_ksyms;
+  __aligned_u64 jited_func_lens;
 } __attribute__((aligned(8)));
 struct bpf_map_info {
   __u32 type;
@@ -392,6 +470,14 @@
   __u32 : 32;
   __u64 netns_dev;
   __u64 netns_ino;
+  __u32 btf_id;
+  __u32 btf_key_type_id;
+  __u32 btf_value_type_id;
+} __attribute__((aligned(8)));
+struct bpf_btf_info {
+  __aligned_u64 btf;
+  __u32 btf_size;
+  __u32 id;
 } __attribute__((aligned(8)));
 struct bpf_sock_addr {
   __u32 user_family;
@@ -401,6 +487,8 @@
   __u32 family;
   __u32 type;
   __u32 protocol;
+  __u32 msg_src_ip4;
+  __u32 msg_src_ip6[4];
 };
 struct bpf_sock_ops {
   __u32 op;
@@ -459,6 +547,7 @@
   BPF_SOCK_OPS_RTO_CB,
   BPF_SOCK_OPS_RETRANS_CB,
   BPF_SOCK_OPS_STATE_CB,
+  BPF_SOCK_OPS_TCP_LISTEN_CB,
 };
 enum {
   BPF_TCP_ESTABLISHED = 1,
@@ -495,4 +584,50 @@
 struct bpf_raw_tracepoint_args {
   __u64 args[0];
 };
+#define BPF_FIB_LOOKUP_DIRECT BIT(0)
+#define BPF_FIB_LOOKUP_OUTPUT BIT(1)
+enum {
+  BPF_FIB_LKUP_RET_SUCCESS,
+  BPF_FIB_LKUP_RET_BLACKHOLE,
+  BPF_FIB_LKUP_RET_UNREACHABLE,
+  BPF_FIB_LKUP_RET_PROHIBIT,
+  BPF_FIB_LKUP_RET_NOT_FWDED,
+  BPF_FIB_LKUP_RET_FWD_DISABLED,
+  BPF_FIB_LKUP_RET_UNSUPP_LWT,
+  BPF_FIB_LKUP_RET_NO_NEIGH,
+  BPF_FIB_LKUP_RET_FRAG_NEEDED,
+};
+struct bpf_fib_lookup {
+  __u8 family;
+  __u8 l4_protocol;
+  __be16 sport;
+  __be16 dport;
+  __u16 tot_len;
+  __u32 ifindex;
+  union {
+    __u8 tos;
+    __be32 flowinfo;
+    __u32 rt_metric;
+  };
+  union {
+    __be32 ipv4_src;
+    __u32 ipv6_src[4];
+  };
+  union {
+    __be32 ipv4_dst;
+    __u32 ipv6_dst[4];
+  };
+  __be16 h_vlan_proto;
+  __be16 h_vlan_TCI;
+  __u8 smac[6];
+  __u8 dmac[6];
+};
+enum bpf_task_fd_type {
+  BPF_FD_TYPE_RAW_TRACEPOINT,
+  BPF_FD_TYPE_TRACEPOINT,
+  BPF_FD_TYPE_KPROBE,
+  BPF_FD_TYPE_KRETPROBE,
+  BPF_FD_TYPE_UPROBE,
+  BPF_FD_TYPE_URETPROBE,
+};
 #endif
diff --git a/libc/kernel/uapi/linux/ncp_no.h b/libc/kernel/uapi/linux/bpfilter.h
similarity index 63%
rename from libc/kernel/uapi/linux/ncp_no.h
rename to libc/kernel/uapi/linux/bpfilter.h
index fe5caa0..a7d8d66 100644
--- a/libc/kernel/uapi/linux/ncp_no.h
+++ b/libc/kernel/uapi/linux/bpfilter.h
@@ -16,19 +16,19 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _NCP_NO
-#define _NCP_NO
-#define aRONLY (__cpu_to_le32(1))
-#define aHIDDEN (__cpu_to_le32(2))
-#define aSYSTEM (__cpu_to_le32(4))
-#define aEXECUTE (__cpu_to_le32(8))
-#define aDIR (__cpu_to_le32(0x10))
-#define aARCH (__cpu_to_le32(0x20))
-#define aSHARED (__cpu_to_le32(0x80))
-#define aDONTSUBALLOCATE (__cpu_to_le32(1L << 11))
-#define aTRANSACTIONAL (__cpu_to_le32(1L << 12))
-#define aPURGE (__cpu_to_le32(1L << 16))
-#define aRENAMEINHIBIT (__cpu_to_le32(1L << 17))
-#define aDELETEINHIBIT (__cpu_to_le32(1L << 18))
-#define aDONTCOMPRESS (__cpu_to_le32(1L << 27))
+#ifndef _UAPI_LINUX_BPFILTER_H
+#define _UAPI_LINUX_BPFILTER_H
+#include <linux/if.h>
+enum {
+  BPFILTER_IPT_SO_SET_REPLACE = 64,
+  BPFILTER_IPT_SO_SET_ADD_COUNTERS = 65,
+  BPFILTER_IPT_SET_MAX,
+};
+enum {
+  BPFILTER_IPT_SO_GET_INFO = 64,
+  BPFILTER_IPT_SO_GET_ENTRIES = 65,
+  BPFILTER_IPT_SO_GET_REVISION_MATCH = 66,
+  BPFILTER_IPT_SO_GET_REVISION_TARGET = 67,
+  BPFILTER_IPT_GET_MAX,
+};
 #endif
diff --git a/libc/kernel/uapi/linux/btf.h b/libc/kernel/uapi/linux/btf.h
new file mode 100644
index 0000000..33dde5a
--- /dev/null
+++ b/libc/kernel/uapi/linux/btf.h
@@ -0,0 +1,81 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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_BTF_H__
+#define _UAPI__LINUX_BTF_H__
+#include <linux/types.h>
+#define BTF_MAGIC 0xeB9F
+#define BTF_VERSION 1
+struct btf_header {
+  __u16 magic;
+  __u8 version;
+  __u8 flags;
+  __u32 hdr_len;
+  __u32 type_off;
+  __u32 type_len;
+  __u32 str_off;
+  __u32 str_len;
+};
+#define BTF_MAX_TYPE 0x0000ffff
+#define BTF_MAX_NAME_OFFSET 0x0000ffff
+#define BTF_MAX_VLEN 0xffff
+struct btf_type {
+  __u32 name_off;
+  __u32 info;
+  union {
+    __u32 size;
+    __u32 type;
+  };
+};
+#define BTF_INFO_KIND(info) (((info) >> 24) & 0x0f)
+#define BTF_INFO_VLEN(info) ((info) & 0xffff)
+#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_MAX 11
+#define NR_BTF_KINDS 12
+#define BTF_INT_ENCODING(VAL) (((VAL) & 0x0f000000) >> 24)
+#define BTF_INT_OFFSET(VAL) (((VAL & 0x00ff0000)) >> 16)
+#define BTF_INT_BITS(VAL) ((VAL) & 0x000000ff)
+#define BTF_INT_SIGNED (1 << 0)
+#define BTF_INT_CHAR (1 << 1)
+#define BTF_INT_BOOL (1 << 2)
+struct btf_enum {
+  __u32 name_off;
+  __s32 val;
+};
+struct btf_array {
+  __u32 type;
+  __u32 index_type;
+  __u32 nelems;
+};
+struct btf_member {
+  __u32 name_off;
+  __u32 type;
+  __u32 offset;
+};
+#endif
diff --git a/libc/kernel/uapi/linux/btrfs.h b/libc/kernel/uapi/linux/btrfs.h
index a162bb0..2bb79d8 100644
--- a/libc/kernel/uapi/linux/btrfs.h
+++ b/libc/kernel/uapi/linux/btrfs.h
@@ -248,6 +248,13 @@
   __u64 objectid;
   char name[BTRFS_INO_LOOKUP_PATH_MAX];
 };
+#define BTRFS_INO_LOOKUP_USER_PATH_MAX (4080 - BTRFS_VOL_NAME_MAX - 1)
+struct btrfs_ioctl_ino_lookup_user_args {
+  __u64 dirid;
+  __u64 treeid;
+  char name[BTRFS_VOL_NAME_MAX + 1];
+  char path[BTRFS_INO_LOOKUP_USER_PATH_MAX];
+};
 struct btrfs_ioctl_search_key {
   __u64 tree_id;
   __u64 min_objectid;
@@ -406,6 +413,36 @@
   __u64 flags;
   __u64 reserved[4];
 };
+struct btrfs_ioctl_get_subvol_info_args {
+  __u64 treeid;
+  char name[BTRFS_VOL_NAME_MAX + 1];
+  __u64 parent_id;
+  __u64 dirid;
+  __u64 generation;
+  __u64 flags;
+  __u8 uuid[BTRFS_UUID_SIZE];
+  __u8 parent_uuid[BTRFS_UUID_SIZE];
+  __u8 received_uuid[BTRFS_UUID_SIZE];
+  __u64 ctransid;
+  __u64 otransid;
+  __u64 stransid;
+  __u64 rtransid;
+  struct btrfs_ioctl_timespec ctime;
+  struct btrfs_ioctl_timespec otime;
+  struct btrfs_ioctl_timespec stime;
+  struct btrfs_ioctl_timespec rtime;
+  __u64 reserved[8];
+};
+#define BTRFS_MAX_ROOTREF_BUFFER_NUM 255
+struct btrfs_ioctl_get_subvol_rootref_args {
+  __u64 min_treeid;
+  struct {
+    __u64 treeid;
+    __u64 dirid;
+  } rootref[BTRFS_MAX_ROOTREF_BUFFER_NUM];
+  __u8 num_items;
+  __u8 align[7];
+};
 enum btrfs_err_code {
   BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1,
   BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET,
@@ -472,4 +509,7 @@
 #define BTRFS_IOC_GET_SUPPORTED_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, struct btrfs_ioctl_feature_flags[3])
 #define BTRFS_IOC_RM_DEV_V2 _IOW(BTRFS_IOCTL_MAGIC, 58, struct btrfs_ioctl_vol_args_v2)
 #define BTRFS_IOC_LOGICAL_INO_V2 _IOWR(BTRFS_IOCTL_MAGIC, 59, struct btrfs_ioctl_logical_ino_args)
+#define BTRFS_IOC_GET_SUBVOL_INFO _IOR(BTRFS_IOCTL_MAGIC, 60, struct btrfs_ioctl_get_subvol_info_args)
+#define BTRFS_IOC_GET_SUBVOL_ROOTREF _IOWR(BTRFS_IOCTL_MAGIC, 61, struct btrfs_ioctl_get_subvol_rootref_args)
+#define BTRFS_IOC_INO_LOOKUP_USER _IOWR(BTRFS_IOCTL_MAGIC, 62, struct btrfs_ioctl_ino_lookup_user_args)
 #endif
diff --git a/libc/kernel/uapi/linux/cec.h b/libc/kernel/uapi/linux/cec.h
index 98892f7..fd0f824 100644
--- a/libc/kernel/uapi/linux/cec.h
+++ b/libc/kernel/uapi/linux/cec.h
@@ -132,6 +132,8 @@
 #define CEC_EVENT_PIN_CEC_HIGH 4
 #define CEC_EVENT_PIN_HPD_LOW 5
 #define CEC_EVENT_PIN_HPD_HIGH 6
+#define CEC_EVENT_PIN_5V_LOW 7
+#define CEC_EVENT_PIN_5V_HIGH 8
 #define CEC_EVENT_FL_INITIAL_STATE (1 << 0)
 #define CEC_EVENT_FL_DROPPED_EVENTS (1 << 1)
 struct cec_event_state_change {
diff --git a/libc/kernel/uapi/linux/cn_proc.h b/libc/kernel/uapi/linux/cn_proc.h
index 8aa48a8..411b725 100644
--- a/libc/kernel/uapi/linux/cn_proc.h
+++ b/libc/kernel/uapi/linux/cn_proc.h
@@ -82,11 +82,15 @@
     struct coredump_proc_event {
       __kernel_pid_t process_pid;
       __kernel_pid_t process_tgid;
+      __kernel_pid_t parent_pid;
+      __kernel_pid_t parent_tgid;
     } coredump;
     struct exit_proc_event {
       __kernel_pid_t process_pid;
       __kernel_pid_t process_tgid;
       __u32 exit_code, exit_signal;
+      __kernel_pid_t parent_pid;
+      __kernel_pid_t parent_tgid;
     } exit;
   } event_data;
 };
diff --git a/libc/kernel/uapi/linux/dcbnl.h b/libc/kernel/uapi/linux/dcbnl.h
index 2fe4cce..d1f2eba 100644
--- a/libc/kernel/uapi/linux/dcbnl.h
+++ b/libc/kernel/uapi/linux/dcbnl.h
@@ -71,6 +71,13 @@
   __u64 requests[IEEE_8021QAZ_MAX_TCS];
   __u64 indications[IEEE_8021QAZ_MAX_TCS];
 };
+#define IEEE_8021Q_MAX_PRIORITIES 8
+#define DCBX_MAX_BUFFERS 8
+struct dcbnl_buffer {
+  __u8 prio2buffer[IEEE_8021Q_MAX_PRIORITIES];
+  __u32 buffer_size[DCBX_MAX_BUFFERS];
+  __u32 total_size;
+};
 #define CEE_DCBX_MAX_PGS 8
 #define CEE_DCBX_MAX_PRIO 8
 struct cee_pg {
@@ -170,6 +177,7 @@
   DCB_ATTR_IEEE_MAXRATE,
   DCB_ATTR_IEEE_QCN,
   DCB_ATTR_IEEE_QCN_STATS,
+  DCB_ATTR_DCB_BUFFER,
   __DCB_ATTR_IEEE_MAX
 };
 #define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1)
diff --git a/libc/kernel/uapi/linux/devlink.h b/libc/kernel/uapi/linux/devlink.h
index 07c5752..ead40ad 100644
--- a/libc/kernel/uapi/linux/devlink.h
+++ b/libc/kernel/uapi/linux/devlink.h
@@ -62,6 +62,15 @@
   DEVLINK_CMD_RESOURCE_SET,
   DEVLINK_CMD_RESOURCE_DUMP,
   DEVLINK_CMD_RELOAD,
+  DEVLINK_CMD_PARAM_GET,
+  DEVLINK_CMD_PARAM_SET,
+  DEVLINK_CMD_PARAM_NEW,
+  DEVLINK_CMD_PARAM_DEL,
+  DEVLINK_CMD_REGION_GET,
+  DEVLINK_CMD_REGION_SET,
+  DEVLINK_CMD_REGION_NEW,
+  DEVLINK_CMD_REGION_DEL,
+  DEVLINK_CMD_REGION_READ,
   __DEVLINK_CMD_MAX,
   DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1
 };
@@ -94,6 +103,18 @@
   DEVLINK_ESWITCH_ENCAP_MODE_NONE,
   DEVLINK_ESWITCH_ENCAP_MODE_BASIC,
 };
+enum devlink_port_flavour {
+  DEVLINK_PORT_FLAVOUR_PHYSICAL,
+  DEVLINK_PORT_FLAVOUR_CPU,
+  DEVLINK_PORT_FLAVOUR_DSA,
+};
+enum devlink_param_cmode {
+  DEVLINK_PARAM_CMODE_RUNTIME,
+  DEVLINK_PARAM_CMODE_DRIVERINIT,
+  DEVLINK_PARAM_CMODE_PERMANENT,
+  __DEVLINK_PARAM_CMODE_MAX,
+  DEVLINK_PARAM_CMODE_MAX = __DEVLINK_PARAM_CMODE_MAX - 1
+};
 enum devlink_attr {
   DEVLINK_ATTR_UNSPEC,
   DEVLINK_ATTR_BUS_NAME,
@@ -172,6 +193,27 @@
   DEVLINK_ATTR_RESOURCE_OCC,
   DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID,
   DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS,
+  DEVLINK_ATTR_PORT_FLAVOUR,
+  DEVLINK_ATTR_PORT_NUMBER,
+  DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER,
+  DEVLINK_ATTR_PARAM,
+  DEVLINK_ATTR_PARAM_NAME,
+  DEVLINK_ATTR_PARAM_GENERIC,
+  DEVLINK_ATTR_PARAM_TYPE,
+  DEVLINK_ATTR_PARAM_VALUES_LIST,
+  DEVLINK_ATTR_PARAM_VALUE,
+  DEVLINK_ATTR_PARAM_VALUE_DATA,
+  DEVLINK_ATTR_PARAM_VALUE_CMODE,
+  DEVLINK_ATTR_REGION_NAME,
+  DEVLINK_ATTR_REGION_SIZE,
+  DEVLINK_ATTR_REGION_SNAPSHOTS,
+  DEVLINK_ATTR_REGION_SNAPSHOT,
+  DEVLINK_ATTR_REGION_SNAPSHOT_ID,
+  DEVLINK_ATTR_REGION_CHUNKS,
+  DEVLINK_ATTR_REGION_CHUNK,
+  DEVLINK_ATTR_REGION_CHUNK_DATA,
+  DEVLINK_ATTR_REGION_CHUNK_ADDR,
+  DEVLINK_ATTR_REGION_CHUNK_LEN,
   __DEVLINK_ATTR_MAX,
   DEVLINK_ATTR_MAX = __DEVLINK_ATTR_MAX - 1
 };
diff --git a/libc/kernel/uapi/linux/dvb/audio.h b/libc/kernel/uapi/linux/dvb/audio.h
index e606f79..0a527c1 100644
--- a/libc/kernel/uapi/linux/dvb/audio.h
+++ b/libc/kernel/uapi/linux/dvb/audio.h
@@ -48,12 +48,6 @@
   int bypass_mode;
   audio_mixer_t mixer_state;
 } audio_status_t;
-typedef struct audio_karaoke {
-  int vocal1;
-  int vocal2;
-  int melody;
-} audio_karaoke_t;
-typedef __u16 audio_attributes_t;
 #define AUDIO_CAP_DTS 1
 #define AUDIO_CAP_LPCM 2
 #define AUDIO_CAP_MP1 4
@@ -78,9 +72,5 @@
 #define AUDIO_SET_ID _IO('o', 13)
 #define AUDIO_SET_MIXER _IOW('o', 14, audio_mixer_t)
 #define AUDIO_SET_STREAMTYPE _IO('o', 15)
-#define AUDIO_SET_EXT_ID _IO('o', 16)
-#define AUDIO_SET_ATTRIBUTES _IOW('o', 17, audio_attributes_t)
-#define AUDIO_SET_KARAOKE _IOW('o', 18, audio_karaoke_t)
-#define AUDIO_GET_PTS _IOR('o', 19, __u64)
 #define AUDIO_BILINGUAL_CHANNEL_SELECT _IO('o', 20)
 #endif
diff --git a/libc/kernel/uapi/linux/dvb/video.h b/libc/kernel/uapi/linux/dvb/video.h
index 7ada1a0..6577e1f 100644
--- a/libc/kernel/uapi/linux/dvb/video.h
+++ b/libc/kernel/uapi/linux/dvb/video.h
@@ -26,16 +26,6 @@
   VIDEO_FORMAT_221_1
 } video_format_t;
 typedef enum {
-  VIDEO_SYSTEM_PAL,
-  VIDEO_SYSTEM_NTSC,
-  VIDEO_SYSTEM_PALN,
-  VIDEO_SYSTEM_PALNc,
-  VIDEO_SYSTEM_PALM,
-  VIDEO_SYSTEM_NTSC60,
-  VIDEO_SYSTEM_PAL60,
-  VIDEO_SYSTEM_PALM60
-} video_system_t;
-typedef enum {
   VIDEO_PAN_SCAN,
   VIDEO_LETTER_BOX,
   VIDEO_CENTER_CUT_OUT
@@ -107,27 +97,6 @@
   char __user * iFrame;
   __s32 size;
 };
-typedef struct video_highlight {
-  int active;
-  __u8 contrast1;
-  __u8 contrast2;
-  __u8 color1;
-  __u8 color2;
-  __u32 ypos;
-  __u32 xpos;
-} video_highlight_t;
-typedef struct video_spu {
-  int active;
-  int stream_id;
-} video_spu_t;
-typedef struct video_spu_palette {
-  int length;
-  __u8 __user * palette;
-} video_spu_palette_t;
-typedef struct video_navi_pack {
-  int length;
-  __u8 data[1024];
-} video_navi_pack_t;
 typedef __u16 video_attributes_t;
 #define VIDEO_CAP_MPEG1 1
 #define VIDEO_CAP_MPEG2 2
@@ -150,17 +119,9 @@
 #define VIDEO_SLOWMOTION _IO('o', 32)
 #define VIDEO_GET_CAPABILITIES _IOR('o', 33, unsigned int)
 #define VIDEO_CLEAR_BUFFER _IO('o', 34)
-#define VIDEO_SET_ID _IO('o', 35)
 #define VIDEO_SET_STREAMTYPE _IO('o', 36)
 #define VIDEO_SET_FORMAT _IO('o', 37)
-#define VIDEO_SET_SYSTEM _IO('o', 38)
-#define VIDEO_SET_HIGHLIGHT _IOW('o', 39, video_highlight_t)
-#define VIDEO_SET_SPU _IOW('o', 50, video_spu_t)
-#define VIDEO_SET_SPU_PALETTE _IOW('o', 51, video_spu_palette_t)
-#define VIDEO_GET_NAVI _IOR('o', 52, video_navi_pack_t)
-#define VIDEO_SET_ATTRIBUTES _IO('o', 53)
 #define VIDEO_GET_SIZE _IOR('o', 55, video_size_t)
-#define VIDEO_GET_FRAME_RATE _IOR('o', 56, unsigned int)
 #define VIDEO_GET_PTS _IOR('o', 57, __u64)
 #define VIDEO_GET_FRAME_COUNT _IOR('o', 58, __u64)
 #define VIDEO_COMMAND _IOWR('o', 59, struct video_command)
diff --git a/libc/kernel/uapi/linux/elf.h b/libc/kernel/uapi/linux/elf.h
index 195ef09..1f69e1b 100644
--- a/libc/kernel/uapi/linux/elf.h
+++ b/libc/kernel/uapi/linux/elf.h
@@ -356,6 +356,9 @@
 #define NT_ARM_SYSTEM_CALL 0x404
 #define NT_ARM_SVE 0x405
 #define NT_ARC_V2 0x600
+#define NT_VMCOREDD 0x700
+#define NT_MIPS_DSP 0x800
+#define NT_MIPS_FP_MODE 0x801
 typedef struct elf32_note {
   Elf32_Word n_namesz;
   Elf32_Word n_descsz;
diff --git a/libc/kernel/uapi/linux/errqueue.h b/libc/kernel/uapi/linux/errqueue.h
index 196189b..f4a244f 100644
--- a/libc/kernel/uapi/linux/errqueue.h
+++ b/libc/kernel/uapi/linux/errqueue.h
@@ -34,9 +34,12 @@
 #define SO_EE_ORIGIN_ICMP6 3
 #define SO_EE_ORIGIN_TXSTATUS 4
 #define SO_EE_ORIGIN_ZEROCOPY 5
+#define SO_EE_ORIGIN_TXTIME 6
 #define SO_EE_ORIGIN_TIMESTAMPING SO_EE_ORIGIN_TXSTATUS
 #define SO_EE_OFFENDER(ee) ((struct sockaddr *) ((ee) + 1))
 #define SO_EE_CODE_ZEROCOPY_COPIED 1
+#define SO_EE_CODE_TXTIME_INVALID_PARAM 1
+#define SO_EE_CODE_TXTIME_MISSED 2
 struct scm_timestamping {
   struct timespec ts[3];
 };
diff --git a/libc/kernel/uapi/linux/ethtool.h b/libc/kernel/uapi/linux/ethtool.h
index 92607f9..25e1a9e 100644
--- a/libc/kernel/uapi/linux/ethtool.h
+++ b/libc/kernel/uapi/linux/ethtool.h
@@ -320,6 +320,17 @@
 #define ETHTOOL_RX_FLOW_SPEC_RING 0x00000000FFFFFFFFLL
 #define ETHTOOL_RX_FLOW_SPEC_RING_VF 0x000000FF00000000LL
 #define ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF 32
+struct ethtool_rxnfc {
+  __u32 cmd;
+  __u32 flow_type;
+  __u64 data;
+  struct ethtool_rx_flow_spec fs;
+  union {
+    __u32 rule_cnt;
+    __u32 rss_context;
+  };
+  __u32 rule_locs[0];
+};
 struct ethtool_rxfh_indir {
   __u32 cmd;
   __u32 size;
@@ -683,6 +694,7 @@
 #define WAKE_ARP (1 << 4)
 #define WAKE_MAGIC (1 << 5)
 #define WAKE_MAGICSECURE (1 << 6)
+#define WAKE_FILTER (1 << 7)
 #define TCP_V4_FLOW 0x01
 #define UDP_V4_FLOW 0x02
 #define SCTP_V4_FLOW 0x03
@@ -713,6 +725,7 @@
 #define RXH_L4_B_2_3 (1 << 7)
 #define RXH_DISCARD (1 << 31)
 #define RX_CLS_FLOW_DISC 0xffffffffffffffffULL
+#define RX_CLS_FLOW_WAKE 0xfffffffffffffffeULL
 #define RX_CLS_LOC_SPECIAL 0x80000000
 #define RX_CLS_LOC_ANY 0xffffffff
 #define RX_CLS_LOC_FIRST 0xfffffffe
diff --git a/libc/kernel/uapi/linux/eventpoll.h b/libc/kernel/uapi/linux/eventpoll.h
index 2e5ba8e..d2601e5 100644
--- a/libc/kernel/uapi/linux/eventpoll.h
+++ b/libc/kernel/uapi/linux/eventpoll.h
@@ -37,10 +37,10 @@
 #define EPOLLWRBAND (__force __poll_t) 0x00000200
 #define EPOLLMSG (__force __poll_t) 0x00000400
 #define EPOLLRDHUP (__force __poll_t) 0x00002000
-#define EPOLLEXCLUSIVE (__force __poll_t) (1U << 28)
-#define EPOLLWAKEUP (__force __poll_t) (1U << 29)
-#define EPOLLONESHOT (__force __poll_t) (1U << 30)
-#define EPOLLET (__force __poll_t) (1U << 31)
+#define EPOLLEXCLUSIVE ((__force __poll_t) (1U << 28))
+#define EPOLLWAKEUP ((__force __poll_t) (1U << 29))
+#define EPOLLONESHOT ((__force __poll_t) (1U << 30))
+#define EPOLLET ((__force __poll_t) (1U << 31))
 #ifdef __x86_64__
 #define EPOLL_PACKED __attribute__((packed))
 #else
diff --git a/libc/kernel/uapi/linux/fpga-dfl.h b/libc/kernel/uapi/linux/fpga-dfl.h
new file mode 100644
index 0000000..bf9a7c7
--- /dev/null
+++ b/libc/kernel/uapi/linux/fpga-dfl.h
@@ -0,0 +1,74 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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_FPGA_DFL_H
+#define _UAPI_LINUX_FPGA_DFL_H
+#include <linux/types.h>
+#include <linux/ioctl.h>
+#define DFL_FPGA_API_VERSION 0
+#define DFL_FPGA_MAGIC 0xB6
+#define DFL_FPGA_BASE 0
+#define DFL_PORT_BASE 0x40
+#define DFL_FME_BASE 0x80
+#define DFL_FPGA_GET_API_VERSION _IO(DFL_FPGA_MAGIC, DFL_FPGA_BASE + 0)
+#define DFL_FPGA_CHECK_EXTENSION _IO(DFL_FPGA_MAGIC, DFL_FPGA_BASE + 1)
+#define DFL_FPGA_PORT_RESET _IO(DFL_FPGA_MAGIC, DFL_PORT_BASE + 0)
+struct dfl_fpga_port_info {
+  __u32 argsz;
+  __u32 flags;
+  __u32 num_regions;
+  __u32 num_umsgs;
+};
+#define DFL_FPGA_PORT_GET_INFO _IO(DFL_FPGA_MAGIC, DFL_PORT_BASE + 1)
+struct dfl_fpga_port_region_info {
+  __u32 argsz;
+  __u32 flags;
+#define DFL_PORT_REGION_READ (1 << 0)
+#define DFL_PORT_REGION_WRITE (1 << 1)
+#define DFL_PORT_REGION_MMAP (1 << 2)
+  __u32 index;
+#define DFL_PORT_REGION_INDEX_AFU 0
+#define DFL_PORT_REGION_INDEX_STP 1
+  __u32 padding;
+  __u64 size;
+  __u64 offset;
+};
+#define DFL_FPGA_PORT_GET_REGION_INFO _IO(DFL_FPGA_MAGIC, DFL_PORT_BASE + 2)
+struct dfl_fpga_port_dma_map {
+  __u32 argsz;
+  __u32 flags;
+  __u64 user_addr;
+  __u64 length;
+  __u64 iova;
+};
+#define DFL_FPGA_PORT_DMA_MAP _IO(DFL_FPGA_MAGIC, DFL_PORT_BASE + 3)
+struct dfl_fpga_port_dma_unmap {
+  __u32 argsz;
+  __u32 flags;
+  __u64 iova;
+};
+#define DFL_FPGA_PORT_DMA_UNMAP _IO(DFL_FPGA_MAGIC, DFL_PORT_BASE + 4)
+struct dfl_fpga_fme_port_pr {
+  __u32 argsz;
+  __u32 flags;
+  __u32 port_id;
+  __u32 buffer_size;
+  __u64 buffer_address;
+};
+#define DFL_FPGA_FME_PORT_PR _IO(DFL_FPGA_MAGIC, DFL_FME_BASE + 0)
+#endif
diff --git a/libc/kernel/uapi/linux/fs.h b/libc/kernel/uapi/linux/fs.h
index 77c45c8..5c237d8 100644
--- a/libc/kernel/uapi/linux/fs.h
+++ b/libc/kernel/uapi/linux/fs.h
@@ -170,6 +170,7 @@
 #define FICLONE _IOW(0x94, 9, int)
 #define FICLONERANGE _IOW(0x94, 13, struct file_clone_range)
 #define FIDEDUPERANGE _IOWR(0x94, 54, struct file_dedupe_range)
+#define FSLABEL_MAX 256
 #define FS_IOC_GETFLAGS _IOR('f', 1, long)
 #define FS_IOC_SETFLAGS _IOW('f', 2, long)
 #define FS_IOC_GETVERSION _IOR('v', 1, long)
@@ -181,6 +182,8 @@
 #define FS_IOC32_SETVERSION _IOW('v', 2, int)
 #define FS_IOC_FSGETXATTR _IOR('X', 31, struct fsxattr)
 #define FS_IOC_FSSETXATTR _IOW('X', 32, struct fsxattr)
+#define FS_IOC_GETFSLABEL _IOR(0x94, 49, char[FSLABEL_MAX])
+#define FS_IOC_SETFSLABEL _IOW(0x94, 50, char[FSLABEL_MAX])
 #define FS_KEY_DESCRIPTOR_SIZE 8
 #define FS_POLICY_FLAGS_PAD_4 0x00
 #define FS_POLICY_FLAGS_PAD_8 0x01
@@ -195,6 +198,8 @@
 #define FS_ENCRYPTION_MODE_AES_256_CTS 4
 #define FS_ENCRYPTION_MODE_AES_128_CBC 5
 #define FS_ENCRYPTION_MODE_AES_128_CTS 6
+#define FS_ENCRYPTION_MODE_SPECK128_256_XTS 7
+#define FS_ENCRYPTION_MODE_SPECK128_256_CTS 8
 struct fscrypt_policy {
   __u8 version;
   __u8 contents_encryption_mode;
diff --git a/libc/kernel/uapi/linux/fsi.h b/libc/kernel/uapi/linux/fsi.h
new file mode 100644
index 0000000..fc88464
--- /dev/null
+++ b/libc/kernel/uapi/linux/fsi.h
@@ -0,0 +1,51 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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_FSI_H
+#define _UAPI_LINUX_FSI_H
+#include <linux/types.h>
+#include <linux/ioctl.h>
+struct scom_access {
+  __u64 addr;
+  __u64 data;
+  __u64 mask;
+  __u32 intf_errors;
+#define SCOM_INTF_ERR_PARITY 0x00000001
+#define SCOM_INTF_ERR_PROTECTION 0x00000002
+#define SCOM_INTF_ERR_ABORT 0x00000004
+#define SCOM_INTF_ERR_UNKNOWN 0x80000000
+  __u8 pib_status;
+#define SCOM_PIB_SUCCESS 0
+#define SCOM_PIB_BLOCKED 1
+#define SCOM_PIB_OFFLINE 2
+#define SCOM_PIB_PARTIAL 3
+#define SCOM_PIB_BAD_ADDR 4
+#define SCOM_PIB_CLK_ERR 5
+#define SCOM_PIB_PARITY_ERR 6
+#define SCOM_PIB_TIMEOUT 7
+  __u8 pad;
+};
+#define SCOM_CHECK_SUPPORTED 0x00000001
+#define SCOM_CHECK_PROTECTED 0x00000002
+#define SCOM_RESET_INTF 0x00000001
+#define SCOM_RESET_PIB 0x00000002
+#define FSI_SCOM_CHECK _IOR('s', 0x00, __u32)
+#define FSI_SCOM_READ _IOWR('s', 0x01, struct scom_access)
+#define FSI_SCOM_WRITE _IOWR('s', 0x02, struct scom_access)
+#define FSI_SCOM_RESET _IOW('s', 0x03, __u32)
+#endif
diff --git a/libc/kernel/uapi/linux/fuse.h b/libc/kernel/uapi/linux/fuse.h
index 42f9ed6..a727580 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 26
+#define FUSE_KERNEL_MINOR_VERSION 27
 #define FUSE_ROOT_ID 1
 struct fuse_attr {
   uint64_t ino;
@@ -93,6 +93,7 @@
 #define FUSE_PARALLEL_DIROPS (1 << 18)
 #define FUSE_HANDLE_KILLPRIV (1 << 19)
 #define FUSE_POSIX_ACL (1 << 20)
+#define FUSE_ABORT_ERROR (1 << 21)
 #define CUSE_UNRESTRICTED_IOCTL (1 << 0)
 #define FUSE_RELEASE_FLUSH (1 << 0)
 #define FUSE_RELEASE_FLOCK_UNLOCK (1 << 1)
diff --git a/libc/kernel/uapi/linux/if_addr.h b/libc/kernel/uapi/linux/if_addr.h
index cefc11b..0a4b0ae 100644
--- a/libc/kernel/uapi/linux/if_addr.h
+++ b/libc/kernel/uapi/linux/if_addr.h
@@ -37,6 +37,7 @@
   IFA_CACHEINFO,
   IFA_MULTICAST,
   IFA_FLAGS,
+  IFA_RT_PRIORITY,
   __IFA_MAX,
 };
 #define IFA_MAX (__IFA_MAX - 1)
diff --git a/libc/kernel/uapi/linux/if_link.h b/libc/kernel/uapi/linux/if_link.h
index 8a9993b..4bbf21d 100644
--- a/libc/kernel/uapi/linux/if_link.h
+++ b/libc/kernel/uapi/linux/if_link.h
@@ -141,6 +141,8 @@
   IFLA_CARRIER_UP_COUNT,
   IFLA_CARRIER_DOWN_COUNT,
   IFLA_NEW_IFINDEX,
+  IFLA_MIN_MTU,
+  IFLA_MAX_MTU,
   __IFLA_MAX
 };
 #define IFLA_MAX (__IFLA_MAX - 1)
@@ -262,6 +264,8 @@
   IFLA_BRPORT_BCAST_FLOOD,
   IFLA_BRPORT_GROUP_FWD_MASK,
   IFLA_BRPORT_NEIGH_SUPPRESS,
+  IFLA_BRPORT_ISOLATED,
+  IFLA_BRPORT_BACKUP_PORT,
   __IFLA_BRPORT_MAX
 };
 #define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
@@ -361,6 +365,13 @@
   __IFLA_MACSEC_MAX,
 };
 #define IFLA_MACSEC_MAX (__IFLA_MACSEC_MAX - 1)
+enum {
+  IFLA_XFRM_UNSPEC,
+  IFLA_XFRM_LINK,
+  IFLA_XFRM_IF_ID,
+  __IFLA_XFRM_MAX
+};
+#define IFLA_XFRM_MAX (__IFLA_XFRM_MAX - 1)
 enum macsec_validation_type {
   MACSEC_VALIDATE_DISABLED = 0,
   MACSEC_VALIDATE_CHECK = 1,
@@ -412,6 +423,7 @@
   IFLA_VXLAN_COLLECT_METADATA,
   IFLA_VXLAN_LABEL,
   IFLA_VXLAN_GPE,
+  IFLA_VXLAN_TTL_INHERIT,
   __IFLA_VXLAN_MAX
 };
 #define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)
@@ -714,6 +726,7 @@
   XDP_ATTACHED_DRV,
   XDP_ATTACHED_SKB,
   XDP_ATTACHED_HW,
+  XDP_ATTACHED_MULTI,
 };
 enum {
   IFLA_XDP_UNSPEC,
@@ -721,6 +734,9 @@
   IFLA_XDP_ATTACHED,
   IFLA_XDP_FLAGS,
   IFLA_XDP_PROG_ID,
+  IFLA_XDP_DRV_PROG_ID,
+  IFLA_XDP_SKB_PROG_ID,
+  IFLA_XDP_HW_PROG_ID,
   __IFLA_XDP_MAX,
 };
 #define IFLA_XDP_MAX (__IFLA_XDP_MAX - 1)
diff --git a/libc/kernel/uapi/linux/if_xdp.h b/libc/kernel/uapi/linux/if_xdp.h
new file mode 100644
index 0000000..a0935bd
--- /dev/null
+++ b/libc/kernel/uapi/linux/if_xdp.h
@@ -0,0 +1,70 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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_IF_XDP_H
+#define _LINUX_IF_XDP_H
+#include <linux/types.h>
+#define XDP_SHARED_UMEM (1 << 0)
+#define XDP_COPY (1 << 1)
+#define XDP_ZEROCOPY (1 << 2)
+struct sockaddr_xdp {
+  __u16 sxdp_family;
+  __u16 sxdp_flags;
+  __u32 sxdp_ifindex;
+  __u32 sxdp_queue_id;
+  __u32 sxdp_shared_umem_fd;
+};
+struct xdp_ring_offset {
+  __u64 producer;
+  __u64 consumer;
+  __u64 desc;
+};
+struct xdp_mmap_offsets {
+  struct xdp_ring_offset rx;
+  struct xdp_ring_offset tx;
+  struct xdp_ring_offset fr;
+  struct xdp_ring_offset cr;
+};
+#define XDP_MMAP_OFFSETS 1
+#define XDP_RX_RING 2
+#define XDP_TX_RING 3
+#define XDP_UMEM_REG 4
+#define XDP_UMEM_FILL_RING 5
+#define XDP_UMEM_COMPLETION_RING 6
+#define XDP_STATISTICS 7
+struct xdp_umem_reg {
+  __u64 addr;
+  __u64 len;
+  __u32 chunk_size;
+  __u32 headroom;
+};
+struct xdp_statistics {
+  __u64 rx_dropped;
+  __u64 rx_invalid_descs;
+  __u64 tx_invalid_descs;
+};
+#define XDP_PGOFF_RX_RING 0
+#define XDP_PGOFF_TX_RING 0x80000000
+#define XDP_UMEM_PGOFF_FILL_RING 0x100000000ULL
+#define XDP_UMEM_PGOFF_COMPLETION_RING 0x180000000ULL
+struct xdp_desc {
+  __u64 addr;
+  __u32 len;
+  __u32 options;
+};
+#endif
diff --git a/libc/kernel/uapi/linux/iio/types.h b/libc/kernel/uapi/linux/iio/types.h
index 3d4769d..834a2eb 100644
--- a/libc/kernel/uapi/linux/iio/types.h
+++ b/libc/kernel/uapi/linux/iio/types.h
@@ -51,6 +51,8 @@
   IIO_COUNT,
   IIO_INDEX,
   IIO_GRAVITY,
+  IIO_POSITIONRELATIVE,
+  IIO_PHASE,
 };
 enum iio_modifier {
   IIO_NO_MOD,
@@ -90,6 +92,7 @@
   IIO_MOD_CO2,
   IIO_MOD_VOC,
   IIO_MOD_LIGHT_UV,
+  IIO_MOD_LIGHT_DUV,
 };
 enum iio_event_type {
   IIO_EV_TYPE_THRESH,
diff --git a/libc/kernel/uapi/linux/ila.h b/libc/kernel/uapi/linux/ila.h
index a5af23a..75de8eb 100644
--- a/libc/kernel/uapi/linux/ila.h
+++ b/libc/kernel/uapi/linux/ila.h
@@ -39,6 +39,7 @@
   ILA_CMD_ADD,
   ILA_CMD_DEL,
   ILA_CMD_GET,
+  ILA_CMD_FLUSH,
   __ILA_CMD_MAX,
 };
 #define ILA_CMD_MAX (__ILA_CMD_MAX - 1)
diff --git a/libc/kernel/uapi/linux/inotify.h b/libc/kernel/uapi/linux/inotify.h
index 653dc07..eb9ac3c 100644
--- a/libc/kernel/uapi/linux/inotify.h
+++ b/libc/kernel/uapi/linux/inotify.h
@@ -47,6 +47,7 @@
 #define IN_ONLYDIR 0x01000000
 #define IN_DONT_FOLLOW 0x02000000
 #define IN_EXCL_UNLINK 0x04000000
+#define IN_MASK_CREATE 0x10000000
 #define IN_MASK_ADD 0x20000000
 #define IN_ISDIR 0x40000000
 #define IN_ONESHOT 0x80000000
diff --git a/libc/kernel/uapi/linux/input.h b/libc/kernel/uapi/linux/input.h
index 298e2a3..0a4b563 100644
--- a/libc/kernel/uapi/linux/input.h
+++ b/libc/kernel/uapi/linux/input.h
@@ -120,10 +120,11 @@
 #define BUS_RMI 0x1D
 #define BUS_CEC 0x1E
 #define BUS_INTEL_ISHTP 0x1F
-#define MT_TOOL_FINGER 0
-#define MT_TOOL_PEN 1
-#define MT_TOOL_PALM 2
-#define MT_TOOL_MAX 2
+#define MT_TOOL_FINGER 0x00
+#define MT_TOOL_PEN 0x01
+#define MT_TOOL_PALM 0x02
+#define MT_TOOL_DIAL 0x0a
+#define MT_TOOL_MAX 0x0f
 #define FF_STATUS_STOPPED 0x00
 #define FF_STATUS_PLAYING 0x01
 #define FF_STATUS_MAX 0x01
diff --git a/libc/kernel/uapi/linux/ip.h b/libc/kernel/uapi/linux/ip.h
index 8632d45..564fd8d 100644
--- a/libc/kernel/uapi/linux/ip.h
+++ b/libc/kernel/uapi/linux/ip.h
@@ -145,6 +145,7 @@
   IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
   IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
   IPV4_DEVCONF_DROP_GRATUITOUS_ARP,
+  IPV4_DEVCONF_BC_FORWARDING,
   __IPV4_DEVCONF_MAX
 };
 #define IPV4_DEVCONF_MAX (__IPV4_DEVCONF_MAX - 1)
diff --git a/libc/kernel/uapi/linux/kernel-page-flags.h b/libc/kernel/uapi/linux/kernel-page-flags.h
index a1212cc..afa0393 100644
--- a/libc/kernel/uapi/linux/kernel-page-flags.h
+++ b/libc/kernel/uapi/linux/kernel-page-flags.h
@@ -44,4 +44,5 @@
 #define KPF_BALLOON 23
 #define KPF_ZERO_PAGE 24
 #define KPF_IDLE 25
+#define KPF_PGTABLE 26
 #endif
diff --git a/libc/kernel/uapi/linux/keyboard.h b/libc/kernel/uapi/linux/keyboard.h
index 3694fb6..570cca9 100644
--- a/libc/kernel/uapi/linux/keyboard.h
+++ b/libc/kernel/uapi/linux/keyboard.h
@@ -357,7 +357,28 @@
 #define K_DTILDE K(KT_DEAD, 3)
 #define K_DDIERE K(KT_DEAD, 4)
 #define K_DCEDIL K(KT_DEAD, 5)
-#define NR_DEAD 6
+#define K_DMACRON K(KT_DEAD, 6)
+#define K_DBREVE K(KT_DEAD, 7)
+#define K_DABDOT K(KT_DEAD, 8)
+#define K_DABRING K(KT_DEAD, 9)
+#define K_DDBACUTE K(KT_DEAD, 10)
+#define K_DCARON K(KT_DEAD, 11)
+#define K_DOGONEK K(KT_DEAD, 12)
+#define K_DIOTA K(KT_DEAD, 13)
+#define K_DVOICED K(KT_DEAD, 14)
+#define K_DSEMVOICED K(KT_DEAD, 15)
+#define K_DBEDOT K(KT_DEAD, 16)
+#define K_DHOOK K(KT_DEAD, 17)
+#define K_DHORN K(KT_DEAD, 18)
+#define K_DSTROKE K(KT_DEAD, 19)
+#define K_DABCOMMA K(KT_DEAD, 20)
+#define K_DABREVCOMMA K(KT_DEAD, 21)
+#define K_DDBGRAVE K(KT_DEAD, 22)
+#define K_DINVBREVE K(KT_DEAD, 23)
+#define K_DBECOMMA K(KT_DEAD, 24)
+#define K_DCURRENCY K(KT_DEAD, 25)
+#define K_DGREEK K(KT_DEAD, 26)
+#define NR_DEAD 27
 #define K_DOWN K(KT_CUR, 0)
 #define K_LEFT K(KT_CUR, 1)
 #define K_RIGHT K(KT_CUR, 2)
diff --git a/libc/kernel/uapi/linux/kfd_ioctl.h b/libc/kernel/uapi/linux/kfd_ioctl.h
index 05db3fb..55aff04 100644
--- a/libc/kernel/uapi/linux/kfd_ioctl.h
+++ b/libc/kernel/uapi/linux/kfd_ioctl.h
@@ -59,6 +59,11 @@
   __u32 queue_percentage;
   __u32 queue_priority;
 };
+struct kfd_ioctl_set_cu_mask_args {
+  __u32 queue_id;
+  __u32 num_cu_mask;
+  __u64 cu_mask_ptr;
+};
 #define KFD_IOC_CACHE_POLICY_COHERENT 0
 #define KFD_IOC_CACHE_POLICY_NONCOHERENT 1
 struct kfd_ioctl_set_memory_policy_args {
@@ -132,6 +137,10 @@
 #define KFD_IOC_WAIT_RESULT_TIMEOUT 1
 #define KFD_IOC_WAIT_RESULT_FAIL 2
 #define KFD_SIGNAL_EVENT_LIMIT 4096
+#define KFD_HW_EXCEPTION_WHOLE_GPU_RESET 0
+#define KFD_HW_EXCEPTION_PER_ENGINE_RESET 1
+#define KFD_HW_EXCEPTION_GPU_HANG 0
+#define KFD_HW_EXCEPTION_ECC 1
 struct kfd_ioctl_create_event_args {
   __u64 event_page_offset;
   __u32 event_trigger_data;
@@ -157,7 +166,7 @@
   __u32 NotPresent;
   __u32 ReadOnly;
   __u32 NoExecute;
-  __u32 pad;
+  __u32 imprecise;
 };
 struct kfd_hsa_memory_exception_data {
   struct kfd_memory_exception_failure failure;
@@ -165,9 +174,16 @@
   __u32 gpu_id;
   __u32 pad;
 };
+struct kfd_hsa_hw_exception_data {
+  uint32_t reset_type;
+  uint32_t reset_cause;
+  uint32_t memory_lost;
+  uint32_t gpu_id;
+};
 struct kfd_event_data {
   union {
     struct kfd_hsa_memory_exception_data memory_exception_data;
+    struct kfd_hsa_hw_exception_data hw_exception_data;
   };
   __u64 kfd_event_data_ext;
   __u32 event_id;
@@ -268,6 +284,7 @@
 #define AMDKFD_IOC_FREE_MEMORY_OF_GPU AMDKFD_IOW(0x17, struct kfd_ioctl_free_memory_of_gpu_args)
 #define AMDKFD_IOC_MAP_MEMORY_TO_GPU AMDKFD_IOWR(0x18, struct kfd_ioctl_map_memory_to_gpu_args)
 #define AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU AMDKFD_IOWR(0x19, struct kfd_ioctl_unmap_memory_from_gpu_args)
+#define AMDKFD_IOC_SET_CU_MASK AMDKFD_IOW(0x1A, struct kfd_ioctl_set_cu_mask_args)
 #define AMDKFD_COMMAND_START 0x01
-#define AMDKFD_COMMAND_END 0x1A
+#define AMDKFD_COMMAND_END 0x1B
 #endif
diff --git a/libc/kernel/uapi/linux/kvm.h b/libc/kernel/uapi/linux/kvm.h
index 6c8ae61..14e882b 100644
--- a/libc/kernel/uapi/linux/kvm.h
+++ b/libc/kernel/uapi/linux/kvm.h
@@ -739,6 +739,11 @@
 #define KVM_CAP_S390_BPB 152
 #define KVM_CAP_GET_MSR_FEATURES 153
 #define KVM_CAP_HYPERV_EVENTFD 154
+#define KVM_CAP_HYPERV_TLBFLUSH 155
+#define KVM_CAP_S390_HPAGE_1M 156
+#define KVM_CAP_NESTED_STATE 157
+#define KVM_CAP_ARM_INJECT_SERROR_ESR 158
+#define KVM_CAP_MSR_PLATFORM_INFO 159
 #ifdef KVM_CAP_IRQ_ROUTING
 struct kvm_irq_routing_irqchip {
   __u32 irqchip;
@@ -1048,6 +1053,8 @@
 #define KVM_MEMORY_ENCRYPT_REG_REGION _IOR(KVMIO, 0xbb, struct kvm_enc_region)
 #define KVM_MEMORY_ENCRYPT_UNREG_REGION _IOR(KVMIO, 0xbc, struct kvm_enc_region)
 #define KVM_HYPERV_EVENTFD _IOW(KVMIO, 0xbd, struct kvm_hyperv_eventfd)
+#define KVM_GET_NESTED_STATE _IOWR(KVMIO, 0xbe, struct kvm_nested_state)
+#define KVM_SET_NESTED_STATE _IOW(KVMIO, 0xbf, struct kvm_nested_state)
 enum sev_cmd_id {
   KVM_SEV_INIT = 0,
   KVM_SEV_ES_INIT,
diff --git a/libc/kernel/uapi/linux/kvm_para.h b/libc/kernel/uapi/linux/kvm_para.h
index 5035c23..b08a605 100644
--- a/libc/kernel/uapi/linux/kvm_para.h
+++ b/libc/kernel/uapi/linux/kvm_para.h
@@ -20,6 +20,7 @@
 #define _UAPI__LINUX_KVM_PARA_H
 #define KVM_ENOSYS 1000
 #define KVM_EFAULT EFAULT
+#define KVM_EINVAL EINVAL
 #define KVM_E2BIG E2BIG
 #define KVM_EPERM EPERM
 #define KVM_EOPNOTSUPP 95
@@ -32,5 +33,6 @@
 #define KVM_HC_MIPS_EXIT_VM 7
 #define KVM_HC_MIPS_CONSOLE_OUTPUT 8
 #define KVM_HC_CLOCK_PAIRING 9
+#define KVM_HC_SEND_IPI 10
 #include <asm/kvm_para.h>
 #endif
diff --git a/libc/kernel/uapi/linux/lirc.h b/libc/kernel/uapi/linux/lirc.h
index 3dfb6d0..4a8d0ff 100644
--- a/libc/kernel/uapi/linux/lirc.h
+++ b/libc/kernel/uapi/linux/lirc.h
@@ -92,6 +92,7 @@
 #define LIRC_SET_MEASURE_CARRIER_MODE _IOW('i', 0x0000001d, __u32)
 #define LIRC_SET_REC_CARRIER_RANGE _IOW('i', 0x0000001f, __u32)
 #define LIRC_SET_WIDEBAND_RECEIVER _IOW('i', 0x00000023, __u32)
+#define LIRC_GET_REC_TIMEOUT _IOR('i', 0x00000024, __u32)
 struct lirc_scancode {
   __u64 timestamp;
   __u16 flags;
diff --git a/libc/kernel/uapi/linux/media-bus-format.h b/libc/kernel/uapi/linux/media-bus-format.h
index dd7fcc7..7c701b1 100644
--- a/libc/kernel/uapi/linux/media-bus-format.h
+++ b/libc/kernel/uapi/linux/media-bus-format.h
@@ -56,6 +56,7 @@
 #define MEDIA_BUS_FMT_YUYV8_2X8 0x2008
 #define MEDIA_BUS_FMT_YVYU8_2X8 0x2009
 #define MEDIA_BUS_FMT_Y10_1X10 0x200a
+#define MEDIA_BUS_FMT_Y10_2X8_PADHI_LE 0x202c
 #define MEDIA_BUS_FMT_UYVY10_2X10 0x2018
 #define MEDIA_BUS_FMT_VYUY10_2X10 0x2019
 #define MEDIA_BUS_FMT_YUYV10_2X10 0x200b
diff --git a/libc/kernel/uapi/linux/media.h b/libc/kernel/uapi/linux/media.h
index e6236f9..eefc07a 100644
--- a/libc/kernel/uapi/linux/media.h
+++ b/libc/kernel/uapi/linux/media.h
@@ -21,7 +21,6 @@
 #include <stdint.h>
 #include <linux/ioctl.h>
 #include <linux/types.h>
-#include <linux/version.h>
 struct media_device_info {
   char driver[16];
   char model[32];
@@ -48,8 +47,6 @@
 #define MEDIA_ENT_F_CAM_SENSOR (MEDIA_ENT_F_OLD_SUBDEV_BASE + 1)
 #define MEDIA_ENT_F_FLASH (MEDIA_ENT_F_OLD_SUBDEV_BASE + 2)
 #define MEDIA_ENT_F_LENS (MEDIA_ENT_F_OLD_SUBDEV_BASE + 3)
-#define MEDIA_ENT_F_ATV_DECODER (MEDIA_ENT_F_OLD_SUBDEV_BASE + 4)
-#define MEDIA_ENT_F_DTV_DECODER (MEDIA_ENT_F_BASE + 0x6001)
 #define MEDIA_ENT_F_TUNER (MEDIA_ENT_F_OLD_SUBDEV_BASE + 5)
 #define MEDIA_ENT_F_IF_VID_DECODER (MEDIA_ENT_F_BASE + 0x02001)
 #define MEDIA_ENT_F_IF_AUD_DECODER (MEDIA_ENT_F_BASE + 0x02002)
@@ -62,8 +59,13 @@
 #define MEDIA_ENT_F_PROC_VIDEO_LUT (MEDIA_ENT_F_BASE + 0x4004)
 #define MEDIA_ENT_F_PROC_VIDEO_SCALER (MEDIA_ENT_F_BASE + 0x4005)
 #define MEDIA_ENT_F_PROC_VIDEO_STATISTICS (MEDIA_ENT_F_BASE + 0x4006)
+#define MEDIA_ENT_F_PROC_VIDEO_ENCODER (MEDIA_ENT_F_BASE + 0x4007)
+#define MEDIA_ENT_F_PROC_VIDEO_DECODER (MEDIA_ENT_F_BASE + 0x4008)
 #define MEDIA_ENT_F_VID_MUX (MEDIA_ENT_F_BASE + 0x5001)
 #define MEDIA_ENT_F_VID_IF_BRIDGE (MEDIA_ENT_F_BASE + 0x5002)
+#define MEDIA_ENT_F_ATV_DECODER (MEDIA_ENT_F_OLD_SUBDEV_BASE + 4)
+#define MEDIA_ENT_F_DV_DECODER (MEDIA_ENT_F_BASE + 0x6001)
+#define MEDIA_ENT_F_DV_ENCODER (MEDIA_ENT_F_BASE + 0x6002)
 #define MEDIA_ENT_FL_DEFAULT (1 << 0)
 #define MEDIA_ENT_FL_CONNECTOR (1 << 1)
 #define MEDIA_ENT_ID_FLAG_NEXT (1 << 31)
@@ -139,11 +141,13 @@
 #define MEDIA_INTF_T_V4L_SUBDEV (MEDIA_INTF_T_V4L_BASE + 3)
 #define MEDIA_INTF_T_V4L_SWRADIO (MEDIA_INTF_T_V4L_BASE + 4)
 #define MEDIA_INTF_T_V4L_TOUCH (MEDIA_INTF_T_V4L_BASE + 5)
+#define MEDIA_V2_ENTITY_HAS_FLAGS(media_version) ((media_version) >= ((4 << 16) | (19 << 8) | 0))
 struct media_v2_entity {
   __u32 id;
   char name[64];
   __u32 function;
-  __u32 reserved[6];
+  __u32 flags;
+  __u32 reserved[5];
 } __attribute__((packed));
 struct media_v2_intf_devnode {
   __u32 major;
@@ -159,11 +163,13 @@
     __u32 raw[16];
   };
 } __attribute__((packed));
+#define MEDIA_V2_PAD_HAS_INDEX(media_version) ((media_version) >= ((4 << 16) | (19 << 8) | 0))
 struct media_v2_pad {
   __u32 id;
   __u32 entity_id;
   __u32 flags;
-  __u32 reserved[5];
+  __u32 index;
+  __u32 reserved[4];
 } __attribute__((packed));
 struct media_v2_link {
   __u32 id;
@@ -209,6 +215,7 @@
 #define MEDIA_ENT_T_V4L2_SUBDEV_LENS MEDIA_ENT_F_LENS
 #define MEDIA_ENT_T_V4L2_SUBDEV_DECODER MEDIA_ENT_F_ATV_DECODER
 #define MEDIA_ENT_T_V4L2_SUBDEV_TUNER MEDIA_ENT_F_TUNER
+#define MEDIA_ENT_F_DTV_DECODER MEDIA_ENT_F_DV_DECODER
 #define MEDIA_INTF_T_ALSA_BASE 0x00000300
 #define MEDIA_INTF_T_ALSA_PCM_CAPTURE (MEDIA_INTF_T_ALSA_BASE)
 #define MEDIA_INTF_T_ALSA_PCM_PLAYBACK (MEDIA_INTF_T_ALSA_BASE + 1)
@@ -218,5 +225,5 @@
 #define MEDIA_INTF_T_ALSA_HWDEP (MEDIA_INTF_T_ALSA_BASE + 5)
 #define MEDIA_INTF_T_ALSA_SEQUENCER (MEDIA_INTF_T_ALSA_BASE + 6)
 #define MEDIA_INTF_T_ALSA_TIMER (MEDIA_INTF_T_ALSA_BASE + 7)
-#define MEDIA_API_VERSION KERNEL_VERSION(0, 1, 0)
+#define MEDIA_API_VERSION ((0 << 16) | (1 << 8) | 0)
 #endif
diff --git a/libc/kernel/uapi/linux/memfd.h b/libc/kernel/uapi/linux/memfd.h
index e3e5cd5..914c076 100644
--- a/libc/kernel/uapi/linux/memfd.h
+++ b/libc/kernel/uapi/linux/memfd.h
@@ -30,7 +30,9 @@
 #define MFD_HUGE_2MB HUGETLB_FLAG_ENCODE_2MB
 #define MFD_HUGE_8MB HUGETLB_FLAG_ENCODE_8MB
 #define MFD_HUGE_16MB HUGETLB_FLAG_ENCODE_16MB
+#define MFD_HUGE_32MB HUGETLB_FLAG_ENCODE_32MB
 #define MFD_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB
+#define MFD_HUGE_512MB HUGETLB_FLAG_ENCODE_512MB
 #define MFD_HUGE_1GB HUGETLB_FLAG_ENCODE_1GB
 #define MFD_HUGE_2GB HUGETLB_FLAG_ENCODE_2GB
 #define MFD_HUGE_16GB HUGETLB_FLAG_ENCODE_16GB
diff --git a/libc/kernel/uapi/linux/mii.h b/libc/kernel/uapi/linux/mii.h
index aa4824d..5c87990 100644
--- a/libc/kernel/uapi/linux/mii.h
+++ b/libc/kernel/uapi/linux/mii.h
@@ -122,6 +122,7 @@
 #define ADVERTISE_1000HALF 0x0100
 #define CTL1000_AS_MASTER 0x0800
 #define CTL1000_ENABLE_MASTER 0x1000
+#define LPA_1000MSFAIL 0x8000
 #define LPA_1000LOCALRXOK 0x2000
 #define LPA_1000REMRXOK 0x1000
 #define LPA_1000FULL 0x0800
diff --git a/libc/kernel/uapi/linux/mman.h b/libc/kernel/uapi/linux/mman.h
index b0ce77e..0c9c397 100644
--- a/libc/kernel/uapi/linux/mman.h
+++ b/libc/kernel/uapi/linux/mman.h
@@ -33,7 +33,9 @@
 #define MAP_HUGE_2MB HUGETLB_FLAG_ENCODE_2MB
 #define MAP_HUGE_8MB HUGETLB_FLAG_ENCODE_8MB
 #define MAP_HUGE_16MB HUGETLB_FLAG_ENCODE_16MB
+#define MAP_HUGE_32MB HUGETLB_FLAG_ENCODE_32MB
 #define MAP_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB
+#define MAP_HUGE_512MB HUGETLB_FLAG_ENCODE_512MB
 #define MAP_HUGE_1GB HUGETLB_FLAG_ENCODE_1GB
 #define MAP_HUGE_2GB HUGETLB_FLAG_ENCODE_2GB
 #define MAP_HUGE_16GB HUGETLB_FLAG_ENCODE_16GB
diff --git a/libc/kernel/uapi/linux/mroute.h b/libc/kernel/uapi/linux/mroute.h
index d962f8b..f0cb21b 100644
--- a/libc/kernel/uapi/linux/mroute.h
+++ b/libc/kernel/uapi/linux/mroute.h
@@ -103,6 +103,7 @@
   IPMRA_TABLE_MROUTE_DO_ASSERT,
   IPMRA_TABLE_MROUTE_DO_PIM,
   IPMRA_TABLE_VIFS,
+  IPMRA_TABLE_MROUTE_DO_WRVIFWHOLE,
   __IPMRA_TABLE_MAX
 };
 #define IPMRA_TABLE_MAX (__IPMRA_TABLE_MAX - 1)
@@ -141,4 +142,5 @@
 #define IGMPMSG_NOCACHE 1
 #define IGMPMSG_WRONGVIF 2
 #define IGMPMSG_WHOLEPKT 3
+#define IGMPMSG_WRVIFWHOLE 4
 #endif
diff --git a/libc/kernel/uapi/linux/nbd.h b/libc/kernel/uapi/linux/nbd.h
index 749c38a..3b74393 100644
--- a/libc/kernel/uapi/linux/nbd.h
+++ b/libc/kernel/uapi/linux/nbd.h
@@ -45,6 +45,7 @@
 #define NBD_FLAG_CAN_MULTI_CONN (1 << 8)
 #define NBD_CMD_FLAG_FUA (1 << 16)
 #define NBD_CFLAG_DESTROY_ON_DISCONNECT (1 << 0)
+#define NBD_CFLAG_DISCONNECT_ON_CLOSE (1 << 1)
 #define NBD_REQUEST_MAGIC 0x25609513
 #define NBD_REPLY_MAGIC 0x67446698
 struct nbd_request {
diff --git a/libc/kernel/uapi/linux/ncp.h b/libc/kernel/uapi/linux/ncp.h
deleted file mode 100644
index c3f318b..0000000
--- a/libc/kernel/uapi/linux/ncp.h
+++ /dev/null
@@ -1,178 +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_NCP_H
-#define _LINUX_NCP_H
-#include <linux/types.h>
-#define NCP_PTYPE (0x11)
-#define NCP_PORT (0x0451)
-#define NCP_ALLOC_SLOT_REQUEST (0x1111)
-#define NCP_REQUEST (0x2222)
-#define NCP_DEALLOC_SLOT_REQUEST (0x5555)
-struct ncp_request_header {
-  __u16 type;
-  __u8 sequence;
-  __u8 conn_low;
-  __u8 task;
-  __u8 conn_high;
-  __u8 function;
-  __u8 data[0];
-} __attribute__((packed));
-#define NCP_REPLY (0x3333)
-#define NCP_WATCHDOG (0x3E3E)
-#define NCP_POSITIVE_ACK (0x9999)
-struct ncp_reply_header {
-  __u16 type;
-  __u8 sequence;
-  __u8 conn_low;
-  __u8 task;
-  __u8 conn_high;
-  __u8 completion_code;
-  __u8 connection_state;
-  __u8 data[0];
-} __attribute__((packed));
-#define NCP_VOLNAME_LEN (16)
-#define NCP_NUMBER_OF_VOLUMES (256)
-struct ncp_volume_info {
-  __u32 total_blocks;
-  __u32 free_blocks;
-  __u32 purgeable_blocks;
-  __u32 not_yet_purgeable_blocks;
-  __u32 total_dir_entries;
-  __u32 available_dir_entries;
-  __u8 sectors_per_block;
-  char volume_name[NCP_VOLNAME_LEN + 1];
-};
-#define AR_READ (cpu_to_le16(1))
-#define AR_WRITE (cpu_to_le16(2))
-#define AR_EXCLUSIVE (cpu_to_le16(0x20))
-#define NCP_FILE_ID_LEN 6
-#define NW_NS_DOS 0
-#define NW_NS_MAC 1
-#define NW_NS_NFS 2
-#define NW_NS_FTAM 3
-#define NW_NS_OS2 4
-#define RIM_NAME (cpu_to_le32(1))
-#define RIM_SPACE_ALLOCATED (cpu_to_le32(2))
-#define RIM_ATTRIBUTES (cpu_to_le32(4))
-#define RIM_DATA_SIZE (cpu_to_le32(8))
-#define RIM_TOTAL_SIZE (cpu_to_le32(0x10))
-#define RIM_EXT_ATTR_INFO (cpu_to_le32(0x20))
-#define RIM_ARCHIVE (cpu_to_le32(0x40))
-#define RIM_MODIFY (cpu_to_le32(0x80))
-#define RIM_CREATION (cpu_to_le32(0x100))
-#define RIM_OWNING_NAMESPACE (cpu_to_le32(0x200))
-#define RIM_DIRECTORY (cpu_to_le32(0x400))
-#define RIM_RIGHTS (cpu_to_le32(0x800))
-#define RIM_ALL (cpu_to_le32(0xFFF))
-#define RIM_COMPRESSED_INFO (cpu_to_le32(0x80000000))
-#define NSIBM_NFS_NAME 0x0001
-#define NSIBM_NFS_MODE 0x0002
-#define NSIBM_NFS_GID 0x0004
-#define NSIBM_NFS_NLINKS 0x0008
-#define NSIBM_NFS_RDEV 0x0010
-#define NSIBM_NFS_LINK 0x0020
-#define NSIBM_NFS_CREATED 0x0040
-#define NSIBM_NFS_UID 0x0080
-#define NSIBM_NFS_ACSFLAG 0x0100
-#define NSIBM_NFS_MYFLAG 0x0200
-#define OC_MODE_OPEN 0x01
-#define OC_MODE_TRUNCATE 0x02
-#define OC_MODE_REPLACE 0x02
-#define OC_MODE_CREATE 0x08
-#define OC_ACTION_NONE 0x00
-#define OC_ACTION_OPEN 0x01
-#define OC_ACTION_CREATE 0x02
-#define OC_ACTION_TRUNCATE 0x04
-#define OC_ACTION_REPLACE 0x04
-#ifndef AR_READ_ONLY
-#define AR_READ_ONLY 0x0001
-#define AR_WRITE_ONLY 0x0002
-#define AR_DENY_READ 0x0004
-#define AR_DENY_WRITE 0x0008
-#define AR_COMPATIBILITY 0x0010
-#define AR_WRITE_THROUGH 0x0040
-#define AR_OPEN_COMPRESSED 0x0100
-#endif
-struct nw_nfs_info {
-  __u32 mode;
-  __u32 rdev;
-};
-struct nw_info_struct {
-  __u32 spaceAlloc;
-  __le32 attributes;
-  __u16 flags;
-  __le32 dataStreamSize;
-  __le32 totalStreamSize;
-  __u16 numberOfStreams;
-  __le16 creationTime;
-  __le16 creationDate;
-  __u32 creatorID;
-  __le16 modifyTime;
-  __le16 modifyDate;
-  __u32 modifierID;
-  __le16 lastAccessDate;
-  __u16 archiveTime;
-  __u16 archiveDate;
-  __u32 archiverID;
-  __u16 inheritedRightsMask;
-  __le32 dirEntNum;
-  __le32 DosDirNum;
-  __u32 volNumber;
-  __u32 EADataSize;
-  __u32 EAKeyCount;
-  __u32 EAKeySize;
-  __u32 NSCreator;
-  __u8 nameLen;
-  __u8 entryName[256];
-} __attribute__((packed));
-#define DM_ATTRIBUTES (cpu_to_le32(0x02))
-#define DM_CREATE_DATE (cpu_to_le32(0x04))
-#define DM_CREATE_TIME (cpu_to_le32(0x08))
-#define DM_CREATOR_ID (cpu_to_le32(0x10))
-#define DM_ARCHIVE_DATE (cpu_to_le32(0x20))
-#define DM_ARCHIVE_TIME (cpu_to_le32(0x40))
-#define DM_ARCHIVER_ID (cpu_to_le32(0x80))
-#define DM_MODIFY_DATE (cpu_to_le32(0x0100))
-#define DM_MODIFY_TIME (cpu_to_le32(0x0200))
-#define DM_MODIFIER_ID (cpu_to_le32(0x0400))
-#define DM_LAST_ACCESS_DATE (cpu_to_le32(0x0800))
-#define DM_INHERITED_RIGHTS_MASK (cpu_to_le32(0x1000))
-#define DM_MAXIMUM_SPACE (cpu_to_le32(0x2000))
-struct nw_modify_dos_info {
-  __le32 attributes;
-  __le16 creationDate;
-  __le16 creationTime;
-  __u32 creatorID;
-  __le16 modifyDate;
-  __le16 modifyTime;
-  __u32 modifierID;
-  __u16 archiveDate;
-  __u16 archiveTime;
-  __u32 archiverID;
-  __le16 lastAccessDate;
-  __u16 inheritanceGrantMask;
-  __u16 inheritanceRevokeMask;
-  __u32 maximumSpace;
-} __attribute__((packed));
-struct nw_search_sequence {
-  __u8 volNumber;
-  __u32 dirBase;
-  __u32 sequence;
-} __attribute__((packed));
-#endif
diff --git a/libc/kernel/uapi/linux/ncp_fs.h b/libc/kernel/uapi/linux/ncp_fs.h
deleted file mode 100644
index ddb9742..0000000
--- a/libc/kernel/uapi/linux/ncp_fs.h
+++ /dev/null
@@ -1,116 +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_NCP_FS_H
-#define _LINUX_NCP_FS_H
-#include <linux/fs.h>
-#include <linux/in.h>
-#include <linux/types.h>
-#include <linux/magic.h>
-#include <linux/ipx.h>
-#include <linux/ncp_no.h>
-struct ncp_ioctl_request {
-  unsigned int function;
-  unsigned int size;
-  char __user * data;
-};
-struct ncp_fs_info {
-  int version;
-  struct sockaddr_ipx addr;
-  __kernel_uid_t mounted_uid;
-  int connection;
-  int buffer_size;
-  int volume_number;
-  __le32 directory_id;
-};
-struct ncp_fs_info_v2 {
-  int version;
-  unsigned long mounted_uid;
-  unsigned int connection;
-  unsigned int buffer_size;
-  unsigned int volume_number;
-  __le32 directory_id;
-  __u32 dummy1;
-  __u32 dummy2;
-  __u32 dummy3;
-};
-struct ncp_sign_init {
-  char sign_root[8];
-  char sign_last[16];
-};
-struct ncp_lock_ioctl {
-#define NCP_LOCK_LOG 0
-#define NCP_LOCK_SH 1
-#define NCP_LOCK_EX 2
-#define NCP_LOCK_CLEAR 256
-  int cmd;
-  int origin;
-  unsigned int offset;
-  unsigned int length;
-#define NCP_LOCK_DEFAULT_TIMEOUT 18
-#define NCP_LOCK_MAX_TIMEOUT 180
-  int timeout;
-};
-struct ncp_setroot_ioctl {
-  int volNumber;
-  int namespace;
-  __le32 dirEntNum;
-};
-struct ncp_objectname_ioctl {
-#define NCP_AUTH_NONE 0x00
-#define NCP_AUTH_BIND 0x31
-#define NCP_AUTH_NDS 0x32
-  int auth_type;
-  size_t object_name_len;
-  void __user * object_name;
-};
-struct ncp_privatedata_ioctl {
-  size_t len;
-  void __user * data;
-};
-#define NCP_IOCSNAME_LEN 20
-struct ncp_nls_ioctl {
-  unsigned char codepage[NCP_IOCSNAME_LEN + 1];
-  unsigned char iocharset[NCP_IOCSNAME_LEN + 1];
-};
-#define NCP_IOC_NCPREQUEST _IOR('n', 1, struct ncp_ioctl_request)
-#define NCP_IOC_GETMOUNTUID _IOW('n', 2, __kernel_old_uid_t)
-#define NCP_IOC_GETMOUNTUID2 _IOW('n', 2, unsigned long)
-#define NCP_IOC_CONN_LOGGED_IN _IO('n', 3)
-#define NCP_GET_FS_INFO_VERSION (1)
-#define NCP_IOC_GET_FS_INFO _IOWR('n', 4, struct ncp_fs_info)
-#define NCP_GET_FS_INFO_VERSION_V2 (2)
-#define NCP_IOC_GET_FS_INFO_V2 _IOWR('n', 4, struct ncp_fs_info_v2)
-#define NCP_IOC_SIGN_INIT _IOR('n', 5, struct ncp_sign_init)
-#define NCP_IOC_SIGN_WANTED _IOR('n', 6, int)
-#define NCP_IOC_SET_SIGN_WANTED _IOW('n', 6, int)
-#define NCP_IOC_LOCKUNLOCK _IOR('n', 7, struct ncp_lock_ioctl)
-#define NCP_IOC_GETROOT _IOW('n', 8, struct ncp_setroot_ioctl)
-#define NCP_IOC_SETROOT _IOR('n', 8, struct ncp_setroot_ioctl)
-#define NCP_IOC_GETOBJECTNAME _IOWR('n', 9, struct ncp_objectname_ioctl)
-#define NCP_IOC_SETOBJECTNAME _IOR('n', 9, struct ncp_objectname_ioctl)
-#define NCP_IOC_GETPRIVATEDATA _IOWR('n', 10, struct ncp_privatedata_ioctl)
-#define NCP_IOC_SETPRIVATEDATA _IOR('n', 10, struct ncp_privatedata_ioctl)
-#define NCP_IOC_GETCHARSETS _IOWR('n', 11, struct ncp_nls_ioctl)
-#define NCP_IOC_SETCHARSETS _IOR('n', 11, struct ncp_nls_ioctl)
-#define NCP_IOC_GETDENTRYTTL _IOW('n', 12, __u32)
-#define NCP_IOC_SETDENTRYTTL _IOR('n', 12, __u32)
-#define NCP_PACKET_SIZE 4070
-#define NCP_MAXPATHLEN 255
-#define NCP_MAXNAMELEN 14
-#endif
diff --git a/libc/kernel/uapi/linux/ncp_mount.h b/libc/kernel/uapi/linux/ncp_mount.h
deleted file mode 100644
index e29640d..0000000
--- a/libc/kernel/uapi/linux/ncp_mount.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- ***   This header was automatically generated from a Linux kernel header
- ***   of the same name, to make information necessary for userspace to
- ***   call into the kernel available to libc.  It contains only constants,
- ***   structures, and macros generated from the original header, and thus,
- ***   contains no copyrightable information.
- ***
- ***   To edit the content of this header, modify the corresponding
- ***   source file (e.g. under external/kernel-headers/original/) then
- ***   run bionic/libc/kernel/tools/update_all.py
- ***
- ***   Any manual change here will be lost the next time this script will
- ***   be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef _LINUX_NCP_MOUNT_H
-#define _LINUX_NCP_MOUNT_H
-#include <linux/types.h>
-#include <linux/ncp.h>
-#define NCP_MOUNT_VERSION 3
-#define NCP_MOUNT_SOFT 0x0001
-#define NCP_MOUNT_INTR 0x0002
-#define NCP_MOUNT_STRONG 0x0004
-#define NCP_MOUNT_NO_OS2 0x0008
-#define NCP_MOUNT_NO_NFS 0x0010
-#define NCP_MOUNT_EXTRAS 0x0020
-#define NCP_MOUNT_SYMLINKS 0x0040
-#define NCP_MOUNT_NFS_EXTRAS 0x0080
-struct ncp_mount_data {
-  int version;
-  unsigned int ncp_fd;
-  __kernel_uid_t mounted_uid;
-  __kernel_pid_t wdog_pid;
-  unsigned char mounted_vol[NCP_VOLNAME_LEN + 1];
-  unsigned int time_out;
-  unsigned int retry_count;
-  unsigned int flags;
-  __kernel_uid_t uid;
-  __kernel_gid_t gid;
-  __kernel_mode_t file_mode;
-  __kernel_mode_t dir_mode;
-};
-#define NCP_MOUNT_VERSION_V4 (4)
-struct ncp_mount_data_v4 {
-  int version;
-  unsigned long flags;
-  unsigned long mounted_uid;
-  long wdog_pid;
-  unsigned int ncp_fd;
-  unsigned int time_out;
-  unsigned int retry_count;
-  unsigned long uid;
-  unsigned long gid;
-  unsigned long file_mode;
-  unsigned long dir_mode;
-};
-#define NCP_MOUNT_VERSION_V5 (5)
-#endif
diff --git a/libc/kernel/uapi/linux/net_tstamp.h b/libc/kernel/uapi/linux/net_tstamp.h
index 49d4c2c..2f022ea 100644
--- a/libc/kernel/uapi/linux/net_tstamp.h
+++ b/libc/kernel/uapi/linux/net_tstamp.h
@@ -73,4 +73,14 @@
   __u32 pkt_length;
   __u32 reserved[2];
 };
+enum txtime_flags {
+  SOF_TXTIME_DEADLINE_MODE = (1 << 0),
+  SOF_TXTIME_REPORT_ERRORS = (1 << 1),
+  SOF_TXTIME_FLAGS_LAST = SOF_TXTIME_REPORT_ERRORS,
+  SOF_TXTIME_FLAGS_MASK = (SOF_TXTIME_FLAGS_LAST - 1) | SOF_TXTIME_FLAGS_LAST
+};
+struct sock_txtime {
+  clockid_t clockid;
+  __u32 flags;
+};
 #endif
diff --git a/libc/kernel/uapi/linux/netconf.h b/libc/kernel/uapi/linux/netconf.h
index 4f86757..27d3854 100644
--- a/libc/kernel/uapi/linux/netconf.h
+++ b/libc/kernel/uapi/linux/netconf.h
@@ -32,6 +32,7 @@
   NETCONFA_PROXY_NEIGH,
   NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
   NETCONFA_INPUT,
+  NETCONFA_BC_FORWARDING,
   __NETCONFA_MAX
 };
 #define NETCONFA_MAX (__NETCONFA_MAX - 1)
diff --git a/libc/kernel/uapi/linux/netfilter/nf_conntrack_common.h b/libc/kernel/uapi/linux/netfilter/nf_conntrack_common.h
index 2259e09..43d60ca 100644
--- a/libc/kernel/uapi/linux/netfilter/nf_conntrack_common.h
+++ b/libc/kernel/uapi/linux/netfilter/nf_conntrack_common.h
@@ -65,7 +65,7 @@
   IPS_OFFLOAD_BIT = 14,
   IPS_OFFLOAD = (1 << IPS_OFFLOAD_BIT),
   IPS_UNCHANGEABLE_MASK = (IPS_NAT_DONE_MASK | IPS_NAT_MASK | IPS_EXPECTED | IPS_CONFIRMED | IPS_DYING | IPS_SEQ_ADJUST | IPS_TEMPLATE | IPS_OFFLOAD),
-  __IPS_MAX_BIT = 14,
+  __IPS_MAX_BIT = 15,
 };
 enum ip_conntrack_events {
   IPCT_NEW,
diff --git a/libc/kernel/uapi/linux/netfilter/nf_nat.h b/libc/kernel/uapi/linux/netfilter/nf_nat.h
index 80a55e6..f01669b 100644
--- a/libc/kernel/uapi/linux/netfilter/nf_nat.h
+++ b/libc/kernel/uapi/linux/netfilter/nf_nat.h
@@ -25,8 +25,9 @@
 #define NF_NAT_RANGE_PROTO_RANDOM (1 << 2)
 #define NF_NAT_RANGE_PERSISTENT (1 << 3)
 #define NF_NAT_RANGE_PROTO_RANDOM_FULLY (1 << 4)
+#define NF_NAT_RANGE_PROTO_OFFSET (1 << 5)
 #define NF_NAT_RANGE_PROTO_RANDOM_ALL (NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PROTO_RANDOM_FULLY)
-#define NF_NAT_RANGE_MASK (NF_NAT_RANGE_MAP_IPS | NF_NAT_RANGE_PROTO_SPECIFIED | NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PERSISTENT | NF_NAT_RANGE_PROTO_RANDOM_FULLY)
+#define NF_NAT_RANGE_MASK (NF_NAT_RANGE_MAP_IPS | NF_NAT_RANGE_PROTO_SPECIFIED | NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PERSISTENT | NF_NAT_RANGE_PROTO_RANDOM_FULLY | NF_NAT_RANGE_PROTO_OFFSET)
 struct nf_nat_ipv4_range {
   unsigned int flags;
   __be32 min_ip;
@@ -45,4 +46,12 @@
   union nf_conntrack_man_proto min_proto;
   union nf_conntrack_man_proto max_proto;
 };
+struct nf_nat_range2 {
+  unsigned int flags;
+  union nf_inet_addr min_addr;
+  union nf_inet_addr max_addr;
+  union nf_conntrack_man_proto min_proto;
+  union nf_conntrack_man_proto max_proto;
+  union nf_conntrack_man_proto base_proto;
+};
 #endif
diff --git a/libc/kernel/uapi/linux/netfilter/nf_tables.h b/libc/kernel/uapi/linux/netfilter/nf_tables.h
index 610594c..63394e0 100644
--- a/libc/kernel/uapi/linux/netfilter/nf_tables.h
+++ b/libc/kernel/uapi/linux/netfilter/nf_tables.h
@@ -24,6 +24,7 @@
 #define NFT_SET_MAXNAMELEN NFT_NAME_MAXLEN
 #define NFT_OBJ_MAXNAMELEN NFT_NAME_MAXLEN
 #define NFT_USERDATA_MAXLEN 256
+#define NFT_OSF_MAXGENRELEN 16
 enum nft_registers {
   NFT_REG_VERDICT,
   NFT_REG_1,
@@ -418,7 +419,9 @@
   NFT_RT_NEXTHOP4,
   NFT_RT_NEXTHOP6,
   NFT_RT_TCPMSS,
+  __NFT_RT_MAX
 };
+#define NFT_RT_MAX (__NFT_RT_MAX - 1)
 enum nft_hash_types {
   NFT_HASH_JENKINS,
   NFT_HASH_SYM,
@@ -432,6 +435,8 @@
   NFTA_HASH_SEED,
   NFTA_HASH_OFFSET,
   NFTA_HASH_TYPE,
+  NFTA_HASH_SET_NAME,
+  NFTA_HASH_SET_ID,
   __NFTA_HASH_MAX,
 };
 #define NFTA_HASH_MAX (__NFTA_HASH_MAX - 1)
@@ -450,6 +455,19 @@
   __NFTA_RT_MAX
 };
 #define NFTA_RT_MAX (__NFTA_RT_MAX - 1)
+enum nft_socket_attributes {
+  NFTA_SOCKET_UNSPEC,
+  NFTA_SOCKET_KEY,
+  NFTA_SOCKET_DREG,
+  __NFTA_SOCKET_MAX
+};
+#define NFTA_SOCKET_MAX (__NFTA_SOCKET_MAX - 1)
+enum nft_socket_keys {
+  NFT_SOCKET_TRANSPARENT,
+  NFT_SOCKET_MARK,
+  __NFT_SOCKET_MAX
+};
+#define NFT_SOCKET_MAX (__NFT_SOCKET_MAX - 1)
 enum nft_ct_keys {
   NFT_CT_STATE,
   NFT_CT_DIRECTION,
@@ -474,7 +492,10 @@
   NFT_CT_DST_IP,
   NFT_CT_SRC_IP6,
   NFT_CT_DST_IP6,
+  NFT_CT_TIMEOUT,
+  __NFT_CT_MAX
 };
+#define NFT_CT_MAX (__NFT_CT_MAX - 1)
 enum nft_ct_attributes {
   NFTA_CT_UNSPEC,
   NFTA_CT_DREG,
@@ -508,6 +529,16 @@
   __NFTA_LIMIT_MAX
 };
 #define NFTA_LIMIT_MAX (__NFTA_LIMIT_MAX - 1)
+enum nft_connlimit_flags {
+  NFT_CONNLIMIT_F_INV = (1 << 0),
+};
+enum nft_connlimit_attributes {
+  NFTA_CONNLIMIT_UNSPEC,
+  NFTA_CONNLIMIT_COUNT,
+  NFTA_CONNLIMIT_FLAGS,
+  __NFTA_CONNLIMIT_MAX
+};
+#define NFTA_CONNLIMIT_MAX (__NFTA_CONNLIMIT_MAX - 1)
 enum nft_counter_attributes {
   NFTA_COUNTER_UNSPEC,
   NFTA_COUNTER_BYTES,
@@ -527,6 +558,19 @@
   __NFTA_LOG_MAX
 };
 #define NFTA_LOG_MAX (__NFTA_LOG_MAX - 1)
+enum nft_log_level {
+  NFT_LOGLEVEL_EMERG,
+  NFT_LOGLEVEL_ALERT,
+  NFT_LOGLEVEL_CRIT,
+  NFT_LOGLEVEL_ERR,
+  NFT_LOGLEVEL_WARNING,
+  NFT_LOGLEVEL_NOTICE,
+  NFT_LOGLEVEL_INFO,
+  NFT_LOGLEVEL_DEBUG,
+  NFT_LOGLEVEL_AUDIT,
+  __NFT_LOGLEVEL_MAX
+};
+#define NFT_LOGLEVEL_MAX (__NFT_LOGLEVEL_MAX + 1)
 enum nft_queue_attributes {
   NFTA_QUEUE_UNSPEC,
   NFTA_QUEUE_NUM,
@@ -588,6 +632,14 @@
   __NFTA_NAT_MAX
 };
 #define NFTA_NAT_MAX (__NFTA_NAT_MAX - 1)
+enum nft_tproxy_attributes {
+  NFTA_TPROXY_UNSPEC,
+  NFTA_TPROXY_FAMILY,
+  NFTA_TPROXY_REG_ADDR,
+  NFTA_TPROXY_REG_PORT,
+  __NFTA_TPROXY_MAX
+};
+#define NFTA_TPROXY_MAX (__NFTA_TPROXY_MAX - 1)
 enum nft_masq_attributes {
   NFTA_MASQ_UNSPEC,
   NFTA_MASQ_FLAGS,
@@ -614,6 +666,8 @@
 enum nft_fwd_attributes {
   NFTA_FWD_UNSPEC,
   NFTA_FWD_SREG_DEV,
+  NFTA_FWD_SREG_ADDR,
+  NFTA_FWD_NFPROTO,
   __NFTA_FWD_MAX
 };
 #define NFTA_FWD_MAX (__NFTA_FWD_MAX - 1)
@@ -667,12 +721,23 @@
   __NFTA_CT_HELPER_MAX,
 };
 #define NFTA_CT_HELPER_MAX (__NFTA_CT_HELPER_MAX - 1)
+enum nft_ct_timeout_timeout_attributes {
+  NFTA_CT_TIMEOUT_UNSPEC,
+  NFTA_CT_TIMEOUT_L3PROTO,
+  NFTA_CT_TIMEOUT_L4PROTO,
+  NFTA_CT_TIMEOUT_DATA,
+  __NFTA_CT_TIMEOUT_MAX,
+};
+#define NFTA_CT_TIMEOUT_MAX (__NFTA_CT_TIMEOUT_MAX - 1)
 #define NFT_OBJECT_UNSPEC 0
 #define NFT_OBJECT_COUNTER 1
 #define NFT_OBJECT_QUOTA 2
 #define NFT_OBJECT_CT_HELPER 3
 #define NFT_OBJECT_LIMIT 4
-#define __NFT_OBJECT_MAX 5
+#define NFT_OBJECT_CONNLIMIT 5
+#define NFT_OBJECT_TUNNEL 6
+#define NFT_OBJECT_CT_TIMEOUT 7
+#define __NFT_OBJECT_MAX 8
 #define NFT_OBJECT_MAX (__NFT_OBJECT_MAX - 1)
 enum nft_object_attributes {
   NFTA_OBJ_UNSPEC,
@@ -705,6 +770,12 @@
   __NFTA_FLOWTABLE_HOOK_MAX
 };
 #define NFTA_FLOWTABLE_HOOK_MAX (__NFTA_FLOWTABLE_HOOK_MAX - 1)
+enum nft_osf_attributes {
+  NFTA_OSF_UNSPEC,
+  NFTA_OSF_DREG,
+  __NFTA_OSF_MAX,
+};
+#define NFTA_OSF_MAX (__NFTA_OSF_MAX - 1)
 enum nft_devices_attributes {
   NFTA_DEVICE_UNSPEC,
   NFTA_DEVICE_NAME,
@@ -747,6 +818,8 @@
   NFTA_NG_MODULUS,
   NFTA_NG_TYPE,
   NFTA_NG_OFFSET,
+  NFTA_NG_SET_NAME,
+  NFTA_NG_SET_ID,
   __NFTA_NG_MAX
 };
 #define NFTA_NG_MAX (__NFTA_NG_MAX - 1)
@@ -756,4 +829,74 @@
   __NFT_NG_MAX
 };
 #define NFT_NG_MAX (__NFT_NG_MAX - 1)
+enum nft_tunnel_key_ip_attributes {
+  NFTA_TUNNEL_KEY_IP_UNSPEC,
+  NFTA_TUNNEL_KEY_IP_SRC,
+  NFTA_TUNNEL_KEY_IP_DST,
+  __NFTA_TUNNEL_KEY_IP_MAX
+};
+#define NFTA_TUNNEL_KEY_IP_MAX (__NFTA_TUNNEL_KEY_IP_MAX - 1)
+enum nft_tunnel_ip6_attributes {
+  NFTA_TUNNEL_KEY_IP6_UNSPEC,
+  NFTA_TUNNEL_KEY_IP6_SRC,
+  NFTA_TUNNEL_KEY_IP6_DST,
+  NFTA_TUNNEL_KEY_IP6_FLOWLABEL,
+  __NFTA_TUNNEL_KEY_IP6_MAX
+};
+#define NFTA_TUNNEL_KEY_IP6_MAX (__NFTA_TUNNEL_KEY_IP6_MAX - 1)
+enum nft_tunnel_opts_attributes {
+  NFTA_TUNNEL_KEY_OPTS_UNSPEC,
+  NFTA_TUNNEL_KEY_OPTS_VXLAN,
+  NFTA_TUNNEL_KEY_OPTS_ERSPAN,
+  __NFTA_TUNNEL_KEY_OPTS_MAX
+};
+#define NFTA_TUNNEL_KEY_OPTS_MAX (__NFTA_TUNNEL_KEY_OPTS_MAX - 1)
+enum nft_tunnel_opts_vxlan_attributes {
+  NFTA_TUNNEL_KEY_VXLAN_UNSPEC,
+  NFTA_TUNNEL_KEY_VXLAN_GBP,
+  __NFTA_TUNNEL_KEY_VXLAN_MAX
+};
+#define NFTA_TUNNEL_KEY_VXLAN_MAX (__NFTA_TUNNEL_KEY_VXLAN_MAX - 1)
+enum nft_tunnel_opts_erspan_attributes {
+  NFTA_TUNNEL_KEY_ERSPAN_UNSPEC,
+  NFTA_TUNNEL_KEY_ERSPAN_VERSION,
+  NFTA_TUNNEL_KEY_ERSPAN_V1_INDEX,
+  NFTA_TUNNEL_KEY_ERSPAN_V2_HWID,
+  NFTA_TUNNEL_KEY_ERSPAN_V2_DIR,
+  __NFTA_TUNNEL_KEY_ERSPAN_MAX
+};
+#define NFTA_TUNNEL_KEY_ERSPAN_MAX (__NFTA_TUNNEL_KEY_ERSPAN_MAX - 1)
+enum nft_tunnel_flags {
+  NFT_TUNNEL_F_ZERO_CSUM_TX = (1 << 0),
+  NFT_TUNNEL_F_DONT_FRAGMENT = (1 << 1),
+  NFT_TUNNEL_F_SEQ_NUMBER = (1 << 2),
+};
+#define NFT_TUNNEL_F_MASK (NFT_TUNNEL_F_ZERO_CSUM_TX | NFT_TUNNEL_F_DONT_FRAGMENT | NFT_TUNNEL_F_SEQ_NUMBER)
+enum nft_tunnel_key_attributes {
+  NFTA_TUNNEL_KEY_UNSPEC,
+  NFTA_TUNNEL_KEY_ID,
+  NFTA_TUNNEL_KEY_IP,
+  NFTA_TUNNEL_KEY_IP6,
+  NFTA_TUNNEL_KEY_FLAGS,
+  NFTA_TUNNEL_KEY_TOS,
+  NFTA_TUNNEL_KEY_TTL,
+  NFTA_TUNNEL_KEY_SPORT,
+  NFTA_TUNNEL_KEY_DPORT,
+  NFTA_TUNNEL_KEY_OPTS,
+  __NFTA_TUNNEL_KEY_MAX
+};
+#define NFTA_TUNNEL_KEY_MAX (__NFTA_TUNNEL_KEY_MAX - 1)
+enum nft_tunnel_keys {
+  NFT_TUNNEL_PATH,
+  NFT_TUNNEL_ID,
+  __NFT_TUNNEL_MAX
+};
+#define NFT_TUNNEL_MAX (__NFT_TUNNEL_MAX - 1)
+enum nft_tunnel_attributes {
+  NFTA_TUNNEL_UNSPEC,
+  NFTA_TUNNEL_KEY,
+  NFTA_TUNNEL_DREG,
+  __NFTA_TUNNEL_MAX
+};
+#define NFTA_TUNNEL_MAX (__NFTA_TUNNEL_MAX - 1)
 #endif
diff --git a/libc/kernel/uapi/linux/netfilter/nfnetlink_conntrack.h b/libc/kernel/uapi/linux/netfilter/nfnetlink_conntrack.h
index 1347820..4981fc1 100644
--- a/libc/kernel/uapi/linux/netfilter/nfnetlink_conntrack.h
+++ b/libc/kernel/uapi/linux/netfilter/nfnetlink_conntrack.h
@@ -253,6 +253,7 @@
 enum ctattr_stats_global {
   CTA_STATS_GLOBAL_UNSPEC,
   CTA_STATS_GLOBAL_ENTRIES,
+  CTA_STATS_GLOBAL_MAX_ENTRIES,
   __CTA_STATS_GLOBAL_MAX,
 };
 #define CTA_STATS_GLOBAL_MAX (__CTA_STATS_GLOBAL_MAX - 1)
diff --git a/libc/kernel/uapi/linux/netfilter/nfnetlink_osf.h b/libc/kernel/uapi/linux/netfilter/nfnetlink_osf.h
new file mode 100644
index 0000000..3f930da
--- /dev/null
+++ b/libc/kernel/uapi/linux/netfilter/nfnetlink_osf.h
@@ -0,0 +1,97 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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 _NF_OSF_H
+#define _NF_OSF_H
+#include <linux/types.h>
+#include <linux/ip.h>
+#include <linux/tcp.h>
+#define MAXGENRELEN 32
+#define NF_OSF_GENRE (1 << 0)
+#define NF_OSF_TTL (1 << 1)
+#define NF_OSF_LOG (1 << 2)
+#define NF_OSF_INVERT (1 << 3)
+#define NF_OSF_LOGLEVEL_ALL 0
+#define NF_OSF_LOGLEVEL_FIRST 1
+#define NF_OSF_LOGLEVEL_ALL_KNOWN 2
+#define NF_OSF_TTL_TRUE 0
+#define NF_OSF_TTL_LESS 1
+#define NF_OSF_TTL_NOCHECK 2
+#define NF_OSF_FLAGMASK (NF_OSF_GENRE | NF_OSF_TTL | NF_OSF_LOG | NF_OSF_INVERT)
+struct nf_osf_wc {
+  __u32 wc;
+  __u32 val;
+};
+struct nf_osf_opt {
+  __u16 kind, length;
+  struct nf_osf_wc wc;
+};
+struct nf_osf_info {
+  char genre[MAXGENRELEN];
+  __u32 len;
+  __u32 flags;
+  __u32 loglevel;
+  __u32 ttl;
+};
+struct nf_osf_user_finger {
+  struct nf_osf_wc wss;
+  __u8 ttl, df;
+  __u16 ss, mss;
+  __u16 opt_num;
+  char genre[MAXGENRELEN];
+  char version[MAXGENRELEN];
+  char subtype[MAXGENRELEN];
+  struct nf_osf_opt opt[MAX_IPOPTLEN];
+};
+struct nf_osf_nlmsg {
+  struct nf_osf_user_finger f;
+  struct iphdr ip;
+  struct tcphdr tcp;
+};
+enum iana_options {
+  OSFOPT_EOL = 0,
+  OSFOPT_NOP,
+  OSFOPT_MSS,
+  OSFOPT_WSO,
+  OSFOPT_SACKP,
+  OSFOPT_SACK,
+  OSFOPT_ECHO,
+  OSFOPT_ECHOREPLY,
+  OSFOPT_TS,
+  OSFOPT_POCP,
+  OSFOPT_POSP,
+  OSFOPT_EMPTY = 255,
+};
+enum nf_osf_window_size_options {
+  OSF_WSS_PLAIN = 0,
+  OSF_WSS_MSS,
+  OSF_WSS_MTU,
+  OSF_WSS_MODULO,
+  OSF_WSS_MAX,
+};
+enum nf_osf_attr_type {
+  OSF_ATTR_UNSPEC,
+  OSF_ATTR_FINGER,
+  OSF_ATTR_MAX,
+};
+enum nf_osf_msg_types {
+  OSF_MSG_ADD,
+  OSF_MSG_REMOVE,
+  OSF_MSG_MAX,
+};
+#endif
diff --git a/libc/kernel/uapi/linux/netfilter/xt_osf.h b/libc/kernel/uapi/linux/netfilter/xt_osf.h
index 50156ef..892ad40 100644
--- a/libc/kernel/uapi/linux/netfilter/xt_osf.h
+++ b/libc/kernel/uapi/linux/netfilter/xt_osf.h
@@ -19,78 +19,24 @@
 #ifndef _XT_OSF_H
 #define _XT_OSF_H
 #include <linux/types.h>
-#include <linux/ip.h>
-#include <linux/tcp.h>
-#define MAXGENRELEN 32
-#define XT_OSF_GENRE (1 << 0)
-#define XT_OSF_TTL (1 << 1)
-#define XT_OSF_LOG (1 << 2)
-#define XT_OSF_INVERT (1 << 3)
-#define XT_OSF_LOGLEVEL_ALL 0
-#define XT_OSF_LOGLEVEL_FIRST 1
-#define XT_OSF_LOGLEVEL_ALL_KNOWN 2
-#define XT_OSF_TTL_TRUE 0
-#define XT_OSF_TTL_LESS 1
-#define XT_OSF_TTL_NOCHECK 2
-struct xt_osf_info {
-  char genre[MAXGENRELEN];
-  __u32 len;
-  __u32 flags;
-  __u32 loglevel;
-  __u32 ttl;
-};
-struct xt_osf_wc {
-  __u32 wc;
-  __u32 val;
-};
-struct xt_osf_opt {
-  __u16 kind, length;
-  struct xt_osf_wc wc;
-};
-struct xt_osf_user_finger {
-  struct xt_osf_wc wss;
-  __u8 ttl, df;
-  __u16 ss, mss;
-  __u16 opt_num;
-  char genre[MAXGENRELEN];
-  char version[MAXGENRELEN];
-  char subtype[MAXGENRELEN];
-  struct xt_osf_opt opt[MAX_IPOPTLEN];
-};
-struct xt_osf_nlmsg {
-  struct xt_osf_user_finger f;
-  struct iphdr ip;
-  struct tcphdr tcp;
-};
-enum iana_options {
-  OSFOPT_EOL = 0,
-  OSFOPT_NOP,
-  OSFOPT_MSS,
-  OSFOPT_WSO,
-  OSFOPT_SACKP,
-  OSFOPT_SACK,
-  OSFOPT_ECHO,
-  OSFOPT_ECHOREPLY,
-  OSFOPT_TS,
-  OSFOPT_POCP,
-  OSFOPT_POSP,
-  OSFOPT_EMPTY = 255,
-};
-enum xt_osf_window_size_options {
-  OSF_WSS_PLAIN = 0,
-  OSF_WSS_MSS,
-  OSF_WSS_MTU,
-  OSF_WSS_MODULO,
-  OSF_WSS_MAX,
-};
-enum xt_osf_msg_types {
-  OSF_MSG_ADD,
-  OSF_MSG_REMOVE,
-  OSF_MSG_MAX,
-};
-enum xt_osf_attr_type {
-  OSF_ATTR_UNSPEC,
-  OSF_ATTR_FINGER,
-  OSF_ATTR_MAX,
-};
+#include <linux/netfilter/nfnetlink_osf.h>
+#define XT_OSF_GENRE NF_OSF_GENRE
+#define XT_OSF_INVERT NF_OSF_INVERT
+#define XT_OSF_TTL NF_OSF_TTL
+#define XT_OSF_LOG NF_OSF_LOG
+#define XT_OSF_LOGLEVEL_ALL NF_OSF_LOGLEVEL_ALL
+#define XT_OSF_LOGLEVEL_FIRST NF_OSF_LOGLEVEL_FIRST
+#define XT_OSF_LOGLEVEL_ALL_KNOWN NF_OSF_LOGLEVEL_ALL_KNOWN
+#define XT_OSF_TTL_TRUE NF_OSF_TTL_TRUE
+#define XT_OSF_TTL_NOCHECK NF_OSF_TTL_NOCHECK
+#define XT_OSF_TTL_LESS NF_OSF_TTL_LESS
+#define xt_osf_wc nf_osf_wc
+#define xt_osf_opt nf_osf_opt
+#define xt_osf_info nf_osf_info
+#define xt_osf_user_finger nf_osf_user_finger
+#define xt_osf_finger nf_osf_finger
+#define xt_osf_nlmsg nf_osf_nlmsg
+#define xt_osf_window_size_options nf_osf_window_size_options
+#define xt_osf_attr_type nf_osf_attr_type
+#define xt_osf_msg_types nf_osf_msg_types
 #endif
diff --git a/libc/kernel/uapi/linux/netfilter_bridge.h b/libc/kernel/uapi/linux/netfilter_bridge.h
index 57de0e9..6da98f5 100644
--- a/libc/kernel/uapi/linux/netfilter_bridge.h
+++ b/libc/kernel/uapi/linux/netfilter_bridge.h
@@ -30,4 +30,14 @@
 #define NF_BR_POST_ROUTING 4
 #define NF_BR_BROUTING 5
 #define NF_BR_NUMHOOKS 6
+enum nf_br_hook_priorities {
+  NF_BR_PRI_FIRST = INT_MIN,
+  NF_BR_PRI_NAT_DST_BRIDGED = - 300,
+  NF_BR_PRI_FILTER_BRIDGED = - 200,
+  NF_BR_PRI_BRNF = 0,
+  NF_BR_PRI_NAT_DST_OTHER = 100,
+  NF_BR_PRI_FILTER_OTHER = 200,
+  NF_BR_PRI_NAT_SRC = 300,
+  NF_BR_PRI_LAST = INT_MAX,
+};
 #endif
diff --git a/libc/kernel/uapi/linux/netfilter_ipv6/ip6t_srh.h b/libc/kernel/uapi/linux/netfilter_ipv6/ip6t_srh.h
index 70fd3e4..a9474e7 100644
--- a/libc/kernel/uapi/linux/netfilter_ipv6/ip6t_srh.h
+++ b/libc/kernel/uapi/linux/netfilter_ipv6/ip6t_srh.h
@@ -31,7 +31,10 @@
 #define IP6T_SRH_LAST_GT 0x0100
 #define IP6T_SRH_LAST_LT 0x0200
 #define IP6T_SRH_TAG 0x0400
-#define IP6T_SRH_MASK 0x07FF
+#define IP6T_SRH_PSID 0x0800
+#define IP6T_SRH_NSID 0x1000
+#define IP6T_SRH_LSID 0x2000
+#define IP6T_SRH_MASK 0x3FFF
 #define IP6T_SRH_INV_NEXTHDR 0x0001
 #define IP6T_SRH_INV_LEN_EQ 0x0002
 #define IP6T_SRH_INV_LEN_GT 0x0004
@@ -43,7 +46,10 @@
 #define IP6T_SRH_INV_LAST_GT 0x0100
 #define IP6T_SRH_INV_LAST_LT 0x0200
 #define IP6T_SRH_INV_TAG 0x0400
-#define IP6T_SRH_INV_MASK 0x07FF
+#define IP6T_SRH_INV_PSID 0x0800
+#define IP6T_SRH_INV_NSID 0x1000
+#define IP6T_SRH_INV_LSID 0x2000
+#define IP6T_SRH_INV_MASK 0x3FFF
 struct ip6t_srh {
   __u8 next_hdr;
   __u8 hdr_len;
@@ -53,4 +59,19 @@
   __u16 mt_flags;
   __u16 mt_invflags;
 };
+struct ip6t_srh1 {
+  __u8 next_hdr;
+  __u8 hdr_len;
+  __u8 segs_left;
+  __u8 last_entry;
+  __u16 tag;
+  struct in6_addr psid_addr;
+  struct in6_addr nsid_addr;
+  struct in6_addr lsid_addr;
+  struct in6_addr psid_msk;
+  struct in6_addr nsid_msk;
+  struct in6_addr lsid_msk;
+  __u16 mt_flags;
+  __u16 mt_invflags;
+};
 #endif
diff --git a/libc/kernel/uapi/linux/nl80211.h b/libc/kernel/uapi/linux/nl80211.h
index 349b471..1f2f77d 100644
--- a/libc/kernel/uapi/linux/nl80211.h
+++ b/libc/kernel/uapi/linux/nl80211.h
@@ -444,6 +444,11 @@
   NL80211_ATTR_NSS,
   NL80211_ATTR_ACK_SIGNAL,
   NL80211_ATTR_CONTROL_PORT_OVER_NL80211,
+  NL80211_ATTR_TXQ_STATS,
+  NL80211_ATTR_TXQ_LIMIT,
+  NL80211_ATTR_TXQ_MEMORY_LIMIT,
+  NL80211_ATTR_TXQ_QUANTUM,
+  NL80211_ATTR_HE_CAPABILITY,
   __NL80211_ATTR_AFTER_LAST,
   NUM_NL80211_ATTR = __NL80211_ATTR_AFTER_LAST,
   NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1
@@ -482,6 +487,8 @@
 #define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24
 #define NL80211_HT_CAPABILITY_LEN 26
 #define NL80211_VHT_CAPABILITY_LEN 12
+#define NL80211_HE_MIN_CAPABILITY_LEN 16
+#define NL80211_HE_MAX_CAPABILITY_LEN 51
 #define NL80211_MAX_NR_CIPHER_SUITES 5
 #define NL80211_MAX_NR_AKM_SUITES 2
 #define NL80211_MIN_REMAIN_ON_CHANNEL_TIME 10
@@ -526,6 +533,20 @@
   __u32 mask;
   __u32 set;
 } __attribute__((packed));
+enum nl80211_he_gi {
+  NL80211_RATE_INFO_HE_GI_0_8,
+  NL80211_RATE_INFO_HE_GI_1_6,
+  NL80211_RATE_INFO_HE_GI_3_2,
+};
+enum nl80211_he_ru_alloc {
+  NL80211_RATE_INFO_HE_RU_ALLOC_26,
+  NL80211_RATE_INFO_HE_RU_ALLOC_52,
+  NL80211_RATE_INFO_HE_RU_ALLOC_106,
+  NL80211_RATE_INFO_HE_RU_ALLOC_242,
+  NL80211_RATE_INFO_HE_RU_ALLOC_484,
+  NL80211_RATE_INFO_HE_RU_ALLOC_996,
+  NL80211_RATE_INFO_HE_RU_ALLOC_2x996,
+};
 enum nl80211_rate_info {
   __NL80211_RATE_INFO_INVALID,
   NL80211_RATE_INFO_BITRATE,
@@ -540,6 +561,11 @@
   NL80211_RATE_INFO_160_MHZ_WIDTH,
   NL80211_RATE_INFO_10_MHZ_WIDTH,
   NL80211_RATE_INFO_5_MHZ_WIDTH,
+  NL80211_RATE_INFO_HE_MCS,
+  NL80211_RATE_INFO_HE_NSS,
+  NL80211_RATE_INFO_HE_GI,
+  NL80211_RATE_INFO_HE_DCM,
+  NL80211_RATE_INFO_HE_RU_ALLOC,
   __NL80211_RATE_INFO_AFTER_LAST,
   NL80211_RATE_INFO_MAX = __NL80211_RATE_INFO_AFTER_LAST - 1
 };
@@ -589,6 +615,7 @@
   NL80211_STA_INFO_RX_DURATION,
   NL80211_STA_INFO_PAD,
   NL80211_STA_INFO_ACK_SIGNAL,
+  NL80211_STA_INFO_DATA_ACK_SIGNAL_AVG,
   __NL80211_STA_INFO_AFTER_LAST,
   NL80211_STA_INFO_MAX = __NL80211_STA_INFO_AFTER_LAST - 1
 };
@@ -599,9 +626,26 @@
   NL80211_TID_STATS_TX_MSDU_RETRIES,
   NL80211_TID_STATS_TX_MSDU_FAILED,
   NL80211_TID_STATS_PAD,
+  NL80211_TID_STATS_TXQ_STATS,
   NUM_NL80211_TID_STATS,
   NL80211_TID_STATS_MAX = NUM_NL80211_TID_STATS - 1
 };
+enum nl80211_txq_stats {
+  __NL80211_TXQ_STATS_INVALID,
+  NL80211_TXQ_STATS_BACKLOG_BYTES,
+  NL80211_TXQ_STATS_BACKLOG_PACKETS,
+  NL80211_TXQ_STATS_FLOWS,
+  NL80211_TXQ_STATS_DROPS,
+  NL80211_TXQ_STATS_ECN_MARKS,
+  NL80211_TXQ_STATS_OVERLIMIT,
+  NL80211_TXQ_STATS_OVERMEMORY,
+  NL80211_TXQ_STATS_COLLISIONS,
+  NL80211_TXQ_STATS_TX_BYTES,
+  NL80211_TXQ_STATS_TX_PACKETS,
+  NL80211_TXQ_STATS_MAX_FLOWS,
+  NUM_NL80211_TXQ_STATS,
+  NL80211_TXQ_STATS_MAX = NUM_NL80211_TXQ_STATS - 1
+};
 enum nl80211_mpath_flags {
   NL80211_MPATH_FLAG_ACTIVE = 1 << 0,
   NL80211_MPATH_FLAG_RESOLVING = 1 << 1,
@@ -621,6 +665,16 @@
   __NL80211_MPATH_INFO_AFTER_LAST,
   NL80211_MPATH_INFO_MAX = __NL80211_MPATH_INFO_AFTER_LAST - 1
 };
+enum nl80211_band_iftype_attr {
+  __NL80211_BAND_IFTYPE_ATTR_INVALID,
+  NL80211_BAND_IFTYPE_ATTR_IFTYPES,
+  NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC,
+  NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY,
+  NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET,
+  NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE,
+  __NL80211_BAND_IFTYPE_ATTR_AFTER_LAST,
+  NL80211_BAND_IFTYPE_ATTR_MAX = __NL80211_BAND_IFTYPE_ATTR_AFTER_LAST - 1
+};
 enum nl80211_band_attr {
   __NL80211_BAND_ATTR_INVALID,
   NL80211_BAND_ATTR_FREQS,
@@ -631,10 +685,20 @@
   NL80211_BAND_ATTR_HT_AMPDU_DENSITY,
   NL80211_BAND_ATTR_VHT_MCS_SET,
   NL80211_BAND_ATTR_VHT_CAPA,
+  NL80211_BAND_ATTR_IFTYPE_DATA,
   __NL80211_BAND_ATTR_AFTER_LAST,
   NL80211_BAND_ATTR_MAX = __NL80211_BAND_ATTR_AFTER_LAST - 1
 };
 #define NL80211_BAND_ATTR_HT_CAPA NL80211_BAND_ATTR_HT_CAPA
+enum nl80211_wmm_rule {
+  __NL80211_WMMR_INVALID,
+  NL80211_WMMR_CW_MIN,
+  NL80211_WMMR_CW_MAX,
+  NL80211_WMMR_AIFSN,
+  NL80211_WMMR_TXOP,
+  __NL80211_WMMR_LAST,
+  NL80211_WMMR_MAX = __NL80211_WMMR_LAST - 1
+};
 enum nl80211_frequency_attr {
   __NL80211_FREQUENCY_ATTR_INVALID,
   NL80211_FREQUENCY_ATTR_FREQ,
@@ -654,6 +718,7 @@
   NL80211_FREQUENCY_ATTR_IR_CONCURRENT,
   NL80211_FREQUENCY_ATTR_NO_20MHZ,
   NL80211_FREQUENCY_ATTR_NO_10MHZ,
+  NL80211_FREQUENCY_ATTR_WMM,
   __NL80211_FREQUENCY_ATTR_AFTER_LAST,
   NL80211_FREQUENCY_ATTR_MAX = __NL80211_FREQUENCY_ATTR_AFTER_LAST - 1
 };
@@ -1218,6 +1283,10 @@
   NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN,
   NL80211_EXT_FEATURE_DFS_OFFLOAD,
   NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211,
+  NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT,
+  NL80211_EXT_FEATURE_TXQS,
+  NL80211_EXT_FEATURE_SCAN_RANDOM_SN,
+  NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT,
   NUM_NL80211_EXT_FEATURES,
   MAX_NL80211_EXT_FEATURES = NUM_NL80211_EXT_FEATURES - 1
 };
@@ -1249,6 +1318,8 @@
   NL80211_SCAN_FLAG_LOW_SPAN = 1 << 8,
   NL80211_SCAN_FLAG_LOW_POWER = 1 << 9,
   NL80211_SCAN_FLAG_HIGH_ACCURACY = 1 << 10,
+  NL80211_SCAN_FLAG_RANDOM_SN = 1 << 11,
+  NL80211_SCAN_FLAG_MIN_PREQ_CONTENT = 1 << 12,
 };
 enum nl80211_acl_policy {
   NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED,
diff --git a/libc/kernel/uapi/linux/omap3isp.h b/libc/kernel/uapi/linux/omap3isp.h
index 66942e7..d2eceb7 100644
--- a/libc/kernel/uapi/linux/omap3isp.h
+++ b/libc/kernel/uapi/linux/omap3isp.h
@@ -26,6 +26,7 @@
 #define VIDIOC_OMAP3ISP_HIST_CFG _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct omap3isp_hist_config)
 #define VIDIOC_OMAP3ISP_AF_CFG _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct omap3isp_h3a_af_config)
 #define VIDIOC_OMAP3ISP_STAT_REQ _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct omap3isp_stat_data)
+#define VIDIOC_OMAP3ISP_STAT_REQ_TIME32 _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct omap3isp_stat_data_time32)
 #define VIDIOC_OMAP3ISP_STAT_EN _IOWR('V', BASE_VIDIOC_PRIVATE + 7, unsigned long)
 #define V4L2_EVENT_OMAP3ISP_CLASS (V4L2_EVENT_PRIVATE_START | 0x100)
 #define V4L2_EVENT_OMAP3ISP_AEWB (V4L2_EVENT_OMAP3ISP_CLASS | 0x1)
diff --git a/libc/kernel/uapi/linux/openvswitch.h b/libc/kernel/uapi/linux/openvswitch.h
index 1dba16e..7e75ac6 100644
--- a/libc/kernel/uapi/linux/openvswitch.h
+++ b/libc/kernel/uapi/linux/openvswitch.h
@@ -425,6 +425,7 @@
   OVS_ACTION_ATTR_PUSH_NSH,
   OVS_ACTION_ATTR_POP_NSH,
   OVS_ACTION_ATTR_METER,
+  OVS_ACTION_ATTR_CLONE,
   __OVS_ACTION_ATTR_MAX,
 };
 #define OVS_ACTION_ATTR_MAX (__OVS_ACTION_ATTR_MAX - 1)
@@ -467,4 +468,25 @@
   __OVS_METER_BAND_TYPE_MAX
 };
 #define OVS_METER_BAND_TYPE_MAX (__OVS_METER_BAND_TYPE_MAX - 1)
+#define OVS_CT_LIMIT_FAMILY "ovs_ct_limit"
+#define OVS_CT_LIMIT_MCGROUP "ovs_ct_limit"
+#define OVS_CT_LIMIT_VERSION 0x1
+enum ovs_ct_limit_cmd {
+  OVS_CT_LIMIT_CMD_UNSPEC,
+  OVS_CT_LIMIT_CMD_SET,
+  OVS_CT_LIMIT_CMD_DEL,
+  OVS_CT_LIMIT_CMD_GET
+};
+enum ovs_ct_limit_attr {
+  OVS_CT_LIMIT_ATTR_UNSPEC,
+  OVS_CT_LIMIT_ATTR_ZONE_LIMIT,
+  __OVS_CT_LIMIT_ATTR_MAX
+};
+#define OVS_CT_LIMIT_ATTR_MAX (__OVS_CT_LIMIT_ATTR_MAX - 1)
+#define OVS_ZONE_LIMIT_DEFAULT_ZONE - 1
+struct ovs_zone_limit {
+  int zone_id;
+  __u32 limit;
+  __u32 count;
+};
 #endif
diff --git a/libc/kernel/uapi/linux/pci_regs.h b/libc/kernel/uapi/linux/pci_regs.h
index 4ef3837..7b234f5 100644
--- a/libc/kernel/uapi/linux/pci_regs.h
+++ b/libc/kernel/uapi/linux/pci_regs.h
@@ -416,6 +416,8 @@
 #define PCI_EXP_DEVCTL_READRQ_256B 0x1000
 #define PCI_EXP_DEVCTL_READRQ_512B 0x2000
 #define PCI_EXP_DEVCTL_READRQ_1024B 0x3000
+#define PCI_EXP_DEVCTL_READRQ_2048B 0x4000
+#define PCI_EXP_DEVCTL_READRQ_4096B 0x5000
 #define PCI_EXP_DEVCTL_BCR_FLR 0x8000
 #define PCI_EXP_DEVSTA 10
 #define PCI_EXP_DEVSTA_CED 0x0001
@@ -536,6 +538,7 @@
 #define PCI_EXP_DEVCAP2_OBFF_MASK 0x000c0000
 #define PCI_EXP_DEVCAP2_OBFF_MSG 0x00040000
 #define PCI_EXP_DEVCAP2_OBFF_WAKE 0x00080000
+#define PCI_EXP_DEVCAP2_EE_PREFIX 0x00200000
 #define PCI_EXP_DEVCTL2 40
 #define PCI_EXP_DEVCTL2_COMP_TIMEOUT 0x000f
 #define PCI_EXP_DEVCTL2_COMP_TMOUT_DIS 0x0010
@@ -557,6 +560,11 @@
 #define PCI_EXP_LNKCAP2_SLS_16_0GB 0x00000010
 #define PCI_EXP_LNKCAP2_CROSSLINK 0x00000100
 #define PCI_EXP_LNKCTL2 48
+#define PCI_EXP_LNKCTL2_TLS 0x000f
+#define PCI_EXP_LNKCTL2_TLS_2_5GT 0x0001
+#define PCI_EXP_LNKCTL2_TLS_5_0GT 0x0002
+#define PCI_EXP_LNKCTL2_TLS_8_0GT 0x0003
+#define PCI_EXP_LNKCTL2_TLS_16_0GT 0x0004
 #define PCI_EXP_LNKSTA2 50
 #define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 52
 #define PCI_EXP_SLTCAP2 52
@@ -814,6 +822,7 @@
 #define PCI_REBAR_CTRL_NBAR_MASK 0x000000E0
 #define PCI_REBAR_CTRL_NBAR_SHIFT 5
 #define PCI_REBAR_CTRL_BAR_SIZE 0x00001F00
+#define PCI_REBAR_CTRL_BAR_SHIFT 8
 #define PCI_DPA_CAP 4
 #define PCI_DPA_CAP_SUBSTATE_MASK 0x1F
 #define PCI_DPA_BASE_SIZEOF 16
@@ -833,6 +842,7 @@
 #define PCI_EXP_DPC_RP_PIO_LOG_SIZE 0x0F00
 #define PCI_EXP_DPC_CAP_DL_ACTIVE 0x1000
 #define PCI_EXP_DPC_CTL 6
+#define PCI_EXP_DPC_CTL_EN_FATAL 0x0001
 #define PCI_EXP_DPC_CTL_EN_NONFATAL 0x0002
 #define PCI_EXP_DPC_CTL_INT_EN 0x0008
 #define PCI_EXP_DPC_STATUS 8
diff --git a/libc/kernel/uapi/linux/pcitest.h b/libc/kernel/uapi/linux/pcitest.h
index e6c0264..c6112d0 100644
--- a/libc/kernel/uapi/linux/pcitest.h
+++ b/libc/kernel/uapi/linux/pcitest.h
@@ -24,4 +24,7 @@
 #define PCITEST_WRITE _IOW('P', 0x4, unsigned long)
 #define PCITEST_READ _IOW('P', 0x5, unsigned long)
 #define PCITEST_COPY _IOW('P', 0x6, unsigned long)
+#define PCITEST_MSIX _IOW('P', 0x7, int)
+#define PCITEST_SET_IRQTYPE _IOW('P', 0x8, int)
+#define PCITEST_GET_IRQTYPE _IO('P', 0x9)
 #endif
diff --git a/libc/kernel/uapi/linux/perf_event.h b/libc/kernel/uapi/linux/perf_event.h
index dc1e32c..c106b5b 100644
--- a/libc/kernel/uapi/linux/perf_event.h
+++ b/libc/kernel/uapi/linux/perf_event.h
@@ -100,6 +100,7 @@
   PERF_SAMPLE_REGS_INTR = 1U << 18,
   PERF_SAMPLE_PHYS_ADDR = 1U << 19,
   PERF_SAMPLE_MAX = 1U << 20,
+  __PERF_SAMPLE_CALLCHAIN_EARLY = 1ULL << 63,
 };
 enum perf_branch_sample_type_shift {
   PERF_SAMPLE_BRANCH_USER_SHIFT = 0,
diff --git a/libc/kernel/uapi/linux/pkt_cls.h b/libc/kernel/uapi/linux/pkt_cls.h
index 113469c..1ede892 100644
--- a/libc/kernel/uapi/linux/pkt_cls.h
+++ b/libc/kernel/uapi/linux/pkt_cls.h
@@ -50,12 +50,15 @@
 #define TC_ACT_REPEAT 6
 #define TC_ACT_REDIRECT 7
 #define TC_ACT_TRAP 8
+#define TC_ACT_VALUE_MAX TC_ACT_TRAP
 #define __TC_ACT_EXT_SHIFT 28
 #define __TC_ACT_EXT(local) ((local) << __TC_ACT_EXT_SHIFT)
 #define TC_ACT_EXT_VAL_MASK ((1 << __TC_ACT_EXT_SHIFT) - 1)
-#define TC_ACT_EXT_CMP(combined,opcode) (((combined) & (~TC_ACT_EXT_VAL_MASK)) == opcode)
+#define TC_ACT_EXT_OPCODE(combined) ((combined) & (~TC_ACT_EXT_VAL_MASK))
+#define TC_ACT_EXT_CMP(combined,opcode) (TC_ACT_EXT_OPCODE(combined) == opcode)
 #define TC_ACT_JUMP __TC_ACT_EXT(1)
 #define TC_ACT_GOTO_CHAIN __TC_ACT_EXT(2)
+#define TC_ACT_EXT_OPCODE_MAX TC_ACT_GOTO_CHAIN
 enum {
   TCA_ID_UNSPEC = 0,
   TCA_ID_POLICE = 1,
@@ -107,6 +110,7 @@
 #define TCA_CLS_FLAGS_SKIP_SW (1 << 1)
 #define TCA_CLS_FLAGS_IN_HW (1 << 2)
 #define TCA_CLS_FLAGS_NOT_IN_HW (1 << 3)
+#define TCA_CLS_FLAGS_VERBOSE (1 << 4)
 #define TC_U32_HTID(h) ((h) & 0xFFF00000)
 #define TC_U32_USERHTID(h) (TC_U32_HTID(h) >> 20)
 #define TC_U32_HASH(h) (((h) >> 12) & 0xFF)
@@ -375,10 +379,33 @@
   TCA_FLOWER_KEY_IP_TOS_MASK,
   TCA_FLOWER_KEY_IP_TTL,
   TCA_FLOWER_KEY_IP_TTL_MASK,
+  TCA_FLOWER_KEY_CVLAN_ID,
+  TCA_FLOWER_KEY_CVLAN_PRIO,
+  TCA_FLOWER_KEY_CVLAN_ETH_TYPE,
+  TCA_FLOWER_KEY_ENC_IP_TOS,
+  TCA_FLOWER_KEY_ENC_IP_TOS_MASK,
+  TCA_FLOWER_KEY_ENC_IP_TTL,
+  TCA_FLOWER_KEY_ENC_IP_TTL_MASK,
+  TCA_FLOWER_KEY_ENC_OPTS,
+  TCA_FLOWER_KEY_ENC_OPTS_MASK,
   __TCA_FLOWER_MAX,
 };
 #define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
 enum {
+  TCA_FLOWER_KEY_ENC_OPTS_UNSPEC,
+  TCA_FLOWER_KEY_ENC_OPTS_GENEVE,
+  __TCA_FLOWER_KEY_ENC_OPTS_MAX,
+};
+#define TCA_FLOWER_KEY_ENC_OPTS_MAX (__TCA_FLOWER_KEY_ENC_OPTS_MAX - 1)
+enum {
+  TCA_FLOWER_KEY_ENC_OPT_GENEVE_UNSPEC,
+  TCA_FLOWER_KEY_ENC_OPT_GENEVE_CLASS,
+  TCA_FLOWER_KEY_ENC_OPT_GENEVE_TYPE,
+  TCA_FLOWER_KEY_ENC_OPT_GENEVE_DATA,
+  __TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX,
+};
+#define TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX (__TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX - 1)
+enum {
   TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT = (1 << 0),
   TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST = (1 << 1),
 };
diff --git a/libc/kernel/uapi/linux/pkt_sched.h b/libc/kernel/uapi/linux/pkt_sched.h
index a3f2adf..4efbc1c 100644
--- a/libc/kernel/uapi/linux/pkt_sched.h
+++ b/libc/kernel/uapi/linux/pkt_sched.h
@@ -87,6 +87,10 @@
 struct tc_fifo_qopt {
   __u32 limit;
 };
+#define SKBPRIO_MAX_PRIORITY 64
+struct tc_skbprio_qopt {
+  __u32 limit;
+};
 #define TCQ_PRIO_BANDS 16
 #define TCQ_MIN_PRIO_BANDS 2
 struct tc_prio_qopt {
@@ -407,6 +411,7 @@
   TCA_NETEM_LATENCY64,
   TCA_NETEM_JITTER64,
   TCA_NETEM_SLOT,
+  TCA_NETEM_SLOT_DIST,
   __TCA_NETEM_MAX,
 };
 #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
@@ -442,6 +447,8 @@
   __s64 max_delay;
   __s32 max_packets;
   __s32 max_bytes;
+  __s64 dist_delay;
+  __s64 dist_jitter;
 };
 enum {
   NETEM_LOSS_UNSPEC,
@@ -703,4 +710,122 @@
   __TCA_CBS_MAX,
 };
 #define TCA_CBS_MAX (__TCA_CBS_MAX - 1)
+struct tc_etf_qopt {
+  __s32 delta;
+  __s32 clockid;
+  __u32 flags;
+#define TC_ETF_DEADLINE_MODE_ON BIT(0)
+#define TC_ETF_OFFLOAD_ON BIT(1)
+};
+enum {
+  TCA_ETF_UNSPEC,
+  TCA_ETF_PARMS,
+  __TCA_ETF_MAX,
+};
+#define TCA_ETF_MAX (__TCA_ETF_MAX - 1)
+enum {
+  TCA_CAKE_UNSPEC,
+  TCA_CAKE_PAD,
+  TCA_CAKE_BASE_RATE64,
+  TCA_CAKE_DIFFSERV_MODE,
+  TCA_CAKE_ATM,
+  TCA_CAKE_FLOW_MODE,
+  TCA_CAKE_OVERHEAD,
+  TCA_CAKE_RTT,
+  TCA_CAKE_TARGET,
+  TCA_CAKE_AUTORATE,
+  TCA_CAKE_MEMORY,
+  TCA_CAKE_NAT,
+  TCA_CAKE_RAW,
+  TCA_CAKE_WASH,
+  TCA_CAKE_MPU,
+  TCA_CAKE_INGRESS,
+  TCA_CAKE_ACK_FILTER,
+  TCA_CAKE_SPLIT_GSO,
+  __TCA_CAKE_MAX
+};
+#define TCA_CAKE_MAX (__TCA_CAKE_MAX - 1)
+enum {
+  __TCA_CAKE_STATS_INVALID,
+  TCA_CAKE_STATS_PAD,
+  TCA_CAKE_STATS_CAPACITY_ESTIMATE64,
+  TCA_CAKE_STATS_MEMORY_LIMIT,
+  TCA_CAKE_STATS_MEMORY_USED,
+  TCA_CAKE_STATS_AVG_NETOFF,
+  TCA_CAKE_STATS_MIN_NETLEN,
+  TCA_CAKE_STATS_MAX_NETLEN,
+  TCA_CAKE_STATS_MIN_ADJLEN,
+  TCA_CAKE_STATS_MAX_ADJLEN,
+  TCA_CAKE_STATS_TIN_STATS,
+  TCA_CAKE_STATS_DEFICIT,
+  TCA_CAKE_STATS_COBALT_COUNT,
+  TCA_CAKE_STATS_DROPPING,
+  TCA_CAKE_STATS_DROP_NEXT_US,
+  TCA_CAKE_STATS_P_DROP,
+  TCA_CAKE_STATS_BLUE_TIMER_US,
+  __TCA_CAKE_STATS_MAX
+};
+#define TCA_CAKE_STATS_MAX (__TCA_CAKE_STATS_MAX - 1)
+enum {
+  __TCA_CAKE_TIN_STATS_INVALID,
+  TCA_CAKE_TIN_STATS_PAD,
+  TCA_CAKE_TIN_STATS_SENT_PACKETS,
+  TCA_CAKE_TIN_STATS_SENT_BYTES64,
+  TCA_CAKE_TIN_STATS_DROPPED_PACKETS,
+  TCA_CAKE_TIN_STATS_DROPPED_BYTES64,
+  TCA_CAKE_TIN_STATS_ACKS_DROPPED_PACKETS,
+  TCA_CAKE_TIN_STATS_ACKS_DROPPED_BYTES64,
+  TCA_CAKE_TIN_STATS_ECN_MARKED_PACKETS,
+  TCA_CAKE_TIN_STATS_ECN_MARKED_BYTES64,
+  TCA_CAKE_TIN_STATS_BACKLOG_PACKETS,
+  TCA_CAKE_TIN_STATS_BACKLOG_BYTES,
+  TCA_CAKE_TIN_STATS_THRESHOLD_RATE64,
+  TCA_CAKE_TIN_STATS_TARGET_US,
+  TCA_CAKE_TIN_STATS_INTERVAL_US,
+  TCA_CAKE_TIN_STATS_WAY_INDIRECT_HITS,
+  TCA_CAKE_TIN_STATS_WAY_MISSES,
+  TCA_CAKE_TIN_STATS_WAY_COLLISIONS,
+  TCA_CAKE_TIN_STATS_PEAK_DELAY_US,
+  TCA_CAKE_TIN_STATS_AVG_DELAY_US,
+  TCA_CAKE_TIN_STATS_BASE_DELAY_US,
+  TCA_CAKE_TIN_STATS_SPARSE_FLOWS,
+  TCA_CAKE_TIN_STATS_BULK_FLOWS,
+  TCA_CAKE_TIN_STATS_UNRESPONSIVE_FLOWS,
+  TCA_CAKE_TIN_STATS_MAX_SKBLEN,
+  TCA_CAKE_TIN_STATS_FLOW_QUANTUM,
+  __TCA_CAKE_TIN_STATS_MAX
+};
+#define TCA_CAKE_TIN_STATS_MAX (__TCA_CAKE_TIN_STATS_MAX - 1)
+#define TC_CAKE_MAX_TINS (8)
+enum {
+  CAKE_FLOW_NONE = 0,
+  CAKE_FLOW_SRC_IP,
+  CAKE_FLOW_DST_IP,
+  CAKE_FLOW_HOSTS,
+  CAKE_FLOW_FLOWS,
+  CAKE_FLOW_DUAL_SRC,
+  CAKE_FLOW_DUAL_DST,
+  CAKE_FLOW_TRIPLE,
+  CAKE_FLOW_MAX,
+};
+enum {
+  CAKE_DIFFSERV_DIFFSERV3 = 0,
+  CAKE_DIFFSERV_DIFFSERV4,
+  CAKE_DIFFSERV_DIFFSERV8,
+  CAKE_DIFFSERV_BESTEFFORT,
+  CAKE_DIFFSERV_PRECEDENCE,
+  CAKE_DIFFSERV_MAX
+};
+enum {
+  CAKE_ACK_NONE = 0,
+  CAKE_ACK_FILTER,
+  CAKE_ACK_AGGRESSIVE,
+  CAKE_ACK_MAX
+};
+enum {
+  CAKE_ATM_NONE = 0,
+  CAKE_ATM_ATM,
+  CAKE_ATM_PTM,
+  CAKE_ATM_MAX
+};
 #endif
diff --git a/libc/kernel/uapi/linux/psp-sev.h b/libc/kernel/uapi/linux/psp-sev.h
index 5f59330..10582d4 100644
--- a/libc/kernel/uapi/linux/psp-sev.h
+++ b/libc/kernel/uapi/linux/psp-sev.h
@@ -27,6 +27,7 @@
   SEV_PDH_GEN,
   SEV_PDH_CERT_EXPORT,
   SEV_PEK_CERT_IMPORT,
+  SEV_GET_ID,
   SEV_MAX,
 };
 typedef enum {
@@ -78,6 +79,10 @@
   __u64 cert_chain_address;
   __u32 cert_chain_len;
 } __packed;
+struct sev_user_data_get_id {
+  __u8 socket1[64];
+  __u8 socket2[64];
+} __packed;
 struct sev_issue_cmd {
   __u32 cmd;
   __u64 data;
diff --git a/libc/kernel/uapi/linux/rds.h b/libc/kernel/uapi/linux/rds.h
index c726f54..05da0cd 100644
--- a/libc/kernel/uapi/linux/rds.h
+++ b/libc/kernel/uapi/linux/rds.h
@@ -20,6 +20,7 @@
 #define _LINUX_RDS_H
 #include <linux/types.h>
 #include <linux/socket.h>
+#include <linux/in6.h>
 #define RDS_IB_ABI_VERSION 0x301
 #define SOL_RDS 276
 #define RDS_CANCEL_SENT_TO 1
@@ -58,7 +59,14 @@
 #define RDS_INFO_IB_CONNECTIONS 10008
 #define RDS_INFO_CONNECTION_STATS 10009
 #define RDS_INFO_IWARP_CONNECTIONS 10010
-#define RDS_INFO_LAST 10010
+#define RDS6_INFO_CONNECTIONS 10011
+#define RDS6_INFO_SEND_MESSAGES 10012
+#define RDS6_INFO_RETRANS_MESSAGES 10013
+#define RDS6_INFO_RECV_MESSAGES 10014
+#define RDS6_INFO_SOCKETS 10015
+#define RDS6_INFO_TCP_SOCKETS 10016
+#define RDS6_INFO_IB_CONNECTIONS 10017
+#define RDS_INFO_LAST 10017
 struct rds_info_counter {
   __u8 name[32];
   __u64 value;
@@ -75,6 +83,14 @@
   __u8 transport[TRANSNAMSIZ];
   __u8 flags;
 } __attribute__((packed));
+struct rds6_info_connection {
+  __u64 next_tx_seq;
+  __u64 next_rx_seq;
+  struct in6_addr laddr;
+  struct in6_addr faddr;
+  __u8 transport[TRANSNAMSIZ];
+  __u8 flags;
+} __attribute__((packed));
 #define RDS_INFO_MESSAGE_FLAG_ACK 0x01
 #define RDS_INFO_MESSAGE_FLAG_FAST_ACK 0x02
 struct rds_info_message {
@@ -86,6 +102,16 @@
   __be16 fport;
   __u8 flags;
 } __attribute__((packed));
+struct rds6_info_message {
+  __u64 seq;
+  __u32 len;
+  struct in6_addr laddr;
+  struct in6_addr faddr;
+  __be16 lport;
+  __be16 fport;
+  __u8 flags;
+  __u8 tos;
+} __attribute__((packed));
 struct rds_info_socket {
   __u32 sndbuf;
   __be32 bound_addr;
@@ -95,6 +121,15 @@
   __u32 rcvbuf;
   __u64 inum;
 } __attribute__((packed));
+struct rds6_info_socket {
+  __u32 sndbuf;
+  struct in6_addr bound_addr;
+  struct in6_addr connected_addr;
+  __be16 bound_port;
+  __be16 connected_port;
+  __u32 rcvbuf;
+  __u64 inum;
+} __attribute__((packed));
 struct rds_info_tcp_socket {
   __be32 local_addr;
   __be16 local_port;
@@ -106,6 +141,17 @@
   __u32 last_expected_una;
   __u32 last_seen_una;
 } __attribute__((packed));
+struct rds6_info_tcp_socket {
+  struct in6_addr local_addr;
+  __be16 local_port;
+  struct in6_addr peer_addr;
+  __be16 peer_port;
+  __u64 hdr_rem;
+  __u64 data_rem;
+  __u32 last_sent_nxt;
+  __u32 last_expected_una;
+  __u32 last_seen_una;
+} __attribute__((packed));
 #define RDS_IB_GID_LEN 16
 struct rds_info_rdma_connection {
   __be32 src_addr;
@@ -118,6 +164,17 @@
   __u32 rdma_mr_max;
   __u32 rdma_mr_size;
 };
+struct rds6_info_rdma_connection {
+  struct in6_addr src_addr;
+  struct in6_addr dst_addr;
+  __u8 src_gid[RDS_IB_GID_LEN];
+  __u8 dst_gid[RDS_IB_GID_LEN];
+  __u32 max_send_wr;
+  __u32 max_recv_wr;
+  __u32 max_send_sge;
+  __u32 rdma_mr_max;
+  __u32 rdma_mr_size;
+};
 enum rds_message_rxpath_latency {
   RDS_MSG_RX_HDR_TO_DGRAM_START = 0,
   RDS_MSG_RX_DGRAM_REASSEMBLE,
diff --git a/libc/kernel/uapi/linux/rseq.h b/libc/kernel/uapi/linux/rseq.h
new file mode 100644
index 0000000..ba0ceb1
--- /dev/null
+++ b/libc/kernel/uapi/linux/rseq.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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_RSEQ_H
+#define _UAPI_LINUX_RSEQ_H
+#include <linux/types.h>
+#include <asm/byteorder.h>
+enum rseq_cpu_id_state {
+  RSEQ_CPU_ID_UNINITIALIZED = - 1,
+  RSEQ_CPU_ID_REGISTRATION_FAILED = - 2,
+};
+enum rseq_flags {
+  RSEQ_FLAG_UNREGISTER = (1 << 0),
+};
+enum rseq_cs_flags_bit {
+  RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
+  RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
+  RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
+};
+enum rseq_cs_flags {
+  RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT = (1U << RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT),
+  RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL = (1U << RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT),
+  RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE = (1U << RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT),
+};
+struct rseq_cs {
+  __u32 version;
+  __u32 flags;
+  __u64 start_ip;
+  __u64 post_commit_offset;
+  __u64 abort_ip;
+} __attribute__((aligned(4 * sizeof(__u64))));
+struct rseq {
+  __u32 cpu_id_start;
+  __u32 cpu_id;
+  union {
+    __u64 ptr64;
+#ifdef __LP64__
+    __u64 ptr;
+#else
+    struct {
+#if defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN || defined(__BIG_ENDIAN)
+      __u32 padding;
+      __u32 ptr32;
+#else
+      __u32 ptr32;
+      __u32 padding;
+#endif
+    } ptr;
+#endif
+  } rseq_cs;
+  __u32 flags;
+} __attribute__((aligned(4 * sizeof(__u64))));
+#endif
diff --git a/libc/kernel/uapi/linux/rtnetlink.h b/libc/kernel/uapi/linux/rtnetlink.h
index 6fffcd3..33af1b3 100644
--- a/libc/kernel/uapi/linux/rtnetlink.h
+++ b/libc/kernel/uapi/linux/rtnetlink.h
@@ -133,6 +133,12 @@
 #define RTM_GETSTATS RTM_GETSTATS
   RTM_NEWCACHEREPORT = 96,
 #define RTM_NEWCACHEREPORT RTM_NEWCACHEREPORT
+  RTM_NEWCHAIN = 100,
+#define RTM_NEWCHAIN RTM_NEWCHAIN
+  RTM_DELCHAIN,
+#define RTM_DELCHAIN RTM_DELCHAIN
+  RTM_GETCHAIN,
+#define RTM_GETCHAIN RTM_GETCHAIN
   __RTM_MAX,
 #define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1)
 };
@@ -194,6 +200,11 @@
 #define RTPROT_DHCP 16
 #define RTPROT_MROUTED 17
 #define RTPROT_BABEL 42
+#define RTPROT_BGP 186
+#define RTPROT_ISIS 187
+#define RTPROT_OSPF 188
+#define RTPROT_RIP 189
+#define RTPROT_EIGRP 192
 enum rt_scope_t {
   RT_SCOPE_UNIVERSE = 0,
   RT_SCOPE_SITE = 200,
@@ -243,6 +254,9 @@
   RTA_PAD,
   RTA_UID,
   RTA_TTL_PROPAGATE,
+  RTA_IP_PROTO,
+  RTA_SPORT,
+  RTA_DPORT,
   __RTA_MAX
 };
 #define RTA_MAX (__RTA_MAX - 1)
diff --git a/libc/kernel/uapi/linux/sctp.h b/libc/kernel/uapi/linux/sctp.h
index 1f7fed1..6ba738e 100644
--- a/libc/kernel/uapi/linux/sctp.h
+++ b/libc/kernel/uapi/linux/sctp.h
@@ -59,6 +59,7 @@
 #define SCTP_RECVNXTINFO 33
 #define SCTP_DEFAULT_SNDINFO 34
 #define SCTP_AUTH_DEACTIVATE_KEY 35
+#define SCTP_REUSE_PORT 36
 #define SCTP_SOCKOPT_BINDX_ADD 100
 #define SCTP_SOCKOPT_BINDX_REM 101
 #define SCTP_SOCKOPT_PEELOFF 102
@@ -159,6 +160,7 @@
   SCTP_ABORT = (1 << 2),
   SCTP_SACK_IMMEDIATELY = (1 << 3),
   SCTP_SENDALL = (1 << 6),
+  SCTP_PR_SCTP_ALL = (1 << 7),
   SCTP_NOTIFICATION = MSG_NOTIFICATION,
   SCTP_EOF = MSG_FIN,
 };
@@ -428,6 +430,8 @@
   SPP_SACKDELAY_DISABLE = 1 << 6,
   SPP_SACKDELAY = SPP_SACKDELAY_ENABLE | SPP_SACKDELAY_DISABLE,
   SPP_HB_TIME_IS_ZERO = 1 << 7,
+  SPP_IPV6_FLOWLABEL = 1 << 8,
+  SPP_DSCP = 1 << 9,
 };
 struct sctp_paddrparams {
   sctp_assoc_t spp_assoc_id;
@@ -437,6 +441,8 @@
   __u32 spp_pathmtu;
   __u32 spp_sackdelay;
   __u32 spp_flags;
+  __u32 spp_ipv6_flowlabel;
+  __u8 spp_dscp;
 } __attribute__((packed, aligned(4)));
 struct sctp_authchunk {
   __u8 sauth_chunk;
diff --git a/libc/kernel/uapi/linux/seg6_local.h b/libc/kernel/uapi/linux/seg6_local.h
index 7a10701..73873a8 100644
--- a/libc/kernel/uapi/linux/seg6_local.h
+++ b/libc/kernel/uapi/linux/seg6_local.h
@@ -28,6 +28,7 @@
   SEG6_LOCAL_NH6,
   SEG6_LOCAL_IIF,
   SEG6_LOCAL_OIF,
+  SEG6_LOCAL_BPF,
   __SEG6_LOCAL_MAX,
 };
 #define SEG6_LOCAL_MAX (__SEG6_LOCAL_MAX - 1)
@@ -47,7 +48,15 @@
   SEG6_LOCAL_ACTION_END_S = 12,
   SEG6_LOCAL_ACTION_END_AS = 13,
   SEG6_LOCAL_ACTION_END_AM = 14,
+  SEG6_LOCAL_ACTION_END_BPF = 15,
   __SEG6_LOCAL_ACTION_MAX,
 };
 #define SEG6_LOCAL_ACTION_MAX (__SEG6_LOCAL_ACTION_MAX - 1)
+enum {
+  SEG6_LOCAL_BPF_PROG_UNSPEC,
+  SEG6_LOCAL_BPF_PROG,
+  SEG6_LOCAL_BPF_PROG_NAME,
+  __SEG6_LOCAL_BPF_PROG_MAX,
+};
+#define SEG6_LOCAL_BPF_PROG_MAX (__SEG6_LOCAL_BPF_PROG_MAX - 1)
 #endif
diff --git a/libc/kernel/uapi/linux/shm.h b/libc/kernel/uapi/linux/shm.h
index a30a089..57394cb 100644
--- a/libc/kernel/uapi/linux/shm.h
+++ b/libc/kernel/uapi/linux/shm.h
@@ -53,7 +53,9 @@
 #define SHM_HUGE_2MB HUGETLB_FLAG_ENCODE_2MB
 #define SHM_HUGE_8MB HUGETLB_FLAG_ENCODE_8MB
 #define SHM_HUGE_16MB HUGETLB_FLAG_ENCODE_16MB
+#define SHM_HUGE_32MB HUGETLB_FLAG_ENCODE_32MB
 #define SHM_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB
+#define SHM_HUGE_512MB HUGETLB_FLAG_ENCODE_512MB
 #define SHM_HUGE_1GB HUGETLB_FLAG_ENCODE_1GB
 #define SHM_HUGE_2GB HUGETLB_FLAG_ENCODE_2GB
 #define SHM_HUGE_16GB HUGETLB_FLAG_ENCODE_16GB
diff --git a/libc/kernel/uapi/linux/signalfd.h b/libc/kernel/uapi/linux/signalfd.h
index a1fe2de..5108ef0 100644
--- a/libc/kernel/uapi/linux/signalfd.h
+++ b/libc/kernel/uapi/linux/signalfd.h
@@ -40,6 +40,10 @@
   __u64 ssi_stime;
   __u64 ssi_addr;
   __u16 ssi_addr_lsb;
-  __u8 __pad[46];
+  __u16 __pad2;
+  __s32 ssi_syscall;
+  __u64 ssi_call_addr;
+  __u32 ssi_arch;
+  __u8 __pad[28];
 };
 #endif
diff --git a/libc/kernel/uapi/linux/smc_diag.h b/libc/kernel/uapi/linux/smc_diag.h
index 66f93f0..30e0fa2 100644
--- a/libc/kernel/uapi/linux/smc_diag.h
+++ b/libc/kernel/uapi/linux/smc_diag.h
@@ -30,17 +30,27 @@
 struct smc_diag_msg {
   __u8 diag_family;
   __u8 diag_state;
-  __u8 diag_fallback;
+  union {
+    __u8 diag_mode;
+    __u8 diag_fallback;
+  };
   __u8 diag_shutdown;
   struct inet_diag_sockid id;
   __u32 diag_uid;
-  __u64 diag_inode;
+  __aligned_u64 diag_inode;
+};
+enum {
+  SMC_DIAG_MODE_SMCR,
+  SMC_DIAG_MODE_FALLBACK_TCP,
+  SMC_DIAG_MODE_SMCD,
 };
 enum {
   SMC_DIAG_NONE,
   SMC_DIAG_CONNINFO,
   SMC_DIAG_LGRINFO,
   SMC_DIAG_SHUTDOWN,
+  SMC_DIAG_DMBINFO,
+  SMC_DIAG_FALLBACK,
   __SMC_DIAG_MAX,
 };
 #define SMC_DIAG_MAX (__SMC_DIAG_MAX - 1)
@@ -77,4 +87,15 @@
   struct smc_diag_linkinfo lnk[1];
   __u8 role;
 };
+struct smc_diag_fallback {
+  __u32 reason;
+  __u32 peer_diagnosis;
+};
+struct smcd_diag_dmbinfo {
+  __u32 linkid;
+  __aligned_u64 peer_gid;
+  __aligned_u64 my_gid;
+  __aligned_u64 token;
+  __aligned_u64 peer_token;
+};
 #endif
diff --git a/libc/kernel/uapi/linux/snmp.h b/libc/kernel/uapi/linux/snmp.h
index b9f0c3e..ae24f0f 100644
--- a/libc/kernel/uapi/linux/snmp.h
+++ b/libc/kernel/uapi/linux/snmp.h
@@ -55,6 +55,7 @@
   IPSTATS_MIB_ECT1PKTS,
   IPSTATS_MIB_ECT0PKTS,
   IPSTATS_MIB_CEPKTS,
+  IPSTATS_MIB_REASM_OVERLAPS,
   __IPSTATS_MIB_MAX
 };
 enum {
@@ -243,6 +244,11 @@
   LINUX_MIB_TCPKEEPALIVE,
   LINUX_MIB_TCPMTUPFAIL,
   LINUX_MIB_TCPMTUPSUCCESS,
+  LINUX_MIB_TCPDELIVERED,
+  LINUX_MIB_TCPDELIVEREDCE,
+  LINUX_MIB_TCPACKCOMPRESSED,
+  LINUX_MIB_TCPZEROWINDOWDROP,
+  LINUX_MIB_TCPRCVQDROP,
   __LINUX_MIB_MAX
 };
 enum {
diff --git a/libc/kernel/uapi/linux/sysctl.h b/libc/kernel/uapi/linux/sysctl.h
index eb6e61f..24d8362 100644
--- a/libc/kernel/uapi/linux/sysctl.h
+++ b/libc/kernel/uapi/linux/sysctl.h
@@ -491,7 +491,8 @@
   __NET_IPV6_MAX
 };
 enum {
-  NET_IPV6_ICMP_RATELIMIT = 1
+  NET_IPV6_ICMP_RATELIMIT = 1,
+  NET_IPV6_ICMP_ECHO_IGNORE_ALL = 2
 };
 enum {
   NET_NEIGH_MCAST_SOLICIT = 1,
diff --git a/libc/kernel/uapi/linux/target_core_user.h b/libc/kernel/uapi/linux/target_core_user.h
index 264b46fe..7c997d1 100644
--- a/libc/kernel/uapi/linux/target_core_user.h
+++ b/libc/kernel/uapi/linux/target_core_user.h
@@ -24,6 +24,7 @@
 #define TCMU_MAILBOX_VERSION 2
 #define ALIGN_SIZE 64
 #define TCMU_MAILBOX_FLAG_CAP_OOOC (1 << 0)
+#define TCMU_MAILBOX_FLAG_CAP_READ_LEN (1 << 1)
 struct tcmu_mailbox {
   __u16 version;
   __u16 flags;
@@ -41,6 +42,7 @@
   __u16 cmd_id;
   __u8 kflags;
 #define TCMU_UFLAG_UNKNOWN_OP 0x1
+#define TCMU_UFLAG_READ_LEN 0x2
   __u8 uflags;
 } __packed;
 #define TCMU_OP_MASK 0x7
@@ -61,7 +63,7 @@
       __u8 scsi_status;
       __u8 __pad1;
       __u16 __pad2;
-      __u32 __pad3;
+      __u32 read_len;
       char sense_buffer[TCMU_SENSE_BUFFERSIZE];
     } rsp;
   };
diff --git a/libc/kernel/uapi/linux/tc_act/tc_skbedit.h b/libc/kernel/uapi/linux/tc_act/tc_skbedit.h
index cb5c2e1..30d529a 100644
--- a/libc/kernel/uapi/linux/tc_act/tc_skbedit.h
+++ b/libc/kernel/uapi/linux/tc_act/tc_skbedit.h
@@ -25,6 +25,7 @@
 #define SKBEDIT_F_MARK 0x4
 #define SKBEDIT_F_PTYPE 0x8
 #define SKBEDIT_F_MASK 0x10
+#define SKBEDIT_F_INHERITDSFIELD 0x20
 struct tc_skbedit {
   tc_gen;
 };
@@ -38,6 +39,7 @@
   TCA_SKBEDIT_PAD,
   TCA_SKBEDIT_PTYPE,
   TCA_SKBEDIT_MASK,
+  TCA_SKBEDIT_FLAGS,
   __TCA_SKBEDIT_MAX
 };
 #define TCA_SKBEDIT_MAX (__TCA_SKBEDIT_MAX - 1)
diff --git a/libc/kernel/uapi/linux/tc_act/tc_tunnel_key.h b/libc/kernel/uapi/linux/tc_act/tc_tunnel_key.h
index 24e7403..bd5fb24 100644
--- a/libc/kernel/uapi/linux/tc_act/tc_tunnel_key.h
+++ b/libc/kernel/uapi/linux/tc_act/tc_tunnel_key.h
@@ -38,7 +38,24 @@
   TCA_TUNNEL_KEY_PAD,
   TCA_TUNNEL_KEY_ENC_DST_PORT,
   TCA_TUNNEL_KEY_NO_CSUM,
+  TCA_TUNNEL_KEY_ENC_OPTS,
+  TCA_TUNNEL_KEY_ENC_TOS,
+  TCA_TUNNEL_KEY_ENC_TTL,
   __TCA_TUNNEL_KEY_MAX,
 };
 #define TCA_TUNNEL_KEY_MAX (__TCA_TUNNEL_KEY_MAX - 1)
+enum {
+  TCA_TUNNEL_KEY_ENC_OPTS_UNSPEC,
+  TCA_TUNNEL_KEY_ENC_OPTS_GENEVE,
+  __TCA_TUNNEL_KEY_ENC_OPTS_MAX,
+};
+#define TCA_TUNNEL_KEY_ENC_OPTS_MAX (__TCA_TUNNEL_KEY_ENC_OPTS_MAX - 1)
+enum {
+  TCA_TUNNEL_KEY_ENC_OPT_GENEVE_UNSPEC,
+  TCA_TUNNEL_KEY_ENC_OPT_GENEVE_CLASS,
+  TCA_TUNNEL_KEY_ENC_OPT_GENEVE_TYPE,
+  TCA_TUNNEL_KEY_ENC_OPT_GENEVE_DATA,
+  __TCA_TUNNEL_KEY_ENC_OPT_GENEVE_MAX,
+};
+#define TCA_TUNNEL_KEY_ENC_OPT_GENEVE_MAX (__TCA_TUNNEL_KEY_ENC_OPT_GENEVE_MAX - 1)
 #endif
diff --git a/libc/kernel/uapi/linux/tcp.h b/libc/kernel/uapi/linux/tcp.h
index 8b73119..d940f0f 100644
--- a/libc/kernel/uapi/linux/tcp.h
+++ b/libc/kernel/uapi/linux/tcp.h
@@ -89,6 +89,12 @@
 #define TCP_MD5SIG_EXT 32
 #define TCP_FASTOPEN_KEY 33
 #define TCP_FASTOPEN_NO_COOKIE 34
+#define TCP_ZEROCOPY_RECEIVE 35
+#define TCP_INQ 36
+#define TCP_CM_INQ TCP_INQ
+#define TCP_REPAIR_ON 1
+#define TCP_REPAIR_OFF 0
+#define TCP_REPAIR_OFF_NO_WP - 1
 struct tcp_repair_opt {
   __u32 opt_code;
   __u32 opt_val;
@@ -171,6 +177,12 @@
   __u64 tcpi_busy_time;
   __u64 tcpi_rwnd_limited;
   __u64 tcpi_sndbuf_limited;
+  __u32 tcpi_delivered;
+  __u32 tcpi_delivered_ce;
+  __u64 tcpi_bytes_sent;
+  __u64 tcpi_bytes_retrans;
+  __u32 tcpi_dsack_dups;
+  __u32 tcpi_reord_seen;
 };
 enum {
   TCP_NLA_PAD,
@@ -189,6 +201,12 @@
   TCP_NLA_SNDQ_SIZE,
   TCP_NLA_CA_STATE,
   TCP_NLA_SND_SSTHRESH,
+  TCP_NLA_DELIVERED,
+  TCP_NLA_DELIVERED_CE,
+  TCP_NLA_BYTES_SENT,
+  TCP_NLA_BYTES_RETRANS,
+  TCP_NLA_DSACK_DUPS,
+  TCP_NLA_REORD_SEEN,
 };
 #define TCP_MD5SIG_MAXKEYLEN 80
 #define TCP_MD5SIG_FLAG_PREFIX 1
@@ -207,4 +225,9 @@
   __be32 tcpm_addr[4];
   __u8 tcpm_key[TCP_MD5SIG_MAXKEYLEN];
 };
+struct tcp_zerocopy_receive {
+  __u64 address;
+  __u32 length;
+  __u32 recv_skip_hint;
+};
 #endif
diff --git a/libc/kernel/uapi/linux/time.h b/libc/kernel/uapi/linux/time.h
index b75d2dc..96a7042 100644
--- a/libc/kernel/uapi/linux/time.h
+++ b/libc/kernel/uapi/linux/time.h
@@ -45,6 +45,18 @@
   struct timeval it_interval;
   struct timeval it_value;
 };
+#ifndef __kernel_timespec
+struct __kernel_timespec {
+  __kernel_time64_t tv_sec;
+  long long tv_nsec;
+};
+#endif
+#ifndef __kernel_itimerspec
+struct __kernel_itimerspec {
+  struct __kernel_timespec it_interval;
+  struct __kernel_timespec it_value;
+};
+#endif
 struct __kernel_old_timeval {
   __kernel_long_t tv_sec;
   __kernel_long_t tv_usec;
diff --git a/libc/kernel/uapi/linux/tipc.h b/libc/kernel/uapi/linux/tipc.h
index 603c58f..72bcad9 100644
--- a/libc/kernel/uapi/linux/tipc.h
+++ b/libc/kernel/uapi/linux/tipc.h
@@ -119,16 +119,22 @@
   __u32 scope;
   __u32 flags;
 };
+#define TIPC_NODEID_LEN 16
 #define TIPC_MAX_MEDIA_NAME 16
 #define TIPC_MAX_IF_NAME 16
 #define TIPC_MAX_BEARER_NAME 32
 #define TIPC_MAX_LINK_NAME 68
 #define SIOCGETLINKNAME SIOCPROTOPRIVATE
+#define SIOCGETNODEID (SIOCPROTOPRIVATE + 1)
 struct tipc_sioc_ln_req {
   __u32 peer;
   __u32 bearer_id;
   char linkname[TIPC_MAX_LINK_NAME];
 };
+struct tipc_sioc_nodeid_req {
+  __u32 peer;
+  char node_id[TIPC_NODEID_LEN];
+};
 #define TIPC_CFG_SRV 0
 #define TIPC_ZONE_SCOPE 1
 #define TIPC_ADDR_NAMESEQ 1
diff --git a/libc/kernel/uapi/linux/tipc_config.h b/libc/kernel/uapi/linux/tipc_config.h
index c52f5ff..a371e37 100644
--- a/libc/kernel/uapi/linux/tipc_config.h
+++ b/libc/kernel/uapi/linux/tipc_config.h
@@ -90,6 +90,7 @@
 #define TIPC_MIN_LINK_WIN 16
 #define TIPC_DEF_LINK_WIN 50
 #define TIPC_MAX_LINK_WIN 8191
+#define TIPC_DEF_LINK_UDP_MTU 14000
 struct tipc_node_info {
   __be32 addr;
   __be32 up;
diff --git a/libc/kernel/uapi/linux/tipc_netlink.h b/libc/kernel/uapi/linux/tipc_netlink.h
index ce77441..911bbde 100644
--- a/libc/kernel/uapi/linux/tipc_netlink.h
+++ b/libc/kernel/uapi/linux/tipc_netlink.h
@@ -92,6 +92,7 @@
   TIPC_NLA_SOCK_TIPC_STATE,
   TIPC_NLA_SOCK_COOKIE,
   TIPC_NLA_SOCK_PAD,
+  TIPC_NLA_SOCK_GROUP,
   __TIPC_NLA_SOCK_MAX,
   TIPC_NLA_SOCK_MAX = __TIPC_NLA_SOCK_MAX - 1
 };
@@ -177,6 +178,16 @@
   TIPC_NLA_MON_PEER_MAX = __TIPC_NLA_MON_PEER_MAX - 1
 };
 enum {
+  TIPC_NLA_SOCK_GROUP_ID,
+  TIPC_NLA_SOCK_GROUP_OPEN,
+  TIPC_NLA_SOCK_GROUP_NODE_SCOPE,
+  TIPC_NLA_SOCK_GROUP_CLUSTER_SCOPE,
+  TIPC_NLA_SOCK_GROUP_INSTANCE,
+  TIPC_NLA_SOCK_GROUP_BC_SEND_NEXT,
+  __TIPC_NLA_SOCK_GROUP_MAX,
+  TIPC_NLA_SOCK_GROUP_MAX = __TIPC_NLA_SOCK_GROUP_MAX - 1
+};
+enum {
   TIPC_NLA_CON_UNSPEC,
   TIPC_NLA_CON_FLAG,
   TIPC_NLA_CON_NODE,
@@ -200,6 +211,7 @@
   TIPC_NLA_PROP_PRIO,
   TIPC_NLA_PROP_TOL,
   TIPC_NLA_PROP_WIN,
+  TIPC_NLA_PROP_MTU,
   __TIPC_NLA_PROP_MAX,
   TIPC_NLA_PROP_MAX = __TIPC_NLA_PROP_MAX - 1
 };
diff --git a/libc/kernel/uapi/linux/types.h b/libc/kernel/uapi/linux/types.h
index e111573..9145e66 100644
--- a/libc/kernel/uapi/linux/types.h
+++ b/libc/kernel/uapi/linux/types.h
@@ -34,10 +34,6 @@
 #define __aligned_u64 __u64 __attribute__((aligned(8)))
 #define __aligned_be64 __be64 __attribute__((aligned(8)))
 #define __aligned_le64 __le64 __attribute__((aligned(8)))
-#ifdef __CHECK_POLL
 typedef unsigned __bitwise __poll_t;
-#else
-typedef unsigned __poll_t;
-#endif
 #endif
 #endif
diff --git a/libc/kernel/uapi/linux/udp.h b/libc/kernel/uapi/linux/udp.h
index 02e1373..3cd286b 100644
--- a/libc/kernel/uapi/linux/udp.h
+++ b/libc/kernel/uapi/linux/udp.h
@@ -29,9 +29,11 @@
 #define UDP_ENCAP 100
 #define UDP_NO_CHECK6_TX 101
 #define UDP_NO_CHECK6_RX 102
+#define UDP_SEGMENT 103
 #define UDP_ENCAP_ESPINUDP_NON_IKE 1
 #define UDP_ENCAP_ESPINUDP 2
 #define UDP_ENCAP_L2TPINUDP 3
 #define UDP_ENCAP_GTP0 4
 #define UDP_ENCAP_GTP1U 5
+#define UDP_ENCAP_RXRPC 6
 #endif
diff --git a/libc/kernel/uapi/linux/usb/audio.h b/libc/kernel/uapi/linux/usb/audio.h
index 87b8bd5..7d36157 100644
--- a/libc/kernel/uapi/linux/usb/audio.h
+++ b/libc/kernel/uapi/linux/usb/audio.h
@@ -154,6 +154,12 @@
 #define UAC_OUTPUT_TERMINAL_ROOM_SPEAKER 0x305
 #define UAC_OUTPUT_TERMINAL_COMMUNICATION_SPEAKER 0x306
 #define UAC_OUTPUT_TERMINAL_LOW_FREQ_EFFECTS_SPEAKER 0x307
+#define UAC_BIDIR_TERMINAL_UNDEFINED 0x400
+#define UAC_BIDIR_TERMINAL_HANDSET 0x401
+#define UAC_BIDIR_TERMINAL_HEADSET 0x402
+#define UAC_BIDIR_TERMINAL_SPEAKER_PHONE 0x403
+#define UAC_BIDIR_TERMINAL_ECHO_SUPPRESSING 0x404
+#define UAC_BIDIR_TERMINAL_ECHO_CANCELING 0x405
 #define UAC_DT_FEATURE_UNIT_SIZE(ch) (7 + ((ch) + 1) * 2)
 #define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch) struct uac_feature_unit_descriptor_ ##ch { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubtype; __u8 bUnitID; __u8 bSourceID; __u8 bControlSize; __le16 bmaControls[ch + 1]; __u8 iFeature; \
 } __attribute__((packed))
diff --git a/libc/kernel/uapi/linux/usb/ch11.h b/libc/kernel/uapi/linux/usb/ch11.h
index e31c37b..55387fe 100644
--- a/libc/kernel/uapi/linux/usb/ch11.h
+++ b/libc/kernel/uapi/linux/usb/ch11.h
@@ -109,6 +109,8 @@
 #define USB_EXT_PORT_STAT_TX_SPEED_ID 0x000000f0
 #define USB_EXT_PORT_STAT_RX_LANES 0x00000f00
 #define USB_EXT_PORT_STAT_TX_LANES 0x0000f000
+#define USB_EXT_PORT_RX_LANES(p) (((p) & USB_EXT_PORT_STAT_RX_LANES) >> 8)
+#define USB_EXT_PORT_TX_LANES(p) (((p) & USB_EXT_PORT_STAT_TX_LANES) >> 12)
 #define HUB_CHAR_LPSM 0x0003
 #define HUB_CHAR_COMMON_LPSM 0x0000
 #define HUB_CHAR_INDV_PORT_LPSM 0x0001
diff --git a/libc/kernel/uapi/linux/usb/g_uvc.h b/libc/kernel/uapi/linux/usb/g_uvc.h
new file mode 100644
index 0000000..0aeba3d
--- /dev/null
+++ b/libc/kernel/uapi/linux/usb/g_uvc.h
@@ -0,0 +1,44 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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_USB_G_UVC_H
+#define __LINUX_USB_G_UVC_H
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/usb/ch9.h>
+#define UVC_EVENT_FIRST (V4L2_EVENT_PRIVATE_START + 0)
+#define UVC_EVENT_CONNECT (V4L2_EVENT_PRIVATE_START + 0)
+#define UVC_EVENT_DISCONNECT (V4L2_EVENT_PRIVATE_START + 1)
+#define UVC_EVENT_STREAMON (V4L2_EVENT_PRIVATE_START + 2)
+#define UVC_EVENT_STREAMOFF (V4L2_EVENT_PRIVATE_START + 3)
+#define UVC_EVENT_SETUP (V4L2_EVENT_PRIVATE_START + 4)
+#define UVC_EVENT_DATA (V4L2_EVENT_PRIVATE_START + 5)
+#define UVC_EVENT_LAST (V4L2_EVENT_PRIVATE_START + 5)
+struct uvc_request_data {
+  __s32 length;
+  __u8 data[60];
+};
+struct uvc_event {
+  union {
+    enum usb_device_speed speed;
+    struct usb_ctrlrequest req;
+    struct uvc_request_data data;
+  };
+};
+#define UVCIOC_SEND_RESPONSE _IOW('U', 1, struct uvc_request_data)
+#endif
diff --git a/libc/kernel/uapi/linux/usb/tmc.h b/libc/kernel/uapi/linux/usb/tmc.h
index c93096e..6e276de 100644
--- a/libc/kernel/uapi/linux/usb/tmc.h
+++ b/libc/kernel/uapi/linux/usb/tmc.h
@@ -18,6 +18,7 @@
  ****************************************************************************/
 #ifndef __LINUX_USB_TMC_H
 #define __LINUX_USB_TMC_H
+#include <linux/types.h>
 #define USBTMC_STATUS_SUCCESS 0x01
 #define USBTMC_STATUS_PENDING 0x02
 #define USBTMC_STATUS_FAILED 0x80
@@ -36,6 +37,10 @@
 #define USBTMC488_REQUEST_REN_CONTROL 160
 #define USBTMC488_REQUEST_GOTO_LOCAL 161
 #define USBTMC488_REQUEST_LOCAL_LOCKOUT 162
+struct usbtmc_termchar {
+  __u8 term_char;
+  __u8 term_char_enabled;
+} __attribute__((packed));
 #define USBTMC_IOC_NR 91
 #define USBTMC_IOCTL_INDICATOR_PULSE _IO(USBTMC_IOC_NR, 1)
 #define USBTMC_IOCTL_CLEAR _IO(USBTMC_IOC_NR, 2)
@@ -43,11 +48,16 @@
 #define USBTMC_IOCTL_ABORT_BULK_IN _IO(USBTMC_IOC_NR, 4)
 #define USBTMC_IOCTL_CLEAR_OUT_HALT _IO(USBTMC_IOC_NR, 6)
 #define USBTMC_IOCTL_CLEAR_IN_HALT _IO(USBTMC_IOC_NR, 7)
+#define USBTMC_IOCTL_GET_TIMEOUT _IOR(USBTMC_IOC_NR, 9, __u32)
+#define USBTMC_IOCTL_SET_TIMEOUT _IOW(USBTMC_IOC_NR, 10, __u32)
+#define USBTMC_IOCTL_EOM_ENABLE _IOW(USBTMC_IOC_NR, 11, __u8)
+#define USBTMC_IOCTL_CONFIG_TERMCHAR _IOW(USBTMC_IOC_NR, 12, struct usbtmc_termchar)
 #define USBTMC488_IOCTL_GET_CAPS _IOR(USBTMC_IOC_NR, 17, unsigned char)
 #define USBTMC488_IOCTL_READ_STB _IOR(USBTMC_IOC_NR, 18, unsigned char)
 #define USBTMC488_IOCTL_REN_CONTROL _IOW(USBTMC_IOC_NR, 19, unsigned char)
 #define USBTMC488_IOCTL_GOTO_LOCAL _IO(USBTMC_IOC_NR, 20)
 #define USBTMC488_IOCTL_LOCAL_LOCKOUT _IO(USBTMC_IOC_NR, 21)
+#define USBTMC488_IOCTL_TRIGGER _IO(USBTMC_IOC_NR, 22)
 #define USBTMC488_CAPABILITY_TRIGGER 1
 #define USBTMC488_CAPABILITY_SIMPLE 2
 #define USBTMC488_CAPABILITY_REN_CONTROL 2
diff --git a/libc/kernel/uapi/linux/uvcvideo.h b/libc/kernel/uapi/linux/uvcvideo.h
index 7ae7aad..719147a 100644
--- a/libc/kernel/uapi/linux/uvcvideo.h
+++ b/libc/kernel/uapi/linux/uvcvideo.h
@@ -34,6 +34,7 @@
 #define UVC_CTRL_FLAG_GET_DEF (1 << 5)
 #define UVC_CTRL_FLAG_RESTORE (1 << 6)
 #define UVC_CTRL_FLAG_AUTO_UPDATE (1 << 7)
+#define UVC_CTRL_FLAG_ASYNCHRONOUS (1 << 8)
 #define UVC_CTRL_FLAG_GET_RANGE (UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_GET_MIN | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES | UVC_CTRL_FLAG_GET_DEF)
 struct uvc_menu_info {
   __u32 value;
diff --git a/libc/kernel/uapi/linux/v4l2-controls.h b/libc/kernel/uapi/linux/v4l2-controls.h
index 37e447e..45590a2 100644
--- a/libc/kernel/uapi/linux/v4l2-controls.h
+++ b/libc/kernel/uapi/linux/v4l2-controls.h
@@ -108,7 +108,7 @@
 #define V4L2_CID_USER_ADV7180_BASE (V4L2_CID_USER_BASE + 0x1070)
 #define V4L2_CID_USER_TC358743_BASE (V4L2_CID_USER_BASE + 0x1080)
 #define V4L2_CID_USER_MAX217X_BASE (V4L2_CID_USER_BASE + 0x1090)
-#define V4L2_CID_USER_IMX_BASE (V4L2_CID_USER_BASE + 0x1090)
+#define V4L2_CID_USER_IMX_BASE (V4L2_CID_USER_BASE + 0x10b0)
 #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900)
 #define V4L2_CID_MPEG_CLASS (V4L2_CTRL_CLASS_MPEG | 1)
 #define V4L2_CID_MPEG_STREAM_TYPE (V4L2_CID_MPEG_BASE + 0)
@@ -489,7 +489,21 @@
 #define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP (V4L2_CID_MPEG_BASE + 508)
 #define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP (V4L2_CID_MPEG_BASE + 509)
 #define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP (V4L2_CID_MPEG_BASE + 510)
-#define V4L2_CID_MPEG_VIDEO_VPX_PROFILE (V4L2_CID_MPEG_BASE + 511)
+#define V4L2_CID_MPEG_VIDEO_VP8_PROFILE (V4L2_CID_MPEG_BASE + 511)
+enum v4l2_mpeg_video_vp8_profile {
+  V4L2_MPEG_VIDEO_VP8_PROFILE_0 = 0,
+  V4L2_MPEG_VIDEO_VP8_PROFILE_1 = 1,
+  V4L2_MPEG_VIDEO_VP8_PROFILE_2 = 2,
+  V4L2_MPEG_VIDEO_VP8_PROFILE_3 = 3,
+};
+#define V4L2_CID_MPEG_VIDEO_VPX_PROFILE V4L2_CID_MPEG_VIDEO_VP8_PROFILE
+#define V4L2_CID_MPEG_VIDEO_VP9_PROFILE (V4L2_CID_MPEG_BASE + 512)
+enum v4l2_mpeg_video_vp9_profile {
+  V4L2_MPEG_VIDEO_VP9_PROFILE_0 = 0,
+  V4L2_MPEG_VIDEO_VP9_PROFILE_1 = 1,
+  V4L2_MPEG_VIDEO_VP9_PROFILE_2 = 2,
+  V4L2_MPEG_VIDEO_VP9_PROFILE_3 = 3,
+};
 #define V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP (V4L2_CID_MPEG_BASE + 600)
 #define V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP (V4L2_CID_MPEG_BASE + 601)
 #define V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP (V4L2_CID_MPEG_BASE + 602)
diff --git a/libc/kernel/uapi/linux/v4l2-subdev.h b/libc/kernel/uapi/linux/v4l2-subdev.h
index fd1764b..303d167 100644
--- a/libc/kernel/uapi/linux/v4l2-subdev.h
+++ b/libc/kernel/uapi/linux/v4l2-subdev.h
@@ -91,8 +91,12 @@
 #define VIDIOC_SUBDEV_S_CROP _IOWR('V', 60, struct v4l2_subdev_crop)
 #define VIDIOC_SUBDEV_G_SELECTION _IOWR('V', 61, struct v4l2_subdev_selection)
 #define VIDIOC_SUBDEV_S_SELECTION _IOWR('V', 62, struct v4l2_subdev_selection)
+#define VIDIOC_SUBDEV_G_STD _IOR('V', 23, v4l2_std_id)
+#define VIDIOC_SUBDEV_S_STD _IOW('V', 24, v4l2_std_id)
+#define VIDIOC_SUBDEV_ENUMSTD _IOWR('V', 25, struct v4l2_standard)
 #define VIDIOC_SUBDEV_G_EDID _IOWR('V', 40, struct v4l2_edid)
 #define VIDIOC_SUBDEV_S_EDID _IOWR('V', 41, struct v4l2_edid)
+#define VIDIOC_SUBDEV_QUERYSTD _IOR('V', 63, v4l2_std_id)
 #define VIDIOC_SUBDEV_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings)
 #define VIDIOC_SUBDEV_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings)
 #define VIDIOC_SUBDEV_ENUM_DV_TIMINGS _IOWR('V', 98, struct v4l2_enum_dv_timings)
diff --git a/libc/kernel/uapi/linux/version.h b/libc/kernel/uapi/linux/version.h
index 61f0c3d..a234744 100644
--- a/libc/kernel/uapi/linux/version.h
+++ b/libc/kernel/uapi/linux/version.h
@@ -16,5 +16,5 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#define LINUX_VERSION_CODE 266499
+#define LINUX_VERSION_CODE 267008
 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
diff --git a/libc/kernel/uapi/linux/vhost.h b/libc/kernel/uapi/linux/vhost.h
index b6c1f9d..e802e02 100644
--- a/libc/kernel/uapi/linux/vhost.h
+++ b/libc/kernel/uapi/linux/vhost.h
@@ -55,6 +55,7 @@
   __u8 type;
 };
 #define VHOST_IOTLB_MSG 0x1
+#define VHOST_IOTLB_MSG_V2 0x2
 struct vhost_msg {
   int type;
   union {
@@ -62,6 +63,14 @@
     __u8 padding[64];
   };
 };
+struct vhost_msg_v2 {
+  __u32 type;
+  __u32 reserved;
+  union {
+    struct vhost_iotlb_msg iotlb;
+    __u8 padding[64];
+  };
+};
 struct vhost_memory_region {
   __u64 guest_phys_addr;
   __u64 memory_size;
@@ -95,6 +104,9 @@
 #define VHOST_SET_VRING_ERR _IOW(VHOST_VIRTIO, 0x22, struct vhost_vring_file)
 #define VHOST_SET_VRING_BUSYLOOP_TIMEOUT _IOW(VHOST_VIRTIO, 0x23, struct vhost_vring_state)
 #define VHOST_GET_VRING_BUSYLOOP_TIMEOUT _IOW(VHOST_VIRTIO, 0x24, struct vhost_vring_state)
+#define VHOST_BACKEND_F_IOTLB_MSG_V2 0x1
+#define VHOST_SET_BACKEND_FEATURES _IOW(VHOST_VIRTIO, 0x25, __u64)
+#define VHOST_GET_BACKEND_FEATURES _IOR(VHOST_VIRTIO, 0x26, __u64)
 #define VHOST_NET_SET_BACKEND _IOW(VHOST_VIRTIO, 0x30, struct vhost_vring_file)
 #define VHOST_F_LOG_ALL 26
 #define VHOST_NET_F_VIRTIO_NET_HDR 27
diff --git a/libc/kernel/uapi/linux/videodev2.h b/libc/kernel/uapi/linux/videodev2.h
index 0569ba7..51faa1e 100644
--- a/libc/kernel/uapi/linux/videodev2.h
+++ b/libc/kernel/uapi/linux/videodev2.h
@@ -225,6 +225,7 @@
 #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ')
 #define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ')
 #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B')
+#define V4L2_PIX_FMT_Y10P v4l2_fourcc('Y', '1', '0', 'P')
 #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8')
 #define V4L2_PIX_FMT_UV8 v4l2_fourcc('U', 'V', '8', ' ')
 #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V')
@@ -292,6 +293,10 @@
 #define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
 #define V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
 #define V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C')
+#define V4L2_PIX_FMT_SBGGR14P v4l2_fourcc('p', 'B', 'E', 'E')
+#define V4L2_PIX_FMT_SGBRG14P v4l2_fourcc('p', 'G', 'E', 'E')
+#define V4L2_PIX_FMT_SGRBG14P v4l2_fourcc('p', 'g', 'E', 'E')
+#define V4L2_PIX_FMT_SRGGB14P v4l2_fourcc('p', 'R', 'E', 'E')
 #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2')
 #define V4L2_PIX_FMT_SGBRG16 v4l2_fourcc('G', 'B', '1', '6')
 #define V4L2_PIX_FMT_SGRBG16 v4l2_fourcc('G', 'R', '1', '6')
@@ -315,6 +320,7 @@
 #define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0')
 #define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0')
 #define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C')
+#define V4L2_PIX_FMT_FWHT v4l2_fourcc('F', 'W', 'H', 'T')
 #define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A')
 #define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A')
 #define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0')
@@ -1271,7 +1277,6 @@
   __u32 reserved[8];
 };
 #define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability)
-#define VIDIOC_RESERVED _IO('V', 1)
 #define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc)
 #define VIDIOC_G_FMT _IOWR('V', 4, struct v4l2_format)
 #define VIDIOC_S_FMT _IOWR('V', 5, struct v4l2_format)
diff --git a/libc/kernel/uapi/linux/virtio_config.h b/libc/kernel/uapi/linux/virtio_config.h
index 80a0b1b..ddf5e4e 100644
--- a/libc/kernel/uapi/linux/virtio_config.h
+++ b/libc/kernel/uapi/linux/virtio_config.h
@@ -26,11 +26,12 @@
 #define VIRTIO_CONFIG_S_NEEDS_RESET 0x40
 #define VIRTIO_CONFIG_S_FAILED 0x80
 #define VIRTIO_TRANSPORT_F_START 28
-#define VIRTIO_TRANSPORT_F_END 34
+#define VIRTIO_TRANSPORT_F_END 38
 #ifndef VIRTIO_CONFIG_NO_LEGACY
 #define VIRTIO_F_NOTIFY_ON_EMPTY 24
 #define VIRTIO_F_ANY_LAYOUT 27
 #endif
 #define VIRTIO_F_VERSION_1 32
 #define VIRTIO_F_IOMMU_PLATFORM 33
+#define VIRTIO_F_SR_IOV 37
 #endif
diff --git a/libc/kernel/uapi/linux/virtio_gpu.h b/libc/kernel/uapi/linux/virtio_gpu.h
index b43671f..60dbf71 100644
--- a/libc/kernel/uapi/linux/virtio_gpu.h
+++ b/libc/kernel/uapi/linux/virtio_gpu.h
@@ -185,6 +185,7 @@
   __le32 padding;
 };
 #define VIRTIO_GPU_CAPSET_VIRGL 1
+#define VIRTIO_GPU_CAPSET_VIRGL2 2
 struct virtio_gpu_get_capset_info {
   struct virtio_gpu_ctrl_hdr hdr;
   __le32 capset_index;
diff --git a/libc/kernel/uapi/linux/virtio_net.h b/libc/kernel/uapi/linux/virtio_net.h
index 329d736..07afd06 100644
--- a/libc/kernel/uapi/linux/virtio_net.h
+++ b/libc/kernel/uapi/linux/virtio_net.h
@@ -45,6 +45,7 @@
 #define VIRTIO_NET_F_GUEST_ANNOUNCE 21
 #define VIRTIO_NET_F_MQ 22
 #define VIRTIO_NET_F_CTRL_MAC_ADDR 23
+#define VIRTIO_NET_F_STANDBY 62
 #define VIRTIO_NET_F_SPEED_DUPLEX 63
 #ifndef VIRTIO_NET_NO_LEGACY
 #define VIRTIO_NET_F_GSO 6
diff --git a/libc/kernel/uapi/linux/ncp_no.h b/libc/kernel/uapi/linux/vmcore.h
similarity index 63%
copy from libc/kernel/uapi/linux/ncp_no.h
copy to libc/kernel/uapi/linux/vmcore.h
index fe5caa0..3fa7fee 100644
--- a/libc/kernel/uapi/linux/ncp_no.h
+++ b/libc/kernel/uapi/linux/vmcore.h
@@ -16,19 +16,16 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _NCP_NO
-#define _NCP_NO
-#define aRONLY (__cpu_to_le32(1))
-#define aHIDDEN (__cpu_to_le32(2))
-#define aSYSTEM (__cpu_to_le32(4))
-#define aEXECUTE (__cpu_to_le32(8))
-#define aDIR (__cpu_to_le32(0x10))
-#define aARCH (__cpu_to_le32(0x20))
-#define aSHARED (__cpu_to_le32(0x80))
-#define aDONTSUBALLOCATE (__cpu_to_le32(1L << 11))
-#define aTRANSACTIONAL (__cpu_to_le32(1L << 12))
-#define aPURGE (__cpu_to_le32(1L << 16))
-#define aRENAMEINHIBIT (__cpu_to_le32(1L << 17))
-#define aDELETEINHIBIT (__cpu_to_le32(1L << 18))
-#define aDONTCOMPRESS (__cpu_to_le32(1L << 27))
+#ifndef _UAPI_VMCORE_H
+#define _UAPI_VMCORE_H
+#include <linux/types.h>
+#define VMCOREDD_NOTE_NAME "LINUX"
+#define VMCOREDD_MAX_NAME_BYTES 44
+struct vmcoredd_header {
+  __u32 n_namesz;
+  __u32 n_descsz;
+  __u32 n_type;
+  __u8 name[8];
+  __u8 dump_name[VMCOREDD_MAX_NAME_BYTES];
+};
 #endif
diff --git a/libc/kernel/uapi/linux/vsoc_shm.h b/libc/kernel/uapi/linux/vsoc_shm.h
new file mode 100644
index 0000000..467b89b
--- /dev/null
+++ b/libc/kernel/uapi/linux/vsoc_shm.h
@@ -0,0 +1,84 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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_VSOC_SHM_H
+#define _UAPI_LINUX_VSOC_SHM_H
+#include <linux/types.h>
+struct fd_scoped_permission {
+  __u32 begin_offset;
+  __u32 end_offset;
+  __u32 owner_offset;
+  __u32 owned_value;
+};
+#define VSOC_REGION_FREE ((__u32) 0)
+struct fd_scoped_permission_arg {
+  struct fd_scoped_permission perm;
+  __s32 managed_region_fd;
+};
+#define VSOC_NODE_FREE ((__u32) 0)
+struct vsoc_signal_table_layout {
+  __u32 num_nodes_lg2;
+  __u32 futex_uaddr_table_offset;
+  __u32 interrupt_signalled_offset;
+};
+#define VSOC_REGION_WHOLE ((__s32) 0)
+#define VSOC_DEVICE_NAME_SZ 16
+struct vsoc_device_region {
+  __u16 current_version;
+  __u16 min_compatible_version;
+  __u32 region_begin_offset;
+  __u32 region_end_offset;
+  __u32 offset_of_region_data;
+  struct vsoc_signal_table_layout guest_to_host_signal_table;
+  struct vsoc_signal_table_layout host_to_guest_signal_table;
+  char device_name[VSOC_DEVICE_NAME_SZ];
+  __u32 managed_by;
+};
+struct vsoc_shm_layout_descriptor {
+  __u16 major_version;
+  __u16 minor_version;
+  __u32 size;
+  __u32 region_count;
+  __u32 vsoc_region_desc_offset;
+};
+#define CURRENT_VSOC_LAYOUT_MAJOR_VERSION 2
+#define CURRENT_VSOC_LAYOUT_MINOR_VERSION 0
+#define VSOC_CREATE_FD_SCOPED_PERMISSION _IOW(0xF5, 0, struct fd_scoped_permission)
+#define VSOC_GET_FD_SCOPED_PERMISSION _IOR(0xF5, 1, struct fd_scoped_permission)
+#define VSOC_MAYBE_SEND_INTERRUPT_TO_HOST _IO(0xF5, 2)
+#define VSOC_WAIT_FOR_INCOMING_INTERRUPT _IO(0xF5, 3)
+#define VSOC_DESCRIBE_REGION _IOR(0xF5, 4, struct vsoc_device_region)
+#define VSOC_SELF_INTERRUPT _IO(0xF5, 5)
+#define VSOC_SEND_INTERRUPT_TO_HOST _IO(0xF5, 6)
+enum wait_types {
+  VSOC_WAIT_UNDEFINED = 0,
+  VSOC_WAIT_IF_EQUAL = 1,
+  VSOC_WAIT_IF_EQUAL_TIMEOUT = 2
+};
+struct vsoc_cond_wait {
+  __u32 offset;
+  __u32 value;
+  __u64 wake_time_sec;
+  __u32 wake_time_nsec;
+  __u32 wait_type;
+  __u32 wakes;
+  __u32 reserved_1;
+};
+#define VSOC_COND_WAIT _IOWR(0xF5, 7, struct vsoc_cond_wait)
+#define VSOC_COND_WAKE _IO(0xF5, 8)
+#endif
diff --git a/libc/kernel/uapi/linux/xfrm.h b/libc/kernel/uapi/linux/xfrm.h
index 5ec7193..ea0ef5e 100644
--- a/libc/kernel/uapi/linux/xfrm.h
+++ b/libc/kernel/uapi/linux/xfrm.h
@@ -258,8 +258,11 @@
   XFRMA_ADDRESS_FILTER,
   XFRMA_PAD,
   XFRMA_OFFLOAD_DEV,
-  XFRMA_OUTPUT_MARK,
+  XFRMA_SET_MARK,
+  XFRMA_SET_MARK_MASK,
+  XFRMA_IF_ID,
   __XFRMA_MAX
+#define XFRMA_OUTPUT_MARK XFRMA_SET_MARK
 #define XFRMA_MAX (__XFRMA_MAX - 1)
 };
 struct xfrm_mark {
diff --git a/libc/kernel/uapi/misc/ocxl.h b/libc/kernel/uapi/misc/ocxl.h
index 98d3eac..676aaf8 100644
--- a/libc/kernel/uapi/misc/ocxl.h
+++ b/libc/kernel/uapi/misc/ocxl.h
@@ -50,6 +50,16 @@
   __u64 global_mmio_size;
   __u64 reserved[13];
 };
+struct ocxl_ioctl_p9_wait {
+  __u16 thread_id;
+  __u16 reserved1;
+  __u32 reserved2;
+  __u64 reserved3[3];
+};
+#define OCXL_IOCTL_FEATURES_FLAGS0_P9_WAIT 0x01
+struct ocxl_ioctl_features {
+  __u64 flags[4];
+};
 struct ocxl_ioctl_irq_fd {
   __u64 irq_offset;
   __s32 eventfd;
@@ -61,4 +71,6 @@
 #define OCXL_IOCTL_IRQ_FREE _IOW(OCXL_MAGIC, 0x12, __u64)
 #define OCXL_IOCTL_IRQ_SET_FD _IOW(OCXL_MAGIC, 0x13, struct ocxl_ioctl_irq_fd)
 #define OCXL_IOCTL_GET_METADATA _IOR(OCXL_MAGIC, 0x14, struct ocxl_ioctl_metadata)
+#define OCXL_IOCTL_ENABLE_P9_WAIT _IOR(OCXL_MAGIC, 0x15, struct ocxl_ioctl_p9_wait)
+#define OCXL_IOCTL_GET_FEATURES _IOR(OCXL_MAGIC, 0x16, struct ocxl_ioctl_features)
 #endif
diff --git a/libc/kernel/uapi/mtd/ubi-user.h b/libc/kernel/uapi/mtd/ubi-user.h
index 8f888fe..8405536 100644
--- a/libc/kernel/uapi/mtd/ubi-user.h
+++ b/libc/kernel/uapi/mtd/ubi-user.h
@@ -56,12 +56,16 @@
   __s16 max_beb_per1024;
   __s8 padding[10];
 };
+enum {
+  UBI_VOL_SKIP_CRC_CHECK_FLG = 0x1,
+};
+#define UBI_VOL_VALID_FLGS (UBI_VOL_SKIP_CRC_CHECK_FLG)
 struct ubi_mkvol_req {
   __s32 vol_id;
   __s32 alignment;
   __s64 bytes;
   __s8 vol_type;
-  __s8 padding1;
+  __u8 flags;
   __s16 name_len;
   __s8 padding2[4];
   char name[UBI_MAX_VOLUME_NAME + 1];
diff --git a/libc/kernel/uapi/rdma/cxgb4-abi.h b/libc/kernel/uapi/rdma/cxgb4-abi.h
index 188d901..5433ce6 100644
--- a/libc/kernel/uapi/rdma/cxgb4-abi.h
+++ b/libc/kernel/uapi/rdma/cxgb4-abi.h
@@ -20,6 +20,13 @@
 #define CXGB4_ABI_USER_H
 #include <linux/types.h>
 #define C4IW_UVERBS_ABI_VERSION 3
+enum {
+  C4IW_64B_CQE = (1 << 0)
+};
+struct c4iw_create_cq {
+  __u32 flags;
+  __u32 reserved;
+};
 struct c4iw_create_cq_resp {
   __aligned_u64 key;
   __aligned_u64 gts_key;
@@ -27,10 +34,11 @@
   __u32 cqid;
   __u32 size;
   __u32 qid_mask;
-  __u32 reserved;
+  __u32 flags;
 };
 enum {
-  C4IW_QPF_ONCHIP = (1 << 0)
+  C4IW_QPF_ONCHIP = (1 << 0),
+  C4IW_QPF_WRITE_W_IMM = (1 << 1)
 };
 struct c4iw_create_qp_resp {
   __aligned_u64 ma_sync_key;
@@ -47,6 +55,20 @@
   __u32 qid_mask;
   __u32 flags;
 };
+struct c4iw_create_srq_resp {
+  __aligned_u64 srq_key;
+  __aligned_u64 srq_db_gts_key;
+  __aligned_u64 srq_memsize;
+  __u32 srqid;
+  __u32 srq_size;
+  __u32 rqt_abs_idx;
+  __u32 qid_mask;
+  __u32 flags;
+  __u32 reserved;
+};
+enum {
+  T4_SRQ_LIMIT_SUPPORT = 1 << 0,
+};
 struct c4iw_alloc_ucontext_resp {
   __aligned_u64 status_page_key;
   __u32 status_page_size;
diff --git a/libc/kernel/uapi/rdma/hns-abi.h b/libc/kernel/uapi/rdma/hns-abi.h
index 8c66f27..23bedf9 100644
--- a/libc/kernel/uapi/rdma/hns-abi.h
+++ b/libc/kernel/uapi/rdma/hns-abi.h
@@ -34,6 +34,7 @@
   __u8 log_sq_stride;
   __u8 sq_no_prefetch;
   __u8 reserved[5];
+  __aligned_u64 sdb_addr;
 };
 struct hns_roce_ib_create_qp_resp {
   __aligned_u64 cap_flags;
diff --git a/libc/kernel/uapi/rdma/ib_user_ioctl_cmds.h b/libc/kernel/uapi/rdma/ib_user_ioctl_cmds.h
index 4bc9786..69ded8e 100644
--- a/libc/kernel/uapi/rdma/ib_user_ioctl_cmds.h
+++ b/libc/kernel/uapi/rdma/ib_user_ioctl_cmds.h
@@ -38,6 +38,7 @@
   UVERBS_OBJECT_WQ,
   UVERBS_OBJECT_FLOW_ACTION,
   UVERBS_OBJECT_DM,
+  UVERBS_OBJECT_COUNTERS,
 };
 enum {
   UVERBS_ATTR_UHW_IN = UVERBS_UDATA_DRIVER_DATA_FLAG,
@@ -57,13 +58,16 @@
   UVERBS_ATTR_DESTROY_CQ_RESP,
 };
 enum uverbs_attrs_create_flow_action_esp {
-  UVERBS_ATTR_FLOW_ACTION_ESP_HANDLE,
+  UVERBS_ATTR_CREATE_FLOW_ACTION_ESP_HANDLE,
   UVERBS_ATTR_FLOW_ACTION_ESP_ATTRS,
   UVERBS_ATTR_FLOW_ACTION_ESP_ESN,
   UVERBS_ATTR_FLOW_ACTION_ESP_KEYMAT,
   UVERBS_ATTR_FLOW_ACTION_ESP_REPLAY,
   UVERBS_ATTR_FLOW_ACTION_ESP_ENCAP,
 };
+enum uverbs_attrs_modify_flow_action_esp {
+  UVERBS_ATTR_MODIFY_FLOW_ACTION_ESP_HANDLE = UVERBS_ATTR_CREATE_FLOW_ACTION_ESP_HANDLE,
+};
 enum uverbs_attrs_destroy_flow_action_esp {
   UVERBS_ATTR_DESTROY_FLOW_ACTION_HANDLE,
 };
@@ -101,4 +105,20 @@
 enum uverbs_methods_mr {
   UVERBS_METHOD_DM_MR_REG,
 };
+enum uverbs_attrs_create_counters_cmd_attr_ids {
+  UVERBS_ATTR_CREATE_COUNTERS_HANDLE,
+};
+enum uverbs_attrs_destroy_counters_cmd_attr_ids {
+  UVERBS_ATTR_DESTROY_COUNTERS_HANDLE,
+};
+enum uverbs_attrs_read_counters_cmd_attr_ids {
+  UVERBS_ATTR_READ_COUNTERS_HANDLE,
+  UVERBS_ATTR_READ_COUNTERS_BUFF,
+  UVERBS_ATTR_READ_COUNTERS_FLAGS,
+};
+enum uverbs_methods_actions_counters_ops {
+  UVERBS_METHOD_COUNTERS_CREATE,
+  UVERBS_METHOD_COUNTERS_DESTROY,
+  UVERBS_METHOD_COUNTERS_READ,
+};
 #endif
diff --git a/libc/kernel/uapi/rdma/ib_user_ioctl_verbs.h b/libc/kernel/uapi/rdma/ib_user_ioctl_verbs.h
index 261734e..8bea1cb 100644
--- a/libc/kernel/uapi/rdma/ib_user_ioctl_verbs.h
+++ b/libc/kernel/uapi/rdma/ib_user_ioctl_verbs.h
@@ -22,6 +22,50 @@
 #ifndef RDMA_UAPI_PTR
 #define RDMA_UAPI_PTR(_type,_name) __aligned_u64 _name
 #endif
+enum ib_uverbs_access_flags {
+  IB_UVERBS_ACCESS_LOCAL_WRITE = 1 << 0,
+  IB_UVERBS_ACCESS_REMOTE_WRITE = 1 << 1,
+  IB_UVERBS_ACCESS_REMOTE_READ = 1 << 2,
+  IB_UVERBS_ACCESS_REMOTE_ATOMIC = 1 << 3,
+  IB_UVERBS_ACCESS_MW_BIND = 1 << 4,
+  IB_UVERBS_ACCESS_ZERO_BASED = 1 << 5,
+  IB_UVERBS_ACCESS_ON_DEMAND = 1 << 6,
+  IB_UVERBS_ACCESS_HUGETLB = 1 << 7,
+};
+enum ib_uverbs_query_port_cap_flags {
+  IB_UVERBS_PCF_SM = 1 << 1,
+  IB_UVERBS_PCF_NOTICE_SUP = 1 << 2,
+  IB_UVERBS_PCF_TRAP_SUP = 1 << 3,
+  IB_UVERBS_PCF_OPT_IPD_SUP = 1 << 4,
+  IB_UVERBS_PCF_AUTO_MIGR_SUP = 1 << 5,
+  IB_UVERBS_PCF_SL_MAP_SUP = 1 << 6,
+  IB_UVERBS_PCF_MKEY_NVRAM = 1 << 7,
+  IB_UVERBS_PCF_PKEY_NVRAM = 1 << 8,
+  IB_UVERBS_PCF_LED_INFO_SUP = 1 << 9,
+  IB_UVERBS_PCF_SM_DISABLED = 1 << 10,
+  IB_UVERBS_PCF_SYS_IMAGE_GUID_SUP = 1 << 11,
+  IB_UVERBS_PCF_PKEY_SW_EXT_PORT_TRAP_SUP = 1 << 12,
+  IB_UVERBS_PCF_EXTENDED_SPEEDS_SUP = 1 << 14,
+  IB_UVERBS_PCF_CM_SUP = 1 << 16,
+  IB_UVERBS_PCF_SNMP_TUNNEL_SUP = 1 << 17,
+  IB_UVERBS_PCF_REINIT_SUP = 1 << 18,
+  IB_UVERBS_PCF_DEVICE_MGMT_SUP = 1 << 19,
+  IB_UVERBS_PCF_VENDOR_CLASS_SUP = 1 << 20,
+  IB_UVERBS_PCF_DR_NOTICE_SUP = 1 << 21,
+  IB_UVERBS_PCF_CAP_MASK_NOTICE_SUP = 1 << 22,
+  IB_UVERBS_PCF_BOOT_MGMT_SUP = 1 << 23,
+  IB_UVERBS_PCF_LINK_LATENCY_SUP = 1 << 24,
+  IB_UVERBS_PCF_CLIENT_REG_SUP = 1 << 25,
+  IB_UVERBS_PCF_LINK_SPEED_WIDTH_TABLE_SUP = 1 << 27,
+  IB_UVERBS_PCF_VENDOR_SPECIFIC_MADS_TABLE_SUP = 1 << 28,
+  IB_UVERBS_PCF_MCAST_PKEY_TRAP_SUPPRESSION_SUP = 1 << 29,
+  IB_UVERBS_PCF_MCAST_FDB_TOP_SUP = 1 << 30,
+  IB_UVERBS_PCF_HIERARCHY_INFO_SUP = 1ULL << 31,
+  IB_UVERBS_PCF_IP_BASED_GIDS = 1 << 26,
+};
+enum ib_uverbs_query_port_flags {
+  IB_UVERBS_QPF_GRH_REQUIRED = 1 << 0,
+};
 enum ib_uverbs_flow_action_esp_keymat {
   IB_UVERBS_FLOW_ACTION_ESP_KEYMAT_AES_GCM,
 };
@@ -65,4 +109,7 @@
   __u32 flags;
   __aligned_u64 hard_limit_pkts;
 };
+enum ib_uverbs_read_counters_flags {
+  IB_UVERBS_READ_COUNTERS_PREFER_CACHED = 1 << 0,
+};
 #endif
diff --git a/libc/kernel/uapi/rdma/ib_user_verbs.h b/libc/kernel/uapi/rdma/ib_user_verbs.h
index 53e4725..3baf4ed 100644
--- a/libc/kernel/uapi/rdma/ib_user_verbs.h
+++ b/libc/kernel/uapi/rdma/ib_user_verbs.h
@@ -228,7 +228,8 @@
   __u8 active_speed;
   __u8 phys_state;
   __u8 link_layer;
-  __u8 reserved[2];
+  __u8 flags;
+  __u8 reserved;
 };
 struct ib_uverbs_alloc_pd {
   __aligned_u64 response;
@@ -828,6 +829,18 @@
   __u32 handle;
   __u32 reserved1;
 };
+struct ib_uverbs_flow_spec_action_count {
+  union {
+    struct ib_uverbs_flow_spec_hdr hdr;
+    struct {
+      __u32 type;
+      __u16 size;
+      __u16 reserved;
+    };
+  };
+  __u32 handle;
+  __u32 reserved1;
+};
 struct ib_uverbs_flow_tunnel_filter {
   __be32 tunnel_id;
 };
@@ -859,6 +872,38 @@
   struct ib_uverbs_flow_spec_esp_filter val;
   struct ib_uverbs_flow_spec_esp_filter mask;
 };
+struct ib_uverbs_flow_gre_filter {
+  __be16 c_ks_res0_ver;
+  __be16 protocol;
+  __be32 key;
+};
+struct ib_uverbs_flow_spec_gre {
+  union {
+    struct ib_uverbs_flow_spec_hdr hdr;
+    struct {
+      __u32 type;
+      __u16 size;
+      __u16 reserved;
+    };
+  };
+  struct ib_uverbs_flow_gre_filter val;
+  struct ib_uverbs_flow_gre_filter mask;
+};
+struct ib_uverbs_flow_mpls_filter {
+  __be32 label;
+};
+struct ib_uverbs_flow_spec_mpls {
+  union {
+    struct ib_uverbs_flow_spec_hdr hdr;
+    struct {
+      __u32 type;
+      __u16 size;
+      __u16 reserved;
+    };
+  };
+  struct ib_uverbs_flow_mpls_filter val;
+  struct ib_uverbs_flow_mpls_filter mask;
+};
 struct ib_uverbs_flow_attr {
   __u32 type;
   __u16 size;
diff --git a/libc/kernel/uapi/rdma/mlx5-abi.h b/libc/kernel/uapi/rdma/mlx5-abi.h
index 170c0a6..50ecd2f 100644
--- a/libc/kernel/uapi/rdma/mlx5-abi.h
+++ b/libc/kernel/uapi/rdma/mlx5-abi.h
@@ -20,6 +20,7 @@
 #define MLX5_ABI_USER_H
 #include <linux/types.h>
 #include <linux/if_ether.h>
+#include <rdma/ib_user_ioctl_verbs.h>
 enum {
   MLX5_QP_FLAG_SIGNATURE = 1 << 0,
   MLX5_QP_FLAG_SCATTER_CQE = 1 << 1,
@@ -42,6 +43,9 @@
 enum mlx5_lib_caps {
   MLX5_LIB_CAP_4K_UAR = (__u64) 1 << 0,
 };
+enum mlx5_ib_alloc_uctx_v2_flags {
+  MLX5_IB_ALLOC_UCTX_DEVX = 1 << 0,
+};
 struct mlx5_ib_alloc_ucontext_req_v2 {
   __u32 total_num_bfregs;
   __u32 num_low_latency_bfregs;
@@ -55,6 +59,7 @@
 };
 enum mlx5_ib_alloc_ucontext_resp_mask {
   MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_CORE_CLOCK_OFFSET = 1UL << 0,
+  MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_DUMP_FILL_MKEY = 1UL << 1,
 };
 enum mlx5_user_cmds_supp_uhw {
   MLX5_USER_CMDS_SUPP_UHW_QUERY_DEVICE = 1 << 0,
@@ -96,7 +101,7 @@
   __u32 log_uar_size;
   __u32 num_uars_per_page;
   __u32 num_dyn_bfregs;
-  __u32 reserved3;
+  __u32 dump_fill_mkey;
 };
 struct mlx5_ib_alloc_pd_resp {
   __u32 pdn;
@@ -113,7 +118,7 @@
 enum mlx5_ib_cqe_comp_res_format {
   MLX5_IB_CQE_RES_FORMAT_HASH = 1 << 0,
   MLX5_IB_CQE_RES_FORMAT_CSUM = 1 << 1,
-  MLX5_IB_CQE_RES_RESERVED = 1 << 2,
+  MLX5_IB_CQE_RES_FORMAT_CSUM_STRIDX = 1 << 2,
 };
 struct mlx5_ib_cqe_comp_caps {
   __u32 max_num;
@@ -158,7 +163,9 @@
 enum mlx5_ib_tunnel_offloads {
   MLX5_IB_TUNNELED_OFFLOADS_VXLAN = 1 << 0,
   MLX5_IB_TUNNELED_OFFLOADS_GRE = 1 << 1,
-  MLX5_IB_TUNNELED_OFFLOADS_GENEVE = 1 << 2
+  MLX5_IB_TUNNELED_OFFLOADS_GENEVE = 1 << 2,
+  MLX5_IB_TUNNELED_OFFLOADS_MPLS_GRE = 1 << 3,
+  MLX5_IB_TUNNELED_OFFLOADS_MPLS_UDP = 1 << 4,
 };
 struct mlx5_ib_query_device_resp {
   __u32 comp_mask;
@@ -328,4 +335,18 @@
 enum {
   MLX5_IB_CLOCK_INFO_V1 = 0,
 };
+struct mlx5_ib_flow_counters_desc {
+  __u32 description;
+  __u32 index;
+};
+struct mlx5_ib_flow_counters_data {
+  RDMA_UAPI_PTR(struct mlx5_ib_flow_counters_desc *, counters_data);
+  __u32 ncounters;
+  __u32 reserved;
+};
+struct mlx5_ib_create_flow {
+  __u32 ncounters_data;
+  __u32 reserved;
+  struct mlx5_ib_flow_counters_data data[];
+};
 #endif
diff --git a/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h b/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h
index 37aebaf..11ff576 100644
--- a/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h
+++ b/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h
@@ -18,6 +18,7 @@
  ****************************************************************************/
 #ifndef MLX5_USER_IOCTL_CMDS_H
 #define MLX5_USER_IOCTL_CMDS_H
+#include <linux/types.h>
 #include <rdma/ib_user_ioctl_cmds.h>
 enum mlx5_ib_create_flow_action_attrs {
   MLX5_IB_ATTR_CREATE_FLOW_ACTION_FLAGS = (1U << UVERBS_ID_NS_SHIFT),
@@ -26,4 +27,102 @@
   MLX5_IB_ATTR_ALLOC_DM_RESP_START_OFFSET = (1U << UVERBS_ID_NS_SHIFT),
   MLX5_IB_ATTR_ALLOC_DM_RESP_PAGE_INDEX,
 };
+enum mlx5_ib_devx_methods {
+  MLX5_IB_METHOD_DEVX_OTHER = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_METHOD_DEVX_QUERY_UAR,
+  MLX5_IB_METHOD_DEVX_QUERY_EQN,
+};
+enum mlx5_ib_devx_other_attrs {
+  MLX5_IB_ATTR_DEVX_OTHER_CMD_IN = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_DEVX_OTHER_CMD_OUT,
+};
+enum mlx5_ib_devx_obj_create_attrs {
+  MLX5_IB_ATTR_DEVX_OBJ_CREATE_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_DEVX_OBJ_CREATE_CMD_IN,
+  MLX5_IB_ATTR_DEVX_OBJ_CREATE_CMD_OUT,
+};
+enum mlx5_ib_devx_query_uar_attrs {
+  MLX5_IB_ATTR_DEVX_QUERY_UAR_USER_IDX = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_DEVX_QUERY_UAR_DEV_IDX,
+};
+enum mlx5_ib_devx_obj_destroy_attrs {
+  MLX5_IB_ATTR_DEVX_OBJ_DESTROY_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+};
+enum mlx5_ib_devx_obj_modify_attrs {
+  MLX5_IB_ATTR_DEVX_OBJ_MODIFY_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_DEVX_OBJ_MODIFY_CMD_IN,
+  MLX5_IB_ATTR_DEVX_OBJ_MODIFY_CMD_OUT,
+};
+enum mlx5_ib_devx_obj_query_attrs {
+  MLX5_IB_ATTR_DEVX_OBJ_QUERY_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_DEVX_OBJ_QUERY_CMD_IN,
+  MLX5_IB_ATTR_DEVX_OBJ_QUERY_CMD_OUT,
+};
+enum mlx5_ib_devx_query_eqn_attrs {
+  MLX5_IB_ATTR_DEVX_QUERY_EQN_USER_VEC = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_DEVX_QUERY_EQN_DEV_EQN,
+};
+enum mlx5_ib_devx_obj_methods {
+  MLX5_IB_METHOD_DEVX_OBJ_CREATE = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_METHOD_DEVX_OBJ_DESTROY,
+  MLX5_IB_METHOD_DEVX_OBJ_MODIFY,
+  MLX5_IB_METHOD_DEVX_OBJ_QUERY,
+};
+enum mlx5_ib_devx_umem_reg_attrs {
+  MLX5_IB_ATTR_DEVX_UMEM_REG_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_DEVX_UMEM_REG_ADDR,
+  MLX5_IB_ATTR_DEVX_UMEM_REG_LEN,
+  MLX5_IB_ATTR_DEVX_UMEM_REG_ACCESS,
+  MLX5_IB_ATTR_DEVX_UMEM_REG_OUT_ID,
+};
+enum mlx5_ib_devx_umem_dereg_attrs {
+  MLX5_IB_ATTR_DEVX_UMEM_DEREG_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+};
+enum mlx5_ib_devx_umem_methods {
+  MLX5_IB_METHOD_DEVX_UMEM_REG = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_METHOD_DEVX_UMEM_DEREG,
+};
+enum mlx5_ib_objects {
+  MLX5_IB_OBJECT_DEVX = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_OBJECT_DEVX_OBJ,
+  MLX5_IB_OBJECT_DEVX_UMEM,
+  MLX5_IB_OBJECT_FLOW_MATCHER,
+};
+enum mlx5_ib_flow_matcher_create_attrs {
+  MLX5_IB_ATTR_FLOW_MATCHER_CREATE_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_FLOW_MATCHER_MATCH_MASK,
+  MLX5_IB_ATTR_FLOW_MATCHER_FLOW_TYPE,
+  MLX5_IB_ATTR_FLOW_MATCHER_MATCH_CRITERIA,
+};
+enum mlx5_ib_flow_matcher_destroy_attrs {
+  MLX5_IB_ATTR_FLOW_MATCHER_DESTROY_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+};
+enum mlx5_ib_flow_matcher_methods {
+  MLX5_IB_METHOD_FLOW_MATCHER_CREATE = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_METHOD_FLOW_MATCHER_DESTROY,
+};
+#define MLX5_IB_DW_MATCH_PARAM 0x80
+struct mlx5_ib_match_params {
+  __u32 match_params[MLX5_IB_DW_MATCH_PARAM];
+};
+enum mlx5_ib_flow_type {
+  MLX5_IB_FLOW_TYPE_NORMAL,
+  MLX5_IB_FLOW_TYPE_SNIFFER,
+  MLX5_IB_FLOW_TYPE_ALL_DEFAULT,
+  MLX5_IB_FLOW_TYPE_MC_DEFAULT,
+};
+enum mlx5_ib_create_flow_attrs {
+  MLX5_IB_ATTR_CREATE_FLOW_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_CREATE_FLOW_MATCH_VALUE,
+  MLX5_IB_ATTR_CREATE_FLOW_DEST_QP,
+  MLX5_IB_ATTR_CREATE_FLOW_DEST_DEVX,
+  MLX5_IB_ATTR_CREATE_FLOW_MATCHER,
+};
+enum mlx5_ib_destoy_flow_attrs {
+  MLX5_IB_ATTR_DESTROY_FLOW_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+};
+enum mlx5_ib_flow_methods {
+  MLX5_IB_METHOD_CREATE_FLOW = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_METHOD_DESTROY_FLOW,
+};
 #endif
diff --git a/libc/kernel/uapi/rdma/qedr-abi.h b/libc/kernel/uapi/rdma/qedr-abi.h
index 8626f8c..57ad827 100644
--- a/libc/kernel/uapi/rdma/qedr-abi.h
+++ b/libc/kernel/uapi/rdma/qedr-abi.h
@@ -69,4 +69,14 @@
   __u32 rq_db2_offset;
   __u32 reserved;
 };
+struct qedr_create_srq_ureq {
+  __aligned_u64 prod_pair_addr;
+  __aligned_u64 srq_addr;
+  __aligned_u64 srq_len;
+};
+struct qedr_create_srq_uresp {
+  __u16 srq_id;
+  __u16 reserved0;
+  __u32 reserved1;
+};
 #endif
diff --git a/libc/kernel/uapi/rdma/rdma_netlink.h b/libc/kernel/uapi/rdma/rdma_netlink.h
index 36c8911..48cbc3d 100644
--- a/libc/kernel/uapi/rdma/rdma_netlink.h
+++ b/libc/kernel/uapi/rdma/rdma_netlink.h
@@ -182,8 +182,16 @@
   RDMA_NLDEV_CMD_RES_PD_GET,
   RDMA_NLDEV_NUM_OPS
 };
+enum {
+  RDMA_NLDEV_ATTR_ENTRY_STRLEN = 16,
+};
+enum rdma_nldev_print_type {
+  RDMA_NLDEV_PRINT_TYPE_UNSPEC,
+  RDMA_NLDEV_PRINT_TYPE_HEX,
+};
 enum rdma_nldev_attr {
   RDMA_NLDEV_ATTR_UNSPEC,
+  RDMA_NLDEV_ATTR_PAD = RDMA_NLDEV_ATTR_UNSPEC,
   RDMA_NLDEV_ATTR_DEV_INDEX,
   RDMA_NLDEV_ATTR_DEV_NAME,
   RDMA_NLDEV_ATTR_PORT_INDEX,
@@ -235,6 +243,14 @@
   RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY,
   RDMA_NLDEV_ATTR_NDEV_INDEX,
   RDMA_NLDEV_ATTR_NDEV_NAME,
+  RDMA_NLDEV_ATTR_DRIVER,
+  RDMA_NLDEV_ATTR_DRIVER_ENTRY,
+  RDMA_NLDEV_ATTR_DRIVER_STRING,
+  RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE,
+  RDMA_NLDEV_ATTR_DRIVER_S32,
+  RDMA_NLDEV_ATTR_DRIVER_U32,
+  RDMA_NLDEV_ATTR_DRIVER_S64,
+  RDMA_NLDEV_ATTR_DRIVER_U64,
   RDMA_NLDEV_ATTR_MAX
 };
 #endif
diff --git a/libc/kernel/uapi/rdma/rdma_user_ioctl_cmds.h b/libc/kernel/uapi/rdma/rdma_user_ioctl_cmds.h
index 5da7917..7cd6cd0 100644
--- a/libc/kernel/uapi/rdma/rdma_user_ioctl_cmds.h
+++ b/libc/kernel/uapi/rdma/rdma_user_ioctl_cmds.h
@@ -37,7 +37,10 @@
     } enum_data;
     __u16 reserved;
   } attr_data;
-  __aligned_u64 data;
+  union {
+    __aligned_u64 data;
+    __s64 data_s64;
+  };
 };
 struct ib_uverbs_ioctl_hdr {
   __u16 length;
diff --git a/libc/kernel/uapi/sound/asoc.h b/libc/kernel/uapi/sound/asoc.h
index d0bab8b..e46c4b5 100644
--- a/libc/kernel/uapi/sound/asoc.h
+++ b/libc/kernel/uapi/sound/asoc.h
@@ -95,6 +95,11 @@
 #define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_RATES (1 << 0)
 #define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)
 #define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)
+#define SND_SOC_TPLG_DAI_CLK_GATE_UNDEFINED 0
+#define SND_SOC_TPLG_DAI_CLK_GATE_GATED 1
+#define SND_SOC_TPLG_DAI_CLK_GATE_CONT 2
+#define SND_SOC_TPLG_MCLK_CO 0
+#define SND_SOC_TPLG_MCLK_CI 1
 #define SND_SOC_DAI_FORMAT_I2S 1
 #define SND_SOC_DAI_FORMAT_RIGHT_J 2
 #define SND_SOC_DAI_FORMAT_LEFT_J 3
@@ -108,6 +113,10 @@
 #define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)
 #define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)
 #define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP (1 << 3)
+#define SND_SOC_TPLG_BCLK_CM 0
+#define SND_SOC_TPLG_BCLK_CS 1
+#define SND_SOC_TPLG_FSYNC_CM 0
+#define SND_SOC_TPLG_FSYNC_CS 1
 struct snd_soc_tplg_hdr {
   __le32 magic;
   __le32 abi;
@@ -335,4 +344,48 @@
   __le32 flags;
   struct snd_soc_tplg_private priv;
 } __attribute__((packed));
+struct snd_soc_tplg_manifest_v4 {
+  __le32 size;
+  __le32 control_elems;
+  __le32 widget_elems;
+  __le32 graph_elems;
+  __le32 pcm_elems;
+  __le32 dai_link_elems;
+  struct snd_soc_tplg_private priv;
+} __packed;
+struct snd_soc_tplg_stream_caps_v4 {
+  __le32 size;
+  char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
+  __le64 formats;
+  __le32 rates;
+  __le32 rate_min;
+  __le32 rate_max;
+  __le32 channels_min;
+  __le32 channels_max;
+  __le32 periods_min;
+  __le32 periods_max;
+  __le32 period_size_min;
+  __le32 period_size_max;
+  __le32 buffer_size_min;
+  __le32 buffer_size_max;
+} __packed;
+struct snd_soc_tplg_pcm_v4 {
+  __le32 size;
+  char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
+  char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
+  __le32 pcm_id;
+  __le32 dai_id;
+  __le32 playback;
+  __le32 capture;
+  __le32 compress;
+  struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX];
+  __le32 num_streams;
+  struct snd_soc_tplg_stream_caps_v4 caps[2];
+} __packed;
+struct snd_soc_tplg_link_config_v4 {
+  __le32 size;
+  __le32 id;
+  struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX];
+  __le32 num_streams;
+} __packed;
 #endif
diff --git a/libc/kernel/uapi/sound/skl-tplg-interface.h b/libc/kernel/uapi/sound/skl-tplg-interface.h
new file mode 100644
index 0000000..58e0afa
--- /dev/null
+++ b/libc/kernel/uapi/sound/skl-tplg-interface.h
@@ -0,0 +1,183 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   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 __HDA_TPLG_INTERFACE_H__
+#define __HDA_TPLG_INTERFACE_H__
+#include <linux/types.h>
+#define SKL_CONTROL_TYPE_BYTE_TLV 0x100
+#define SKL_CONTROL_TYPE_MIC_SELECT 0x102
+#define HDA_SST_CFG_MAX 900
+#define MAX_IN_QUEUE 8
+#define MAX_OUT_QUEUE 8
+#define SKL_UUID_STR_SZ 40
+enum skl_event_types {
+  SKL_EVENT_NONE = 0,
+  SKL_MIXER_EVENT,
+  SKL_MUX_EVENT,
+  SKL_VMIXER_EVENT,
+  SKL_PGA_EVENT
+};
+enum skl_ch_cfg {
+  SKL_CH_CFG_MONO = 0,
+  SKL_CH_CFG_STEREO = 1,
+  SKL_CH_CFG_2_1 = 2,
+  SKL_CH_CFG_3_0 = 3,
+  SKL_CH_CFG_3_1 = 4,
+  SKL_CH_CFG_QUATRO = 5,
+  SKL_CH_CFG_4_0 = 6,
+  SKL_CH_CFG_5_0 = 7,
+  SKL_CH_CFG_5_1 = 8,
+  SKL_CH_CFG_DUAL_MONO = 9,
+  SKL_CH_CFG_I2S_DUAL_STEREO_0 = 10,
+  SKL_CH_CFG_I2S_DUAL_STEREO_1 = 11,
+  SKL_CH_CFG_4_CHANNEL = 12,
+  SKL_CH_CFG_INVALID
+};
+enum skl_module_type {
+  SKL_MODULE_TYPE_MIXER = 0,
+  SKL_MODULE_TYPE_COPIER,
+  SKL_MODULE_TYPE_UPDWMIX,
+  SKL_MODULE_TYPE_SRCINT,
+  SKL_MODULE_TYPE_ALGO,
+  SKL_MODULE_TYPE_BASE_OUTFMT,
+  SKL_MODULE_TYPE_KPB,
+  SKL_MODULE_TYPE_MIC_SELECT,
+};
+enum skl_core_affinity {
+  SKL_AFFINITY_CORE_0 = 0,
+  SKL_AFFINITY_CORE_1,
+  SKL_AFFINITY_CORE_MAX
+};
+enum skl_pipe_conn_type {
+  SKL_PIPE_CONN_TYPE_NONE = 0,
+  SKL_PIPE_CONN_TYPE_FE,
+  SKL_PIPE_CONN_TYPE_BE
+};
+enum skl_hw_conn_type {
+  SKL_CONN_NONE = 0,
+  SKL_CONN_SOURCE = 1,
+  SKL_CONN_SINK = 2
+};
+enum skl_dev_type {
+  SKL_DEVICE_BT = 0x0,
+  SKL_DEVICE_DMIC = 0x1,
+  SKL_DEVICE_I2S = 0x2,
+  SKL_DEVICE_SLIMBUS = 0x3,
+  SKL_DEVICE_HDALINK = 0x4,
+  SKL_DEVICE_HDAHOST = 0x5,
+  SKL_DEVICE_NONE
+};
+enum skl_interleaving {
+  SKL_INTERLEAVING_PER_CHANNEL = 0,
+  SKL_INTERLEAVING_PER_SAMPLE = 1,
+};
+enum skl_sample_type {
+  SKL_SAMPLE_TYPE_INT_MSB = 0,
+  SKL_SAMPLE_TYPE_INT_LSB = 1,
+  SKL_SAMPLE_TYPE_INT_SIGNED = 2,
+  SKL_SAMPLE_TYPE_INT_UNSIGNED = 3,
+  SKL_SAMPLE_TYPE_FLOAT = 4
+};
+enum module_pin_type {
+  SKL_PIN_TYPE_HOMOGENEOUS,
+  SKL_PIN_TYPE_HETEROGENEOUS,
+};
+enum skl_module_param_type {
+  SKL_PARAM_DEFAULT = 0,
+  SKL_PARAM_INIT,
+  SKL_PARAM_SET,
+  SKL_PARAM_BIND
+};
+struct skl_dfw_algo_data {
+  __u32 set_params : 2;
+  __u32 rsvd : 30;
+  __u32 param_id;
+  __u32 max;
+  char params[0];
+} __packed;
+enum skl_tkn_dir {
+  SKL_DIR_IN,
+  SKL_DIR_OUT
+};
+enum skl_tuple_type {
+  SKL_TYPE_TUPLE,
+  SKL_TYPE_DATA
+};
+struct skl_dfw_v4_module_pin {
+  __u16 module_id;
+  __u16 instance_id;
+} __packed;
+struct skl_dfw_v4_module_fmt {
+  __u32 channels;
+  __u32 freq;
+  __u32 bit_depth;
+  __u32 valid_bit_depth;
+  __u32 ch_cfg;
+  __u32 interleaving_style;
+  __u32 sample_type;
+  __u32 ch_map;
+} __packed;
+struct skl_dfw_v4_module_caps {
+  __u32 set_params : 2;
+  __u32 rsvd : 30;
+  __u32 param_id;
+  __u32 caps_size;
+  __u32 caps[HDA_SST_CFG_MAX];
+} __packed;
+struct skl_dfw_v4_pipe {
+  __u8 pipe_id;
+  __u8 pipe_priority;
+  __u16 conn_type : 4;
+  __u16 rsvd : 4;
+  __u16 memory_pages : 8;
+} __packed;
+struct skl_dfw_v4_module {
+  char uuid[SKL_UUID_STR_SZ];
+  __u16 module_id;
+  __u16 instance_id;
+  __u32 max_mcps;
+  __u32 mem_pages;
+  __u32 obs;
+  __u32 ibs;
+  __u32 vbus_id;
+  __u32 max_in_queue : 8;
+  __u32 max_out_queue : 8;
+  __u32 time_slot : 8;
+  __u32 core_id : 4;
+  __u32 rsvd1 : 4;
+  __u32 module_type : 8;
+  __u32 conn_type : 4;
+  __u32 dev_type : 4;
+  __u32 hw_conn_type : 4;
+  __u32 rsvd2 : 12;
+  __u32 params_fixup : 8;
+  __u32 converter : 8;
+  __u32 input_pin_type : 1;
+  __u32 output_pin_type : 1;
+  __u32 is_dynamic_in_pin : 1;
+  __u32 is_dynamic_out_pin : 1;
+  __u32 is_loadable : 1;
+  __u32 rsvd3 : 11;
+  struct skl_dfw_v4_pipe pipe;
+  struct skl_dfw_v4_module_fmt in_fmt[MAX_IN_QUEUE];
+  struct skl_dfw_v4_module_fmt out_fmt[MAX_OUT_QUEUE];
+  struct skl_dfw_v4_module_pin in_pin[MAX_IN_QUEUE];
+  struct skl_dfw_v4_module_pin out_pin[MAX_OUT_QUEUE];
+  struct skl_dfw_v4_module_caps caps;
+} __packed;
+#endif
diff --git a/libc/kernel/uapi/sound/tlv.h b/libc/kernel/uapi/sound/tlv.h
index 9a5c521..0822429 100644
--- a/libc/kernel/uapi/sound/tlv.h
+++ b/libc/kernel/uapi/sound/tlv.h
@@ -29,18 +29,26 @@
 #define SNDRV_CTL_TLVT_CHMAP_PAIRED 0x103
 #define SNDRV_CTL_TLVD_ITEM(type,...) (type), SNDRV_CTL_TLVD_LENGTH(__VA_ARGS__), __VA_ARGS__
 #define SNDRV_CTL_TLVD_LENGTH(...) ((unsigned int) sizeof((const unsigned int[]) { __VA_ARGS__ }))
+#define SNDRV_CTL_TLVO_TYPE 0
+#define SNDRV_CTL_TLVO_LEN 1
 #define SNDRV_CTL_TLVD_CONTAINER_ITEM(...) SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_CONTAINER, __VA_ARGS__)
 #define SNDRV_CTL_TLVD_DECLARE_CONTAINER(name,...) unsigned int name[] = { SNDRV_CTL_TLVD_CONTAINER_ITEM(__VA_ARGS__) }
 #define SNDRV_CTL_TLVD_DB_SCALE_MASK 0xffff
 #define SNDRV_CTL_TLVD_DB_SCALE_MUTE 0x10000
 #define SNDRV_CTL_TLVD_DB_SCALE_ITEM(min,step,mute) SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_SCALE, (min), ((step) & SNDRV_CTL_TLVD_DB_SCALE_MASK) | ((mute) ? SNDRV_CTL_TLVD_DB_SCALE_MUTE : 0))
 #define SNDRV_CTL_TLVD_DECLARE_DB_SCALE(name,min,step,mute) unsigned int name[] = { SNDRV_CTL_TLVD_DB_SCALE_ITEM(min, step, mute) }
+#define SNDRV_CTL_TLVO_DB_SCALE_MIN 2
+#define SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP 3
 #define SNDRV_CTL_TLVD_DB_MINMAX_ITEM(min_dB,max_dB) SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_MINMAX, (min_dB), (max_dB))
 #define SNDRV_CTL_TLVD_DB_MINMAX_MUTE_ITEM(min_dB,max_dB) SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_MINMAX_MUTE, (min_dB), (max_dB))
 #define SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(name,min_dB,max_dB) unsigned int name[] = { SNDRV_CTL_TLVD_DB_MINMAX_ITEM(min_dB, max_dB) }
 #define SNDRV_CTL_TLVD_DECLARE_DB_MINMAX_MUTE(name,min_dB,max_dB) unsigned int name[] = { SNDRV_CTL_TLVD_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) }
+#define SNDRV_CTL_TLVO_DB_MINMAX_MIN 2
+#define SNDRV_CTL_TLVO_DB_MINMAX_MAX 3
 #define SNDRV_CTL_TLVD_DB_LINEAR_ITEM(min_dB,max_dB) SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_LINEAR, (min_dB), (max_dB))
 #define SNDRV_CTL_TLVD_DECLARE_DB_LINEAR(name,min_dB,max_dB) unsigned int name[] = { SNDRV_CTL_TLVD_DB_LINEAR_ITEM(min_dB, max_dB) }
+#define SNDRV_CTL_TLVO_DB_LINEAR_MIN 2
+#define SNDRV_CTL_TLVO_DB_LINEAR_MAX 3
 #define SNDRV_CTL_TLVD_DB_RANGE_ITEM(...) SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_RANGE, __VA_ARGS__)
 #define SNDRV_CTL_TLVD_DECLARE_DB_RANGE(name,...) unsigned int name[] = { SNDRV_CTL_TLVD_DB_RANGE_ITEM(__VA_ARGS__) }
 #define SNDRV_CTL_TLVD_DB_GAIN_MUTE - 9999999
diff --git a/libc/kernel/uapi/xen/gntdev.h b/libc/kernel/uapi/xen/gntdev.h
index 44b5e8c..1e78ac3 100644
--- a/libc/kernel/uapi/xen/gntdev.h
+++ b/libc/kernel/uapi/xen/gntdev.h
@@ -73,4 +73,32 @@
 };
 #define UNMAP_NOTIFY_CLEAR_BYTE 0x1
 #define UNMAP_NOTIFY_SEND_EVENT 0x2
+#define GNTDEV_DMA_FLAG_WC (1 << 0)
+#define GNTDEV_DMA_FLAG_COHERENT (1 << 1)
+#define IOCTL_GNTDEV_DMABUF_EXP_FROM_REFS _IOC(_IOC_NONE, 'G', 9, sizeof(struct ioctl_gntdev_dmabuf_exp_from_refs))
+struct ioctl_gntdev_dmabuf_exp_from_refs {
+  __u32 flags;
+  __u32 count;
+  __u32 fd;
+  __u32 domid;
+  __u32 refs[1];
+};
+#define IOCTL_GNTDEV_DMABUF_EXP_WAIT_RELEASED _IOC(_IOC_NONE, 'G', 10, sizeof(struct ioctl_gntdev_dmabuf_exp_wait_released))
+struct ioctl_gntdev_dmabuf_exp_wait_released {
+  __u32 fd;
+  __u32 wait_to_ms;
+};
+#define IOCTL_GNTDEV_DMABUF_IMP_TO_REFS _IOC(_IOC_NONE, 'G', 11, sizeof(struct ioctl_gntdev_dmabuf_imp_to_refs))
+struct ioctl_gntdev_dmabuf_imp_to_refs {
+  __u32 fd;
+  __u32 count;
+  __u32 domid;
+  __u32 reserved;
+  __u32 refs[1];
+};
+#define IOCTL_GNTDEV_DMABUF_IMP_RELEASE _IOC(_IOC_NONE, 'G', 12, sizeof(struct ioctl_gntdev_dmabuf_imp_release))
+struct ioctl_gntdev_dmabuf_imp_release {
+  __u32 fd;
+  __u32 reserved;
+};
 #endif
diff --git a/libc/kernel/uapi/xen/privcmd.h b/libc/kernel/uapi/xen/privcmd.h
index 210a75e..145446b 100644
--- a/libc/kernel/uapi/xen/privcmd.h
+++ b/libc/kernel/uapi/xen/privcmd.h
@@ -59,10 +59,19 @@
   __u16 num;
   const struct privcmd_dm_op_buf __user * ubufs;
 };
+struct privcmd_mmap_resource {
+  domid_t dom;
+  __u32 type;
+  __u32 id;
+  __u32 idx;
+  __u64 num;
+  __u64 addr;
+};
 #define IOCTL_PRIVCMD_HYPERCALL _IOC(_IOC_NONE, 'P', 0, sizeof(struct privcmd_hypercall))
 #define IOCTL_PRIVCMD_MMAP _IOC(_IOC_NONE, 'P', 2, sizeof(struct privcmd_mmap))
 #define IOCTL_PRIVCMD_MMAPBATCH _IOC(_IOC_NONE, 'P', 3, sizeof(struct privcmd_mmapbatch))
 #define IOCTL_PRIVCMD_MMAPBATCH_V2 _IOC(_IOC_NONE, 'P', 4, sizeof(struct privcmd_mmapbatch_v2))
 #define IOCTL_PRIVCMD_DM_OP _IOC(_IOC_NONE, 'P', 5, sizeof(struct privcmd_dm_op))
 #define IOCTL_PRIVCMD_RESTRICT _IOC(_IOC_NONE, 'P', 6, sizeof(domid_t))
+#define IOCTL_PRIVCMD_MMAP_RESOURCE _IOC(_IOC_NONE, 'P', 7, sizeof(struct privcmd_mmap_resource))
 #endif
diff --git a/tests/headers/posix/sys_msg_h.c b/tests/headers/posix/sys_msg_h.c
index b908188..b02cd47 100644
--- a/tests/headers/posix/sys_msg_h.c
+++ b/tests/headers/posix/sys_msg_h.c
@@ -26,6 +26,8 @@
  * SUCH DAMAGE.
  */
 
+#if defined(__BIONIC__)
+
 #include <sys/msg.h>
 
 #include "header_checks.h"
@@ -42,9 +44,16 @@
   STRUCT_MEMBER(struct msqid_ds, msglen_t, msg_qbytes);
   STRUCT_MEMBER(struct msqid_ds, pid_t, msg_lspid);
   STRUCT_MEMBER(struct msqid_ds, pid_t, msg_lrpid);
+#if defined(__LP64__)
   STRUCT_MEMBER(struct msqid_ds, time_t, msg_stime);
   STRUCT_MEMBER(struct msqid_ds, time_t, msg_rtime);
   STRUCT_MEMBER(struct msqid_ds, time_t, msg_ctime);
+#else
+  // Starting at kernel v4.19, 32 bit changed these to unsigned values.
+  STRUCT_MEMBER(struct msqid_ds, unsigned long, msg_stime);
+  STRUCT_MEMBER(struct msqid_ds, unsigned long, msg_rtime);
+  STRUCT_MEMBER(struct msqid_ds, unsigned long, msg_ctime);
+#endif
 
   TYPE(pid_t);
   TYPE(size_t);
@@ -56,3 +65,4 @@
   FUNCTION(msgrcv, ssize_t (*f)(int, void*, size_t, long, int));
   FUNCTION(msgsnd, int (*f)(int, const void*, size_t, int));
 }
+#endif
diff --git a/tests/headers/posix/sys_sem_h.c b/tests/headers/posix/sys_sem_h.c
index 1b1b16d..49b236f 100644
--- a/tests/headers/posix/sys_sem_h.c
+++ b/tests/headers/posix/sys_sem_h.c
@@ -26,6 +26,8 @@
  * SUCH DAMAGE.
  */
 
+#if defined(__BIONIC__)
+
 #include <sys/sem.h>
 
 #include "header_checks.h"
@@ -48,8 +50,14 @@
 #else
   STRUCT_MEMBER(struct semid_ds, unsigned short, sem_nsems);
 #endif
+#if defined(__LP64__)
   STRUCT_MEMBER(struct semid_ds, time_t, sem_otime);
   STRUCT_MEMBER(struct semid_ds, time_t, sem_ctime);
+#else
+  // Starting at kernel v4.19, 32 bit changed these to unsigned values.
+  STRUCT_MEMBER(struct semid_ds, unsigned long, sem_otime);
+  STRUCT_MEMBER(struct semid_ds, unsigned long, sem_ctime);
+#endif
 
   TYPE(pid_t);
   TYPE(size_t);
@@ -64,3 +72,5 @@
   FUNCTION(semget, int (*f)(key_t, int, int));
   FUNCTION(semop, int (*f)(int, struct sembuf*, size_t));
 }
+
+#endif
diff --git a/tests/headers/posix/sys_shm_h.c b/tests/headers/posix/sys_shm_h.c
index 4ecd6d3..03d6815 100644
--- a/tests/headers/posix/sys_shm_h.c
+++ b/tests/headers/posix/sys_shm_h.c
@@ -26,6 +26,8 @@
  * SUCH DAMAGE.
  */
 
+#if defined(__BIONIC__)
+
 #include <sys/shm.h>
 
 #include "header_checks.h"
@@ -43,9 +45,16 @@
   STRUCT_MEMBER(struct shmid_ds, pid_t, shm_lpid);
   STRUCT_MEMBER(struct shmid_ds, pid_t, shm_cpid);
   STRUCT_MEMBER(struct shmid_ds, shmatt_t, shm_nattch);
+#if defined(__LP64__)
   STRUCT_MEMBER(struct shmid_ds, time_t, shm_atime);
   STRUCT_MEMBER(struct shmid_ds, time_t, shm_dtime);
   STRUCT_MEMBER(struct shmid_ds, time_t, shm_ctime);
+#else
+  // Starting at kernel v4.19, 32 bit changed these to unsigned values.
+  STRUCT_MEMBER(struct shmid_ds, unsigned long, shm_atime);
+  STRUCT_MEMBER(struct shmid_ds, unsigned long, shm_dtime);
+  STRUCT_MEMBER(struct shmid_ds, unsigned long, shm_ctime);
+#endif
 
   TYPE(pid_t);
   TYPE(size_t);
@@ -56,3 +65,4 @@
   FUNCTION(shmdt, int (*f)(const void*));
   FUNCTION(shmget, int (*f)(key_t, size_t, int));
 }
+#endif