diff options
12 files changed, 18 insertions, 388 deletions
diff --git a/target/linux/generic/patches-3.9/001-mips_fix_code_non_dsp_cpu.patch b/target/linux/generic/patches-3.9/001-mips_fix_code_non_dsp_cpu.patch deleted file mode 100644 index 8d3507f14..000000000 --- a/target/linux/generic/patches-3.9/001-mips_fix_code_non_dsp_cpu.patch +++ /dev/null @@ -1,368 +0,0 @@ -From f9b4e05597e636a550af8392e80b15f79d9f9e11 Mon Sep 17 00:00:00 2001 -From: Florian Fainelli <florian@openwrt.org> -Date: Thu, 14 Mar 2013 14:07:20 +0100 -Subject: [PATCH] MIPS: fix code generation for non-DSP capable CPUs - -Commit 32a7ede (MIPS: dsp: Add assembler support for DSP ASEs) has -enabled the use of DSP ASE specific instructions such as rddsp and wrdsp -under the idea that all code path that will make use of these two -instructions are properly checking for cpu_has_dsp to ensure that the -particular CPU we are running on *actually* supports DSP ASE. - -This commit actually causes the following oops on QEMU Malta emulating a -MIPS 24Kc without the DSP ASE implemented: - -[ 7.960000] Reserved instruction in kernel -[ 7.960000] Cpu 0 -[ 7.960000] $ 0 : 00000000 00000000 00000014 00000005 -[ 7.960000] $ 4 : 8fc2de48 00000001 00000000 8f59ddb0 -[ 7.960000] $ 8 : 8f5ceec4 00000018 00000c00 00800000 -[ 7.960000] $12 : 00000100 00000200 00000000 00457b84 -[ 7.960000] $16 : 00000000 8fc2ba78 8f4ec980 00000001 -[ 7.960000] $20 : 80418f90 00000000 00000000 000002dd -[ 7.960000] $24 : 0000009c 7730d7b8 -[ 7.960000] $28 : 8f59c000 8f59dd38 00000001 80104248 -[ 7.960000] Hi : 0000001d -[ 7.960000] Lo : 0000000b -[ 7.960000] epc : 801041ec thread_saved_pc+0x2c/0x38 -[ 7.960000] Not tainted -[ 7.960000] ra : 80104248 get_wchan+0x48/0xac -[ 7.960000] Status: 1000b703 KERNEL EXL IE -[ 7.960000] Cause : 10800028 -[ 7.960000] PrId : 00019300 (MIPS 24Kc) -[ 7.960000] Modules linked in: -[ 7.960000] Process killall (pid: 1574, threadinfo=8f59c000, -task=8fd14558, tls=773aa440) -[ 7.960000] Stack : 8fc2ba78 8012b008 0000000c 0000001d 00000000 -00000000 8f58a380 - 8f58a380 8fc2ba78 80202668 8f59de78 8f468600 8f59de28 -801b2a3c 8f59df00 8f98ba20 74696e69 - 8f468600 8f59de28 801b7308 0081c007 00000000 00000000 -00000000 00000000 00000000 00000000 - 00000000 8fc2bbb4 00000001 0000001d 0000000b 77f038cc -7fe80648 ffffffff ffffffff 00000000 - 00000001 0016e000 00000000 ... -[ 7.960000] Call Trace: -[ 7.960000] [<801041ec>] thread_saved_pc+0x2c/0x38 -[ 7.960000] [<80104248>] get_wchan+0x48/0xac - -The disassembly of thread_saved_pc points to the following: -000006d0 <thread_saved_pc>: - 6d0: 8c820208 lw v0,520(a0) - 6d4: 3c030000 lui v1,0x0 - 6d8: 24630000 addiu v1,v1,0 - 6dc: 10430008 beq v0,v1,700 <thread_saved_pc+0x30> - 6e0: 00000000 nop - 6e4: 3c020000 lui v0,0x0 - 6e8: 8c43000c lw v1,12(v0) - 6ec: 04620004 bltzl v1,700 <thread_saved_pc+0x30> - 6f0: 00001021 move v0,zero - 6f4: 8c840200 lw a0,512(a0) - 6f8: 00031080 sll v0,v1,0x2 - 6fc: 7c44100a lwx v0,a0(v0) <------------ - 700: 03e00008 jr ra - 704: 00000000 nop - -If we specifically disable -mdsp/-mdspr2 for arch/mips/kernel/process.o, -we get the following (non-crashing) assembly: - -00000708 <thread_saved_pc>: - 708: 8c820208 lw v0,520(a0) - 70c: 3c030000 lui v1,0x0 - 710: 24630000 addiu v1,v1,0 - 714: 10430009 beq v0,v1,73c <thread_saved_pc+0x34> - 718: 00000000 nop - 71c: 3c020000 lui v0,0x0 - 720: 8c42000c lw v0,12(v0) - 724: 04420005 bltzl v0,73c <thread_saved_pc+0x34> - 728: 00001021 move v0,zero - 72c: 8c830200 lw v1,512(a0) - 730: 00021080 sll v0,v0,0x2 - 734: 00431021 addu v0,v0,v1 - 738: 8c420000 lw v0,0(v0) - 73c: 03e00008 jr ra - 740: 00000000 nop - -The specific line that leads a different assembly being produced is: - -unsigned long thread_saved_pc(struct task_struct *tsk) -... - return ((unsigned long *)t->reg29)[schedule_mfi.pc_offset]; <--- - -The problem here is that the compiler was given the right to use DSP -instructions with the -mdsp / -mdspr2 command-line switches and -performed some optimization for us and used DSP ASE instructions where -we are not checking that the running CPU actually supports DSP ASE. - -This patch fixes the issue by partially reverting commit 32a7ede for -arch/mips/kernel/Makefile in order to remove the -mdsp / -mdspr2 -compiler command-line switches such that we are now guaranteed that the -compiler will not optimize using DSP ASE reserved instructions. We also -need to fixup the rddsp/wrdsp and m{t,h}{hi,lo}{0,1,2,3} macros in -arch/mips/include/asm/mipsregs.h to tell the assembler that we are going -to explicitely use DSP ASE reserved instructions. - -Signed-off-by: Florian Fainelli <florian@openwrt.org> ---- -Ralf, John, - -This should be part of your 3.9-rc3 pull request if I may ;) - - arch/mips/include/asm/mipsregs.h | 209 ++++++++++++++++++++++++++++++++++---- - arch/mips/kernel/Makefile | 14 --- - 2 files changed, 190 insertions(+), 33 deletions(-) - ---- a/arch/mips/include/asm/mipsregs.h -+++ b/arch/mips/include/asm/mipsregs.h -@@ -1166,7 +1166,10 @@ do { \ - unsigned int __dspctl; \ - \ - __asm__ __volatile__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ - " rddsp %0, %x1 \n" \ -+ " .set pop \n" \ - : "=r" (__dspctl) \ - : "i" (mask)); \ - __dspctl; \ -@@ -1175,30 +1178,198 @@ do { \ - #define wrdsp(val, mask) \ - do { \ - __asm__ __volatile__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ - " wrdsp %0, %x1 \n" \ -+ " .set pop \n" \ - : \ - : "r" (val), "i" (mask)); \ - } while (0) - --#define mflo0() ({ long mflo0; __asm__("mflo %0, $ac0" : "=r" (mflo0)); mflo0;}) --#define mflo1() ({ long mflo1; __asm__("mflo %0, $ac1" : "=r" (mflo1)); mflo1;}) --#define mflo2() ({ long mflo2; __asm__("mflo %0, $ac2" : "=r" (mflo2)); mflo2;}) --#define mflo3() ({ long mflo3; __asm__("mflo %0, $ac3" : "=r" (mflo3)); mflo3;}) -- --#define mfhi0() ({ long mfhi0; __asm__("mfhi %0, $ac0" : "=r" (mfhi0)); mfhi0;}) --#define mfhi1() ({ long mfhi1; __asm__("mfhi %0, $ac1" : "=r" (mfhi1)); mfhi1;}) --#define mfhi2() ({ long mfhi2; __asm__("mfhi %0, $ac2" : "=r" (mfhi2)); mfhi2;}) --#define mfhi3() ({ long mfhi3; __asm__("mfhi %0, $ac3" : "=r" (mfhi3)); mfhi3;}) -- --#define mtlo0(x) __asm__("mtlo %0, $ac0" ::"r" (x)) --#define mtlo1(x) __asm__("mtlo %0, $ac1" ::"r" (x)) --#define mtlo2(x) __asm__("mtlo %0, $ac2" ::"r" (x)) --#define mtlo3(x) __asm__("mtlo %0, $ac3" ::"r" (x)) -- --#define mthi0(x) __asm__("mthi %0, $ac0" ::"r" (x)) --#define mthi1(x) __asm__("mthi %0, $ac1" ::"r" (x)) --#define mthi2(x) __asm__("mthi %0, $ac2" ::"r" (x)) --#define mthi3(x) __asm__("mthi %0, $ac3" ::"r" (x)) -+#define mflo0() \ -+({ \ -+ long mflo0; \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mflo %0, $ac0 \n" \ -+ " .set pop \n" \ -+ : "=r" (mflo0)); \ -+ mflo0; \ -+}) -+ -+#define mflo1() \ -+({ \ -+ long mflo1; \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mflo %0, $ac1 \n" \ -+ " .set pop \n" \ -+ : "=r" (mflo1)); \ -+ mflo1; \ -+}) -+ -+#define mflo2() \ -+({ \ -+ long mflo2; \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mflo %0, $ac2 \n" \ -+ " .set pop \n" \ -+ : "=r" (mflo2)); \ -+ mflo2; \ -+}) -+ -+#define mflo3() \ -+({ \ -+ long mflo3; \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mflo %0, $ac3 \n" \ -+ " .set pop \n" \ -+ : "=r" (mflo3)); \ -+ mflo3; \ -+}) -+ -+#define mfhi0() \ -+({ \ -+ long mfhi0; \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mfhi %0, $ac0 \n" \ -+ " .set pop \n" \ -+ : "=r" (mfhi0)); \ -+ mfhi0; \ -+}) -+ -+#define mfhi1() \ -+({ \ -+ long mfhi1; \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mfhi %0, $ac1 \n" \ -+ " .set pop \n" \ -+ : "=r" (mfhi1)); \ -+ mfhi1; \ -+}) -+ -+#define mfhi2() \ -+({ \ -+ long mfhi2; \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mfhi %0, $ac2 \n" \ -+ " .set pop \n" \ -+ : "=r" (mfhi2)); \ -+ mfhi2; \ -+}) -+ -+#define mfhi3() \ -+({ \ -+ long mfhi3; \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mfhi %0, $ac3 \n" \ -+ " .set pop \n" \ -+ : "=r" (mfhi3)); \ -+ mfhi3; \ -+}) -+ -+ -+#define mtlo0(x) \ -+({ \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mtlo %0, $ac0 \n" \ -+ " .set pop \n" \ -+ : \ -+ : "r" (x)); \ -+}) -+ -+#define mtlo1(x) \ -+({ \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mtlo %0, $ac1 \n" \ -+ " .set pop \n" \ -+ : \ -+ : "r" (x)); \ -+}) -+ -+#define mtlo2(x) \ -+({ \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mtlo %0, $ac2 \n" \ -+ " .set pop \n" \ -+ : \ -+ : "r" (x)); \ -+}) -+ -+#define mtlo3(x) \ -+({ \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mtlo %0, $ac3 \n" \ -+ " .set pop \n" \ -+ : \ -+ : "r" (x)); \ -+}) -+ -+#define mthi0(x) \ -+({ \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mthi %0, $ac0 \n" \ -+ " .set pop \n" \ -+ : \ -+ : "r" (x)); \ -+}) -+ -+#define mthi1(x) \ -+({ \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mthi %0, $ac1 \n" \ -+ " .set pop \n" \ -+ : \ -+ : "r" (x)); \ -+}) -+ -+#define mthi2(x) \ -+({ \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mthi %0, $ac2 \n" \ -+ " .set pop \n" \ -+ : \ -+ : "r" (x)); \ -+}) -+ -+#define mthi3(x) \ -+({ \ -+ __asm__( \ -+ " .set push \n" \ -+ " .set dsp \n" \ -+ " mthi %0, $ac3 \n" \ -+ " .set pop \n" \ -+ : \ -+ : "r" (x)); \ -+}) - - #else - ---- a/arch/mips/kernel/Makefile -+++ b/arch/mips/kernel/Makefile -@@ -109,20 +109,6 @@ obj-$(CONFIG_JUMP_LABEL) += jump_label.o - ifeq ($(CONFIG_CPU_MIPSR2), y) - CFLAGS_DSP = -DHAVE_AS_DSP - --# --# Check if assembler supports DSP ASE --# --ifeq ($(call cc-option-yn,-mdsp), y) --CFLAGS_DSP += -mdsp --endif -- --# --# Check if assembler supports DSP ASE Rev2 --# --ifeq ($(call cc-option-yn,-mdspr2), y) --CFLAGS_DSP += -mdspr2 --endif -- - CFLAGS_signal.o = $(CFLAGS_DSP) - CFLAGS_signal32.o = $(CFLAGS_DSP) - CFLAGS_process.o = $(CFLAGS_DSP) diff --git a/target/linux/generic/patches-3.9/100-overlayfs.patch b/target/linux/generic/patches-3.9/100-overlayfs.patch index a4bb686e9..ae1f2f3a2 100644 --- a/target/linux/generic/patches-3.9/100-overlayfs.patch +++ b/target/linux/generic/patches-3.9/100-overlayfs.patch @@ -243,7 +243,7 @@ will be called when part or all of the page is to be removed --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -5905,6 +5905,13 @@ F: drivers/scsi/osd/ +@@ -5911,6 +5911,13 @@ F: drivers/scsi/osd/ F: include/scsi/osd_* F: fs/exofs/ @@ -335,7 +335,7 @@ goto out; --- a/fs/namespace.c +++ b/fs/namespace.c -@@ -1399,6 +1399,24 @@ void drop_collected_mounts(struct vfsmou +@@ -1403,6 +1403,24 @@ void drop_collected_mounts(struct vfsmou release_mounts(&umount_list); } @@ -3118,7 +3118,7 @@ +module_exit(ovl_exit); --- a/fs/splice.c +++ b/fs/splice.c -@@ -1308,6 +1308,7 @@ long do_splice_direct(struct file *in, l +@@ -1310,6 +1310,7 @@ long do_splice_direct(struct file *in, l return ret; } @@ -3179,7 +3179,7 @@ static inline bool execute_ok(struct inode *inode) --- a/include/linux/mount.h +++ b/include/linux/mount.h -@@ -66,6 +66,9 @@ extern void mnt_pin(struct vfsmount *mnt +@@ -68,6 +68,9 @@ extern void mnt_pin(struct vfsmount *mnt extern void mnt_unpin(struct vfsmount *mnt); extern int __mnt_is_readonly(struct vfsmount *mnt); diff --git a/target/linux/generic/patches-3.9/259-regmap_dynamic.patch b/target/linux/generic/patches-3.9/259-regmap_dynamic.patch index e1b0141a0..451a5e2f3 100644 --- a/target/linux/generic/patches-3.9/259-regmap_dynamic.patch +++ b/target/linux/generic/patches-3.9/259-regmap_dynamic.patch @@ -64,7 +64,7 @@ #include <linux/mutex.h> #include <linux/err.h> #include <linux/rbtree.h> -@@ -1777,3 +1778,5 @@ static int __init regmap_initcall(void) +@@ -1778,3 +1779,5 @@ static int __init regmap_initcall(void) return 0; } postcore_initcall(regmap_initcall); diff --git a/target/linux/generic/patches-3.9/300-mips_expose_boot_raw.patch b/target/linux/generic/patches-3.9/300-mips_expose_boot_raw.patch index 0e99045f0..bde3f25b7 100644 --- a/target/linux/generic/patches-3.9/300-mips_expose_boot_raw.patch +++ b/target/linux/generic/patches-3.9/300-mips_expose_boot_raw.patch @@ -18,7 +18,7 @@ Acked-by: Rob Landley <rob@landley.net> config CEVT_BCM1480 bool -@@ -2362,6 +2359,18 @@ config USE_OF +@@ -2361,6 +2358,18 @@ config USE_OF select OF_EARLY_FLATTREE select IRQ_DOMAIN diff --git a/target/linux/generic/patches-3.9/440-block2mtd_init.patch b/target/linux/generic/patches-3.9/440-block2mtd_init.patch index 7ea827db8..ff0f62317 100644 --- a/target/linux/generic/patches-3.9/440-block2mtd_init.patch +++ b/target/linux/generic/patches-3.9/440-block2mtd_init.patch @@ -106,7 +106,7 @@ { --- a/block/partition-generic.c +++ b/block/partition-generic.c -@@ -548,6 +548,7 @@ int invalidate_partitions(struct gendisk +@@ -549,6 +549,7 @@ int invalidate_partitions(struct gendisk return 0; } diff --git a/target/linux/generic/patches-3.9/474-mtd_mp25p80_add_pm25lq032.patch b/target/linux/generic/patches-3.9/474-mtd_mp25p80_add_pm25lq032.patch index e122cc9a9..71ef938ed 100644 --- a/target/linux/generic/patches-3.9/474-mtd_mp25p80_add_pm25lq032.patch +++ b/target/linux/generic/patches-3.9/474-mtd_mp25p80_add_pm25lq032.patch @@ -1,6 +1,6 @@ --- a/drivers/mtd/devices/m25p80.c +++ b/drivers/mtd/devices/m25p80.c -@@ -682,6 +682,7 @@ +@@ -768,6 +768,7 @@ static const struct spi_device_id m25p_i /* PMC -- pm25x "blocks" are 32K, sectors are 4K */ { "pm25lv512", INFO(0, 0, 32 * 1024, 2, SECT_4K_PMC) }, { "pm25lv010", INFO(0, 0, 32 * 1024, 4, SECT_4K_PMC) }, diff --git a/target/linux/generic/patches-3.9/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch b/target/linux/generic/patches-3.9/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch index 726c2e8b5..f6de3f937 100644 --- a/target/linux/generic/patches-3.9/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch +++ b/target/linux/generic/patches-3.9/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch @@ -30,7 +30,7 @@ /****************************************************************************/ struct m25p { -@@ -1017,7 +1023,7 @@ static int m25p_probe(struct spi_device +@@ -1018,7 +1024,7 @@ static int m25p_probe(struct spi_device flash->mtd._write = m25p80_write; /* prefer "small sector" erase if possible */ diff --git a/target/linux/generic/patches-3.9/643-bridge_remove_ipv6_dependency.patch b/target/linux/generic/patches-3.9/643-bridge_remove_ipv6_dependency.patch index 6193aa970..7410a08ab 100644 --- a/target/linux/generic/patches-3.9/643-bridge_remove_ipv6_dependency.patch +++ b/target/linux/generic/patches-3.9/643-bridge_remove_ipv6_dependency.patch @@ -49,7 +49,7 @@ int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr, unsigned char banned_flags) -@@ -4944,6 +4943,9 @@ int __init addrconf_init(void) +@@ -4965,6 +4964,9 @@ int __init addrconf_init(void) ipv6_addr_label_rtnl_register(); @@ -59,7 +59,7 @@ return 0; errout: rtnl_af_unregister(&inet6_ops); -@@ -4962,6 +4964,9 @@ void addrconf_cleanup(void) +@@ -4983,6 +4985,9 @@ void addrconf_cleanup(void) struct net_device *dev; int i; diff --git a/target/linux/generic/patches-3.9/721-phy_packets.patch b/target/linux/generic/patches-3.9/721-phy_packets.patch index 10fb73177..470f54ff6 100644 --- a/target/linux/generic/patches-3.9/721-phy_packets.patch +++ b/target/linux/generic/patches-3.9/721-phy_packets.patch @@ -79,7 +79,7 @@ help --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -2530,9 +2530,19 @@ int dev_hard_start_xmit(struct sk_buff * +@@ -2529,9 +2529,19 @@ int dev_hard_start_xmit(struct sk_buff * if (!list_empty(&ptype_all)) dev_queue_xmit_nit(skb, dev); @@ -102,7 +102,7 @@ if (rc == NETDEV_TX_OK) txq_trans_update(txq); return rc; -@@ -2555,9 +2565,19 @@ gso: +@@ -2554,9 +2564,19 @@ gso: if (!list_empty(&ptype_all)) dev_queue_xmit_nit(nskb, dev); diff --git a/target/linux/generic/patches-3.9/862-gpio_spi_driver.patch b/target/linux/generic/patches-3.9/862-gpio_spi_driver.patch index e68f808c3..29c735b24 100644 --- a/target/linux/generic/patches-3.9/862-gpio_spi_driver.patch +++ b/target/linux/generic/patches-3.9/862-gpio_spi_driver.patch @@ -345,7 +345,7 @@ Please use the new mainline SPI-GPIO driver, as of 2.6.29. +MODULE_LICENSE("GPL v2"); --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig -@@ -177,6 +177,15 @@ config SPI_GPIO +@@ -178,6 +178,15 @@ config SPI_GPIO GPIO operations, you should be able to leverage that for better speed with a custom version of this driver; see the source code. diff --git a/target/linux/generic/patches-3.9/863-gpiommc.patch b/target/linux/generic/patches-3.9/863-gpiommc.patch index 6c3dce21c..ebbafb45a 100644 --- a/target/linux/generic/patches-3.9/863-gpiommc.patch +++ b/target/linux/generic/patches-3.9/863-gpiommc.patch @@ -830,7 +830,7 @@ +be done automatically. --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -3600,6 +3600,11 @@ L: linuxppc-dev@lists.ozlabs.org +@@ -3606,6 +3606,11 @@ L: linuxppc-dev@lists.ozlabs.org S: Odd Fixes F: drivers/tty/hvc/ diff --git a/target/linux/generic/patches-3.9/921-use_preinit_as_init.patch b/target/linux/generic/patches-3.9/921-use_preinit_as_init.patch index 482e2525d..17b2ca7be 100644 --- a/target/linux/generic/patches-3.9/921-use_preinit_as_init.patch +++ b/target/linux/generic/patches-3.9/921-use_preinit_as_init.patch @@ -1,8 +1,6 @@ -Index: linux-3.8.3/init/main.c -=================================================================== ---- linux-3.8.3.orig/init/main.c 2013-04-02 21:43:30.000000000 +0200 -+++ linux-3.8.3/init/main.c 2013-04-02 21:44:26.362130897 +0200 -@@ -835,7 +835,8 @@ +--- a/init/main.c ++++ b/init/main.c +@@ -848,7 +848,8 @@ static int __ref kernel_init(void *unuse printk(KERN_WARNING "Failed to execute %s. Attempting " "defaults...\n", execute_command); } |