All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiang Liu <liuj97@gmail.com>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
	Jiang Liu <jiang.liu@huawei.com>,
	Yijing Wang <wangyijing@huawei.com>,
	linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org
Subject: Re: [PATCH v3 4/6] PCI/acpiphp: update ACPI hotplug slot information when PCI hotplug happens
Date: Sun, 13 Jan 2013 23:13:28 +0800	[thread overview]
Message-ID: <50F2CF18.1010301@gmail.com> (raw)
In-Reply-To: <2474473.EXPaz4HMXx@vostro.rjw.lan>

On 01/10/2013 04:23 AM, Rafael J. Wysocki wrote:
> On Thursday, January 10, 2013 12:29:55 AM Jiang Liu wrote:
>> On 01/09/2013 08:04 AM, Rafael J. Wysocki wrote:
>>> On Wednesday, January 09, 2013 12:52:23 AM Jiang Liu wrote:
>>>> Currently the acpiphp driver fails to update hotplug slot information under
>>>> several conditions, such as:
>>>> 1) The bridge device is removed through /sys/bus/pci/devices/.../remove
>>>> 2) The bridge device is added/removed by PCI hotplug driver other than the
>>>>    acpiphp driver itself. For example, if an IO expansion box with ACPI
>>>>    hotplug slots available is hot-added by the pciehp driver, all ACPI
>>>>    hotplug slots won't be discovered by the acpiphp driver.
>>>>
>>>> So hook the BUS_NOTIFY_ADD_DEVICE/BUS_NOTIFY_DEL_DEVICE events to
>>>> update ACPI hotplug slot information when PCI hotplug event happens.
>>>>
>>>> Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
>>>> Signed-off-by: Yijing Wang <wangyijing@huawei.com>
>>>> ---
>>>>  drivers/pci/hotplug/acpiphp_glue.c |   62 ++++++++++++++++++++++++++++++++++--
>>>>  1 file changed, 60 insertions(+), 2 deletions(-)
>>>>
>> snip
>>>> +static struct notifier_block acpi_pci_hp_notifier = {
>>>> +	.notifier_call = &acpi_pci_hp_notify_fn,
>>>> +};
>>>> +
>>>>  static struct acpi_pci_driver acpi_pci_hp_driver = {
>>>>  	.add =		add_bridge,
>>>>  	.remove =	remove_bridge,
>>>> @@ -1448,6 +1503,8 @@ int __init acpiphp_glue_init(void)
>>>>  	else
>>>>  		acpi_pci_register_driver(&acpi_pci_hp_driver);
>>>>  
>>>> +	bus_register_notifier(&pci_bus_type, &acpi_pci_hp_notifier);
>>>
>>> Your previous patch adds a PCI bus notifier for a similar thing.  Why are
>>> you adding another one here?
>> Hi Rafael,
>> 	The acpiphp driver could be built as a module, and this bus notifier
>> is used to setup/tear down ACPI based PCI hotplug controllers under a PCI bridge.
>> The previous patch is to add/remove PCI slots. The PCI slot and PCI hotplug
>> controller are related but different objects, so we use two notifiers to support
>> them all.
> 
> I would be much happier if those notifiers were not needed.  At least, I'm not
> sure why they need to be invoked by the driver core during device registration.
> 
> In my opinion it would be much better if they were called only for the devices
> that might need them instead of all PCI devices.
> 
Hi Rafael,
	The whole thing seems a little complex, and I will try my best to explain
about it:)
	Essentially a PCI slot is associated with a PCI bus, and a PCI bus is 
associated with a host bridge or P2P bridge. When hot-adding/hot-removing a PCI bus,
we need to create/destroy PCI slots associated with it. So the pci_slot and acpiphp
drivers need to be notified when hot-adding/hot-removing a PCI bus.
	But there's no common mechanism to get notified when PCI buses are being
hot-added/hot-removed. So my first implementation has introduced a dedicated notifier
chain for PCI bus addition/removal. Later with ongoing changes to the PCI core, 
I found we could rely on the existing bus notification mechanism too, so that becomes
the current implementation.
	I have a proposal to unify the process for boot time and hotplug as below:
1) Change pci_slot and acpiphp as built-in instead of modules.
2) Get rid of acpi_pci_driver for pci_slot and acpiphp driver.
3) Register some forms of callbacks to create/destroy hotplug controllers/slots
   when creating/destroying PCI buses.
3.a) Rely on the bus notification mechanism to invoke callbacks. This solution is
     simple, but with a little overhead
3.b) Introduce a dedicated notifier chain for PCI bus hot-adding/hot-removing.
     This solution could get rid of the overhead, but with more code changes.
3.c) Invoke callbacks from acpi_bus_type->setup/cleanup. This solution could
     only support ACPI based slots, such as pci_slot and acpiphp.
	Any recommendations?
Regards!
Gerry

> Thanks,
> Rafael
> 
> 


  reply	other threads:[~2013-01-13 15:13 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-25 14:29 [PATCH v3 1/7] PCI: make PCI device create/destroy logic symmetric Jiang Liu
2012-09-25 14:29 ` [PATCH v3 2/7] PCI: split registration of PCI bus devices into two stages Jiang Liu
2012-09-25 14:29 ` [PATCH v3 3/7] ACPI/pci_bind: correctly update binding relationship for PCI hotplug Jiang Liu
2013-01-08  0:05   ` Bjorn Helgaas
2013-01-08 16:52     ` [PATCH v3 0/6] Update PCI notification patchset to latest kernel version Jiang Liu
2013-01-08 18:30       ` Yinghai Lu
2013-01-09  9:11         ` Yijing Wang
2013-01-08 16:52     ` [PATCH v3 1/6] PCI: make PCI device create/destroy logic symmetric Jiang Liu
2013-01-08 16:52     ` [PATCH v3 2/6] PCI: split registration of PCI bus devices into two stages Jiang Liu
2013-01-08 23:29       ` Rafael J. Wysocki
2013-01-09 16:10         ` Jiang Liu
2013-01-08 16:52     ` [PATCH v3 3/6] ACPI/pci_slot: update PCI slot information when PCI hotplug event happens Jiang Liu
2013-01-09  0:01       ` Rafael J. Wysocki
2013-01-09 16:58         ` Jiang Liu
2013-01-09 20:19           ` Rafael J. Wysocki
2013-01-09 20:44             ` Bjorn Helgaas
2013-01-09 21:00               ` Rafael J. Wysocki
2013-01-10 21:24               ` Myron Stowe
2013-01-10 21:50                 ` Rafael J. Wysocki
2013-01-10 23:03                   ` Yinghai Lu
2013-01-10 23:39                     ` Rafael J. Wysocki
2013-01-10 23:40                       ` Yinghai Lu
2013-01-10 23:59                         ` Rafael J. Wysocki
2013-01-11 18:06                           ` Bjorn Helgaas
2013-01-11 20:46                             ` Rafael J. Wysocki
2013-01-11 11:07                       ` Martin Mokrejs
2013-01-11 12:07                         ` Rafael J. Wysocki
2013-01-08 16:52     ` [PATCH v3 4/6] PCI/acpiphp: update ACPI hotplug slot information when PCI hotplug happens Jiang Liu
2013-01-09  0:04       ` Rafael J. Wysocki
2013-01-09 16:29         ` Jiang Liu
2013-01-09 20:23           ` Rafael J. Wysocki
2013-01-13 15:13             ` Jiang Liu [this message]
2013-01-13 20:33               ` Rafael J. Wysocki
2013-01-08 16:52     ` [PATCH v3 5/6] PCI/acpiphp: serialize access to the bridge_list list Jiang Liu
2013-01-08 16:52     ` [PATCH v3 6/6] PCI/AER: update AER configuration when PCI hotplug event happens Jiang Liu
2012-09-25 14:29 ` [PATCH v3 4/7] ACPI/pci-bind: remove bind/unbind callbacks from acpi_device_ops Jiang Liu
2012-09-25 14:29 ` [PATCH v3 5/7] ACPI/pci_slot: update PCI slot information when PCI hotplug event happens Jiang Liu
2012-09-25 14:29 ` [PATCH v3 6/7] PCI/acpiphp: update ACPI hotplug slot information when PCI hotplug happens Jiang Liu
2012-09-25 14:29 ` [PATCH v3 7/7] PCI/acpiphp: serialize access to the bridge_list list Jiang Liu

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=50F2CF18.1010301@gmail.com \
    --to=liuj97@gmail.com \
    --cc=bhelgaas@google.com \
    --cc=jiang.liu@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=rjw@sisk.pl \
    --cc=wangyijing@huawei.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.