ARM: 5905/1: ARM: Global ASID allocation on SMP
authorCatalin Marinas <catalin.marinas@arm.com>
Tue, 26 Jan 2010 18:09:42 +0000 (19:09 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 15 Feb 2010 21:39:51 +0000 (21:39 +0000)
commit11805bcfa411c816b7c76fc40724be6733c74ffc
tree09c5c6c91deffb60339f027779521bafa42921ce
parent48ab7e09e0a7c00a217f87e4b57dfbee9c603e79
ARM: 5905/1: ARM: Global ASID allocation on SMP

The current ASID allocation algorithm doesn't ensure the notification
of the other CPUs when the ASID rolls over. This may lead to two
processes using the same ASID (but different generation) or multiple
threads of the same process using different ASIDs.

This patch adds the broadcasting of the ASID rollover event to the
other CPUs. To avoid a race on multiple CPUs modifying "cpu_last_asid"
during the handling of the broadcast, the ASID numbering now starts at
"smp_processor_id() + 1". At rollover, the cpu_last_asid will be set
to NR_CPUS.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/include/asm/mmu.h
arch/arm/include/asm/mmu_context.h
arch/arm/mm/context.c