All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
To: Matan Barak <matanb-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
Cc: Matan Barak <matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	linux-rdma <linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	Jason Gunthorpe
	<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>,
	Sean Hefty <sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Liran Liss <liranl-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Majd Dibbiny <majd-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Yishai Hadas <yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Ira Weiny <ira.weiny-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Christoph Lameter <cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org>,
	Tal Alon <talal-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Subject: Re: [PATCH RFC 01/10] IB/core: Add a generic way to execute an operation on a uobject
Date: Thu, 4 May 2017 15:28:51 +0300	[thread overview]
Message-ID: <20170504122851.GS22833@mtr-leonro.local> (raw)
In-Reply-To: <CAAKD3BALCSD=N90gFa+R64QAyuiuJLFmZzsvRz1roq5x-0s3Jw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 8324 bytes --]

On Thu, May 04, 2017 at 01:37:33PM +0300, Matan Barak wrote:
> On Thu, May 4, 2017 at 1:23 PM, Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org> wrote:
> > On Wed, Apr 19, 2017 at 06:20:16PM +0300, Matan Barak wrote:
> >> The ioctl infrastructure treats all user-objects in the same manner.
> >> It gets an id from the user-space and by using the object type and
> >> operation mentioned in the action specification, it executes this
> >> operation. An operation is split to two stages. The first one is
> >> carried out before executing the handler and the second one is
> >> executed afterwards.
> >>
> >> In order to abstract these details from the ioctl infrastructure
> >> layer, we add uverbs_get_uobject_from_context and
> >> uverbs_finalize_object functions which corresponds to the first
> >> and second stages respectively.
> >>
> >> Signed-off-by: Matan Barak <matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
> >> ---
> >>  drivers/infiniband/core/rdma_core.c | 51 ++++++++++++++++++++++++++++++++++++
> >>  drivers/infiniband/core/rdma_core.h | 16 ++++++++++++
> >>  include/rdma/uverbs_ioctl.h         | 52 +++++++++++++++++++++++++++++++++++++
> >>  3 files changed, 119 insertions(+)
> >>  create mode 100644 include/rdma/uverbs_ioctl.h
> >>
> >> diff --git a/drivers/infiniband/core/rdma_core.c b/drivers/infiniband/core/rdma_core.c
> >> index 41c31a2..269fa7f 100644
> >> --- a/drivers/infiniband/core/rdma_core.c
> >> +++ b/drivers/infiniband/core/rdma_core.c
> >> @@ -35,6 +35,7 @@
> >>  #include <rdma/ib_verbs.h>
> >>  #include <rdma/uverbs_types.h>
> >>  #include <linux/rcupdate.h>
> >> +#include <rdma/uverbs_ioctl.h>
> >>  #include "uverbs.h"
> >>  #include "core_priv.h"
> >>  #include "rdma_core.h"
> >> @@ -625,3 +626,53 @@ void uverbs_initialize_ucontext(struct ib_ucontext *ucontext)
> >>       .needs_kfree_rcu = false,
> >>  };
> >>
> >> +struct ib_uobject *uverbs_get_uobject_from_context(const struct uverbs_obj_type *type_attrs,
> >> +                                                struct ib_ucontext *ucontext,
> >> +                                                enum uverbs_idr_access access,
> >> +                                                int id)
> >> +{
> >> +     switch (access) {
> >> +     case UVERBS_ACCESS_READ:
> >> +             return rdma_lookup_get_uobject(type_attrs, ucontext, id, false);
> >> +     case UVERBS_ACCESS_DESTROY:
> >> +     case UVERBS_ACCESS_WRITE:
> >> +             return rdma_lookup_get_uobject(type_attrs, ucontext, id, true);
> >> +     case UVERBS_ACCESS_NEW:
> >> +             return rdma_alloc_begin_uobject(type_attrs, ucontext);
> >> +     default:
> >> +             WARN_ON(true);
> >> +             return ERR_PTR(-EOPNOTSUPP);
> >> +     }
> >> +}
> >> +
> >> +int uverbs_finalize_object(struct ib_uobject *uobj,
> >> +                        enum uverbs_idr_access access,
> >> +                        bool commit)
> >> +{
> >> +     int ret = 0;
> >> +
> >> +     switch (access) {
> >> +     case UVERBS_ACCESS_READ:
> >> +             rdma_lookup_put_uobject(uobj, false);
> >> +             break;
> >> +     case UVERBS_ACCESS_WRITE:
> >> +             rdma_lookup_put_uobject(uobj, true);
> >> +             break;
> >> +     case UVERBS_ACCESS_DESTROY:
> >> +             if (commit)
> >> +                     ret = rdma_remove_commit_uobject(uobj);
> >> +             else
> >> +                     rdma_lookup_put_uobject(uobj, true);
> >> +             break;
> >> +     case UVERBS_ACCESS_NEW:
> >> +             if (commit)
> >> +                     ret = rdma_alloc_commit_uobject(uobj);
> >> +             else
> >> +                     rdma_alloc_abort_uobject(uobj);
> >> +             break;
> >> +     default:
> >> +             WARN_ON(true);
> >> +     }
> >> +
> >> +     return ret;
> >> +}
> >> diff --git a/drivers/infiniband/core/rdma_core.h b/drivers/infiniband/core/rdma_core.h
> >> index 1b82e7f..5a1da24 100644
> >> --- a/drivers/infiniband/core/rdma_core.h
> >> +++ b/drivers/infiniband/core/rdma_core.h
> >> @@ -39,6 +39,7 @@
> >>
> >>  #include <linux/idr.h>
> >>  #include <rdma/uverbs_types.h>
> >> +#include <rdma/uverbs_ioctl.h>
> >>  #include <rdma/ib_verbs.h>
> >>  #include <linux/mutex.h>
> >>
> >> @@ -75,4 +76,19 @@
> >>   */
> >>  void uverbs_close_fd(struct file *f);
> >>
> >> +/*
> >> + * Get an ib_uobject that corresponds to the given id from ucontext, assuming
> >> + * the object is from the given type. Lock it to the required access.
> >> + * This function could create (access == NEW) or destroy (access == DESTROY)
> >> + * objects if required. The action will be finalized only when
> >> + * uverbs_finalize_object is called.
> >> + */
> >> +struct ib_uobject *uverbs_get_uobject_from_context(const struct uverbs_obj_type *type_attrs,
> >> +                                                struct ib_ucontext *ucontext,
> >> +                                                enum uverbs_idr_access access,
> >> +                                                int id);
> >> +int uverbs_finalize_object(struct ib_uobject *uobj,
> >> +                        enum uverbs_idr_access access,
> >> +                        bool commit);
> >> +
> >>  #endif /* RDMA_CORE_H */
> >> diff --git a/include/rdma/uverbs_ioctl.h b/include/rdma/uverbs_ioctl.h
> >> new file mode 100644
> >> index 0000000..a18468e
> >> --- /dev/null
> >> +++ b/include/rdma/uverbs_ioctl.h
> >> @@ -0,0 +1,52 @@
> >> +/*
> >> + * Copyright (c) 2016, Mellanox Technologies inc.  All rights reserved.
> >> + *
> >> + * This software is available to you under a choice of one of two
> >> + * licenses.  You may choose to be licensed under the terms of the GNU
> >> + * General Public License (GPL) Version 2, available from the file
> >> + * COPYING in the main directory of this source tree, or the
> >> + * OpenIB.org BSD license below:
> >> + *
> >> + *     Redistribution and use in source and binary forms, with or
> >> + *     without modification, are permitted provided that the following
> >> + *     conditions are met:
> >> + *
> >> + *      - Redistributions of source code must retain the above
> >> + *        copyright notice, this list of conditions and the following
> >> + *        disclaimer.
> >> + *
> >> + *      - Redistributions in binary form must reproduce the above
> >> + *        copyright notice, this list of conditions and the following
> >> + *        disclaimer in the documentation and/or other materials
> >> + *        provided with the distribution.
> >> + *
> >> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> >> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> >> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> >> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> >> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> >> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> >> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> >> + * SOFTWARE.
> >> + */
> >> +
> >> +#ifndef _UVERBS_IOCTL_
> >> +#define _UVERBS_IOCTL_
> >> +
> >> +#include <rdma/uverbs_types.h>
> >> +
> >> +/*
> >> + * =======================================
> >> + *   Verbs action specifications
> >> + * =======================================
> >> + */
> >> +
> >> +enum uverbs_idr_access {
> >> +     UVERBS_ACCESS_READ,
> >> +     UVERBS_ACCESS_WRITE,
> >> +     UVERBS_ACCESS_NEW,
> >> +     UVERBS_ACCESS_DESTROY
> >> +};
> >
> > Does it make sense to have MODIFY too?
> >
>
> No, this just set the locking schema for the uobject. When the uobject
> is locked for write (i.e. exclusive lock), you're free to modify the
> underlying object.

So why do you need NEW and DESTROY? It can be locked with WRITE.

>
> >> +
> >> +#endif
> >> +
> >> --
> >> 1.8.3.1
> >>
> >> --
> >> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> >> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> >> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  parent reply	other threads:[~2017-05-04 12:28 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-19 15:20 [PATCH RFC 00/10] IB/core: SG IOCTL based RDMA ABI Matan Barak
     [not found] ` <1492615225-55118-1-git-send-email-matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2017-04-19 15:20   ` [PATCH RFC 01/10] IB/core: Add a generic way to execute an operation on a uobject Matan Barak
     [not found]     ` <1492615225-55118-2-git-send-email-matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2017-05-04 10:23       ` Leon Romanovsky
     [not found]         ` <20170504102303.GR22833-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-05-04 10:37           ` Matan Barak
     [not found]             ` <CAAKD3BALCSD=N90gFa+R64QAyuiuJLFmZzsvRz1roq5x-0s3Jw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-04 12:28               ` Leon Romanovsky [this message]
     [not found]                 ` <20170504122851.GS22833-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-05-04 15:43                   ` Matan Barak
     [not found]                     ` <CAAKD3BCz8+aT7hKzoxL__0iU_rzW_zv6FWHMhmgD7tnbwv3big-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-04 18:17                       ` Leon Romanovsky
2017-04-19 15:20   ` [PATCH RFC 02/10] IB/core: Add support to finalize objects in one transaction Matan Barak
     [not found]     ` <1492615225-55118-3-git-send-email-matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2017-05-04 14:50       ` Amrani, Ram
     [not found]         ` <SN1PR07MB22077A1B43881BAF7BAC5ED0F8EA0-mikhvbZlbf8TSoR2DauN2+FPX92sqiQdvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2017-05-07 11:00           ` Matan Barak
     [not found]             ` <CAAKD3BBfZa_eM2L+LE30uDnoEge6rCBj17YtkVZULUsKMQrQww-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-07 12:02               ` Amrani, Ram
     [not found]                 ` <BN3PR07MB2578868B660CC388664BE501F8E90-EldUQEzkDQfpW3VS/XPqkOFPX92sqiQdvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2017-05-07 12:39                   ` Matan Barak
     [not found]                     ` <CAAKD3BAr0GX5rGCq_wcxQ=NKZwyHdrvnj_3G25mhq-c1qqFFRQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-07 14:29                       ` Amrani, Ram
2017-04-19 15:20   ` [PATCH RFC 03/10] IB/core: Add new ioctl interface Matan Barak
     [not found]     ` <1492615225-55118-4-git-send-email-matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2017-05-08  6:06       ` Leon Romanovsky
     [not found]         ` <20170508060624.GB10073-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-05-08  8:09           ` Matan Barak
2017-04-19 15:20   ` [PATCH RFC 04/10] IB/core: Declare a type instead of declaring only type attributes Matan Barak
2017-04-19 15:20   ` [PATCH RFC 05/10] IB/core: Add DEVICE type and root types structure Matan Barak
2017-04-19 15:20   ` [PATCH RFC 06/10] IB/core: Initialize uverbs types specification Matan Barak
2017-04-19 15:20   ` [PATCH RFC 07/10] IB/core: Add macros for declaring actions and attributes Matan Barak
2017-04-19 15:20   ` [PATCH RFC 08/10] IB/core: Add ability to explicitly destroy an uobject Matan Barak
2017-04-19 15:20   ` [PATCH RFC 09/10] IB/core: Add uverbs types, actions, handlers and attributes Matan Barak
2017-04-19 15:20   ` [PATCH RFC 10/10] IB/core: Expose ioctl interface through experimental Kconfig Matan Barak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170504122851.GS22833@mtr-leonro.local \
    --to=leonro-vpraknaxozvwk0htik3j/w@public.gmane.org \
    --cc=cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org \
    --cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=ira.weiny-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=liranl-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=majd-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=matanb-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org \
    --cc=matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=talal-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.