diff for duplicates of <20131031062958.274180101@linux.com> diff --git a/a/1.txt b/N1/1.txt index 6645b4f..9eddcfb 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,289 +1,3 @@ -From: Domenico Andreoli <domenico.andreoli@linux.com> - -Code is not commented but it's really simple. The bulk is in -set_machine_reset(), the static data is hidden in get_descr(). The rest -is just a straightforward consequence with the intent to keep it simple. - -Cc: Russell King <linux@arm.linux.org.uk> -Cc: Arnd Bergmann <arnd@arndb.de> -Cc: Olof Johansson <olof@lixom.net> -Cc: Catalin Marinas <catalin.marinas@arm.com> -Cc: Will Deacon <will.deacon@arm.com> -Cc: Ralf Baechle <ralf@linux-mips.org> -Cc: linux-arch@vger.kernel.org -Cc: linux-arm-kernel@lists.infradead.org -Cc: linux-mips@lvger.kernel.org -Signed-off-by: Domenico Andreoli <domenico.andreoli@linux.com> ---- - include/linux/machine_reset.h | 79 +++++++++++++++++++++++++ - kernel/Makefile | 1 + - kernel/machine_reset.c | 131 ++++++++++++++++++++++++++++++++++++++++++ - kernel/power/Kconfig | 4 + - kernel/reboot.c | 3 + - 5 files changed, 218 insertions(+) - -Index: b/include/linux/machine_reset.h -=================================================================== ---- /dev/null -+++ b/include/linux/machine_reset.h -@@ -0,0 +1,79 @@ -+/* -+ * Machine reset hooks management -+ * -+ * Copyright (C) 2013 Domenico Andreoli <domenico.andreoli@linux.com> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#include <linux/reboot.h> -+ -+enum reset_func { -+ RESET_RESTART = 0, -+ RESET_HALT, -+ RESET_POWER_OFF_PREPARE, -+ RESET_POWER_OFF, -+ RESET_CRASH_POWER_OFF, -+ RESET_NR_FUNCS, -+}; -+ -+struct reset_hook { -+ union { -+ void (*restart)(void *dev, enum reboot_mode, const char *cmd); -+ void (*halt)(void *dev); -+ void (*power_off_prepare)(void *dev); -+ void (*power_off)(void *dev); -+ void (*crash_power_off)(void *dev); -+ void (*handler)(void *dev); -+ }; -+ void (*release)(void *dev); -+}; -+ -+static inline -+void reset_hook_init(struct reset_hook *hook) -+{ -+ hook->handler = NULL; -+ hook->release = NULL; -+} -+ -+#ifdef CONFIG_MACHINE_RESET -+ -+void set_machine_reset(enum reset_func, const struct reset_hook *, void *dev); -+void unset_machine_reset(enum reset_func, const struct reset_hook *); -+int isset_machine_reset(enum reset_func, void *dev); -+ -+void default_restart(enum reboot_mode, const char *cmd); -+void default_halt(void); -+void default_power_off_prepare(void); -+void default_power_off(void); -+void default_crash_power_off(void); -+ -+#else /* CONFIG_MACHINE_RESET */ -+ -+static inline -+void set_machine_reset(enum reset_func func, -+ const struct reset_hook *hook, void *dev) -+{ -+ if (hook->release) -+ hook->release(dev); -+} -+ -+static inline void unset_machine_reset(enum reset_func _f, -+ const struct reset_hook *_h) {} -+static inline int isset_machine_reset(enum reset_func _f, void *_d) { return 0; } -+ -+static inline void default_restart(enum reboot_mode _m, const char *_c) {} -+static inline void default_halt(void) {} -+static inline void default_power_off_prepare(void) {} -+static inline void default_power_off(void) {} -+static inline void default_crash_power_off(void) {} -+ -+#endif /* CONFIG_MACHINE_RESET */ -Index: b/kernel/Makefile -=================================================================== ---- a/kernel/Makefile -+++ b/kernel/Makefile -@@ -111,6 +111,7 @@ obj-$(CONFIG_PADATA) += padata.o - obj-$(CONFIG_CRASH_DUMP) += crash_dump.o - obj-$(CONFIG_JUMP_LABEL) += jump_label.o - obj-$(CONFIG_CONTEXT_TRACKING) += context_tracking.o -+obj-$(CONFIG_MACHINE_RESET) += machine_reset.o - - $(obj)/configs.o: $(obj)/config_data.h - -Index: b/kernel/machine_reset.c -=================================================================== ---- /dev/null -+++ b/kernel/machine_reset.c -@@ -0,0 +1,131 @@ -+/* -+ * Machine reset hooks management -+ * -+ * Copyright (C) 2013 Domenico Andreoli <domenico.andreoli@linux.com> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#include <linux/export.h> -+#include <linux/spinlock.h> -+#include <linux/reboot.h> -+#include <linux/machine_reset.h> -+ -+struct reset_descr { -+ struct reset_hook hook; -+ void *dev; -+}; -+static DEFINE_SPINLOCK(descr_lock); -+ -+static struct reset_descr *get_descr(enum reset_func func) -+{ -+ static struct reset_descr descr[RESET_NR_FUNCS]; -+ -+ BUG_ON(func >= RESET_NR_FUNCS); -+ spin_lock(&descr_lock); -+ return &descr[func]; -+} -+ -+static void put_descr(struct reset_descr *descr) -+{ -+ spin_unlock(&descr_lock); -+} -+ -+#define RESET_FUNC(_func, _member, _args...) \ -+{ \ -+ struct reset_descr *descr = get_descr(_func); \ -+ typeof(descr->hook._member) member = descr->hook._member; \ -+ if (member) { \ -+ pr_debug("machine_reset: %s (%pf)\n", #_func, member); \ -+ member(descr->dev , ##_args); \ -+ } \ -+ put_descr(descr); \ -+ pr_emerg("machine_reset: %s: FAILED\n", #_func); \ -+ while (1); \ -+} -+ -+void default_restart(enum reboot_mode reboot_mode, const char *cmd) -+{ -+ RESET_FUNC(RESET_RESTART, restart, reboot_mode, cmd); -+} -+ -+void default_halt(void) -+{ -+ RESET_FUNC(RESET_HALT, halt); -+} -+ -+void default_power_off_prepare(void) -+{ -+ RESET_FUNC(RESET_POWER_OFF_PREPARE, power_off_prepare); -+} -+ -+void default_power_off(void) -+{ -+ RESET_FUNC(RESET_POWER_OFF, power_off); -+} -+ -+void default_crash_power_off(void) -+{ -+ RESET_FUNC(RESET_CRASH_POWER_OFF, crash_power_off); -+} -+ -+void set_machine_reset(enum reset_func func, -+ const struct reset_hook *hook, void *new_dev) -+{ -+ struct reset_descr *descr; -+ void (*new_handler)(void *) = hook ? hook->handler : NULL; -+ void (*new_release)(void *) = hook ? hook->release : NULL; -+ void (*old_release)(void *) = NULL; -+ void *old_dev; -+ -+ descr = get_descr(func); -+ old_release = descr->hook.release; -+ old_dev = descr->dev; -+ reset_hook_init(&descr->hook); -+ descr->hook.handler = new_handler; -+ descr->hook.release = new_release; -+ descr->dev = new_dev; -+ put_descr(descr); -+ -+ if (old_release) -+ old_release(old_dev); -+} -+EXPORT_SYMBOL_GPL(set_machine_reset); -+ -+void unset_machine_reset(enum reset_func func, const struct reset_hook *hook) -+{ -+ struct reset_descr *descr; -+ void (*old_release)(void *) = NULL; -+ void *old_dev; -+ -+ BUG_ON(!hook || !hook->handler); -+ -+ descr = get_descr(func); -+ if (descr->hook.handler == hook->handler) { -+ old_release = descr->hook.release; -+ old_dev = descr->dev; -+ reset_hook_init(&descr->hook); -+ } -+ put_descr(descr); -+ -+ if (old_release) -+ old_release(old_dev); -+} -+EXPORT_SYMBOL_GPL(unset_machine_reset); -+ -+int isset_machine_reset(enum reset_func func, void *dev) -+{ -+ struct reset_descr *descr = get_descr(func); -+ int ret = descr->hook.handler && (!dev || descr->dev == dev); -+ put_descr(descr); -+ return ret; -+} -+EXPORT_SYMBOL_GPL(isset_machine_reset); -Index: b/kernel/power/Kconfig -=================================================================== ---- a/kernel/power/Kconfig -+++ b/kernel/power/Kconfig -@@ -293,3 +293,7 @@ config PM_GENERIC_DOMAINS_RUNTIME - config CPU_PM - bool - depends on SUSPEND || CPU_IDLE -+ -+config MACHINE_RESET -+ bool -+ default n -Index: b/kernel/reboot.c -=================================================================== ---- a/kernel/reboot.c -+++ b/kernel/reboot.c -@@ -12,6 +12,7 @@ - #include <linux/kmod.h> - #include <linux/kmsg_dump.h> - #include <linux/reboot.h> -+#include <linux/machine_reset.h> - #include <linux/suspend.h> - #include <linux/syscalls.h> - #include <linux/syscore_ops.h> -@@ -178,6 +179,8 @@ void kernel_power_off(void) - kernel_shutdown_prepare(SYSTEM_POWER_OFF); - if (pm_power_off_prepare) - pm_power_off_prepare(); -+ else -+ default_power_off_prepare(); - migrate_to_reboot_cpu(); - syscore_shutdown(); - pr_emerg("Power down\n"); +An embedded and charset-unspecified text was scrubbed... +Name: machine-reset-handling.patch +URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20131031/2fbc9da9/attachment.ksh> diff --git a/a/content_digest b/N1/content_digest index 65fcca9..e24839d 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,308 +1,12 @@ "ref\020131031062708.520968323@linux.com\0" - "From\0Domenico Andreoli <domenico.andreoli@linux.com>\0" + "From\0domenico.andreoli@linux.com (Domenico Andreoli)\0" "Subject\0[PATCH 01/11] machine-reset: platform generic handling\0" "Date\0Thu, 31 Oct 2013 07:27:09 +0100\0" - "To\0linux-arch@vger.kernel.org\0" - "Cc\0linux-arm-kernel@lists.infradead.org" - linux-mips@lvger.kernel.org - Russell King <linux@arm.linux.org.uk> - Arnd Bergmann <arnd@arndb.de> - Olof Johansson <olof@lixom.net> - Ralf Baechle <ralf@linux-mips.org> - Catalin Marinas <catalin.marinas@arm.com> - Will Deacon <will.deacon@arm.com> - " Domenico Andreoli <domenico.andreoli@linux.com>\0" + "To\0linux-arm-kernel@lists.infradead.org\0" "\00:1\0" - "fn\0machine-reset-handling.patch\0" "b\0" - "From: Domenico Andreoli <domenico.andreoli@linux.com>\n" - "\n" - "Code is not commented but it's really simple. The bulk is in\n" - "set_machine_reset(), the static data is hidden in get_descr(). The rest\n" - "is just a straightforward consequence with the intent to keep it simple.\n" - "\n" - "Cc: Russell King <linux@arm.linux.org.uk>\n" - "Cc: Arnd Bergmann <arnd@arndb.de>\n" - "Cc: Olof Johansson <olof@lixom.net>\n" - "Cc: Catalin Marinas <catalin.marinas@arm.com>\n" - "Cc: Will Deacon <will.deacon@arm.com>\n" - "Cc: Ralf Baechle <ralf@linux-mips.org>\n" - "Cc: linux-arch@vger.kernel.org\n" - "Cc: linux-arm-kernel@lists.infradead.org\n" - "Cc: linux-mips@lvger.kernel.org\n" - "Signed-off-by: Domenico Andreoli <domenico.andreoli@linux.com>\n" - "---\n" - " include/linux/machine_reset.h | 79 +++++++++++++++++++++++++\n" - " kernel/Makefile | 1 +\n" - " kernel/machine_reset.c | 131 ++++++++++++++++++++++++++++++++++++++++++\n" - " kernel/power/Kconfig | 4 +\n" - " kernel/reboot.c | 3 +\n" - " 5 files changed, 218 insertions(+)\n" - "\n" - "Index: b/include/linux/machine_reset.h\n" - "===================================================================\n" - "--- /dev/null\n" - "+++ b/include/linux/machine_reset.h\n" - "@@ -0,0 +1,79 @@\n" - "+/*\n" - "+ * Machine reset hooks management\n" - "+ *\n" - "+ * Copyright (C) 2013 Domenico Andreoli <domenico.andreoli@linux.com>\n" - "+ *\n" - "+ * This program is free software; you can redistribute it and/or modify\n" - "+ * it under the terms of the GNU General Public License as published by\n" - "+ * the Free Software Foundation; either version 2 of the License, or\n" - "+ * (at your option) any later version.\n" - "+ *\n" - "+ * This program is distributed in the hope that it will be useful,\n" - "+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - "+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" - "+ * GNU General Public License for more details.\n" - "+ */\n" - "+\n" - "+#include <linux/reboot.h>\n" - "+\n" - "+enum reset_func {\n" - "+\tRESET_RESTART = 0,\n" - "+\tRESET_HALT,\n" - "+\tRESET_POWER_OFF_PREPARE,\n" - "+\tRESET_POWER_OFF,\n" - "+\tRESET_CRASH_POWER_OFF,\n" - "+\tRESET_NR_FUNCS,\n" - "+};\n" - "+\n" - "+struct reset_hook {\n" - "+\tunion {\n" - "+\t\tvoid (*restart)(void *dev, enum reboot_mode, const char *cmd);\n" - "+\t\tvoid (*halt)(void *dev);\n" - "+\t\tvoid (*power_off_prepare)(void *dev);\n" - "+\t\tvoid (*power_off)(void *dev);\n" - "+\t\tvoid (*crash_power_off)(void *dev);\n" - "+\t\tvoid (*handler)(void *dev);\n" - "+\t};\n" - "+\tvoid (*release)(void *dev);\n" - "+};\n" - "+\n" - "+static inline\n" - "+void reset_hook_init(struct reset_hook *hook)\n" - "+{\n" - "+\thook->handler = NULL;\n" - "+\thook->release = NULL;\n" - "+}\n" - "+\n" - "+#ifdef CONFIG_MACHINE_RESET\n" - "+\n" - "+void set_machine_reset(enum reset_func, const struct reset_hook *, void *dev);\n" - "+void unset_machine_reset(enum reset_func, const struct reset_hook *);\n" - "+int isset_machine_reset(enum reset_func, void *dev);\n" - "+\n" - "+void default_restart(enum reboot_mode, const char *cmd);\n" - "+void default_halt(void);\n" - "+void default_power_off_prepare(void);\n" - "+void default_power_off(void);\n" - "+void default_crash_power_off(void);\n" - "+\n" - "+#else /* CONFIG_MACHINE_RESET */\n" - "+\n" - "+static inline\n" - "+void set_machine_reset(enum reset_func func,\n" - "+ const struct reset_hook *hook, void *dev)\n" - "+{\n" - "+\tif (hook->release)\n" - "+\t\thook->release(dev);\n" - "+}\n" - "+\n" - "+static inline void unset_machine_reset(enum reset_func _f,\n" - "+ const struct reset_hook *_h) {}\n" - "+static inline int isset_machine_reset(enum reset_func _f, void *_d) { return 0; }\n" - "+\n" - "+static inline void default_restart(enum reboot_mode _m, const char *_c) {}\n" - "+static inline void default_halt(void) {}\n" - "+static inline void default_power_off_prepare(void) {}\n" - "+static inline void default_power_off(void) {}\n" - "+static inline void default_crash_power_off(void) {}\n" - "+\n" - "+#endif /* CONFIG_MACHINE_RESET */\n" - "Index: b/kernel/Makefile\n" - "===================================================================\n" - "--- a/kernel/Makefile\n" - "+++ b/kernel/Makefile\n" - "@@ -111,6 +111,7 @@ obj-$(CONFIG_PADATA) += padata.o\n" - " obj-$(CONFIG_CRASH_DUMP) += crash_dump.o\n" - " obj-$(CONFIG_JUMP_LABEL) += jump_label.o\n" - " obj-$(CONFIG_CONTEXT_TRACKING) += context_tracking.o\n" - "+obj-$(CONFIG_MACHINE_RESET) += machine_reset.o\n" - " \n" - " $(obj)/configs.o: $(obj)/config_data.h\n" - " \n" - "Index: b/kernel/machine_reset.c\n" - "===================================================================\n" - "--- /dev/null\n" - "+++ b/kernel/machine_reset.c\n" - "@@ -0,0 +1,131 @@\n" - "+/*\n" - "+ * Machine reset hooks management\n" - "+ *\n" - "+ * Copyright (C) 2013 Domenico Andreoli <domenico.andreoli@linux.com>\n" - "+ *\n" - "+ * This program is free software; you can redistribute it and/or modify\n" - "+ * it under the terms of the GNU General Public License as published by\n" - "+ * the Free Software Foundation; either version 2 of the License, or\n" - "+ * (at your option) any later version.\n" - "+ *\n" - "+ * This program is distributed in the hope that it will be useful,\n" - "+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - "+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" - "+ * GNU General Public License for more details.\n" - "+ */\n" - "+\n" - "+#include <linux/export.h>\n" - "+#include <linux/spinlock.h>\n" - "+#include <linux/reboot.h>\n" - "+#include <linux/machine_reset.h>\n" - "+\n" - "+struct reset_descr {\n" - "+\tstruct reset_hook hook;\n" - "+\tvoid *dev;\n" - "+};\n" - "+static DEFINE_SPINLOCK(descr_lock);\n" - "+\n" - "+static struct reset_descr *get_descr(enum reset_func func)\n" - "+{\n" - "+\tstatic struct reset_descr descr[RESET_NR_FUNCS];\n" - "+\n" - "+\tBUG_ON(func >= RESET_NR_FUNCS);\n" - "+\tspin_lock(&descr_lock);\n" - "+\treturn &descr[func];\n" - "+}\n" - "+\n" - "+static void put_descr(struct reset_descr *descr)\n" - "+{\n" - "+\tspin_unlock(&descr_lock);\n" - "+}\n" - "+\n" - "+#define RESET_FUNC(_func, _member, _args...) \\\n" - "+{ \\\n" - "+\tstruct reset_descr *descr = get_descr(_func); \\\n" - "+\ttypeof(descr->hook._member) member = descr->hook._member; \\\n" - "+\tif (member) { \\\n" - "+\t\tpr_debug(\"machine_reset: %s (%pf)\\n\", #_func, member); \\\n" - "+\t\tmember(descr->dev , ##_args); \\\n" - "+\t} \\\n" - "+\tput_descr(descr); \\\n" - "+\tpr_emerg(\"machine_reset: %s: FAILED\\n\", #_func); \\\n" - "+\twhile (1); \\\n" - "+}\n" - "+\n" - "+void default_restart(enum reboot_mode reboot_mode, const char *cmd)\n" - "+{\n" - "+\tRESET_FUNC(RESET_RESTART, restart, reboot_mode, cmd);\n" - "+}\n" - "+\n" - "+void default_halt(void)\n" - "+{\n" - "+\tRESET_FUNC(RESET_HALT, halt);\n" - "+}\n" - "+\n" - "+void default_power_off_prepare(void)\n" - "+{\n" - "+\tRESET_FUNC(RESET_POWER_OFF_PREPARE, power_off_prepare);\n" - "+}\n" - "+\n" - "+void default_power_off(void)\n" - "+{\n" - "+\tRESET_FUNC(RESET_POWER_OFF, power_off);\n" - "+}\n" - "+\n" - "+void default_crash_power_off(void)\n" - "+{\n" - "+\tRESET_FUNC(RESET_CRASH_POWER_OFF, crash_power_off);\n" - "+}\n" - "+\n" - "+void set_machine_reset(enum reset_func func,\n" - "+ const struct reset_hook *hook, void *new_dev)\n" - "+{\n" - "+\tstruct reset_descr *descr;\n" - "+\tvoid (*new_handler)(void *) = hook ? hook->handler : NULL;\n" - "+\tvoid (*new_release)(void *) = hook ? hook->release : NULL;\n" - "+\tvoid (*old_release)(void *) = NULL;\n" - "+\tvoid *old_dev;\n" - "+\n" - "+\tdescr = get_descr(func);\n" - "+\told_release = descr->hook.release;\n" - "+\told_dev = descr->dev;\n" - "+\treset_hook_init(&descr->hook);\n" - "+\tdescr->hook.handler = new_handler;\n" - "+\tdescr->hook.release = new_release;\n" - "+\tdescr->dev = new_dev;\n" - "+\tput_descr(descr);\n" - "+\n" - "+\tif (old_release)\n" - "+\t\told_release(old_dev);\n" - "+}\n" - "+EXPORT_SYMBOL_GPL(set_machine_reset);\n" - "+\n" - "+void unset_machine_reset(enum reset_func func, const struct reset_hook *hook)\n" - "+{\n" - "+\tstruct reset_descr *descr;\n" - "+\tvoid (*old_release)(void *) = NULL;\n" - "+\tvoid *old_dev;\n" - "+\n" - "+\tBUG_ON(!hook || !hook->handler);\n" - "+\n" - "+\tdescr = get_descr(func);\n" - "+\tif (descr->hook.handler == hook->handler) {\n" - "+\t\told_release = descr->hook.release;\n" - "+\t\told_dev = descr->dev;\n" - "+\t\treset_hook_init(&descr->hook);\n" - "+\t}\n" - "+\tput_descr(descr);\n" - "+\n" - "+\tif (old_release)\n" - "+\t\told_release(old_dev);\n" - "+}\n" - "+EXPORT_SYMBOL_GPL(unset_machine_reset);\n" - "+\n" - "+int isset_machine_reset(enum reset_func func, void *dev)\n" - "+{\n" - "+\tstruct reset_descr *descr = get_descr(func);\n" - "+\tint ret = descr->hook.handler && (!dev || descr->dev == dev);\n" - "+\tput_descr(descr);\n" - "+\treturn ret;\n" - "+}\n" - "+EXPORT_SYMBOL_GPL(isset_machine_reset);\n" - "Index: b/kernel/power/Kconfig\n" - "===================================================================\n" - "--- a/kernel/power/Kconfig\n" - "+++ b/kernel/power/Kconfig\n" - "@@ -293,3 +293,7 @@ config PM_GENERIC_DOMAINS_RUNTIME\n" - " config CPU_PM\n" - " \tbool\n" - " \tdepends on SUSPEND || CPU_IDLE\n" - "+\n" - "+config MACHINE_RESET\n" - "+\tbool\n" - "+\tdefault n\n" - "Index: b/kernel/reboot.c\n" - "===================================================================\n" - "--- a/kernel/reboot.c\n" - "+++ b/kernel/reboot.c\n" - "@@ -12,6 +12,7 @@\n" - " #include <linux/kmod.h>\n" - " #include <linux/kmsg_dump.h>\n" - " #include <linux/reboot.h>\n" - "+#include <linux/machine_reset.h>\n" - " #include <linux/suspend.h>\n" - " #include <linux/syscalls.h>\n" - " #include <linux/syscore_ops.h>\n" - "@@ -178,6 +179,8 @@ void kernel_power_off(void)\n" - " \tkernel_shutdown_prepare(SYSTEM_POWER_OFF);\n" - " \tif (pm_power_off_prepare)\n" - " \t\tpm_power_off_prepare();\n" - "+\telse\n" - "+\t\tdefault_power_off_prepare();\n" - " \tmigrate_to_reboot_cpu();\n" - " \tsyscore_shutdown();\n" - " \tpr_emerg(\"Power down\\n\");" + "An embedded and charset-unspecified text was scrubbed...\n" + "Name: machine-reset-handling.patch\n" + URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20131031/2fbc9da9/attachment.ksh> -acfbcd2e354162e695ad2914296c9dc7595061028aec99e5f56d7de4f674db9c +b86bf48b7e5baf99b2b5c6c1394d293ad19139232d1c06b01e4ad20301a77ccc
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.