All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yinghai Lu <yinghai@kernel.org>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: Jiang Liu <jiang.liu@huawei.com>,
	Mauro Carvalho Chehab <mchehab@redhat.com>,
	Tony Luck <tony.luck@intel.com>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	Taku Izumi <izumi.taku@jp.fujitsu.com>,
	Toshi Kani <toshi.kani@hp.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-pci@vger.kernel.org, Russell King <linux@arm.linux.org.uk>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 00/22] PCI: Iterate pci host bridge instead of pci root bus
Date: Wed, 6 Feb 2013 13:28:27 -0800	[thread overview]
Message-ID: <CAE9FiQX=uEPjHDi-_VaW88ueH4u9C22gmDiGQewsQ=VN5T4=Gg@mail.gmail.com> (raw)
In-Reply-To: <CAErSpo5-6xs+Uz=Yzws23RmrFK=+AQZ2=UT+n0k=462EgazbUA@mail.gmail.com>

On Wed, Feb 6, 2013 at 12:50 PM, Bjorn Helgaas <bhelgaas@google.com> wrote:
> On Wed, Feb 6, 2013 at 11:59 AM, Yinghai Lu <yinghai@kernel.org> wrote:
>> On Wed, Feb 6, 2013 at 9:54 AM, Bjorn Helgaas <bhelgaas@google.com> wrote:
>>> I think you're missing the point.
>>>
>>> Search the tree for uses of "for_each_pci_dev()."  Almost every
>>> occurrence is a bug because that code doesn't work correctly for
>>> hot-added devices.  That code gets run for devices that are present at
>>> boot, but not for devices hot-added later.
>>>
>>> You're proposing to add "for_each_pci_host_bridge()."  That will have
>>> the exact same problem as for_each_pci_dev() already does.  Code that
>>> uses it will work for host bridges present at boot, but not for
>>> bridges hot-added later.
>>>
>>> Why would we want to add an interface when every use of that interface
>>> will be a design bug?  I think we should fix the existing users of
>>> pci_root_buses by changing their designs so they will work correctly
>>> with host bridge hotplug.
>>
>> I'm a little confused about what you want.
>>
>> In boot stage using for_each_pci_host_bridge or pci_root_buses is fine.
>
> No, it's not.  Boot-time should work exactly the same way as hot-add
> time, unless there's a reason it can't.  There might be corner cases
> where we can't do that yet, e.g., the pcibios_resource_survey stuff,
> but in general I don't think there's anything that *forces* us to
> iterate through host bridges at boot-time.
>
>> For those cases that it should support host-bridge by nature.
>> there are two solutions:
>> 1. use for_each_pci_host_bridge, and it is hotplug-safe.
>
> I'm trying to tell you that for_each_pci_host_bridge() is NOT
> hotplug-safe.  Your series makes it safer than it was, in the sense
> that it probably fixes stray pointer references when a host bridge
> hotplug happens while somebody's traversing pci_root_buses.  But the
> whole point of for_each_pci_host_bridge() is to run some code for
> every bridge we know about *right now*.  If a host bridge is added
> right after the for_each_pci_host_bridge() loop exits, that code
> doesn't get run.  In most cases, that's a bug.  The only exception I
> know about is the /sys/.../rescan interface.
>
>> and make sgi_hotplug to use acpi_pci_driver interface.
>> and acpi_pci_root_add() will call .add in the acpi_pci_driver.
>>
>> 2. make them all to be built-in, and  those acpi_pci_driver should be registered
>> much early before acpi_pci_root_add is called.
>> then we don't need to call for_each_host_bridge for it.
>>
>> So difference between them:
>> 1. still keep the module support, and register acpi_pci_driver later.
>> 2. built-in support only, and need to register acpi_pci_driver early.
>
> acpi_pci_driver is going away, so I don't want to add any more uses of
> it.  Obviously it's only relevant to x86 and ia64 anyway.

when?

I have ioapic and iommu hotplug patch set that need to use them.

>
> What I'd like is a change where for_each_pci_host_bridge() is used
> only inside the PCI core and defined somewhere like drivers/pci/pci.h
> so it's not even available outside.
>
> The other uses should be changed so they use
> pcibios_root_bridge_prepare() or something similar.  That way, it will
> be obvious that the code supports hot-added bridges, and when it gets
> copied to other places, we'll be copying a working design instead of a
> broken one.
>
> I don't want to have to audit these places and figure out "this is
> safe because this arch doesn't support host bridge hotplug" or "this
> is safe because this CPU doesn't support XYZ."  That's not a
> maintainable solution.  The safety should be apparent from the code
> itself, without requiring extra platform-specific knowledge.

so you still did not answer you want 1 or 2 yet:

for sgi_hotplug,

1. still keep the module support, and register acpi_pci_driver later.
2. built-in support only, and need to register acpi_pci_driver early.

Thanks

Yinghai

  reply	other threads:[~2013-02-06 21:28 UTC|newest]

Thread overview: 122+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-21 21:20 [PATCH v10 00/11] PCI, ACPI: pci root bus hotplug support / pci match_driver Yinghai Lu
2013-01-21 21:20 ` [PATCH v10 01/11] PCI, acpiphp: Add is_hotplug_bridge detection Yinghai Lu
2013-01-21 21:20 ` [PATCH v10 02/11] PCI: Add root bus children dev's res to fail list Yinghai Lu
2013-01-21 21:20 ` [PATCH v10 03/11] PCI: Set dev_node early for pci_dev Yinghai Lu
2013-01-21 21:20 ` [PATCH v10 04/11] PCI: Fix a device reference count leakage issue in pci_dev_present() Yinghai Lu
2013-01-21 21:20 ` [PATCH v10 05/11] PCI: make PCI device create/destroy logic symmetric Yinghai Lu
2013-01-21 21:20 ` [PATCH v10 06/11] PCI, ACPI, acpiphp: Rename alloc_acpiphp_hp_work() to alloc_acpi_hp_work Yinghai Lu
2013-01-21 21:20 ` [PATCH v10 07/11] PCI, acpiphp: Move and enhance hotplug support of pci host bridge Yinghai Lu
2013-01-21 21:20 ` [PATCH v10 08/11] PCI, ACPI: debug print for installation of acpi root bridge's notifier Yinghai Lu
2013-01-21 21:20 ` [PATCH v10 09/11] PCI, acpiphp: Don't bailout even no slots found yet Yinghai Lu
2013-01-21 21:20 ` [PATCH v10 10/11] PCI: Skip attaching driver in device_add() Yinghai Lu
2013-01-21 21:20 ` [PATCH v10 11/11] PCI: Put pci dev to device tree as early as possible Yinghai Lu
2013-01-22 22:09 ` [PATCH v10 00/11] PCI, ACPI: pci root bus hotplug support / pci match_driver Rafael J. Wysocki
2013-01-22 22:19   ` Yinghai Lu
2013-01-26  0:04     ` Bjorn Helgaas
2013-01-26  1:24       ` Jiang Liu
2013-01-26  1:24         ` Jiang Liu
2013-01-26 23:34       ` Yinghai Lu
2013-01-27  5:36         ` [PATCH v2 00/22] PCI: use pci host bridge to loop pci root bus Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 01/22] PCI: Rename pci_release_bus_bridge_dev to pci_release_host_bridge_dev Yinghai Lu
2013-01-27 22:26             ` Rafael J. Wysocki
2013-01-27  5:36           ` [PATCH v2 02/22] PCI: Add dummy bus_type for pci_host_bridge Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 03/22] PCI, libata: remove find_bridge in acpi_bus_type Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 04/22] PCI, ACPI: Update comments for " Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 05/22] PCI: Add for_each_pci_host_bridge() and pci_get_next_host_bridge Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 06/22] PCI, hotplug: Kill pci_find_next_bus in sgi_hotplug Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 07/22] PCI: Kill pci_find_next_bus in pci_sysfs Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 08/22] PCI, edac: Kill pci_find_next_bus in edac Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 09/22] PCI, x86: Kill pci_find_next_bus in pcibios_scan_root Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 10/22] PCI, x86: Kill pci_root_buses in resources reservations Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 11/22] PCI, drm: Kill pci_root_buses in alpha hose setting Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 12/22] PCI: Kill pci_root_buses in setup-bus Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 13/22] PCI, sparc: Kill pci_find_next_bus Yinghai Lu
2013-01-27  5:36             ` Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 14/22] PCI, ia64: " Yinghai Lu
2013-01-27  5:36             ` Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 15/22] PCI, alpha: Kill pci_root_buses Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 16/22] PCI, arm: " Yinghai Lu
2013-01-27  5:36             ` Yinghai Lu
2013-01-27 17:38             ` Russell King - ARM Linux
2013-01-27 17:38               ` Russell King - ARM Linux
2013-01-27 18:22               ` Yinghai Lu
2013-01-27 18:22                 ` Yinghai Lu
2013-01-27 19:23                 ` [PATCH v3 00/22] PCI: Iterate pci host bridge instead of pci root bus Yinghai Lu
2013-01-27 19:23                   ` Yinghai Lu
2013-01-27 19:23                   ` Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 01/22] PCI: Rename pci_release_bus_bridge_dev to pci_release_host_bridge_dev Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 02/22] PCI: Add dummy bus_type for pci_host_bridge Yinghai Lu
2013-01-27 19:23                     ` Yinghai Lu
2013-01-27 19:23                     ` Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 03/22] PCI, libata: remove find_bridge in acpi_bus_type Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 04/22] PCI, ACPI: Update comments for " Yinghai Lu
2013-01-27 22:32                     ` Rafael J. Wysocki
2013-01-28  1:00                       ` Yinghai Lu
2013-01-28 12:37                         ` Rafael J. Wysocki
2013-01-27 19:23                   ` [PATCH v3 05/22] PCI: Add for_each_pci_host_bridge() and pci_get_next_host_bridge Yinghai Lu
2013-01-27 19:23                     ` Yinghai Lu
2013-01-27 19:23                     ` Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 06/22] PCI, hotplug: Kill pci_find_next_bus in sgi_hotplug Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 07/22] PCI: Kill pci_find_next_bus in pci_sysfs Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 08/22] PCI, edac: Kill pci_find_next_bus in edac Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 09/22] PCI, x86: Kill pci_find_next_bus in pcibios_scan_root Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 10/22] PCI, x86: Kill pci_root_buses in resources reservations Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 11/22] PCI, drm: Kill pci_root_buses in alpha hose setting Yinghai Lu
2013-01-28  3:21                     ` Yijing Wang
2013-01-28  3:21                       ` Yijing Wang
2013-01-28  3:35                       ` Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 12/22] PCI: Kill pci_root_buses in setup-bus Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 13/22] PCI, sparc: Kill pci_find_next_bus Yinghai Lu
2013-01-27 19:23                     ` Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 14/22] PCI, ia64: " Yinghai Lu
2013-01-27 19:23                     ` Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 15/22] PCI, alpha: Kill pci_root_buses Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 16/22] PCI, arm: " Yinghai Lu
2013-01-27 19:23                     ` Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 17/22] PCI, frv: Kill pci_root_buses in resources reservations Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 18/22] PCI, microblaze: " Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 19/22] PCI, mn10300: " Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 20/22] PCI, powerpc: " Yinghai Lu
2013-01-27 19:23                     ` Yinghai Lu
2013-01-28  3:48                     ` Yijing Wang
2013-01-28  3:48                       ` Yijing Wang
2013-01-28  5:23                       ` Yinghai Lu
2013-01-28  5:23                         ` Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 21/22] PCI: Kill pci_find_next_bus Yinghai Lu
2013-01-27 19:23                     ` Yinghai Lu
2013-01-27 19:23                     ` Yinghai Lu
2013-01-27 19:23                   ` [PATCH v3 22/22] PCI: Kill pci_root_buses Yinghai Lu
2013-01-27 19:23                     ` Yinghai Lu
2013-01-27 19:23                     ` Yinghai Lu
2013-02-02 21:50                   ` [PATCH v3 00/22] PCI: Iterate pci host bridge instead of pci root bus Bjorn Helgaas
2013-02-02 21:50                     ` Bjorn Helgaas
2013-02-02 21:50                     ` Bjorn Helgaas
2013-02-03  5:05                     ` Yinghai Lu
2013-02-05 23:55                       ` Yinghai Lu
2013-02-06  0:19                         ` Bjorn Helgaas
2013-02-06  0:47                           ` Yinghai Lu
2013-02-06  8:53                             ` Mauro Carvalho Chehab
2013-02-06 17:45                               ` Bjorn Helgaas
2013-02-07 10:24                                 ` Mauro Carvalho Chehab
2013-02-06 17:54                             ` Bjorn Helgaas
2013-02-06 18:59                               ` Yinghai Lu
2013-02-06 20:50                                 ` Bjorn Helgaas
2013-02-06 21:28                                   ` Yinghai Lu [this message]
2013-02-06 21:43                                     ` Rafael J. Wysocki
2013-02-06 21:53                                       ` Yinghai Lu
2013-02-06 22:05                                         ` Rafael J. Wysocki
2013-02-06 23:02                                           ` Bjorn Helgaas
2013-02-06 23:31                                             ` Yinghai Lu
2013-02-07  0:27                                             ` Jiang Liu
2013-01-28  1:54                 ` Yinghai Lu
2013-01-28  1:54                   ` [PATCH v3 02/22] PCI: Add dummy bus_type for pci_host_bridge Yinghai Lu
2013-01-28  1:54                   ` [PATCH v3 05/22] PCI: Add for_each_pci_host_bridge() and pci_get_next_host_bridge Yinghai Lu
2013-01-28  1:54                   ` [PATCH v3 21/22] PCI: Kill pci_find_next_bus Yinghai Lu
2013-01-28  1:54                   ` [PATCH v3 22/22] PCI: Kill pci_root_buses Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 17/22] PCI, frv: Kill pci_root_buses in resources reservations Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 18/22] PCI, microblaze: " Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 19/22] PCI, mn10300: " Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 20/22] PCI, powerpc: " Yinghai Lu
2013-01-27  5:36             ` Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 21/22] PCI: Kill pci_find_next_bus Yinghai Lu
2013-01-27  5:36           ` [PATCH v2 22/22] PCI: Kill pci_root_buses Yinghai Lu

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='CAE9FiQX=uEPjHDi-_VaW88ueH4u9C22gmDiGQewsQ=VN5T4=Gg@mail.gmail.com' \
    --to=yinghai@kernel.org \
    --cc=bhelgaas@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=izumi.taku@jp.fujitsu.com \
    --cc=jiang.liu@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=mchehab@redhat.com \
    --cc=rjw@sisk.pl \
    --cc=tony.luck@intel.com \
    --cc=toshi.kani@hp.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.