diff for duplicates of <5375091D.3010607@ti.com> diff --git a/a/1.txt b/N1/1.txt index acf9845..48e2b86 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -145,3 +145,11 @@ index 01fc710..2498ab0 100644 } -- 1.7.9.5 + +-------------- next part -------------- +A non-text attachment was scrubbed... +Name: 0001-ARM-OMAP4-Fix-the-boot-regression-with-CPU_IDLE-enab.patch +Type: text/x-diff +Size: 4450 bytes +Desc: not available +URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140515/2fa821ee/attachment-0001.bin> diff --git a/a/2.hdr b/a/2.hdr deleted file mode 100644 index 6a30481..0000000 --- a/a/2.hdr +++ /dev/null @@ -1,6 +0,0 @@ -Content-Type: text/x-diff; - name="0001-ARM-OMAP4-Fix-the-boot-regression-with-CPU_IDLE-enab.patch" -Content-Transfer-Encoding: 7bit -Content-Disposition: attachment; - filename*0="0001-ARM-OMAP4-Fix-the-boot-regression-with-CPU_IDLE-enab.pa"; - filename*1="tch" diff --git a/a/2.txt b/a/2.txt deleted file mode 100644 index 4c781a0..0000000 --- a/a/2.txt +++ /dev/null @@ -1,117 +0,0 @@ ->From bb3b82cc5645b83bedf1343d03cc956f27f6fc83 Mon Sep 17 00:00:00 2001 -From: Santosh Shilimkar <santosh.shilimkar@ti.com> -Date: Mon, 12 May 2014 17:37:59 -0400 -Subject: [PATCH] ARM: OMAP4: Fix the boot regression with CPU_IDLE enabled - -On OMAP4 panda board, there have been several bug reports about boot -hang and lock-ups with CPU_IDLE enabled. The root cause of the issue -is missing interrupts while in idle state. Commit cb7094e8 {cpuidle / omap4 : -use CPUIDLE_FLAG_TIMER_STOP flag} moved the broadcast notifiers to common -code for right reasons but on OMAP4 which suffers from a nasty ROM code -bug with GIC, commit ff999b8a {ARM: OMAP4460: Workaround for ROM bug ..}, -we loose interrupts which leads to issues like lock-up, hangs etc. - -Patch reverts commit cb7094 {cpuidle / omap4 : use CPUIDLE_FLAG_TIMER_STOP -flag} and 54769d6 {cpuidle: OMAP4: remove timer broadcast initialization} to -avoid the issue. With this change, OMAP4 panda boards, the mentioned -issues are getting fixed. We no longer loose interrupts which was the cause -of the regression. - -Cc: Roger Quadros <rogerq@ti.com> -Cc: Kevin Hilman <khilman@linaro.org> -Cc: Tony Lindgren <tony@atomide.com> -Cc: Daniel Lezcano <daniel.lezcano@linaro.org> -Reported-tested-by: Roger Quadros <rogerq@ti.com> -Reported-tested-by: Kevin Hilman <khilman@linaro.org> -Tested-by: Tony Lindgren <tony@atomide.com> -Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> ---- - arch/arm/mach-omap2/cpuidle44xx.c | 25 +++++++++++++++++++++---- - 1 file changed, 21 insertions(+), 4 deletions(-) - -diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c -index 01fc710..2498ab0 100644 ---- a/arch/arm/mach-omap2/cpuidle44xx.c -+++ b/arch/arm/mach-omap2/cpuidle44xx.c -@@ -14,6 +14,7 @@ - #include <linux/cpuidle.h> - #include <linux/cpu_pm.h> - #include <linux/export.h> -+#include <linux/clockchips.h> - - #include <asm/cpuidle.h> - #include <asm/proc-fns.h> -@@ -83,6 +84,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, - { - struct idle_statedata *cx = state_ptr + index; - u32 mpuss_can_lose_context = 0; -+ int cpu_id = smp_processor_id(); - - /* - * CPU0 has to wait and stay ON until CPU1 is OFF state. -@@ -110,6 +112,8 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, - mpuss_can_lose_context = (cx->mpu_state == PWRDM_POWER_RET) && - (cx->mpu_logic_state == PWRDM_POWER_OFF); - -+ clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &cpu_id); -+ - /* - * Call idle CPU PM enter notifier chain so that - * VFP and per CPU interrupt context is saved. -@@ -165,6 +169,8 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, - if (dev->cpu == 0 && mpuss_can_lose_context) - cpu_cluster_pm_exit(); - -+ clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &cpu_id); -+ - fail: - cpuidle_coupled_parallel_barrier(dev, &abort_barrier); - cpu_done[dev->cpu] = false; -@@ -172,6 +178,16 @@ fail: - return index; - } - -+/* -+ * For each cpu, setup the broadcast timer because local timers -+ * stops for the states above C1. -+ */ -+static void omap_setup_broadcast_timer(void *arg) -+{ -+ int cpu = smp_processor_id(); -+ clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ON, &cpu); -+} -+ - static struct cpuidle_driver omap4_idle_driver = { - .name = "omap4_idle", - .owner = THIS_MODULE, -@@ -189,8 +205,7 @@ static struct cpuidle_driver omap4_idle_driver = { - /* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */ - .exit_latency = 328 + 440, - .target_residency = 960, -- .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED | -- CPUIDLE_FLAG_TIMER_STOP, -+ .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED, - .enter = omap_enter_idle_coupled, - .name = "C2", - .desc = "CPUx OFF, MPUSS CSWR", -@@ -199,8 +214,7 @@ static struct cpuidle_driver omap4_idle_driver = { - /* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */ - .exit_latency = 460 + 518, - .target_residency = 1100, -- .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED | -- CPUIDLE_FLAG_TIMER_STOP, -+ .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED, - .enter = omap_enter_idle_coupled, - .name = "C3", - .desc = "CPUx OFF, MPUSS OSWR", -@@ -231,5 +245,8 @@ int __init omap4_idle_init(void) - if (!cpu_clkdm[0] || !cpu_clkdm[1]) - return -ENODEV; - -+ /* Configure the broadcast timer on each cpu */ -+ on_each_cpu(omap_setup_broadcast_timer, NULL, 1); -+ - return cpuidle_register(&omap4_idle_driver, cpu_online_mask); - } --- -1.7.9.5 diff --git a/a/content_digest b/N1/content_digest index 561b494..e176f1a 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -7,19 +7,11 @@ "ref\053748371.5030704@linaro.org\0" "ref\05374C07C.1070400@linaro.org\0" "ref\020140515183247.GF23659@atomide.com\0" - "From\0Santosh Shilimkar <santosh.shilimkar@ti.com>\0" - "Subject\0Re: RCU stall on panda\0" + "From\0santosh.shilimkar@ti.com (Santosh Shilimkar)\0" + "Subject\0RCU stall on panda\0" "Date\0Thu, 15 May 2014 14:36:13 -0400\0" - "To\0Tony Lindgren <tony@atomide.com>" - " Alex Shi <alex.shi@linaro.org>\0" - "Cc\0Daniel Lezcano <daniel.lezcano@linaro.org>" - Paul E. McKenney <paulmck@linux.vnet.ibm.com> - naresh.kamboju@linaro.org Kamboju <naresh.kamboju@linaro.org> - Linaro Kernel <linaro-kernel@lists.linaro.org> - LAK <linux-arm-kernel@lists.infradead.org> - Mark Brown <broonie@linaro.org> - " linux-omap@vger.kernel.org\0" - "\01:1\0" + "To\0linux-arm-kernel@lists.infradead.org\0" + "\00:1\0" "b\0" "On Thursday 15 May 2014 02:32 PM, Tony Lindgren wrote:\n" "> * Alex Shi <alex.shi@linaro.org> [140515 06:27]:\n" @@ -167,126 +159,14 @@ " \treturn cpuidle_register(&omap4_idle_driver, cpu_online_mask);\n" " }\n" "-- \n" - 1.7.9.5 - "\01:2\0" - "fn\00001-ARM-OMAP4-Fix-the-boot-regression-with-CPU_IDLE-enab.patch\0" - "b\0" - ">From bb3b82cc5645b83bedf1343d03cc956f27f6fc83 Mon Sep 17 00:00:00 2001\n" - "From: Santosh Shilimkar <santosh.shilimkar@ti.com>\n" - "Date: Mon, 12 May 2014 17:37:59 -0400\n" - "Subject: [PATCH] ARM: OMAP4: Fix the boot regression with CPU_IDLE enabled\n" - "\n" - "On OMAP4 panda board, there have been several bug reports about boot\n" - "hang and lock-ups with CPU_IDLE enabled. The root cause of the issue\n" - "is missing interrupts while in idle state. Commit cb7094e8 {cpuidle / omap4 :\n" - "use CPUIDLE_FLAG_TIMER_STOP flag} moved the broadcast notifiers to common\n" - "code for right reasons but on OMAP4 which suffers from a nasty ROM code\n" - "bug with GIC, commit ff999b8a {ARM: OMAP4460: Workaround for ROM bug ..},\n" - "we loose interrupts which leads to issues like lock-up, hangs etc.\n" - "\n" - "Patch reverts commit cb7094 {cpuidle / omap4 : use CPUIDLE_FLAG_TIMER_STOP\n" - "flag} and 54769d6 {cpuidle: OMAP4: remove timer broadcast initialization} to\n" - "avoid the issue. With this change, OMAP4 panda boards, the mentioned\n" - "issues are getting fixed. We no longer loose interrupts which was the cause\n" - "of the regression.\n" - "\n" - "Cc: Roger Quadros <rogerq@ti.com>\n" - "Cc: Kevin Hilman <khilman@linaro.org>\n" - "Cc: Tony Lindgren <tony@atomide.com>\n" - "Cc: Daniel Lezcano <daniel.lezcano@linaro.org>\n" - "Reported-tested-by: Roger Quadros <rogerq@ti.com>\n" - "Reported-tested-by: Kevin Hilman <khilman@linaro.org>\n" - "Tested-by: Tony Lindgren <tony@atomide.com>\n" - "Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>\n" - "---\n" - " arch/arm/mach-omap2/cpuidle44xx.c | 25 +++++++++++++++++++++----\n" - " 1 file changed, 21 insertions(+), 4 deletions(-)\n" + "1.7.9.5\n" "\n" - "diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c\n" - "index 01fc710..2498ab0 100644\n" - "--- a/arch/arm/mach-omap2/cpuidle44xx.c\n" - "+++ b/arch/arm/mach-omap2/cpuidle44xx.c\n" - "@@ -14,6 +14,7 @@\n" - " #include <linux/cpuidle.h>\n" - " #include <linux/cpu_pm.h>\n" - " #include <linux/export.h>\n" - "+#include <linux/clockchips.h>\n" - " \n" - " #include <asm/cpuidle.h>\n" - " #include <asm/proc-fns.h>\n" - "@@ -83,6 +84,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,\n" - " {\n" - " \tstruct idle_statedata *cx = state_ptr + index;\n" - " \tu32 mpuss_can_lose_context = 0;\n" - "+\tint cpu_id = smp_processor_id();\n" - " \n" - " \t/*\n" - " \t * CPU0 has to wait and stay ON until CPU1 is OFF state.\n" - "@@ -110,6 +112,8 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,\n" - " \tmpuss_can_lose_context = (cx->mpu_state == PWRDM_POWER_RET) &&\n" - " \t\t\t\t (cx->mpu_logic_state == PWRDM_POWER_OFF);\n" - " \n" - "+\tclockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &cpu_id);\n" - "+\n" - " \t/*\n" - " \t * Call idle CPU PM enter notifier chain so that\n" - " \t * VFP and per CPU interrupt context is saved.\n" - "@@ -165,6 +169,8 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,\n" - " \tif (dev->cpu == 0 && mpuss_can_lose_context)\n" - " \t\tcpu_cluster_pm_exit();\n" - " \n" - "+\tclockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &cpu_id);\n" - "+\n" - " fail:\n" - " \tcpuidle_coupled_parallel_barrier(dev, &abort_barrier);\n" - " \tcpu_done[dev->cpu] = false;\n" - "@@ -172,6 +178,16 @@ fail:\n" - " \treturn index;\n" - " }\n" - " \n" - "+/*\n" - "+ * For each cpu, setup the broadcast timer because local timers\n" - "+ * stops for the states above C1.\n" - "+ */\n" - "+static void omap_setup_broadcast_timer(void *arg)\n" - "+{\n" - "+\tint cpu = smp_processor_id();\n" - "+\tclockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ON, &cpu);\n" - "+}\n" - "+\n" - " static struct cpuidle_driver omap4_idle_driver = {\n" - " \t.name\t\t\t\t= \"omap4_idle\",\n" - " \t.owner\t\t\t\t= THIS_MODULE,\n" - "@@ -189,8 +205,7 @@ static struct cpuidle_driver omap4_idle_driver = {\n" - " \t\t\t/* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */\n" - " \t\t\t.exit_latency = 328 + 440,\n" - " \t\t\t.target_residency = 960,\n" - "-\t\t\t.flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED |\n" - "-\t\t\t CPUIDLE_FLAG_TIMER_STOP,\n" - "+\t\t\t.flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED,\n" - " \t\t\t.enter = omap_enter_idle_coupled,\n" - " \t\t\t.name = \"C2\",\n" - " \t\t\t.desc = \"CPUx OFF, MPUSS CSWR\",\n" - "@@ -199,8 +214,7 @@ static struct cpuidle_driver omap4_idle_driver = {\n" - " \t\t\t/* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */\n" - " \t\t\t.exit_latency = 460 + 518,\n" - " \t\t\t.target_residency = 1100,\n" - "-\t\t\t.flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED |\n" - "-\t\t\t CPUIDLE_FLAG_TIMER_STOP,\n" - "+\t\t\t.flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED,\n" - " \t\t\t.enter = omap_enter_idle_coupled,\n" - " \t\t\t.name = \"C3\",\n" - " \t\t\t.desc = \"CPUx OFF, MPUSS OSWR\",\n" - "@@ -231,5 +245,8 @@ int __init omap4_idle_init(void)\n" - " \tif (!cpu_clkdm[0] || !cpu_clkdm[1])\n" - " \t\treturn -ENODEV;\n" - " \n" - "+\t/* Configure the broadcast timer on each cpu */\n" - "+\ton_each_cpu(omap_setup_broadcast_timer, NULL, 1);\n" - "+\n" - " \treturn cpuidle_register(&omap4_idle_driver, cpu_online_mask);\n" - " }\n" - "-- \n" - 1.7.9.5 + "-------------- next part --------------\n" + "A non-text attachment was scrubbed...\n" + "Name: 0001-ARM-OMAP4-Fix-the-boot-regression-with-CPU_IDLE-enab.patch\n" + "Type: text/x-diff\n" + "Size: 4450 bytes\n" + "Desc: not available\n" + URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140515/2fa821ee/attachment-0001.bin> -be7165ac5bc1494b8cf26209840a13a8f8eb0cf216f17ff7581f23f8d9422d4c +1a074f56080b356b58a94d665303c715bd5f238fffbb8e2879b2adc72fff1ed9
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.