Gerd Hoffmann
9a0b5817ad
[PATCH] x86: SMP alternatives
...
Implement SMP alternatives, i.e. switching at runtime between different
code versions for UP and SMP. The code can patch both SMP->UP and UP->SMP.
The UP->SMP case is useful for CPU hotplug.
With CONFIG_CPU_HOTPLUG enabled the code switches to UP at boot time and
when the number of CPUs goes down to 1, and switches to SMP when the number
of CPUs goes up to 2.
Without CONFIG_CPU_HOTPLUG or on non-SMP-capable systems the code is
patched once at boot time (if needed) and the tables are released
afterwards.
The changes in detail:
* The current alternatives bits are moved to a separate file,
the SMP alternatives code is added there.
* The patch adds some new elf sections to the kernel:
.smp_altinstructions
like .altinstructions, also contains a list
of alt_instr structs.
.smp_altinstr_replacement
like .altinstr_replacement, but also has some space to
save original instruction before replaving it.
.smp_locks
list of pointers to lock prefixes which can be nop'ed
out on UP.
The first two are used to replace more complex instruction
sequences such as spinlocks and semaphores. It would be possible
to deal with the lock prefixes with that as well, but by handling
them as special case the table sizes become much smaller.
* The sections are page-aligned and padded up to page size, so they
can be free if they are not needed.
* Splitted the code to release init pages to a separate function and
use it to release the elf sections if they are unused.
Signed-off-by: Gerd Hoffmann <kraxel@suse.de>
Signed-off-by: Chuck Ebbert <76306.1226@compuserve.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-03-23 07:38:04 -08:00
..
a.out.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
alternative.h
[PATCH] x86: SMP alternatives
2006-03-23 07:38:04 -08:00
apic.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
archparam-i386.h
[PATCH] uml: s390 preparation, elf.h
2005-05-05 16:36:37 -07:00
archparam-ppc.h
[PATCH] uml: s390 preparation, elf.h
2005-05-05 16:36:37 -07:00
archparam-x86_64.h
[PATCH] uml: s390 preparation, elf.h
2005-05-05 16:36:37 -07:00
atomic.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
auxvec.h
[PATCH] auxiliary vector cleanups
2005-09-07 16:57:21 -07:00
bitops.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
boot.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
bug.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
bugs.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
byteorder.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
cache.h
[PATCH] Kill L1_CACHE_SHIFT_MAX
2006-01-08 20:13:39 -08:00
cacheflush.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
calling.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
checksum.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
cobalt.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
common.lds.S
[PATCH] uml: fix oops related to exception table
2005-05-01 08:58:53 -07:00
cpufeature.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
cputime.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
current.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
delay.h
[PATCH] uml: s390 preparation, delay moved to arch
2005-05-05 16:36:38 -07:00
desc.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
div64.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
dma-mapping.h
[PATCH] gfp_t: dma-mapping (simple cases)
2005-10-28 08:16:49 -07:00
dma.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
dwarf2.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
elf-i386.h
[PATCH] uml: small fixes left over from rc4
2005-05-20 15:48:17 -07:00
elf-ppc.h
[PATCH] uml: s390 preparation, elf.h
2005-05-05 16:36:37 -07:00
elf-x86_64.h
[PATCH] uml: small fixes left over from rc4
2005-05-20 15:48:17 -07:00
emergency-restart.h
[PATCH] Add emergency_restart()
2005-07-26 14:35:41 -07:00
errno.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
fcntl.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
fixmap.h
[PATCH] uml: s390 preparation, elf.h
2005-05-05 16:36:37 -07:00
floppy.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
futex.h
[PATCH] consolidate asm/futex.h
2006-01-08 20:13:39 -08:00
hardirq.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
highmem.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
hw_irq.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
ide.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
io.h
[PATCH] uml: add __raw_writel definition
2006-01-18 19:20:18 -08:00
ioctl.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
ioctls.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
ipc.h
[PATCH] uml: obvious compile fixes for x86-64 Subarch and x86 regression fixes
2005-05-05 16:36:32 -07:00
ipcbuf.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
irq.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
irq_vectors.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
keyboard.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
kmap_types.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
ldt-i386.h
[PATCH] uml: eliminate anonymous union and clean up symlink lossage
2005-11-22 09:13:41 -08:00
ldt-x86_64.h
[PATCH] uml: skas0-hold-own-ldt fixups for x86-64
2006-02-01 08:53:23 -08:00
linkage.h
[PATCH] uml: remove old UM_FASTCALL, and make the thing work again
2005-10-30 17:37:16 -08:00
local.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
locks.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
mca_dma.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
mman.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
mmu.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
mmu_context.h
[PATCH] uml: switch_mm fix
2005-11-07 07:53:31 -08:00
module-generic.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
module-i386.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
module-x86_64.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
msgbuf.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
mtrr.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
mutex.h
[PATCH] mutex subsystem, add default include/asm-*/mutex.h files
2006-01-09 15:59:19 -08:00
namei.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
page.h
[PATCH] gfp_t: remaining bits of arch/*
2005-10-28 08:16:51 -07:00
page_offset.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
param.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
pci.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
pda.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
percpu.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
pgalloc.h
[PATCH] uml: fix x86_64 page leak
2005-09-05 00:06:24 -07:00
pgtable-2level.h
[PATCH] uml: merge duplicated page table code
2005-09-05 00:06:22 -07:00
pgtable-3level.h
[PATCH] uml: fix x86_64 page leak
2005-09-05 00:06:24 -07:00
pgtable.h
[PATCH] mm: pte_offset_map_lock loops
2005-10-29 21:40:40 -07:00
poll.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
posix_types.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
prctl.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
processor-generic.h
[PATCH] dump_thread() cleanup
2006-01-10 08:01:25 -08:00
processor-i386.h
[PATCH] uml: Fix sysrq-r support for skas mode
2005-10-04 13:22:01 -07:00
processor-ppc.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
processor-x86_64.h
[PATCH] uml: Fix sysrq-r support for skas mode
2005-10-04 13:22:01 -07:00
ptrace-generic.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
ptrace-i386.h
[PATCH] uml: add profile_pc for i386
2005-06-25 16:24:36 -07:00
ptrace-x86_64.h
[AUDIT] Update UML audit-syscall-{entry,exit} calls to new prototypes
2005-05-03 07:54:51 +01:00
resource.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
rwlock.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
rwsem.h
[PATCH] remove gcc-2 checks
2006-01-08 20:14:02 -08:00
scatterlist.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
sections.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
segment.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
semaphore.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
sembuf.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
serial.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
setup.h
[PATCH] uml: command line handling cleanup
2005-05-06 22:09:29 -07:00
shmbuf.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
shmparam.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
sigcontext-generic.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
sigcontext-i386.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
sigcontext-ppc.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
sigcontext-x86_64.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
siginfo.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
signal.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
smp.h
[PATCH] uml: avoid "CONFIG_NR_CPUS undeclared" bogus error messages
2006-02-01 08:53:23 -08:00
socket.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
sockios.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
spinlock.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
spinlock_types.h
[PATCH] uml spinlock breakage
2005-09-10 16:50:01 -07:00
stat.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
statfs.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
string.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
suspend.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
system-generic.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
system-i386.h
[PATCH] uml: UML/i386 cmpxchg fix
2005-09-17 11:50:01 -07:00
system-ppc.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
system-x86_64.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
termbits.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
termios.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
thread_info.h
[PATCH] uml: add TIF_RESTORE_SIGMASK support
2006-01-18 19:20:30 -08:00
timex.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
tlb.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
tlbflush.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
topology.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
types.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
uaccess.h
[PATCH] uml get_user() NULL noise removal
2005-09-30 08:42:24 -07:00
ucontext.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
unaligned.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
unistd.h
[PATCH] uml: use generic sys_rt_sigsuspend
2006-01-18 19:20:30 -08:00
user.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
vga.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
vm-flags-i386.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
vm-flags-x86_64.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
vm86.h
[PATCH] uml: vm86 compile fix
2005-07-28 21:46:03 -07:00
xor.h
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00