2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-23 20:53:53 +08:00
linux-next/arch/powerpc/kernel
Michael Ellerman fac23fe4be powerpc: Introduce infrastructure for feature sections with alternatives
The current feature section logic only supports nop'ing out code, this means
if you want to choose at runtime between instruction sequences, one or both
cases will have to execute the nop'ed out contents of the other section, eg:

BEGIN_FTR_SECTION
	or	1,1,1
END_FTR_SECTION_IFSET(FOO)
BEGIN_FTR_SECTION
	or	2,2,2
END_FTR_SECTION_IFCLR(FOO)

and the resulting code will be either,

	or	1,1,1
	nop

or,
	nop
	or	2,2,2

For small code segments this is fine, but for larger code blocks and in
performance criticial code segments, it would be nice to avoid the nops.
This commit starts to implement logic to allow the following:

BEGIN_FTR_SECTION
	or	1,1,1
FTR_SECTION_ELSE
	or	2,2,2
ALT_FTR_SECTION_END_IFSET(FOO)

and the resulting code will be:

	or	1,1,1
or,
	or	2,2,2

We achieve this by extending the existing FTR macros. The current feature
section semantic just becomes a special case, ie. if the else case is empty
we nop out the default case.

The key limitation is that the size of the else case must be less than or
equal to the size of the default case. If the else case is smaller the
remainder of the section is nop'ed.

We let the linker put the else case code in with the rest of the text,
so that relative branches from the else case are more likley to link,
this has the disadvantage that we can't free the unused else cases.

This commit introduces the required macro and linker script changes, but
does not enable the patching of the alternative sections.

We also need to update two hand-made section entries in reg.h and timex.h

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2008-07-01 11:28:28 +10:00
..
vdso32 powerpc: Introduce infrastructure for feature sections with alternatives 2008-07-01 11:28:28 +10:00
vdso64 powerpc: Introduce infrastructure for feature sections with alternatives 2008-07-01 11:28:28 +10:00
align.c [POWERPC] Handle alignment faults on SPE load/store instructions 2007-09-14 08:51:48 -05:00
asm-offsets.c [POWERPC] 40x/Book-E: Save/restore volatile exception registers 2008-06-02 14:56:35 -05:00
audit.c [PATCH] audit signal recipients 2007-05-11 05:38:25 -04:00
btext.c [POWERPC] Remove duplicate #include 2008-05-09 20:22:58 +10:00
clock.c [POWERPC] clk.h interface for platforms 2007-10-03 09:11:56 +10:00
compat_audit.c [PATCH] add SIGNAL syscall class (v3) 2007-05-11 05:38:25 -04:00
cpu_setup_6xx.S [POWERPC] ppc32: Fix errata for 603 CPUs 2008-04-21 15:00:32 -05:00
cpu_setup_44x.S Revert "[POWERPC] 4xx: Fix 460GT support to not enable FPU" 2008-06-11 07:52:40 -04:00
cpu_setup_pa6t.S [POWERPC] pasemi: Enable one more hid bit 2007-04-24 21:31:49 +10:00
cpu_setup_ppc970.S [POWERPC] powerpc: Enable DEEPNAP power savings mode on 970MP 2006-10-16 16:32:25 +10:00
cputable.c powerpc: Split out do_feature_fixups() from cputable.c 2008-07-01 11:28:24 +10:00
crash_dump.c powerpc: Add PPC_NOP_INSTR, a hash define for the preferred nop instruction 2008-07-01 11:28:23 +10:00
crash.c powerpc: Increase CRASH_HANDLER_MAX 2008-06-30 22:31:00 +10:00
dma_64.c iommu sg: powerpc: convert iommu to use the IOMMU helper 2008-02-05 09:44:11 -08:00
entry_32.S powerpc/85xx: add DOZE/NAP support for e500 core 2008-06-26 01:48:56 -05:00
entry_64.S [POWERPC] irqtrace support for 64-bit powerpc 2008-04-18 15:38:47 +10:00
firmware.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
fpu.S [POWERPC] Restore copyright notice in arch/powerpc/kernel/fpu.S 2006-08-30 14:45:35 +10:00
head_8xx.S [POWERPC] 8xx: fix swap 2008-03-07 08:42:28 -06:00
head_32.S [POWERPC] Move stackframe definitions to common header 2008-04-18 15:37:18 +10:00
head_40x.S [POWERPC] 40x/Book-E: Save/restore volatile exception registers 2008-06-02 14:56:35 -05:00
head_44x.S Merge branch 'linux-2.6' 2008-06-30 10:16:50 +10:00
head_64.S [POWERPC] Fix bogus paca->_current initialization 2008-05-09 20:22:58 +10:00
head_booke.h powerpc/booke: Add support for new e500mc core 2008-06-18 16:17:56 -05:00
head_fsl_booke.S powerpc/85xx: add DOZE/NAP support for e500 core 2008-06-26 01:48:56 -05:00
ibmebus.c [POWERPC] Replace remaining __FUNCTION__ occurrences 2008-04-01 20:43:09 +11:00
idle_6xx.S powerpc/85xx: add DOZE/NAP support for e500 core 2008-06-26 01:48:56 -05:00
idle_e500.S powerpc/e500mc: flush L2 on NAP for e500mc 2008-06-26 01:49:03 -05:00
idle_power4.S [POWERPC] powermac: Support G5 CPU hotplug 2007-05-07 20:31:13 +10:00
idle.c [POWERPC] Fix sysctl table check failure on PowerMac 2007-11-08 14:15:30 +11:00
init_task.c [PATCH] take init_files to fs/file.c 2008-05-16 17:22:20 -04:00
io.c [POWERPC] Move inline asm eieio to using eieio inline function 2007-07-10 00:33:14 -05:00
iomap.c [POWERPC] Add 64-bit resources support to pci_iomap 2007-09-20 07:36:52 -05:00
iommu.c [POWERPC] Replace remaining __FUNCTION__ occurrences 2008-04-01 20:43:09 +11:00
irq.c Merge branch 'linux-2.6' 2008-06-30 10:16:50 +10:00
isa-bridge.c [POWERPC] Remove leftover printk in isa-bridge.c 2008-05-09 20:22:59 +10:00
kprobes.c powerpc/booke: Add kprobes support for booke style processors 2008-06-26 03:35:46 -05:00
l2cr_6xx.S Convert files to UTF-8 and some cleanups 2007-10-19 23:21:04 +02:00
legacy_serial.c [POWERPC] Fix legacy serial search for opb bus ports 2008-02-06 16:30:00 +11:00
lparcfg.c [POWERPC] Fix sparse warnings in arch/powerpc/kernel 2008-05-14 22:31:59 +10:00
machine_kexec_32.c Storage class should be first 2006-06-26 18:57:34 +02:00
machine_kexec_64.c [POWERPC] Fix sparse warnings in arch/powerpc/kernel 2008-05-14 22:31:59 +10:00
machine_kexec.c [POWERPC] Fix crashkernel= handling when no crashkernel= specified 2008-04-30 19:49:48 +10:00
Makefile powerpc: Move common module code into its own file 2008-07-01 11:28:05 +10:00
misc_32.S powerpc/kprobes: Some minor fixes 2008-06-26 03:35:33 -05:00
misc_64.S [POWERPC] Clean up misc_64.S 2008-04-24 20:58:03 +10:00
misc.S powerpc: Add cputable entry for POWER7 2008-06-30 22:31:11 +10:00
module_32.c powerpc: Move common module code into its own file 2008-07-01 11:28:05 +10:00
module_64.c powerpc: Add PPC_NOP_INSTR, a hash define for the preferred nop instruction 2008-07-01 11:28:23 +10:00
module.c powerpc: Move common module code into its own file 2008-07-01 11:28:05 +10:00
msi.c [POWERPC] Fix sparse warnings in arch/powerpc/kernel 2008-05-14 22:31:59 +10:00
nvram_64.c [POWERPC] pseries: Eliminate global error_log_cnt variable 2007-08-17 11:01:52 +10:00
of_device.c [POWERPC] Move of_device_get_modalias to drivers/of 2008-05-16 23:22:28 +10:00
of_platform.c [POWERPC] cell: Generalize io-workarounds code 2008-04-24 21:08:12 +10:00
paca.c [POWERPC] Raise the upper limit of NR_CPUS and move the pacas into the BSS 2008-04-24 20:58:04 +10:00
pci_32.c [POWERPC] Remove update_bridge_resource 2008-01-23 19:32:30 -06:00
pci_64.c [POWERPC] Use dev_set_name in pci_64.c 2008-06-09 11:32:40 +10:00
pci_dn.c [POWERPC] iSeries: eliminate pci_dn bussubno 2008-01-17 14:57:05 +11:00
pci-common.c PCI: powerpc: use generic pci_enable_resources() 2008-04-20 21:47:05 -07:00
pmc.c [POWERPC] Made FSL Book-E PMC support more generic 2008-02-05 23:34:14 -06:00
ppc32.h Revert "[POWERPC] Add compat handler for PTRACE_GETSIGINFO" 2008-04-24 14:05:15 +10:00
ppc_ksyms.c [POWERPC] Remove ppc32's export of console_drivers 2008-06-16 15:00:56 +10:00
proc_ppc64.c powerpc: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
process.c [POWERPC] Add IRQSTACKS support on ppc32 2008-04-29 15:57:34 +10:00
prom_init_check.sh [POWERPC] Fix -Os kernel builds with newer gcc versions 2008-06-16 15:00:54 +10:00
prom_init.c powerpc: Tell firmware we support architecture V2.06 2008-07-01 11:28:00 +10:00
prom_parse.c [POWERPC] Add of_translate_dma_address 2007-12-11 15:43:35 +11:00
prom.c [POWERPC] 85xx: Add support for relocatable kernel (and booting at non-zero) 2008-04-24 20:58:01 +10:00
ptrace32.c Revert "[POWERPC] Add compat handler for PTRACE_GETSIGINFO" 2008-04-24 14:05:15 +10:00
ptrace.c [POWERPC] user_regset PTRACE_SETREGS regression fix 2008-03-20 10:10:56 +11:00
rtas_flash.c [POWERPC] Fix sparse warnings in arch/powerpc/kernel 2008-05-14 22:31:59 +10:00
rtas_pci.c [POWERPC] Fix sparse warnings in arch/powerpc/kernel 2008-05-14 22:31:59 +10:00
rtas-proc.c [POWERPC] Fix sparse warnings in arch/powerpc/kernel 2008-05-14 22:31:59 +10:00
rtas-rtc.c
rtas.c [POWERPC] Fix sparse warnings in arch/powerpc/kernel 2008-05-14 22:31:59 +10:00
setup_32.c powerpc/85xx: add DOZE/NAP support for e500 core 2008-06-26 01:48:56 -05:00
setup_64.c [POWERPC] Initialize lockdep earlier 2008-05-09 20:22:58 +10:00
setup-common.c powerpc: Add the PC speaker only when requested 2008-06-09 13:42:30 +10:00
setup.h
signal_32.c [POWERPC] Define and use TLF_RESTORE_SIGMASK 2008-05-14 22:31:33 +10:00
signal_64.c [POWERPC] Fix incorrect enabling of VMX when building signal or user context 2008-06-09 11:32:36 +10:00
signal.c [POWERPC] Define and use TLF_RESTORE_SIGMASK 2008-05-14 22:31:33 +10:00
signal.h [POWERPC] Less ifdef's in signal.c/signal.h 2007-06-14 22:29:58 +10:00
smp-tbsync.c [POWERPC] Replace kmalloc+memset with kzalloc 2006-12-04 20:42:09 +11:00
smp.c [POWERPC] Fix sparse warnings in arch/powerpc/kernel 2008-05-14 22:31:59 +10:00
softemu8xx.c [POWERPC] 8xx: Move softemu8xx.c from arch/ppc 2007-10-04 11:02:54 -05:00
stacktrace.c [POWERPC] Fix new warnings arising from stacktrace patch 2008-04-24 20:58:02 +10:00
suspend.c [PATCH] x86: Move swsusp __pa() dependent code to arch portion 2007-05-02 19:27:07 +02:00
swsusp_32.S [POWERPC] Make altivec code in swsusp_32.S depend on CONFIG_ALTIVEC 2007-11-08 14:15:34 +11:00
swsusp_64.c [POWERPC] powermac: Suspend to disk on G5 2007-05-07 20:31:14 +10:00
swsusp_asm64.S [POWERPC] powermac: Suspend to disk on G5 2007-05-07 20:31:14 +10:00
swsusp.c powerpc: fixup hard_irq_disable semantics 2007-05-11 08:29:34 -07:00
sys_ppc32.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2008-04-21 15:50:49 -07:00
syscalls.c unified (weak) sys_pipe implementation 2008-05-03 13:50:33 -07:00
sysfs.c remove __attribute_used__ 2008-01-28 23:21:18 +01:00
systbl_chk.c [POWERPC] Fix a couple of copyright symbols 2008-01-25 22:52:50 +11:00
systbl_chk.sh [POWERPC] Fix a couple of copyright symbols 2008-01-25 22:52:50 +11:00
systbl.S [POWERPC] Align the sys_call_table 2007-10-11 14:36:47 +10:00
tau_6xx.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
time.c [POWERPC] Fix sparse warnings in arch/powerpc/kernel 2008-05-14 22:31:59 +10:00
traps.c powerpc/booke: Add kprobes support for booke style processors 2008-06-26 03:35:46 -05:00
udbg_16550.c [POWERPC] 4xx: Add early udbg support for 40x processors 2007-12-23 13:13:03 -06:00
udbg.c [POWERPC] Mark udbg console as CON_ANYTIME, ie. callable early in boot 2008-04-24 21:08:11 +10:00
vdso.c Reinstate ZERO_PAGE optimization in 'get_user_pages()' and fix XIP 2008-06-20 11:18:25 -07:00
vecemu.c
vector.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
vio.c [POWERPC] Replace remaining __FUNCTION__ occurrences 2008-04-01 20:43:09 +11:00
vmlinux.lds.S powerpc: Introduce infrastructure for feature sections with alternatives 2008-07-01 11:28:28 +10:00