linux-rdma.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
To: Matan Barak <matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	Sean Hefty <sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Tal Alon <talal-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Liran Liss <liranl-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Haggai Eran <haggaie-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Majd Dibbiny <majd-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Christoph Lameter <cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org>,
	Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Subject: Re: [RFC ABI V1 7/8] RDMA/core: Change locking of ib_uobject
Date: Thu, 14 Jul 2016 11:00:51 -0600	[thread overview]
Message-ID: <20160714170051.GB2046@obsidianresearch.com> (raw)
In-Reply-To: <6ae1a553-408c-723a-93a2-3d46d952ce35-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>

On Thu, Jul 14, 2016 at 10:59:41AM +0300, Matan Barak wrote:

> I'm not at the office right now, but AFAIK it's attach_mcast, detach_mcast,
> rereg_mr and all the destroy functions.

I don't think we can change those three, I would be too scared that
would break existing apps that don't serialize them.

I think we need to change the kernel locking for those three cases to
rely on a different lock so that the modify style operations can not
return EBUSY.

That seems like it should be simple enough? Can we use the lock in the
kobj or something? Why is it like that today anyhow?

> >I also think this should be stand-alone as part of the uobject rework
> >series.. Again it seems like this benifits any approach.
> 
> Yeah, but since the new infrastructure is going to do the locks
> automatically for you, we'll ditch the locks in uverbs_cmd anyway.
> Therefore, I don't see a real benefit refactoring uverbs_cmd and then
> ditching all these changes.

We still have to go through a transitional approach here, to me that
means we should move existing uverbs closer to the new approach
(particularly in terms of locking and code sharing), trial that in
real apps, and then add the new api on that tested basis. We can't
just abandon uverbs, and we probably shouldn't try to do a flag day
convert either.

So I don't know what your plan is to 'ditch the locks' with the new
infrastucture while maintaining the uverbs api..

My preference is to see smaller patch series with clear goals that can
be applied - and 'rework uverbs locking' seems to fit that bill quite
well.

For instance, if we are introducing a uobject type scheme like this
series does then it should be another stand alone series that doesn't
try and introduce the ioctl stuff..

> No, it's not the same thing. SRCU protects device removal from command
> execution. close_sem protects context destruction from command
> execution.

It is the same, device removal requires 'context destruction' as
a precondition, so it should be able to ride on the same lock.

The 'context destruction' for device removal is a bit special but it
is still basically the same action as close(fd).

> You're correct that in the current state of the code, context is only closed
> when a file is closed or when a device is removed, so it's protected.
> However, if we want to add a destroy_context action - it becomes necessary.

What would destroy_context do? Why would we need that?

> If we move to a per uverbs_file idr, contexts (either file context or client
> context), we still need to sync destruction of these contexts with carrying
> out actions. Since the uverbs_file outlives them, it's reasonable to put the
> lock there.

Are you proposing that all object destroy will be serialized?

> Currently, as far as I remember, modify isn't protected by the write lock
> anyway. Besides that, nothing stops the user from syncing the actions.

You can't make that argument when dealing with compat. We can't change
something like the locking requirements in user space.

> >While holding the lock. But that is a really ugly API. Nothing should be
> >added to the idr until it is 100% initialized, so we don't need
> >concurrency protection. What is the write lock doing at that point??
> 
> We assume the enable function can't fail. Since adding something to idr
> could fail, we preferred adding it first with live = 0 flag and then
> enabling it.

Why can't it fail?

> >  uobj = uobj_alloc(file->ucontext, 0, sizeof(*uobj));
> >  [.. full setup ..]
> >  uobj_activate(uobj); // live = 1, list_add_tail, idr_add
> >
> >  resp.handle = uobj->id;
> >  copy_to_user(..);
> >
> >  put_uobj(uobj);
> >  return ret;
> >
> >err1:
> >  uobj_deactivate(uobj);
> >err2:
> >  put_obj(uobj);
> >
> 
> I agree with the general schema, but I think idr_add should be done in
> uobj_alloc as it can fail.

In my version uobj_activate can fail, and we already have to have the
goto-unwind infrastructure to cope with that (copy_to_user could
fail), so I'm not sure why avoiding it would be helpful?

I also wonder if the above flow is enough to remove live? That always
seemed like a strange approach to me, most idr users would just use in-idr
as 'live' ...

> >I would do the above sort of restructuring as another (mergable, even)
> >patch, then rip out the locking.
> 
> This locking is done automatically using the new infrastructure. The goal is
> to remove all these locking semantics from the user handler.
> Therefore, I don't think we should refactor uverbs_cmd and then delete all
> locks from there.

What happens to uverbs_cmd then? As I said above we still need to keep
it around and it still need to fit with the new infrastructure. I'd
rather see a patch flow that slowly transforms uverbs_cmd to a point
where adding the new ioctl becomes a simpler patch.

There is obvoisly a lot of in-kernel infrastructure work to do.

Jason
--
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

  parent reply	other threads:[~2016-07-14 17:00 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-30 13:39 [RFC ABI V1 0/8] SG-based RDMA ABI Proposal Matan Barak
     [not found] ` <1467293971-25688-1-git-send-email-matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-06-30 13:39   ` [RFC ABI V1 1/8] RDMA/core: Export RDMA IOCTL declarations Matan Barak
     [not found]     ` <1467293971-25688-2-git-send-email-matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-12 19:12       ` Jason Gunthorpe
     [not found]         ` <20160712191256.GA8206-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-07-12 19:43           ` Leon Romanovsky
2016-06-30 13:39   ` [RFC ABI V1 2/8] RDMA/core: Move uobject code to separate files Matan Barak
     [not found]     ` <1467293971-25688-3-git-send-email-matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-12 19:15       ` Jason Gunthorpe
     [not found]         ` <20160712191507.GB8206-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-07-12 19:38           ` Leon Romanovsky
2016-07-13 14:34           ` Matan Barak
2016-06-30 13:39   ` [RFC ABI V1 3/8] RDMA/core: Refactor IDR to be per-device Matan Barak
     [not found]     ` <1467293971-25688-4-git-send-email-matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-12 19:29       ` Jason Gunthorpe
     [not found]         ` <20160712192933.GD8206-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-07-12 19:48           ` Leon Romanovsky
2016-06-30 13:39   ` [RFC ABI V1 4/8] RDMA/core: Add support for custom types Matan Barak
     [not found]     ` <1467293971-25688-5-git-send-email-matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-12 19:23       ` Jason Gunthorpe
     [not found]         ` <20160712192345.GC8206-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-07-13 14:44           ` Matan Barak
     [not found]             ` <081a02c0-0650-d0c2-494c-19a64b83cbc1-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-13 16:39               ` Jason Gunthorpe
     [not found]                 ` <20160713163924.GA19657-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-07-13 16:57                   ` Matan Barak
     [not found]                     ` <0959d391-75fb-75e8-ef2e-9d8c06b1b96f-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-13 17:21                       ` Jason Gunthorpe
     [not found]                         ` <20160713172116.GC19657-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-07-14  5:30                           ` Matan Barak
     [not found]                             ` <5fdae959-5ab2-ee17-e36e-3642ddd3e6ce-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-14 16:41                               ` Jason Gunthorpe
     [not found]                                 ` <20160714164121.GA2046-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-07-19 14:05                                   ` Matan Barak
     [not found]                                     ` <a1fcb1a7-0028-329a-d34a-ca8b52323916-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-19 20:36                                       ` Jason Gunthorpe
     [not found]                                         ` <20160719203609.GD16042-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-07-20  8:01                                           ` Matan Barak
     [not found]                                             ` <9727f6e6-47fd-fb0a-537f-6264e8d742a9-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-20 17:49                                               ` Jason Gunthorpe
2016-07-14  6:30                           ` Leon Romanovsky
2016-06-30 13:39   ` [RFC ABI V1 5/8] RDMA/core: Introduce add/remove uobj from types Matan Barak
2016-06-30 13:39   ` [RFC ABI V1 6/8] RDMA/core: Add new ioctl interface Matan Barak
2016-06-30 13:39   ` [RFC ABI V1 7/8] RDMA/core: Change locking of ib_uobject Matan Barak
     [not found]     ` <1467293971-25688-8-git-send-email-matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-13 17:16       ` Jason Gunthorpe
     [not found]         ` <20160713171657.GB19657-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-07-14  7:59           ` Matan Barak
     [not found]             ` <6ae1a553-408c-723a-93a2-3d46d952ce35-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-14 17:00               ` Jason Gunthorpe [this message]
     [not found]                 ` <20160714170051.GB2046-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-07-19 15:16                   ` Matan Barak
     [not found]                     ` <b47386f4-fdb5-d24b-dbc6-9b5e18be6bf9-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-19 20:44                       ` Jason Gunthorpe
     [not found]                         ` <20160719204456.GF16042-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-07-20  7:54                           ` Matan Barak (External)
     [not found]                             ` <5c6e6a5d-9fde-a31f-1038-dce9e09662c4-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-07-20 17:56                               ` Jason Gunthorpe
2016-06-30 13:39   ` [RFC ABI V1 8/8] RDMA/{hw, core}: Provide simple skeleton to IOCTL interface 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=20160714170051.GB2046@obsidianresearch.com \
    --to=jgunthorpe-epgobjl8dl3ta4ec/59zmfatqe2ktcn/@public.gmane.org \
    --cc=cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org \
    --cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=haggaie-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=leonro-VPRAkNaXOzVWk0Htik3J/w@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-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=talal-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).