IB/uverbs: Enable WQ creation and modification with cvlan offload
authorNoa Osherovich <noaos@mellanox.com>
Wed, 18 Jan 2017 13:39:59 +0000 (15:39 +0200)
committerDoug Ledford <dledford@redhat.com>
Tue, 14 Feb 2017 16:41:12 +0000 (11:41 -0500)
Enable user space application via WQ creation and modification to
turn on and off cvlan offload.

Signed-off-by: Noa Osherovich <noaos@mellanox.com>
Reviewed-by: Maor Gottlieb <maorg@mellanox.com>
Reviewed-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/uverbs_cmd.c
include/uapi/rdma/ib_user_verbs.h

index e4ae0c62df3655874a647ced71d3370d644aef17..0eb204380bff9274b6977e21791a65e5da1c0c6e 100644 (file)
@@ -3356,6 +3356,9 @@ int ib_uverbs_ex_create_wq(struct ib_uverbs_file *file,
        wq_init_attr.wq_context = file;
        wq_init_attr.wq_type = cmd.wq_type;
        wq_init_attr.event_handler = ib_uverbs_wq_event_handler;
+       if (ucore->inlen >= (offsetof(typeof(cmd), create_flags) +
+                            sizeof(cmd.create_flags)))
+               wq_init_attr.create_flags = cmd.create_flags;
        obj->uevent.events_reported = 0;
        INIT_LIST_HEAD(&obj->uevent.event_list);
        wq = pd->device->create_wq(pd, &wq_init_attr, uhw);
@@ -3511,7 +3514,7 @@ int ib_uverbs_ex_modify_wq(struct ib_uverbs_file *file,
        if (!cmd.attr_mask)
                return -EINVAL;
 
-       if (cmd.attr_mask > (IB_WQ_STATE | IB_WQ_CUR_STATE))
+       if (cmd.attr_mask > (IB_WQ_STATE | IB_WQ_CUR_STATE | IB_WQ_FLAGS))
                return -EINVAL;
 
        wq = idr_read_wq(cmd.wq_handle, file->ucontext);
@@ -3520,6 +3523,10 @@ int ib_uverbs_ex_modify_wq(struct ib_uverbs_file *file,
 
        wq_attr.curr_wq_state = cmd.curr_wq_state;
        wq_attr.wq_state = cmd.wq_state;
+       if (cmd.attr_mask & IB_WQ_FLAGS) {
+               wq_attr.flags = cmd.flags;
+               wq_attr.flags_mask = cmd.flags_mask;
+       }
        ret = wq->device->modify_wq(wq, &wq_attr, cmd.attr_mask, uhw);
        put_wq_read(wq);
        return ret;
index 0db9e646edd3e7f5308e5e64633ba61f04640482..f8723580ffed0258dc3c9c58626c131785bec15f 100644 (file)
@@ -1061,6 +1061,8 @@ struct ib_uverbs_ex_create_wq  {
        __u32 cq_handle;
        __u32 max_wr;
        __u32 max_sge;
+       __u32 create_flags; /* Use enum ib_wq_flags */
+       __u32 reserved;
 };
 
 struct ib_uverbs_ex_create_wq_resp {
@@ -1089,6 +1091,8 @@ struct ib_uverbs_ex_modify_wq  {
        __u32 wq_handle;
        __u32 wq_state;
        __u32 curr_wq_state;
+       __u32 flags; /* Use enum ib_wq_flags */
+       __u32 flags_mask; /* Use enum ib_wq_flags */
 };
 
 /* Prevent memory allocation rather than max expected size */