aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ar71xx/patches-2.6.26/902-mips_clocksource_init_war.patch
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2008-07-28 09:48:29 +0000
committerGabor Juhos <juhosg@openwrt.org>2008-07-28 09:48:29 +0000
commit1a1bdc1fe96a044c7204a1518a894182f224110e (patch)
tree9b117644af2ddc2bc2e458fd7f613efbe4a15762 /target/linux/ar71xx/patches-2.6.26/902-mips_clocksource_init_war.patch
parent84f5308f97c7efb5816976b41c28a1e43230d56b (diff)
downloadupstream-1a1bdc1fe96a044c7204a1518a894182f224110e.tar.gz
upstream-1a1bdc1fe96a044c7204a1518a894182f224110e.tar.bz2
upstream-1a1bdc1fe96a044c7204a1518a894182f224110e.zip
[ar71xx] update to 2.6.26
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@11968 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar71xx/patches-2.6.26/902-mips_clocksource_init_war.patch')
-rw-r--r--target/linux/ar71xx/patches-2.6.26/902-mips_clocksource_init_war.patch45
1 files changed, 45 insertions, 0 deletions
diff --git a/target/linux/ar71xx/patches-2.6.26/902-mips_clocksource_init_war.patch b/target/linux/ar71xx/patches-2.6.26/902-mips_clocksource_init_war.patch
new file mode 100644
index 0000000000..7c5125f933
--- /dev/null
+++ b/target/linux/ar71xx/patches-2.6.26/902-mips_clocksource_init_war.patch
@@ -0,0 +1,45 @@
+--- a/include/asm-mips/hazards.h
++++ b/include/asm-mips/hazards.h
+@@ -64,7 +64,7 @@
+ _ehb
+ )
+ ASMMACRO(back_to_back_c0_hazard,
+- _ehb
++ _ssnop; _ssnop; _ssnop; _ehb
+ )
+ /*
+ * gcc has a tradition of misscompiling the previous construct using the
+--- a/arch/mips/kernel/cevt-r4k.c
++++ b/arch/mips/kernel/cevt-r4k.c
+@@ -187,7 +187,7 @@
+ */
+ if (c0_compare_int_pending()) {
+ write_c0_compare(read_c0_count());
+- irq_disable_hazard();
++ back_to_back_c0_hazard();
+ if (c0_compare_int_pending())
+ return 0;
+ }
+@@ -196,7 +196,7 @@
+ cnt = read_c0_count();
+ cnt += delta;
+ write_c0_compare(cnt);
+- irq_disable_hazard();
++ back_to_back_c0_hazard();
+ if ((int)(read_c0_count() - cnt) < 0)
+ break;
+ /* increase delta if the timer was already expired */
+@@ -205,11 +205,12 @@
+ while ((int)(read_c0_count() - cnt) <= 0)
+ ; /* Wait for expiry */
+
++ back_to_back_c0_hazard();
+ if (!c0_compare_int_pending())
+ return 0;
+
+ write_c0_compare(read_c0_count());
+- irq_disable_hazard();
++ back_to_back_c0_hazard();
+ if (c0_compare_int_pending())
+ return 0;
+