All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joerg Roedel <jroedel@suse.de>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: linux-pci@vger.kernel.org, David Woodhouse <dwmw2@infradead.org>,
	iommu@lists.linux-foundation.org,
	Gregor Dick <gdick@solarflare.com>
Subject: Re: [PATCH v2 02/11] PCI: Allocate ATS struct during enumeration
Date: Mon, 27 Jul 2015 14:40:24 +0200	[thread overview]
Message-ID: <20150727124024.GB27614@suse.de> (raw)
In-Reply-To: <20150721001405.28145.43004.stgit@bhelgaas-glaptop2.roam.corp.google.com>

On Mon, Jul 20, 2015 at 07:14:05PM -0500, Bjorn Helgaas wrote:
> Previously, we allocated pci_ats structures when an IOMMU driver called
> pci_enable_ats().  An SR-IOV VF shares the STU setting with its PF, so when
> enabling ATS on the VF, we allocated a pci_ats struct for the PF if it
> didn't already have one.  We held the sriov->lock to serialize threads
> concurrently enabling ATS on several VFS so only one would allocate the PF
> pci_ats.
> 
> Gregor reported a deadlock here:
> 
>   pci_enable_sriov
>     sriov_enable
>       virtfn_add
>         mutex_lock(dev->sriov->lock)      # acquire sriov->lock
>         pci_device_add
>           device_add
>             BUS_NOTIFY_ADD_DEVICE notifier chain
>             iommu_bus_notifier
>               amd_iommu_add_device        # iommu_ops.add_device
>                 init_iommu_group
>                   iommu_group_get_for_dev
>                     iommu_group_add_device
>                       __iommu_attach_device
>                         amd_iommu_attach_device  # iommu_ops.attach_device
>                           attach_device
>                             pci_enable_ats
>                               mutex_lock(dev->sriov->lock) # deadlock
> 
> There's no reason to delay allocating the pci_ats struct, and if we
> allocate it for each device at enumeration-time, there's no need for
> locking in pci_enable_ats().
> 
> Allocate pci_ats struct during enumeration, when we initialize other
> capabilities.
> 
> Note that this implementation requires ATS to be enabled on the PF first,
> before on any of the VFs because the PF controls the STU for all the VFs.
> 
> Link: http://permalink.gmane.org/gmane.linux.kernel.iommu/9433
> Reported-by: Gregor Dick <gdick@solarflare.com>
> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> ---
>  drivers/pci/ats.c       |   98 ++++++++++++++++++++---------------------------
>  drivers/pci/probe.c     |    3 +
>  drivers/pci/remove.c    |    1 
>  include/linux/pci-ats.h |    2 -
>  include/linux/pci.h     |    9 ++++
>  5 files changed, 56 insertions(+), 57 deletions(-)

Looks good to me now.


Reviewed-by: Joerg Roedel <jroedel@suse.de>

  reply	other threads:[~2015-07-27 12:40 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-21  0:13 [PATCH v2 00/11] PCI: Fix ATS deadlock Bjorn Helgaas
2015-07-21  0:13 ` [PATCH v2 01/11] iommu/vt-d: Cache PCI ATS state and Invalidate Queue Depth Bjorn Helgaas
     [not found]   ` <20150721001357.28145.83631.stgit-1RhO1Y9PlrlHTL0Zs8A6p/gx64E7kk8eUsxypvmhUTTZJqsBc5GL+g@public.gmane.org>
2015-07-27 13:08     ` Joerg Roedel
2015-07-27 13:08       ` Joerg Roedel
2015-07-27 22:54       ` Bjorn Helgaas
     [not found]         ` <20150727225453.GB24401-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2015-07-28  7:14           ` Joerg Roedel
2015-07-28  7:14             ` Joerg Roedel
2015-07-21  0:14 ` [PATCH v2 02/11] PCI: Allocate ATS struct during enumeration Bjorn Helgaas
2015-07-27 12:40   ` Joerg Roedel [this message]
2015-07-21  0:14 ` [PATCH v2 03/11] PCI: Embed ATS info directly into struct pci_dev Bjorn Helgaas
     [not found]   ` <20150721001413.28145.38246.stgit-1RhO1Y9PlrlHTL0Zs8A6p/gx64E7kk8eUsxypvmhUTTZJqsBc5GL+g@public.gmane.org>
2015-07-27 12:45     ` Joerg Roedel
2015-07-27 12:45       ` Joerg Roedel
2015-07-21  0:14 ` [PATCH v2 05/11] PCI: Rationalize pci_ats_queue_depth() error checking Bjorn Helgaas
2015-07-21  0:14 ` [PATCH v2 06/11] PCI: Inline the ATS setup code into pci_ats_init() Bjorn Helgaas
     [not found] ` <20150721001243.28145.81610.stgit-1RhO1Y9PlrlHTL0Zs8A6p/gx64E7kk8eUsxypvmhUTTZJqsBc5GL+g@public.gmane.org>
2015-07-21  0:14   ` [PATCH v2 04/11] PCI: Reduce size of ATS structure elements Bjorn Helgaas
2015-07-21  0:14     ` Bjorn Helgaas
2015-07-21  0:14   ` [PATCH v2 07/11] PCI: Use pci_physfn() rather than looking up physfn by hand Bjorn Helgaas
2015-07-21  0:14     ` Bjorn Helgaas
2015-07-21  0:14   ` [PATCH v2 08/11] PCI: Clean up ATS error handling Bjorn Helgaas
2015-07-21  0:14     ` Bjorn Helgaas
2015-07-27 12:56     ` Joerg Roedel
2015-07-29 16:07   ` [PATCH v2 00/11] PCI: Fix ATS deadlock Bjorn Helgaas
2015-07-29 16:07     ` Bjorn Helgaas
2015-08-06 16:03     ` Yinghai Lu
2015-08-07  1:06       ` Yinghai Lu
2015-08-10 17:33         ` Bjorn Helgaas
2015-08-10 22:54           ` Yinghai Lu
2015-07-21  0:15 ` [PATCH v2 09/11] PCI: Move ATS declarations to linux/pci.h so they're all together Bjorn Helgaas
2015-07-21  0:15 ` [PATCH v2 10/11] PCI: Stop caching ATS Invalidate Queue Depth Bjorn Helgaas
2015-07-27 12:57   ` Joerg Roedel
2015-07-27 14:00   ` Don Dutile
2015-07-27 22:27     ` Bjorn Helgaas
2015-07-27 23:13       ` Don Dutile
2015-07-21  0:15 ` [PATCH v2 11/11] PCI: Remove pci_ats_enabled() Bjorn Helgaas
     [not found]   ` <20150721001519.28145.73458.stgit-1RhO1Y9PlrlHTL0Zs8A6p/gx64E7kk8eUsxypvmhUTTZJqsBc5GL+g@public.gmane.org>
2015-07-27 12:58     ` Joerg Roedel
2015-07-27 12:58       ` Joerg Roedel
2015-07-28 15:16 ` [PATCH v2 00/11] PCI: Fix ATS deadlock Joerg Roedel

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=20150727124024.GB27614@suse.de \
    --to=jroedel@suse.de \
    --cc=bhelgaas@google.com \
    --cc=dwmw2@infradead.org \
    --cc=gdick@solarflare.com \
    --cc=iommu@lists.linux-foundation.org \
    --cc=linux-pci@vger.kernel.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.