From: Jiang Liu <liuj97@gmail.com>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Yinghai Lu <yinghai@kernel.org>,
Bjorn Helgaas <bhelgaas@google.com>, Len Brown <lenb@kernel.org>,
Taku Izumi <izumi.taku@jp.fujitsu.com>,
Jiang Liu <jiang.liu@huawei.com>,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-acpi@vger.kernel.org
Subject: Re: [PATCH v8 06/22] PCI: split registration of PCI bus devices into two stages
Date: Sun, 13 Jan 2013 23:25:46 +0800 [thread overview]
Message-ID: <50F2D1FA.6000000@gmail.com> (raw)
In-Reply-To: <3931059.ZcnvRQRmKT@vostro.rjw.lan>
On 01/13/2013 06:34 AM, Rafael J. Wysocki wrote:
> On Friday, January 11, 2013 02:40:33 PM Yinghai Lu wrote:
>> From: Jiang Liu <jiang.liu@huawei.com>
>>
>> When handling BUS_NOTIFY_ADD_DEVICE event for a PCI bridge device,
>> the notification handler can't hold reference count to the new PCI bus
>> because the device object for the new bus (pci_dev->subordinate->dev)
>> hasn't been initialized yet.
>
> It doesn't look like BUS_NOTIFY_ADD_DEVICE is used by the PCI bus type
> in the mainline.
>
> Is it in linux-next?
>
> If not, then I don't see why we need this patch.
Hi Rafael,
Originally it's a preparation patch for pci_slot/acpiphp/pci_bind
related fixups. With recent work from you to remove bind/unbind from struct
acpi_bus_type, we have no dependency on this patch anymore.
Regards!
Gerry
>
> Thanks,
> Rafael
>
>
>> Split the registration of PCI bus device into two stages as below,
>> so that the event handler could hold reference count to the new PCI bus
>> when handling BUS_NOTIFY_ADD_DEVICE event.
>>
>> 1) device_initialize(&pci_dev->dev)
>> 2) device_initialize(&pci_dev->subordinate->dev)
>> 3) notify BUS_NOTIFY_ADD_DEVICE event for pci_dev
>> 4) device_add(&pci_dev->dev)
>> 5) device_add(&pci_dev->subordinate->dev)
>>
>> Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
>> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
>> ---
>> drivers/pci/bus.c | 2 +-
>> drivers/pci/probe.c | 4 +++-
>> drivers/pci/remove.c | 10 +++++-----
>> 3 files changed, 9 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
>> index 847f3ca..5f9c728 100644
>> --- a/drivers/pci/bus.c
>> +++ b/drivers/pci/bus.c
>> @@ -200,7 +200,7 @@ int pci_bus_add_child(struct pci_bus *bus)
>> if (bus->bridge)
>> bus->dev.parent = bus->bridge;
>>
>> - retval = device_register(&bus->dev);
>> + retval = device_add(&bus->dev);
>> if (retval)
>> return retval;
>>
>> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
>> index 48b35e1..dc4fde3 100644
>> --- a/drivers/pci/probe.c
>> +++ b/drivers/pci/probe.c
>> @@ -642,6 +642,7 @@ static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
>> */
>> child->dev.class = &pcibus_class;
>> dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
>> + device_initialize(&child->dev);
>>
>> /*
>> * Set up the primary, secondary and subordinate
>> @@ -1678,7 +1679,8 @@ struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
>> b->dev.class = &pcibus_class;
>> b->dev.parent = b->bridge;
>> dev_set_name(&b->dev, "%04x:%02x", pci_domain_nr(b), bus);
>> - error = device_register(&b->dev);
>> + device_initialize(&b->dev);
>> + error = device_add(&b->dev);
>> if (error)
>> goto class_dev_reg_err;
>>
>> diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c
>> index fc38c48..a1fdd0f 100644
>> --- a/drivers/pci/remove.c
>> +++ b/drivers/pci/remove.c
>> @@ -48,11 +48,11 @@ void pci_remove_bus(struct pci_bus *bus)
>> list_del(&bus->node);
>> pci_bus_release_busn_res(bus);
>> up_write(&pci_bus_sem);
>> - if (!bus->is_added)
>> - return;
>> -
>> - pci_remove_legacy_files(bus);
>> - device_unregister(&bus->dev);
>> + if (bus->is_added) {
>> + pci_remove_legacy_files(bus);
>> + device_del(&bus->dev);
>> + }
>> + put_device(&bus->dev);
>> }
>> EXPORT_SYMBOL(pci_remove_bus);
>>
>>
next prev parent reply other threads:[~2013-01-13 15:25 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-11 22:40 [PATCH v8 00/22] PCI, ACPI: pci root bus hotplug support / pci match_driver Yinghai Lu
2013-01-11 22:40 ` [PATCH v8 01/22] PCI, acpiphp: Add is_hotplug_bridge detection Yinghai Lu
2013-01-12 21:35 ` Rafael J. Wysocki
2013-01-15 6:45 ` Yijing Wang
2013-01-15 6:45 ` Yijing Wang
2013-01-15 7:05 ` Yinghai Lu
2013-01-11 22:40 ` [PATCH v8 02/22] PCI: Add root bus children dev's res to fail list Yinghai Lu
2013-01-12 21:37 ` Rafael J. Wysocki
2013-01-15 6:23 ` Yinghai Lu
2013-01-15 11:21 ` Rafael J. Wysocki
2013-01-15 15:44 ` Yinghai Lu
2013-01-15 21:52 ` Rafael J. Wysocki
2013-01-15 22:03 ` Yinghai Lu
2013-01-11 22:40 ` [PATCH v8 03/22] PCI: Set dev_node early for pci_dev Yinghai Lu
2013-01-12 21:38 ` Rafael J. Wysocki
2013-01-11 22:40 ` [PATCH v8 04/22] PCI: Fix a device reference count leakage issue in pci_dev_present() Yinghai Lu
2013-01-12 21:39 ` Rafael J. Wysocki
2013-01-11 22:40 ` [PATCH v8 05/22] PCI: make PCI device create/destroy logic symmetric Yinghai Lu
2013-01-12 21:40 ` Rafael J. Wysocki
2013-01-11 22:40 ` [PATCH v8 06/22] PCI: split registration of PCI bus devices into two stages Yinghai Lu
2013-01-12 22:34 ` Rafael J. Wysocki
2013-01-13 15:25 ` Jiang Liu [this message]
2013-01-15 6:29 ` Yinghai Lu
2013-01-11 22:40 ` [PATCH v8 07/22] ACPI: Separate acpi_bus_trim to support two steps Yinghai Lu
2013-01-12 22:40 ` Rafael J. Wysocki
2013-01-15 6:31 ` Yinghai Lu
2013-01-15 11:22 ` Rafael J. Wysocki
2013-01-11 22:40 ` [PATCH v8 08/22] PCI, acpiphp: Separate out hot-add support of pci host bridge Yinghai Lu
2013-01-12 23:18 ` Rafael J. Wysocki
2013-01-15 6:44 ` Yinghai Lu
2013-01-15 15:54 ` Yinghai Lu
2013-01-15 22:00 ` Rafael J. Wysocki
2013-01-15 22:04 ` Yinghai Lu
2013-01-11 22:40 ` [PATCH v8 09/22] PCI, ACPI: Add pci_root_hp hot removal notification support Yinghai Lu
2013-01-12 23:26 ` Rafael J. Wysocki
2013-01-15 6:45 ` Yinghai Lu
2013-01-11 22:40 ` [PATCH v8 10/22] ACPI: Introduce a new acpi handle to determine HID match Yinghai Lu
2013-01-12 23:27 ` Rafael J. Wysocki
2013-01-11 22:40 ` [PATCH v8 11/22] PCI: correctly detect ACPI PCI host bridge objects Yinghai Lu
2013-01-12 23:34 ` Rafael J. Wysocki
2013-01-13 15:32 ` Jiang Liu
2013-01-11 22:40 ` [PATCH v8 12/22] PCI, ACPI: debug print for installation of acpi root bridge's notifier Yinghai Lu
2013-01-12 23:37 ` Rafael J. Wysocki
2013-01-11 22:40 ` [PATCH v8 13/22] PCI, ACPI: remove acpi_root_bridge in pci_root_hp Yinghai Lu
2013-01-12 23:39 ` Rafael J. Wysocki
2013-01-11 22:40 ` [PATCH v8 14/22] ACPI: update ej_event interface to take acpi_device Yinghai Lu
2013-01-12 23:40 ` Rafael J. Wysocki
2013-01-15 6:55 ` Yinghai Lu
2013-01-15 11:26 ` Rafael J. Wysocki
2013-01-15 23:43 ` Yinghai Lu
2013-01-15 23:55 ` Rafael J. Wysocki
2013-01-16 0:22 ` Rafael J. Wysocki
2013-01-16 0:36 ` Yinghai Lu
2013-01-16 14:05 ` Rafael J. Wysocki
2013-01-16 19:37 ` Yinghai Lu
2013-01-16 21:48 ` Rafael J. Wysocki
2013-01-11 22:40 ` [PATCH v8 15/22] ACPI, PCI: Simplify handle_root_bridge_removal() Yinghai Lu
2013-01-12 23:42 ` Rafael J. Wysocki
2013-01-11 22:40 ` [PATCH v8 16/22] PCI, acpiphp: Don't bailout even no slots found yet Yinghai Lu
2013-01-12 23:43 ` Rafael J. Wysocki
2013-01-11 22:40 ` [PATCH v8 17/22] PCI, ACPI: Add alloc_acpi_hp_work() Yinghai Lu
2013-01-12 23:45 ` Rafael J. Wysocki
2013-01-15 6:59 ` Yinghai Lu
2013-01-15 11:27 ` Rafael J. Wysocki
2013-01-11 22:40 ` [PATCH v8 18/22] PCI, acpiphp: Use acpi_hp_work Yinghai Lu
2013-01-11 22:40 ` [PATCH v8 19/22] PCI, pci_root_hp: " Yinghai Lu
2013-01-11 22:40 ` [PATCH v8 20/22] PCI, ACPI: Make kacpi_hotplug_wq static Yinghai Lu
2013-01-11 22:40 ` [PATCH v8 21/22] PCI: add match_driver in struct pci_dev Yinghai Lu
2013-01-12 23:49 ` Rafael J. Wysocki
2013-01-13 15:40 ` Jiang Liu
2013-01-13 20:01 ` Rafael J. Wysocki
2013-01-11 22:40 ` [PATCH v8 22/22] PCI: move device_add out of pci_bus_add_device() Yinghai Lu
2013-01-12 23:54 ` Rafael J. Wysocki
2013-01-15 7:10 ` Yinghai Lu
2013-01-15 11:19 ` Rafael J. Wysocki
2013-01-15 15:45 ` Yinghai Lu
2013-01-16 2:29 ` Yijing Wang
2013-01-16 2:29 ` Yijing Wang
2013-01-16 2:41 ` Yinghai Lu
2013-01-12 21:35 ` [PATCH v8 00/22] PCI, ACPI: pci root bus hotplug support / pci match_driver Rafael J. Wysocki
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=50F2D1FA.6000000@gmail.com \
--to=liuj97@gmail.com \
--cc=bhelgaas@google.com \
--cc=izumi.taku@jp.fujitsu.com \
--cc=jiang.liu@huawei.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=rjw@sisk.pl \
--cc=yinghai@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.