From: Yijing Wang <wangyijing@huawei.com>
To: Yinghai Lu <yinghai@kernel.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
"Rafael J. Wysocki" <rjw@sisk.pl>, 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 22/22] PCI: move device_add out of pci_bus_add_device()
Date: Wed, 16 Jan 2013 10:29:31 +0800 [thread overview]
Message-ID: <50F6108B.6070204@huawei.com> (raw)
In-Reply-To: <1357944049-29620-23-git-send-email-yinghai@kernel.org>
On 2013/1/12 6:40, Yinghai Lu wrote:
> Move out device registering out of pci_bus_add_devices, so we could
> put new created pci devices in device tree early.
>
> new pci_bus_add_devices will do the device_attach work to load pci drivers
> instead.
>
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> ---
> drivers/pci/bus.c | 47 +++--------------------------------------------
> drivers/pci/iov.c | 7 -------
> drivers/pci/probe.c | 34 +++++++++++++++++++++++++++-------
> 3 files changed, 30 insertions(+), 58 deletions(-)
>
> diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
> index 1f5916a..0a55845 100644
> --- a/drivers/pci/bus.c
> +++ b/drivers/pci/bus.c
> @@ -178,22 +178,9 @@ static void pci_bus_attach_device(struct pci_dev *dev)
> */
> int pci_bus_add_device(struct pci_dev *dev)
> {
> - int retval;
> -
> - pci_fixup_device(pci_fixup_final, dev);
> -
> - retval = pcibios_add_device(dev);
> - if (retval)
> - return retval;
> -
> - retval = device_add(&dev->dev);
> - if (retval)
> - return retval;
> -
> pci_bus_attach_device(dev);
> dev->is_added = 1;
> - pci_proc_attach_device(dev);
> - pci_create_sysfs_dev_files(dev);
> +
> return 0;
> }
Hi Yinghai,
Should change pci_bus_add_device() function to void return now? So some unnecessary ret check can remove.
>
> @@ -205,21 +192,9 @@ int pci_bus_add_device(struct pci_dev *dev)
> */
> int pci_bus_add_child(struct pci_bus *bus)
> {
> - int retval;
> -
> - if (bus->bridge)
> - bus->dev.parent = bus->bridge;
> -
> - retval = device_add(&bus->dev);
> - if (retval)
> - return retval;
> -
> bus->is_added = 1;
>
> - /* Create legacy_io and legacy_mem files for this bus */
> - pci_create_legacy_files(bus);
> -
> - return retval;
> + return 0;
> }
>
> /**
> @@ -245,36 +220,20 @@ void pci_bus_add_devices(const struct pci_bus *bus)
> if (dev->is_added)
> continue;
> retval = pci_bus_add_device(dev);
> - if (retval)
> - dev_err(&dev->dev, "Error adding device, continuing\n");
> }
>
> list_for_each_entry(dev, &bus->devices, bus_list) {
> BUG_ON(!dev->is_added);
>
> child = dev->subordinate;
> - /*
> - * If there is an unattached subordinate bus, attach
> - * it and then scan for unattached PCI devices.
> - */
> +
> if (!child)
> continue;
> - if (list_empty(&child->node)) {
> - down_write(&pci_bus_sem);
> - list_add_tail(&child->node, &dev->bus->children);
> - up_write(&pci_bus_sem);
> - }
> pci_bus_add_devices(child);
>
> - /*
> - * register the bus with sysfs as the parent is now
> - * properly registered.
> - */
> if (child->is_added)
> continue;
> retval = pci_bus_add_child(child);
> - if (retval)
> - dev_err(&dev->dev, "Error adding bus, continuing\n");
> }
> }
>
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index bafd2bb..dbad72e 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -48,12 +48,7 @@ static struct pci_bus *virtfn_add_bus(struct pci_bus *bus, int busnr)
> return NULL;
>
> pci_bus_insert_busn_res(child, busnr, busnr);
> - child->dev.parent = bus->bridge;
> rc = pci_bus_add_child(child);
> - if (rc) {
> - pci_remove_bus(child);
> - return NULL;
> - }
>
> return child;
> }
> @@ -123,8 +118,6 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
> virtfn->is_virtfn = 1;
>
> rc = pci_bus_add_device(virtfn);
> - if (rc)
> - goto failed1;
> sprintf(buf, "virtfn%u", id);
> rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
> if (rc)
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index dc4fde3..84c92a0 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -623,6 +623,7 @@ static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
> {
> struct pci_bus *child;
> int i;
> + int ret;
>
> /*
> * Allocate a new bus, and inherit stuff from the parent..
> @@ -637,8 +638,7 @@ static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
> child->bus_flags = parent->bus_flags;
>
> /* initialize some portions of the bus device, but don't register it
> - * now as the parent is not properly set up yet. This device will get
> - * registered later in pci_bus_add_devices()
> + * now as the parent is not properly set up yet.
> */
> child->dev.class = &pcibus_class;
> dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
> @@ -652,11 +652,14 @@ static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
> child->primary = parent->busn_res.start;
> child->busn_res.end = 0xff;
>
> - if (!bridge)
> - return child;
> + if (!bridge) {
> + child->dev.parent = parent->bridge;
> + goto add_dev;
> + }
>
> child->self = bridge;
> child->bridge = get_device(&bridge->dev);
> + child->dev.parent = child->bridge;
> pci_set_bus_of_node(child);
> pci_set_bus_speed(child);
>
> @@ -667,6 +670,13 @@ static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
> }
> bridge->subordinate = child;
>
> +add_dev:
> + ret = device_add(&child->dev);
> + WARN_ON(ret < 0);
> +
> + /* Create legacy_io and legacy_mem files for this bus */
> + pci_create_legacy_files(child);
> +
> return child;
> }
>
> @@ -1297,6 +1307,8 @@ static void pci_init_capabilities(struct pci_dev *dev)
>
> void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
> {
> + int ret;
> +
> device_initialize(&dev->dev);
> dev->dev.release = pci_release_dev;
>
> @@ -1327,6 +1339,16 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
> down_write(&pci_bus_sem);
> list_add_tail(&dev->bus_list, &bus->devices);
> up_write(&pci_bus_sem);
> +
> + pci_fixup_device(pci_fixup_final, dev);
> + ret = pcibios_add_device(dev);
> + WARN_ON(ret < 0);
> + /* notifier could use pci capabilities */
> + ret = device_add(&dev->dev);
> + WARN_ON(ret < 0);
> +
> + pci_proc_attach_device(dev);
> + pci_create_sysfs_dev_files(dev);
> }
>
> struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn)
> @@ -1645,13 +1667,13 @@ struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
> char bus_addr[64];
> char *fmt;
>
> -
> b = pci_alloc_bus();
> if (!b)
> return NULL;
>
> b->sysdata = sysdata;
> b->ops = ops;
> + b->number = b->busn_res.start = bus;
> b2 = pci_find_bus(pci_domain_nr(b), bus);
> if (b2) {
> /* If we already got to this bus through a different bridge, ignore it */
> @@ -1687,8 +1709,6 @@ struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
> /* Create legacy_io and legacy_mem files for this bus */
> pci_create_legacy_files(b);
>
> - b->number = b->busn_res.start = bus;
> -
> if (parent)
> dev_info(parent, "PCI host bridge to bus %s\n", dev_name(&b->dev));
> else
>
--
Thanks!
Yijing
WARNING: multiple messages have this Message-ID (diff)
From: Yijing Wang <wangyijing@huawei.com>
To: Yinghai Lu <yinghai@kernel.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
"Rafael J. Wysocki" <rjw@sisk.pl>, 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 22/22] PCI: move device_add out of pci_bus_add_device()
Date: Wed, 16 Jan 2013 10:29:31 +0800 [thread overview]
Message-ID: <50F6108B.6070204@huawei.com> (raw)
In-Reply-To: <1357944049-29620-23-git-send-email-yinghai@kernel.org>
On 2013/1/12 6:40, Yinghai Lu wrote:
> Move out device registering out of pci_bus_add_devices, so we could
> put new created pci devices in device tree early.
>
> new pci_bus_add_devices will do the device_attach work to load pci drivers
> instead.
>
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> ---
> drivers/pci/bus.c | 47 +++--------------------------------------------
> drivers/pci/iov.c | 7 -------
> drivers/pci/probe.c | 34 +++++++++++++++++++++++++++-------
> 3 files changed, 30 insertions(+), 58 deletions(-)
>
> diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
> index 1f5916a..0a55845 100644
> --- a/drivers/pci/bus.c
> +++ b/drivers/pci/bus.c
> @@ -178,22 +178,9 @@ static void pci_bus_attach_device(struct pci_dev *dev)
> */
> int pci_bus_add_device(struct pci_dev *dev)
> {
> - int retval;
> -
> - pci_fixup_device(pci_fixup_final, dev);
> -
> - retval = pcibios_add_device(dev);
> - if (retval)
> - return retval;
> -
> - retval = device_add(&dev->dev);
> - if (retval)
> - return retval;
> -
> pci_bus_attach_device(dev);
> dev->is_added = 1;
> - pci_proc_attach_device(dev);
> - pci_create_sysfs_dev_files(dev);
> +
> return 0;
> }
Hi Yinghai,
Should change pci_bus_add_device() function to void return now? So some unnecessary ret check can remove.
>
> @@ -205,21 +192,9 @@ int pci_bus_add_device(struct pci_dev *dev)
> */
> int pci_bus_add_child(struct pci_bus *bus)
> {
> - int retval;
> -
> - if (bus->bridge)
> - bus->dev.parent = bus->bridge;
> -
> - retval = device_add(&bus->dev);
> - if (retval)
> - return retval;
> -
> bus->is_added = 1;
>
> - /* Create legacy_io and legacy_mem files for this bus */
> - pci_create_legacy_files(bus);
> -
> - return retval;
> + return 0;
> }
>
> /**
> @@ -245,36 +220,20 @@ void pci_bus_add_devices(const struct pci_bus *bus)
> if (dev->is_added)
> continue;
> retval = pci_bus_add_device(dev);
> - if (retval)
> - dev_err(&dev->dev, "Error adding device, continuing\n");
> }
>
> list_for_each_entry(dev, &bus->devices, bus_list) {
> BUG_ON(!dev->is_added);
>
> child = dev->subordinate;
> - /*
> - * If there is an unattached subordinate bus, attach
> - * it and then scan for unattached PCI devices.
> - */
> +
> if (!child)
> continue;
> - if (list_empty(&child->node)) {
> - down_write(&pci_bus_sem);
> - list_add_tail(&child->node, &dev->bus->children);
> - up_write(&pci_bus_sem);
> - }
> pci_bus_add_devices(child);
>
> - /*
> - * register the bus with sysfs as the parent is now
> - * properly registered.
> - */
> if (child->is_added)
> continue;
> retval = pci_bus_add_child(child);
> - if (retval)
> - dev_err(&dev->dev, "Error adding bus, continuing\n");
> }
> }
>
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index bafd2bb..dbad72e 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -48,12 +48,7 @@ static struct pci_bus *virtfn_add_bus(struct pci_bus *bus, int busnr)
> return NULL;
>
> pci_bus_insert_busn_res(child, busnr, busnr);
> - child->dev.parent = bus->bridge;
> rc = pci_bus_add_child(child);
> - if (rc) {
> - pci_remove_bus(child);
> - return NULL;
> - }
>
> return child;
> }
> @@ -123,8 +118,6 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
> virtfn->is_virtfn = 1;
>
> rc = pci_bus_add_device(virtfn);
> - if (rc)
> - goto failed1;
> sprintf(buf, "virtfn%u", id);
> rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
> if (rc)
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index dc4fde3..84c92a0 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -623,6 +623,7 @@ static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
> {
> struct pci_bus *child;
> int i;
> + int ret;
>
> /*
> * Allocate a new bus, and inherit stuff from the parent..
> @@ -637,8 +638,7 @@ static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
> child->bus_flags = parent->bus_flags;
>
> /* initialize some portions of the bus device, but don't register it
> - * now as the parent is not properly set up yet. This device will get
> - * registered later in pci_bus_add_devices()
> + * now as the parent is not properly set up yet.
> */
> child->dev.class = &pcibus_class;
> dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
> @@ -652,11 +652,14 @@ static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
> child->primary = parent->busn_res.start;
> child->busn_res.end = 0xff;
>
> - if (!bridge)
> - return child;
> + if (!bridge) {
> + child->dev.parent = parent->bridge;
> + goto add_dev;
> + }
>
> child->self = bridge;
> child->bridge = get_device(&bridge->dev);
> + child->dev.parent = child->bridge;
> pci_set_bus_of_node(child);
> pci_set_bus_speed(child);
>
> @@ -667,6 +670,13 @@ static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
> }
> bridge->subordinate = child;
>
> +add_dev:
> + ret = device_add(&child->dev);
> + WARN_ON(ret < 0);
> +
> + /* Create legacy_io and legacy_mem files for this bus */
> + pci_create_legacy_files(child);
> +
> return child;
> }
>
> @@ -1297,6 +1307,8 @@ static void pci_init_capabilities(struct pci_dev *dev)
>
> void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
> {
> + int ret;
> +
> device_initialize(&dev->dev);
> dev->dev.release = pci_release_dev;
>
> @@ -1327,6 +1339,16 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
> down_write(&pci_bus_sem);
> list_add_tail(&dev->bus_list, &bus->devices);
> up_write(&pci_bus_sem);
> +
> + pci_fixup_device(pci_fixup_final, dev);
> + ret = pcibios_add_device(dev);
> + WARN_ON(ret < 0);
> + /* notifier could use pci capabilities */
> + ret = device_add(&dev->dev);
> + WARN_ON(ret < 0);
> +
> + pci_proc_attach_device(dev);
> + pci_create_sysfs_dev_files(dev);
> }
>
> struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn)
> @@ -1645,13 +1667,13 @@ struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
> char bus_addr[64];
> char *fmt;
>
> -
> b = pci_alloc_bus();
> if (!b)
> return NULL;
>
> b->sysdata = sysdata;
> b->ops = ops;
> + b->number = b->busn_res.start = bus;
> b2 = pci_find_bus(pci_domain_nr(b), bus);
> if (b2) {
> /* If we already got to this bus through a different bridge, ignore it */
> @@ -1687,8 +1709,6 @@ struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
> /* Create legacy_io and legacy_mem files for this bus */
> pci_create_legacy_files(b);
>
> - b->number = b->busn_res.start = bus;
> -
> if (parent)
> dev_info(parent, "PCI host bridge to bus %s\n", dev_name(&b->dev));
> else
>
--
Thanks!
Yijing
next prev parent reply other threads:[~2013-01-16 2:31 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
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 [this message]
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=50F6108B.6070204@huawei.com \
--to=wangyijing@huawei.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.