From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: Gavin Shan <gwshan@linux.vnet.ibm.com>, linuxppc-dev@lists.ozlabs.org
Cc: linux-pci@vger.kernel.org, devicetree@vger.kernel.org,
benh@kernel.crashing.org, mpe@ellerman.id.au, dja@axtens.net,
bhelgaas@google.com, robherring2@gmail.com,
grant.likely@linaro.org
Subject: Re: [PATCH v8 38/45] powerpc/powernv: Functions to get/set PCI slot status
Date: Tue, 19 Apr 2016 19:39:34 +1000 [thread overview]
Message-ID: <5715FCD6.90703@ozlabs.ru> (raw)
In-Reply-To: <1455680668-23298-39-git-send-email-gwshan@linux.vnet.ibm.com>
On 02/17/2016 02:44 PM, Gavin Shan wrote:
> This exports 4 functins, which base on the corresponding OPAL
s/functins/functions/
> APIs to get/set PCI slot status. Those functions are going to
> be used by PowerNV PCI hotplug driver:
>
> pnv_pci_get_device_tree() opal_get_device_tree()
> pnv_pci_get_presence_state() opal_pci_get_presence_state()
> pnv_pci_get_power_state() opal_pci_get_power_state()
> pnv_pci_set_power_state() opal_pci_set_power_state()
>
> Besides, the patch also exports pnv_pci_hotplug_notifier_{register,
> unregister}() to allow registration and unregistration of PCI hotplug
> notifier, which will be used to receive PCI hotplug message from
> skiboot firmware in PowerNV PCI hotplug driver.
>
> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
> ---
> arch/powerpc/include/asm/opal-api.h | 17 ++++++-
> arch/powerpc/include/asm/opal.h | 4 ++
> arch/powerpc/include/asm/pnv-pci.h | 7 +++
> arch/powerpc/platforms/powernv/opal-wrappers.S | 4 ++
> arch/powerpc/platforms/powernv/pci.c | 66 ++++++++++++++++++++++++++
> 5 files changed, 97 insertions(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/include/asm/opal-api.h b/arch/powerpc/include/asm/opal-api.h
> index f8faaae..a6af338 100644
> --- a/arch/powerpc/include/asm/opal-api.h
> +++ b/arch/powerpc/include/asm/opal-api.h
> @@ -158,7 +158,11 @@
> #define OPAL_LEDS_SET_INDICATOR 115
> #define OPAL_CEC_REBOOT2 116
> #define OPAL_CONSOLE_FLUSH 117
> -#define OPAL_LAST 117
> +#define OPAL_GET_DEVICE_TREE 118
> +#define OPAL_PCI_GET_PRESENCE_STATE 119
> +#define OPAL_PCI_GET_POWER_STATE 120
> +#define OPAL_PCI_SET_POWER_STATE 121
> +#define OPAL_LAST 121
>
> /* Device tree flags */
>
> @@ -344,6 +348,16 @@ enum OpalPciResetState {
> OPAL_ASSERT_RESET = 1
> };
>
> +enum OpalPciSlotPresentenceState {
> + OPAL_PCI_SLOT_EMPTY = 0,
> + OPAL_PCI_SLOT_PRESENT = 1
> +};
> +
> +enum OpalPciSlotPowerState {
> + OPAL_PCI_SLOT_POWER_OFF = 0,
> + OPAL_PCI_SLOT_POWER_ON = 1
> +};
> +
> enum OpalSlotLedType {
> OPAL_SLOT_LED_TYPE_ID = 0, /* IDENTIFY LED */
> OPAL_SLOT_LED_TYPE_FAULT = 1, /* FAULT LED */
> @@ -378,6 +392,7 @@ enum opal_msg_type {
> OPAL_MSG_DPO,
> OPAL_MSG_PRD,
> OPAL_MSG_OCC,
> + OPAL_MSG_PCI_HOTPLUG,
> OPAL_MSG_TYPE_MAX,
> };
>
> diff --git a/arch/powerpc/include/asm/opal.h b/arch/powerpc/include/asm/opal.h
> index 9e0039f..899bcb941 100644
> --- a/arch/powerpc/include/asm/opal.h
> +++ b/arch/powerpc/include/asm/opal.h
> @@ -209,6 +209,10 @@ int64_t opal_flash_write(uint64_t id, uint64_t offset, uint64_t buf,
> uint64_t size, uint64_t token);
> int64_t opal_flash_erase(uint64_t id, uint64_t offset, uint64_t size,
> uint64_t token);
> +int64_t opal_get_device_tree(uint32_t phandle, uint64_t buf, uint64_t len);
> +int64_t opal_pci_get_presence_state(uint64_t id, uint8_t *state);
> +int64_t opal_pci_get_power_state(uint64_t id, uint8_t *state);
> +int64_t opal_pci_set_power_state(uint64_t id, uint8_t state);
>
> /* Internal functions */
> extern int early_init_dt_scan_opal(unsigned long node, const char *uname,
> diff --git a/arch/powerpc/include/asm/pnv-pci.h b/arch/powerpc/include/asm/pnv-pci.h
> index 6f77f71..d9d095b 100644
> --- a/arch/powerpc/include/asm/pnv-pci.h
> +++ b/arch/powerpc/include/asm/pnv-pci.h
> @@ -13,6 +13,13 @@
> #include <linux/pci.h>
> #include <misc/cxl-base.h>
>
> +extern int pnv_pci_get_device_tree(uint32_t phandle, void *buf, uint64_t len);
> +extern int pnv_pci_get_presence_state(uint64_t id, uint8_t *state);
> +extern int pnv_pci_get_power_state(uint64_t id, uint8_t *state);
> +extern int pnv_pci_set_power_state(uint64_t id, uint8_t state);
> +extern int pnv_pci_hotplug_notifier_register(struct notifier_block *nb);
> +extern int pnv_pci_hotplug_notifier_unregister(struct notifier_block *nb);
> +
> int pnv_phb_to_cxl_mode(struct pci_dev *dev, uint64_t mode);
> int pnv_cxl_ioda_msi_setup(struct pci_dev *dev, unsigned int hwirq,
> unsigned int virq);
> diff --git a/arch/powerpc/platforms/powernv/opal-wrappers.S b/arch/powerpc/platforms/powernv/opal-wrappers.S
> index e45b88a..3ea1a855 100644
> --- a/arch/powerpc/platforms/powernv/opal-wrappers.S
> +++ b/arch/powerpc/platforms/powernv/opal-wrappers.S
> @@ -302,3 +302,7 @@ OPAL_CALL(opal_prd_msg, OPAL_PRD_MSG);
> OPAL_CALL(opal_leds_get_ind, OPAL_LEDS_GET_INDICATOR);
> OPAL_CALL(opal_leds_set_ind, OPAL_LEDS_SET_INDICATOR);
> OPAL_CALL(opal_console_flush, OPAL_CONSOLE_FLUSH);
> +OPAL_CALL(opal_get_device_tree, OPAL_GET_DEVICE_TREE);
> +OPAL_CALL(opal_pci_get_presence_state, OPAL_PCI_GET_PRESENCE_STATE);
> +OPAL_CALL(opal_pci_get_power_state, OPAL_PCI_GET_POWER_STATE);
> +OPAL_CALL(opal_pci_set_power_state, OPAL_PCI_SET_POWER_STATE);
> diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
> index a458703..206385f 100644
> --- a/arch/powerpc/platforms/powernv/pci.c
> +++ b/arch/powerpc/platforms/powernv/pci.c
> @@ -63,6 +63,72 @@ int pnv_pci_poll(uint64_t id, int64_t rval, uint8_t *state)
> return (rval == OPAL_SUCCESS) ? 0 : -EIO;
> }
>
> +int pnv_pci_get_device_tree(uint32_t phandle, void *buf, uint64_t len)
> +{
> + int64_t rc;
> +
> + if (!opal_check_token(OPAL_GET_DEVICE_TREE))
> + return -ENXIO;
> +
> + rc = opal_get_device_tree(phandle, (uint64_t)buf, len);
> + if (rc != OPAL_SUCCESS)
> + return -EIO;
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(pnv_pci_get_device_tree);
> +
> +int pnv_pci_get_presence_state(uint64_t id, uint8_t *state)
> +{
> + int64_t rc;
> +
> + if (!opal_check_token(OPAL_PCI_GET_PRESENCE_STATE))
> + return -ENXIO;
> +
> + rc = opal_pci_get_presence_state(id, state);
> + if (rc != OPAL_SUCCESS)
> + return -EIO;
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(pnv_pci_get_presence_state);
> +
> +int pnv_pci_get_power_state(uint64_t id, uint8_t *state)
> +{
> + int64_t rc;
> +
> + if (!opal_check_token(OPAL_PCI_GET_POWER_STATE))
> + return -ENXIO;
> +
> + rc = opal_pci_get_power_state(id, state);
Out of curiosity - if rc==OPAL_SUCCESS, @state should already contain the
correct state and you do not have to call pnv_pci_poll() (which will call
opal_pci_poll() immediately), is that correct?
Anyway, looks correct.
Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> + return pnv_pci_poll(id, rc, state);
> +}
> +EXPORT_SYMBOL_GPL(pnv_pci_get_power_state);
> +
> +int pnv_pci_set_power_state(uint64_t id, uint8_t state)
> +{
> + int64_t rc;
> +
> + if (!opal_check_token(OPAL_PCI_SET_POWER_STATE))
> + return -ENXIO;
> +
> + rc = opal_pci_set_power_state(id, state);
> + return pnv_pci_poll(id, rc, NULL);
> +}
> +EXPORT_SYMBOL_GPL(pnv_pci_set_power_state);
> +
> +int pnv_pci_hotplug_notifier_register(struct notifier_block *nb)
> +{
> + return opal_message_notifier_register(OPAL_MSG_PCI_HOTPLUG, nb);
> +}
> +EXPORT_SYMBOL_GPL(pnv_pci_hotplug_notifier_register);
> +
> +int pnv_pci_hotplug_notifier_unregister(struct notifier_block *nb)
> +{
> + return opal_message_notifier_unregister(OPAL_MSG_PCI_HOTPLUG, nb);
> +}
> +EXPORT_SYMBOL_GPL(pnv_pci_hotplug_notifier_unregister);
> +
> #ifdef CONFIG_PCI_MSI
> int pnv_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
> {
>
--
Alexey
next prev parent reply other threads:[~2016-04-19 9:39 UTC|newest]
Thread overview: 174+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-17 3:43 [PATCH v8 00/45] powerpc/powernv: PCI hotplug support Gavin Shan
2016-02-17 3:43 ` [PATCH v8 01/45] PCI: Add pcibios_setup_bridge() Gavin Shan
2016-02-17 3:43 ` [PATCH v8 02/45] powerpc/pci: Override pcibios_setup_bridge() Gavin Shan
2016-04-13 5:52 ` Alexey Kardashevskiy
2016-04-13 5:52 ` Alexey Kardashevskiy
2016-02-17 3:43 ` [PATCH v8 03/45] powerpc/pci: Cleanup on struct pci_controller_ops Gavin Shan
2016-02-17 4:18 ` Andrew Donnellan
2016-04-13 5:52 ` Alexey Kardashevskiy
2016-04-13 5:52 ` Alexey Kardashevskiy
2016-04-19 23:59 ` Gavin Shan
2016-02-17 3:43 ` [PATCH v8 04/45] powerpc/powernv: Cleanup on pci_controller_ops instances Gavin Shan
2016-02-17 4:38 ` Andrew Donnellan
2016-02-17 3:43 ` [PATCH v8 05/45] powerpc/powernv: Drop phb->bdfn_to_pe() Gavin Shan
2016-02-17 3:43 ` Gavin Shan
2016-04-13 5:53 ` Alexey Kardashevskiy
2016-02-17 3:43 ` [PATCH v8 06/45] powerpc/powernv: Reorder fields in struct pnv_phb Gavin Shan
2016-04-13 5:56 ` Alexey Kardashevskiy
2016-02-17 3:43 ` [PATCH v8 07/45] powerpc/powernv: Rename PE# " Gavin Shan
2016-04-13 5:57 ` Alexey Kardashevskiy
2016-02-17 3:43 ` [PATCH v8 08/45] powerpc/powernv: Fix initial IO and M32 segmap Gavin Shan
2016-04-13 6:21 ` Alexey Kardashevskiy
2016-04-13 7:53 ` Gavin Shan
2016-04-13 7:53 ` Gavin Shan
2016-04-13 9:53 ` Alexey Kardashevskiy
2016-02-17 3:43 ` [PATCH v8 09/45] powerpc/powernv: Simplify pnv_ioda_setup_pe_seg() Gavin Shan
2016-04-13 6:45 ` Alexey Kardashevskiy
2016-04-20 0:04 ` Gavin Shan
2016-02-17 3:43 ` [PATCH v8 10/45] powerpc/powernv: IO and M32 mapping based on PCI device resources Gavin Shan
2016-02-17 3:43 ` [PATCH v8 11/45] powerpc/powernv: Track M64 segment consumption Gavin Shan
2016-04-13 7:09 ` Alexey Kardashevskiy
2016-04-20 0:05 ` Gavin Shan
2016-02-17 3:43 ` [PATCH v8 12/45] powerpc/powernv: Rename M64 related functions Gavin Shan
2016-04-13 7:20 ` Alexey Kardashevskiy
2016-04-13 7:20 ` Alexey Kardashevskiy
2016-02-17 3:43 ` [PATCH v8 13/45] powerpc/powernv/ioda1: M64 support on P7IOC Gavin Shan
2016-02-17 3:43 ` Gavin Shan
2016-04-13 7:47 ` Alexey Kardashevskiy
2016-04-20 0:22 ` Gavin Shan
2016-04-20 2:55 ` Alexey Kardashevskiy
2016-02-17 3:43 ` [PATCH v8 14/45] powerpc/powernv/ioda1: Rename pnv_pci_ioda_setup_dma_pe() Gavin Shan
2016-04-13 7:36 ` Alexey Kardashevskiy
2016-02-17 3:43 ` [PATCH v8 15/45] powerpc/powernv/ioda1: Introduce PNV_IODA1_DMA32_SEGSIZE Gavin Shan
2016-02-17 3:43 ` Gavin Shan
2016-04-13 8:29 ` Alexey Kardashevskiy
2016-04-13 23:54 ` Gavin Shan
2016-04-14 3:36 ` Alexey Kardashevskiy
2016-04-20 0:25 ` Gavin Shan
2016-02-17 3:43 ` [PATCH v8 16/45] powerpc/powernv: Remove DMA32 PE list Gavin Shan
2016-04-13 8:59 ` Alexey Kardashevskiy
2016-04-20 0:34 ` Gavin Shan
2016-02-17 3:44 ` [PATCH v8 17/45] powerpc/powernv/ioda1: Improve DMA32 segment track Gavin Shan
2016-02-17 3:44 ` Gavin Shan
2016-04-19 1:50 ` Alexey Kardashevskiy
2016-04-20 0:49 ` Gavin Shan
2016-04-20 5:10 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 18/45] powerpc/powernv: Increase PE# capacity Gavin Shan
2016-04-19 2:02 ` Alexey Kardashevskiy
2016-04-20 0:52 ` Gavin Shan
2016-02-17 3:44 ` [PATCH v8 19/45] powerpc/powernv: Use PE instead of number during setup and release Gavin Shan
2016-04-19 2:50 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 20/45] powerpc/powernv: Allocate PE# in reverse order Gavin Shan
2016-04-19 3:07 ` Alexey Kardashevskiy
2016-04-20 1:04 ` Gavin Shan
2016-02-17 3:44 ` [PATCH v8 21/45] powerpc/powernv: Create PEs at PCI hot plugging time Gavin Shan
2016-04-19 4:16 ` Alexey Kardashevskiy
2016-04-20 1:12 ` Gavin Shan
2016-04-20 3:00 ` Alexey Kardashevskiy
2016-04-20 3:35 ` Gavin Shan
2016-02-17 3:44 ` [PATCH v8 22/45] powerpc/powernv/ioda1: Support releasing IODA1 TCE table Gavin Shan
2016-04-19 4:28 ` Alexey Kardashevskiy
2016-04-20 1:15 ` Gavin Shan
2016-04-20 3:17 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 23/45] powerpc/powernv: Dynamically release PEs Gavin Shan
2016-04-19 5:19 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 24/45] powerpc/pci: Rename pcibios_{add,remove}_pci_devices() Gavin Shan
2016-02-17 3:44 ` [PATCH v8 24/45] powerpc/pci: Rename pcibios_{add, remove}_pci_devices() Gavin Shan
2016-04-19 5:28 ` [PATCH v8 24/45] powerpc/pci: Rename pcibios_{add,remove}_pci_devices() Alexey Kardashevskiy
2016-04-20 1:23 ` Gavin Shan
2016-04-20 3:21 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 25/45] powerpc/pci: Rename pcibios_find_pci_bus() Gavin Shan
2016-04-19 5:31 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 26/45] powerpc/pci: Move pci_find_bus_by_node() around Gavin Shan
2016-02-17 3:44 ` [PATCH v8 27/45] powerpc/pci: Export pci_add_device_node_info() Gavin Shan
2016-04-19 5:35 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 28/45] powerpc/pci: Introduce pci_remove_device_node_info() Gavin Shan
2016-04-19 5:48 ` Alexey Kardashevskiy
2016-04-20 1:25 ` Gavin Shan
2016-02-17 3:44 ` [PATCH v8 29/45] powerpc/pci: Export pci_traverse_device_nodes() Gavin Shan
2016-04-19 5:51 ` Alexey Kardashevskiy
2016-04-19 5:51 ` Alexey Kardashevskiy
2016-04-20 1:27 ` Gavin Shan
2016-04-20 3:39 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 30/45] powerpc/pci: Delay populating pdn Gavin Shan
2016-04-19 8:19 ` Alexey Kardashevskiy
2016-04-20 2:13 ` Gavin Shan
2016-04-20 3:54 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 31/45] powerpc/pci: Don't scan empty slot Gavin Shan
2016-04-19 8:19 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 32/45] powerpc/pci: Update bridge windows on PCI plug Gavin Shan
2016-04-19 8:47 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 33/45] powerpc/powernv: Simplify pnv_eeh_reset() Gavin Shan
2016-02-17 4:35 ` Andrew Donnellan
2016-04-19 8:49 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 34/45] powerpc/powernv: Exclude root bus in pnv_pci_reset_secondary_bus() Gavin Shan
2016-04-19 8:57 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 35/45] powerpc/powernv: Fundamental reset " Gavin Shan
2016-04-19 9:04 ` Alexey Kardashevskiy
2016-04-19 9:04 ` Alexey Kardashevskiy
2016-04-20 1:36 ` Gavin Shan
2016-02-17 3:44 ` [PATCH v8 36/45] powerpc/powernv: Support PCI slot ID Gavin Shan
2016-04-19 9:28 ` Alexey Kardashevskiy
2016-04-19 9:28 ` Alexey Kardashevskiy
2016-04-20 2:28 ` Gavin Shan
2016-04-20 4:14 ` Alexey Kardashevskiy
2016-04-22 4:23 ` Alistair Popple
2016-02-17 3:44 ` [PATCH v8 37/45] powerpc/powernv: Use firmware PCI slot reset infrastructure Gavin Shan
2016-04-19 9:34 ` Alexey Kardashevskiy
2016-04-20 2:33 ` Gavin Shan
2016-04-20 4:17 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 38/45] powerpc/powernv: Functions to get/set PCI slot status Gavin Shan
2016-02-17 3:44 ` Gavin Shan
2016-04-19 9:39 ` Alexey Kardashevskiy [this message]
2016-04-20 2:36 ` Gavin Shan
2016-04-20 4:25 ` Alexey Kardashevskiy
2016-02-17 3:44 ` [PATCH v8 39/45] powerpc/powernv: Select OF_DYNAMIC Gavin Shan
2016-04-19 9:42 ` Alexey Kardashevskiy
2016-04-20 2:38 ` Gavin Shan
2016-02-17 3:44 ` [PATCH v8 40/45] drivers/of: Split unflatten_dt_node() Gavin Shan
2016-02-17 14:30 ` Rob Herring
2016-04-20 2:38 ` Gavin Shan
2016-05-02 2:02 ` Gavin Shan
2016-02-17 3:44 ` [PATCH v8 41/45] drivers/of: Avoid recursively calling unflatten_dt_node() Gavin Shan
2016-02-17 14:53 ` Rob Herring
2016-02-17 14:53 ` Rob Herring
2016-02-17 3:44 ` [PATCH v8 42/45] drivers/of: Rename unflatten_dt_node() Gavin Shan
2016-02-17 3:44 ` Gavin Shan
2016-02-17 14:59 ` Rob Herring
2016-02-17 14:59 ` Rob Herring
2016-02-19 3:16 ` Gavin Shan
2016-03-02 2:40 ` Rob Herring
2016-03-02 2:40 ` Rob Herring
2016-03-08 0:56 ` Gavin Shan
2016-03-17 13:31 ` Rob Herring
2016-03-17 22:44 ` Gavin Shan
2016-02-17 3:44 ` [PATCH v8 43/45] drivers/of: Specify parent node in of_fdt_unflatten_tree() Gavin Shan
2016-02-17 15:00 ` Rob Herring
2016-02-17 15:58 ` Jyri Sarha
2016-02-17 15:58 ` Jyri Sarha
2016-02-17 3:44 ` [PATCH v8 44/45] drivers/of: Return allocated memory from of_fdt_unflatten_tree() Gavin Shan
2016-02-17 3:44 ` [PATCH v8 45/45] PCI/hotplug: PowerPC PowerNV PCI hotplug driver Gavin Shan
2016-02-17 3:44 ` Gavin Shan
2016-04-15 0:47 ` Alistair Popple
2016-04-15 1:39 ` Gavin Shan
2016-04-19 10:36 ` Alexey Kardashevskiy
2016-04-19 10:36 ` Alexey Kardashevskiy
2016-04-20 1:55 ` Alistair Popple
2016-05-02 23:41 ` Gavin Shan
2016-05-03 0:44 ` Alexey Kardashevskiy
2016-05-03 0:44 ` Alexey Kardashevskiy
2016-05-02 3:44 ` Gavin Shan
2016-05-02 6:11 ` Alexey Kardashevskiy
2016-05-02 23:38 ` Gavin Shan
2016-04-13 7:28 ` [PATCH v8 00/45] powerpc/powernv: PCI hotplug support Alexey Kardashevskiy
2016-04-13 7:42 ` Gavin Shan
2016-04-13 9:14 ` Alexey Kardashevskiy
2016-04-13 9:14 ` Alexey Kardashevskiy
2016-04-13 23:42 ` Gavin Shan
2016-04-13 23:57 ` Alistair Popple
2016-04-14 1:30 ` Gavin Shan
2016-04-14 3:38 ` Alexey Kardashevskiy
2016-04-15 16:10 ` Rob Herring
2016-04-20 2:40 ` Gavin Shan
2016-04-14 3:26 ` Alexey Kardashevskiy
2016-04-14 5:25 ` Gavin Shan
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=5715FCD6.90703@ozlabs.ru \
--to=aik@ozlabs.ru \
--cc=benh@kernel.crashing.org \
--cc=bhelgaas@google.com \
--cc=devicetree@vger.kernel.org \
--cc=dja@axtens.net \
--cc=grant.likely@linaro.org \
--cc=gwshan@linux.vnet.ibm.com \
--cc=linux-pci@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=robherring2@gmail.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.