All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Dmitry Torokhov <dtor@chromium.org>
Cc: toddpoynor@gmail.com, rspringer@google.com, jnjoseph@google.com,
	benchan@chromium.org, frankhu@chromium.org,
	Simon Que <sque@chromium.org>,
	Guenter Roeck <groeck@chromium.org>,
	devel@driverdev.osuosl.org, lkml <linux-kernel@vger.kernel.org>,
	toddpoynor@google.com
Subject: Re: [PATCH 06/18] staging: gasket: fix deadlock in pci driver unregister path
Date: Sat, 14 Jul 2018 14:57:49 +0200	[thread overview]
Message-ID: <20180714125749.GA19498@kroah.com> (raw)
In-Reply-To: <CAE_wzQ9BCLryFUrytYEJ+tSsog4nUXEr4cbtYNgbq3w7U-qezQ@mail.gmail.com>

On Sat, Jul 14, 2018 at 11:07:21AM +0300, Dmitry Torokhov wrote:
> On Sat, Jul 14, 2018 at 8:58 AM Todd Poynor <toddpoynor@gmail.com> wrote:
> >
> > From: Todd Poynor <toddpoynor@google.com>
> >
> > g_mutex held across pci_unregister_driver() call, also held in
> > gasket_pci_remove(), which deadlocks.
> >
> > Reported-by: Dmitry Torokhov <dtor@chromium.org>
> > Signed-off-by: Zhongze Hu <frankhu@chromium.org>
> > Signed-off-by: Todd Poynor <toddpoynor@google.com>
> > ---
> >  drivers/staging/gasket/gasket_core.c | 7 ++-----
> >  1 file changed, 2 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/staging/gasket/gasket_core.c b/drivers/staging/gasket/gasket_core.c
> > index 3bdf7d36b397..6d240dc59557 100644
> > --- a/drivers/staging/gasket/gasket_core.c
> > +++ b/drivers/staging/gasket/gasket_core.c
> > @@ -668,13 +668,10 @@ static void gasket_pci_remove(struct pci_dev *pci_dev)
> >         struct gasket_dev *gasket_dev = NULL;
> >         const struct gasket_driver_desc *driver_desc;
> >         /* Find the device desc. */
> > -       mutex_lock(&g_mutex);
> > +       __must_hold(&g_mutex);
> 
> And what exactly ensures that mutex is held here? Yes, we are holding
> the mutex when we unload the driver, but PCI hot-unplug or unbinding
> the device though sysfs do not go through module unload code path, so
> you'll end up here without holding the mutex.

Which is a huge reason the whole "wrap the pci core calls" is not going
to work here at all.  The device ownership rules are all wonky because
of this.  Unwinding that is key to getting all of this right.

thanks,

greg k-h

  reply	other threads:[~2018-07-14 12:57 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-14  5:57 [PATCH 00/18] staging: gasket: sundry fixes and fixups Todd Poynor
2018-07-14  5:57 ` [PATCH 01/18] staging: gasket: remove X86 Kconfig restriction Todd Poynor
2018-07-14  5:58 ` [PATCH 02/18] MAINTAINERS: Add maintainer for drivers/staging/gasket Todd Poynor
2018-07-14  6:28   ` Greg Kroah-Hartman
2018-07-14  5:58 ` [PATCH 03/18] staging: gasket: typo and whitespace cleanups Todd Poynor
2018-07-14  6:31   ` Greg Kroah-Hartman
2018-07-14  5:58 ` [PATCH 04/18] staging: gasket: device registration error and unregister fixups Todd Poynor
2018-07-16 13:53   ` Dan Carpenter
2018-07-16 21:15     ` Todd Poynor
2018-07-14  5:58 ` [PATCH 05/18] staging: gasket: sysfs mapping creation fixups Todd Poynor
2018-07-14  6:32   ` Greg Kroah-Hartman
2018-07-16 21:14     ` Todd Poynor
2018-07-17  6:55       ` Greg Kroah-Hartman
2018-07-14  5:58 ` [PATCH 06/18] staging: gasket: fix deadlock in pci driver unregister path Todd Poynor
2018-07-14  6:36   ` Greg Kroah-Hartman
2018-07-14  8:07   ` Dmitry Torokhov
2018-07-14 12:57     ` Greg Kroah-Hartman [this message]
2018-07-16 21:16       ` Todd Poynor
2018-07-14  5:58 ` [PATCH 07/18] staging: gasket: convert gasket_mmap_has_permissions to bool return Todd Poynor
2018-07-14  5:58 ` [PATCH 08/18] staging: gasket: gasket_wait_with_reschedule fixups Todd Poynor
2018-07-14  6:33   ` Greg Kroah-Hartman
2018-07-14  5:58 ` [PATCH 09/18] staging: gasket: bail out of reset sequence on device callback error Todd Poynor
2018-07-14  5:58 ` [PATCH 10/18] staging: gasket: gasket_open use container_of() Todd Poynor
2018-07-14  8:15   ` Dmitry Torokhov
2018-07-16 21:18     ` Todd Poynor
2018-07-14  5:58 ` [PATCH 11/18] staging: gasket: always allow root open for write Todd Poynor
2018-07-14  8:25   ` Dmitry Torokhov
2018-07-16 21:22     ` Todd Poynor
2018-07-15  9:05   ` Greg Kroah-Hartman
2018-07-15  9:11     ` Dmitry Torokhov
2018-07-15  9:32       ` Greg Kroah-Hartman
2018-07-15  9:53         ` Dmitry Torokhov
2018-07-15 10:03           ` Greg Kroah-Hartman
2018-07-15 18:15             ` Todd Poynor
2018-07-15 19:41               ` Greg Kroah-Hartman
2018-07-16 21:26                 ` Todd Poynor
2018-07-14  5:58 ` [PATCH 12/18] staging: gasket: annotate ioctl arg with __user Todd Poynor
2018-07-14  6:35   ` Greg Kroah-Hartman
     [not found]     ` <CAO3upobyf9JpKLSoSPeVfNGOh6R0cud=hT+bhA=U2kNkGEJ-aw@mail.gmail.com>
2018-07-14  7:44       ` Greg Kroah-Hartman
2018-07-14 19:20         ` Todd Poynor
2018-07-15  9:00           ` Greg Kroah-Hartman
2018-07-15 17:38             ` Todd Poynor
2018-07-14  5:58 ` [PATCH 13/18] staging: gasket: gasket_enable_dev fixups Todd Poynor
2018-07-14  6:39   ` Greg Kroah-Hartman
2018-07-16 21:28     ` Todd Poynor
2018-07-14  5:58 ` [PATCH 14/18] staging: gasket: fix class create bug handling Todd Poynor
2018-07-14  8:16   ` Dmitry Torokhov
2018-07-14  5:58 ` [PATCH 15/18] staging: gasket: remove unnecessary code in coherent allocator Todd Poynor
2018-07-14  5:58 ` [PATCH 16/18] staging: gasket: gasket core error handling fixups Todd Poynor
2018-07-14  5:58 ` [PATCH 17/18] staging: gasket: don't release coherent mappings Todd Poynor
2018-07-14  5:58 ` [PATCH 18/18] staging: gasket: various cleanups Todd Poynor
2018-07-14  6:30   ` Greg Kroah-Hartman

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=20180714125749.GA19498@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=benchan@chromium.org \
    --cc=devel@driverdev.osuosl.org \
    --cc=dtor@chromium.org \
    --cc=frankhu@chromium.org \
    --cc=groeck@chromium.org \
    --cc=jnjoseph@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rspringer@google.com \
    --cc=sque@chromium.org \
    --cc=toddpoynor@gmail.com \
    --cc=toddpoynor@google.com \
    /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.