Revision a3ed2a15719219769bb095b28009c1d654a419e8 authored by André Goddard Rosa on 11 May 2010, 21:07:03 UTC, committed by Linus Torvalds on 12 May 2010, 00:33:42 UTC
In case of aborting because we reach the maximum amount of memory which
can be allocated to message queues per user (RLIMIT_MSGQUEUE), we would
try to free the message area twice when bailing out: first by the error
handling code itself, and then later when cleaning up the inode through
delete_inode().

Signed-off-by: André Goddard Rosa <andre.goddard@gmail.com>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent de145b4
Raw File
switch_cpu.S
/*
 * 31-bit switch cpu code
 *
 * Copyright IBM Corp. 2009
 *
 */

#include <asm/asm-offsets.h>
#include <asm/ptrace.h>

# smp_switch_to_cpu switches to destination cpu and executes the passed function
# Parameter: %r2 - function to call
#	     %r3 - function parameter
#	     %r4 - stack poiner
#	     %r5 - current cpu
#	     %r6 - destination cpu

	.section .text
	.align 4
	.globl smp_switch_to_cpu
smp_switch_to_cpu:
	stm	%r6,%r15,__SF_GPRS(%r15)
	lr	%r1,%r15
	ahi	%r15,-STACK_FRAME_OVERHEAD
	st	%r1,__SF_BACKCHAIN(%r15)
	basr	%r13,0
0:	la	%r1,.gprregs_addr-0b(%r13)
	l	%r1,0(%r1)
	stm	%r0,%r15,0(%r1)
1:	sigp	%r0,%r6,__SIGP_RESTART	/* start destination CPU */
	brc	2,1b			/* busy, try again */
2:	sigp	%r0,%r5,__SIGP_STOP	/* stop current CPU */
	brc	2,2b			/* busy, try again */
3:	j	3b

	.globl	smp_restart_cpu
smp_restart_cpu:
	basr	%r13,0
0:	la	%r1,.gprregs_addr-0b(%r13)
	l	%r1,0(%r1)
	lm	%r0,%r15,0(%r1)
1:	sigp	%r0,%r5,__SIGP_SENSE	/* Wait for calling CPU */
	brc	10,1b			/* busy, accepted (status 0), running */
	tmll	%r0,0x40		/* Test if calling CPU is stopped */
	jz	1b
	ltr	%r4,%r4			/* New stack ? */
	jz	1f
	lr	%r15,%r4
1:	basr	%r14,%r2

.gprregs_addr:
	.long	.gprregs

	.section .data,"aw",@progbits
.gprregs:
	.rept	16
	.long	0
	.endr
back to top