Update to v4.19 kernel headers.

Test: Builds and boots.
Change-Id: I99a9ed79666e143b47f02ca4e59eed94f69b7e4a
(cherry picked from commit a981e2e52e2e95a65fa9c9b6fb16dcb4c83dd576)
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;