All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matan Barak <matanb-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
To: Jason Gunthorpe
	<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
Cc: Matan Barak <matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Or Gerlitz <gerlitz.or-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Somnath Kotur
	<somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@public.gmane.org>,
	Roland Dreier <roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	"linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH v3 for-next 02/33] IB/core: Add kref to IB devices
Date: Fri, 1 May 2015 09:28:40 +0300	[thread overview]
Message-ID: <CAAKD3BBGQwZ_Ainm6MSQjSkaXsJd9M5Vo4oarTLyFiVMQVS5_Q@mail.gmail.com> (raw)
In-Reply-To: <20150430172606.GA32666-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>

On Thu, Apr 30, 2015 at 8:26 PM, Jason Gunthorpe
<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org> wrote:
> On Thu, Apr 30, 2015 at 11:21:01AM +0300, Matan Barak wrote:
>
>> ib_unregister_device calls the remove function with device_mutex
>> help. In addition, ib_enum_roce_ports_of_netdev does the same. Every
>> interesting netdev/inet/inet6 event that's handled in roce_gid_mgmt
>> triggers ib_enum_roce_ports_of_netdev by using the workqueue (for
>> example, netdevice_event->*work*->netdevice_event_work_handler->ib_enum_roce_ports_of_netdev).
>
> So, okay, now it is very clear. This should have been described
> explicitly in the kref commit message, for instance:
>
>  ...
>
>  Later commits in this series are going to extend the use of
>  device_mutex via ib_enum_roce_ports_of_netdev resulting in ...
>  .. To solve this deadlock introduce ....
>
> Part of the job of the patch author is to make review work better by
> highlighting the most troublesome areas, remember we have more patch
> authors than reviewers so work must be pushed onto the author side.
>
> Lets look at the original commit message provided:
>
>  Previously. we used device_mutex lock in order to protect
>  the device's list.
>
>   ** 'previously' is wrong, this patch does nothing to change what
>       device_mutex covers, it still protects the device_list and still
>       protects the client_list
>
>  That means that in order to guarantee a
>  device isn't freed while we use it, we had to lock all
>  devices.
>
>   ** No, locking the device_mutex does nothing to protect a device
>      from being freed. The existing kref does that. The device_mutex
>      protects the device_list from mutation, and
>      ib_enum_roce_ports_of_netdev must hold it when it iterates over
>      that list.
>
>      It prevents a device from being unregistered.
>      Accurate specificity is important in these commit messages.
>      Otherwise nobody understands what is being described.
>
>  Adding a kref per IB device. Before an IB device
>  is unregistered, we wait before its not held anymore.
>
>   ** Well, that is what the patch did, but the commit message is
>      supposed to explain *why* too
>
> Do you understand why this is so confusing?
>

I agree, it should have been clarified better. The "why" is as important as the
"what" and an accurate reason could have make review's life easier.
I'll fix that. Thanks.

>> You could argue that flush_workqueue isn't needed, but that let's
>> look at the following flow:
>
> No, I wouldn't argue that, all the async work obviously needs to
> cancel or complete during remove(), that's what I've been saying.
>
>> There might be some ways around it - for example, introduce another
>> workqueue for roce_rescan_device and flush this workqueue only.
>> Every way has its advantages and disadvantages.
>
> I don't see that either, like I keep saying, all work must complete,
> more work queues don't really seem to help that.
>

I think this is a possible solution, as all works but the "rescan" work
aren't device specific. That means that after we move the rescan work
to another workqueue and synchronize it in the client->remove function,
we could be sure the device won't be used by this client anymore.

The rest of the works only iterate on the *existing* device list. Since the
ib_unregister_device
(a) lock (b) iterate over client->remove (c) remove from list (d) free
(e) unlock
all roce_gid_cache's works won't find it in the list and we'll be safe.

Regarding ib_unregister_client - if we guarantee that after each
client->remove(dev)
dev isn't used in this client, we actually guarantee that after removing all IB
devices no IB device will be used (induction).

What do you think?

>> I think it's problematic that device_mutex can't be held in a work
>> as *most* client works are synchronized when the a device is being
>> unregistered. It could affect future clients as well.
>
> But until this patch set added ib_enum_roce_ports_of_netdev the
> device_mutex would never conflict with anything a client could do.
>
> So, ultimtely, this is really a self created problem, and infact, the
> problem lies with the introduction of ib_enum_roce_ports_of_netdev -
> adding a new use of the device_mutex that is not register/unregister
> related exposes the design limitations of that mutex *that Roland
> clearly explained in a giant comment!*
>

I agree, while it's a general problem - it was first introduced by using
device_mutex in an asynchronous context (that should be flushed in
the remove function).

> So we need to fix that problem, not add a new mechanism. Off the top
> of my head:
>  - Split device_mutex into client_mutex and device_mutex,
>    hold only the client_mutex when working with the client_list.

Seems like a possible nice solution. I'll look into that.

>  - Convert device_mutex into a r/w sem

I'm not sure this will solve the problem, as besides the new enumerate
devices function, all existing functions update the list - so we'll have
read-while-write scenario and we'll be in the exact same condition.

>  - Use a different scheme to match netdevs for
>    ib_enum_roce_ports_of_netdev, that doesn't rely on holding
>    device_mutex during query
>

We could switch to RCU protected list or something similar,
but I honestly don't think it worth the complexity.

> The first two seem really simple to me. I'd do that.
>

Agree, but please consider also the addition of another
workqueue as a possible solution. It *does* (seem) to answer
all of your concerns and could be safer and cause less code changes.

>> >No, it really isn't, from the attached drivers perspective after
>> >unregister_netdevice returns the driver is not allowed to operate the
>> >net device anymore. netdev_wait_allrefs is part of making
>> >unregister_netdevice synchronous.
>> >
>> >The same is true of our IB client attaches, after a client returns
>> >from remove it is not allowed to operate the IB device anymore.
>> >
>>
>> ib_unregister_device is synchronous in the exact same manner - after
>> it returns, no client operate on the IB device.
>> wait_for_completion(&device->free) was added for this exact reason.
>
> No, you are missing the layering here.
>
> In this context ib_client is the *driver*, and like all drivers once
> it's remove method returns the driver can no longer expect the
> attached device is operable, and must guarentee the driver's .text is
> freeable.
>
>> >That is a standard idiom, and we'd need a huge compelling reason to go
>> >away from that.
>>
>> A device can be remove if and only if it's reference count is zero.
>> That's the only point where we guarantee nobody uses it anymore.
>> That's a standard idiom as well.
>
> No actually. The kref is tied to the memory lifetime, and is pretty
> much universal that the memory lifetime and device operable lifetime
> (ie still registered) are very different things.
>
> This is why using a kref to describe anything other than memory
> lifetime is not correct, and two krefs in a structure is obviously
> nonsense.
>
> Some places use an 'active count + completion', like netdev, kernfs,
> etc to track active users and use that to block an unregister path,
> but that isn't a kref.
>

kref just hides an atomic refcount - so you're actually saying using
the abstraction contradicts the kernel object's lifetime strategy?
I get that, I could have used an atomic refcount - but I agree that it's
worth exploring other solutions the will preserve the invariant of
client->remove being synchronous.

> Okay, lets break down and understand why this is an important standard
> guarentee, for our specific case. Lets generalize this scenario a
> bit. roce_gid_cache isn't modular, but lets assume it is (after all
> the intent of this patch is to weaken the remove() invarient for
> everyone.)
>
> On module remove it will call ib_unregister_client, and when
> ib_unregister_client returns the module will be become unloaded.
>
> The invariant for module unload requires no module code to be
> running and no module code to be runnable in future -- ie all work
> must be complete or canceled.
>
> module unload always calls the driver's remove function, that is a
> standard idiom.
>
> So, the first thing to notice, the kref patch didn't actually change
> ib_unregister_client - it doesn't
> 'wait_for_completion(&device->free)'.  Immediately we have a
> architectural bug, modules can exit while they have outstanding code
> runnable in their .text. Oops.
>

I tend to agree. The __exit function flushes the workqueue (so eventually
we guarentee that no code will execute before the module is unloaded).
IMHO, after ib_unregister_client returns, the module could still run code
(this is why the __exit handler exists), but it's not allowed to use any
data of the module which unregistered it, meaning - we can't allow it to
use any IB device.

> Next, we realize we cannot fix this by waiting on device->free, it is
> ostensibly a general lock that all clients use on the ib_device, we
> need something isolated to this client.
>
> Finally, we realize if we can isolate something to one client, then
> the client can handle it during it's own remove() function, we don't
> need core support.
>
> Thus, the way out is to make ib_client.remove() completely synchronous
> and *guarentee* that the module's .text will never be used again after
> remove() returns. Obviously this means all work is complete or
> canceled.
>
> *THIS* is why driver remove is idiomatically always synchronous in the
> kernel.
>

Ok, I get your point, thanks. I'll keep that call synchronous. The two
options which are on the table right now are:
(a) split the device_mutex to device_mutex and client_mutex.
      ib_unregister_device first grabs only client_mutex and after it called
      client->remove it grabs device->mutex to the rest of the work.
(b) Introduce another workqueue for all device-specific events
(actually, only rescan).
      This allows us to flush only this workqueue without waiting for any
      work which needs device_mutex.

> Please appreciate how much time it takes to explain all of this :(
> Just fix it already :(
>

I really appreciate it, again - thanks for looking at this and writing
this *long*
explanation.

> Jason
> --

Thanks a lot,
Matan

> 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

  parent reply	other threads:[~2015-05-01  6:28 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1427318422-12004-1-git-send-email-somnath.kotur@emulex.com>
     [not found] ` <1427318422-12004-1-git-send-email-somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@public.gmane.org>
2015-03-25 21:19   ` [PATCH v3 for-next 01/33] IB/core: Add RoCE GID cache Somnath Kotur
     [not found]     ` <44ab0dce-c7c9-400b-af24-10b8981358a7-3RiH6ntJJkOPfaB/Gd0HpljyZtpTMMwT@public.gmane.org>
2015-03-25 23:42       ` Bart Van Assche
     [not found]         ` <551347E9.5090503-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-03-26 14:05           ` Somnath Kotur
2015-04-14 13:23           ` Matan Barak
     [not found]             ` <552D14C6.50000-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-14 15:31               ` Bart Van Assche
2015-04-08  0:30       ` Hefty, Sean
     [not found]         ` <1828884A29C6694DAF28B7E6B8A82373A8FBE792-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-08  4:10           ` Somnath Kotur
     [not found]             ` <7F44EA5110810A40B7DAFB605C41975D58F98121-DWYeeINJQrxExQ8dmkPuX0M9+F4ksjoh@public.gmane.org>
2015-04-13 23:50               ` Hefty, Sean
     [not found]                 ` <1828884A29C6694DAF28B7E6B8A82373A8FC0C00-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-14  9:32                   ` Matan Barak
     [not found]                     ` <552CDEA5.6020709-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-14 17:32                       ` Hefty, Sean
     [not found]                         ` <1828884A29C6694DAF28B7E6B8A82373A8FC11F3-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-15  5:35                           ` Somnath Kotur
     [not found]                             ` <7F44EA5110810A40B7DAFB605C41975D58FA0B05-DWYeeINJQrxExQ8dmkPuX0M9+F4ksjoh@public.gmane.org>
2015-04-15 16:08                               ` Hefty, Sean
     [not found]                                 ` <1828884A29C6694DAF28B7E6B8A82373A8FC19D9-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-15 16:21                                   ` Suri Shelvapille
     [not found]                                     ` <CY1PR03MB1440108D65F18916AF9B2425DEE50-DUcFgbLRNhB/HYnSB+xpdWP7xZHs9kq/vxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2015-04-16 10:42                                       ` Matan Barak
2015-04-16 10:43                                   ` Moni Shoua
     [not found]                                     ` <CAG9sBKPQ7r2j4Awd3=CtRzekWPVe6hcO1+S+kspMEr4n=kDnkw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-04-16 14:58                                       ` Hefty, Sean
2015-04-08  8:49           ` Moni Shoua
2015-04-26 17:20       ` Or Gerlitz
     [not found]         ` <CAJ3xEMgepRUQs+GiMWxzV_QFaRnfbX7TPOdB_sKgRhHj7x7NDg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-04-27  7:32           ` Matan Barak
     [not found]             ` <553DE614.7050508-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-27 18:22               ` Or Gerlitz
     [not found]                 ` <CAJ3xEMjEhv3Nm_EfFcBWLk1ChQXBM5KvPxh5DstCqxeMo0MGwA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-04-28  7:17                   ` Matan Barak
     [not found]                     ` <553F341D.8000907-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-28 12:57                       ` Or Gerlitz
2015-03-25 21:19   ` [PATCH v3 for-next 02/33] IB/core: Add kref to IB devices Somnath Kotur
     [not found]     ` <9f65de5e-ed5f-48d2-bff2-03ffbe4f4876-3RiH6ntJJkOPfaB/Gd0HpljyZtpTMMwT@public.gmane.org>
2015-03-25 23:46       ` Bart Van Assche
     [not found]         ` <551348BD.9080200-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-04-14 13:27           ` Matan Barak
2015-04-26 20:10       ` Or Gerlitz
     [not found]         ` <CAJ3xEMhBNt-VNNds37sXnJi3nP9ZTMd6mC3s+qZWh0XsO1n_Nw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-04-27  8:25           ` Matan Barak
     [not found]             ` <553DF294.4070507-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-27 16:22               ` Jason Gunthorpe
     [not found]                 ` <20150427162256.GA24316-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-04-28  8:32                   ` Matan Barak
     [not found]                     ` <553F4588.80301-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-28 16:03                       ` Jason Gunthorpe
     [not found]                         ` <20150428160315.GA5497-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-04-28 16:17                           ` Matan Barak
2015-04-28 11:51               ` Or Gerlitz
     [not found]                 ` <CAJ3xEMjzgS_uR1VaeGzW+jcfG2oiVo4=fCctX6o4OVbKRX2n0Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-04-28 14:03                   ` Matan Barak
     [not found]                     ` <553F931F.6000302-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-28 17:43                       ` Jason Gunthorpe
     [not found]                         ` <20150428174312.GB5497-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-04-28 19:04                           ` Or Gerlitz
2015-04-29  9:16                           ` Matan Barak
2015-04-29 15:29                           ` Matan Barak
     [not found]                             ` <5540F8F4.5010906-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2015-04-29 16:48                               ` Jason Gunthorpe
     [not found]                                 ` <20150429164847.GA12781-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-04-30  8:21                                   ` Matan Barak
     [not found]                                     ` <5541E5ED.7000606-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-04-30 16:56                                       ` Hefty, Sean
     [not found]                                         ` <1828884A29C6694DAF28B7E6B8A82373A8FC929B-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-30 17:52                                           ` Jason Gunthorpe
     [not found]                                             ` <20150430175252.GB32666-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-04-30 19:21                                               ` Hefty, Sean
     [not found]                                                 ` <1828884A29C6694DAF28B7E6B8A82373A8FC9419-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-30 21:28                                                   ` Jason Gunthorpe
     [not found]                                                     ` <20150430212842.GB7709-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-01  6:41                                                       ` Matan Barak
2015-05-01  6:34                                               ` Matan Barak
     [not found]                                                 ` <CAAKD3BCJbUAMYhBzwuQFct=cRSXnGC=ELzNkvw2X04a4UipQwQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-01 17:36                                                   ` Jason Gunthorpe
     [not found]                                                     ` <20150501173643.GC17940-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-03  9:05                                                       ` Matan Barak
2015-04-30 17:26                                       ` Jason Gunthorpe
     [not found]                                         ` <20150430172606.GA32666-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-01  6:28                                           ` Matan Barak [this message]
     [not found]                                             ` <CAAKD3BBGQwZ_Ainm6MSQjSkaXsJd9M5Vo4oarTLyFiVMQVS5_Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-01 17:31                                               ` Jason Gunthorpe
     [not found]                                                 ` <20150501173133.GB17940-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-05 10:58                                                   ` Matan Barak
2015-03-25 21:19   ` [PATCH v3 for-next 03/33] IB/core: Add RoCE GID population Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 04/33] IB/core: Add default GID for RoCE GID Cache Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 05/33] net/bonding: make DRV macros private Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 06/33] net: Add info for NETDEV_CHANGEUPPER event Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 07/33] IB/core: Add RoCE cache bonding support Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 08/33] IB/core: GID attribute should be returned from verbs API and cache API Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 09/33] IB/core: Report gid_type and gid_ndev through sysfs Somnath Kotur
2015-03-25 21:19   ` [PATCH v3 for-next 10/33] IB/core: Support find sgid index using a filter function Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 11/33] IB/core: Modify ib_verbs and cma in order to use roce_gid_cache Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 12/33] IB/core: Add gid_type to path and rdma_id_private Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 13/33] IB/core: Add rdma_network_type to wc Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 14/33] IB/cma: Add configfs for rdma_cm Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 15/33] IB/Core: Changes to the IB Core infrastructure for RoCEv2 support Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 16/33] RDMA/ocrdma: Changes in driver to incorporate the moving of GID Table mgmt to IB/Core Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 17/33] RDMA/ocrdma: changes to support RoCE-v2 in UD path Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 18/33] RDMA/ocrdma: changes to support RoCE-v2 in RC path Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 19/33] RDMA/ocrdma: changes to support user AH creation Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 20/33] IB/mlx4: Remove gid table management for RoCE Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 21/33] IB/mlx4: Replace spin_lock with rw_semaphore Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 22/33] IB/mlx4: Lock with RCU instead of RTNL Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 23/33] net/mlx4: Postpone the registration of net_device Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 24/33] IB/mlx4: Advertise RoCE support in port capabilities Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 25/33] IB/mlx4: Implement ib_device callback - get_netdev Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 26/33] IB/mlx4: Implement ib_device callback - modify_gid Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 27/33] IB/mlx4: Configure device to work in RoCEv2 Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 28/33] IB/mlx4: Translate cache gid index to real index Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 29/33] net/mlx4_core: Add handling of R-RoCE over IPV4 in qp attach flow Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 30/33] IB/core: Initialize UD header structure with IP and UDP headers Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 31/33] IB/mlx4: Enable send of RoCE QP1 packets with IP/UDP headers Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 32/33] IB/mlx4: Create and use another QP1 for RoCEv2 Somnath Kotur
2015-03-25 21:20   ` [PATCH v3 for-next 33/33] IB/cma: Join and leave multicast groups with IGMP Somnath Kotur

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=CAAKD3BBGQwZ_Ainm6MSQjSkaXsJd9M5Vo4oarTLyFiVMQVS5_Q@mail.gmail.com \
    --to=matanb-ldsdmyg8hgv8yrgs2mwiifqbs+8scbdb@public.gmane.org \
    --cc=gerlitz.or-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@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.