mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-21 00:42:16 +00:00
fce0d57403
This patch implements the kexec support for ppc64 platforms. A couple of notes: 1) We copy the pages in virtual mode, using the full base kernel and a statically allocated stack. At kexec_prepare time we scan the pages and if any overlap our (0, _end[]) range we return -ETXTBSY. On PowerPC 64 systems running in LPAR (logical partitioning) mode, only a small region of memory, referred to as the RMO, can be accessed in real mode. Since Linux runs with only one zone of memory in the memory allocator, and it can be orders of magnitude more memory than the RMO, looping until we allocate pages in the source region is not feasible. Copying in virtual means we don't have to write a hash table generation and call hypervisor to insert translations, instead we rely on the pinned kernel linear mapping. The kernel already has move to linked location built in, so there is no requirement to load it at 0. If we want to load something other than a kernel, then a stub can be written to copy a linear chunk in real mode. 2) The start entry point gets passed parameters from the kernel. Slaves are started at a fixed address after copying code from the entry point. All CPUs get passed their firmware assigned physical id in r3 (most calling conventions use this register for the first argument). This is used to distinguish each CPU from all other CPUs. Since firmware is not around, there is no other way to obtain this information other than to pass it somewhere. A single CPU, referred to here as the master and the one executing the kexec call, branches to start with the address of start in r4. While this can be calculated, we have to load it through a gpr to branch to this point so defining the register this is contained in is free. A stack of unspecified size is available at r1 (also common calling convention). All remaining running CPUs are sent to start at absolute address 0x60 after copying the first 0x100 bytes from start to address 0. This convention was chosen because it matches what the kernel has been doing itself. (only gpr3 is defined). Note: This is not quite the convention of the kexec bootblock v2 in the kernel. A stub has been written to convert between them, and we may adjust the kernel in the future to allow this directly without any stub. 3) Destination pages can be placed anywhere, even where they would not be accessible in real mode. This will allow us to place ram disks above the RMO if we choose. Signed-off-by: Milton Miller <miltonm@bga.com> Signed-off-by: R Sharada <sharada@in.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
481 lines
11 KiB
Plaintext
481 lines
11 KiB
Plaintext
#
|
|
# For a description of the syntax of this configuration file,
|
|
# see Documentation/kbuild/kconfig-language.txt.
|
|
#
|
|
|
|
config 64BIT
|
|
def_bool y
|
|
|
|
config MMU
|
|
bool
|
|
default y
|
|
|
|
config UID16
|
|
bool
|
|
|
|
config RWSEM_GENERIC_SPINLOCK
|
|
bool
|
|
|
|
config RWSEM_XCHGADD_ALGORITHM
|
|
bool
|
|
default y
|
|
|
|
config GENERIC_CALIBRATE_DELAY
|
|
bool
|
|
default y
|
|
|
|
config GENERIC_ISA_DMA
|
|
bool
|
|
default y
|
|
|
|
config HAVE_DEC_LOCK
|
|
bool
|
|
default y
|
|
|
|
config EARLY_PRINTK
|
|
bool
|
|
default y
|
|
|
|
config COMPAT
|
|
bool
|
|
default y
|
|
|
|
config SCHED_NO_NO_OMIT_FRAME_POINTER
|
|
bool
|
|
default y
|
|
|
|
# We optimistically allocate largepages from the VM, so make the limit
|
|
# large enough (16MB). This badly named config option is actually
|
|
# max order + 1
|
|
config FORCE_MAX_ZONEORDER
|
|
int
|
|
default "13"
|
|
|
|
source "init/Kconfig"
|
|
|
|
config SYSVIPC_COMPAT
|
|
bool
|
|
depends on COMPAT && SYSVIPC
|
|
default y
|
|
|
|
menu "Platform support"
|
|
|
|
choice
|
|
prompt "Platform Type"
|
|
default PPC_MULTIPLATFORM
|
|
|
|
config PPC_ISERIES
|
|
bool "IBM Legacy iSeries"
|
|
|
|
config PPC_MULTIPLATFORM
|
|
bool "Generic"
|
|
|
|
endchoice
|
|
|
|
config PPC_PSERIES
|
|
depends on PPC_MULTIPLATFORM
|
|
bool " IBM pSeries & new iSeries"
|
|
default y
|
|
|
|
config PPC_BPA
|
|
bool " Broadband Processor Architecture"
|
|
depends on PPC_MULTIPLATFORM
|
|
|
|
config PPC_PMAC
|
|
depends on PPC_MULTIPLATFORM
|
|
bool " Apple G5 based machines"
|
|
default y
|
|
select U3_DART
|
|
|
|
config PPC_MAPLE
|
|
depends on PPC_MULTIPLATFORM
|
|
bool " Maple 970FX Evaluation Board"
|
|
select U3_DART
|
|
select MPIC_BROKEN_U3
|
|
default n
|
|
help
|
|
This option enables support for the Maple 970FX Evaluation Board.
|
|
For more informations, refer to <http://www.970eval.com>
|
|
|
|
config PPC
|
|
bool
|
|
default y
|
|
|
|
config PPC64
|
|
bool
|
|
default y
|
|
|
|
config PPC_OF
|
|
depends on PPC_MULTIPLATFORM
|
|
bool
|
|
default y
|
|
|
|
config XICS
|
|
depends on PPC_PSERIES
|
|
bool
|
|
default y
|
|
|
|
config MPIC
|
|
depends on PPC_PSERIES || PPC_PMAC || PPC_MAPLE
|
|
bool
|
|
default y
|
|
|
|
config BPA_IIC
|
|
depends on PPC_BPA
|
|
bool
|
|
default y
|
|
|
|
# VMX is pSeries only for now until somebody writes the iSeries
|
|
# exception vectors for it
|
|
config ALTIVEC
|
|
bool "Support for VMX (Altivec) vector unit"
|
|
depends on PPC_MULTIPLATFORM
|
|
default y
|
|
|
|
config PPC_SPLPAR
|
|
depends on PPC_PSERIES
|
|
bool "Support for shared-processor logical partitions"
|
|
default n
|
|
help
|
|
Enabling this option will make the kernel run more efficiently
|
|
on logically-partitioned pSeries systems which use shared
|
|
processors, that is, which share physical processors between
|
|
two or more partitions.
|
|
|
|
config KEXEC
|
|
bool "kexec system call (EXPERIMENTAL)"
|
|
depends on PPC_MULTIPLATFORM && EXPERIMENTAL
|
|
help
|
|
kexec is a system call that implements the ability to shutdown your
|
|
current kernel, and to start another kernel. It is like a reboot
|
|
but it is indepedent of the system firmware. And like a reboot
|
|
you can start any kernel with it, not just Linux.
|
|
|
|
The name comes from the similiarity to the exec system call.
|
|
|
|
It is an ongoing process to be certain the hardware in a machine
|
|
is properly shutdown, so do not be surprised if this code does not
|
|
initially work for you. It may help to enable device hotplugging
|
|
support. As of this writing the exact hardware interface is
|
|
strongly in flux, so no good recommendation can be made.
|
|
|
|
config IBMVIO
|
|
depends on PPC_PSERIES || PPC_ISERIES
|
|
bool
|
|
default y
|
|
|
|
config U3_DART
|
|
bool
|
|
depends on PPC_MULTIPLATFORM
|
|
default n
|
|
|
|
config MPIC_BROKEN_U3
|
|
bool
|
|
depends on PPC_MAPLE
|
|
default y
|
|
|
|
config PPC_PMAC64
|
|
bool
|
|
depends on PPC_PMAC
|
|
default y
|
|
|
|
config BOOTX_TEXT
|
|
bool "Support for early boot text console"
|
|
depends PPC_OF
|
|
help
|
|
Say Y here to see progress messages from the boot firmware in text
|
|
mode. Requires an Open Firmware compatible video card.
|
|
|
|
config POWER4_ONLY
|
|
bool "Optimize for POWER4"
|
|
default n
|
|
---help---
|
|
Cause the compiler to optimize for POWER4 processors. The resulting
|
|
binary will not work on POWER3 or RS64 processors when compiled with
|
|
binutils 2.15 or later.
|
|
|
|
config IOMMU_VMERGE
|
|
bool "Enable IOMMU virtual merging (EXPERIMENTAL)"
|
|
depends on EXPERIMENTAL
|
|
default n
|
|
help
|
|
Cause IO segments sent to a device for DMA to be merged virtually
|
|
by the IOMMU when they happen to have been allocated contiguously.
|
|
This doesn't add pressure to the IOMMU allocator. However, some
|
|
drivers don't support getting large merged segments coming back
|
|
from *_map_sg(). Say Y if you know the drivers you are using are
|
|
properly handling this case.
|
|
|
|
config SMP
|
|
bool "Symmetric multi-processing support"
|
|
---help---
|
|
This enables support for systems with more than one CPU. If you have
|
|
a system with only one CPU, say N. If you have a system with more
|
|
than one CPU, say Y.
|
|
|
|
If you say N here, the kernel will run on single and multiprocessor
|
|
machines, but will use only one CPU of a multiprocessor machine. If
|
|
you say Y here, the kernel will run on single-processor machines.
|
|
On a single-processor machine, the kernel will run faster if you say
|
|
N here.
|
|
|
|
If you don't know what to do here, say Y.
|
|
|
|
config NR_CPUS
|
|
int "Maximum number of CPUs (2-128)"
|
|
range 2 128
|
|
depends on SMP
|
|
default "32"
|
|
|
|
config HMT
|
|
bool "Hardware multithreading"
|
|
depends on SMP && PPC_PSERIES && BROKEN
|
|
help
|
|
This option enables hardware multithreading on RS64 cpus.
|
|
pSeries systems p620 and p660 have such a cpu type.
|
|
|
|
config ARCH_SELECT_MEMORY_MODEL
|
|
def_bool y
|
|
|
|
config ARCH_FLATMEM_ENABLE
|
|
def_bool y
|
|
depends on !NUMA
|
|
|
|
config ARCH_DISCONTIGMEM_ENABLE
|
|
def_bool y
|
|
depends on SMP && PPC_PSERIES
|
|
|
|
config ARCH_DISCONTIGMEM_DEFAULT
|
|
def_bool y
|
|
depends on ARCH_DISCONTIGMEM_ENABLE
|
|
|
|
config ARCH_FLATMEM_ENABLE
|
|
def_bool y
|
|
|
|
config ARCH_SPARSEMEM_ENABLE
|
|
def_bool y
|
|
depends on ARCH_DISCONTIGMEM_ENABLE
|
|
|
|
source "mm/Kconfig"
|
|
|
|
config HAVE_ARCH_EARLY_PFN_TO_NID
|
|
def_bool y
|
|
depends on NEED_MULTIPLE_NODES
|
|
|
|
# Some NUMA nodes have memory ranges that span
|
|
# other nodes. Even though a pfn is valid and
|
|
# between a node's start and end pfns, it may not
|
|
# reside on that node.
|
|
#
|
|
# This is a relatively temporary hack that should
|
|
# be able to go away when sparsemem is fully in
|
|
# place
|
|
config NODES_SPAN_OTHER_NODES
|
|
def_bool y
|
|
depends on NEED_MULTIPLE_NODES
|
|
|
|
config NUMA
|
|
bool "NUMA support"
|
|
default y if DISCONTIGMEM || SPARSEMEM
|
|
|
|
config SCHED_SMT
|
|
bool "SMT (Hyperthreading) scheduler support"
|
|
depends on SMP
|
|
default off
|
|
help
|
|
SMT scheduler support improves the CPU scheduler's decision making
|
|
when dealing with POWER5 cpus at a cost of slightly increased
|
|
overhead in some places. If unsure say N here.
|
|
|
|
source "kernel/Kconfig.preempt"
|
|
|
|
config EEH
|
|
bool "PCI Extended Error Handling (EEH)" if EMBEDDED
|
|
depends on PPC_PSERIES
|
|
default y if !EMBEDDED
|
|
|
|
#
|
|
# Use the generic interrupt handling code in kernel/irq/:
|
|
#
|
|
config GENERIC_HARDIRQS
|
|
bool
|
|
default y
|
|
|
|
config MSCHUNKS
|
|
bool
|
|
depends on PPC_ISERIES
|
|
default y
|
|
|
|
|
|
config PPC_RTAS
|
|
bool
|
|
depends on PPC_PSERIES || PPC_BPA
|
|
default y
|
|
|
|
config RTAS_PROC
|
|
bool "Proc interface to RTAS"
|
|
depends on PPC_RTAS
|
|
default y
|
|
|
|
config RTAS_FLASH
|
|
tristate "Firmware flash interface"
|
|
depends on RTAS_PROC
|
|
|
|
config SCANLOG
|
|
tristate "Scanlog dump interface"
|
|
depends on RTAS_PROC && PPC_PSERIES
|
|
|
|
config LPARCFG
|
|
tristate "LPAR Configuration Data"
|
|
depends on PPC_PSERIES || PPC_ISERIES
|
|
help
|
|
Provide system capacity information via human readable
|
|
<key word>=<value> pairs through a /proc/ppc64/lparcfg interface.
|
|
|
|
config SECCOMP
|
|
bool "Enable seccomp to safely compute untrusted bytecode"
|
|
depends on PROC_FS
|
|
default y
|
|
help
|
|
This kernel feature is useful for number crunching applications
|
|
that may need to compute untrusted bytecode during their
|
|
execution. By using pipes or other transports made available to
|
|
the process as file descriptors supporting the read/write
|
|
syscalls, it's possible to isolate those applications in
|
|
their own address space using seccomp. Once seccomp is
|
|
enabled via /proc/<pid>/seccomp, it cannot be disabled
|
|
and the task is only allowed to execute a few safe syscalls
|
|
defined by each seccomp mode.
|
|
|
|
If unsure, say Y. Only embedded should say N here.
|
|
|
|
endmenu
|
|
|
|
config ISA_DMA_API
|
|
bool
|
|
default y
|
|
|
|
menu "General setup"
|
|
|
|
config ISA
|
|
bool
|
|
help
|
|
Find out whether you have ISA slots on your motherboard. ISA is the
|
|
name of a bus system, i.e. the way the CPU talks to the other stuff
|
|
inside your box. If you have an Apple machine, say N here; if you
|
|
have an IBM RS/6000 or pSeries machine or a PReP machine, say Y. If
|
|
you have an embedded board, consult your board documentation.
|
|
|
|
config SBUS
|
|
bool
|
|
|
|
config MCA
|
|
bool
|
|
|
|
config EISA
|
|
bool
|
|
|
|
config PCI
|
|
bool "support for PCI devices" if (EMBEDDED && PPC_ISERIES)
|
|
default y
|
|
help
|
|
Find out whether your system includes a PCI bus. PCI is the name of
|
|
a bus system, i.e. the way the CPU talks to the other stuff inside
|
|
your box. If you say Y here, the kernel will include drivers and
|
|
infrastructure code to support PCI bus devices.
|
|
|
|
config PCI_DOMAINS
|
|
bool
|
|
default PCI
|
|
|
|
source "fs/Kconfig.binfmt"
|
|
|
|
source "drivers/pci/Kconfig"
|
|
|
|
config HOTPLUG_CPU
|
|
bool "Support for hot-pluggable CPUs"
|
|
depends on SMP && EXPERIMENTAL && (PPC_PSERIES || PPC_PMAC)
|
|
select HOTPLUG
|
|
---help---
|
|
Say Y here to be able to turn CPUs off and on.
|
|
|
|
Say N if you are unsure.
|
|
|
|
source "drivers/pcmcia/Kconfig"
|
|
|
|
source "drivers/pci/hotplug/Kconfig"
|
|
|
|
config PROC_DEVICETREE
|
|
bool "Support for Open Firmware device tree in /proc"
|
|
depends on !PPC_ISERIES
|
|
help
|
|
This option adds a device-tree directory under /proc which contains
|
|
an image of the device tree that the kernel copies from Open
|
|
Firmware. If unsure, say Y here.
|
|
|
|
config CMDLINE_BOOL
|
|
bool "Default bootloader kernel arguments"
|
|
depends on !PPC_ISERIES
|
|
|
|
config CMDLINE
|
|
string "Initial kernel command string"
|
|
depends on CMDLINE_BOOL
|
|
default "console=ttyS0,9600 console=tty0 root=/dev/sda2"
|
|
help
|
|
On some platforms, there is currently no way for the boot loader to
|
|
pass arguments to the kernel. For these platforms, you can supply
|
|
some command-line options at build time by entering them here. In
|
|
most cases you will need to specify the root device here.
|
|
|
|
endmenu
|
|
|
|
source "drivers/Kconfig"
|
|
|
|
source "fs/Kconfig"
|
|
|
|
menu "iSeries device drivers"
|
|
depends on PPC_ISERIES
|
|
|
|
config VIOCONS
|
|
tristate "iSeries Virtual Console Support"
|
|
|
|
config VIODASD
|
|
tristate "iSeries Virtual I/O disk support"
|
|
help
|
|
If you are running on an iSeries system and you want to use
|
|
virtual disks created and managed by OS/400, say Y.
|
|
|
|
config VIOCD
|
|
tristate "iSeries Virtual I/O CD support"
|
|
help
|
|
If you are running Linux on an IBM iSeries system and you want to
|
|
read a CD drive owned by OS/400, say Y here.
|
|
|
|
config VIOTAPE
|
|
tristate "iSeries Virtual Tape Support"
|
|
help
|
|
If you are running Linux on an iSeries system and you want Linux
|
|
to read and/or write a tape drive owned by OS/400, say Y here.
|
|
|
|
endmenu
|
|
|
|
config VIOPATH
|
|
bool
|
|
depends on VIOCONS || VIODASD || VIOCD || VIOTAPE || VETH
|
|
default y
|
|
|
|
source "arch/ppc64/oprofile/Kconfig"
|
|
|
|
source "arch/ppc64/Kconfig.debug"
|
|
|
|
source "security/Kconfig"
|
|
|
|
config KEYS_COMPAT
|
|
bool
|
|
depends on COMPAT && KEYS
|
|
default y
|
|
|
|
source "crypto/Kconfig"
|
|
|
|
source "lib/Kconfig"
|