mirror of
https://github.com/xen-project/xen.git
synced 2026-10-30 03:00:05 +01:00
Revert ia64 changes from previous checkin.
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
This commit is contained in:
1 parent
a8f141f465
commit
6e59ff5e15
9 files changed
+318
-232
No files matched your search
@@ -26,6 +26,10 @@ config MMU
|
||||
bool
|
||||
default y
|
||||
|
||||
config SWIOTLB
|
||||
bool
|
||||
default y
|
||||
|
||||
config RWSEM_XCHGADD_ALGORITHM
|
||||
bool
|
||||
default y
|
||||
@@ -97,16 +101,23 @@ config SCHED_NO_NO_OMIT_FRAME_POINTER
|
||||
bool
|
||||
default y
|
||||
|
||||
config IA64_UNCACHED_ALLOCATOR
|
||||
bool
|
||||
select GENERIC_ALLOCATOR
|
||||
|
||||
config DMA_IS_DMA32
|
||||
bool
|
||||
default y
|
||||
|
||||
choice
|
||||
prompt "System type"
|
||||
default IA64_GENERIC
|
||||
|
||||
config IA64_GENERIC
|
||||
bool "generic"
|
||||
select ACPI
|
||||
select NUMA
|
||||
select ACPI_NUMA
|
||||
select VIRTUAL_MEM_MAP
|
||||
select DISCONTIGMEM
|
||||
help
|
||||
This selects the system type of your hardware. A "generic" kernel
|
||||
will run on any supported IA-64 system. However, if you configure
|
||||
@@ -204,6 +215,21 @@ config IA64_PAGE_SIZE_64KB
|
||||
|
||||
endchoice
|
||||
|
||||
choice
|
||||
prompt "Page Table Levels"
|
||||
default PGTABLE_3
|
||||
|
||||
config PGTABLE_3
|
||||
bool "3 Levels"
|
||||
|
||||
config PGTABLE_4
|
||||
depends on !IA64_PAGE_SIZE_64KB
|
||||
bool "4 Levels"
|
||||
|
||||
endchoice
|
||||
|
||||
source kernel/Kconfig.hz
|
||||
|
||||
config IA64_BRL_EMU
|
||||
bool
|
||||
depends on ITANIUM
|
||||
@@ -216,40 +242,6 @@ config IA64_L1_CACHE_SHIFT
|
||||
default "6" if ITANIUM
|
||||
|
||||
# align cache-sensitive data to 64 bytes
|
||||
config NUMA
|
||||
bool "NUMA support"
|
||||
depends on !IA64_HP_SIM
|
||||
default y if IA64_SGI_SN2
|
||||
select ACPI_NUMA
|
||||
help
|
||||
Say Y to compile the kernel to support NUMA (Non-Uniform Memory
|
||||
Access). This option is for configuring high-end multiprocessor
|
||||
server systems. If in doubt, say N.
|
||||
|
||||
config VIRTUAL_MEM_MAP
|
||||
bool "Virtual mem map"
|
||||
default y if !IA64_HP_SIM
|
||||
help
|
||||
Say Y to compile the kernel with support for a virtual mem map.
|
||||
This code also only takes effect if a memory hole of greater than
|
||||
1 Gb is found during boot. You must turn this option on if you
|
||||
require the DISCONTIGMEM option for your machine. If you are
|
||||
unsure, say Y.
|
||||
|
||||
config HOLES_IN_ZONE
|
||||
bool
|
||||
default y if VIRTUAL_MEM_MAP
|
||||
|
||||
config DISCONTIGMEM
|
||||
bool "Discontiguous memory support"
|
||||
depends on (IA64_DIG || IA64_SGI_SN2 || IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB) && NUMA && VIRTUAL_MEM_MAP
|
||||
default y if (IA64_SGI_SN2 || IA64_GENERIC) && NUMA
|
||||
help
|
||||
Say Y to support efficient handling of discontiguous physical memory,
|
||||
for architectures which are either NUMA (Non-Uniform Memory Access)
|
||||
or have huge holes in the physical address space for other reasons.
|
||||
See <file:Documentation/vm/numa> for more.
|
||||
|
||||
config IA64_CYCLONE
|
||||
bool "Cyclone (EXA) Time Source support"
|
||||
help
|
||||
@@ -261,16 +253,10 @@ config IOSAPIC
|
||||
depends on !IA64_HP_SIM
|
||||
default y
|
||||
|
||||
config IA64_SGI_SN_SIM
|
||||
bool "SGI Medusa Simulator Support"
|
||||
depends on IA64_SGI_SN2
|
||||
help
|
||||
If you are compiling a kernel that will run under SGI's IA-64
|
||||
simulator (Medusa) then say Y, otherwise say N.
|
||||
|
||||
config IA64_SGI_SN_XP
|
||||
tristate "Support communication between SGI SSIs"
|
||||
depends on MSPEC
|
||||
depends on IA64_GENERIC || IA64_SGI_SN2
|
||||
select IA64_UNCACHED_ALLOCATOR
|
||||
help
|
||||
An SGI machine can be divided into multiple Single System
|
||||
Images which act independently of each other and have
|
||||
@@ -279,8 +265,10 @@ config IA64_SGI_SN_XP
|
||||
based on a network adapter and DMA messaging.
|
||||
|
||||
config FORCE_MAX_ZONEORDER
|
||||
int
|
||||
default "18"
|
||||
int "MAX_ORDER (11 - 17)" if !HUGETLB_PAGE
|
||||
range 11 17 if !HUGETLB_PAGE
|
||||
default "17" if HUGETLB_PAGE
|
||||
default "11"
|
||||
|
||||
config SMP
|
||||
bool "Symmetric multi-processing support"
|
||||
@@ -301,8 +289,8 @@ config SMP
|
||||
If you don't know what to do here, say N.
|
||||
|
||||
config NR_CPUS
|
||||
int "Maximum number of CPUs (2-512)"
|
||||
range 2 512
|
||||
int "Maximum number of CPUs (2-1024)"
|
||||
range 2 1024
|
||||
depends on SMP
|
||||
default "64"
|
||||
help
|
||||
@@ -343,10 +331,59 @@ config PREEMPT
|
||||
Say Y here if you are building a kernel for a desktop, embedded
|
||||
or real-time system. Say N if you are unsure.
|
||||
|
||||
config HAVE_DEC_LOCK
|
||||
source "mm/Kconfig"
|
||||
|
||||
config ARCH_SELECT_MEMORY_MODEL
|
||||
def_bool y
|
||||
|
||||
config ARCH_DISCONTIGMEM_ENABLE
|
||||
def_bool y
|
||||
help
|
||||
Say Y to support efficient handling of discontiguous physical memory,
|
||||
for architectures which are either NUMA (Non-Uniform Memory Access)
|
||||
or have huge holes in the physical address space for other reasons.
|
||||
See <file:Documentation/vm/numa> for more.
|
||||
|
||||
config ARCH_FLATMEM_ENABLE
|
||||
def_bool y
|
||||
|
||||
config ARCH_SPARSEMEM_ENABLE
|
||||
def_bool y
|
||||
depends on ARCH_DISCONTIGMEM_ENABLE
|
||||
|
||||
config ARCH_DISCONTIGMEM_DEFAULT
|
||||
def_bool y if (IA64_SGI_SN2 || IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB)
|
||||
depends on ARCH_DISCONTIGMEM_ENABLE
|
||||
|
||||
config NUMA
|
||||
bool "NUMA support"
|
||||
depends on !IA64_HP_SIM && !FLATMEM
|
||||
default y if IA64_SGI_SN2
|
||||
help
|
||||
Say Y to compile the kernel to support NUMA (Non-Uniform Memory
|
||||
Access). This option is for configuring high-end multiprocessor
|
||||
server systems. If in doubt, say N.
|
||||
|
||||
# VIRTUAL_MEM_MAP and FLAT_NODE_MEM_MAP are functionally equivalent.
|
||||
# VIRTUAL_MEM_MAP has been retained for historical reasons.
|
||||
config VIRTUAL_MEM_MAP
|
||||
bool "Virtual mem map"
|
||||
depends on !SPARSEMEM
|
||||
default y if !IA64_HP_SIM
|
||||
help
|
||||
Say Y to compile the kernel with support for a virtual mem map.
|
||||
This code also only takes effect if a memory hole of greater than
|
||||
1 Gb is found during boot. You must turn this option on if you
|
||||
require the DISCONTIGMEM option for your machine. If you are
|
||||
unsure, say Y.
|
||||
|
||||
config HOLES_IN_ZONE
|
||||
bool
|
||||
depends on (SMP || PREEMPT)
|
||||
default y
|
||||
default y if VIRTUAL_MEM_MAP
|
||||
|
||||
config HAVE_ARCH_EARLY_PFN_TO_NID
|
||||
def_bool y
|
||||
depends on NEED_MULTIPLE_NODES
|
||||
|
||||
config IA32_SUPPORT
|
||||
bool "Support for Linux/x86 binaries"
|
||||
@@ -384,11 +421,6 @@ config IA64_PALINFO
|
||||
To use this option, you have to ensure that the "/proc file system
|
||||
support" (CONFIG_PROC_FS) is enabled, too.
|
||||
|
||||
config ACPI_DEALLOCATE_IRQ
|
||||
bool
|
||||
depends on IOSAPIC && EXPERIMENTAL
|
||||
default y
|
||||
|
||||
source "drivers/firmware/Kconfig"
|
||||
|
||||
source "fs/Kconfig.binfmt"
|
||||
@@ -397,36 +429,14 @@ endmenu
|
||||
|
||||
menu "Power management and ACPI"
|
||||
|
||||
config PM
|
||||
bool "Power Management support"
|
||||
depends on !IA64_HP_SIM
|
||||
default y
|
||||
help
|
||||
"Power Management" means that parts of your computer are shut
|
||||
off or put into a power conserving "sleep" mode if they are not
|
||||
being used. There are two competing standards for doing this: APM
|
||||
and ACPI. If you want to use either one, say Y here and then also
|
||||
to the requisite support below.
|
||||
|
||||
Power Management is most important for battery powered laptop
|
||||
computers; if you have a laptop, check out the Linux Laptop home
|
||||
page on the WWW at <http://www.linux-on-laptops.com/> and the
|
||||
Battery Powered Linux mini-HOWTO, available from
|
||||
<http://www.tldp.org/docs.html#howto>.
|
||||
|
||||
Note that, even if you say N here, Linux on the x86 architecture
|
||||
will issue the hlt instruction if nothing is to be done, thereby
|
||||
sending the processor to sleep and saving power.
|
||||
|
||||
config ACPI
|
||||
bool
|
||||
depends on !IA64_HP_SIM
|
||||
default y
|
||||
|
||||
if !IA64_HP_SIM
|
||||
source "kernel/power/Kconfig"
|
||||
|
||||
source "drivers/acpi/Kconfig"
|
||||
|
||||
if PM
|
||||
|
||||
source "arch/ia64/kernel/cpufreq/Kconfig"
|
||||
|
||||
endif
|
||||
|
||||
endmenu
|
||||
@@ -438,15 +448,8 @@ menu "Bus options (PCI, PCMCIA)"
|
||||
config PCI
|
||||
bool "PCI support"
|
||||
help
|
||||
Find out whether you have a PCI motherboard. PCI is the name of a
|
||||
bus system, i.e. the way the CPU talks to the other stuff inside
|
||||
your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or
|
||||
VESA. If you have PCI, say Y, otherwise N.
|
||||
|
||||
The PCI-HOWTO, available from
|
||||
<http://www.tldp.org/docs.html#howto>, contains valuable
|
||||
information about which PCI hardware does work under Linux and which
|
||||
doesn't.
|
||||
Real IA-64 machines all have PCI/PCI-X/PCI Express busses. Say Y
|
||||
here unless you are using a simulator without PCI support.
|
||||
|
||||
config PCI_DOMAINS
|
||||
bool
|
||||
@@ -462,6 +465,8 @@ endmenu
|
||||
|
||||
endif
|
||||
|
||||
source "net/Kconfig"
|
||||
|
||||
source "drivers/Kconfig"
|
||||
|
||||
source "fs/Kconfig"
|
||||
@@ -479,10 +484,28 @@ config GENERIC_IRQ_PROBE
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_PENDING_IRQ
|
||||
bool
|
||||
depends on GENERIC_HARDIRQS && SMP
|
||||
default y
|
||||
|
||||
source "arch/ia64/hp/sim/Kconfig"
|
||||
|
||||
menu "Instrumentation Support"
|
||||
depends on EXPERIMENTAL
|
||||
|
||||
source "arch/ia64/oprofile/Kconfig"
|
||||
|
||||
config KPROBES
|
||||
bool "Kprobes (EXPERIMENTAL)"
|
||||
help
|
||||
Kprobes allows you to trap at almost any kernel address and
|
||||
execute a callback function. register_kprobe() establishes
|
||||
a probepoint and specifies the callback. Kprobes is useful
|
||||
for kernel debugging, non-intrusive instrumentation and testing.
|
||||
If in doubt, say "N".
|
||||
endmenu
|
||||
|
||||
source "arch/ia64/Kconfig.debug"
|
||||
|
||||
source "security/Kconfig"
|
||||
|
||||
@@ -11,9 +11,6 @@
|
||||
NM := $(CROSS_COMPILE)nm -B
|
||||
READELF := $(CROSS_COMPILE)readelf
|
||||
|
||||
# following is temporary pending xen directory restructuring
|
||||
NOSTDINC_FLAGS += -Iinclude/asm-xen
|
||||
|
||||
export AWK
|
||||
|
||||
CHECKFLAGS += -m64 -D__ia64=1 -D__ia64__=1 -D_LP64 -D__LP64__
|
||||
@@ -91,42 +88,7 @@ unwcheck: vmlinux
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
CLEAN_FILES += include/asm-ia64/.offsets.h.stamp vmlinux.gz bootloader
|
||||
#CLEAN_FILES += include/asm-xen/xen-public include/asm-ia64/xen/asm-xsi-offsets.h
|
||||
#CLEAN_FILES += include/asm-xen/linux-public include/asm-xen/asm-ia64/hypervisor.h
|
||||
|
||||
MRPROPER_FILES += include/asm-ia64/offsets.h
|
||||
|
||||
prepare: include/asm-ia64/offsets.h
|
||||
|
||||
arch/ia64/kernel/asm-offsets.s: include/asm include/linux/version.h include/config/MARKER
|
||||
|
||||
include/asm-ia64/offsets.h: arch/ia64/kernel/asm-offsets.s
|
||||
$(call filechk,gen-asm-offsets)
|
||||
|
||||
arch/ia64/kernel/asm-offsets.s: include/asm-ia64/.offsets.h.stamp
|
||||
|
||||
#XEN_PATH ?= $(srctree)/../xen-ia64-unstable.hg/
|
||||
include/asm-ia64/.offsets.h.stamp:
|
||||
mkdir -p include/asm-ia64
|
||||
[ -s include/asm-ia64/offsets.h ] \
|
||||
|| echo "#define IA64_TASK_SIZE 0" > include/asm-ia64/offsets.h
|
||||
touch $@
|
||||
[ -e include/asm-xen/asm ] \
|
||||
|| ln -s asm-ia64 include/asm-xen/asm
|
||||
# [ -e include/asm-xen/xen-public ] \
|
||||
# || ln -s $(XEN_PATH)/xen/include/public \
|
||||
# include/asm-xen/xen-public
|
||||
# [ -e include/asm-ia64/xen/asm-xsi-offsets.h ] \
|
||||
# || ln -s $(XEN_PATH)/xen/include/asm-ia64/asm-xsi-offsets.h \
|
||||
# include/asm-ia64/xen/asm-xsi-offsets.h
|
||||
# [ -e include/asm-xen/linux-public ] \
|
||||
# || ln -s $(XEN_PATH)/linux-2.6-xen-sparse/include/asm-xen/linux-public \
|
||||
include/asm-xen/linux-public
|
||||
[ -e include/asm-xen/asm-ia64/hypervisor.h ] \
|
||||
|| ln -s $(XEN_PATH)/linux-2.6-xen-sparse/include/asm-xen/asm-ia64/hypervisor.h \
|
||||
include/asm-xen/asm-ia64/hypervisor.h
|
||||
|
||||
CLEAN_FILES += vmlinux.gz bootloader
|
||||
|
||||
boot: lib/lib.a vmlinux
|
||||
$(Q)$(MAKE) $(build)=$(boot) $@
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
#include <asm/cache.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/kregs.h>
|
||||
#include <asm/offsets.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/percpu.h>
|
||||
#include <asm/processor.h>
|
||||
@@ -204,9 +204,6 @@ GLOBAL_ENTRY(__ia64_switch_to)
|
||||
(p6) br.cond.dpnt .map
|
||||
;;
|
||||
.done:
|
||||
(p6) ssm psr.ic // if we had to map, reenable the psr.ic bit FIRST!!!
|
||||
;;
|
||||
(p6) srlz.d
|
||||
ld8 sp=[r21] // load kernel stack pointer of new task
|
||||
mov IA64_KR(CURRENT)=in0 // update "current" application register
|
||||
mov r8=r13 // return pointer to previously running task
|
||||
@@ -234,6 +231,9 @@ GLOBAL_ENTRY(__ia64_switch_to)
|
||||
mov IA64_KR(CURRENT_STACK)=r26 // remember last page we mapped...
|
||||
;;
|
||||
itr.d dtr[r25]=r23 // wire in new mapping...
|
||||
ssm psr.ic // reenable the psr.ic bit
|
||||
;;
|
||||
srlz.d
|
||||
br.cond.sptk .done
|
||||
END(__ia64_switch_to)
|
||||
|
||||
@@ -470,17 +470,28 @@ GLOBAL_ENTRY(load_switch_stack)
|
||||
br.cond.sptk.many b7
|
||||
END(load_switch_stack)
|
||||
|
||||
GLOBAL_ENTRY(__ia64_syscall)
|
||||
.regstk 6,0,0,0
|
||||
mov r15=in5 // put syscall number in place
|
||||
break __BREAK_SYSCALL
|
||||
movl r2=errno
|
||||
cmp.eq p6,p7=-1,r10
|
||||
GLOBAL_ENTRY(prefetch_stack)
|
||||
add r14 = -IA64_SWITCH_STACK_SIZE, sp
|
||||
add r15 = IA64_TASK_THREAD_KSP_OFFSET, in0
|
||||
;;
|
||||
(p6) st4 [r2]=r8
|
||||
(p6) mov r8=-1
|
||||
ld8 r16 = [r15] // load next's stack pointer
|
||||
lfetch.fault.excl [r14], 128
|
||||
;;
|
||||
lfetch.fault.excl [r14], 128
|
||||
lfetch.fault [r16], 128
|
||||
;;
|
||||
lfetch.fault.excl [r14], 128
|
||||
lfetch.fault [r16], 128
|
||||
;;
|
||||
lfetch.fault.excl [r14], 128
|
||||
lfetch.fault [r16], 128
|
||||
;;
|
||||
lfetch.fault.excl [r14], 128
|
||||
lfetch.fault [r16], 128
|
||||
;;
|
||||
lfetch.fault [r16], 128
|
||||
br.ret.sptk.many rp
|
||||
END(__ia64_syscall)
|
||||
END(prefetch_stack)
|
||||
|
||||
GLOBAL_ENTRY(execve)
|
||||
mov r15=__NR_execve // put syscall number in place
|
||||
@@ -640,7 +651,7 @@ END(ia64_ret_from_syscall)
|
||||
* r8-r11: restored (syscall return value(s))
|
||||
* r12: restored (user-level stack pointer)
|
||||
* r13: restored (user-level thread pointer)
|
||||
* r14: cleared
|
||||
* r14: set to __kernel_syscall_via_epc
|
||||
* r15: restored (syscall #)
|
||||
* r16-r17: cleared
|
||||
* r18: user-level b6
|
||||
@@ -661,7 +672,7 @@ END(ia64_ret_from_syscall)
|
||||
* pr: restored (user-level pr)
|
||||
* b0: restored (user-level rp)
|
||||
* b6: restored
|
||||
* b7: cleared
|
||||
* b7: set to __kernel_syscall_via_epc
|
||||
* ar.unat: restored (user-level ar.unat)
|
||||
* ar.pfs: restored (user-level ar.pfs)
|
||||
* ar.rsc: restored (user-level ar.rsc)
|
||||
@@ -707,72 +718,79 @@ GLOBAL_ENTRY(__ia64_leave_syscall)
|
||||
;;
|
||||
(p6) ld4 r31=[r18] // load current_thread_info()->flags
|
||||
ld8 r19=[r2],PT(B6)-PT(LOADRS) // load ar.rsc value for "loadrs"
|
||||
mov b7=r0 // clear b7
|
||||
nop.i 0
|
||||
;;
|
||||
ld8 r23=[r3],PT(R11)-PT(AR_BSPSTORE) // load ar.bspstore (may be garbage)
|
||||
mov r16=ar.bsp // M2 get existing backing store pointer
|
||||
ld8 r18=[r2],PT(R9)-PT(B6) // load b6
|
||||
(p6) and r15=TIF_WORK_MASK,r31 // any work other than TIF_SYSCALL_TRACE?
|
||||
;;
|
||||
mov r16=ar.bsp // M2 get existing backing store pointer
|
||||
ld8 r23=[r3],PT(R11)-PT(AR_BSPSTORE) // load ar.bspstore (may be garbage)
|
||||
(p6) cmp4.ne.unc p6,p0=r15, r0 // any special work pending?
|
||||
(p6) br.cond.spnt .work_pending_syscall
|
||||
;;
|
||||
// start restoring the state saved on the kernel stack (struct pt_regs):
|
||||
ld8 r9=[r2],PT(CR_IPSR)-PT(R9)
|
||||
ld8 r11=[r3],PT(CR_IIP)-PT(R11)
|
||||
mov f6=f0 // clear f6
|
||||
(pNonSys) break 0 // bug check: we shouldn't be here if pNonSys is TRUE!
|
||||
;;
|
||||
invala // M0|1 invalidate ALAT
|
||||
rsm psr.i | psr.ic // M2 initiate turning off of interrupt and interruption collection
|
||||
mov f9=f0 // clear f9
|
||||
rsm psr.i | psr.ic // M2 turn off interrupts and interruption collection
|
||||
cmp.eq p9,p0=r0,r0 // A set p9 to indicate that we should restore cr.ifs
|
||||
|
||||
ld8 r29=[r2],16 // load cr.ipsr
|
||||
ld8 r28=[r3],16 // load cr.iip
|
||||
mov f8=f0 // clear f8
|
||||
ld8 r29=[r2],16 // M0|1 load cr.ipsr
|
||||
ld8 r28=[r3],16 // M0|1 load cr.iip
|
||||
mov r22=r0 // A clear r22
|
||||
;;
|
||||
ld8 r30=[r2],16 // M0|1 load cr.ifs
|
||||
ld8 r25=[r3],16 // M0|1 load ar.unat
|
||||
cmp.eq p9,p0=r0,r0 // set p9 to indicate that we should restore cr.ifs
|
||||
;;
|
||||
ld8 r26=[r2],PT(B0)-PT(AR_PFS) // M0|1 load ar.pfs
|
||||
(pKStk) mov r22=psr // M2 read PSR now that interrupts are disabled
|
||||
mov f10=f0 // clear f10
|
||||
;;
|
||||
ld8 r21=[r2],PT(AR_RNAT)-PT(B0) // load b0
|
||||
ld8 r27=[r3],PT(PR)-PT(AR_RSC) // load ar.rsc
|
||||
mov f11=f0 // clear f11
|
||||
;;
|
||||
ld8 r24=[r2],PT(AR_FPSR)-PT(AR_RNAT) // load ar.rnat (may be garbage)
|
||||
ld8 r31=[r3],PT(R1)-PT(PR) // load predicates
|
||||
(pUStk) add r14=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13
|
||||
;;
|
||||
ld8 r20=[r2],PT(R12)-PT(AR_FPSR) // load ar.fpsr
|
||||
ld8.fill r1=[r3],16 // load r1
|
||||
(pUStk) mov r17=1
|
||||
ld8 r26=[r2],PT(B0)-PT(AR_PFS) // M0|1 load ar.pfs
|
||||
(pKStk) mov r22=psr // M2 read PSR now that interrupts are disabled
|
||||
nop 0
|
||||
;;
|
||||
srlz.d // M0 ensure interruption collection is off
|
||||
ld8.fill r13=[r3],16
|
||||
mov f7=f0 // clear f7
|
||||
ld8 r21=[r2],PT(AR_RNAT)-PT(B0) // M0|1 load b0
|
||||
ld8 r27=[r3],PT(PR)-PT(AR_RSC) // M0|1 load ar.rsc
|
||||
mov f6=f0 // F clear f6
|
||||
;;
|
||||
ld8.fill r12=[r2] // restore r12 (sp)
|
||||
mov.m ar.ssd=r0 // M2 clear ar.ssd
|
||||
mov r22=r0 // clear r22
|
||||
ld8 r24=[r2],PT(AR_FPSR)-PT(AR_RNAT) // M0|1 load ar.rnat (may be garbage)
|
||||
ld8 r31=[r3],PT(R1)-PT(PR) // M0|1 load predicates
|
||||
mov f7=f0 // F clear f7
|
||||
;;
|
||||
ld8 r20=[r2],PT(R12)-PT(AR_FPSR) // M0|1 load ar.fpsr
|
||||
ld8.fill r1=[r3],16 // M0|1 load r1
|
||||
(pUStk) mov r17=1 // A
|
||||
;;
|
||||
(pUStk) st1 [r14]=r17 // M2|3
|
||||
ld8.fill r13=[r3],16 // M0|1
|
||||
mov f8=f0 // F clear f8
|
||||
;;
|
||||
ld8.fill r12=[r2] // M0|1 restore r12 (sp)
|
||||
ld8.fill r15=[r3] // M0|1 restore r15
|
||||
mov b6=r18 // I0 restore b6
|
||||
|
||||
ld8.fill r15=[r3] // restore r15
|
||||
(pUStk) st1 [r14]=r17
|
||||
addl r3=THIS_CPU(ia64_phys_stacked_size_p8),r0
|
||||
;;
|
||||
(pUStk) ld4 r17=[r3] // r17 = cpu_data->phys_stacked_size_p8
|
||||
mov.m ar.csd=r0 // M2 clear ar.csd
|
||||
mov b6=r18 // I0 restore b6
|
||||
;;
|
||||
mov r14=r0 // clear r14
|
||||
shr.u r18=r19,16 // I0|1 get byte size of existing "dirty" partition
|
||||
(pKStk) br.cond.dpnt.many skip_rbs_switch
|
||||
addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0 // A
|
||||
mov f9=f0 // F clear f9
|
||||
(pKStk) br.cond.dpnt.many skip_rbs_switch // B
|
||||
|
||||
mov.m ar.ccv=r0 // clear ar.ccv
|
||||
(pNonSys) br.cond.dpnt.many dont_preserve_current_frame
|
||||
br.cond.sptk.many rbs_switch
|
||||
srlz.d // M0 ensure interruption collection is off (for cover)
|
||||
shr.u r18=r19,16 // I0|1 get byte size of existing "dirty" partition
|
||||
cover // B add current frame into dirty partition & set cr.ifs
|
||||
;;
|
||||
(pUStk) ld4 r17=[r17] // M0|1 r17 = cpu_data->phys_stacked_size_p8
|
||||
mov r19=ar.bsp // M2 get new backing store pointer
|
||||
mov f10=f0 // F clear f10
|
||||
|
||||
nop.m 0
|
||||
movl r14=__kernel_syscall_via_epc // X
|
||||
;;
|
||||
mov.m ar.csd=r0 // M2 clear ar.csd
|
||||
mov.m ar.ccv=r0 // M2 clear ar.ccv
|
||||
mov b7=r14 // I0 clear b7 (hint with __kernel_syscall_via_epc)
|
||||
|
||||
mov.m ar.ssd=r0 // M2 clear ar.ssd
|
||||
mov f11=f0 // F clear f11
|
||||
br.cond.sptk.many rbs_switch // B
|
||||
END(__ia64_leave_syscall)
|
||||
|
||||
#ifdef CONFIG_IA32_SUPPORT
|
||||
@@ -891,7 +909,7 @@ GLOBAL_ENTRY(__ia64_leave_kernel)
|
||||
ldf.fill f7=[r2],PT(F11)-PT(F7)
|
||||
ldf.fill f8=[r3],32
|
||||
;;
|
||||
srlz.i // ensure interruption collection is off
|
||||
srlz.d // ensure that inter. collection is off (VHPT is don't care, since text is pinned)
|
||||
mov ar.ccv=r15
|
||||
;;
|
||||
ldf.fill f11=[r2]
|
||||
@@ -951,11 +969,10 @@ GLOBAL_ENTRY(__ia64_leave_kernel)
|
||||
* NOTE: alloc, loadrs, and cover can't be predicated.
|
||||
*/
|
||||
(pNonSys) br.cond.dpnt dont_preserve_current_frame
|
||||
|
||||
rbs_switch:
|
||||
cover // add current frame into dirty partition and set cr.ifs
|
||||
;;
|
||||
mov r19=ar.bsp // get new backing store pointer
|
||||
rbs_switch:
|
||||
sub r16=r16,r18 // krbs = old bsp - size of dirty partition
|
||||
cmp.ne p9,p0=r0,r0 // clear p9 to skip restore of cr.ifs
|
||||
;;
|
||||
@@ -1030,14 +1047,14 @@ rse_clear_invalid:
|
||||
mov loc5=0
|
||||
mov loc6=0
|
||||
mov loc7=0
|
||||
(pRecurse) br.call.sptk.few b0=rse_clear_invalid
|
||||
(pRecurse) br.call.dptk.few b0=rse_clear_invalid
|
||||
;;
|
||||
mov loc8=0
|
||||
mov loc9=0
|
||||
cmp.ne pReturn,p0=r0,in1 // if recursion count != 0, we need to do a br.ret
|
||||
mov loc10=0
|
||||
mov loc11=0
|
||||
(pReturn) br.ret.sptk.many b0
|
||||
(pReturn) br.ret.dptk.many b0
|
||||
#endif /* !CONFIG_ITANIUM */
|
||||
# undef pRecurse
|
||||
# undef pReturn
|
||||
@@ -1261,7 +1278,7 @@ ENTRY(sys_rt_sigreturn)
|
||||
stf.spill [r17]=f11
|
||||
adds out0=16,sp // out0 = &sigscratch
|
||||
br.call.sptk.many rp=ia64_rt_sigreturn
|
||||
.ret19: .restore sp 0
|
||||
.ret19: .restore sp,0
|
||||
adds sp=16,sp
|
||||
;;
|
||||
ld8 r9=[sp] // load new ar.unat
|
||||
@@ -1583,11 +1600,11 @@ sys_call_table:
|
||||
data8 sys_add_key
|
||||
data8 sys_request_key
|
||||
data8 sys_keyctl
|
||||
data8 sys_ioprio_set
|
||||
data8 sys_ioprio_get // 1275
|
||||
data8 sys_ni_syscall
|
||||
data8 sys_ni_syscall // 1275
|
||||
data8 sys_ni_syscall
|
||||
data8 sys_ni_syscall
|
||||
data8 sys_ni_syscall
|
||||
data8 sys_ni_syscall
|
||||
data8 sys_inotify_init
|
||||
data8 sys_inotify_add_watch
|
||||
data8 sys_inotify_rm_watch
|
||||
|
||||
.org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
|
||||
@@ -25,7 +25,7 @@
|
||||
#include <asm/fpu.h>
|
||||
#include <asm/kregs.h>
|
||||
#include <asm/mmu_context.h>
|
||||
#include <asm/offsets.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/pal.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/processor.h>
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
* 02/01/00 R.Seth fixed get_cpuinfo for SMP
|
||||
* 01/07/99 S.Eranian added the support for command line argument
|
||||
* 06/24/99 W.Drummond added boot_cpu_data.
|
||||
* 05/28/05 Z. Menyhart Dynamic stride size for "flush_icache_range()"
|
||||
*/
|
||||
#include <linux/config.h>
|
||||
#include <linux/module.h>
|
||||
@@ -40,6 +41,8 @@
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/efi.h>
|
||||
#include <linux/initrd.h>
|
||||
#include <linux/platform.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/ia32.h>
|
||||
#include <asm/machvec.h>
|
||||
@@ -72,14 +75,43 @@ DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8);
|
||||
unsigned long ia64_cycles_per_usec;
|
||||
struct ia64_boot_param *ia64_boot_param;
|
||||
struct screen_info screen_info;
|
||||
unsigned long vga_console_iobase;
|
||||
unsigned long vga_console_membase;
|
||||
|
||||
static struct resource data_resource = {
|
||||
.name = "Kernel data",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM
|
||||
};
|
||||
|
||||
static struct resource code_resource = {
|
||||
.name = "Kernel code",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM
|
||||
};
|
||||
extern void efi_initialize_iomem_resources(struct resource *,
|
||||
struct resource *);
|
||||
extern char _text[], _end[], _etext[];
|
||||
|
||||
unsigned long ia64_max_cacheline_size;
|
||||
|
||||
int dma_get_cache_alignment(void)
|
||||
{
|
||||
return ia64_max_cacheline_size;
|
||||
}
|
||||
EXPORT_SYMBOL(dma_get_cache_alignment);
|
||||
|
||||
unsigned long ia64_iobase; /* virtual address for I/O accesses */
|
||||
EXPORT_SYMBOL(ia64_iobase);
|
||||
struct io_space io_space[MAX_IO_SPACES];
|
||||
EXPORT_SYMBOL(io_space);
|
||||
unsigned int num_io_spaces;
|
||||
|
||||
/*
|
||||
* "flush_icache_range()" needs to know what processor dependent stride size to use
|
||||
* when it makes i-cache(s) coherent with d-caches.
|
||||
*/
|
||||
#define I_CACHE_STRIDE_SHIFT 5 /* Safest way to go: 32 bytes by 32 bytes */
|
||||
unsigned long ia64_i_cache_stride_shift = ~0;
|
||||
|
||||
/*
|
||||
* The merge_mask variable needs to be set to (max(iommu_page_size(iommu)) - 1). This
|
||||
* mask specifies a mask of address bits that must be 0 in order for two buffers to be
|
||||
@@ -159,6 +191,22 @@ sort_regions (struct rsvd_region *rsvd_region, int max)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Request address space for all standard resources
|
||||
*/
|
||||
static int __init register_memory(void)
|
||||
{
|
||||
code_resource.start = ia64_tpa(_text);
|
||||
code_resource.end = ia64_tpa(_etext) - 1;
|
||||
data_resource.start = ia64_tpa(_etext);
|
||||
data_resource.end = ia64_tpa(_end) - 1;
|
||||
efi_initialize_iomem_resources(&code_resource, &data_resource);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
__initcall(register_memory);
|
||||
|
||||
/**
|
||||
* reserve_memory - setup reserved memory areas
|
||||
*
|
||||
@@ -199,6 +247,9 @@ reserve_memory (void)
|
||||
}
|
||||
#endif
|
||||
|
||||
efi_memmap_init(&rsvd_region[n].start, &rsvd_region[n].end);
|
||||
n++;
|
||||
|
||||
/* end of memory marker */
|
||||
rsvd_region[n].start = ~0UL;
|
||||
rsvd_region[n].end = ~0UL;
|
||||
@@ -232,28 +283,31 @@ find_initrd (void)
|
||||
static void __init
|
||||
io_port_init (void)
|
||||
{
|
||||
extern unsigned long ia64_iobase;
|
||||
unsigned long phys_iobase;
|
||||
|
||||
/*
|
||||
* Set `iobase' to the appropriate address in region 6 (uncached access range).
|
||||
* Set `iobase' based on the EFI memory map or, failing that, the
|
||||
* value firmware left in ar.k0.
|
||||
*
|
||||
* The EFI memory map is the "preferred" location to get the I/O port space base,
|
||||
* rather the relying on AR.KR0. This should become more clear in future SAL
|
||||
* specs. We'll fall back to getting it out of AR.KR0 if no appropriate entry is
|
||||
* found in the memory map.
|
||||
* Note that in ia32 mode, IN/OUT instructions use ar.k0 to compute
|
||||
* the port's virtual address, so ia32_load_state() loads it with a
|
||||
* user virtual address. But in ia64 mode, glibc uses the
|
||||
* *physical* address in ar.k0 to mmap the appropriate area from
|
||||
* /dev/mem, and the inX()/outX() interfaces use MMIO. In both
|
||||
* cases, user-mode can only use the legacy 0-64K I/O port space.
|
||||
*
|
||||
* ar.k0 is not involved in kernel I/O port accesses, which can use
|
||||
* any of the I/O port spaces and are done via MMIO using the
|
||||
* virtual mmio_base from the appropriate io_space[].
|
||||
*/
|
||||
phys_iobase = efi_get_iobase();
|
||||
if (phys_iobase)
|
||||
/* set AR.KR0 since this is all we use it for anyway */
|
||||
ia64_set_kr(IA64_KR_IO_BASE, phys_iobase);
|
||||
else {
|
||||
if (!phys_iobase) {
|
||||
phys_iobase = ia64_get_kr(IA64_KR_IO_BASE);
|
||||
printk(KERN_INFO "No I/O port range found in EFI memory map, falling back "
|
||||
"to AR.KR0\n");
|
||||
printk(KERN_INFO "I/O port base = 0x%lx\n", phys_iobase);
|
||||
printk(KERN_INFO "No I/O port range found in EFI memory map, "
|
||||
"falling back to AR.KR0 (0x%lx)\n", phys_iobase);
|
||||
}
|
||||
ia64_iobase = (unsigned long) ioremap(phys_iobase, 0);
|
||||
ia64_set_kr(IA64_KR_IO_BASE, __pa(ia64_iobase));
|
||||
|
||||
/* setup legacy IO port space */
|
||||
io_space[0].mmio_base = ia64_iobase;
|
||||
@@ -273,26 +327,29 @@ io_port_init (void)
|
||||
static inline int __init
|
||||
early_console_setup (char *cmdline)
|
||||
{
|
||||
int earlycons = 0;
|
||||
|
||||
#ifdef CONFIG_XEN
|
||||
if (!early_xen_console_setup(cmdline)) return 0;
|
||||
if (!early_xen_console_setup(cmdline))
|
||||
earlycons++;
|
||||
#endif
|
||||
#ifdef CONFIG_SERIAL_SGI_L1_CONSOLE
|
||||
{
|
||||
extern int sn_serial_console_early_setup(void);
|
||||
if (!sn_serial_console_early_setup())
|
||||
return 0;
|
||||
earlycons++;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_EFI_PCDP
|
||||
if (!efi_setup_pcdp_console(cmdline))
|
||||
return 0;
|
||||
earlycons++;
|
||||
#endif
|
||||
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
||||
if (!early_serial_console_init(cmdline))
|
||||
return 0;
|
||||
earlycons++;
|
||||
#endif
|
||||
|
||||
return -1;
|
||||
return (earlycons) ? 0 : -1;
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -373,7 +430,7 @@ setup_arch (char **cmdline_p)
|
||||
if (early_console_setup(*cmdline_p) == 0)
|
||||
mark_bsp_online();
|
||||
|
||||
#ifdef CONFIG_ACPI_BOOT
|
||||
#ifdef CONFIG_ACPI
|
||||
/* Initialize the ACPI boot-time table parser */
|
||||
acpi_table_init();
|
||||
# ifdef CONFIG_ACPI_NUMA
|
||||
@@ -408,8 +465,9 @@ setup_arch (char **cmdline_p)
|
||||
#endif
|
||||
|
||||
cpu_init(); /* initialize the bootstrap CPU */
|
||||
mmu_context_init(); /* initialize context_id bitmap */
|
||||
|
||||
#ifdef CONFIG_ACPI_BOOT
|
||||
#ifdef CONFIG_ACPI
|
||||
acpi_boot_init();
|
||||
#endif
|
||||
|
||||
@@ -515,7 +573,7 @@ show_cpuinfo (struct seq_file *m, void *v)
|
||||
c->itc_freq / 1000000, c->itc_freq % 1000000,
|
||||
lpj*HZ/500000, (lpj*HZ/5000) % 100);
|
||||
#ifdef CONFIG_SMP
|
||||
seq_printf(m, "siblings : %u\n", c->num_log);
|
||||
seq_printf(m, "siblings : %u\n", cpus_weight(cpu_core_map[cpunum]));
|
||||
if (c->threads_per_core > 1 || c->cores_per_socket > 1)
|
||||
seq_printf(m,
|
||||
"physical id: %u\n"
|
||||
@@ -625,6 +683,12 @@ setup_per_cpu_areas (void)
|
||||
/* start_kernel() requires this... */
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the max. cache line size.
|
||||
*
|
||||
* In addition, the minimum of the i-cache stride sizes is calculated for
|
||||
* "flush_icache_range()".
|
||||
*/
|
||||
static void
|
||||
get_max_cacheline_size (void)
|
||||
{
|
||||
@@ -638,6 +702,8 @@ get_max_cacheline_size (void)
|
||||
printk(KERN_ERR "%s: ia64_pal_cache_summary() failed (status=%ld)\n",
|
||||
__FUNCTION__, status);
|
||||
max = SMP_CACHE_BYTES;
|
||||
/* Safest setup for "flush_icache_range()" */
|
||||
ia64_i_cache_stride_shift = I_CACHE_STRIDE_SHIFT;
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -646,14 +712,31 @@ get_max_cacheline_size (void)
|
||||
&cci);
|
||||
if (status != 0) {
|
||||
printk(KERN_ERR
|
||||
"%s: ia64_pal_cache_config_info(l=%lu) failed (status=%ld)\n",
|
||||
"%s: ia64_pal_cache_config_info(l=%lu, 2) failed (status=%ld)\n",
|
||||
__FUNCTION__, l, status);
|
||||
max = SMP_CACHE_BYTES;
|
||||
/* The safest setup for "flush_icache_range()" */
|
||||
cci.pcci_stride = I_CACHE_STRIDE_SHIFT;
|
||||
cci.pcci_unified = 1;
|
||||
}
|
||||
line_size = 1 << cci.pcci_line_size;
|
||||
if (line_size > max)
|
||||
max = line_size;
|
||||
}
|
||||
if (!cci.pcci_unified) {
|
||||
status = ia64_pal_cache_config_info(l,
|
||||
/* cache_type (instruction)= */ 1,
|
||||
&cci);
|
||||
if (status != 0) {
|
||||
printk(KERN_ERR
|
||||
"%s: ia64_pal_cache_config_info(l=%lu, 1) failed (status=%ld)\n",
|
||||
__FUNCTION__, l, status);
|
||||
/* The safest setup for "flush_icache_range()" */
|
||||
cci.pcci_stride = I_CACHE_STRIDE_SHIFT;
|
||||
}
|
||||
}
|
||||
if (cci.pcci_stride < ia64_i_cache_stride_shift)
|
||||
ia64_i_cache_stride_shift = cci.pcci_stride;
|
||||
}
|
||||
out:
|
||||
if (max > ia64_max_cacheline_size)
|
||||
ia64_max_cacheline_size = max;
|
||||
@@ -782,6 +865,7 @@ cpu_init (void)
|
||||
/* size of physical stacked register partition plus 8 bytes: */
|
||||
__get_cpu_var(ia64_phys_stacked_size_p8) = num_phys_stacked*8 + 8;
|
||||
platform_cpu_init();
|
||||
pm_idle = default_idle;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -13,10 +13,10 @@ then
|
||||
mv net net.xen-x86
|
||||
mv kernel kernel.xen-x86
|
||||
mv drivers/acpi/tables.c drivers/acpi/tables.c.xen-x86
|
||||
mv arch/xen/kernel drivers/xen/core
|
||||
mv arch/xen arch/xen.xen-x86
|
||||
mkdir arch/xen
|
||||
mv arch/xen.xen-x86/configs arch/xen
|
||||
# mv arch/xen/kernel drivers/xen/core
|
||||
# mv arch/xen arch/xen.xen-x86
|
||||
# mkdir arch/xen
|
||||
# mv arch/xen.xen-x86/configs arch/xen
|
||||
# mv include/asm-generic include/asm-generic.xen-x86
|
||||
mv include/linux include/linux.xen-x86
|
||||
mkdir include/linux
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <linux/config.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/hw_irq.h>
|
||||
#include <asm-xen/evtchn.h>
|
||||
#include <xen/evtchn.h>
|
||||
|
||||
#define MAX_EVTCHN 1024
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
#include <asm/cache.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/kregs.h>
|
||||
#include <asm/offsets.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/percpu.h>
|
||||
#include <asm/processor.h>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#include <asm/break.h>
|
||||
#include <asm/ia32.h>
|
||||
#include <asm/kregs.h>
|
||||
#include <asm/offsets.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
||||