All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yinghai Lu <yinghai@kernel.org>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
	Jiang Liu <jiang.liu@huawei.com>,
	Taku Izumi <izumi.taku@jp.fujitsu.com>,
	Toshi Kani <toshi.kani@hp.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-pci@vger.kernel.org, Len Brown <lenb@kernel.org>,
	linux-acpi@vger.kernel.org, Jeff Garzik <jgarzik@pobox.com>,
	Tejun Heo <tj@kernel.org>
Subject: Re: [PATCH v3 04/22] PCI, ACPI: Update comments for find_bridge in acpi_bus_type
Date: Sun, 27 Jan 2013 17:00:38 -0800	[thread overview]
Message-ID: <CAE9FiQVLJoTtsoRHiR7zFUdfzZzZh0srwY03bFecSQQkmCmrzA@mail.gmail.com> (raw)
In-Reply-To: <2327246.IIyGppobQo@vostro.rjw.lan>

On Sun, Jan 27, 2013 at 2:32 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> On Sunday, January 27, 2013 11:23:31 AM Yinghai Lu wrote:
>> only device that does not have bus_type, will go to that path...
>
> While I agree that the comment doesn't make sense any more, I also think that
> changing the comment alone is not sufficient, because what USB does with
> .find_bridge() is really disgusting to me and USB is the only real user of it
> (SATA just pretends to be one).

agree. that is really like hack for usb.

>
> So, instead of this change, I'd prefer to apply the appended patch some time
> in the second part of the 3.9 merge window, after integrating all of the
> ACPI and PCI changes already queued up.

Good, I will drop patch 4 but will keep patch3 about libata part with
ack from  Jeff Garzik.

>
> Thanks,
> Rafael
>
>
> ---
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> Subject: ACPI / glue: Drop .find_bridge() callback from struct acpi_bus_type
>
> After PCI has stopped using the .find_bridge() callback in
> struct acpi_bus_type, the only remaining users of it are SATA and
> USB.  However, SATA only pretends to be a user, because it points
> that callback to a stub always returning -ENODEV, and USB uses it
> incorrectly, because as a result of the way it is used by USB every
> device in the system that doesn't have a bus type or parent is
> passed to usb_acpi_find_device() for inspection.
>
> What USB actually needs, though, is to call usb_acpi_find_device()
> for USB ports that don't have a bus type defined, but have
> usb_port_device_type as their device type.
>
> To fix that add a device type field to struct acpi_bus_type and
> make acpi_get_bus_type() compare it with the device type fields of
> the device objects it inspects in addition to checking their bus
> types.  Next, make USB set the new type field in usb_acpi_bus to
> point to usb_port_device_type and stop abusing the .find_bridge()
> callback.
>
> In addition to that drop the SATA's dummy .find_bridge() callback,
> and remove .find_bridge(), which is not used any more, from struct
> acpi_bus_type entirely.
>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
>  drivers/acpi/glue.c         |   39 ++++++---------------------------------
>  drivers/ata/libata-acpi.c   |    6 ------
>  drivers/usb/core/usb-acpi.c |    2 +-
>  include/acpi/acpi_bus.h     |    4 +---
>  4 files changed, 8 insertions(+), 43 deletions(-)
>
> Index: linux-pm/drivers/acpi/glue.c
> ===================================================================
> --- linux-pm.orig/drivers/acpi/glue.c
> +++ linux-pm/drivers/acpi/glue.c
> @@ -64,16 +64,17 @@ int unregister_acpi_bus_type(struct acpi
>  }
>  EXPORT_SYMBOL_GPL(unregister_acpi_bus_type);
>
> -static struct acpi_bus_type *acpi_get_bus_type(struct bus_type *type)
> +static struct acpi_bus_type *acpi_get_bus_type(struct device *dev)
>  {
>         struct acpi_bus_type *tmp, *ret = NULL;
>
> -       if (!type)
> +       if (!dev->bus && !dev->type)
>                 return NULL;
>
>         down_read(&bus_type_sem);
>         list_for_each_entry(tmp, &bus_type_list, list) {
> -               if (tmp->bus == type) {
> +               if ((tmp->bus && tmp->bus == dev->bus)
> +                   || (tmp->type && tmp->type == dev->type)) {
>                         ret = tmp;
>                         break;
>                 }
> @@ -82,22 +83,6 @@ static struct acpi_bus_type *acpi_get_bu
>         return ret;
>  }
>
> -static int acpi_find_bridge_device(struct device *dev, acpi_handle * handle)
> -{
> -       struct acpi_bus_type *tmp;
> -       int ret = -ENODEV;
> -
> -       down_read(&bus_type_sem);
> -       list_for_each_entry(tmp, &bus_type_list, list) {
> -               if (tmp->find_bridge && !tmp->find_bridge(dev, handle)) {
> -                       ret = 0;
> -                       break;
> -               }
> -       }
> -       up_read(&bus_type_sem);
> -       return ret;
> -}
> -
>  static acpi_status do_acpi_find_child(acpi_handle handle, u32 lvl_not_used,
>                                       void *addr_p, void **ret_p)
>  {
> @@ -261,22 +246,11 @@ err:
>
>  static int acpi_platform_notify(struct device *dev)
>  {
> -       struct acpi_bus_type *type;
> +       struct acpi_bus_type *type = acpi_get_bus_type(dev);
>         acpi_handle handle;
>         int ret;
>
>         ret = acpi_bind_one(dev, NULL);
> -       if (ret && (!dev->bus || !dev->parent)) {
> -               /* bridge devices genernally haven't bus or parent */
> -               ret = acpi_find_bridge_device(dev, &handle);
> -               if (!ret) {
> -                       ret = acpi_bind_one(dev, handle);
> -                       if (ret)
> -                               goto out;
> -               }
> -       }
> -
> -       type = acpi_get_bus_type(dev->bus);
>         if (ret) {
>                 if (!type || !type->find_device) {
>                         DBG("No ACPI bus support for %s\n", dev_name(dev));
> @@ -293,7 +267,6 @@ static int acpi_platform_notify(struct d
>                 if (ret)
>                         goto out;
>         }
> -
>         if (type && type->setup)
>                 type->setup(dev);
>
> @@ -316,7 +289,7 @@ static int acpi_platform_notify_remove(s
>  {
>         struct acpi_bus_type *type;
>
> -       type = acpi_get_bus_type(dev->bus);
> +       type = acpi_get_bus_type(dev);
>         if (type && type->cleanup)
>                 type->cleanup(dev);
>
> Index: linux-pm/include/acpi/acpi_bus.h
> ===================================================================
> --- linux-pm.orig/include/acpi/acpi_bus.h
> +++ linux-pm/include/acpi/acpi_bus.h
> @@ -412,10 +412,8 @@ void acpi_remove_dir(struct acpi_device
>  struct acpi_bus_type {
>         struct list_head list;
>         struct bus_type *bus;
> -       /* For general devices under the bus */
> +       struct device_type *type;
>         int (*find_device) (struct device *, acpi_handle *);
> -       /* For bridges, such as PCI root bridge, IDE controller */
> -       int (*find_bridge) (struct device *, acpi_handle *);
>         void (*setup)(struct device *);
>         void (*cleanup)(struct device *);
>  };
> Index: linux-pm/drivers/ata/libata-acpi.c
> ===================================================================
> --- linux-pm.orig/drivers/ata/libata-acpi.c
> +++ linux-pm/drivers/ata/libata-acpi.c
> @@ -1167,13 +1167,7 @@ static int ata_acpi_find_device(struct d
>                 return -ENODEV;
>  }
>
> -static int ata_acpi_find_dummy(struct device *dev, acpi_handle *handle)
> -{
> -       return -ENODEV;
> -}
> -
>  static struct acpi_bus_type ata_acpi_bus = {
> -       .find_bridge = ata_acpi_find_dummy,
>         .find_device = ata_acpi_find_device,
>  };
>
> Index: linux-pm/drivers/usb/core/usb-acpi.c
> ===================================================================
> --- linux-pm.orig/drivers/usb/core/usb-acpi.c
> +++ linux-pm/drivers/usb/core/usb-acpi.c
> @@ -212,7 +212,7 @@ static int usb_acpi_find_device(struct d
>
>  static struct acpi_bus_type usb_acpi_bus = {
>         .bus = &usb_bus_type,
> -       .find_bridge = usb_acpi_find_device,
> +       .type = &usb_port_device_type,
>         .find_device = usb_acpi_find_device,
>  };

Can we add one acpi_bus_type for port directly?

Thanks

Yinghai

  reply	other threads:[~2013-01-28  1:00 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 [this message]
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
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=CAE9FiQVLJoTtsoRHiR7zFUdfzZzZh0srwY03bFecSQQkmCmrzA@mail.gmail.com \
    --to=yinghai@kernel.org \
    --cc=bhelgaas@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=izumi.taku@jp.fujitsu.com \
    --cc=jgarzik@pobox.com \
    --cc=jiang.liu@huawei.com \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=rjw@sisk.pl \
    --cc=tj@kernel.org \
    --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.