From: Matan Barak <matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
To: Jason Gunthorpe
<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
Cc: 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: Thu, 30 Apr 2015 11:21:01 +0300 [thread overview]
Message-ID: <5541E5ED.7000606@mellanox.com> (raw)
In-Reply-To: <20150429164847.GA12781-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
On 4/29/2015 7:48 PM, Jason Gunthorpe wrote:
>
>>> Although, there must be a call to the driver's modify_gid to free
>>> context before freeing, and I don't see that obviously happening..
>
>> Of course there is:
>> roce_gid_cache_client_cleanup_one ->
>> roce_gid_cache_client_cleanup_one_work -> *work* ->
>> roce_gid_cache_client_cleanup_work_handler ->
>> roce_gid_cache_cleanup_one -> free_roce_gid_cache -> write_gid ->
>> modify_gid
>
> Ah, this wasn't there in the earlier versions. Good.
>
>>> However, all the other async work launched doesn't look safe at all.
>
>> I think it's safe - roce_gid_cache_client_cleanup_one deactivates
>> the cache (no new events are handled on the cache). Ongoing events
>> are flushed in roce_gid_cache_client_cleanup_one_work
>
> Do you mean roce_gid_cache_client_cleanup_work_handler?
>
Yeah, the flush_workqueue is done in
roce_gid_cache_client_cleanup_work_handler
>> It's not safe to free the client's context in ib_unregister_device
>> while the client isn't done. The obvious solution is to wait in
>> client->remove (like you suggested) until the client has finished
>> cleaning up things.
>
> This isn't just the obvious solution, it is the *expected* solution.
> In the kernel the add/remove style idiom always works like this.
>
>> This doesn't fit our case - since client->remove is called under
>> device_lock, but it's possible (for example) that
>> roce_rescan_device_work_handler is currently running and waits to
>> grab this exact mutex - DEAD LOCK.
>
> Uh, client->remove is most obviously called with
> drivers/infiniband/core/device.c:device_mutex held, is that what you
> mean? But that can't be right because only four functions hold that
> lock and none of them are obviously called from this patch?
>
> If these patches have a locking problem then breaking the add/remove
> idiom is not the way to solve it.
>
> Look, four people have asked about this patch, and I still have yet to
> see an accurate and convincing answer from you what is actually going
> on here. Please actually spend some time to properly research and
> describe why the remove callback can't be synchronous.
>
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).
When a device is being unregistered, the remove function is called under
device_mutex:
ib_unregister_device->roce_gid_cache_client_cleanup_one->*work*->roce_gid_cache_client_cleanup_work_handler->flush_workqueue
This flush_workqueue could wait for ib_enum_roce_ports_of_netdev. If we
would have called it straight from the remove function, we're waiting
for a work which waits for a mutex that will be unlocked only after the
iteration over all remove functions is completed -> *DEADLOCK*
You could argue that flush_workqueue isn't needed, but that let's look
at the following flow:
roce_gid_cache_client_setup_one->roce_rescan_device->*work (with the
exact ib_dev)*->....
We need to make sure the ib_dev isn't free'd before this work is done.
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 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.
I'll be happy to explain/fix any issue you have regarding this code, but
of course it needs to be concrete.
>>> It is just fundamentally wrong to return from ib_client.remove while
>>> async work is still outstanding, the client is expected to deal with
>>> this internally and synchronously.
>>>
>>> You don't need IB core help to do this.
>>
>> netdev is taking a similar approach - please take a look at
>> netdev_wait_allrefs
>
> 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.
> 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.
>
> Jason
>
I really appreciate the review and thanks for looking at this patch,
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
next prev parent reply other threads:[~2015-04-30 8:21 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 [this message]
[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
[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=5541E5ED.7000606@mellanox.com \
--to=matanb-vpraknaxozvwk0htik3j/w@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=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 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).