Disable not-quite-ready userspace ABI for IB flow steering
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.14 (GNU/Linux) iQIcBAABCAAGBQJSZrLkAAoJEENa44ZhAt0hHrkQAIzkHBgLTcOzA4I4YZx8sXLG kL6cdK5RgBABq8OcboKup/QkSIcIacpXdiqaQWia5GnaLooBKPx2a8Wx6uW+P319 YMe6faEkIi8RAwbYaF+Vm/wM9dP959N1vqwgQ/Hyx1Jslfx8+ychoD2C46CQGkz7 MamApzh5arqox+Nql8Z5QB91SIGzybyBaTG0YNTgweDBR22mBS5+aKOywA4ndlKE aOfouI0hSgc7NzdwPHzwZcvA4mnHP+IvTvnt4EMCLMpgHtyYWpj7J4kPu7H58WwV XqSbtBsAnLDbNpNPWi08S9j8n0fIyUBttdEMrm7blgpB6gv8RffDoTQySE+J0ob2 eDHgX7anliu+1/Iah8M4qTWtKWj2emA89zUqaFzj04PG12iLA3U27hnTe0eXFW8g GW1fE3Dkf3KytUS/pktRIGCeoNV1oePxmLsj9OK8Ii228vZIU04U/1th29k6zOdx 8uauc7Mu3wV9UPcFLQy9AfNv/74tlNJHIjjyf7g8LPHCcyaSDJxabhIw+yvZISWH 3MNbL2bRHqAUq9SqrknxK1pvddGxtupl585KksXOlWOHbpnC6iF6duB7OA+4x+RD 9EfmmHwcWQ6WxDZyYHRvfZlRUYodbmRNVcoOwh921UxH7OjQzIU08FtoGrzFPWoR JBHFzGHJ47MVix5loqkp =4ySc -----END PGP SIGNATURE----- Merge tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband Pull infiniband bugfix from Roland Dreier: "Disable not-quite-ready userspace ABI for IB flow steering" * tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: IB/core: Temporarily disable create_flow/destroy_flow uverbs
This commit is contained in:
Коммит
0d645a8b82
|
@ -31,6 +31,17 @@ config INFINIBAND_USER_ACCESS
|
||||||
libibverbs, libibcm and a hardware driver library from
|
libibverbs, libibcm and a hardware driver library from
|
||||||
<http://www.openfabrics.org/git/>.
|
<http://www.openfabrics.org/git/>.
|
||||||
|
|
||||||
|
config INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
|
||||||
|
bool "Experimental and unstable ABI for userspace access to flow steering verbs"
|
||||||
|
depends on INFINIBAND_USER_ACCESS
|
||||||
|
depends on STAGING
|
||||||
|
---help---
|
||||||
|
The final ABI for userspace access to flow steering verbs
|
||||||
|
has not been defined. To use the current ABI, *WHICH WILL
|
||||||
|
CHANGE IN THE FUTURE*, say Y here.
|
||||||
|
|
||||||
|
If unsure, say N.
|
||||||
|
|
||||||
config INFINIBAND_USER_MEM
|
config INFINIBAND_USER_MEM
|
||||||
bool
|
bool
|
||||||
depends on INFINIBAND_USER_ACCESS != n
|
depends on INFINIBAND_USER_ACCESS != n
|
||||||
|
|
|
@ -217,7 +217,9 @@ IB_UVERBS_DECLARE_CMD(destroy_srq);
|
||||||
IB_UVERBS_DECLARE_CMD(create_xsrq);
|
IB_UVERBS_DECLARE_CMD(create_xsrq);
|
||||||
IB_UVERBS_DECLARE_CMD(open_xrcd);
|
IB_UVERBS_DECLARE_CMD(open_xrcd);
|
||||||
IB_UVERBS_DECLARE_CMD(close_xrcd);
|
IB_UVERBS_DECLARE_CMD(close_xrcd);
|
||||||
|
#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
|
||||||
IB_UVERBS_DECLARE_CMD(create_flow);
|
IB_UVERBS_DECLARE_CMD(create_flow);
|
||||||
IB_UVERBS_DECLARE_CMD(destroy_flow);
|
IB_UVERBS_DECLARE_CMD(destroy_flow);
|
||||||
|
#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
|
||||||
|
|
||||||
#endif /* UVERBS_H */
|
#endif /* UVERBS_H */
|
||||||
|
|
|
@ -54,7 +54,9 @@ static struct uverbs_lock_class qp_lock_class = { .name = "QP-uobj" };
|
||||||
static struct uverbs_lock_class ah_lock_class = { .name = "AH-uobj" };
|
static struct uverbs_lock_class ah_lock_class = { .name = "AH-uobj" };
|
||||||
static struct uverbs_lock_class srq_lock_class = { .name = "SRQ-uobj" };
|
static struct uverbs_lock_class srq_lock_class = { .name = "SRQ-uobj" };
|
||||||
static struct uverbs_lock_class xrcd_lock_class = { .name = "XRCD-uobj" };
|
static struct uverbs_lock_class xrcd_lock_class = { .name = "XRCD-uobj" };
|
||||||
|
#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
|
||||||
static struct uverbs_lock_class rule_lock_class = { .name = "RULE-uobj" };
|
static struct uverbs_lock_class rule_lock_class = { .name = "RULE-uobj" };
|
||||||
|
#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
|
||||||
|
|
||||||
#define INIT_UDATA(udata, ibuf, obuf, ilen, olen) \
|
#define INIT_UDATA(udata, ibuf, obuf, ilen, olen) \
|
||||||
do { \
|
do { \
|
||||||
|
@ -2599,6 +2601,7 @@ out_put:
|
||||||
return ret ? ret : in_len;
|
return ret ? ret : in_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
|
||||||
static int kern_spec_to_ib_spec(struct ib_kern_spec *kern_spec,
|
static int kern_spec_to_ib_spec(struct ib_kern_spec *kern_spec,
|
||||||
union ib_flow_spec *ib_spec)
|
union ib_flow_spec *ib_spec)
|
||||||
{
|
{
|
||||||
|
@ -2824,6 +2827,7 @@ ssize_t ib_uverbs_destroy_flow(struct ib_uverbs_file *file,
|
||||||
|
|
||||||
return ret ? ret : in_len;
|
return ret ? ret : in_len;
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
|
||||||
|
|
||||||
static int __uverbs_create_xsrq(struct ib_uverbs_file *file,
|
static int __uverbs_create_xsrq(struct ib_uverbs_file *file,
|
||||||
struct ib_uverbs_create_xsrq *cmd,
|
struct ib_uverbs_create_xsrq *cmd,
|
||||||
|
|
|
@ -115,8 +115,10 @@ static ssize_t (*uverbs_cmd_table[])(struct ib_uverbs_file *file,
|
||||||
[IB_USER_VERBS_CMD_CLOSE_XRCD] = ib_uverbs_close_xrcd,
|
[IB_USER_VERBS_CMD_CLOSE_XRCD] = ib_uverbs_close_xrcd,
|
||||||
[IB_USER_VERBS_CMD_CREATE_XSRQ] = ib_uverbs_create_xsrq,
|
[IB_USER_VERBS_CMD_CREATE_XSRQ] = ib_uverbs_create_xsrq,
|
||||||
[IB_USER_VERBS_CMD_OPEN_QP] = ib_uverbs_open_qp,
|
[IB_USER_VERBS_CMD_OPEN_QP] = ib_uverbs_open_qp,
|
||||||
|
#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
|
||||||
[IB_USER_VERBS_CMD_CREATE_FLOW] = ib_uverbs_create_flow,
|
[IB_USER_VERBS_CMD_CREATE_FLOW] = ib_uverbs_create_flow,
|
||||||
[IB_USER_VERBS_CMD_DESTROY_FLOW] = ib_uverbs_destroy_flow
|
[IB_USER_VERBS_CMD_DESTROY_FLOW] = ib_uverbs_destroy_flow
|
||||||
|
#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
|
||||||
};
|
};
|
||||||
|
|
||||||
static void ib_uverbs_add_one(struct ib_device *device);
|
static void ib_uverbs_add_one(struct ib_device *device);
|
||||||
|
@ -605,6 +607,7 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
|
||||||
if (!(file->device->ib_dev->uverbs_cmd_mask & (1ull << hdr.command)))
|
if (!(file->device->ib_dev->uverbs_cmd_mask & (1ull << hdr.command)))
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
|
|
||||||
|
#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
|
||||||
if (hdr.command >= IB_USER_VERBS_CMD_THRESHOLD) {
|
if (hdr.command >= IB_USER_VERBS_CMD_THRESHOLD) {
|
||||||
struct ib_uverbs_cmd_hdr_ex hdr_ex;
|
struct ib_uverbs_cmd_hdr_ex hdr_ex;
|
||||||
|
|
||||||
|
@ -621,6 +624,7 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
|
||||||
(hdr_ex.out_words +
|
(hdr_ex.out_words +
|
||||||
hdr_ex.provider_out_words) * 4);
|
hdr_ex.provider_out_words) * 4);
|
||||||
} else {
|
} else {
|
||||||
|
#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
|
||||||
if (hdr.in_words * 4 != count)
|
if (hdr.in_words * 4 != count)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
@ -628,7 +632,9 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
|
||||||
buf + sizeof(hdr),
|
buf + sizeof(hdr),
|
||||||
hdr.in_words * 4,
|
hdr.in_words * 4,
|
||||||
hdr.out_words * 4);
|
hdr.out_words * 4);
|
||||||
|
#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ib_uverbs_mmap(struct file *filp, struct vm_area_struct *vma)
|
static int ib_uverbs_mmap(struct file *filp, struct vm_area_struct *vma)
|
||||||
|
|
|
@ -1691,9 +1691,11 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
|
||||||
ibdev->ib_dev.create_flow = mlx4_ib_create_flow;
|
ibdev->ib_dev.create_flow = mlx4_ib_create_flow;
|
||||||
ibdev->ib_dev.destroy_flow = mlx4_ib_destroy_flow;
|
ibdev->ib_dev.destroy_flow = mlx4_ib_destroy_flow;
|
||||||
|
|
||||||
|
#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
|
||||||
ibdev->ib_dev.uverbs_cmd_mask |=
|
ibdev->ib_dev.uverbs_cmd_mask |=
|
||||||
(1ull << IB_USER_VERBS_CMD_CREATE_FLOW) |
|
(1ull << IB_USER_VERBS_CMD_CREATE_FLOW) |
|
||||||
(1ull << IB_USER_VERBS_CMD_DESTROY_FLOW);
|
(1ull << IB_USER_VERBS_CMD_DESTROY_FLOW);
|
||||||
|
#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
|
||||||
}
|
}
|
||||||
|
|
||||||
mlx4_ib_alloc_eqs(dev, ibdev);
|
mlx4_ib_alloc_eqs(dev, ibdev);
|
||||||
|
|
|
@ -87,8 +87,10 @@ enum {
|
||||||
IB_USER_VERBS_CMD_CLOSE_XRCD,
|
IB_USER_VERBS_CMD_CLOSE_XRCD,
|
||||||
IB_USER_VERBS_CMD_CREATE_XSRQ,
|
IB_USER_VERBS_CMD_CREATE_XSRQ,
|
||||||
IB_USER_VERBS_CMD_OPEN_QP,
|
IB_USER_VERBS_CMD_OPEN_QP,
|
||||||
|
#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
|
||||||
IB_USER_VERBS_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD,
|
IB_USER_VERBS_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD,
|
||||||
IB_USER_VERBS_CMD_DESTROY_FLOW
|
IB_USER_VERBS_CMD_DESTROY_FLOW
|
||||||
|
#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -126,6 +128,7 @@ struct ib_uverbs_cmd_hdr {
|
||||||
__u16 out_words;
|
__u16 out_words;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
|
||||||
struct ib_uverbs_cmd_hdr_ex {
|
struct ib_uverbs_cmd_hdr_ex {
|
||||||
__u32 command;
|
__u32 command;
|
||||||
__u16 in_words;
|
__u16 in_words;
|
||||||
|
@ -134,6 +137,7 @@ struct ib_uverbs_cmd_hdr_ex {
|
||||||
__u16 provider_out_words;
|
__u16 provider_out_words;
|
||||||
__u32 cmd_hdr_reserved;
|
__u32 cmd_hdr_reserved;
|
||||||
};
|
};
|
||||||
|
#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
|
||||||
|
|
||||||
struct ib_uverbs_get_context {
|
struct ib_uverbs_get_context {
|
||||||
__u64 response;
|
__u64 response;
|
||||||
|
@ -696,6 +700,7 @@ struct ib_uverbs_detach_mcast {
|
||||||
__u64 driver_data[0];
|
__u64 driver_data[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING
|
||||||
struct ib_kern_eth_filter {
|
struct ib_kern_eth_filter {
|
||||||
__u8 dst_mac[6];
|
__u8 dst_mac[6];
|
||||||
__u8 src_mac[6];
|
__u8 src_mac[6];
|
||||||
|
@ -780,6 +785,7 @@ struct ib_uverbs_destroy_flow {
|
||||||
__u32 comp_mask;
|
__u32 comp_mask;
|
||||||
__u32 flow_handle;
|
__u32 flow_handle;
|
||||||
};
|
};
|
||||||
|
#endif /* CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING */
|
||||||
|
|
||||||
struct ib_uverbs_create_srq {
|
struct ib_uverbs_create_srq {
|
||||||
__u64 response;
|
__u64 response;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче