Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1457699 > unrolled thread
| Started by | Shamir Rabinovitch <shamir.rabinovitch@oracle.com> |
|---|---|
| First post | 2016-08-08 12:50 +0200 |
| Last post | 2016-08-09 23:00 +0200 |
| Articles | 4 — 2 participants |
Back to article view | Back to linux.kernel
Re: [PATCH] device probe: add self triggered delayed work request Shamir Rabinovitch <shamir.rabinovitch@oracle.com> - 2016-08-08 12:50 +0200
Re: [PATCH] device probe: add self triggered delayed work request Qing Huang <qing.huang@oracle.com> - 2016-08-09 02:10 +0200
Re: [PATCH] device probe: add self triggered delayed work request Shamir Rabinovitch <shamir.rabinovitch@oracle.com> - 2016-08-09 12:20 +0200
Re: [PATCH] device probe: add self triggered delayed work request Qing Huang <qing.huang@oracle.com> - 2016-08-09 23:00 +0200
| From | Shamir Rabinovitch <shamir.rabinovitch@oracle.com> |
|---|---|
| Date | 2016-08-08 12:50 +0200 |
| Subject | Re: [PATCH] device probe: add self triggered delayed work request |
| Message-ID | <s3Qi5-e1-13@gated-at.bofh.it> |
Hi Qing, I suspect there is potential dead-lock with this patch: cpu0 cpu1 driver_deferred_probe_add deferred_probe_work_func ... mutex_unlock(&deferred_probe_mutex) mutex_lock(&deferred_probe_mutex) bus_probe_device(dev) ... device return -EPROBE_DEFER ... driver_deferred_probe_add ... mutex_lock(&deferred_probe_mutex) ... <deadlock!> cancel_delayed_work(&deferred_probe_trigger_work) <work will never end - deadlock!> Please confirm if this scenario is possible. BR, Shamir Rabinovitch
[toc] | [next] | [standalone]
| From | Qing Huang <qing.huang@oracle.com> |
|---|---|
| Date | 2016-08-09 02:10 +0200 |
| Message-ID | <s42Mh-8w3-1@gated-at.bofh.it> |
| In reply to | #1457699 |
On 08/08/2016 03:42 AM, Shamir Rabinovitch wrote: > Hi Qing, > > I suspect there is potential dead-lock with this patch: > > cpu0 cpu1 > > driver_deferred_probe_add deferred_probe_work_func > ... mutex_unlock(&deferred_probe_mutex) > mutex_lock(&deferred_probe_mutex) bus_probe_device(dev) > ... device return -EPROBE_DEFER > ... driver_deferred_probe_add > ... mutex_lock(&deferred_probe_mutex) > ... <deadlock!> > cancel_delayed_work(&deferred_probe_trigger_work) > <work will never end - deadlock!> Not sure if I understood your scenario. Why there is a deadlock here? > > Please confirm if this scenario is possible. > > BR, Shamir Rabinovitch
[toc] | [prev] | [next] | [standalone]
| From | Shamir Rabinovitch <shamir.rabinovitch@oracle.com> |
|---|---|
| Date | 2016-08-09 12:20 +0200 |
| Message-ID | <s4ciB-6ek-1@gated-at.bofh.it> |
| In reply to | #1458330 |
On Mon, Aug 08, 2016 at 05:10:05PM -0700, Qing Huang wrote:
>
> Not sure if I understood your scenario. Why there is a deadlock here?
>
CPU0 | CPU1
---------------------------------------------------------------------------------------------
driver_deferred_probe_add | driver_deferred_probe_trigger_wrapper
mutex_lock(&deferred_probe_mutex) | driver_deferred_probe_trigger
cancel_delayed_work(&deferred_probe_trigger_work) | mutex_lock(&deferred_probe_mutex)
wait for "driver_deferred_probe_trigger_wrapper" | wait for "deferred_probe_mutex"
is this possible scenario with this patch?
if yes then CPU0 will wait for CPU1 to finish the delayed work whith
mutex deferred_probe_mutex held while CPU1 will try to finish the
delayed work and will wait for the same mutex forever.
it seems like dead lock scenario to me.
please say if this scenario is possible.
BR, Shamir Rabinovitch
[toc] | [prev] | [next] | [standalone]
| From | Qing Huang <qing.huang@oracle.com> |
|---|---|
| Date | 2016-08-09 23:00 +0200 |
| Message-ID | <s4mhX-437-5@gated-at.bofh.it> |
| In reply to | #1458572 |
On 08/09/2016 03:11 AM, Shamir Rabinovitch wrote: > On Mon, Aug 08, 2016 at 05:10:05PM -0700, Qing Huang wrote: >> Not sure if I understood your scenario. Why there is a deadlock here? >> > CPU0 | CPU1 > --------------------------------------------------------------------------------------------- > driver_deferred_probe_add | driver_deferred_probe_trigger_wrapper > mutex_lock(&deferred_probe_mutex) | driver_deferred_probe_trigger > cancel_delayed_work(&deferred_probe_trigger_work) | mutex_lock(&deferred_probe_mutex) > wait for "driver_deferred_probe_trigger_wrapper" | wait for "deferred_probe_mutex" > > is this possible scenario with this patch? > > if yes then CPU0 will wait for CPU1 to finish the delayed work whith > mutex deferred_probe_mutex held while CPU1 will try to finish the > delayed work and will wait for the same mutex forever. CPU0 will not wait for "driver_deferred_probe_trigger_wrapper" to finish, it simply puts the work request onto the queue and returns. Qing > > it seems like dead lock scenario to me. > > please say if this scenario is possible. > > BR, Shamir Rabinovitch
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web