All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiang Liu <liuj97@gmail.com>
To: Amos Kong <akong@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	linux-pci@vger.kernel.org, seabios@seabios.org,
	qemu-devel@nongnu.org, jbarnes@virtuousgeek.org,
	alex.williamson@redhat.com, kevin@koconnor.net
Subject: Re: [Qemu-devel] [PATCH v3] pci: clean all funcs when hot-removing multifunc device
Date: Fri, 11 May 2012 22:00:40 +0800	[thread overview]
Message-ID: <4FAD1B88.2060905@gmail.com> (raw)
In-Reply-To: <4FAC5C32.9080009@redhat.com>

On 05/11/2012 08:24 AM, Amos Kong wrote:
> On 05/11/2012 07:54 AM, Amos Kong wrote:
>> On 05/11/2012 02:55 AM, Michael S. Tsirkin wrote:
>>> On Fri, May 11, 2012 at 01:09:13AM +0800, Jiang Liu wrote:
>>>> On 05/10/2012 11:44 PM, Amos Kong wrote:
>>>>
>>>>> diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
>>>>> index 806c44f..a7442d9 100644
>>>>> --- a/drivers/pci/hotplug/acpiphp_glue.c
>>>>> +++ b/drivers/pci/hotplug/acpiphp_glue.c
>>>>> @@ -885,7 +885,7 @@ static void disable_bridges(struct pci_bus *bus)
>>>>>  static int disable_device(struct acpiphp_slot *slot)
>>>>>  {
>>>>>  	struct acpiphp_func *func;
>>>>> -	struct pci_dev *pdev;
>>>>> +	struct pci_dev *pdev, *tmp;
>>>>>  	struct pci_bus *bus = slot->bridge->pci_bus;
>>>>>  
>>>>>  	/* The slot will be enabled when func 0 is added, so check
>>>>> @@ -902,9 +902,10 @@ static int disable_device(struct acpiphp_slot *slot)
>>>>>  			func->bridge = NULL;
>>>>>  		}
>>>>>  
>>>>> -		pdev = pci_get_slot(slot->bridge->pci_bus,
>>>>> -				    PCI_DEVFN(slot->device, func->function));
>>>>> -		if (pdev) {
>>>>> +		list_for_each_entry_safe(pdev, tmp, &bus->devices, bus_list) {
>>>>> +			if (PCI_SLOT(pdev->devfn) != slot->device)
>>>>> +				continue;
>>>>> +
>>>> The pci_bus_sem lock should be acquired when walking the bus->devices list.
>>>> Otherwise it may cause invalid memory access if another thread is modifying
>>>> the bus->devices list concurrently.
> 
> pci_bus_sem lock is only request for writing &bus->devices list, right ?
> and this protection already exists in pci_destory_dev().
That's for writer. For reader to walk the pci_bus->devices list, you also need
to acquire the reader lock by down_read(&pci_bus_sem). Please refer to 
pci_get_slot() for example. This especially import for native OS because there
may be multiple PCI slots/devices on the bus.


  reply	other threads:[~2012-05-11 14:00 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1315976141-6684-1-git-send-email-akong@redhat.com>
2011-09-14  4:56 ` [PATCH] pci: clean all funcs when hot-removing multifunc device Amos Kong
2011-09-15 19:03 ` Bjorn Helgaas
2011-09-15 23:56   ` Kenji Kaneshige
2012-05-09 15:25 ` [PATCH v2] " Amos Kong
2012-05-09 15:25   ` [Qemu-devel] " Amos Kong
2012-05-10 15:44 ` [PATCH v3] " Amos Kong
2012-05-10 15:44   ` [Qemu-devel] " Amos Kong
2012-05-10 17:09   ` Jiang Liu
2012-05-10 17:09     ` [Qemu-devel] " Jiang Liu
2012-05-10 18:55     ` Michael S. Tsirkin
2012-05-10 18:55       ` [Qemu-devel] " Michael S. Tsirkin
2012-05-10 23:54       ` Amos Kong
2012-05-10 23:54         ` Amos Kong
2012-05-11  0:24         ` Amos Kong
2012-05-11  0:24           ` Amos Kong
2012-05-11 14:00           ` Jiang Liu [this message]
2012-05-16 15:26             ` Bjorn Helgaas
2012-05-16 15:26               ` Bjorn Helgaas
2012-05-20  2:31               ` [PATCH v4] " kongjianjun
2012-05-20  2:31                 ` [Qemu-devel] " kongjianjun
2012-05-20  2:36               ` [Qemu-devel] [PATCH v3] " Amos Kong
2012-05-20  2:36                 ` Amos Kong
2012-05-20  2:59               ` [PATCH v5] " kongjianjun
2012-05-20  2:59                 ` [Qemu-devel] " kongjianjun

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=4FAD1B88.2060905@gmail.com \
    --to=liuj97@gmail.com \
    --cc=akong@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=jbarnes@virtuousgeek.org \
    --cc=kevin@koconnor.net \
    --cc=linux-pci@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=seabios@seabios.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.