diff for duplicates of <87sjzzzbkj.fsf@deeprootsystems.com> diff --git a/a/1.txt b/N1/1.txt index 5036cc5..56c1c75 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,105 +1 @@ [updated version of the patch, fixing issues raised by Vishwa] - ->From 1661b0f7ad614d221f90eed590040f2cca01c265 Mon Sep 17 00:00:00 2001 -From: Kevin Hilman <khilman@deeprootsystems.com> -Date: Thu, 23 Sep 2010 09:54:41 -0700 -Subject: [PATCH] OMAP3: CPUidle: trigger early idle notification call chain - -During the early part of the CPUidle path (state selection by the -governer, checking for device activity, etc.) there is no (good) -reason to have interrupts disabled. - -Therefore, enable interrupts early in the CPUidle path and then -trigger the "early" idle notifier call chain after device activity -checks and the next power states have been programmed. Interrupts are -then (re)disabled after the final state is selected. - -Also adjust the timing measurements reported back to the CPUidle core -to ensure that time spent in the idle notifiers is included as part of -the accounted time. - -Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> ---- - arch/arm/mach-omap2/cpuidle34xx.c | 33 +++++++++++++++++++++++++++------ - 1 files changed, 27 insertions(+), 6 deletions(-) - -diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c -index 0d50b45..6c806a8 100644 ---- a/arch/arm/mach-omap2/cpuidle34xx.c -+++ b/arch/arm/mach-omap2/cpuidle34xx.c -@@ -30,6 +30,7 @@ - #include <plat/powerdomain.h> - #include <plat/clockdomain.h> - #include <plat/serial.h> -+#include <plat/common.h> - - #include "pm.h" - #include "control.h" -@@ -128,12 +129,14 @@ static int omap3_enter_idle(struct cpuidle_device *dev, - /* Used to keep track of the total time in idle */ - getnstimeofday(&ts_preidle); - -- local_irq_disable(); -- local_fiq_disable(); -- - pwrdm_set_next_pwrst(mpu_pd, mpu_state); - pwrdm_set_next_pwrst(core_pd, core_state); - -+ omap_early_idle_notifier_start(); -+ -+ local_irq_disable(); -+ local_fiq_disable(); -+ - if (omap_irq_pending() || need_resched()) - goto return_sleep_time; - -@@ -151,12 +154,14 @@ static int omap3_enter_idle(struct cpuidle_device *dev, - } - - return_sleep_time: -- getnstimeofday(&ts_postidle); -- ts_idle = timespec_sub(ts_postidle, ts_preidle); -- - local_irq_enable(); - local_fiq_enable(); - -+ omap_early_idle_notifier_end(); -+ -+ getnstimeofday(&ts_postidle); -+ ts_idle = timespec_sub(ts_postidle, ts_preidle); -+ - return ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * USEC_PER_SEC; - } - -@@ -459,6 +464,21 @@ struct cpuidle_driver omap3_idle_driver = { - .owner = THIS_MODULE, - }; - -+static int omap3_idle_prepare(struct cpuidle_device *dev) -+{ -+ /* -+ * Enable interrupts during the early part of the CPUidle path. -+ * They are later (re)disabled when the final state is selected. -+ * -+ * The primary reason for this is to enable non-atomic idle -+ * notifications to drivers that want to coordinate device -+ * idle transitions with CPU idle transitions. -+ */ -+ local_irq_enable(); -+ -+ return 0; -+} -+ - /** - * omap3_idle_init - Init routine for OMAP3 idle - * -@@ -482,6 +502,7 @@ int __init omap3_idle_init(void) - - dev = &per_cpu(omap3_idle_dev, smp_processor_id()); - -+ dev->prepare = omap3_idle_prepare; - for (i = OMAP3_STATE_C1; i < OMAP3_MAX_STATES; i++) { - cx = &omap3_power_states[i]; - state = &dev->states[count]; --- -1.7.2.1 diff --git a/a/content_digest b/N1/content_digest index 2ace951..efcffce 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,116 +1,11 @@ "ref\01287617926-24308-1-git-send-email-khilman@deeprootsystems.com\0" "ref\01287617926-24308-3-git-send-email-khilman@deeprootsystems.com\0" - "From\0Kevin Hilman <khilman@deeprootsystems.com>\0" - "Subject\0Re: [RFC/PATCH 2/2] OMAP3: CPUidle: trigger early idle notification call chain\0" + "From\0khilman@deeprootsystems.com (Kevin Hilman)\0" + "Subject\0[RFC/PATCH 2/2] OMAP3: CPUidle: trigger early idle notification call chain\0" "Date\0Thu, 21 Oct 2010 10:43:08 -0700\0" - "To\0linux-omap@vger.kernel.org\0" - "Cc\0linux-arm-kernel@lists.infradead.org\0" + "To\0linux-arm-kernel@lists.infradead.org\0" "\00:1\0" "b\0" - "[updated version of the patch, fixing issues raised by Vishwa]\n" - "\n" - ">From 1661b0f7ad614d221f90eed590040f2cca01c265 Mon Sep 17 00:00:00 2001\n" - "From: Kevin Hilman <khilman@deeprootsystems.com>\n" - "Date: Thu, 23 Sep 2010 09:54:41 -0700\n" - "Subject: [PATCH] OMAP3: CPUidle: trigger early idle notification call chain\n" - "\n" - "During the early part of the CPUidle path (state selection by the\n" - "governer, checking for device activity, etc.) there is no (good)\n" - "reason to have interrupts disabled.\n" - "\n" - "Therefore, enable interrupts early in the CPUidle path and then\n" - "trigger the \"early\" idle notifier call chain after device activity\n" - "checks and the next power states have been programmed. Interrupts are\n" - "then (re)disabled after the final state is selected.\n" - "\n" - "Also adjust the timing measurements reported back to the CPUidle core\n" - "to ensure that time spent in the idle notifiers is included as part of\n" - "the accounted time.\n" - "\n" - "Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>\n" - "---\n" - " arch/arm/mach-omap2/cpuidle34xx.c | 33 +++++++++++++++++++++++++++------\n" - " 1 files changed, 27 insertions(+), 6 deletions(-)\n" - "\n" - "diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c\n" - "index 0d50b45..6c806a8 100644\n" - "--- a/arch/arm/mach-omap2/cpuidle34xx.c\n" - "+++ b/arch/arm/mach-omap2/cpuidle34xx.c\n" - "@@ -30,6 +30,7 @@\n" - " #include <plat/powerdomain.h>\n" - " #include <plat/clockdomain.h>\n" - " #include <plat/serial.h>\n" - "+#include <plat/common.h>\n" - " \n" - " #include \"pm.h\"\n" - " #include \"control.h\"\n" - "@@ -128,12 +129,14 @@ static int omap3_enter_idle(struct cpuidle_device *dev,\n" - " \t/* Used to keep track of the total time in idle */\n" - " \tgetnstimeofday(&ts_preidle);\n" - " \n" - "-\tlocal_irq_disable();\n" - "-\tlocal_fiq_disable();\n" - "-\n" - " \tpwrdm_set_next_pwrst(mpu_pd, mpu_state);\n" - " \tpwrdm_set_next_pwrst(core_pd, core_state);\n" - " \n" - "+\tomap_early_idle_notifier_start();\n" - "+\n" - "+\tlocal_irq_disable();\n" - "+\tlocal_fiq_disable();\n" - "+\n" - " \tif (omap_irq_pending() || need_resched())\n" - " \t\tgoto return_sleep_time;\n" - " \n" - "@@ -151,12 +154,14 @@ static int omap3_enter_idle(struct cpuidle_device *dev,\n" - " \t}\n" - " \n" - " return_sleep_time:\n" - "-\tgetnstimeofday(&ts_postidle);\n" - "-\tts_idle = timespec_sub(ts_postidle, ts_preidle);\n" - "-\n" - " \tlocal_irq_enable();\n" - " \tlocal_fiq_enable();\n" - " \n" - "+\tomap_early_idle_notifier_end();\n" - "+\n" - "+\tgetnstimeofday(&ts_postidle);\n" - "+\tts_idle = timespec_sub(ts_postidle, ts_preidle);\n" - "+\n" - " \treturn ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * USEC_PER_SEC;\n" - " }\n" - " \n" - "@@ -459,6 +464,21 @@ struct cpuidle_driver omap3_idle_driver = {\n" - " \t.owner = \tTHIS_MODULE,\n" - " };\n" - " \n" - "+static int omap3_idle_prepare(struct cpuidle_device *dev)\n" - "+{\n" - "+\t/*\n" - "+\t * Enable interrupts during the early part of the CPUidle path.\n" - "+\t * They are later (re)disabled when the final state is selected.\n" - "+\t *\n" - "+\t * The primary reason for this is to enable non-atomic idle\n" - "+\t * notifications to drivers that want to coordinate device\n" - "+\t * idle transitions with CPU idle transitions.\n" - "+\t */\n" - "+\tlocal_irq_enable();\n" - "+\n" - "+\treturn 0;\n" - "+}\n" - "+\n" - " /**\n" - " * omap3_idle_init - Init routine for OMAP3 idle\n" - " *\n" - "@@ -482,6 +502,7 @@ int __init omap3_idle_init(void)\n" - " \n" - " \tdev = &per_cpu(omap3_idle_dev, smp_processor_id());\n" - " \n" - "+\tdev->prepare = omap3_idle_prepare;\n" - " \tfor (i = OMAP3_STATE_C1; i < OMAP3_MAX_STATES; i++) {\n" - " \t\tcx = &omap3_power_states[i];\n" - " \t\tstate = &dev->states[count];\n" - "-- \n" - 1.7.2.1 + [updated version of the patch, fixing issues raised by Vishwa] -b672f09e76e039f5343f5c13aeef8bfd9604b1c586d3e36b20c0d812130bb815 +13038113d7423f74c88e32106b31bb99159313bdab19af0183f72149758ddb10
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.