linux-stable/arch/blackfin
Yi Li 73a400646b Blackfin: SMP: rewrite IPI handling to avoid memory allocation
Currently, sending an interprocessor interrupt (IPI) requires building up
a message dynamically which means memory allocation.  But often times, we
will want to send an IPI in low level contexts where allocation is not
possible which may lead to a panic().  So create a per-cpu static array
for the message queue and use that instead.

Further, while we have two supplemental interrupts, we are currently only
using one of them.  So use the second one for the most common IPI message
of all -- smp_send_reschedule().  This avoids ugly contention for locks
which in turn would require an IPI message ...

In general, this improves SMP performance, and in some cases allows the
SMP port to work in places it wouldn't before.  Such as the PREEMPT_RT
state where the slab is protected by a per-cpu spin lock.  If the slab
kmalloc/kfree were to put the task to sleep, and that task was actually
the IPI handler, then the system falls down yet again.

After running some various stress tests on the system, the static limit
of 5 messages seems to work.  On the off chance even this overflows, we
simply panic(), and we can review that scenario to see if the limit needs
to be increased a bit more.

Signed-off-by: Yi Li <yi.li@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-01-10 07:18:15 -05:00
..
boot Blackfin: add support for LZO compressed kernels 2010-08-06 12:55:53 -04:00
configs Blackfin: bf561-ezkit: add SMP defconfig 2011-01-10 07:18:07 -05:00
include Blackfin: SMP: relocate blackfin_core_id() definition 2011-01-10 07:18:15 -05:00
kernel BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
lib Blackfin: optimize strncpy a bit 2010-05-22 14:19:11 -04:00
mach-bf518 Blackfin: drop asm/irq.h include from mach headers 2011-01-10 07:18:10 -05:00
mach-bf527 Blackfin: drop asm/irq.h include from mach headers 2011-01-10 07:18:10 -05:00
mach-bf533 Blackfin: drop asm/irq.h include from mach headers 2011-01-10 07:18:10 -05:00
mach-bf537 Blackfin: drop asm/irq.h include from mach headers 2011-01-10 07:18:10 -05:00
mach-bf538 Blackfin: drop asm/irq.h include from mach headers 2011-01-10 07:18:10 -05:00
mach-bf548 Blackfin: drop asm/irq.h include from mach headers 2011-01-10 07:18:10 -05:00
mach-bf561 Blackfin: SMP: rewrite IPI handling to avoid memory allocation 2011-01-10 07:18:15 -05:00
mach-common Blackfin: SMP: rewrite IPI handling to avoid memory allocation 2011-01-10 07:18:15 -05:00
mm Blackfin: merge kernel init memory back into main memory region 2010-10-22 04:02:01 -04:00
oprofile Blackfin arch: remove hardware PM code, oprofile not use it 2009-01-07 23:14:39 +08:00
ADI_BSD.txt Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
Kconfig Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6 2010-10-28 16:16:39 -07:00
Kconfig.debug Blackfin: drop unused irq_panic()/DEBUG_ICACHE_CHECK 2010-10-25 17:24:00 -04:00
Makefile Blackfin: update sparse flags for latest upstream changes 2010-10-22 16:30:00 -04:00