From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Michael Ellerman <mpe@ellerman.id.au>
Cc: linuxppc-dev@ozlabs.org, agraf@suse.de, linux@roeck-us.net
Subject: Re: [PATCH] powerpc: Convert power off logic to pm_power_off
Date: Wed, 22 Oct 2014 17:09:53 +1100 [thread overview]
Message-ID: <1413958193.364.10.camel@pasglop> (raw)
In-Reply-To: <1413952677-31662-1-git-send-email-mpe@ellerman.id.au>
On Wed, 2014-10-22 at 15:37 +1100, Michael Ellerman wrote:
> Hi guys, how does this look?
>
> If it's OK I'll put it in a topic branch for Guenter.
No objection.
Cheers,
Ben.
> cheers
>
> diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
> index 84c8acf40989..15c9150a58cc 100644
> --- a/arch/powerpc/include/asm/machdep.h
> +++ b/arch/powerpc/include/asm/machdep.h
> @@ -142,7 +142,6 @@ struct machdep_calls {
> #endif
>
> void (*restart)(char *cmd);
> - void (*power_off)(void);
> void (*halt)(void);
> void (*panic)(char *str);
> void (*cpu_die)(void);
> diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
> index 1362cd62b3fa..44c8d03558ac 100644
> --- a/arch/powerpc/kernel/setup-common.c
> +++ b/arch/powerpc/kernel/setup-common.c
> @@ -139,8 +139,8 @@ void machine_restart(char *cmd)
> void machine_power_off(void)
> {
> machine_shutdown();
> - if (ppc_md.power_off)
> - ppc_md.power_off();
> + if (pm_power_off)
> + pm_power_off();
> #ifdef CONFIG_SMP
> smp_send_stop();
> #endif
> @@ -151,7 +151,7 @@ void machine_power_off(void)
> /* Used by the G5 thermal driver */
> EXPORT_SYMBOL_GPL(machine_power_off);
>
> -void (*pm_power_off)(void) = machine_power_off;
> +void (*pm_power_off)(void);
> EXPORT_SYMBOL_GPL(pm_power_off);
>
> void machine_halt(void)
> diff --git a/arch/powerpc/platforms/44x/ppc476.c b/arch/powerpc/platforms/44x/ppc476.c
> index 58db9d083969..c11ce6516c8f 100644
> --- a/arch/powerpc/platforms/44x/ppc476.c
> +++ b/arch/powerpc/platforms/44x/ppc476.c
> @@ -94,7 +94,7 @@ static int avr_probe(struct i2c_client *client,
> {
> avr_i2c_client = client;
> ppc_md.restart = avr_reset_system;
> - ppc_md.power_off = avr_power_off_system;
> + pm_power_off = avr_power_off_system;
> return 0;
> }
>
> diff --git a/arch/powerpc/platforms/52xx/efika.c b/arch/powerpc/platforms/52xx/efika.c
> index 3feffde9128d..6af651e69129 100644
> --- a/arch/powerpc/platforms/52xx/efika.c
> +++ b/arch/powerpc/platforms/52xx/efika.c
> @@ -212,6 +212,8 @@ static int __init efika_probe(void)
> DMA_MODE_READ = 0x44;
> DMA_MODE_WRITE = 0x48;
>
> + pm_power_off = rtas_power_off;
> +
> return 1;
> }
>
> @@ -225,7 +227,6 @@ define_machine(efika)
> .init_IRQ = mpc52xx_init_irq,
> .get_irq = mpc52xx_get_irq,
> .restart = rtas_restart,
> - .power_off = rtas_power_off,
> .halt = rtas_halt,
> .set_rtc_time = rtas_set_rtc_time,
> .get_rtc_time = rtas_get_rtc_time,
> diff --git a/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c b/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c
> index 463fa91ee5b6..15e8021ddef9 100644
> --- a/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c
> +++ b/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c
> @@ -167,10 +167,10 @@ static int mcu_probe(struct i2c_client *client, const struct i2c_device_id *id)
> if (ret)
> goto err;
>
> - /* XXX: this is potentially racy, but there is no lock for ppc_md */
> - if (!ppc_md.power_off) {
> + /* XXX: this is potentially racy, but there is no lock for pm_power_off */
> + if (!pm_power_off) {
> glob_mcu = mcu;
> - ppc_md.power_off = mcu_power_off;
> + pm_power_off = mcu_power_off;
> dev_info(&client->dev, "will provide power-off service\n");
> }
>
> @@ -197,7 +197,7 @@ static int mcu_remove(struct i2c_client *client)
> device_remove_file(&client->dev, &dev_attr_status);
>
> if (glob_mcu == mcu) {
> - ppc_md.power_off = NULL;
> + pm_power_off = NULL;
> glob_mcu = NULL;
> }
>
> diff --git a/arch/powerpc/platforms/85xx/corenet_generic.c b/arch/powerpc/platforms/85xx/corenet_generic.c
> index e56b89a792ed..1f309ccb096e 100644
> --- a/arch/powerpc/platforms/85xx/corenet_generic.c
> +++ b/arch/powerpc/platforms/85xx/corenet_generic.c
> @@ -170,7 +170,7 @@ static int __init corenet_generic_probe(void)
>
> ppc_md.get_irq = ehv_pic_get_irq;
> ppc_md.restart = fsl_hv_restart;
> - ppc_md.power_off = fsl_hv_halt;
> + pm_power_off = fsl_hv_halt;
> ppc_md.halt = fsl_hv_halt;
> #ifdef CONFIG_SMP
> /*
> diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
> index 8162b0412117..e149c9ec26ae 100644
> --- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
> +++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
> @@ -120,7 +120,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
>
> /* Register our halt function */
> ppc_md.halt = gpio_halt_cb;
> - ppc_md.power_off = gpio_halt_cb;
> + pm_power_off = gpio_halt_cb;
>
> printk(KERN_INFO "gpio-halt: registered GPIO %d (%d trigger, %d"
> " irq).\n", gpio, trigger, irq);
> @@ -137,7 +137,7 @@ static int gpio_halt_remove(struct platform_device *pdev)
> free_irq(irq, halt_node);
>
> ppc_md.halt = NULL;
> - ppc_md.power_off = NULL;
> + pm_power_off = NULL;
>
> gpio_free(gpio);
>
> diff --git a/arch/powerpc/platforms/cell/celleb_setup.c b/arch/powerpc/platforms/cell/celleb_setup.c
> index 34e8ce2976aa..90be8ec51686 100644
> --- a/arch/powerpc/platforms/cell/celleb_setup.c
> +++ b/arch/powerpc/platforms/cell/celleb_setup.c
> @@ -142,6 +142,7 @@ static int __init celleb_probe_beat(void)
> powerpc_firmware_features |= FW_FEATURE_CELLEB_ALWAYS
> | FW_FEATURE_BEAT | FW_FEATURE_LPAR;
> hpte_init_beat_v3();
> + pm_power_off = beat_power_off;
>
> return 1;
> }
> @@ -190,6 +191,7 @@ static int __init celleb_probe_native(void)
>
> powerpc_firmware_features |= FW_FEATURE_CELLEB_ALWAYS;
> hpte_init_native();
> + pm_power_off = rtas_power_off;
>
> return 1;
> }
> @@ -204,7 +206,6 @@ define_machine(celleb_beat) {
> .setup_arch = celleb_setup_arch_beat,
> .show_cpuinfo = celleb_show_cpuinfo,
> .restart = beat_restart,
> - .power_off = beat_power_off,
> .halt = beat_halt,
> .get_rtc_time = beat_get_rtc_time,
> .set_rtc_time = beat_set_rtc_time,
> @@ -230,7 +231,6 @@ define_machine(celleb_native) {
> .setup_arch = celleb_setup_arch_native,
> .show_cpuinfo = celleb_show_cpuinfo,
> .restart = rtas_restart,
> - .power_off = rtas_power_off,
> .halt = rtas_halt,
> .get_boot_time = rtas_get_boot_time,
> .get_rtc_time = rtas_get_rtc_time,
> diff --git a/arch/powerpc/platforms/cell/qpace_setup.c b/arch/powerpc/platforms/cell/qpace_setup.c
> index 6e3409d590ac..d328140dc6f5 100644
> --- a/arch/powerpc/platforms/cell/qpace_setup.c
> +++ b/arch/powerpc/platforms/cell/qpace_setup.c
> @@ -127,6 +127,7 @@ static int __init qpace_probe(void)
> return 0;
>
> hpte_init_native();
> + pm_power_off = rtas_power_off;
>
> return 1;
> }
> @@ -137,7 +138,6 @@ define_machine(qpace) {
> .setup_arch = qpace_setup_arch,
> .show_cpuinfo = qpace_show_cpuinfo,
> .restart = rtas_restart,
> - .power_off = rtas_power_off,
> .halt = rtas_halt,
> .get_boot_time = rtas_get_boot_time,
> .get_rtc_time = rtas_get_rtc_time,
> diff --git a/arch/powerpc/platforms/cell/setup.c b/arch/powerpc/platforms/cell/setup.c
> index 6ae25fb62015..d62aa982d530 100644
> --- a/arch/powerpc/platforms/cell/setup.c
> +++ b/arch/powerpc/platforms/cell/setup.c
> @@ -259,6 +259,7 @@ static int __init cell_probe(void)
> return 0;
>
> hpte_init_native();
> + pm_power_off = rtas_power_off;
>
> return 1;
> }
> @@ -269,7 +270,6 @@ define_machine(cell) {
> .setup_arch = cell_setup_arch,
> .show_cpuinfo = cell_show_cpuinfo,
> .restart = rtas_restart,
> - .power_off = rtas_power_off,
> .halt = rtas_halt,
> .get_boot_time = rtas_get_boot_time,
> .get_rtc_time = rtas_get_rtc_time,
> diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c
> index 5b77b1919fd2..860a59eb8ea2 100644
> --- a/arch/powerpc/platforms/chrp/setup.c
> +++ b/arch/powerpc/platforms/chrp/setup.c
> @@ -585,6 +585,8 @@ static int __init chrp_probe(void)
> DMA_MODE_READ = 0x44;
> DMA_MODE_WRITE = 0x48;
>
> + pm_power_off = rtas_power_off;
> +
> return 1;
> }
>
> @@ -597,7 +599,6 @@ define_machine(chrp) {
> .show_cpuinfo = chrp_show_cpuinfo,
> .init_IRQ = chrp_init_IRQ,
> .restart = rtas_restart,
> - .power_off = rtas_power_off,
> .halt = rtas_halt,
> .time_init = chrp_time_init,
> .set_rtc_time = chrp_set_rtc_time,
> diff --git a/arch/powerpc/platforms/embedded6xx/gamecube.c b/arch/powerpc/platforms/embedded6xx/gamecube.c
> index bd4ba5d7d568..fe0ed6ee285e 100644
> --- a/arch/powerpc/platforms/embedded6xx/gamecube.c
> +++ b/arch/powerpc/platforms/embedded6xx/gamecube.c
> @@ -67,6 +67,8 @@ static int __init gamecube_probe(void)
> if (!of_flat_dt_is_compatible(dt_root, "nintendo,gamecube"))
> return 0;
>
> + pm_power_off = gamecube_power_off;
> +
> return 1;
> }
>
> @@ -80,7 +82,6 @@ define_machine(gamecube) {
> .probe = gamecube_probe,
> .init_early = gamecube_init_early,
> .restart = gamecube_restart,
> - .power_off = gamecube_power_off,
> .halt = gamecube_halt,
> .init_IRQ = flipper_pic_probe,
> .get_irq = flipper_pic_get_irq,
> diff --git a/arch/powerpc/platforms/embedded6xx/linkstation.c b/arch/powerpc/platforms/embedded6xx/linkstation.c
> index 168e1d80b2e5..540eeb58d3f0 100644
> --- a/arch/powerpc/platforms/embedded6xx/linkstation.c
> +++ b/arch/powerpc/platforms/embedded6xx/linkstation.c
> @@ -147,6 +147,9 @@ static int __init linkstation_probe(void)
>
> if (!of_flat_dt_is_compatible(root, "linkstation"))
> return 0;
> +
> + pm_power_off = linkstation_power_off;
> +
> return 1;
> }
>
> @@ -158,7 +161,6 @@ define_machine(linkstation){
> .show_cpuinfo = linkstation_show_cpuinfo,
> .get_irq = mpic_get_irq,
> .restart = linkstation_restart,
> - .power_off = linkstation_power_off,
> .halt = linkstation_halt,
> .calibrate_decr = generic_calibrate_decr,
> };
> diff --git a/arch/powerpc/platforms/embedded6xx/wii.c b/arch/powerpc/platforms/embedded6xx/wii.c
> index 388e29bab8f6..352592d3e44e 100644
> --- a/arch/powerpc/platforms/embedded6xx/wii.c
> +++ b/arch/powerpc/platforms/embedded6xx/wii.c
> @@ -211,6 +211,8 @@ static int __init wii_probe(void)
> if (!of_flat_dt_is_compatible(dt_root, "nintendo,wii"))
> return 0;
>
> + pm_power_off = wii_power_off;
> +
> return 1;
> }
>
> @@ -226,7 +228,6 @@ define_machine(wii) {
> .init_early = wii_init_early,
> .setup_arch = wii_setup_arch,
> .restart = wii_restart,
> - .power_off = wii_power_off,
> .halt = wii_halt,
> .init_IRQ = wii_pic_probe,
> .get_irq = flipper_pic_get_irq,
> diff --git a/arch/powerpc/platforms/maple/setup.c b/arch/powerpc/platforms/maple/setup.c
> index cb1b0b35a0c6..56b85cd61aaf 100644
> --- a/arch/powerpc/platforms/maple/setup.c
> +++ b/arch/powerpc/platforms/maple/setup.c
> @@ -169,7 +169,7 @@ static void __init maple_use_rtas_reboot_and_halt_if_present(void)
> if (rtas_service_present("system-reboot") &&
> rtas_service_present("power-off")) {
> ppc_md.restart = rtas_restart;
> - ppc_md.power_off = rtas_power_off;
> + pm_power_off = rtas_power_off;
> ppc_md.halt = rtas_halt;
> }
> }
> @@ -312,6 +312,7 @@ static int __init maple_probe(void)
> alloc_dart_table();
>
> hpte_init_native();
> + pm_power_off = maple_power_off;
>
> return 1;
> }
> @@ -325,7 +326,6 @@ define_machine(maple) {
> .pci_irq_fixup = maple_pci_irq_fixup,
> .pci_get_legacy_ide_irq = maple_pci_get_legacy_ide_irq,
> .restart = maple_restart,
> - .power_off = maple_power_off,
> .halt = maple_halt,
> .get_boot_time = maple_get_boot_time,
> .set_rtc_time = maple_set_rtc_time,
> diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c
> index b127a29ac526..713d36d45d1d 100644
> --- a/arch/powerpc/platforms/powermac/setup.c
> +++ b/arch/powerpc/platforms/powermac/setup.c
> @@ -632,6 +632,8 @@ static int __init pmac_probe(void)
> smu_cmdbuf_abs = memblock_alloc_base(4096, 4096, 0x80000000UL);
> #endif /* CONFIG_PMAC_SMU */
>
> + pm_power_off = pmac_power_off;
> +
> return 1;
> }
>
> @@ -663,7 +665,6 @@ define_machine(powermac) {
> .get_irq = NULL, /* changed later */
> .pci_irq_fixup = pmac_pci_irq_fixup,
> .restart = pmac_restart,
> - .power_off = pmac_power_off,
> .halt = pmac_halt,
> .time_init = pmac_time_init,
> .get_boot_time = pmac_get_boot_time,
> diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c
> index 3f9546d8a51f..941831d67cb2 100644
> --- a/arch/powerpc/platforms/powernv/setup.c
> +++ b/arch/powerpc/platforms/powernv/setup.c
> @@ -268,7 +268,7 @@ static void __init pnv_setup_machdep_opal(void)
> ppc_md.get_rtc_time = opal_get_rtc_time;
> ppc_md.set_rtc_time = opal_set_rtc_time;
> ppc_md.restart = pnv_restart;
> - ppc_md.power_off = pnv_power_off;
> + pm_power_off = pnv_power_off;
> ppc_md.halt = pnv_halt;
> ppc_md.machine_check_exception = opal_machine_check;
> ppc_md.mce_check_early_recovery = opal_mce_check_early_recovery;
> @@ -285,7 +285,7 @@ static void __init pnv_setup_machdep_rtas(void)
> ppc_md.set_rtc_time = rtas_set_rtc_time;
> }
> ppc_md.restart = rtas_restart;
> - ppc_md.power_off = rtas_power_off;
> + pm_power_off = rtas_power_off;
> ppc_md.halt = rtas_halt;
> }
> #endif /* CONFIG_PPC_POWERNV_RTAS */
> diff --git a/arch/powerpc/platforms/ps3/setup.c b/arch/powerpc/platforms/ps3/setup.c
> index 3f509f86432c..009a2004b876 100644
> --- a/arch/powerpc/platforms/ps3/setup.c
> +++ b/arch/powerpc/platforms/ps3/setup.c
> @@ -248,6 +248,7 @@ static int __init ps3_probe(void)
> ps3_mm_init();
> ps3_mm_vas_create(&htab_size);
> ps3_hpte_init(htab_size);
> + pm_power_off = ps3_power_off;
>
> DBG(" <- %s:%d\n", __func__, __LINE__);
> return 1;
> @@ -278,7 +279,6 @@ define_machine(ps3) {
> .calibrate_decr = ps3_calibrate_decr,
> .progress = ps3_progress,
> .restart = ps3_restart,
> - .power_off = ps3_power_off,
> .halt = ps3_halt,
> #if defined(CONFIG_KEXEC)
> .kexec_cpu_down = ps3_kexec_cpu_down,
> diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
> index 125c589eeef5..db0fc0c07568 100644
> --- a/arch/powerpc/platforms/pseries/setup.c
> +++ b/arch/powerpc/platforms/pseries/setup.c
> @@ -659,6 +659,34 @@ static void __init pSeries_init_early(void)
> pr_debug(" <- pSeries_init_early()\n");
> }
>
> +/**
> + * pseries_power_off - tell firmware about how to power off the system.
> + *
> + * This function calls either the power-off rtas token in normal cases
> + * or the ibm,power-off-ups token (if present & requested) in case of
> + * a power failure. If power-off token is used, power on will only be
> + * possible with power button press. If ibm,power-off-ups token is used
> + * it will allow auto poweron after power is restored.
> + */
> +static void pseries_power_off(void)
> +{
> + int rc;
> + int rtas_poweroff_ups_token = rtas_token("ibm,power-off-ups");
> +
> + if (rtas_flash_term_hook)
> + rtas_flash_term_hook(SYS_POWER_OFF);
> +
> + if (rtas_poweron_auto == 0 ||
> + rtas_poweroff_ups_token == RTAS_UNKNOWN_SERVICE) {
> + rc = rtas_call(rtas_token("power-off"), 2, 1, NULL, -1, -1);
> + printk(KERN_INFO "RTAS power-off returned %d\n", rc);
> + } else {
> + rc = rtas_call(rtas_poweroff_ups_token, 0, 1, NULL);
> + printk(KERN_INFO "RTAS ibm,power-off-ups returned %d\n", rc);
> + }
> + for (;;);
> +}
> +
> /*
> * Called very early, MMU is off, device-tree isn't unflattened
> */
> @@ -741,6 +769,8 @@ static int __init pSeries_probe(void)
> else
> hpte_init_native();
>
> + pm_power_off = pseries_power_off;
> +
> pr_debug("Machine is%s LPAR !\n",
> (powerpc_firmware_features & FW_FEATURE_LPAR) ? "" : " not");
>
> @@ -754,34 +784,6 @@ static int pSeries_pci_probe_mode(struct pci_bus *bus)
> return PCI_PROBE_NORMAL;
> }
>
> -/**
> - * pSeries_power_off - tell firmware about how to power off the system.
> - *
> - * This function calls either the power-off rtas token in normal cases
> - * or the ibm,power-off-ups token (if present & requested) in case of
> - * a power failure. If power-off token is used, power on will only be
> - * possible with power button press. If ibm,power-off-ups token is used
> - * it will allow auto poweron after power is restored.
> - */
> -static void pSeries_power_off(void)
> -{
> - int rc;
> - int rtas_poweroff_ups_token = rtas_token("ibm,power-off-ups");
> -
> - if (rtas_flash_term_hook)
> - rtas_flash_term_hook(SYS_POWER_OFF);
> -
> - if (rtas_poweron_auto == 0 ||
> - rtas_poweroff_ups_token == RTAS_UNKNOWN_SERVICE) {
> - rc = rtas_call(rtas_token("power-off"), 2, 1, NULL, -1, -1);
> - printk(KERN_INFO "RTAS power-off returned %d\n", rc);
> - } else {
> - rc = rtas_call(rtas_poweroff_ups_token, 0, 1, NULL);
> - printk(KERN_INFO "RTAS ibm,power-off-ups returned %d\n", rc);
> - }
> - for (;;);
> -}
> -
> #ifndef CONFIG_PCI
> void pSeries_final_fixup(void) { }
> #endif
> @@ -796,7 +798,6 @@ define_machine(pseries) {
> .pcibios_fixup = pSeries_final_fixup,
> .pci_probe_mode = pSeries_pci_probe_mode,
> .restart = rtas_restart,
> - .power_off = pSeries_power_off,
> .halt = rtas_halt,
> .panic = rtas_os_term,
> .get_boot_time = rtas_get_boot_time,
> diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c
> index ffd1169ebaab..1e04568da3b9 100644
> --- a/arch/powerpc/sysdev/fsl_soc.c
> +++ b/arch/powerpc/sysdev/fsl_soc.c
> @@ -238,7 +238,7 @@ void fsl_hv_restart(char *cmd)
> /*
> * Halt the current partition
> *
> - * This function should be assigned to the ppc_md.power_off and ppc_md.halt
> + * This function should be assigned to the pm_power_off and ppc_md.halt
> * function pointers, to shut down the partition when we're running under
> * the Freescale hypervisor.
> */
> diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
> index b988b5addf86..506d25681fe3 100644
> --- a/arch/powerpc/xmon/xmon.c
> +++ b/arch/powerpc/xmon/xmon.c
> @@ -981,7 +981,8 @@ static void bootcmds(void)
> else if (cmd == 'h')
> ppc_md.halt();
> else if (cmd == 'p')
> - ppc_md.power_off();
> + if (pm_power_off)
> + pm_power_off();
> }
>
> static int cpu_cmd(void)
next prev parent reply other threads:[~2014-10-22 6:10 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-22 4:37 [PATCH] powerpc: Convert power off logic to pm_power_off Michael Ellerman
2014-10-22 4:48 ` Guenter Roeck
2014-10-22 6:09 ` Benjamin Herrenschmidt [this message]
2014-10-22 8:41 ` Alexander Graf
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=1413958193.364.10.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=agraf@suse.de \
--cc=linux@roeck-us.net \
--cc=linuxppc-dev@ozlabs.org \
--cc=mpe@ellerman.id.au \
/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.