linux/arch
Russell King 846a136881 ARM: vfp: fix saving d16-d31 vfp registers on v6+ kernels
Michael Olbrich reported that his test program fails when built with
-O2 -mcpu=cortex-a8 -mfpu=neon, and a kernel which supports v6 and v7
CPUs:

volatile int x = 2;
volatile int64_t y = 2;

int main() {
	volatile int a = 0;
	volatile int64_t b = 0;
	while (1) {
		a = (a + x) % (1 << 30);
		b = (b + y) % (1 << 30);
		assert(a == b);
	}
}

and two instances are run.  When built for just v7 CPUs, this program
works fine.  It uses the "vadd.i64 d19, d18, d16" VFP instruction.

It appears that we do not save the high-16 double VFP registers across
context switches when the kernel is built for v6 CPUs.  Fix that.

Cc: <stable@vger.kernel.org>
Tested-By: Michael Olbrich <m.olbrich@pengutronix.de>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2012-10-09 12:16:46 +01:00
..
alpha Prepared for main script 2012-10-03 13:45:43 -07:00
arm ARM: vfp: fix saving d16-d31 vfp registers on v6+ kernels 2012-10-09 12:16:46 +01:00
arm64 arm64: Enable interrupts before calling do_notify_resume() 2012-10-08 18:04:21 +01:00
avr32 cross-arch: don't corrupt personality flags upon exec() 2012-10-06 03:04:47 +09:00
blackfin Sound updates for 3.7-rc1 2012-10-09 07:07:14 +09:00
c6x Merge branch 'uapi-prep' of git://git.infradead.org/users/dhowells/linux-headers 2012-10-07 07:55:10 +09:00
cris cross-arch: don't corrupt personality flags upon exec() 2012-10-06 03:04:47 +09:00
frv cross-arch: don't corrupt personality flags upon exec() 2012-10-06 03:04:47 +09:00
h8300 cross-arch: don't corrupt personality flags upon exec() 2012-10-06 03:04:47 +09:00
hexagon Merge branch 'uapi-prep' of git://git.infradead.org/users/dhowells/linux-headers 2012-10-07 07:55:10 +09:00
ia64 Features: 2012-10-07 07:13:01 +09:00
m32r cross-arch: don't corrupt personality flags upon exec() 2012-10-06 03:04:47 +09:00
m68k Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu 2012-10-07 21:06:10 +09:00
microblaze Merge branch 'next' of git://git.monstr.eu/linux-2.6-microblaze 2012-10-07 21:08:40 +09:00
mips Merge branch 'rc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2012-10-08 07:56:10 +09:00
mn10300 cross-arch: don't corrupt personality flags upon exec() 2012-10-06 03:04:47 +09:00
openrisc Merge branch 'uapi-prep' of git://git.infradead.org/users/dhowells/linux-headers 2012-10-07 07:55:10 +09:00
parisc compat: move compat_siginfo_t definition to asm/compat.h 2012-10-06 03:05:16 +09:00
powerpc Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2012-10-06 03:16:12 +09:00
s390 Merge branch 'virtio-next' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux 2012-10-07 21:04:56 +09:00
score Merge branch 'uapi-prep' of git://git.infradead.org/users/dhowells/linux-headers 2012-10-07 07:55:10 +09:00
sh cross-arch: don't corrupt personality flags upon exec() 2012-10-06 03:04:47 +09:00
sparc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc 2012-10-09 06:39:30 +09:00
tile Merge branch 'uapi-prep' of git://git.infradead.org/users/dhowells/linux-headers 2012-10-07 07:55:10 +09:00
um Prepared for main script 2012-10-03 13:45:43 -07:00
unicore32 Merge branch 'uapi-prep' of git://git.infradead.org/users/dhowells/linux-headers 2012-10-07 07:55:10 +09:00
x86 Merge branch 'rc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2012-10-08 07:56:10 +09:00
xtensa cross-arch: don't corrupt personality flags upon exec() 2012-10-06 03:04:47 +09:00
.gitignore
Kconfig Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-10-01 10:43:39 -07:00