Re: [PATCH v6 41/48] powerpc: Register with kernel power-off handler
On 11/10/2014 11:42 PM, Michael Ellerman wrote: On Sun, 2014-11-09 at 17:42 -0800, Guenter Roeck wrote: Register with kernel power-off handler instead of setting pm_power_off directly. If there is an indication that there can be more than one power-off handler, use register_power_off_handler, otherwise use register_power_off_handler_simple to register the power-off handler. If the power-off handler only resets or stops the system, select the fallback priority to indicate that the power-off handler is one of last resort. If the power-off handler powers off the system, select the default priority, unless the power-off handler installation code suggests that there can be more than one power-off handler and the new handler is only installed conditionally. In this case, install the handler with low priority. Cc: Alexander Graf Cc: Michael Ellerman Signed-off-by: Guenter Roeck Can you fold in the patch below. I know pm.h is included by device.h, so most things will already have it, but I'd rather be explicit. With that you can add my: Acked-by: Michael Ellerman Done. Thanks, Guenter ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v6 41/48] powerpc: Register with kernel power-off handler
On Sun, 2014-11-09 at 17:42 -0800, Guenter Roeck wrote: > Register with kernel power-off handler instead of setting pm_power_off > directly. > > If there is an indication that there can be more than one power-off handler, > use register_power_off_handler, otherwise use > register_power_off_handler_simple > to register the power-off handler. > > If the power-off handler only resets or stops the system, select the fallback > priority to indicate that the power-off handler is one of last resort. > If the power-off handler powers off the system, select the default priority, > unless the power-off handler installation code suggests that there can be > more than one power-off handler and the new handler is only installed > conditionally. In this case, install the handler with low priority. > > Cc: Alexander Graf > Cc: Michael Ellerman > Signed-off-by: Guenter Roeck Can you fold in the patch below. I know pm.h is included by device.h, so most things will already have it, but I'd rather be explicit. With that you can add my: Acked-by: Michael Ellerman cheers diff --git a/arch/powerpc/platforms/44x/ppc476.c b/arch/powerpc/platforms/44x/ppc476.c index 590d31fbbfc0..adbf36d8c5d9 100644 --- a/arch/powerpc/platforms/44x/ppc476.c +++ b/arch/powerpc/platforms/44x/ppc476.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include diff --git a/arch/powerpc/platforms/52xx/efika.c b/arch/powerpc/platforms/52xx/efika.c index 321a7a76eb80..7bdf4e8f7b99 100644 --- a/arch/powerpc/platforms/52xx/efika.c +++ b/arch/powerpc/platforms/52xx/efika.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include diff --git a/arch/powerpc/platforms/85xx/corenet_generic.c b/arch/powerpc/platforms/85xx/corenet_generic.c index f0c4b5106103..4892491969ab 100644 --- a/arch/powerpc/platforms/85xx/corenet_generic.c +++ b/arch/powerpc/platforms/85xx/corenet_generic.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include diff --git a/arch/powerpc/platforms/cell/celleb_setup.c b/arch/powerpc/platforms/cell/celleb_setup.c index e301b1ae9c2d..1e14047f98d6 100644 --- a/arch/powerpc/platforms/cell/celleb_setup.c +++ b/arch/powerpc/platforms/cell/celleb_setup.c @@ -42,6 +42,7 @@ #include #include #include +#include #include #include diff --git a/arch/powerpc/platforms/cell/qpace_setup.c b/arch/powerpc/platforms/cell/qpace_setup.c index 223d40a73130..429fefd30e4e 100644 --- a/arch/powerpc/platforms/cell/qpace_setup.c +++ b/arch/powerpc/platforms/cell/qpace_setup.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include diff --git a/arch/powerpc/platforms/cell/setup.c b/arch/powerpc/platforms/cell/setup.c index ea5460c0b8e7..1203a9d6cd53 100644 --- a/arch/powerpc/platforms/cell/setup.c +++ b/arch/powerpc/platforms/cell/setup.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c index 0c0288ed0c3b..910bd8b45fae 100644 --- a/arch/powerpc/platforms/chrp/setup.c +++ b/arch/powerpc/platforms/chrp/setup.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include diff --git a/arch/powerpc/platforms/embedded6xx/gamecube.c b/arch/powerpc/platforms/embedded6xx/gamecube.c index af40f0fc2579..c90caff045bb 100644 --- a/arch/powerpc/platforms/embedded6xx/gamecube.c +++ b/arch/powerpc/platforms/embedded6xx/gamecube.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include diff --git a/arch/powerpc/platforms/embedded6xx/linkstation.c b/arch/powerpc/platforms/embedded6xx/linkstation.c index 0c4dcf86fc7b..e1aec530f0ad 100644 --- a/arch/powerpc/platforms/embedded6xx/linkstation.c +++ b/arch/powerpc/platforms/embedded6xx/linkstation.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include diff --git a/arch/powerpc/platforms/embedded6xx/wii.c b/arch/powerpc/platforms/embedded6xx/wii.c index eea88245a9de..8c93b95bcc29 100644 --- a/arch/powerpc/platforms/embedded6xx/wii.c +++ b/arch/powerpc/platforms/embedded6xx/wii.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include diff --git a/arch/powerpc/platforms/maple/setup.c b/arch/powerpc/platforms/maple/setup.c index 73c3988202d8..962e4968d967 100644 --- a/arch/powerpc/platforms/maple/setup.c +++ b/arch/powerpc/platforms/maple/setup.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c index 6496ae41a51d..52f2e965200a 100644 --- a/arch/powerpc/platforms/powermac/setup.c +++ b/arch/powerpc/platforms/powermac/setup.c @@ -53,6 +53,7 @@ #include #include #include +#include #include #include diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c index a03c41bc
[PATCH v6 41/48] powerpc: Register with kernel power-off handler
Register with kernel power-off handler instead of setting pm_power_off directly. If there is an indication that there can be more than one power-off handler, use register_power_off_handler, otherwise use register_power_off_handler_simple to register the power-off handler. If the power-off handler only resets or stops the system, select the fallback priority to indicate that the power-off handler is one of last resort. If the power-off handler powers off the system, select the default priority, unless the power-off handler installation code suggests that there can be more than one power-off handler and the new handler is only installed conditionally. In this case, install the handler with low priority. Cc: Alexander Graf Cc: Michael Ellerman Signed-off-by: Guenter Roeck --- v6: - This patch: No change. Global: Replaced priority defines with enum. v5: - New patch arch/powerpc/platforms/44x/ppc476.c | 3 ++- arch/powerpc/platforms/52xx/efika.c | 3 ++- arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c | 30 arch/powerpc/platforms/85xx/corenet_generic.c| 3 ++- arch/powerpc/platforms/85xx/sgy_cts1000.c| 16 +++-- arch/powerpc/platforms/cell/celleb_setup.c | 6 +++-- arch/powerpc/platforms/cell/qpace_setup.c| 3 ++- arch/powerpc/platforms/cell/setup.c | 3 ++- arch/powerpc/platforms/chrp/setup.c | 3 ++- arch/powerpc/platforms/embedded6xx/gamecube.c| 3 ++- arch/powerpc/platforms/embedded6xx/linkstation.c | 3 ++- arch/powerpc/platforms/embedded6xx/wii.c | 3 ++- arch/powerpc/platforms/maple/setup.c | 6 +++-- arch/powerpc/platforms/powermac/setup.c | 3 ++- arch/powerpc/platforms/powernv/setup.c | 6 +++-- arch/powerpc/platforms/ps3/setup.c | 3 ++- arch/powerpc/platforms/pseries/setup.c | 3 ++- arch/powerpc/sysdev/fsl_soc.c| 6 ++--- 18 files changed, 73 insertions(+), 33 deletions(-) diff --git a/arch/powerpc/platforms/44x/ppc476.c b/arch/powerpc/platforms/44x/ppc476.c index c11ce65..590d31f 100644 --- a/arch/powerpc/platforms/44x/ppc476.c +++ b/arch/powerpc/platforms/44x/ppc476.c @@ -94,7 +94,8 @@ static int avr_probe(struct i2c_client *client, { avr_i2c_client = client; ppc_md.restart = avr_reset_system; - pm_power_off = avr_power_off_system; + register_power_off_handler_simple(avr_power_off_system, + POWER_OFF_PRIORITY_DEFAULT); return 0; } diff --git a/arch/powerpc/platforms/52xx/efika.c b/arch/powerpc/platforms/52xx/efika.c index 6af651e..321a7a7 100644 --- a/arch/powerpc/platforms/52xx/efika.c +++ b/arch/powerpc/platforms/52xx/efika.c @@ -212,7 +212,8 @@ static int __init efika_probe(void) DMA_MODE_READ = 0x44; DMA_MODE_WRITE = 0x48; - pm_power_off = rtas_power_off; + register_power_off_handler_simple(rtas_power_off, + POWER_OFF_PRIORITY_DEFAULT); return 1; } diff --git a/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c b/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c index 15e8021..1bf6b0e 100644 --- a/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c +++ b/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -86,7 +87,7 @@ static ssize_t show_status(struct device *d, } static DEVICE_ATTR(status, S_IRUGO, show_status, NULL); -static void mcu_power_off(void) +static void mcu_power_off(struct power_off_handler_block *this) { struct mcu *mcu = glob_mcu; @@ -97,6 +98,11 @@ static void mcu_power_off(void) mutex_unlock(&mcu->lock); } +static struct power_off_handler_block mcu_power_off_hb = { + .handler = mcu_power_off, + .priority = POWER_OFF_PRIORITY_LOW, +}; + static void mcu_gpio_set(struct gpio_chip *gc, unsigned int gpio, int val) { struct mcu *mcu = container_of(gc, struct mcu, gc); @@ -167,13 +173,15 @@ 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 pm_power_off */ - if (!pm_power_off) { - glob_mcu = mcu; - pm_power_off = mcu_power_off; - dev_info(&client->dev, "will provide power-off service\n"); + glob_mcu = mcu; + ret = register_power_off_handler(&mcu_power_off_hb); + if (ret) { + dev_err(&client->dev, "Failed to register power-off handler\n"); + goto err_handler; } + dev_info(&client->dev, "will provide power-off service\n"); + if (device_create_file(&client->dev, &dev_attr_status)) dev_err(&client->dev, "couldn't create device file for status\n"); @@ -182,6 +190,10 @@ static int mc