ia64/xen-unstable

changeset 2395:11be1dfb262b

bitkeeper revision 1.1159.1.112 (41359af7RN3SI00umSU2AWWCPZ273A)

Merge xenbk@gandalf:/var/bk/xeno-unstable.bk
into wray-m-3.hpl.hp.com:/home/mjw/repos-bk/xeno-unstable.bk
author mjw@wray-m-3.hpl.hp.com
date Wed Sep 01 09:43:32 2004 +0000 (2004-09-01)
parents 159487c5dc02 631de0f7529b
children daf585a98004
files .rootkeys BitKeeper/etc/logging_ok Makefile README README.CD docs/HOWTOs/Console-HOWTO docs/blkif-drivers-explained.txt docs/interface.tex docs/user.tex linux-2.4.27-xen-sparse/arch/xen/kernel/head.S linux-2.4.27-xen-sparse/arch/xen/kernel/time.c linux-2.4.27-xen-sparse/include/asm-xen/fixmap.h linux-2.4.27-xen-sparse/include/asm-xen/irq.h linux-2.4.27-xen-sparse/include/linux/mm.h linux-2.4.27-xen-sparse/mkbuildtree linux-2.6.7-xen-sparse/arch/xen/Kconfig linux-2.6.7-xen-sparse/arch/xen/Kconfig.drivers linux-2.6.7-xen-sparse/arch/xen/Makefile linux-2.6.7-xen-sparse/arch/xen/boot/Makefile linux-2.6.7-xen-sparse/arch/xen/configs/xen0_defconfig linux-2.6.7-xen-sparse/arch/xen/configs/xenU_defconfig linux-2.6.7-xen-sparse/arch/xen/i386/Kconfig linux-2.6.7-xen-sparse/arch/xen/i386/Makefile linux-2.6.7-xen-sparse/arch/xen/i386/kernel/Makefile linux-2.6.7-xen-sparse/arch/xen/i386/kernel/cpu/Makefile linux-2.6.7-xen-sparse/arch/xen/i386/kernel/cpu/common.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/entry.S linux-2.6.7-xen-sparse/arch/xen/i386/kernel/head.S linux-2.6.7-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/ioport.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/irq.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/ldt.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/pci-dma.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/process.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/setup.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/signal.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/sysenter.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/time.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/timers/Makefile linux-2.6.7-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/traps.c linux-2.6.7-xen-sparse/arch/xen/i386/kernel/vmlinux.lds.S linux-2.6.7-xen-sparse/arch/xen/i386/kernel/vsyscall.S linux-2.6.7-xen-sparse/arch/xen/i386/kernel/vsyscall.lds linux-2.6.7-xen-sparse/arch/xen/i386/mm/Makefile linux-2.6.7-xen-sparse/arch/xen/i386/mm/fault.c linux-2.6.7-xen-sparse/arch/xen/i386/mm/highmem.c linux-2.6.7-xen-sparse/arch/xen/i386/mm/hypervisor.c linux-2.6.7-xen-sparse/arch/xen/i386/mm/init.c linux-2.6.7-xen-sparse/arch/xen/i386/mm/ioremap.c linux-2.6.7-xen-sparse/arch/xen/i386/mm/pgtable.c linux-2.6.7-xen-sparse/arch/xen/i386/pci/Makefile linux-2.6.7-xen-sparse/arch/xen/i386/pci/direct.c linux-2.6.7-xen-sparse/arch/xen/i386/pci/irq.c linux-2.6.7-xen-sparse/arch/xen/kernel/Makefile linux-2.6.7-xen-sparse/arch/xen/kernel/ctrl_if.c linux-2.6.7-xen-sparse/arch/xen/kernel/empty.c linux-2.6.7-xen-sparse/arch/xen/kernel/evtchn.c linux-2.6.7-xen-sparse/arch/xen/kernel/fixup.c linux-2.6.7-xen-sparse/arch/xen/kernel/gnttab.c linux-2.6.7-xen-sparse/arch/xen/kernel/process.c linux-2.6.7-xen-sparse/arch/xen/kernel/reboot.c linux-2.6.7-xen-sparse/arch/xen/kernel/xen_proc.c linux-2.6.7-xen-sparse/drivers/Makefile linux-2.6.7-xen-sparse/drivers/char/mem.c linux-2.6.7-xen-sparse/drivers/char/tty_io.c linux-2.6.7-xen-sparse/drivers/xen/Makefile linux-2.6.7-xen-sparse/drivers/xen/blkback/Makefile linux-2.6.7-xen-sparse/drivers/xen/blkback/blkback.c linux-2.6.7-xen-sparse/drivers/xen/blkback/common.h linux-2.6.7-xen-sparse/drivers/xen/blkback/control.c linux-2.6.7-xen-sparse/drivers/xen/blkback/interface.c linux-2.6.7-xen-sparse/drivers/xen/blkback/vbd.c linux-2.6.7-xen-sparse/drivers/xen/blkfront/Kconfig linux-2.6.7-xen-sparse/drivers/xen/blkfront/Makefile linux-2.6.7-xen-sparse/drivers/xen/blkfront/blkfront.c linux-2.6.7-xen-sparse/drivers/xen/blkfront/block.h linux-2.6.7-xen-sparse/drivers/xen/blkfront/vbd.c linux-2.6.7-xen-sparse/drivers/xen/console/Makefile linux-2.6.7-xen-sparse/drivers/xen/console/console.c linux-2.6.7-xen-sparse/drivers/xen/evtchn/Makefile linux-2.6.7-xen-sparse/drivers/xen/evtchn/evtchn.c linux-2.6.7-xen-sparse/drivers/xen/netback/Makefile linux-2.6.7-xen-sparse/drivers/xen/netback/common.h linux-2.6.7-xen-sparse/drivers/xen/netback/control.c linux-2.6.7-xen-sparse/drivers/xen/netback/interface.c linux-2.6.7-xen-sparse/drivers/xen/netback/netback.c linux-2.6.7-xen-sparse/drivers/xen/netfront/Kconfig linux-2.6.7-xen-sparse/drivers/xen/netfront/Makefile linux-2.6.7-xen-sparse/drivers/xen/netfront/netfront.c linux-2.6.7-xen-sparse/drivers/xen/privcmd/Makefile linux-2.6.7-xen-sparse/drivers/xen/privcmd/privcmd.c linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/desc.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/e820.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/fixmap.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/highmem.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/io.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/do_timer.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/io_ports.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_mpspec.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_reboot.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_resources.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_time.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_timer.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_traps.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/pci-functions.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mmu_context.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/msr.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/page.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/param.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/pci.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/pgalloc.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/pgtable.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/processor.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/segment.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/setup.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/system.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/timer.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/tlbflush.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/vga.h linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/xor.h linux-2.6.7-xen-sparse/include/asm-xen/ctrl_if.h linux-2.6.7-xen-sparse/include/asm-xen/evtchn.h linux-2.6.7-xen-sparse/include/asm-xen/gnttab.h linux-2.6.7-xen-sparse/include/asm-xen/hypervisor.h linux-2.6.7-xen-sparse/include/asm-xen/multicall.h linux-2.6.7-xen-sparse/include/asm-xen/proc_cmd.h linux-2.6.7-xen-sparse/include/asm-xen/queues.h linux-2.6.7-xen-sparse/include/asm-xen/suspend.h linux-2.6.7-xen-sparse/include/asm-xen/xen_proc.h linux-2.6.7-xen-sparse/include/linux/bio.h linux-2.6.7-xen-sparse/include/linux/page-flags.h linux-2.6.7-xen-sparse/include/linux/skbuff.h linux-2.6.7-xen-sparse/mkbuildtree linux-2.6.7-xen-sparse/mm/page_alloc.c linux-2.6.8.1-xen-sparse/arch/xen/Kconfig linux-2.6.8.1-xen-sparse/arch/xen/Kconfig.drivers linux-2.6.8.1-xen-sparse/arch/xen/Makefile linux-2.6.8.1-xen-sparse/arch/xen/boot/Makefile linux-2.6.8.1-xen-sparse/arch/xen/configs/xen0_defconfig linux-2.6.8.1-xen-sparse/arch/xen/configs/xenU_defconfig linux-2.6.8.1-xen-sparse/arch/xen/i386/Kconfig linux-2.6.8.1-xen-sparse/arch/xen/i386/Makefile linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/Makefile linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/cpu/Makefile linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/cpu/common.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/entry.S linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/head.S linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/ioport.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/irq.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/ldt.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/pci-dma.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/process.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/setup.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/signal.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/sysenter.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/timers/Makefile linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/traps.c linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vmlinux.lds.S linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vsyscall.S linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vsyscall.lds linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/Makefile linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/fault.c linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/highmem.c linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/hypervisor.c linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/init.c linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/ioremap.c linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/pgtable.c linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/Makefile linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/direct.c linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/irq.c linux-2.6.8.1-xen-sparse/arch/xen/kernel/Makefile linux-2.6.8.1-xen-sparse/arch/xen/kernel/ctrl_if.c linux-2.6.8.1-xen-sparse/arch/xen/kernel/empty.c linux-2.6.8.1-xen-sparse/arch/xen/kernel/evtchn.c linux-2.6.8.1-xen-sparse/arch/xen/kernel/fixup.c linux-2.6.8.1-xen-sparse/arch/xen/kernel/gnttab.c linux-2.6.8.1-xen-sparse/arch/xen/kernel/process.c linux-2.6.8.1-xen-sparse/arch/xen/kernel/reboot.c linux-2.6.8.1-xen-sparse/arch/xen/kernel/xen_proc.c linux-2.6.8.1-xen-sparse/drivers/Makefile linux-2.6.8.1-xen-sparse/drivers/char/mem.c linux-2.6.8.1-xen-sparse/drivers/char/tty_io.c linux-2.6.8.1-xen-sparse/drivers/xen/Makefile linux-2.6.8.1-xen-sparse/drivers/xen/blkback/Makefile linux-2.6.8.1-xen-sparse/drivers/xen/blkback/blkback.c linux-2.6.8.1-xen-sparse/drivers/xen/blkback/common.h linux-2.6.8.1-xen-sparse/drivers/xen/blkback/control.c linux-2.6.8.1-xen-sparse/drivers/xen/blkback/interface.c linux-2.6.8.1-xen-sparse/drivers/xen/blkback/vbd.c linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/Kconfig linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/Makefile linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/blkfront.c linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/block.h linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/vbd.c linux-2.6.8.1-xen-sparse/drivers/xen/console/Makefile linux-2.6.8.1-xen-sparse/drivers/xen/console/console.c linux-2.6.8.1-xen-sparse/drivers/xen/evtchn/Makefile linux-2.6.8.1-xen-sparse/drivers/xen/evtchn/evtchn.c linux-2.6.8.1-xen-sparse/drivers/xen/netback/Makefile linux-2.6.8.1-xen-sparse/drivers/xen/netback/common.h linux-2.6.8.1-xen-sparse/drivers/xen/netback/control.c linux-2.6.8.1-xen-sparse/drivers/xen/netback/interface.c linux-2.6.8.1-xen-sparse/drivers/xen/netback/netback.c linux-2.6.8.1-xen-sparse/drivers/xen/netfront/Kconfig linux-2.6.8.1-xen-sparse/drivers/xen/netfront/Makefile linux-2.6.8.1-xen-sparse/drivers/xen/netfront/netfront.c linux-2.6.8.1-xen-sparse/drivers/xen/privcmd/Makefile linux-2.6.8.1-xen-sparse/drivers/xen/privcmd/privcmd.c linux-2.6.8.1-xen-sparse/include/asm-generic/pgtable.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/desc.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/e820.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/fixmap.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/highmem.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/io.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/do_timer.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/io_ports.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_mpspec.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_reboot.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_resources.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_time.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_timer.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_traps.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/pci-functions.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mmu_context.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/msr.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/page.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/param.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pci.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgalloc.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable-2level-defs.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/processor.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/ptrace.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/segment.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/setup.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/system.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/timer.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/tlbflush.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/vga.h linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/xor.h linux-2.6.8.1-xen-sparse/include/asm-xen/ctrl_if.h linux-2.6.8.1-xen-sparse/include/asm-xen/evtchn.h linux-2.6.8.1-xen-sparse/include/asm-xen/gnttab.h linux-2.6.8.1-xen-sparse/include/asm-xen/hypervisor.h linux-2.6.8.1-xen-sparse/include/asm-xen/multicall.h linux-2.6.8.1-xen-sparse/include/asm-xen/proc_cmd.h linux-2.6.8.1-xen-sparse/include/asm-xen/queues.h linux-2.6.8.1-xen-sparse/include/asm-xen/suspend.h linux-2.6.8.1-xen-sparse/include/asm-xen/xen_proc.h linux-2.6.8.1-xen-sparse/include/linux/bio.h linux-2.6.8.1-xen-sparse/include/linux/page-flags.h linux-2.6.8.1-xen-sparse/include/linux/skbuff.h linux-2.6.8.1-xen-sparse/mkbuildtree linux-2.6.8.1-xen-sparse/mm/memory.c linux-2.6.8.1-xen-sparse/mm/page_alloc.c tools/libxc/xc_linux_build.c tools/libxc/xc_private.h tools/misc/xen-clone tools/python/xen/lowlevel/xu/xu.c tools/python/xen/xend/server/netif.py xen/Makefile xen/arch/x86/memory.c xen/arch/x86/nmi.c xen/arch/x86/shadow.c xen/arch/x86/time.c xen/arch/x86/traps.c xen/common/domain.c xen/common/elf.c xen/common/kernel.c xen/include/asm-x86/shadow.h xen/include/asm-x86/spinlock.h xen/include/asm-x86/x86_32/uaccess.h xen/include/hypervisor-ifs/arch-x86_32.h xen/include/hypervisor-ifs/arch-x86_64.h xen/include/hypervisor-ifs/io/domain_controller.h xen/include/xen/spinlock.h
line diff
     1.1 --- a/.rootkeys	Fri Aug 27 08:43:54 2004 +0000
     1.2 +++ b/.rootkeys	Wed Sep 01 09:43:32 2004 +0000
     1.3 @@ -12,6 +12,7 @@ 40083bb4LVQzRqA3ABz0__pPhGNwtA docs/HOWT
     1.4  4021053fmeFrEyPHcT8JFiDpLNgtHQ docs/HOWTOs/Xen-HOWTO
     1.5  4022a73cgxX1ryj1HgS-IwwB6NUi2A docs/HOWTOs/XenDebugger-HOWTO
     1.6  3f9e7d53iC47UnlfORp9iC1vai6kWw docs/Makefile
     1.7 +412f4bd9sm5mCQ8BkrgKcAKZGadq7Q docs/blkif-drivers-explained.txt
     1.8  3f9e7d60PWZJeVh5xdnk0nLUdxlqEA docs/eps/xenlogo.eps
     1.9  3f9e7d63lTwQbp2fnx7yY93epWS-eQ docs/figs/dummy
    1.10  3f9e7d564bWFB-Czjv1qdmE6o0GqNg docs/interface.tex
    1.11 @@ -125,132 +126,136 @@ 3e5a4e681xMPdF9xCMwpyfuYMySU5g linux-2.4
    1.12  409ba2e7akOFqQUg6Qyg2s28xcXiMg linux-2.4.27-xen-sparse/mm/page_alloc.c
    1.13  3e5a4e683HKVU-sxtagrDasRB8eBVw linux-2.4.27-xen-sparse/mm/swapfile.c
    1.14  41180721bNns9Na7w1nJ0ZVt8bhUNA linux-2.4.27-xen-sparse/mm/vmalloc.c
    1.15 -40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.7-xen-sparse/arch/xen/Kconfig
    1.16 -40f56237utH41NPukqHksuNf29IC9A linux-2.6.7-xen-sparse/arch/xen/Kconfig.drivers
    1.17 -40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.7-xen-sparse/arch/xen/Makefile
    1.18 -40f56237JTc60m1FRlUxkUaGSQKrNw linux-2.6.7-xen-sparse/arch/xen/boot/Makefile
    1.19 -40f56237hRxbacU_3PdoAl6DjZ3Jnw linux-2.6.7-xen-sparse/arch/xen/configs/xen0_defconfig
    1.20 -40f56237wubfjJKlfIzZlI3ZM2VgGA linux-2.6.7-xen-sparse/arch/xen/configs/xenU_defconfig
    1.21 -40f56237Mta0yHNaMS_qtM2rge0qYA linux-2.6.7-xen-sparse/arch/xen/i386/Kconfig
    1.22 -40f56238u2CJdXNpjsZgHBxeVyY-2g linux-2.6.7-xen-sparse/arch/xen/i386/Makefile
    1.23 -40f56238eczveJ86k_4hNxCLRQIF-g linux-2.6.7-xen-sparse/arch/xen/i386/kernel/Makefile
    1.24 -40f56238rXVTJQKbBuXXLH52qEArcg linux-2.6.7-xen-sparse/arch/xen/i386/kernel/cpu/Makefile
    1.25 -40f562385s4lr6Zg92gExe7UQ4A76Q linux-2.6.7-xen-sparse/arch/xen/i386/kernel/cpu/common.c
    1.26 -40f56238XDtHSijkAFlbv1PT8Bhw_Q linux-2.6.7-xen-sparse/arch/xen/i386/kernel/entry.S
    1.27 -40f56238bnvciAuyzAiMkdzGErYt1A linux-2.6.7-xen-sparse/arch/xen/i386/kernel/head.S
    1.28 -40f58a0d31M2EkuPbG94ns_nOi0PVA linux-2.6.7-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c
    1.29 -40faa751_zbZlAmLyQgCXdYekVFdWA linux-2.6.7-xen-sparse/arch/xen/i386/kernel/ioport.c
    1.30 -40f562382aC3_Gt4RG-4ZsfvDRUg3Q linux-2.6.7-xen-sparse/arch/xen/i386/kernel/irq.c
    1.31 -40f56238ue3YRsK52HG7iccNzP1AwQ linux-2.6.7-xen-sparse/arch/xen/i386/kernel/ldt.c
    1.32 -4107adf1cNtsuOxOB4T6paAoY2R2PA linux-2.6.7-xen-sparse/arch/xen/i386/kernel/pci-dma.c
    1.33 -40f56238a8iOVDEoostsbun_sy2i4g linux-2.6.7-xen-sparse/arch/xen/i386/kernel/process.c
    1.34 -40f56238YQIJoYG2ehDGEcdTgLmGbg linux-2.6.7-xen-sparse/arch/xen/i386/kernel/setup.c
    1.35 -40f56238nWMQg7CKbyTy0KJNvCzbtg linux-2.6.7-xen-sparse/arch/xen/i386/kernel/signal.c
    1.36 -40f56238UL9uv78ODDzMwLL9yryeFw linux-2.6.7-xen-sparse/arch/xen/i386/kernel/sysenter.c
    1.37 -40f56238qVGkpO_ycnQA8k03kQzAgA linux-2.6.7-xen-sparse/arch/xen/i386/kernel/time.c
    1.38 -40f56238NzTgeO63RGoxHrW5NQeO3Q linux-2.6.7-xen-sparse/arch/xen/i386/kernel/timers/Makefile
    1.39 -40f56238BMqG5PuSHufpjbvp_helBw linux-2.6.7-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c
    1.40 -40f562389xNa78YBZciUibQjyRU_Lg linux-2.6.7-xen-sparse/arch/xen/i386/kernel/traps.c
    1.41 -40f56238qASEI_IOhCKWNuwFKNZrKQ linux-2.6.7-xen-sparse/arch/xen/i386/kernel/vmlinux.lds.S
    1.42 -40f56238JypKAUG01ZojFwH7qnZ5uA linux-2.6.7-xen-sparse/arch/xen/i386/kernel/vsyscall.S
    1.43 -40f56238wi6AdNQjm0RT57bSkwb6hg linux-2.6.7-xen-sparse/arch/xen/i386/kernel/vsyscall.lds
    1.44 -40f56238a3w6-byOzexIlMgni76Lcg linux-2.6.7-xen-sparse/arch/xen/i386/mm/Makefile
    1.45 -40f56238ILx8xlbywNbzTdv5Zr4xXQ linux-2.6.7-xen-sparse/arch/xen/i386/mm/fault.c
    1.46 -4118cc35CbY8rfGVspF5O-7EkXBEAA linux-2.6.7-xen-sparse/arch/xen/i386/mm/highmem.c
    1.47 -40f562383SKvDStdtrvzr5fyCbW4rw linux-2.6.7-xen-sparse/arch/xen/i386/mm/hypervisor.c
    1.48 -40f56239xcNylAxuGsQHwi1AyMLV8w linux-2.6.7-xen-sparse/arch/xen/i386/mm/init.c
    1.49 -41062ab7CjxC1UBaFhOMWWdhHkIUyg linux-2.6.7-xen-sparse/arch/xen/i386/mm/ioremap.c
    1.50 -40f5623906UYHv1rsVUeRc0tFT0dWw linux-2.6.7-xen-sparse/arch/xen/i386/mm/pgtable.c
    1.51 -4107adf12ndy94MidCaivDibJ3pPAg linux-2.6.7-xen-sparse/arch/xen/i386/pci/Makefile
    1.52 -4107adf1WcCgkhsdLTRGX52cOG1vJg linux-2.6.7-xen-sparse/arch/xen/i386/pci/direct.c
    1.53 -4107adf1s5u6249DNPUViX1YNagbUQ linux-2.6.7-xen-sparse/arch/xen/i386/pci/irq.c
    1.54 -40f56239zOksGg_H4XD4ye6iZNtoZA linux-2.6.7-xen-sparse/arch/xen/kernel/Makefile
    1.55 -40f56239bvOjuuuViZ0XMlNiREFC0A linux-2.6.7-xen-sparse/arch/xen/kernel/ctrl_if.c
    1.56 -40f56239pYRq5yshPTkv3ujXKc8K6g linux-2.6.7-xen-sparse/arch/xen/kernel/empty.c
    1.57 -40f56238xFQe9T7M_U_FItM-bZIpLw linux-2.6.7-xen-sparse/arch/xen/kernel/evtchn.c
    1.58 -4110f478aeQWllIN7J4kouAHiAqrPw linux-2.6.7-xen-sparse/arch/xen/kernel/fixup.c
    1.59 -412dfae9eA3_6e6bCGUtg1mj8b56fQ linux-2.6.7-xen-sparse/arch/xen/kernel/gnttab.c
    1.60 -40f56239sFcjHiIRmnObRIDF-zaeKQ linux-2.6.7-xen-sparse/arch/xen/kernel/process.c
    1.61 -40f562392LBhwmOxVPsYdkYXMxI_ZQ linux-2.6.7-xen-sparse/arch/xen/kernel/reboot.c
    1.62 -3f68905c5eiA-lBMQSvXLMWS1ikDEA linux-2.6.7-xen-sparse/arch/xen/kernel/xen_proc.c
    1.63 -41261688yS8eAyy-7kzG4KBs0xbYCA linux-2.6.7-xen-sparse/drivers/Makefile
    1.64 -4108f5c1WfTIrs0HZFeV39sttekCTw linux-2.6.7-xen-sparse/drivers/char/mem.c
    1.65 -4111308bZAIzwf_Kzu6x1TZYZ3E0_Q linux-2.6.7-xen-sparse/drivers/char/tty_io.c
    1.66 -40f56239Dp_vMTgz8TEbvo1hjHGc3w linux-2.6.7-xen-sparse/drivers/xen/Makefile
    1.67 -410d0893otFGghmv4dUXDUBBdY5aIA linux-2.6.7-xen-sparse/drivers/xen/blkback/Makefile
    1.68 -4087cf0d1XgMkooTZAiJS6NrcpLQNQ linux-2.6.7-xen-sparse/drivers/xen/blkback/blkback.c
    1.69 -4087cf0dZadZ8r6CEt4fNN350Yle3A linux-2.6.7-xen-sparse/drivers/xen/blkback/common.h
    1.70 -4087cf0dxlh29iw0w-9rxOCEGCjPcw linux-2.6.7-xen-sparse/drivers/xen/blkback/control.c
    1.71 -4087cf0dbuoH20fMjNZjcgrRK-1msQ linux-2.6.7-xen-sparse/drivers/xen/blkback/interface.c
    1.72 -4087cf0dk97tacDzxfByWV7JifUYqA linux-2.6.7-xen-sparse/drivers/xen/blkback/vbd.c
    1.73 -40f56239Sfle6wGv5FS0wjS_HI150A linux-2.6.7-xen-sparse/drivers/xen/blkfront/Kconfig
    1.74 -40f562395atl9x4suKGhPkjqLOXESg linux-2.6.7-xen-sparse/drivers/xen/blkfront/Makefile
    1.75 -40f56239-JNIaTzlviVJohVdoYOUpw linux-2.6.7-xen-sparse/drivers/xen/blkfront/blkfront.c
    1.76 -40f56239y9naBTXe40Pi2J_z3p-d1g linux-2.6.7-xen-sparse/drivers/xen/blkfront/block.h
    1.77 -40f56239BVfPsXBiWQitXgDRtOsiqg linux-2.6.7-xen-sparse/drivers/xen/blkfront/vbd.c
    1.78 -40f56239fsLjvtD8YBRAWphps4FDjg linux-2.6.7-xen-sparse/drivers/xen/console/Makefile
    1.79 -3e5a4e651TH-SXHoufurnWjgl5bfOA linux-2.6.7-xen-sparse/drivers/xen/console/console.c
    1.80 -40f56239KYxO0YabhPzCTeUuln-lnA linux-2.6.7-xen-sparse/drivers/xen/evtchn/Makefile
    1.81 -40f56239DoibTX6R-ZYd3QTXAB8_TA linux-2.6.7-xen-sparse/drivers/xen/evtchn/evtchn.c
    1.82 -410a9817HEVJvred5Oy_uKH3HFJC5Q linux-2.6.7-xen-sparse/drivers/xen/netback/Makefile
    1.83 -4097ba831lpGeLlPg-bfV8XarVVuoQ linux-2.6.7-xen-sparse/drivers/xen/netback/common.h
    1.84 -4097ba83wvv8yi5P5xugCUBAdb6O-A linux-2.6.7-xen-sparse/drivers/xen/netback/control.c
    1.85 -4097ba83byY5bTSugJGZ1exTxIcMKw linux-2.6.7-xen-sparse/drivers/xen/netback/interface.c
    1.86 -4087cf0dGmSbFhFZyIZBJzvqxY-qBw linux-2.6.7-xen-sparse/drivers/xen/netback/netback.c
    1.87 -40f56239lrg_Ob0BJ8WBFS1zeg2CYw linux-2.6.7-xen-sparse/drivers/xen/netfront/Kconfig
    1.88 -40f56239Wd4k_ycG_mFsSO1r5xKdtQ linux-2.6.7-xen-sparse/drivers/xen/netfront/Makefile
    1.89 -405853f6nbeazrNyEWNHBuoSg2PiPA linux-2.6.7-xen-sparse/drivers/xen/netfront/netfront.c
    1.90 -4108f5c1ppFXVpQzCOAZ6xXYubsjKA linux-2.6.7-xen-sparse/drivers/xen/privcmd/Makefile
    1.91 -3e5a4e65IUfzzMu2kZFlGEB8-rpTaA linux-2.6.7-xen-sparse/drivers/xen/privcmd/privcmd.c
    1.92 -40f56239YAjS52QG2FIAQpHDZAdGHg linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/desc.h
    1.93 -4107adf1E5O4ztGHNGMzCCNhcvqNow linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h
    1.94 -40f5623anSzpuEHgiNmQ56fIRfCoaQ linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/e820.h
    1.95 -40f5623akIoBsQ3KxSB2kufkbgONXQ linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/fixmap.h
    1.96 -4118b6a418gnL6AZsTdglC92YGqYTg linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/highmem.h
    1.97 -40f5623aJVXQwpJMOLE99XgvGsfQ8Q linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/io.h
    1.98 -40f5623am9BzluYFuV6EQfTd-so3dA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/do_timer.h
    1.99 -40f5623adZQ1IZGPxbDXONjyZGYuTA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/io_ports.h
   1.100 -40f5623aKXkBBxgpLx2NcvkncQ1Yyw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h
   1.101 -40f5623aMQZoYuf4ml9v69N3gu8ing linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_mpspec.h
   1.102 -40f5623a8LroVMnZ5YRzJJmIc-zHlw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_reboot.h
   1.103 -40f5623an3wOvFKmpIvqSxQfWzklVQ linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_resources.h
   1.104 -40f5623ayR1vnzfF__htza35a8Ft-g linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_time.h
   1.105 -40f5623a4YdRdVzYWJzOOoqe8mnrXA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_timer.h
   1.106 -40f5623aDLxmbOtUHvkWztKjAO4EjA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_traps.h
   1.107 -41062ab7HMSSuaUv3_Z4agLpjSO88A linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/pci-functions.h
   1.108 -40f5623aDMCsWOFO0jktZ4e8sjwvEg linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h
   1.109 -40f5623arsFXkGdPvIqvFi3yFXGR0Q linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h
   1.110 -4120f807GCO0uqsLqdZj9csxR1Wthw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mmu_context.h
   1.111 -40f5623aFTyFTR-vdiA-KaGxk5JOKQ linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/msr.h
   1.112 -40f5623adgjZq9nAgCt0IXdWl7udSA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/page.h
   1.113 -40f5623a54NuG-7qHihGYmw4wWQnMA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/param.h
   1.114 -41137cc1kkvg0cg7uxddcEfjL7L67w linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/pci.h
   1.115 -40f5623atCokYc2uCysSJ8jFO8TEsw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/pgalloc.h
   1.116 -40f5623aEToIXouJgO-ao5d5pcEt1w linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h
   1.117 -40f5623aCCXRPlGpNthVXstGz9ZV3A linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/pgtable.h
   1.118 -40f5623aPCkQQfPtJSooGdhcatrvnQ linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/processor.h
   1.119 -40f5623bzLvxr7WoJIxVf2OH4rCBJg linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/segment.h
   1.120 -40f5623bG_LzgG6-qwk292nTc5Wabw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/setup.h
   1.121 -40f5623bgzm_9vwxpzJswlAxg298Gg linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h
   1.122 -40f5623bVdKP7Dt7qm8twu3NcnGNbA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/system.h
   1.123 -40f5623bSgGrvrGRpD71K-lIYqaGgg linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/timer.h
   1.124 -40f5623bc8LKPRO09wY5dGDnY_YCpw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/tlbflush.h
   1.125 -41062ab7uFxnCq-KtPeAm-aV8CicgA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/vga.h
   1.126 -40f5623bxUbeGjkRrjDguCy_Gm8RLw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/xor.h
   1.127 -40f5623bYNP7tHE2zX6YQxp9Zq2utQ linux-2.6.7-xen-sparse/include/asm-xen/ctrl_if.h
   1.128 -40f5623b3Eqs8pAc5WpPX8_jTzV2qw linux-2.6.7-xen-sparse/include/asm-xen/evtchn.h
   1.129 -412dfaeazclyNDM0cpnp60Yo4xulpQ linux-2.6.7-xen-sparse/include/asm-xen/gnttab.h
   1.130 -40f5623aGPlsm0u1LTO-NVZ6AGzNRQ linux-2.6.7-xen-sparse/include/asm-xen/hypervisor.h
   1.131 -40f5623cndVUFlkxpf7Lfx7xu8madQ linux-2.6.7-xen-sparse/include/asm-xen/multicall.h
   1.132 -3f108af1ylCIm82H052FVTfXACBHrw linux-2.6.7-xen-sparse/include/asm-xen/proc_cmd.h
   1.133 -4122466356eIBnC9ot44WSVVIFyhQA linux-2.6.7-xen-sparse/include/asm-xen/queues.h
   1.134 -3fa8e3f0kBLeE4To2vpdi3cpJbIkbQ linux-2.6.7-xen-sparse/include/asm-xen/suspend.h
   1.135 -3f689063BoW-HWV3auUJ-OqXfcGArw linux-2.6.7-xen-sparse/include/asm-xen/xen_proc.h
   1.136 -4124d8c4aocX7A-jIbuGraWN84pxGQ linux-2.6.7-xen-sparse/include/linux/bio.h
   1.137 -4124f66fp5QwbDHEfoUIa7pqO5Xhag linux-2.6.7-xen-sparse/include/linux/page-flags.h
   1.138 -4124f66f4NaKNa0xPiGGykn9QaZk3w linux-2.6.7-xen-sparse/include/linux/skbuff.h
   1.139 -40f56a0ddHCSs3501MY4hRf22tctOw linux-2.6.7-xen-sparse/mkbuildtree
   1.140 -410a94a4KT6I6X0LVc7djB39tRDp4g linux-2.6.7-xen-sparse/mm/page_alloc.c
   1.141 +40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.8.1-xen-sparse/arch/xen/Kconfig
   1.142 +40f56237utH41NPukqHksuNf29IC9A linux-2.6.8.1-xen-sparse/arch/xen/Kconfig.drivers
   1.143 +40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.8.1-xen-sparse/arch/xen/Makefile
   1.144 +40f56237JTc60m1FRlUxkUaGSQKrNw linux-2.6.8.1-xen-sparse/arch/xen/boot/Makefile
   1.145 +40f56237hRxbacU_3PdoAl6DjZ3Jnw linux-2.6.8.1-xen-sparse/arch/xen/configs/xen0_defconfig
   1.146 +40f56237wubfjJKlfIzZlI3ZM2VgGA linux-2.6.8.1-xen-sparse/arch/xen/configs/xenU_defconfig
   1.147 +40f56237Mta0yHNaMS_qtM2rge0qYA linux-2.6.8.1-xen-sparse/arch/xen/i386/Kconfig
   1.148 +40f56238u2CJdXNpjsZgHBxeVyY-2g linux-2.6.8.1-xen-sparse/arch/xen/i386/Makefile
   1.149 +40f56238eczveJ86k_4hNxCLRQIF-g linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/Makefile
   1.150 +40f56238rXVTJQKbBuXXLH52qEArcg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/cpu/Makefile
   1.151 +40f562385s4lr6Zg92gExe7UQ4A76Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/cpu/common.c
   1.152 +40f56238XDtHSijkAFlbv1PT8Bhw_Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/entry.S
   1.153 +40f56238bnvciAuyzAiMkdzGErYt1A linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/head.S
   1.154 +40f58a0d31M2EkuPbG94ns_nOi0PVA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c
   1.155 +40faa751_zbZlAmLyQgCXdYekVFdWA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/ioport.c
   1.156 +40f562382aC3_Gt4RG-4ZsfvDRUg3Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/irq.c
   1.157 +40f56238ue3YRsK52HG7iccNzP1AwQ linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/ldt.c
   1.158 +4107adf1cNtsuOxOB4T6paAoY2R2PA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/pci-dma.c
   1.159 +40f56238a8iOVDEoostsbun_sy2i4g linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/process.c
   1.160 +40f56238YQIJoYG2ehDGEcdTgLmGbg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/setup.c
   1.161 +40f56238nWMQg7CKbyTy0KJNvCzbtg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/signal.c
   1.162 +40f56238UL9uv78ODDzMwLL9yryeFw linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/sysenter.c
   1.163 +40f56238qVGkpO_ycnQA8k03kQzAgA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c
   1.164 +40f56238NzTgeO63RGoxHrW5NQeO3Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/timers/Makefile
   1.165 +40f56238BMqG5PuSHufpjbvp_helBw linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c
   1.166 +40f562389xNa78YBZciUibQjyRU_Lg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/traps.c
   1.167 +40f56238qASEI_IOhCKWNuwFKNZrKQ linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vmlinux.lds.S
   1.168 +40f56238JypKAUG01ZojFwH7qnZ5uA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vsyscall.S
   1.169 +40f56238wi6AdNQjm0RT57bSkwb6hg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vsyscall.lds
   1.170 +40f56238a3w6-byOzexIlMgni76Lcg linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/Makefile
   1.171 +40f56238ILx8xlbywNbzTdv5Zr4xXQ linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/fault.c
   1.172 +4118cc35CbY8rfGVspF5O-7EkXBEAA linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/highmem.c
   1.173 +40f562383SKvDStdtrvzr5fyCbW4rw linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/hypervisor.c
   1.174 +40f56239xcNylAxuGsQHwi1AyMLV8w linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/init.c
   1.175 +41062ab7CjxC1UBaFhOMWWdhHkIUyg linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/ioremap.c
   1.176 +40f5623906UYHv1rsVUeRc0tFT0dWw linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/pgtable.c
   1.177 +4107adf12ndy94MidCaivDibJ3pPAg linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/Makefile
   1.178 +4107adf1WcCgkhsdLTRGX52cOG1vJg linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/direct.c
   1.179 +4107adf1s5u6249DNPUViX1YNagbUQ linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/irq.c
   1.180 +40f56239zOksGg_H4XD4ye6iZNtoZA linux-2.6.8.1-xen-sparse/arch/xen/kernel/Makefile
   1.181 +40f56239bvOjuuuViZ0XMlNiREFC0A linux-2.6.8.1-xen-sparse/arch/xen/kernel/ctrl_if.c
   1.182 +40f56239pYRq5yshPTkv3ujXKc8K6g linux-2.6.8.1-xen-sparse/arch/xen/kernel/empty.c
   1.183 +40f56238xFQe9T7M_U_FItM-bZIpLw linux-2.6.8.1-xen-sparse/arch/xen/kernel/evtchn.c
   1.184 +4110f478aeQWllIN7J4kouAHiAqrPw linux-2.6.8.1-xen-sparse/arch/xen/kernel/fixup.c
   1.185 +412dfae9eA3_6e6bCGUtg1mj8b56fQ linux-2.6.8.1-xen-sparse/arch/xen/kernel/gnttab.c
   1.186 +40f56239sFcjHiIRmnObRIDF-zaeKQ linux-2.6.8.1-xen-sparse/arch/xen/kernel/process.c
   1.187 +40f562392LBhwmOxVPsYdkYXMxI_ZQ linux-2.6.8.1-xen-sparse/arch/xen/kernel/reboot.c
   1.188 +3f68905c5eiA-lBMQSvXLMWS1ikDEA linux-2.6.8.1-xen-sparse/arch/xen/kernel/xen_proc.c
   1.189 +41261688yS8eAyy-7kzG4KBs0xbYCA linux-2.6.8.1-xen-sparse/drivers/Makefile
   1.190 +4108f5c1WfTIrs0HZFeV39sttekCTw linux-2.6.8.1-xen-sparse/drivers/char/mem.c
   1.191 +4111308bZAIzwf_Kzu6x1TZYZ3E0_Q linux-2.6.8.1-xen-sparse/drivers/char/tty_io.c
   1.192 +40f56239Dp_vMTgz8TEbvo1hjHGc3w linux-2.6.8.1-xen-sparse/drivers/xen/Makefile
   1.193 +410d0893otFGghmv4dUXDUBBdY5aIA linux-2.6.8.1-xen-sparse/drivers/xen/blkback/Makefile
   1.194 +4087cf0d1XgMkooTZAiJS6NrcpLQNQ linux-2.6.8.1-xen-sparse/drivers/xen/blkback/blkback.c
   1.195 +4087cf0dZadZ8r6CEt4fNN350Yle3A linux-2.6.8.1-xen-sparse/drivers/xen/blkback/common.h
   1.196 +4087cf0dxlh29iw0w-9rxOCEGCjPcw linux-2.6.8.1-xen-sparse/drivers/xen/blkback/control.c
   1.197 +4087cf0dbuoH20fMjNZjcgrRK-1msQ linux-2.6.8.1-xen-sparse/drivers/xen/blkback/interface.c
   1.198 +4087cf0dk97tacDzxfByWV7JifUYqA linux-2.6.8.1-xen-sparse/drivers/xen/blkback/vbd.c
   1.199 +40f56239Sfle6wGv5FS0wjS_HI150A linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/Kconfig
   1.200 +40f562395atl9x4suKGhPkjqLOXESg linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/Makefile
   1.201 +40f56239-JNIaTzlviVJohVdoYOUpw linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/blkfront.c
   1.202 +40f56239y9naBTXe40Pi2J_z3p-d1g linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/block.h
   1.203 +40f56239BVfPsXBiWQitXgDRtOsiqg linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/vbd.c
   1.204 +40f56239fsLjvtD8YBRAWphps4FDjg linux-2.6.8.1-xen-sparse/drivers/xen/console/Makefile
   1.205 +3e5a4e651TH-SXHoufurnWjgl5bfOA linux-2.6.8.1-xen-sparse/drivers/xen/console/console.c
   1.206 +40f56239KYxO0YabhPzCTeUuln-lnA linux-2.6.8.1-xen-sparse/drivers/xen/evtchn/Makefile
   1.207 +40f56239DoibTX6R-ZYd3QTXAB8_TA linux-2.6.8.1-xen-sparse/drivers/xen/evtchn/evtchn.c
   1.208 +410a9817HEVJvred5Oy_uKH3HFJC5Q linux-2.6.8.1-xen-sparse/drivers/xen/netback/Makefile
   1.209 +4097ba831lpGeLlPg-bfV8XarVVuoQ linux-2.6.8.1-xen-sparse/drivers/xen/netback/common.h
   1.210 +4097ba83wvv8yi5P5xugCUBAdb6O-A linux-2.6.8.1-xen-sparse/drivers/xen/netback/control.c
   1.211 +4097ba83byY5bTSugJGZ1exTxIcMKw linux-2.6.8.1-xen-sparse/drivers/xen/netback/interface.c
   1.212 +4087cf0dGmSbFhFZyIZBJzvqxY-qBw linux-2.6.8.1-xen-sparse/drivers/xen/netback/netback.c
   1.213 +40f56239lrg_Ob0BJ8WBFS1zeg2CYw linux-2.6.8.1-xen-sparse/drivers/xen/netfront/Kconfig
   1.214 +40f56239Wd4k_ycG_mFsSO1r5xKdtQ linux-2.6.8.1-xen-sparse/drivers/xen/netfront/Makefile
   1.215 +405853f6nbeazrNyEWNHBuoSg2PiPA linux-2.6.8.1-xen-sparse/drivers/xen/netfront/netfront.c
   1.216 +4108f5c1ppFXVpQzCOAZ6xXYubsjKA linux-2.6.8.1-xen-sparse/drivers/xen/privcmd/Makefile
   1.217 +3e5a4e65IUfzzMu2kZFlGEB8-rpTaA linux-2.6.8.1-xen-sparse/drivers/xen/privcmd/privcmd.c
   1.218 +412f47e4RKD-R5IS5gEXvcT8L4v8gA linux-2.6.8.1-xen-sparse/include/asm-generic/pgtable.h
   1.219 +40f56239YAjS52QG2FIAQpHDZAdGHg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/desc.h
   1.220 +4107adf1E5O4ztGHNGMzCCNhcvqNow linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h
   1.221 +40f5623anSzpuEHgiNmQ56fIRfCoaQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/e820.h
   1.222 +40f5623akIoBsQ3KxSB2kufkbgONXQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/fixmap.h
   1.223 +4118b6a418gnL6AZsTdglC92YGqYTg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/highmem.h
   1.224 +40f5623aJVXQwpJMOLE99XgvGsfQ8Q linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/io.h
   1.225 +40f5623am9BzluYFuV6EQfTd-so3dA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/do_timer.h
   1.226 +40f5623adZQ1IZGPxbDXONjyZGYuTA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/io_ports.h
   1.227 +40f5623aKXkBBxgpLx2NcvkncQ1Yyw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h
   1.228 +40f5623aMQZoYuf4ml9v69N3gu8ing linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_mpspec.h
   1.229 +40f5623a8LroVMnZ5YRzJJmIc-zHlw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_reboot.h
   1.230 +40f5623an3wOvFKmpIvqSxQfWzklVQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_resources.h
   1.231 +40f5623ayR1vnzfF__htza35a8Ft-g linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_time.h
   1.232 +40f5623a4YdRdVzYWJzOOoqe8mnrXA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_timer.h
   1.233 +40f5623aDLxmbOtUHvkWztKjAO4EjA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_traps.h
   1.234 +41062ab7HMSSuaUv3_Z4agLpjSO88A linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/pci-functions.h
   1.235 +40f5623aDMCsWOFO0jktZ4e8sjwvEg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h
   1.236 +40f5623arsFXkGdPvIqvFi3yFXGR0Q linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h
   1.237 +4120f807GCO0uqsLqdZj9csxR1Wthw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mmu_context.h
   1.238 +40f5623aFTyFTR-vdiA-KaGxk5JOKQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/msr.h
   1.239 +40f5623adgjZq9nAgCt0IXdWl7udSA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/page.h
   1.240 +40f5623a54NuG-7qHihGYmw4wWQnMA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/param.h
   1.241 +41137cc1kkvg0cg7uxddcEfjL7L67w linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pci.h
   1.242 +40f5623atCokYc2uCysSJ8jFO8TEsw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgalloc.h
   1.243 +412e01beTwiaC8sYY4XJP8PxLST5CA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable-2level-defs.h
   1.244 +40f5623aEToIXouJgO-ao5d5pcEt1w linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h
   1.245 +40f5623aCCXRPlGpNthVXstGz9ZV3A linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable.h
   1.246 +40f5623aPCkQQfPtJSooGdhcatrvnQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/processor.h
   1.247 +412ea0afQL2CAI-f522TbLjLPMibPQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/ptrace.h
   1.248 +40f5623bzLvxr7WoJIxVf2OH4rCBJg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/segment.h
   1.249 +40f5623bG_LzgG6-qwk292nTc5Wabw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/setup.h
   1.250 +40f5623bgzm_9vwxpzJswlAxg298Gg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h
   1.251 +40f5623bVdKP7Dt7qm8twu3NcnGNbA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/system.h
   1.252 +40f5623bSgGrvrGRpD71K-lIYqaGgg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/timer.h
   1.253 +40f5623bc8LKPRO09wY5dGDnY_YCpw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/tlbflush.h
   1.254 +41062ab7uFxnCq-KtPeAm-aV8CicgA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/vga.h
   1.255 +40f5623bxUbeGjkRrjDguCy_Gm8RLw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/xor.h
   1.256 +40f5623bYNP7tHE2zX6YQxp9Zq2utQ linux-2.6.8.1-xen-sparse/include/asm-xen/ctrl_if.h
   1.257 +40f5623b3Eqs8pAc5WpPX8_jTzV2qw linux-2.6.8.1-xen-sparse/include/asm-xen/evtchn.h
   1.258 +412dfaeazclyNDM0cpnp60Yo4xulpQ linux-2.6.8.1-xen-sparse/include/asm-xen/gnttab.h
   1.259 +40f5623aGPlsm0u1LTO-NVZ6AGzNRQ linux-2.6.8.1-xen-sparse/include/asm-xen/hypervisor.h
   1.260 +40f5623cndVUFlkxpf7Lfx7xu8madQ linux-2.6.8.1-xen-sparse/include/asm-xen/multicall.h
   1.261 +3f108af1ylCIm82H052FVTfXACBHrw linux-2.6.8.1-xen-sparse/include/asm-xen/proc_cmd.h
   1.262 +4122466356eIBnC9ot44WSVVIFyhQA linux-2.6.8.1-xen-sparse/include/asm-xen/queues.h
   1.263 +3fa8e3f0kBLeE4To2vpdi3cpJbIkbQ linux-2.6.8.1-xen-sparse/include/asm-xen/suspend.h
   1.264 +3f689063BoW-HWV3auUJ-OqXfcGArw linux-2.6.8.1-xen-sparse/include/asm-xen/xen_proc.h
   1.265 +4124d8c4aocX7A-jIbuGraWN84pxGQ linux-2.6.8.1-xen-sparse/include/linux/bio.h
   1.266 +4124f66fp5QwbDHEfoUIa7pqO5Xhag linux-2.6.8.1-xen-sparse/include/linux/page-flags.h
   1.267 +4124f66f4NaKNa0xPiGGykn9QaZk3w linux-2.6.8.1-xen-sparse/include/linux/skbuff.h
   1.268 +40f56a0ddHCSs3501MY4hRf22tctOw linux-2.6.8.1-xen-sparse/mkbuildtree
   1.269 +412f46c0LJuKAgSPGoC0Z1DEkLfuLA linux-2.6.8.1-xen-sparse/mm/memory.c
   1.270 +410a94a4KT6I6X0LVc7djB39tRDp4g linux-2.6.8.1-xen-sparse/mm/page_alloc.c
   1.271  40e1b09db5mN69Ijj0X_Eol-S7dXiw tools/Make.defs
   1.272  3f776bd1Hy9rn69ntXBhPReUFw9IEA tools/Makefile
   1.273  4124b307nRyK3dhn1hAsvrY76NuV3g tools/check/Makefile
     2.1 --- a/BitKeeper/etc/logging_ok	Fri Aug 27 08:43:54 2004 +0000
     2.2 +++ b/BitKeeper/etc/logging_ok	Wed Sep 01 09:43:32 2004 +0000
     2.3 @@ -28,6 +28,7 @@ laudney@eclipse.(none)
     2.4  lynx@idefix.cl.cam.ac.uk
     2.5  maw48@labyrinth.cl.cam.ac.uk
     2.6  mjw@wray-m-3.hpl.hp.com
     2.7 +mwilli2@equilibrium.research
     2.8  mwilli2@equilibrium.research.intel-research.net
     2.9  rac61@labyrinth.cl.cam.ac.uk
    2.10  rgr22@boulderdash.cl.cam.ac.uk
     3.1 --- a/Makefile	Fri Aug 27 08:43:54 2004 +0000
     3.2 +++ b/Makefile	Wed Sep 01 09:43:32 2004 +0000
     3.3 @@ -27,7 +27,7 @@ dist: all
     3.4  	$(MAKE) linux-xenU
     3.5  	$(MAKE) linux-xen0
     3.6  
     3.7 -LINUX_RELEASE    ?= 2.4
     3.8 +LINUX_RELEASE    ?= 2.6
     3.9  LINUX_VER        ?= $(shell ( /bin/ls -ld linux-$(LINUX_RELEASE).*-xen-sparse ) 2>/dev/null | \
    3.10  		      sed -e 's!^.*linux-\(.\+\)-xen-sparse!\1!' )
    3.11  LINUX26_VER      ?= $(shell ( /bin/ls -ld linux-2.6.*-xen-sparse ) 2>/dev/null | \
    3.12 @@ -123,6 +123,12 @@ linux26:
    3.13  	$(MAKE) LINUX_RELEASE=2.6 config-xen0
    3.14  	$(MAKE) LINUX_RELEASE=2.6 linux-xen0
    3.15  
    3.16 +linux24:
    3.17 +	$(MAKE) LINUX_RELEASE=2.4 mk-linux-trees
    3.18 +	$(MAKE) LINUX_RELEASE=2.4 config-xenU
    3.19 +	$(MAKE) LINUX_RELEASE=2.4 linux-xenU
    3.20 +	$(MAKE) LINUX_RELEASE=2.4 config-xen0
    3.21 +	$(MAKE) LINUX_RELEASE=2.4 linux-xen0
    3.22  
    3.23  clean: delete-symlinks
    3.24  	$(MAKE) -C xen clean
     4.1 --- a/README	Fri Aug 27 08:43:54 2004 +0000
     4.2 +++ b/README	Wed Sep 01 09:43:32 2004 +0000
     4.3 @@ -1,14 +1,14 @@
     4.4 -#############################
     4.5 - __  __            _   _____ 
     4.6 - \ \/ /___ _ __   / | |___ / 
     4.7 -  \  // _ \ '_ \  | |   |_ \ 
     4.8 -  /  \  __/ | | | | |_ ___) |
     4.9 - /_/\_\___|_| |_| |_(_)____/ 
    4.10 -                                              
    4.11 -#############################
    4.12 +###############################
    4.13 +__  __            ____    ___
    4.14 +\ \/ /___ _ __   |___ \  / _ \
    4.15 + \  // _ \ '_ \    __) || | | |
    4.16 + /  \  __/ | | |  / __/ | |_| |
    4.17 +/_/\_\___|_| |_| |_____(_)___/
    4.18 +
    4.19 +###############################
    4.20  
    4.21  University of Cambridge Computer Laboratory
    4.22 -15 Jun 2004
    4.23 +28 Aug 2004
    4.24  
    4.25  http://www.cl.cam.ac.uk/netos/xen
    4.26  
    4.27 @@ -149,10 +149,10 @@ Building Xen and XenLinux
    4.28  =========================
    4.29  
    4.30  The public master BK repository for the 2.0 release lives at: 
    4.31 -bk://xen.bkbits.net/xeno-2.0.bk
    4.32 +bk://xen.bkbits.net/xen-2.0.bk
    4.33  
    4.34  To fetch a local copy, install the BitKeeper tools, then run: 
    4.35 -'bk clone bk://xen.bkbits.net/xeno-2.0.bk'
    4.36 +'bk clone bk://xen.bkbits.net/xen-2.0.bk'
    4.37  
    4.38  You can do a complete build of Xen, the control tools, and the
    4.39  XenLinux kernel images with "make world". This can take 10 minutes
    4.40 @@ -164,8 +164,8 @@ can then install everything to the stand
    4.41  
    4.42  Take a look in install/boot/:
    4.43   install/boot/xen.gz               The Xen 'kernel' (formerly image.gz)
    4.44 - install/boot/vmlinuz-2.4.26-xen0  Domain 0 XenLinux kernel (xenolinux.gz)
    4.45 - install/boot/vmlinuz-2.4.26-xenU  Unprivileged XenLinux kernel
    4.46 + install/boot/vmlinuz-2.4.27-xen0  Domain 0 XenLinux kernel (xenolinux.gz)
    4.47 + install/boot/vmlinuz-2.4.27-xenU  Unprivileged XenLinux kernel
    4.48  
    4.49  The difference between the two Linux kernels that are built is
    4.50  due to the configuration file used for each. The "U" suffixed
    4.51 @@ -176,7 +176,7 @@ your non-privileged domains.
    4.52  The install/boot directory will also contain the config files
    4.53  used for building the XenLinux kernels, and also versions of Xen
    4.54  and XenLinux kernels that contain debug symbols (xen-syms and
    4.55 -vmlinux-syms-2.4.26-xen0) which are essential for interpreting crash
    4.56 +vmlinux-syms-2.4.27-xen0) which are essential for interpreting crash
    4.57  dumps.
    4.58  
    4.59  Inspect the Makefile if you want to see what goes on during a
    4.60 @@ -185,7 +185,7 @@ more complicated. The makefile needs a '
    4.61  which it will then add the Xen architecture files to. You can tell the
    4.62  makefile the location of the appropriate linux compressed tar file by
    4.63  setting the LINUX_SRC environment variable
    4.64 -(e.g. "LINUX_SRC=/tmp/linux-2.4.26.tar.gz make world") or by placing
    4.65 +(e.g. "LINUX_SRC=/tmp/linux-2.4.27.tar.gz make world") or by placing
    4.66  the tar file somewhere in the search path of LINUX_SRC_PATH which
    4.67  defaults to ".:..". If the makefile can't find a suitable kernel tar
    4.68  file it attempts to download it from kernel.org, but this won't work
     5.1 --- a/README.CD	Fri Aug 27 08:43:54 2004 +0000
     5.2 +++ b/README.CD	Wed Sep 01 09:43:32 2004 +0000
     5.3 @@ -1,15 +1,15 @@
     5.4 -#############################
     5.5 - __  __            _   _____ 
     5.6 - \ \/ /___ _ __   / | |___ / 
     5.7 -  \  // _ \ '_ \  | |   |_ \ 
     5.8 -  /  \  __/ | | | | |_ ___) |
     5.9 - /_/\_\___|_| |_| |_(_)____/ 
    5.10 -                                              
    5.11 -#############################
    5.12 +###############################
    5.13 +__  __            ____    ___
    5.14 +\ \/ /___ _ __   |___ \  / _ \
    5.15 + \  // _ \ '_ \    __) || | | |
    5.16 + /  \  __/ | | |  / __/ | |_| |
    5.17 +/_/\_\___|_| |_| |_____(_)___/
    5.18  
    5.19 - XenDemoCD 1.3
    5.20 +###############################
    5.21 +
    5.22 + XenDemoCD 2.0
    5.23   University of Cambridge Computer Laboratory
    5.24 - 24 Jan 2004
    5.25 + 28 Aug 2004
    5.26  
    5.27   http://www.cl.cam.ac.uk/netos/xen
    5.28  
    5.29 @@ -18,10 +18,10 @@ Welcome to the Xen Demo CD!
    5.30  Executive Summary
    5.31  =================
    5.32  
    5.33 -This CD is a standalone demo of the Xen Virtual Machine Monitor (VMM)
    5.34 -and Linux-2.4 OS port (Xenlinux). It runs entirely off the CD,
    5.35 -without requiring hard disk installation. This is achieved using a RAM
    5.36 -disk to store mutable file system data while using the CD for
    5.37 +This CD is a standalone demo of the Xen Virtual Machine Monitor (VMM),
    5.38 + Linux-2.4 and Linux-2.6 OS port (Xenlinux). It runs entirely off the
    5.39 +CD, without requiring hard disk installation. This is achieved using a
    5.40 +RAM disk to store mutable file system data while using the CD for
    5.41  everything else. The CD can also be used for installing Xen/Xenlinux
    5.42  to disk, and includes a source code snapshot along with all of the
    5.43  tools required to build it.
    5.44 @@ -51,9 +51,9 @@ To try out the Demo, boot from CD (you m
    5.45  configuration to do this), then select one of the four boot options 
    5.46  from the Grub menu:
    5.47  
    5.48 - Xen / linux-2.4.26
    5.49 - Xen / linux-2.4.26 using cmdline IP configuration
    5.50 - Xen / linux-2.4.26 in "safe mode"
    5.51 + Xen / linux-2.4.27
    5.52 + Xen / linux-2.4.27 using cmdline IP configuration
    5.53 + Xen / linux-2.4.27 in "safe mode"
    5.54   linux-2.4.22
    5.55  
    5.56  The last option is a plain linux kernel that runs on the bare machine,
    5.57 @@ -119,7 +119,7 @@ work with Xen, and you'll only be able t
    5.58  server. We're working on a fix for this for the next release.
    5.59  
    5.60  If you want to browse the Xen / Xenlinux source, it's all located
    5.61 -under /usr/local/src/xeno-1.3, complete with BitKeeper
    5.62 +under /usr/local/src/xen-2.0.bk, complete with BitKeeper
    5.63  repository. We've also included source code and configuration
    5.64  information for the various benchmarks we used in the SOSP paper.
    5.65  
    5.66 @@ -149,7 +149,7 @@ high-level management tools will be deve
    5.67  the source repository the tools live in tools/examples/ but are
    5.68  installed in /usr/local/bin/ on the CD.
    5.69  
    5.70 -Starting a new domain is achieved using xc_dom_create.py which
    5.71 +Starting a new domain is achieved using the command 'xm create' which
    5.72  allocates resources to a new domain, populates it with a kernel image
    5.73  (and optionally a ramdisk) and then starts it.
    5.74  
    5.75 @@ -177,17 +177,13 @@ The 'mem' variable can be used to change
    5.76  of 64MB. For example to start a domain with two IP addresses and
    5.77  72MB:
    5.78  
    5.79 -  xc_dom_create.py -Dip=128.23.45.34,169.254.1.1 -Dmem=72
    5.80 +  xm create ip=128.23.45.34,169.254.1.1mem=72
    5.81  
    5.82 -[multiple variables may also be set with a single '-D' flag by
    5.83 -separating them with ':'. Also, it's possible to use DNS hostnames
    5.84 -rather than IP addresses.]
    5.85 -
    5.86 -When invoked with the '-n' option xc_dom_create.py will do a dry run
    5.87 +When invoked with the '-n' option 'xm create' will do a dry run
    5.88  and just print out what resources and configuration the domain will
    5.89  have e.g.:
    5.90  
    5.91 -  [root@xendemo]# xc_dom_create.py -D ip=commando-1.xeno,169.254.2.3 -Dmem=100
    5.92 +  [root@xendemo]# xm create -n ip=commando-1.xeno,169.254.2.3 mem=100
    5.93    Parsing config file 'defaults'
    5.94  
    5.95    VM image           : "/boot/xenlinux.gz"
    5.96 @@ -197,15 +193,15 @@ have e.g.:
    5.97    VM block device(s) : "phy:cdrom,hdd,r"
    5.98    VM cmdline         : "ip=128.232.38.51:169.254.1.0:128.232.32.1:255.255.240.0::eth0:off root=/dev/ram0 rw init=/linuxrc 4 LOCALIP=169.254.2.3"
    5.99  
   5.100 -xc_dom_create.py will print the local TCP port to which you should
   5.101 +xm create will print the local TCP port to which you should
   5.102  connect to perform console I/O. A suitable console client is provided
   5.103  by the Python module xenctl.console_client: running this module from
   5.104  the command line with <host> and <port> parameters will start a
   5.105  terminal session. This module is also installed as /usr/bin/xencons,
   5.106  from a copy in tools/misc/xencons.  An alternative to manually running
   5.107 -a terminal client is to specify '-c' to xc_dom_create.py, or add
   5.108 +a terminal client is to specify '-c' to xm create, or add
   5.109  'auto_console=True' to the defaults file. This will cause
   5.110 -xc_dom_create.py to automatically become the console terminal after
   5.111 +'xm create' to automatically become the console terminal after
   5.112  starting the domain.
   5.113  
   5.114  The 169.254.x.x network is special in that it is the 'link local'
   5.115 @@ -239,17 +235,18 @@ To access the new virtual machine remote
   5.116  
   5.117   ssh -p2201 root@IP.address.Of.Domain0  # use 2202 for domain 2 etc.
   5.118  
   5.119 -You can manipulate running domains using the xc_dom_control.py tool.
   5.120 +You can manipulate running domains using the xm tool.
   5.121  Invoking it without arguments prints some usage information.
   5.122  
   5.123 -To see what domains are running, run 'xc_dom_control.py list'.  Using the
   5.124 +To see what domains are running, run 'xm list'.  Using the
   5.125  tool you can change scheduling parameters, pause a domain, send it a
   5.126  shutdown request, or blow it away with the 'destroy' command. You can
   5.127  even suspend it to disk (but you probably won't have enough memory to
   5.128  do the latter if you're running off the demo CD).
   5.129  
   5.130 -To find usage information for xc_dom_control.py, run the script with
   5.131 -no arguments.
   5.132 +To find usage information for xm, run the script with no arguments or
   5.133 +with the 'help' argument.  To get help on a particular xm command, use
   5.134 +'xm cmdname help'.
   5.135  
   5.136  
   5.137  Troubleshooting Problems
   5.138 @@ -352,7 +349,7 @@ essentially involves copying the content
   5.139  formated disk partition, and then installing or updating the Grub
   5.140  bootloader.
   5.141  
   5.142 -This is a bootable CD that loads Xen, and then a Linux 2.4.22 OS image
   5.143 +This is a bootable CD that loads Xen, and then a Linux 2.4.27 OS image
   5.144  ported to run on Xen. The CD contains a copy of a file system based on
   5.145  the RedHat 9 distribution that is able to run directly off the CD
   5.146  ("live ISO"), using a "tmpfs" RAM-based file system for root (/etc
   5.147 @@ -400,9 +397,9 @@ config file.
   5.148  
   5.149  A typical Grub menu option might look like:
   5.150  
   5.151 -title Xen / Xenlinux 2.4.26
   5.152 +title Xen 2.0 / Xenlinux 2.4.27
   5.153          kernel /boot/xen.gz dom0_mem=131072 com1=115200 noht watchdog
   5.154 -        module /boot/vmlinuz-2.4.26-xen0 root=/dev/sda4 ro
   5.155 +        module /boot/vmlinuz-2.4.27-xen0 root=/dev/sda4 ro
   5.156  
   5.157  The first line specifies which Xen image to use, and what command line
   5.158  arguments to pass to Xen. In this case we set the maximum amount of
   5.159 @@ -421,7 +418,7 @@ require a second "module" line.
   5.160  Installing the Xen tools and source
   5.161  ===================================
   5.162  
   5.163 -The tools and source live in the /usr/local/src/xen-2.0 directory on
   5.164 +The tools and source live in the /usr/local/src/xen-2.0.bk directory on
   5.165  the CD (and may also be downloaded from the project downloads
   5.166  page). You'll need to copy them to some mutable storage before using
   5.167  them.
   5.168 @@ -480,9 +477,10 @@ Installing the file systems from the CD
   5.169  
   5.170  If you haven't got an existing Linux installation onto which you can
   5.171  just drop down the Xen and Xenlinux images, then the file systems on
   5.172 -the CD provide a quick way of doing an install. However, you're
   5.173 -probably better off in the long run doing a proper Redhat, Fedora,
   5.174 -Debian etc install rather than just doing the hack described below:
   5.175 +the CD provide a quick way of doing an install. However, you would be
   5.176 +better off in the long run doing a proper install of your preferred
   5.177 +distro and installing Xen onto that, rather than just doing the hack
   5.178 +described below:
   5.179  
   5.180  Choose one or two partitions, depending on whether you want a separate
   5.181  /usr or not. Make file systems on it/them e.g.: 
   5.182 @@ -529,7 +527,7 @@ figuring out what's happened.  Debug a X
   5.183  would any other Linux kernel.
   5.184  
   5.185  We supply a handy debug terminal program which you can find in
   5.186 -/usr/local/src/xen-1.0/xeno-1.0.bk/tools/misc/miniterm/
   5.187 +/usr/local/src/xen-2.0.bk/tools/misc/miniterm/
   5.188  This should be built and executed on another machine that is connected
   5.189  via a null modem cable. Documentation is included.
   5.190  Alternatively, if the Xen machine is connected to a serial-port server
     6.1 --- a/docs/HOWTOs/Console-HOWTO	Fri Aug 27 08:43:54 2004 +0000
     6.2 +++ b/docs/HOWTOs/Console-HOWTO	Wed Sep 01 09:43:32 2004 +0000
     6.3 @@ -1,10 +1,10 @@
     6.4 -    New console I/O infrastructure in Xen 1.3
     6.5 +    New console I/O infrastructure in Xen 2.0
     6.6      =========================================
     6.7  
     6.8      Keir Fraser, University of Cambridge, 3rd June 2004
     6.9  
    6.10   I thought I'd write a quick note about using the new console I/O
    6.11 - infrastructure in Xen 1.3. Significant new features compared with 1.2,
    6.12 + infrastructure in Xen 2.0. Significant new features compared with 1.2,
    6.13   and with older revisions of 1.3, include:
    6.14    - bi-directional console access
    6.15    - log in to a Xenolinux guest OS via its virtual console
    6.16 @@ -80,6 +80,6 @@ Virtual console for other domains
    6.17    # xencons localhost 9600
    6.18  
    6.19   An alternative to manually running a terminal client is to specify
    6.20 - '-c' to xc_dom_create.py, or add 'auto_console=True' to the defaults
    6.21 - file. This will cause xc_dom_create.py to automatically become the
    6.22 + '-c' to xm create, or add 'auto_console=True' to the defaults
    6.23 + file. This will cause xm create to automatically become the
    6.24   console terminal after starting the domain.
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/docs/blkif-drivers-explained.txt	Wed Sep 01 09:43:32 2004 +0000
     7.3 @@ -0,0 +1,477 @@
     7.4 +=== How the Blkif Drivers Work ===
     7.5 +Andrew Warfield
     7.6 +andrew.warfield@cl.cam.ac.uk
     7.7 +
     7.8 +The intent of this is to explain at a fairly detailed level how the
     7.9 +split device drivers work in Xen 1.3 (aka 2.0beta).  The intended
    7.10 +audience for this, I suppose, is anyone who intends to work with the
    7.11 +existing blkif interfaces and wants something to help them get up to
    7.12 +speed with the code in a hurry.  Secondly though, I hope to break out
    7.13 +the general mechanisms that are used in the drivers that are likely to
    7.14 +be necessary to implement other drivers interfaces.
    7.15 +
    7.16 +As a point of warning before starting, it is worth mentioning that I
    7.17 +anticipate much of the specifics described here changing in the near
    7.18 +future.  There has been talk about making the blkif protocol
    7.19 +a bit more efficient than it currently is.  Keir's addition of grant
    7.20 +tables will change the current remapping code that is used when shared
    7.21 +pages are initially set up.
    7.22 +
    7.23 +Also, writing other control interface types will likely need support
    7.24 +from Xend, which at the moment has a steep learning curve... this
    7.25 +should be addressed in the future.
    7.26 +
    7.27 +For more information on the driver model as a whole, read the
    7.28 +"Reconstructing I/O" technical report
    7.29 +(http://www.cl.cam.ac.uk/Research/SRG/netos/papers/2004-xenngio.pdf).
    7.30 +
    7.31 +==== High-level structure of a split-driver interface ====
    7.32 +
    7.33 +Why would you want to write a split driver in the first place?  As Xen
    7.34 +is a virtual machine manager and focuses on isolation as an initial
    7.35 +design principle, it is generally considered unwise to share physical
    7.36 +access to devices across domains.  The reasons for this are obvious:
    7.37 +when device resources are shared, misbehaving code or hardware can
    7.38 +result in the failure of all of the client applications.  Moreover, as
    7.39 +virtual machines in Xen are entire OSs, standard device drives that
    7.40 +they might use cannot have multiple instantiations for a single piece
    7.41 +of hardware.  In light of all this, the general approach in Xen is to
    7.42 +give a single virtual machine hardware access to a device, and where
    7.43 +other VMs want to share the device, export a higher-level interface to
    7.44 +facilitate that sharing.  If you don't want to share, that's fine.
    7.45 +There are currently Xen users actively exploring running two
    7.46 +completely isolated X-Servers on a Xen host, each with it's own video
    7.47 +card, keyboard, and mouse.  In these situations, the guests need only
    7.48 +be given physical access to the necessary devices and left to go on
    7.49 +their own.  However, for devices such as disks and network interfaces,
    7.50 +where sharing is required, the split driver approach is a good
    7.51 +solution.
    7.52 +
    7.53 +The structure is like this:
    7.54 +
    7.55 +   +--------------------------+  +--------------------------+
    7.56 +   | Domain 0 (privileged)    |  | Domain 1 (unprivileged) |
    7.57 +   |                          |  |                          |
    7.58 +   | Xend ( Application )     |  |                          |
    7.59 +   | Blkif Backend Driver     |  | Blkif Frontend Driver    |
    7.60 +   | Physical Device Driver   |  |                          |
    7.61 +   +--------------------------+  +--------------------------+
    7.62 +   +--------------------------------------------------------+
    7.63 +   |                X       E       N                       |
    7.64 +   +--------------------------------------------------------+
    7.65 +
    7.66 +
    7.67 +The Blkif driver is in two parts, which we refer to as frontend (FE)
    7.68 +and a backend (BE).  Together, they serve to proxy device requests
    7.69 +between the guest operating system in an unprivileged domain, and the
    7.70 +physical device driver in the physical domain.  An additional benefit
    7.71 +to this approach is that the FE driver can provide a single interface
    7.72 +for a whole class of physical devices.  The blkif interface mounts
    7.73 +IDE, SCSI, and our own VBD-structured disks, independent of the
    7.74 +physical driver underneath.  Moreover, supporting additional OSs only
    7.75 +requires that a new FE driver be written to connect to the existing
    7.76 +backend.
    7.77 +
    7.78 +==== Inter-Domain Communication Mechanisms ====
    7.79 +
    7.80 +===== Event Channels =====
    7.81 +
    7.82 +Before getting into the specifics of the block interface driver, it is
    7.83 +worth discussing the mechanisms that are used to communicate between
    7.84 +domains.  Two mechanisms are used to allow the construction of
    7.85 +high-performance drivers: event channels and shared-memory rings.
    7.86 +
    7.87 +Event channels are an asynchronous interdomain notification
    7.88 +mechanism.  Xen allows channels to be instantiated between two
    7.89 +domains, and domains can request that a virtual irq be attached to
    7.90 +notifications on a given channel.  The result of this is that the
    7.91 +frontend domain can send a notification on an event channel, resulting
    7.92 +in an interrupt entry into the backend at a later time.
    7.93 +
    7.94 +The event channel between two domains is instantiated in the Xend code
    7.95 +during driver startup (described later).  Xend's channel.py
    7.96 +(tools/python/xen/xend/server/channel.py) defines the function
    7.97 +
    7.98 +
    7.99 +def eventChannel(dom1, dom2):
   7.100 +    return xc.evtchn_bind_interdomain(dom1=dom1, dom2=dom2)
   7.101 +
   7.102 +
   7.103 +which maps to xc_evtchn_bind_interdomain() in tools/libxc/xc_evtchn.c,
   7.104 +which in turn generates a hypercall to Xen to patch the event channel
   7.105 +between the domains.  Only a privileged domain can request the
   7.106 +creation of an event channel.
   7.107 +
   7.108 +Once the event channel is created in Xend, its ends are passed to both the
   7.109 +front and backend domains over the control channel.  The end that is
   7.110 +passed to a domain is just an integer "port" uniquely identifying the
   7.111 +event channel's local connection to that domain.  An example of this
   7.112 +setup code is in linux-2.6.x/drivers/xen/blkfront/blkfront.c in
   7.113 +blkif_status_change, which receives several status change events as
   7.114 +the driver starts up.  It is passed an event channel end in a
   7.115 +BLKIF_INTERFACE_STATUS_CONNECTED message, and patches it in like this:
   7.116 +
   7.117 +
   7.118 +   blkif_evtchn = status->evtchn;
   7.119 +   blkif_irq    = bind_evtchn_to_irq(blkif_evtchn);
   7.120 +   if ( (rc = request_irq(blkif_irq, blkif_int, 
   7.121 +                          SA_SAMPLE_RANDOM, "blkif", NULL)) )
   7.122 +       printk(KERN_ALERT"blkfront request_irq failed (%ld)\n",rc);
   7.123 +
   7.124 +
   7.125 +This code associates a virtual irq with the event channel, and
   7.126 +attaches the function blkif_int() as an interrupt handler for that
   7.127 +irq.  blkif_int() simply handles the notification and returns, it does
   7.128 +not need to interact with the channel at all.
   7.129 +
   7.130 +An example of generating a notification can also be seen in blkfront.c:
   7.131 +
   7.132 +
   7.133 +static inline void flush_requests(void)
   7.134 +{
   7.135 +    DISABLE_SCATTERGATHER();
   7.136 +    wmb(); /* Ensure that the frontend can see the requests. */
   7.137 +    blk_ring->req_prod = req_prod;
   7.138 +    notify_via_evtchn(blkif_evtchn);
   7.139 +}
   7.140 +}}}
   7.141 +
   7.142 +notify_via_evtchn issues a hypercall to set the event waiting flag on
   7.143 +the other domain's end of the channel.
   7.144 +
   7.145 +===== Communication Rings =====
   7.146 +
   7.147 +Event channels are strictly a notification mechanism between domains.
   7.148 +To move large chunks of data back and forth, Xen allows domains to
   7.149 +share pages of memory.  We use communication rings as a means of
   7.150 +managing access to a shared memory page for message passing between
   7.151 +domains.  These rings are not explicitly a mechanism of Xen, which is
   7.152 +only concerned with the actual sharing of the page and not how it is
   7.153 +used, they are however worth discussing as they are used in many
   7.154 +places in the current code and are a useful model for communicating
   7.155 +across a shared page.
   7.156 +
   7.157 +A shared page is set up by a guest first allocating and passing the
   7.158 +address of a page in its own address space to the backend driver.  
   7.159 +
   7.160 +
   7.161 +   blk_ring = (blkif_ring_t *)__get_free_page(GFP_KERNEL);
   7.162 +   blk_ring->req_prod = blk_ring->resp_prod = resp_cons = req_prod = 0;
   7.163 +   ...
   7.164 +   /* Construct an interface-CONNECT message for the domain controller. */
   7.165 +   cmsg.type      = CMSG_BLKIF_FE;
   7.166 +   cmsg.subtype   = CMSG_BLKIF_FE_INTERFACE_CONNECT;
   7.167 +   cmsg.length    = sizeof(blkif_fe_interface_connect_t);
   7.168 +   up.handle      = 0;
   7.169 +   up.shmem_frame = virt_to_machine(blk_ring) >> PAGE_SHIFT;
   7.170 +   memcpy(cmsg.msg, &up, sizeof(up));  
   7.171 +
   7.172 +
   7.173 +blk_ring will be the shared page.  The producer and consumer pointers
   7.174 +are then initialised (these will be discussed soon), and then the
   7.175 +machine address of the page is send to the backend via a control
   7.176 +channel to Xend.  This control channel itself uses the notification
   7.177 +and shared memory mechanisms described here, but is set up for each
   7.178 +domain automatically at startup.
   7.179 +
   7.180 +The backend, which is a privileged domain then takes the page address
   7.181 +and maps it into its own address space (in
   7.182 +linux26/drivers/xen/blkback/interface.c:blkif_connect()):
   7.183 +
   7.184 +
   7.185 +void blkif_connect(blkif_be_connect_t *connect)
   7.186 +
   7.187 +   ...
   7.188 +   unsigned long shmem_frame = connect->shmem_frame;
   7.189 +   ...
   7.190 +
   7.191 +   if ( (vma = get_vm_area(PAGE_SIZE, VM_IOREMAP)) == NULL )
   7.192 +   {
   7.193 +      connect->status = BLKIF_BE_STATUS_OUT_OF_MEMORY;
   7.194 +      return;
   7.195 +   }
   7.196 +
   7.197 +   prot = __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED);
   7.198 +   error = direct_remap_area_pages(&init_mm, VMALLOC_VMADDR(vma->addr),
   7.199 +                                   shmem_frame<<PAGE_SHIFT, PAGE_SIZE,
   7.200 +                                   prot, domid);
   7.201 +
   7.202 +   ...
   7.203 +
   7.204 +   blkif->blk_ring_base = (blkif_ring_t *)vma->addr
   7.205 +}}}
   7.206 +
   7.207 +The machine address of the page is passed in the shmem_frame field of
   7.208 +the connect message.  This is then mapped into the virtual address
   7.209 +space of the backend domain, and saved in the blkif structure
   7.210 +representing this particular backend connection.
   7.211 +
   7.212 +NOTE:  New mechanisms will be added very shortly to allow domains to
   7.213 +explicitly grant access to their pages to other domains.  This "grant
   7.214 +table" support is in the process of being added to the tree, and will
   7.215 +change the way a shared page is set up.  In particular, it will remove
   7.216 +the need of the remapping domain to be privileged.
   7.217 +
   7.218 +Sending data across shared rings:
   7.219 +
   7.220 +Shared rings avoid the potential for write interference between
   7.221 +domains in a very cunning way.  A ring is partitioned into a request
   7.222 +and a response region, and domains only work within their own space.
   7.223 +This can be thought of as a double producer-consumer ring -- the ring
   7.224 +is described by four pointers into a circular buffer of fixed-size
   7.225 +records.  Pointers may only advance, and may not pass one another.
   7.226 +
   7.227 +
   7.228 +                          rsp_cons----+
   7.229 +                                      V
   7.230 +           +----+----+----+----+----+----+----+
   7.231 +           |    |    |    free      |RSP1|RSP2|
   7.232 +           +----+----+----+----+----+----+----+
   7.233 + req_prod->|    |       -------->        |RSP3|
   7.234 +           +----+                        +----+
   7.235 +           |REQ8|                        |    |<-rsp_prod
   7.236 +           +----+                        +----+
   7.237 +           |REQ7|                        |    |
   7.238 +           +----+                        +----+
   7.239 +           |REQ6|       <--------        |    |
   7.240 +           +----+----+----+----+----+----+----+
   7.241 +           |REQ5|REQ4|    free      |    |    |
   7.242 +           +----+----+----+----+----+----+----+
   7.243 +  req_cons---------^
   7.244 +
   7.245 +
   7.246 +
   7.247 +By adopting the convention that every request will receive a response,
   7.248 +not all four pointers need be shared and flow control on the ring
   7.249 +becomes very easy to manage.  Each domain manages its own
   7.250 +consumer pointer, and the two producer pointers are visible to both (Xen/include/hypervisor-ifs/io/blkif.h):
   7.251 +
   7.252 +
   7.253 +
   7.254 +/* NB. Ring size must be small enough for sizeof(blkif_ring_t) <=PAGE_SIZE.*/
   7.255 +  #define BLKIF_RING_SIZE        64
   7.256 +
   7.257 +  ...
   7.258 +
   7.259 +/*
   7.260 + * We use a special capitalised type name because it is _essential_ that all
   7.261 + * arithmetic on indexes is done on an integer type of the correct size.
   7.262 + */
   7.263 +typedef u32 BLKIF_RING_IDX;
   7.264 +
   7.265 +/*
   7.266 + * Ring indexes are 'free running'. That is, they are not stored modulo the
   7.267 + * size of the ring buffer. The following macro converts a free-running counter
   7.268 + * into a value that can directly index a ring-buffer array.
   7.269 + */
   7.270 +#define MASK_BLKIF_IDX(_i) ((_i)&(BLKIF_RING_SIZE-1))
   7.271 +
   7.272 +typedef struct {
   7.273 +    BLKIF_RING_IDX req_prod;  /*  0: Request producer. Updated by front-end. */
   7.274 +    BLKIF_RING_IDX resp_prod; /*  4: Response producer. Updated by back-end. */
   7.275 +    union {                   /*  8 */
   7.276 +        blkif_request_t  req;
   7.277 +        blkif_response_t resp;
   7.278 +    } PACKED ring[BLKIF_RING_SIZE];
   7.279 +} PACKED blkif_ring_t;
   7.280 +
   7.281 +
   7.282 +
   7.283 +As shown in the diagram above, the rules for using a shared memory
   7.284 +ring are simple.  
   7.285 +
   7.286 + 1. A ring is full when a domain's producer and consumer pointers are
   7.287 +    equal (e.g. req_prod == resp_cons).  In this situation, the
   7.288 +    consumer pointer must be advanced.  Furthermore, if the consumer
   7.289 +    pointer is equal to the other domain's producer pointer,
   7.290 +    (e.g. resp_cons = resp_prod), then the other domain has all the
   7.291 +    buffers.
   7.292 +
   7.293 +2. Producer pointers point to the next buffer that will be written to.
   7.294 +   (So blk_ring[MASK_BLKIF_IDX(req_prod)] should not be consumed.)
   7.295 +
   7.296 +3. Consumer pointers point to a valid message, so long as they are not
   7.297 +   equal to the associated producer pointer.
   7.298 +
   7.299 +4. A domain should only ever write to the message pointed
   7.300 +   to by its producer index, and read from the message at it's
   7.301 +   consumer.  More generally, the domain may be thought of to have
   7.302 +   exclusive access to the messages between its consumer and producer,
   7.303 +   and should absolutely not read or write outside this region.
   7.304 +
   7.305 +In general, drivers keep a private copy of their producer pointer and
   7.306 +then set the shared version when they are ready for the other end to
   7.307 +process a set of messages.  Additionally, it is worth paying attention
   7.308 +to the use of memory barriers (rmb/wmb) in the code, to ensure that
   7.309 +rings that are shared across processors behave as expected.
   7.310 +
   7.311 +==== Structure of the Blkif Drivers ====
   7.312 +
   7.313 +Now that the communications primitives have been discussed, I'll
   7.314 +quickly cover the general structure of the blkif driver.  This is
   7.315 +intended to give a high-level idea of what is going on, in an effort
   7.316 +to make reading the code a more approachable task.
   7.317 +
   7.318 +There are three key software components that are involved in the blkif
   7.319 +drivers (not counting Xen itself).  The frontend and backend driver,
   7.320 +and Xend, which coordinates their initial connection.  Xend may also
   7.321 +be involved in control-channel signalling in some cases after startup,
   7.322 +for instance to manage reconnection if the backend is restarted.
   7.323 +
   7.324 +===== Frontend Driver Structure =====
   7.325 +
   7.326 +The frontend domain uses a single event channel and a shared memory
   7.327 +ring to trade control messages with the backend.  These are both setup
   7.328 +during domain startup, which will be discussed shortly.  The shared
   7.329 +memory ring is called blkif_ring, and the private ring indexes are
   7.330 +resp_cons, and req_prod.  The ring is protected by blkif_io_lock.
   7.331 +Additionally, the frontend keeps a list of outstanding requests in
   7.332 +rec_ring[].  These are uniquely identified by a guest-local id number,
   7.333 +which is associated with each request sent to the backend, and
   7.334 +returned with the matching responses.  Information about the actual
   7.335 +disks are stored in major_info[], of which only the first nr_vbds
   7.336 +entries are valid.  Finally, the global 'recovery' indicates that the
   7.337 +connection between the backend and frontend drivers has been broken
   7.338 +(possibly due to a backend driver crash) and that the frontend is in
   7.339 +recovery mode, in which case it will attempt to reconnect and reissue
   7.340 +outstanding requests.
   7.341 +
   7.342 +The frontend driver is single-threaded and after setup is entered only
   7.343 +through three points:  (1) read/write requests from the XenLinux guest
   7.344 +that it is a part of, (2) interrupts from the backend driver on its
   7.345 +event channel (blkif_int()), and (3) control messages from Xend
   7.346 +(blkif_ctrlif_rx).
   7.347 +
   7.348 +===== Backend Driver Structure =====
   7.349 +
   7.350 +The backend driver is slightly more complex as it must manage any
   7.351 +number of concurrent frontend connections.  For each domain it
   7.352 +manages, the backend driver maintains a blkif structure, which
   7.353 +describes all the connection and disk information associated with that
   7.354 +particular domain.  This structure is associated with the interrupt
   7.355 +registration, and allows the backend driver to have immediate context
   7.356 +when it takes a notification from some domain.
   7.357 +
   7.358 +All of the blkif structures are stored in a hash table (blkif_hash),
   7.359 +which is indexed by a hash of the domain id, and a "handle", really a
   7.360 +per-domain blkif identifier, in case it wants to have multiple connections.
   7.361 +
   7.362 +The per-connection blkif structure is of type blkif_t.  It contains
   7.363 +all of the communication details (event channel, irq, shared memory
   7.364 +ring and indexes), and blk_ring_lock, which is the backend mutex on
   7.365 +the shared ring.  The structure also contains vbd_rb, which is a
   7.366 +red-black tree, containing an entry for each device/partition that is
   7.367 +assigned to that domain.  This structure is filled by xend passing
   7.368 +disk information to the backend at startup, and is protected by
   7.369 +vbd_lock.  Finally, the blkif struct contains a status field, which
   7.370 +describes the state of the connection.
   7.371 +
   7.372 +The backend driver spawns a kernel thread at startup
   7.373 +(blkio_schedule()), which handles requests to and from the actual disk
   7.374 +device drivers.  This scheduler thread maintains a list of blkif
   7.375 +structures that have pending requests, and services them round-robin
   7.376 +with a maximum per-round request limit.  blkifs are added to the list
   7.377 +in the interrupt handler (blkif_be_int()) using
   7.378 +add_to_blkdev_list_tail(), and removed in the scheduler loop after
   7.379 +calling do_block_io_op(), which processes a batch of requests.  The
   7.380 +scheduler thread is explicitly activated at several points in the code
   7.381 +using maybe_trigger_blkio_schedule().
   7.382 +
   7.383 +Pending requests between the backend driver and the physical device
   7.384 +drivers use another ring, pending_ring.  Requests are placed in this
   7.385 +ring in the scheduler thread and issued to the device.  A completion
   7.386 +callback, end_block_io_op, indicates that requests have been serviced
   7.387 +and generates a response on the appropriate blkif ring.  pending
   7.388 +reqs[] stores a list of outstanding requests with the physical drivers.
   7.389 +
   7.390 +So, control entries to the backend are (1) the blkio scheduler thread,
   7.391 +which sends requests to the real device drivers, (2) end_block_io_op,
   7.392 +which is called as serviced requests complete, (3) blkif_be_int()
   7.393 +handles notifications from the frontend drivers in other domains, and
   7.394 +(4) blkif_ctrlif_rx() handles control messages from xend.
   7.395 +
   7.396 +==== Driver Startup ====
   7.397 +
   7.398 +Prior to starting a new guest using the frontend driver, the backend
   7.399 +will have been started in a privileged domain.  The backend
   7.400 +initialisation code initialises all of its data structures, such as
   7.401 +the blkif hash table, and starts the scheduler thread as a kernel
   7.402 +thread. It then sends a driver status up message to let xend know it
   7.403 +is ready to take frontend connections.
   7.404 +
   7.405 +When a new domain that uses the blkif frontend driver is started,
   7.406 +there are a series of interactions between it, xend, and the specified
   7.407 +backend driver.  These interactions are as follows:
   7.408 +
   7.409 +The domain configuration given to xend will specify the backend domain
   7.410 +and disks that the new guest is to use.  Prior to actually running the
   7.411 +domain, xend and the backend driver interact to setup the initial
   7.412 +blkif record in the backend.
   7.413 +
   7.414 +(1) Xend sends a BLKIF_BE_CREATE message to backend.
   7.415 +
   7.416 +  Backend does blkif_create(), having been passed FE domid and handle.
   7.417 +  It creates and initialises a new blkif struct, and puts it in the
   7.418 +  hash table.
   7.419 +  It then returns a STATUS_OK response to xend.
   7.420 +
   7.421 +(2) Xend sends a BLKIF_BE_VBD_CREATE message to the backend.
   7.422 + 
   7.423 +  Backend adds a vbd entry in the red-black tree for the
   7.424 +  specified (dom, handle) blkif entry.
   7.425 +  Sends a STATUS_OK response.
   7.426 +
   7.427 +(3) Xend sends a BLKIF_BE_VBD_GROW message to the backend.
   7.428 +
   7.429 +  Backend takes the physical device information passed in the 
   7.430 +  message and assigns them to the newly created vbd struct.
   7.431 +
   7.432 +(2) and (3) repeat as any additional devices are added to the domain.
   7.433 +
   7.434 +At this point, the backend has enough state to allow the frontend
   7.435 +domain to start.  The domain is run, and eventually gets to the
   7.436 +frontend driver initialisation code.  After setting up the frontend
   7.437 +data structures, this code continues the communications with xend and
   7.438 +the backend to negotiate a connection:
   7.439 +
   7.440 +(4) Frontend sends Xend a BLKIF_FE_DRIVER_STATUS_CHANGED message.
   7.441 +
   7.442 +  This message tells xend that the driver is up.  The init function
   7.443 +  now spin-waits until driver setup is complete in order to prevent
   7.444 +  Linux from attempting to boot before the disks are connected.
   7.445 +
   7.446 +(5) Xend sends the frontend an INTERFACE_STATUS_CHANGED message
   7.447 +
   7.448 +  This message specifies that the interface is now disconnected
   7.449 +  (instead of closed).
   7.450 +  The domain updates it's state, and allocates the shared blk_ring
   7.451 +  page.  Next, 
   7.452 +
   7.453 +(6) Frontend sends Xend a BLKIF_INTERFACE_CONNECT message
   7.454 +
   7.455 +  This message specifies the domain and handle, and includes the
   7.456 +  address of the newly created page.
   7.457 +
   7.458 +(7) Xend sends the backend a BLKIF_BE_CONNECT message
   7.459 +
   7.460 +  The backend fills in the blkif connection information, maps the
   7.461 +  shared page, and binds an irq to the event channel.
   7.462 +  
   7.463 +(8) Xend sends the frontend an INTERFACE_STATUS_CHANGED message
   7.464 +
   7.465 +  This message takes the frontend driver to a CONNECTED state, at
   7.466 +  which point it binds an irq to the event channel and calls
   7.467 +  xlvbd_init to initialise the individual block devices.
   7.468 +
   7.469 +The frontend Linux is stall spin waiting at this point, until all of
   7.470 +the disks have been probed.  Messaging now is directly between the
   7.471 +front and backend domain using the new shared ring and event channel.
   7.472 +
   7.473 +(9) The frontend sends a BLKIF_OP_PROBE directly to the backend.
   7.474 +
   7.475 +  This message includes a reference to an additional page, that the
   7.476 +  backend can use for it's reply.  The backend responds with an array
   7.477 +  of the domains disks (as vdisk_t structs) on the provided page.
   7.478 +
   7.479 +The frontend now initialises each disk, calling xlvbd_init_device()
   7.480 +for each one.
     8.1 --- a/docs/interface.tex	Fri Aug 27 08:43:54 2004 +0000
     8.2 +++ b/docs/interface.tex	Wed Sep 01 09:43:32 2004 +0000
     8.3 @@ -15,7 +15,7 @@
     8.4  \vfill
     8.5  \begin{tabular}{l}
     8.6  {\Huge \bf Interface manual} \\[4mm]
     8.7 -{\huge Xen v1.3 for x86} \\[80mm]
     8.8 +{\huge Xen v2.0 for x86} \\[80mm]
     8.9  
    8.10  {\Large Xen is Copyright (c) 2004, The Xen Team} \\[3mm]
    8.11  {\Large University of Cambridge, UK} \\[20mm]
     9.1 --- a/docs/user.tex	Fri Aug 27 08:43:54 2004 +0000
     9.2 +++ b/docs/user.tex	Wed Sep 01 09:43:32 2004 +0000
     9.3 @@ -77,7 +77,7 @@ following OSs have either been ported al
     9.4  progress:
     9.5  \begin{itemize}
     9.6  \item Dragonfly BSD
     9.7 -\item FreeBSD 4.8
     9.8 +\item FreeBSD 5.3
     9.9  \item Linux 2.4
    9.10  \item Linux 2.6
    9.11  \item NetBSD 2.0
    9.12 @@ -85,8 +85,8 @@ progress:
    9.13  \item Windows XP
    9.14  \end{itemize}
    9.15  
    9.16 -Right now, Linux 2.4 and 2.6 are available for on Xen 2.0.  NetBSD
    9.17 -port will be updated to run on Xen 2.0, hopefully in time for the Xen
    9.18 +Right now, Linux 2.4 and 2.6 are available for Xen 2.0.  NetBSD
    9.19 +port will be updated to run on Xen 2.0, hopefully in time for the NetBSD
    9.20  2.0 release.  It is intended that Xen support be integrated into the
    9.21  official releases of Linux 2.6, NetBSD 2.0, FreeBSD and Dragonfly BSD.
    9.22  
    9.23 @@ -289,16 +289,16 @@ line.
    9.24  \subsection{Using Bitkeeper}
    9.25  
    9.26  The public master BK repository for the 2.0 release lives at: \\
    9.27 -{\tt bk://xen.bkbits.net/xeno-unstable.bk}.  You can use Bitkeeper to
    9.28 +{\tt bk://xen.bkbits.net/xen-2.0.bk}.  You can use Bitkeeper to
    9.29  download it and keep it updated with the latest features and fixes.
    9.30  
    9.31  Change to the directory in which you want to put the source code, then
    9.32  run:
    9.33  \begin{verbatim}
    9.34 -# bk clone bk://xen.bkbits.net/xeno-unstable.bk
    9.35 +# bk clone bk://xen.bkbits.net/xen-2.0.bk
    9.36  \end{verbatim}
    9.37  
    9.38 -Under your current directory, a new directory named 'xeno-unstable.bk'
    9.39 +Under your current directory, a new directory named `xen-2.0.bk'
    9.40  has been created, which contains all the source code for the Xen
    9.41  hypervisor and the Xen tools.  The directory also contains `sparse'
    9.42  Linux source trees, containing only the files that differ between
    9.43 @@ -307,8 +307,8 @@ XenLinux and standard Linux.
    9.44  Once you have cloned the repository, you can update to the newest
    9.45  changes to the repository by running:
    9.46  \begin{verbatim}
    9.47 -# cd xeno-unstable.bk # to change into the local repository
    9.48 -# bk pull             # to update the repository
    9.49 +# cd xen-2.0.bk # to change into the local repository
    9.50 +# bk pull        # to update the repository
    9.51  \end{verbatim}
    9.52  
    9.53  \subsection{Without Bitkeeper}
    9.54 @@ -494,18 +494,22 @@ require a more complex setup, you will w
    9.55  configuration file --- details of the configuration file formats are
    9.56  included in Chapter~\ref{cha:config}.
    9.57  
    9.58 -The \path{xmdefaults} file is a template description that is intended
    9.59 -to be reused for multiple virtual machines.  Setting the value of the
    9.60 -{\tt vmid} variable fills in parts of this template.
    9.61 +The \path{xmdefconfig1} file is a simple template configuration file
    9.62 +for describing a single VM.
    9.63  
    9.64 -\subsection{Editing \path{xmdefaults}}
    9.65 +The \path{xmdefconfig2} file is a template description that is intended
    9.66 +to be reused for multiple virtual machines.  Setting the value of the
    9.67 +{\tt vmid} variable on the {\tt xm} command line
    9.68 +fills in parts of this template.
    9.69  
    9.70 -At minimum, you should edit the following variables in \path{xmdefaults}:
    9.71 +\subsection{Editing \path{xmdefconfig}}
    9.72 +
    9.73 +At minimum, you should edit the following variables in \path{xmdefconfig}:
    9.74  
    9.75  \begin{description}
    9.76  \item[kernel] Set this to the path of the kernel you compiled for use
    9.77                with Xen. [e.g. {\tt kernel =
    9.78 -              '/root/xeno-unstable.bk/install/boot/vmlinuz-2.4.27-xenU'}]
    9.79 +              '/root/xen-2.0.bk/install/boot/vmlinuz-2.4.27-xenU'}]
    9.80  \item[memory] Set this to the size of the domain's memory in
    9.81  megabytes. [e.g. {\tt memory = 64 } ]
    9.82  \item[disk] Set the first entry in this list to calculate the offset
    9.83 @@ -535,8 +539,8 @@ virtual machine with virtual machine ID 
    9.84  
    9.85  The {\tt -c} switch causes {\tt xm} to turn into the domain's console
    9.86  after creation.  The {\tt vmid=1} sets the {\tt vmid} variable used in
    9.87 -the {\tt xmdefaults} file.  The tool uses the
    9.88 -\path{/etc/xen/xmdefaults} file, since no custom configuration file
    9.89 +the {\tt xmdefconfig} file.  The tool uses the
    9.90 +\path{/etc/xen/xmdefconfig} file, since no custom configuration file
    9.91  was specified on the command line.
    9.92  
    9.93  \chapter{Domain management tasks}
    9.94 @@ -678,7 +682,7 @@ Xen configuration files contain the foll
    9.95  \end{description}
    9.96  
    9.97  It is also possible to include Python scripting commands in
    9.98 -configuration files.  This is done in the \path{xmdefaults} file in
    9.99 +configuration files.  This is done in the \path{xmdefconfig} file in
   9.100  order to handle the {\tt vmid} variable.
   9.101  
   9.102  
   9.103 @@ -743,7 +747,7 @@ The available {\em switches } and {\em a
   9.104  declarations of the form {\tt variable=value} and may be used to set /
   9.105  override any of the values in the configuration file being used,
   9.106  including the standard variables described above and any custom
   9.107 -variables (for instance, the \path{xmdefaults} file uses a {\tt vmid}
   9.108 +variables (for instance, the \path{xmdefconfig} file uses a {\tt vmid}
   9.109  variable).
   9.110  
   9.111  The available commands are as follows:
   9.112 @@ -1021,7 +1025,7 @@ IO privileges can be assigned to allow a
   9.113  itself.  This is used for to support driver domains.
   9.114  
   9.115  Setting backend privileges is currently only supported in SXP format
   9.116 -config files (??? is this true - there's nothing in xmdefaults,
   9.117 +config files (??? is this true - there's nothing in xmdefconfig,
   9.118  anyhow).  To allow a domain to function as a backend for others,
   9.119  somewhere within the {\tt vm} element of its configuration file must
   9.120  be a {\tt backend} element of the form {\tt (backend ({\em type}))}
    10.1 --- a/linux-2.4.27-xen-sparse/arch/xen/kernel/head.S	Fri Aug 27 08:43:54 2004 +0000
    10.2 +++ b/linux-2.4.27-xen-sparse/arch/xen/kernel/head.S	Wed Sep 01 09:43:32 2004 +0000
    10.3 @@ -1,6 +1,6 @@
    10.4  
    10.5  .section __xen_guest
    10.6 -    .asciz "GUEST_OS=linux,GUEST_VER=2.4,XEN_VER=1.3,VIRT_BASE=0xC0000000"
    10.7 +    .asciz "GUEST_OS=linux,GUEST_VER=2.4,XEN_VER=2.0,VIRT_BASE=0xC0000000"
    10.8  
    10.9  .text
   10.10  #include <linux/config.h>
    11.1 --- a/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c	Fri Aug 27 08:43:54 2004 +0000
    11.2 +++ b/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c	Wed Sep 01 09:43:32 2004 +0000
    11.3 @@ -214,7 +214,8 @@ static void __get_time_values_from_xen(v
    11.4          rmb();
    11.5          shadow_tv.tv_sec    = HYPERVISOR_shared_info->wc_sec;
    11.6          shadow_tv.tv_usec   = HYPERVISOR_shared_info->wc_usec;
    11.7 -        shadow_tsc_stamp    = HYPERVISOR_shared_info->tsc_timestamp.tsc_bits;
    11.8 +        shadow_tsc_stamp    = 
    11.9 +            (u32)(HYPERVISOR_shared_info->tsc_timestamp >> rdtsc_bitshift);
   11.10          shadow_system_time  = HYPERVISOR_shared_info->system_time;
   11.11          rmb();
   11.12      }
   11.13 @@ -604,6 +605,7 @@ void __init time_init(void)
   11.14  {
   11.15      unsigned long long alarm;
   11.16      u64 __cpu_khz, cpu_freq, scale, scale2;
   11.17 +    unsigned int cpu_ghz;
   11.18  
   11.19      __cpu_khz = HYPERVISOR_shared_info->cpu_freq;
   11.20      do_div(__cpu_khz, 1000);
   11.21 @@ -615,8 +617,11 @@ void __init time_init(void)
   11.22      xtime.tv_usec = HYPERVISOR_shared_info->wc_usec;
   11.23      processed_system_time = shadow_system_time;
   11.24  
   11.25 -    rdtsc_bitshift      = HYPERVISOR_shared_info->tsc_timestamp.tsc_bitshift;
   11.26 -    cpu_freq            = HYPERVISOR_shared_info->cpu_freq;
   11.27 +    cpu_freq = HYPERVISOR_shared_info->cpu_freq;
   11.28 +
   11.29 +    cpu_ghz = do_div(cpu_freq, 1000000000UL);
   11.30 +    for ( rdtsc_bitshift = 0; cpu_ghz != 0; rdtsc_bitshift++, cpu_ghz >>= 1 )
   11.31 +        continue;
   11.32  
   11.33      scale = 1000000LL << (32 + rdtsc_bitshift);
   11.34      do_div(scale, (u32)cpu_freq);
    12.1 --- a/linux-2.4.27-xen-sparse/include/asm-xen/fixmap.h	Fri Aug 27 08:43:54 2004 +0000
    12.2 +++ b/linux-2.4.27-xen-sparse/include/asm-xen/fixmap.h	Wed Sep 01 09:43:32 2004 +0000
    12.3 @@ -52,7 +52,7 @@ enum fixed_addresses {
    12.4  	FIX_NETRING2_BASE,
    12.5  	FIX_NETRING3_BASE,
    12.6          FIX_SHARED_INFO,
    12.7 -
    12.8 +	FIX_GNTTAB,
    12.9  #ifdef CONFIG_VGA_CONSOLE
   12.10  #define NR_FIX_BTMAPS   32  /* 128KB For the Dom0 VGA Console A0000-C0000 */
   12.11  #else
    13.1 --- a/linux-2.4.27-xen-sparse/include/asm-xen/irq.h	Fri Aug 27 08:43:54 2004 +0000
    13.2 +++ b/linux-2.4.27-xen-sparse/include/asm-xen/irq.h	Wed Sep 01 09:43:32 2004 +0000
    13.3 @@ -56,4 +56,7 @@ extern void enable_irq(unsigned int);
    13.4  extern void irq_suspend(void);
    13.5  extern void irq_resume(void);
    13.6  
    13.7 +
    13.8 +#define CPU_MASK_NONE 0
    13.9 +
   13.10  #endif /* _ASM_IRQ_H */
    14.1 --- a/linux-2.4.27-xen-sparse/include/linux/mm.h	Fri Aug 27 08:43:54 2004 +0000
    14.2 +++ b/linux-2.4.27-xen-sparse/include/linux/mm.h	Wed Sep 01 09:43:32 2004 +0000
    14.3 @@ -332,7 +332,10 @@ typedef struct page {
    14.4  /* A foreign page uses a custom destructor rather than the buddy allocator. */
    14.5  #ifdef CONFIG_FOREIGN_PAGES
    14.6  #define PageForeign(page)	test_bit(PG_foreign, &(page)->flags)
    14.7 -#define SetPageForeign(page)	set_bit(PG_foreign, &(page)->flags)
    14.8 +#define SetPageForeign(page, dtor) do {		\
    14.9 +	set_bit(PG_foreign, &(page)->flags);	\
   14.10 +	(page)->mapping = (void *)dtor;		\
   14.11 +} while (0)
   14.12  #define ClearPageForeign(page)	clear_bit(PG_foreign, &(page)->flags)
   14.13  #define PageForeignDestructor(page)	\
   14.14  	( (void (*) (struct page *)) (page)->mapping )
    15.1 --- a/linux-2.4.27-xen-sparse/mkbuildtree	Fri Aug 27 08:43:54 2004 +0000
    15.2 +++ b/linux-2.4.27-xen-sparse/mkbuildtree	Wed Sep 01 09:43:32 2004 +0000
    15.3 @@ -78,7 +78,7 @@ relative_lndir ()
    15.4  
    15.5  # Get absolute path to the destination directory
    15.6  pushd . >/dev/null
    15.7 -cd ${1}
    15.8 +cd ${1} || { echo "cannot cd to ${1}"; exit 1; }
    15.9  AD=$PWD
   15.10  popd >/dev/null
   15.11    
   15.12 @@ -93,7 +93,7 @@ RS=$DESTPATH
   15.13  for i in `find . -type f -o -type l` ; do rm -f ${AD}/${i#./} ; done
   15.14  
   15.15  # We now work from the destination directory
   15.16 -cd ${AD}
   15.17 +cd ${AD} || { echo "cannot cd to ${AD}"; exit 1; }
   15.18  
   15.19  # Remove old symlinks
   15.20  for i in `find . -type l`; do rm -f $i; done
   15.21 @@ -102,7 +102,9 @@ for i in `find . -type l`; do rm -f $i; 
   15.22  relative_lndir ${RS}
   15.23  rm -f mkbuildtree
   15.24  
   15.25 -LINUX_26=${RS}/../linux-2.6.7-xen-sparse
   15.26 +set ${RS}/../linux-2.6.*-xen-sparse
   15.27 +[ "$1" == "${RS}/../linux-2.6.*-xen-parse" ] && { echo "no Linux 2.6 sparse tree at ${RS}/../linux-2.6.*-xen-sparse"; exit 1; }
   15.28 +LINUX_26="$1"
   15.29  
   15.30  
   15.31  # Create links to the shared definitions of the hypervisor interface
    16.1 --- a/linux-2.6.7-xen-sparse/arch/xen/Kconfig	Fri Aug 27 08:43:54 2004 +0000
    16.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.3 @@ -1,105 +0,0 @@
    16.4 -#
    16.5 -# For a description of the syntax of this configuration file,
    16.6 -# see Documentation/kbuild/kconfig-language.txt.
    16.7 -#
    16.8 -
    16.9 -mainmenu "Linux Kernel Configuration"
   16.10 -
   16.11 -config XEN
   16.12 -	bool
   16.13 -	default y
   16.14 -	help
   16.15 -	  This is the Linux Xen port.
   16.16 -
   16.17 -config ARCH_XEN
   16.18 -	bool
   16.19 -	default y
   16.20 -
   16.21 -
   16.22 -config NO_IDLE_HZ
   16.23 -	bool
   16.24 -	default y
   16.25 -
   16.26 -
   16.27 -menu "XEN"
   16.28 -
   16.29 -config XEN_PRIVILEGED_GUEST
   16.30 -	bool "Privileged Guest (domain 0)"
   16.31 -	default n
   16.32 -	help
   16.33 -	  Support for privileged operation (domain 0)
   16.34 -
   16.35 -config XEN_PHYSDEV_ACCESS
   16.36 -	bool "Device-driver domain (physical device access)"
   16.37 -	default y if XEN_PRIVILEGED_GUEST
   16.38 -	default n
   16.39 -	help
   16.40 -	  Device-driver domain (physical device access)
   16.41 -
   16.42 -config XEN_WRITABLE_PAGETABLES
   16.43 -	bool "Use writable pagetables"
   16.44 -	default n
   16.45 -	help
   16.46 -	  Use writable L1 pagetables
   16.47 -
   16.48 -endmenu
   16.49 -
   16.50 -config FOREIGN_PAGES
   16.51 -	bool
   16.52 -	default y if XEN_PHYSDEV_ACCESS
   16.53 -	default n if !XEN_PHYSDEV_ACCESS
   16.54 -
   16.55 -config PAGESIZED_SKBS
   16.56 -	bool
   16.57 -	default y if XEN_PHYSDEV_ACCESS
   16.58 -	default n if !XEN_PHYSDEV_ACCESS
   16.59 -
   16.60 -#config VT
   16.61 -#	bool
   16.62 -#	default y
   16.63 -
   16.64 -#config VT_CONSOLE
   16.65 -#	bool
   16.66 -#	default y
   16.67 -
   16.68 -#config HW_CONSOLE
   16.69 -#	bool
   16.70 -#	default y
   16.71 -
   16.72 -choice
   16.73 -	prompt "Processor Type"
   16.74 -	default X86
   16.75 -
   16.76 -config X86
   16.77 -	bool "X86"
   16.78 -	help
   16.79 -	  Choose this option if your computer is a X86 architecture.
   16.80 -
   16.81 -config X86_64
   16.82 -	bool "X86_64"
   16.83 -	help
   16.84 -	  Choose this option if your computer is a X86 architecture.
   16.85 -
   16.86 -endchoice
   16.87 -
   16.88 -source "init/Kconfig"
   16.89 -
   16.90 -if X86
   16.91 -source "arch/xen/i386/Kconfig"
   16.92 -endif
   16.93 -
   16.94 -menu "Executable file formats"
   16.95 -
   16.96 -source "fs/Kconfig.binfmt"
   16.97 -
   16.98 -endmenu
   16.99 -
  16.100 -source "arch/xen/Kconfig.drivers"
  16.101 -
  16.102 -source "fs/Kconfig"
  16.103 -
  16.104 -source "security/Kconfig"
  16.105 -
  16.106 -source "crypto/Kconfig"
  16.107 -
  16.108 -source "lib/Kconfig"
    17.1 --- a/linux-2.6.7-xen-sparse/arch/xen/Kconfig.drivers	Fri Aug 27 08:43:54 2004 +0000
    17.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.3 @@ -1,87 +0,0 @@
    17.4 -# arch/xen/Kconfig.drivers
    17.5 -
    17.6 -menu "Device Drivers"
    17.7 -
    17.8 -source "drivers/base/Kconfig"
    17.9 -
   17.10 -source "drivers/scsi/Kconfig"
   17.11 -source "drivers/block/Kconfig"
   17.12 -source "drivers/md/Kconfig"
   17.13 -
   17.14 -# Always include scsi and block to enable iscsi, loop0 etc.
   17.15 -
   17.16 -if XEN_PHYSDEV_ACCESS
   17.17 -source "drivers/ide/Kconfig"
   17.18 -source "drivers/cdrom/Kconfig"
   17.19 -endif
   17.20 -
   17.21 -source "net/Kconfig"
   17.22 -
   17.23 -if XEN_PRIVILEGED_GUEST
   17.24 -source "drivers/input/Kconfig"
   17.25 -endif
   17.26 -
   17.27 -config INPUT
   17.28 -	tristate "Input devices (needed for keyboard, mouse, ...)" if EMBEDDED
   17.29 -	default y
   17.30 -	---help---
   17.31 -	  Say Y here if you have any input device (mouse, keyboard, tablet,
   17.32 -	  joystick, steering wheel ...) connected to your system and want
   17.33 -	  it to be available to applications. This includes standard PS/2
   17.34 -	  keyboard and mouse.
   17.35 -
   17.36 -	  Say N here if you have a headless (no monitor, no keyboard) system.
   17.37 -
   17.38 -	  More information is available: <file:Documentation/input/input.txt>
   17.39 -
   17.40 -	  If unsure, say Y.
   17.41 -
   17.42 -	  To compile this driver as a module, choose M here: the
   17.43 -	  module will be called input.
   17.44 -
   17.45 -if XEN_PRIVILEGED_GUEST
   17.46 -source "drivers/char/Kconfig"
   17.47 -endif
   17.48 -
   17.49 -config UNIX98_PTYS
   17.50 -	bool "Unix98 PTY support" if EMBEDDED
   17.51 -	default y
   17.52 -	---help---
   17.53 -	  A pseudo terminal (PTY) is a software device consisting of two
   17.54 -	  halves: a master and a slave. The slave device behaves identical to
   17.55 -	  a physical terminal; the master device is used by a process to
   17.56 -	  read data from and write data to the slave, thereby emulating a
   17.57 -	  terminal. Typical programs for the master side are telnet servers
   17.58 -	  and xterms.
   17.59 -
   17.60 -	  Linux has traditionally used the BSD-like names /dev/ptyxx for
   17.61 -	  masters and /dev/ttyxx for slaves of pseudo terminals. This scheme
   17.62 -	  has a number of problems. The GNU C library glibc 2.1 and later,
   17.63 -	  however, supports the Unix98 naming standard: in order to acquire a
   17.64 -	  pseudo terminal, a process opens /dev/ptmx; the number of the pseudo
   17.65 -	  terminal is then made available to the process and the pseudo
   17.66 -	  terminal slave can be accessed as /dev/pts/<number>. What was
   17.67 -	  traditionally /dev/ttyp2 will then be /dev/pts/2, for example.
   17.68 -
   17.69 -	  All modern Linux systems use the Unix98 ptys.  Say Y unless
   17.70 -	  you're on an embedded system and want to conserve memory.
   17.71 -
   17.72 -
   17.73 -if XEN_PHYSDEV_ACCESS
   17.74 -source "drivers/i2c/Kconfig"
   17.75 -source "drivers/video/Kconfig"
   17.76 -endif
   17.77 -
   17.78 -#config XEN_EVTCHN
   17.79 -#	bool "Xen Event Channel"
   17.80 -#	depends on XEN
   17.81 -#	default Y
   17.82 -#
   17.83 -#config XEN_CONSOLE
   17.84 -#	bool "Xen Console"
   17.85 -#	depends on XEN && XEN_EVTCHN
   17.86 -#	default Y
   17.87 -#	help
   17.88 -#	  Say Y to build a console driver for Xen.
   17.89 -
   17.90 -endmenu
    18.1 --- a/linux-2.6.7-xen-sparse/arch/xen/Makefile	Fri Aug 27 08:43:54 2004 +0000
    18.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.3 @@ -1,77 +0,0 @@
    18.4 -#
    18.5 -# xen/Makefile
    18.6 -#
    18.7 -# This file is included by the global makefile so that you can add your own
    18.8 -# architecture-specific flags and dependencies. Remember to do have actions
    18.9 -# for "archclean" cleaning up for this architecture.
   18.10 -#
   18.11 -# This file is subject to the terms and conditions of the GNU General Public
   18.12 -# License.  See the file "COPYING" in the main directory of this archive
   18.13 -# for more details.
   18.14 -#
   18.15 -# Copyright (C) 2004 by Christian Limpach
   18.16 -#
   18.17 -
   18.18 -override EXTRAVERSION:=$(subst linux-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL),,$(shell basename $(TOPDIR)))$(EXTRAVERSION)
   18.19 -
   18.20 -XENARCH	:= $(subst ",,$(CONFIG_XENARCH))
   18.21 -
   18.22 -# pick up headers from include/asm-xen/asm in preference over include/asm
   18.23 -NOSTDINC_FLAGS  = -nostdinc -iwithprefix include/asm-xen -Iinclude/asm-xen -iwithprefix include
   18.24 -
   18.25 -# make uname return the processor arch
   18.26 -UTS_MACHINE := $(XENARCH)
   18.27 -
   18.28 -core-y	+= arch/xen/kernel/
   18.29 -
   18.30 -include/.asm-ignore:
   18.31 -	@rm -f include/.asm-ignore
   18.32 -	@mv include/asm include/.asm-ignore
   18.33 -	@echo '  SYMLINK include/asm -> include/asm-$(XENARCH)'
   18.34 -	$(Q)if [ ! -d include ]; then mkdir -p include; fi;
   18.35 -	@ln -fsn asm-$(XENARCH) include/asm
   18.36 -
   18.37 -include/asm-xen/asm:
   18.38 -	@echo '  SYMLINK $@ -> include/asm-xen/asm-$(XENARCH)'
   18.39 -	@ln -fsn asm-$(XENARCH) $@
   18.40 -
   18.41 -include/asm-xen/asm-$(XENARCH)/hypervisor-ifs:
   18.42 -	@echo '  SYMLINK $@ -> include/asm-xen/hypervisor-ifs'
   18.43 -	@ln -fsn ../hypervisor-ifs $@
   18.44 -
   18.45 -arch/xen/arch:
   18.46 -	@rm -f $@
   18.47 -	@ln -fsn $(XENARCH) $@
   18.48 -
   18.49 -prepare: include/.asm-ignore include/asm-xen/asm \
   18.50 -	include/asm-xen/asm-$(XENARCH)/hypervisor-ifs \
   18.51 -	arch/xen/arch ;
   18.52 -
   18.53 -all: vmlinuz
   18.54 -
   18.55 -vmlinuz: vmlinux
   18.56 -	$(Q)$(MAKE) $(build)=arch/xen/boot vmlinuz
   18.57 -
   18.58 -XINSTALL_NAME ?= $(KERNELRELEASE)
   18.59 -install: vmlinuz
   18.60 -	mkdir -p $(INSTALL_PATH)/boot
   18.61 -	install -m0644 vmlinuz $(INSTALL_PATH)/boot/vmlinuz-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
   18.62 -	install -m0644 vmlinux $(INSTALL_PATH)/boot/vmlinux-syms-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
   18.63 -	install -m0664 .config $(INSTALL_PATH)/boot/config-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
   18.64 -	install -m0664 System.map $(INSTALL_PATH)/boot/System.map-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
   18.65 -
   18.66 -dist:
   18.67 -	$(MAKE) INSTALL_PATH=../install install
   18.68 -
   18.69 -archclean:
   18.70 -	@if [ -e arch/xen/arch ]; then $(MAKE) $(clean)=arch/xen/arch; fi;
   18.71 -	@rm -f arch/xen/arch include/.asm-ignore include/asm-xen/asm
   18.72 -
   18.73 -define archhelp
   18.74 -  echo  '* vmlinuz	- Compressed kernel image'
   18.75 -  echo  '  install	- Install kernel image and config file'
   18.76 -endef
   18.77 -
   18.78 -ifneq ($(XENARCH),)
   18.79 -include	$(srctree)/arch/xen/$(XENARCH)/Makefile
   18.80 -endif
    19.1 --- a/linux-2.6.7-xen-sparse/arch/xen/boot/Makefile	Fri Aug 27 08:43:54 2004 +0000
    19.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.3 @@ -1,8 +0,0 @@
    19.4 -
    19.5 -OBJCOPYFLAGS := -g --strip-unneeded
    19.6 -
    19.7 -vmlinuz: vmlinux-stripped FORCE
    19.8 -	$(call if_changed,gzip)
    19.9 -
   19.10 -vmlinux-stripped: vmlinux FORCE
   19.11 -	$(call if_changed,objcopy)
    20.1 --- a/linux-2.6.7-xen-sparse/arch/xen/configs/xen0_defconfig	Fri Aug 27 08:43:54 2004 +0000
    20.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.3 @@ -1,933 +0,0 @@
    20.4 -#
    20.5 -# Automatically generated make config: don't edit
    20.6 -#
    20.7 -CONFIG_XEN=y
    20.8 -CONFIG_ARCH_XEN=y
    20.9 -CONFIG_NO_IDLE_HZ=y
   20.10 -
   20.11 -#
   20.12 -# XEN
   20.13 -#
   20.14 -CONFIG_XEN_PRIVILEGED_GUEST=y
   20.15 -CONFIG_XEN_PHYSDEV_ACCESS=y
   20.16 -# CONFIG_XEN_WRITABLE_PAGETABLES is not set
   20.17 -CONFIG_FOREIGN_PAGES=y
   20.18 -CONFIG_PAGESIZED_SKBS=y
   20.19 -CONFIG_X86=y
   20.20 -# CONFIG_X86_64 is not set
   20.21 -
   20.22 -#
   20.23 -# Code maturity level options
   20.24 -#
   20.25 -CONFIG_EXPERIMENTAL=y
   20.26 -# CONFIG_CLEAN_COMPILE is not set
   20.27 -# CONFIG_STANDALONE is not set
   20.28 -CONFIG_BROKEN=y
   20.29 -CONFIG_BROKEN_ON_SMP=y
   20.30 -
   20.31 -#
   20.32 -# General setup
   20.33 -#
   20.34 -CONFIG_SWAP=y
   20.35 -CONFIG_SYSVIPC=y
   20.36 -# CONFIG_POSIX_MQUEUE is not set
   20.37 -# CONFIG_BSD_PROCESS_ACCT is not set
   20.38 -CONFIG_SYSCTL=y
   20.39 -# CONFIG_AUDIT is not set
   20.40 -CONFIG_LOG_BUF_SHIFT=14
   20.41 -CONFIG_HOTPLUG=y
   20.42 -# CONFIG_IKCONFIG is not set
   20.43 -# CONFIG_EMBEDDED is not set
   20.44 -CONFIG_KALLSYMS=y
   20.45 -# CONFIG_KALLSYMS_ALL is not set
   20.46 -CONFIG_FUTEX=y
   20.47 -CONFIG_EPOLL=y
   20.48 -CONFIG_IOSCHED_NOOP=y
   20.49 -CONFIG_IOSCHED_AS=y
   20.50 -CONFIG_IOSCHED_DEADLINE=y
   20.51 -CONFIG_IOSCHED_CFQ=y
   20.52 -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
   20.53 -
   20.54 -#
   20.55 -# Loadable module support
   20.56 -#
   20.57 -CONFIG_MODULES=y
   20.58 -CONFIG_MODULE_UNLOAD=y
   20.59 -# CONFIG_MODULE_FORCE_UNLOAD is not set
   20.60 -CONFIG_OBSOLETE_MODPARM=y
   20.61 -# CONFIG_MODVERSIONS is not set
   20.62 -CONFIG_KMOD=y
   20.63 -
   20.64 -#
   20.65 -# X86 Processor Configuration
   20.66 -#
   20.67 -CONFIG_XENARCH="i386"
   20.68 -CONFIG_MMU=y
   20.69 -CONFIG_UID16=y
   20.70 -CONFIG_GENERIC_ISA_DMA=y
   20.71 -# CONFIG_M686 is not set
   20.72 -# CONFIG_MPENTIUMII is not set
   20.73 -# CONFIG_MPENTIUMIII is not set
   20.74 -# CONFIG_MPENTIUMM is not set
   20.75 -CONFIG_MPENTIUM4=y
   20.76 -# CONFIG_MK6 is not set
   20.77 -# CONFIG_MK7 is not set
   20.78 -# CONFIG_MK8 is not set
   20.79 -# CONFIG_MCRUSOE is not set
   20.80 -# CONFIG_MCYRIXIII is not set
   20.81 -# CONFIG_MVIAC3_2 is not set
   20.82 -# CONFIG_X86_GENERIC is not set
   20.83 -CONFIG_X86_CMPXCHG=y
   20.84 -CONFIG_X86_XADD=y
   20.85 -CONFIG_X86_L1_CACHE_SHIFT=7
   20.86 -CONFIG_RWSEM_XCHGADD_ALGORITHM=y
   20.87 -CONFIG_X86_WP_WORKS_OK=y
   20.88 -CONFIG_X86_INVLPG=y
   20.89 -CONFIG_X86_BSWAP=y
   20.90 -CONFIG_X86_POPAD_OK=y
   20.91 -CONFIG_X86_GOOD_APIC=y
   20.92 -CONFIG_X86_INTEL_USERCOPY=y
   20.93 -CONFIG_X86_USE_PPRO_CHECKSUM=y
   20.94 -# CONFIG_HPET_TIMER is not set
   20.95 -# CONFIG_HPET_EMULATE_RTC is not set
   20.96 -# CONFIG_SMP is not set
   20.97 -CONFIG_PREEMPT=y
   20.98 -CONFIG_X86_CPUID=y
   20.99 -
  20.100 -#
  20.101 -# Firmware Drivers
  20.102 -#
  20.103 -# CONFIG_EDD is not set
  20.104 -CONFIG_NOHIGHMEM=y
  20.105 -# CONFIG_HIGHMEM4G is not set
  20.106 -CONFIG_HAVE_DEC_LOCK=y
  20.107 -# CONFIG_REGPARM is not set
  20.108 -
  20.109 -#
  20.110 -# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
  20.111 -#
  20.112 -CONFIG_PCI=y
  20.113 -# CONFIG_PCI_GOBIOS is not set
  20.114 -# CONFIG_PCI_GOMMCONFIG is not set
  20.115 -CONFIG_PCI_GODIRECT=y
  20.116 -# CONFIG_PCI_GOANY is not set
  20.117 -CONFIG_PCI_DIRECT=y
  20.118 -CONFIG_PCI_LEGACY_PROC=y
  20.119 -# CONFIG_PCI_NAMES is not set
  20.120 -CONFIG_ISA=y
  20.121 -# CONFIG_EISA is not set
  20.122 -# CONFIG_MCA is not set
  20.123 -# CONFIG_SCx200 is not set
  20.124 -
  20.125 -#
  20.126 -# PCMCIA/CardBus support
  20.127 -#
  20.128 -CONFIG_PCMCIA=m
  20.129 -# CONFIG_PCMCIA_DEBUG is not set
  20.130 -CONFIG_YENTA=m
  20.131 -CONFIG_CARDBUS=y
  20.132 -# CONFIG_I82092 is not set
  20.133 -# CONFIG_I82365 is not set
  20.134 -# CONFIG_TCIC is not set
  20.135 -CONFIG_PCMCIA_PROBE=y
  20.136 -
  20.137 -#
  20.138 -# PCI Hotplug Support
  20.139 -#
  20.140 -# CONFIG_HOTPLUG_PCI is not set
  20.141 -
  20.142 -#
  20.143 -# Kernel hacking
  20.144 -#
  20.145 -CONFIG_DEBUG_KERNEL=y
  20.146 -CONFIG_EARLY_PRINTK=y
  20.147 -# CONFIG_DEBUG_STACKOVERFLOW is not set
  20.148 -# CONFIG_DEBUG_STACK_USAGE is not set
  20.149 -# CONFIG_DEBUG_SLAB is not set
  20.150 -CONFIG_MAGIC_SYSRQ=y
  20.151 -# CONFIG_DEBUG_SPINLOCK is not set
  20.152 -# CONFIG_DEBUG_PAGEALLOC is not set
  20.153 -# CONFIG_DEBUG_INFO is not set
  20.154 -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
  20.155 -# CONFIG_FRAME_POINTER is not set
  20.156 -# CONFIG_4KSTACKS is not set
  20.157 -CONFIG_X86_BIOS_REBOOT=y
  20.158 -CONFIG_X86_STD_RESOURCES=y
  20.159 -CONFIG_PC=y
  20.160 -
  20.161 -#
  20.162 -# Executable file formats
  20.163 -#
  20.164 -CONFIG_BINFMT_ELF=y
  20.165 -# CONFIG_BINFMT_AOUT is not set
  20.166 -# CONFIG_BINFMT_MISC is not set
  20.167 -
  20.168 -#
  20.169 -# Device Drivers
  20.170 -#
  20.171 -
  20.172 -#
  20.173 -# Generic Driver Options
  20.174 -#
  20.175 -# CONFIG_FW_LOADER is not set
  20.176 -# CONFIG_DEBUG_DRIVER is not set
  20.177 -
  20.178 -#
  20.179 -# SCSI device support
  20.180 -#
  20.181 -CONFIG_SCSI=y
  20.182 -CONFIG_SCSI_PROC_FS=y
  20.183 -
  20.184 -#
  20.185 -# SCSI support type (disk, tape, CD-ROM)
  20.186 -#
  20.187 -CONFIG_BLK_DEV_SD=y
  20.188 -# CONFIG_CHR_DEV_ST is not set
  20.189 -# CONFIG_CHR_DEV_OSST is not set
  20.190 -# CONFIG_BLK_DEV_SR is not set
  20.191 -# CONFIG_CHR_DEV_SG is not set
  20.192 -
  20.193 -#
  20.194 -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
  20.195 -#
  20.196 -# CONFIG_SCSI_MULTI_LUN is not set
  20.197 -# CONFIG_SCSI_CONSTANTS is not set
  20.198 -# CONFIG_SCSI_LOGGING is not set
  20.199 -
  20.200 -#
  20.201 -# SCSI Transport Attributes
  20.202 -#
  20.203 -# CONFIG_SCSI_SPI_ATTRS is not set
  20.204 -# CONFIG_SCSI_FC_ATTRS is not set
  20.205 -
  20.206 -#
  20.207 -# SCSI low-level drivers
  20.208 -#
  20.209 -CONFIG_BLK_DEV_3W_XXXX_RAID=y
  20.210 -# CONFIG_SCSI_7000FASST is not set
  20.211 -# CONFIG_SCSI_ACARD is not set
  20.212 -# CONFIG_SCSI_AHA152X is not set
  20.213 -# CONFIG_SCSI_AHA1542 is not set
  20.214 -CONFIG_SCSI_AACRAID=y
  20.215 -CONFIG_SCSI_AIC7XXX=y
  20.216 -CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
  20.217 -CONFIG_AIC7XXX_RESET_DELAY_MS=15000
  20.218 -# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set
  20.219 -CONFIG_AIC7XXX_DEBUG_ENABLE=y
  20.220 -CONFIG_AIC7XXX_DEBUG_MASK=0
  20.221 -CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
  20.222 -# CONFIG_SCSI_AIC7XXX_OLD is not set
  20.223 -CONFIG_SCSI_AIC79XX=y
  20.224 -CONFIG_AIC79XX_CMDS_PER_DEVICE=32
  20.225 -CONFIG_AIC79XX_RESET_DELAY_MS=15000
  20.226 -# CONFIG_AIC79XX_BUILD_FIRMWARE is not set
  20.227 -# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
  20.228 -CONFIG_AIC79XX_DEBUG_ENABLE=y
  20.229 -CONFIG_AIC79XX_DEBUG_MASK=0
  20.230 -CONFIG_AIC79XX_REG_PRETTY_PRINT=y
  20.231 -# CONFIG_SCSI_DPT_I2O is not set
  20.232 -# CONFIG_SCSI_ADVANSYS is not set
  20.233 -# CONFIG_SCSI_IN2000 is not set
  20.234 -CONFIG_SCSI_MEGARAID=y
  20.235 -CONFIG_SCSI_SATA=y
  20.236 -# CONFIG_SCSI_SATA_SVW is not set
  20.237 -CONFIG_SCSI_ATA_PIIX=y
  20.238 -CONFIG_SCSI_SATA_PROMISE=y
  20.239 -CONFIG_SCSI_SATA_SX4=y
  20.240 -CONFIG_SCSI_SATA_SIL=y
  20.241 -# CONFIG_SCSI_SATA_SIS is not set
  20.242 -# CONFIG_SCSI_SATA_VIA is not set
  20.243 -# CONFIG_SCSI_SATA_VITESSE is not set
  20.244 -CONFIG_SCSI_BUSLOGIC=y
  20.245 -# CONFIG_SCSI_OMIT_FLASHPOINT is not set
  20.246 -# CONFIG_SCSI_CPQFCTS is not set
  20.247 -# CONFIG_SCSI_DMX3191D is not set
  20.248 -# CONFIG_SCSI_DTC3280 is not set
  20.249 -# CONFIG_SCSI_EATA is not set
  20.250 -# CONFIG_SCSI_EATA_PIO is not set
  20.251 -# CONFIG_SCSI_FUTURE_DOMAIN is not set
  20.252 -# CONFIG_SCSI_GDTH is not set
  20.253 -# CONFIG_SCSI_GENERIC_NCR5380 is not set
  20.254 -# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
  20.255 -# CONFIG_SCSI_IPS is not set
  20.256 -# CONFIG_SCSI_INITIO is not set
  20.257 -# CONFIG_SCSI_INIA100 is not set
  20.258 -# CONFIG_SCSI_NCR53C406A is not set
  20.259 -# CONFIG_SCSI_SYM53C8XX_2 is not set
  20.260 -# CONFIG_SCSI_IPR is not set
  20.261 -# CONFIG_SCSI_PAS16 is not set
  20.262 -# CONFIG_SCSI_PCI2000 is not set
  20.263 -# CONFIG_SCSI_PCI2220I is not set
  20.264 -# CONFIG_SCSI_PSI240I is not set
  20.265 -# CONFIG_SCSI_QLOGIC_FAS is not set
  20.266 -# CONFIG_SCSI_QLOGIC_ISP is not set
  20.267 -# CONFIG_SCSI_QLOGIC_FC is not set
  20.268 -# CONFIG_SCSI_QLOGIC_1280 is not set
  20.269 -CONFIG_SCSI_QLA2XXX=y
  20.270 -# CONFIG_SCSI_QLA21XX is not set
  20.271 -# CONFIG_SCSI_QLA22XX is not set
  20.272 -# CONFIG_SCSI_QLA2300 is not set
  20.273 -# CONFIG_SCSI_QLA2322 is not set
  20.274 -# CONFIG_SCSI_QLA6312 is not set
  20.275 -# CONFIG_SCSI_QLA6322 is not set
  20.276 -# CONFIG_SCSI_SEAGATE is not set
  20.277 -# CONFIG_SCSI_SYM53C416 is not set
  20.278 -# CONFIG_SCSI_DC395x is not set
  20.279 -# CONFIG_SCSI_DC390T is not set
  20.280 -# CONFIG_SCSI_T128 is not set
  20.281 -# CONFIG_SCSI_U14_34F is not set
  20.282 -# CONFIG_SCSI_ULTRASTOR is not set
  20.283 -# CONFIG_SCSI_NSP32 is not set
  20.284 -# CONFIG_SCSI_DEBUG is not set
  20.285 -
  20.286 -#
  20.287 -# PCMCIA SCSI adapter support
  20.288 -#
  20.289 -# CONFIG_PCMCIA_AHA152X is not set
  20.290 -# CONFIG_PCMCIA_FDOMAIN is not set
  20.291 -# CONFIG_PCMCIA_NINJA_SCSI is not set
  20.292 -# CONFIG_PCMCIA_QLOGIC is not set
  20.293 -# CONFIG_PCMCIA_SYM53C500 is not set
  20.294 -
  20.295 -#
  20.296 -# Block devices
  20.297 -#
  20.298 -# CONFIG_BLK_DEV_FD is not set
  20.299 -# CONFIG_BLK_DEV_XD is not set
  20.300 -# CONFIG_BLK_CPQ_DA is not set
  20.301 -# CONFIG_BLK_CPQ_CISS_DA is not set
  20.302 -# CONFIG_BLK_DEV_DAC960 is not set
  20.303 -# CONFIG_BLK_DEV_UMEM is not set
  20.304 -CONFIG_BLK_DEV_LOOP=y
  20.305 -# CONFIG_BLK_DEV_CRYPTOLOOP is not set
  20.306 -CONFIG_BLK_DEV_NBD=y
  20.307 -# CONFIG_BLK_DEV_CARMEL is not set
  20.308 -CONFIG_BLK_DEV_RAM=y
  20.309 -CONFIG_BLK_DEV_RAM_SIZE=4096
  20.310 -CONFIG_BLK_DEV_INITRD=y
  20.311 -# CONFIG_LBD is not set
  20.312 -
  20.313 -#
  20.314 -# Multi-device support (RAID and LVM)
  20.315 -#
  20.316 -CONFIG_MD=y
  20.317 -CONFIG_BLK_DEV_MD=m
  20.318 -# CONFIG_MD_LINEAR is not set
  20.319 -CONFIG_MD_RAID0=m
  20.320 -CONFIG_MD_RAID1=m
  20.321 -# CONFIG_MD_RAID5 is not set
  20.322 -# CONFIG_MD_RAID6 is not set
  20.323 -# CONFIG_MD_MULTIPATH is not set
  20.324 -CONFIG_BLK_DEV_DM=y
  20.325 -# CONFIG_DM_CRYPT is not set
  20.326 -
  20.327 -#
  20.328 -# ATA/ATAPI/MFM/RLL support
  20.329 -#
  20.330 -CONFIG_IDE=y
  20.331 -CONFIG_BLK_DEV_IDE=y
  20.332 -
  20.333 -#
  20.334 -# Please see Documentation/ide.txt for help/info on IDE drives
  20.335 -#
  20.336 -# CONFIG_BLK_DEV_HD_IDE is not set
  20.337 -CONFIG_BLK_DEV_IDEDISK=y
  20.338 -# CONFIG_IDEDISK_MULTI_MODE is not set
  20.339 -# CONFIG_BLK_DEV_IDECS is not set
  20.340 -CONFIG_BLK_DEV_IDECD=y
  20.341 -# CONFIG_BLK_DEV_IDETAPE is not set
  20.342 -# CONFIG_BLK_DEV_IDEFLOPPY is not set
  20.343 -# CONFIG_BLK_DEV_IDESCSI is not set
  20.344 -# CONFIG_IDE_TASK_IOCTL is not set
  20.345 -# CONFIG_IDE_TASKFILE_IO is not set
  20.346 -
  20.347 -#
  20.348 -# IDE chipset support/bugfixes
  20.349 -#
  20.350 -CONFIG_IDE_GENERIC=y
  20.351 -# CONFIG_BLK_DEV_CMD640 is not set
  20.352 -CONFIG_BLK_DEV_IDEPCI=y
  20.353 -# CONFIG_IDEPCI_SHARE_IRQ is not set
  20.354 -# CONFIG_BLK_DEV_OFFBOARD is not set
  20.355 -CONFIG_BLK_DEV_GENERIC=y
  20.356 -# CONFIG_BLK_DEV_OPTI621 is not set
  20.357 -# CONFIG_BLK_DEV_RZ1000 is not set
  20.358 -CONFIG_BLK_DEV_IDEDMA_PCI=y
  20.359 -# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
  20.360 -CONFIG_IDEDMA_PCI_AUTO=y
  20.361 -# CONFIG_IDEDMA_ONLYDISK is not set
  20.362 -CONFIG_BLK_DEV_ADMA=y
  20.363 -# CONFIG_BLK_DEV_AEC62XX is not set
  20.364 -# CONFIG_BLK_DEV_ALI15X3 is not set
  20.365 -# CONFIG_BLK_DEV_AMD74XX is not set
  20.366 -# CONFIG_BLK_DEV_ATIIXP is not set
  20.367 -# CONFIG_BLK_DEV_CMD64X is not set
  20.368 -# CONFIG_BLK_DEV_TRIFLEX is not set
  20.369 -# CONFIG_BLK_DEV_CY82C693 is not set
  20.370 -# CONFIG_BLK_DEV_CS5520 is not set
  20.371 -# CONFIG_BLK_DEV_CS5530 is not set
  20.372 -# CONFIG_BLK_DEV_HPT34X is not set
  20.373 -# CONFIG_BLK_DEV_HPT366 is not set
  20.374 -# CONFIG_BLK_DEV_SC1200 is not set
  20.375 -CONFIG_BLK_DEV_PIIX=y
  20.376 -# CONFIG_BLK_DEV_NS87415 is not set
  20.377 -# CONFIG_BLK_DEV_PDC202XX_OLD is not set
  20.378 -# CONFIG_BLK_DEV_PDC202XX_NEW is not set
  20.379 -CONFIG_BLK_DEV_SVWKS=y
  20.380 -# CONFIG_BLK_DEV_SIIMAGE is not set
  20.381 -# CONFIG_BLK_DEV_SIS5513 is not set
  20.382 -# CONFIG_BLK_DEV_SLC90E66 is not set
  20.383 -# CONFIG_BLK_DEV_TRM290 is not set
  20.384 -# CONFIG_BLK_DEV_VIA82CXXX is not set
  20.385 -# CONFIG_IDE_ARM is not set
  20.386 -# CONFIG_IDE_CHIPSETS is not set
  20.387 -CONFIG_BLK_DEV_IDEDMA=y
  20.388 -# CONFIG_IDEDMA_IVB is not set
  20.389 -CONFIG_IDEDMA_AUTO=y
  20.390 -# CONFIG_BLK_DEV_HD is not set
  20.391 -
  20.392 -#
  20.393 -# Old CD-ROM drivers (not SCSI, not IDE)
  20.394 -#
  20.395 -# CONFIG_CD_NO_IDESCSI is not set
  20.396 -
  20.397 -#
  20.398 -# Networking support
  20.399 -#
  20.400 -CONFIG_NET=y
  20.401 -
  20.402 -#
  20.403 -# Networking options
  20.404 -#
  20.405 -CONFIG_PACKET=y
  20.406 -# CONFIG_PACKET_MMAP is not set
  20.407 -# CONFIG_NETLINK_DEV is not set
  20.408 -CONFIG_UNIX=y
  20.409 -# CONFIG_NET_KEY is not set
  20.410 -CONFIG_INET=y
  20.411 -# CONFIG_IP_MULTICAST is not set
  20.412 -# CONFIG_IP_ADVANCED_ROUTER is not set
  20.413 -CONFIG_IP_PNP=y
  20.414 -CONFIG_IP_PNP_DHCP=y
  20.415 -# CONFIG_IP_PNP_BOOTP is not set
  20.416 -# CONFIG_IP_PNP_RARP is not set
  20.417 -# CONFIG_NET_IPIP is not set
  20.418 -# CONFIG_NET_IPGRE is not set
  20.419 -# CONFIG_ARPD is not set
  20.420 -# CONFIG_SYN_COOKIES is not set
  20.421 -# CONFIG_INET_AH is not set
  20.422 -# CONFIG_INET_ESP is not set
  20.423 -# CONFIG_INET_IPCOMP is not set
  20.424 -
  20.425 -#
  20.426 -# IP: Virtual Server Configuration
  20.427 -#
  20.428 -# CONFIG_IP_VS is not set
  20.429 -# CONFIG_IPV6 is not set
  20.430 -CONFIG_NETFILTER=y
  20.431 -# CONFIG_NETFILTER_DEBUG is not set
  20.432 -CONFIG_BRIDGE_NETFILTER=y
  20.433 -
  20.434 -#
  20.435 -# IP: Netfilter Configuration
  20.436 -#
  20.437 -CONFIG_IP_NF_CONNTRACK=m
  20.438 -CONFIG_IP_NF_FTP=m
  20.439 -# CONFIG_IP_NF_IRC is not set
  20.440 -# CONFIG_IP_NF_TFTP is not set
  20.441 -# CONFIG_IP_NF_AMANDA is not set
  20.442 -# CONFIG_IP_NF_QUEUE is not set
  20.443 -CONFIG_IP_NF_IPTABLES=m
  20.444 -# CONFIG_IP_NF_MATCH_LIMIT is not set
  20.445 -# CONFIG_IP_NF_MATCH_IPRANGE is not set
  20.446 -# CONFIG_IP_NF_MATCH_MAC is not set
  20.447 -# CONFIG_IP_NF_MATCH_PKTTYPE is not set
  20.448 -# CONFIG_IP_NF_MATCH_MARK is not set
  20.449 -# CONFIG_IP_NF_MATCH_MULTIPORT is not set
  20.450 -# CONFIG_IP_NF_MATCH_TOS is not set
  20.451 -# CONFIG_IP_NF_MATCH_RECENT is not set
  20.452 -# CONFIG_IP_NF_MATCH_ECN is not set
  20.453 -# CONFIG_IP_NF_MATCH_DSCP is not set
  20.454 -# CONFIG_IP_NF_MATCH_AH_ESP is not set
  20.455 -# CONFIG_IP_NF_MATCH_LENGTH is not set
  20.456 -# CONFIG_IP_NF_MATCH_TTL is not set
  20.457 -# CONFIG_IP_NF_MATCH_TCPMSS is not set
  20.458 -# CONFIG_IP_NF_MATCH_HELPER is not set
  20.459 -# CONFIG_IP_NF_MATCH_STATE is not set
  20.460 -# CONFIG_IP_NF_MATCH_CONNTRACK is not set
  20.461 -# CONFIG_IP_NF_MATCH_OWNER is not set
  20.462 -# CONFIG_IP_NF_MATCH_PHYSDEV is not set
  20.463 -# CONFIG_IP_NF_FILTER is not set
  20.464 -# CONFIG_IP_NF_NAT is not set
  20.465 -# CONFIG_IP_NF_MANGLE is not set
  20.466 -# CONFIG_IP_NF_TARGET_LOG is not set
  20.467 -# CONFIG_IP_NF_TARGET_ULOG is not set
  20.468 -# CONFIG_IP_NF_TARGET_TCPMSS is not set
  20.469 -# CONFIG_IP_NF_ARPTABLES is not set
  20.470 -# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
  20.471 -# CONFIG_IP_NF_COMPAT_IPFWADM is not set
  20.472 -# CONFIG_IP_NF_RAW is not set
  20.473 -
  20.474 -#
  20.475 -# Bridge: Netfilter Configuration
  20.476 -#
  20.477 -# CONFIG_BRIDGE_NF_EBTABLES is not set
  20.478 -
  20.479 -#
  20.480 -# SCTP Configuration (EXPERIMENTAL)
  20.481 -#
  20.482 -# CONFIG_IP_SCTP is not set
  20.483 -# CONFIG_ATM is not set
  20.484 -CONFIG_BRIDGE=y
  20.485 -# CONFIG_VLAN_8021Q is not set
  20.486 -# CONFIG_DECNET is not set
  20.487 -# CONFIG_LLC2 is not set
  20.488 -# CONFIG_IPX is not set
  20.489 -# CONFIG_ATALK is not set
  20.490 -# CONFIG_X25 is not set
  20.491 -# CONFIG_LAPB is not set
  20.492 -# CONFIG_NET_DIVERT is not set
  20.493 -# CONFIG_ECONET is not set
  20.494 -# CONFIG_WAN_ROUTER is not set
  20.495 -# CONFIG_NET_FASTROUTE is not set
  20.496 -# CONFIG_NET_HW_FLOWCONTROL is not set
  20.497 -
  20.498 -#
  20.499 -# QoS and/or fair queueing
  20.500 -#
  20.501 -# CONFIG_NET_SCHED is not set
  20.502 -
  20.503 -#
  20.504 -# Network testing
  20.505 -#
  20.506 -# CONFIG_NET_PKTGEN is not set
  20.507 -# CONFIG_NETPOLL is not set
  20.508 -# CONFIG_NET_POLL_CONTROLLER is not set
  20.509 -# CONFIG_HAMRADIO is not set
  20.510 -# CONFIG_IRDA is not set
  20.511 -# CONFIG_BT is not set
  20.512 -CONFIG_NETDEVICES=y
  20.513 -# CONFIG_DUMMY is not set
  20.514 -# CONFIG_BONDING is not set
  20.515 -# CONFIG_EQUALIZER is not set
  20.516 -# CONFIG_TUN is not set
  20.517 -
  20.518 -#
  20.519 -# ARCnet devices
  20.520 -#
  20.521 -# CONFIG_ARCNET is not set
  20.522 -
  20.523 -#
  20.524 -# Ethernet (10 or 100Mbit)
  20.525 -#
  20.526 -CONFIG_NET_ETHERNET=y
  20.527 -CONFIG_MII=y
  20.528 -# CONFIG_HAPPYMEAL is not set
  20.529 -# CONFIG_SUNGEM is not set
  20.530 -CONFIG_NET_VENDOR_3COM=y
  20.531 -# CONFIG_EL1 is not set
  20.532 -# CONFIG_EL2 is not set
  20.533 -# CONFIG_ELPLUS is not set
  20.534 -# CONFIG_EL16 is not set
  20.535 -# CONFIG_EL3 is not set
  20.536 -# CONFIG_3C515 is not set
  20.537 -CONFIG_VORTEX=y
  20.538 -# CONFIG_TYPHOON is not set
  20.539 -# CONFIG_LANCE is not set
  20.540 -# CONFIG_NET_VENDOR_SMC is not set
  20.541 -# CONFIG_NET_VENDOR_RACAL is not set
  20.542 -
  20.543 -#
  20.544 -# Tulip family network device support
  20.545 -#
  20.546 -CONFIG_NET_TULIP=y
  20.547 -# CONFIG_DE2104X is not set
  20.548 -CONFIG_TULIP=y
  20.549 -# CONFIG_TULIP_MWI is not set
  20.550 -# CONFIG_TULIP_MMIO is not set
  20.551 -# CONFIG_TULIP_NAPI is not set
  20.552 -# CONFIG_DE4X5 is not set
  20.553 -# CONFIG_WINBOND_840 is not set
  20.554 -# CONFIG_DM9102 is not set
  20.555 -# CONFIG_PCMCIA_XIRCOM is not set
  20.556 -# CONFIG_PCMCIA_XIRTULIP is not set
  20.557 -# CONFIG_AT1700 is not set
  20.558 -# CONFIG_DEPCA is not set
  20.559 -# CONFIG_HP100 is not set
  20.560 -# CONFIG_NET_ISA is not set
  20.561 -CONFIG_NET_PCI=y
  20.562 -CONFIG_PCNET32=y
  20.563 -# CONFIG_AMD8111_ETH is not set
  20.564 -# CONFIG_ADAPTEC_STARFIRE is not set
  20.565 -# CONFIG_AC3200 is not set
  20.566 -# CONFIG_APRICOT is not set
  20.567 -# CONFIG_B44 is not set
  20.568 -# CONFIG_FORCEDETH is not set
  20.569 -# CONFIG_CS89x0 is not set
  20.570 -# CONFIG_DGRS is not set
  20.571 -# CONFIG_EEPRO100 is not set
  20.572 -CONFIG_E100=y
  20.573 -# CONFIG_E100_NAPI is not set
  20.574 -# CONFIG_FEALNX is not set
  20.575 -# CONFIG_NATSEMI is not set
  20.576 -# CONFIG_NE2K_PCI is not set
  20.577 -# CONFIG_8139CP is not set
  20.578 -CONFIG_8139TOO=y
  20.579 -CONFIG_8139TOO_PIO=y
  20.580 -# CONFIG_8139TOO_TUNE_TWISTER is not set
  20.581 -# CONFIG_8139TOO_8129 is not set
  20.582 -# CONFIG_8139_OLD_RX_RESET is not set
  20.583 -# CONFIG_SIS900 is not set
  20.584 -# CONFIG_EPIC100 is not set
  20.585 -# CONFIG_SUNDANCE is not set
  20.586 -# CONFIG_TLAN is not set
  20.587 -CONFIG_VIA_RHINE=y
  20.588 -# CONFIG_VIA_RHINE_MMIO is not set
  20.589 -# CONFIG_NET_POCKET is not set
  20.590 -
  20.591 -#
  20.592 -# Ethernet (1000 Mbit)
  20.593 -#
  20.594 -CONFIG_ACENIC=y
  20.595 -# CONFIG_ACENIC_OMIT_TIGON_I is not set
  20.596 -# CONFIG_DL2K is not set
  20.597 -CONFIG_E1000=y
  20.598 -# CONFIG_E1000_NAPI is not set
  20.599 -# CONFIG_NS83820 is not set
  20.600 -# CONFIG_HAMACHI is not set
  20.601 -# CONFIG_YELLOWFIN is not set
  20.602 -# CONFIG_R8169 is not set
  20.603 -# CONFIG_SK98LIN is not set
  20.604 -CONFIG_TIGON3=y
  20.605 -
  20.606 -#
  20.607 -# Ethernet (10000 Mbit)
  20.608 -#
  20.609 -# CONFIG_IXGB is not set
  20.610 -# CONFIG_S2IO is not set
  20.611 -
  20.612 -#
  20.613 -# Token Ring devices
  20.614 -#
  20.615 -# CONFIG_TR is not set
  20.616 -
  20.617 -#
  20.618 -# Wireless LAN (non-hamradio)
  20.619 -#
  20.620 -# CONFIG_NET_RADIO is not set
  20.621 -
  20.622 -#
  20.623 -# PCMCIA network device support
  20.624 -#
  20.625 -# CONFIG_NET_PCMCIA is not set
  20.626 -
  20.627 -#
  20.628 -# Wan interfaces
  20.629 -#
  20.630 -# CONFIG_WAN is not set
  20.631 -# CONFIG_FDDI is not set
  20.632 -# CONFIG_HIPPI is not set
  20.633 -# CONFIG_PPP is not set
  20.634 -# CONFIG_SLIP is not set
  20.635 -# CONFIG_NET_FC is not set
  20.636 -# CONFIG_SHAPER is not set
  20.637 -# CONFIG_NETCONSOLE is not set
  20.638 -
  20.639 -#
  20.640 -# Input device support
  20.641 -#
  20.642 -CONFIG_INPUT=y
  20.643 -
  20.644 -#
  20.645 -# Userland interfaces
  20.646 -#
  20.647 -CONFIG_INPUT_MOUSEDEV=y
  20.648 -CONFIG_INPUT_MOUSEDEV_PSAUX=y
  20.649 -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
  20.650 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
  20.651 -# CONFIG_INPUT_JOYDEV is not set
  20.652 -# CONFIG_INPUT_TSDEV is not set
  20.653 -# CONFIG_INPUT_EVDEV is not set
  20.654 -# CONFIG_INPUT_EVBUG is not set
  20.655 -
  20.656 -#
  20.657 -# Input I/O drivers
  20.658 -#
  20.659 -# CONFIG_GAMEPORT is not set
  20.660 -CONFIG_SOUND_GAMEPORT=y
  20.661 -CONFIG_SERIO=y
  20.662 -CONFIG_SERIO_I8042=y
  20.663 -CONFIG_SERIO_SERPORT=y
  20.664 -# CONFIG_SERIO_CT82C710 is not set
  20.665 -# CONFIG_SERIO_PCIPS2 is not set
  20.666 -
  20.667 -#
  20.668 -# Input Device Drivers
  20.669 -#
  20.670 -CONFIG_INPUT_KEYBOARD=y
  20.671 -CONFIG_KEYBOARD_ATKBD=y
  20.672 -# CONFIG_KEYBOARD_SUNKBD is not set
  20.673 -# CONFIG_KEYBOARD_LKKBD is not set
  20.674 -# CONFIG_KEYBOARD_XTKBD is not set
  20.675 -# CONFIG_KEYBOARD_NEWTON is not set
  20.676 -CONFIG_INPUT_MOUSE=y
  20.677 -CONFIG_MOUSE_PS2=y
  20.678 -# CONFIG_MOUSE_SERIAL is not set
  20.679 -# CONFIG_MOUSE_INPORT is not set
  20.680 -# CONFIG_MOUSE_LOGIBM is not set
  20.681 -# CONFIG_MOUSE_PC110PAD is not set
  20.682 -# CONFIG_MOUSE_VSXXXAA is not set
  20.683 -# CONFIG_INPUT_JOYSTICK is not set
  20.684 -# CONFIG_INPUT_TOUCHSCREEN is not set
  20.685 -# CONFIG_INPUT_MISC is not set
  20.686 -
  20.687 -#
  20.688 -# Character devices
  20.689 -#
  20.690 -CONFIG_VT=y
  20.691 -CONFIG_VT_CONSOLE=y
  20.692 -CONFIG_HW_CONSOLE=y
  20.693 -# CONFIG_SERIAL_NONSTANDARD is not set
  20.694 -
  20.695 -#
  20.696 -# Serial drivers
  20.697 -#
  20.698 -# CONFIG_SERIAL_8250 is not set
  20.699 -
  20.700 -#
  20.701 -# Non-8250 serial port support
  20.702 -#
  20.703 -CONFIG_UNIX98_PTYS=y
  20.704 -CONFIG_LEGACY_PTYS=y
  20.705 -CONFIG_LEGACY_PTY_COUNT=256
  20.706 -# CONFIG_QIC02_TAPE is not set
  20.707 -
  20.708 -#
  20.709 -# IPMI
  20.710 -#
  20.711 -# CONFIG_IPMI_HANDLER is not set
  20.712 -
  20.713 -#
  20.714 -# Watchdog Cards
  20.715 -#
  20.716 -# CONFIG_WATCHDOG is not set
  20.717 -# CONFIG_HW_RANDOM is not set
  20.718 -# CONFIG_NVRAM is not set
  20.719 -# CONFIG_RTC is not set
  20.720 -# CONFIG_GEN_RTC is not set
  20.721 -# CONFIG_DTLK is not set
  20.722 -# CONFIG_R3964 is not set
  20.723 -# CONFIG_APPLICOM is not set
  20.724 -# CONFIG_SONYPI is not set
  20.725 -
  20.726 -#
  20.727 -# Ftape, the floppy tape device driver
  20.728 -#
  20.729 -# CONFIG_FTAPE is not set
  20.730 -# CONFIG_AGP is not set
  20.731 -# CONFIG_DRM is not set
  20.732 -
  20.733 -#
  20.734 -# PCMCIA character devices
  20.735 -#
  20.736 -# CONFIG_SYNCLINK_CS is not set
  20.737 -# CONFIG_MWAVE is not set
  20.738 -# CONFIG_RAW_DRIVER is not set
  20.739 -# CONFIG_HANGCHECK_TIMER is not set
  20.740 -
  20.741 -#
  20.742 -# I2C support
  20.743 -#
  20.744 -# CONFIG_I2C is not set
  20.745 -
  20.746 -#
  20.747 -# Graphics support
  20.748 -#
  20.749 -# CONFIG_FB is not set
  20.750 -# CONFIG_VIDEO_SELECT is not set
  20.751 -
  20.752 -#
  20.753 -# Console display driver support
  20.754 -#
  20.755 -CONFIG_VGA_CONSOLE=y
  20.756 -# CONFIG_MDA_CONSOLE is not set
  20.757 -CONFIG_DUMMY_CONSOLE=y
  20.758 -
  20.759 -#
  20.760 -# File systems
  20.761 -#
  20.762 -CONFIG_EXT2_FS=y
  20.763 -# CONFIG_EXT2_FS_XATTR is not set
  20.764 -CONFIG_EXT3_FS=y
  20.765 -CONFIG_EXT3_FS_XATTR=y
  20.766 -# CONFIG_EXT3_FS_POSIX_ACL is not set
  20.767 -# CONFIG_EXT3_FS_SECURITY is not set
  20.768 -CONFIG_JBD=y
  20.769 -# CONFIG_JBD_DEBUG is not set
  20.770 -CONFIG_FS_MBCACHE=y
  20.771 -CONFIG_REISERFS_FS=y
  20.772 -# CONFIG_REISERFS_CHECK is not set
  20.773 -# CONFIG_REISERFS_PROC_INFO is not set
  20.774 -# CONFIG_REISERFS_FS_XATTR is not set
  20.775 -# CONFIG_JFS_FS is not set
  20.776 -# CONFIG_XFS_FS is not set
  20.777 -# CONFIG_MINIX_FS is not set
  20.778 -# CONFIG_ROMFS_FS is not set
  20.779 -# CONFIG_QUOTA is not set
  20.780 -# CONFIG_AUTOFS_FS is not set
  20.781 -# CONFIG_AUTOFS4_FS is not set
  20.782 -
  20.783 -#
  20.784 -# CD-ROM/DVD Filesystems
  20.785 -#
  20.786 -CONFIG_ISO9660_FS=y
  20.787 -CONFIG_JOLIET=y
  20.788 -CONFIG_ZISOFS=y
  20.789 -CONFIG_ZISOFS_FS=y
  20.790 -# CONFIG_UDF_FS is not set
  20.791 -
  20.792 -#
  20.793 -# DOS/FAT/NT Filesystems
  20.794 -#
  20.795 -CONFIG_FAT_FS=m
  20.796 -CONFIG_MSDOS_FS=m
  20.797 -CONFIG_VFAT_FS=m
  20.798 -# CONFIG_NTFS_FS is not set
  20.799 -
  20.800 -#
  20.801 -# Pseudo filesystems
  20.802 -#
  20.803 -CONFIG_PROC_FS=y
  20.804 -CONFIG_PROC_KCORE=y
  20.805 -CONFIG_SYSFS=y
  20.806 -# CONFIG_DEVFS_FS is not set
  20.807 -# CONFIG_DEVPTS_FS_XATTR is not set
  20.808 -CONFIG_TMPFS=y
  20.809 -# CONFIG_HUGETLBFS is not set
  20.810 -# CONFIG_HUGETLB_PAGE is not set
  20.811 -CONFIG_RAMFS=y
  20.812 -
  20.813 -#
  20.814 -# Miscellaneous filesystems
  20.815 -#
  20.816 -# CONFIG_ADFS_FS is not set
  20.817 -# CONFIG_AFFS_FS is not set
  20.818 -# CONFIG_HFS_FS is not set
  20.819 -# CONFIG_HFSPLUS_FS is not set
  20.820 -# CONFIG_BEFS_FS is not set
  20.821 -# CONFIG_BFS_FS is not set
  20.822 -# CONFIG_EFS_FS is not set
  20.823 -# CONFIG_CRAMFS is not set
  20.824 -# CONFIG_VXFS_FS is not set
  20.825 -# CONFIG_HPFS_FS is not set
  20.826 -# CONFIG_QNX4FS_FS is not set
  20.827 -# CONFIG_SYSV_FS is not set
  20.828 -# CONFIG_UFS_FS is not set
  20.829 -
  20.830 -#
  20.831 -# Network File Systems
  20.832 -#
  20.833 -CONFIG_NFS_FS=y
  20.834 -CONFIG_NFS_V3=y
  20.835 -# CONFIG_NFS_V4 is not set
  20.836 -# CONFIG_NFS_DIRECTIO is not set
  20.837 -CONFIG_NFSD=m
  20.838 -CONFIG_NFSD_V3=y
  20.839 -# CONFIG_NFSD_V4 is not set
  20.840 -CONFIG_NFSD_TCP=y
  20.841 -CONFIG_ROOT_NFS=y
  20.842 -CONFIG_LOCKD=y
  20.843 -CONFIG_LOCKD_V4=y
  20.844 -CONFIG_EXPORTFS=m
  20.845 -CONFIG_SUNRPC=y
  20.846 -# CONFIG_RPCSEC_GSS_KRB5 is not set
  20.847 -# CONFIG_SMB_FS is not set
  20.848 -# CONFIG_CIFS is not set
  20.849 -# CONFIG_NCP_FS is not set
  20.850 -# CONFIG_CODA_FS is not set
  20.851 -# CONFIG_AFS_FS is not set
  20.852 -
  20.853 -#
  20.854 -# Partition Types
  20.855 -#
  20.856 -# CONFIG_PARTITION_ADVANCED is not set
  20.857 -CONFIG_MSDOS_PARTITION=y
  20.858 -
  20.859 -#
  20.860 -# Native Language Support
  20.861 -#
  20.862 -CONFIG_NLS=y
  20.863 -CONFIG_NLS_DEFAULT="iso8859-1"
  20.864 -CONFIG_NLS_CODEPAGE_437=y
  20.865 -# CONFIG_NLS_CODEPAGE_737 is not set
  20.866 -# CONFIG_NLS_CODEPAGE_775 is not set
  20.867 -# CONFIG_NLS_CODEPAGE_850 is not set
  20.868 -# CONFIG_NLS_CODEPAGE_852 is not set
  20.869 -# CONFIG_NLS_CODEPAGE_855 is not set
  20.870 -# CONFIG_NLS_CODEPAGE_857 is not set
  20.871 -# CONFIG_NLS_CODEPAGE_860 is not set
  20.872 -# CONFIG_NLS_CODEPAGE_861 is not set
  20.873 -# CONFIG_NLS_CODEPAGE_862 is not set
  20.874 -# CONFIG_NLS_CODEPAGE_863 is not set
  20.875 -# CONFIG_NLS_CODEPAGE_864 is not set
  20.876 -# CONFIG_NLS_CODEPAGE_865 is not set
  20.877 -# CONFIG_NLS_CODEPAGE_866 is not set
  20.878 -# CONFIG_NLS_CODEPAGE_869 is not set
  20.879 -# CONFIG_NLS_CODEPAGE_936 is not set
  20.880 -# CONFIG_NLS_CODEPAGE_950 is not set
  20.881 -# CONFIG_NLS_CODEPAGE_932 is not set
  20.882 -# CONFIG_NLS_CODEPAGE_949 is not set
  20.883 -# CONFIG_NLS_CODEPAGE_874 is not set
  20.884 -# CONFIG_NLS_ISO8859_8 is not set
  20.885 -# CONFIG_NLS_CODEPAGE_1250 is not set
  20.886 -# CONFIG_NLS_CODEPAGE_1251 is not set
  20.887 -CONFIG_NLS_ISO8859_1=y
  20.888 -# CONFIG_NLS_ISO8859_2 is not set
  20.889 -# CONFIG_NLS_ISO8859_3 is not set
  20.890 -# CONFIG_NLS_ISO8859_4 is not set
  20.891 -# CONFIG_NLS_ISO8859_5 is not set
  20.892 -# CONFIG_NLS_ISO8859_6 is not set
  20.893 -# CONFIG_NLS_ISO8859_7 is not set
  20.894 -# CONFIG_NLS_ISO8859_9 is not set
  20.895 -# CONFIG_NLS_ISO8859_13 is not set
  20.896 -# CONFIG_NLS_ISO8859_14 is not set
  20.897 -# CONFIG_NLS_ISO8859_15 is not set
  20.898 -# CONFIG_NLS_KOI8_R is not set
  20.899 -# CONFIG_NLS_KOI8_U is not set
  20.900 -# CONFIG_NLS_UTF8 is not set
  20.901 -
  20.902 -#
  20.903 -# Security options
  20.904 -#
  20.905 -# CONFIG_SECURITY is not set
  20.906 -
  20.907 -#
  20.908 -# Cryptographic options
  20.909 -#
  20.910 -CONFIG_CRYPTO=y
  20.911 -CONFIG_CRYPTO_HMAC=y
  20.912 -# CONFIG_CRYPTO_NULL is not set
  20.913 -# CONFIG_CRYPTO_MD4 is not set
  20.914 -CONFIG_CRYPTO_MD5=m
  20.915 -CONFIG_CRYPTO_SHA1=m
  20.916 -# CONFIG_CRYPTO_SHA256 is not set
  20.917 -# CONFIG_CRYPTO_SHA512 is not set
  20.918 -CONFIG_CRYPTO_DES=m
  20.919 -# CONFIG_CRYPTO_BLOWFISH is not set
  20.920 -# CONFIG_CRYPTO_TWOFISH is not set
  20.921 -# CONFIG_CRYPTO_SERPENT is not set
  20.922 -CONFIG_CRYPTO_AES=m
  20.923 -# CONFIG_CRYPTO_CAST5 is not set
  20.924 -# CONFIG_CRYPTO_CAST6 is not set
  20.925 -# CONFIG_CRYPTO_ARC4 is not set
  20.926 -# CONFIG_CRYPTO_DEFLATE is not set
  20.927 -# CONFIG_CRYPTO_MICHAEL_MIC is not set
  20.928 -CONFIG_CRYPTO_CRC32C=m
  20.929 -# CONFIG_CRYPTO_TEST is not set
  20.930 -
  20.931 -#
  20.932 -# Library routines
  20.933 -#
  20.934 -CONFIG_CRC32=y
  20.935 -CONFIG_LIBCRC32C=y
  20.936 -CONFIG_ZLIB_INFLATE=y
    21.1 --- a/linux-2.6.7-xen-sparse/arch/xen/configs/xenU_defconfig	Fri Aug 27 08:43:54 2004 +0000
    21.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.3 @@ -1,462 +0,0 @@
    21.4 -#
    21.5 -# Automatically generated make config: don't edit
    21.6 -#
    21.7 -CONFIG_XEN=y
    21.8 -CONFIG_ARCH_XEN=y
    21.9 -CONFIG_NO_IDLE_HZ=y
   21.10 -
   21.11 -#
   21.12 -# XEN
   21.13 -#
   21.14 -# CONFIG_XEN_PRIVILEGED_GUEST is not set
   21.15 -# CONFIG_XEN_PHYSDEV_ACCESS is not set
   21.16 -# CONFIG_XEN_WRITABLE_PAGETABLES is not set
   21.17 -# CONFIG_FOREIGN_PAGES is not set
   21.18 -# CONFIG_PAGESIZED_SKBS is not set
   21.19 -CONFIG_X86=y
   21.20 -# CONFIG_X86_64 is not set
   21.21 -
   21.22 -#
   21.23 -# Code maturity level options
   21.24 -#
   21.25 -CONFIG_EXPERIMENTAL=y
   21.26 -CONFIG_CLEAN_COMPILE=y
   21.27 -CONFIG_STANDALONE=y
   21.28 -CONFIG_BROKEN_ON_SMP=y
   21.29 -
   21.30 -#
   21.31 -# General setup
   21.32 -#
   21.33 -CONFIG_SWAP=y
   21.34 -CONFIG_SYSVIPC=y
   21.35 -# CONFIG_POSIX_MQUEUE is not set
   21.36 -# CONFIG_BSD_PROCESS_ACCT is not set
   21.37 -CONFIG_SYSCTL=y
   21.38 -# CONFIG_AUDIT is not set
   21.39 -CONFIG_LOG_BUF_SHIFT=14
   21.40 -CONFIG_HOTPLUG=y
   21.41 -# CONFIG_IKCONFIG is not set
   21.42 -# CONFIG_EMBEDDED is not set
   21.43 -CONFIG_KALLSYMS=y
   21.44 -CONFIG_FUTEX=y
   21.45 -CONFIG_EPOLL=y
   21.46 -CONFIG_IOSCHED_NOOP=y
   21.47 -CONFIG_IOSCHED_AS=y
   21.48 -CONFIG_IOSCHED_DEADLINE=y
   21.49 -CONFIG_IOSCHED_CFQ=y
   21.50 -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
   21.51 -
   21.52 -#
   21.53 -# Loadable module support
   21.54 -#
   21.55 -CONFIG_MODULES=y
   21.56 -CONFIG_MODULE_UNLOAD=y
   21.57 -# CONFIG_MODULE_FORCE_UNLOAD is not set
   21.58 -CONFIG_OBSOLETE_MODPARM=y
   21.59 -# CONFIG_MODVERSIONS is not set
   21.60 -CONFIG_KMOD=y
   21.61 -
   21.62 -#
   21.63 -# X86 Processor Configuration
   21.64 -#
   21.65 -CONFIG_XENARCH="i386"
   21.66 -CONFIG_MMU=y
   21.67 -CONFIG_UID16=y
   21.68 -CONFIG_GENERIC_ISA_DMA=y
   21.69 -# CONFIG_M686 is not set
   21.70 -# CONFIG_MPENTIUMII is not set
   21.71 -# CONFIG_MPENTIUMIII is not set
   21.72 -# CONFIG_MPENTIUMM is not set
   21.73 -CONFIG_MPENTIUM4=y
   21.74 -# CONFIG_MK6 is not set
   21.75 -# CONFIG_MK7 is not set
   21.76 -# CONFIG_MK8 is not set
   21.77 -# CONFIG_MCRUSOE is not set
   21.78 -# CONFIG_MCYRIXIII is not set
   21.79 -# CONFIG_MVIAC3_2 is not set
   21.80 -# CONFIG_X86_GENERIC is not set
   21.81 -CONFIG_X86_CMPXCHG=y
   21.82 -CONFIG_X86_XADD=y
   21.83 -CONFIG_X86_L1_CACHE_SHIFT=7
   21.84 -CONFIG_RWSEM_XCHGADD_ALGORITHM=y
   21.85 -CONFIG_X86_WP_WORKS_OK=y
   21.86 -CONFIG_X86_INVLPG=y
   21.87 -CONFIG_X86_BSWAP=y
   21.88 -CONFIG_X86_POPAD_OK=y
   21.89 -CONFIG_X86_GOOD_APIC=y
   21.90 -CONFIG_X86_INTEL_USERCOPY=y
   21.91 -CONFIG_X86_USE_PPRO_CHECKSUM=y
   21.92 -# CONFIG_HPET_TIMER is not set
   21.93 -# CONFIG_HPET_EMULATE_RTC is not set
   21.94 -# CONFIG_SMP is not set
   21.95 -CONFIG_PREEMPT=y
   21.96 -CONFIG_X86_CPUID=y
   21.97 -
   21.98 -#
   21.99 -# Firmware Drivers
  21.100 -#
  21.101 -# CONFIG_EDD is not set
  21.102 -CONFIG_NOHIGHMEM=y
  21.103 -# CONFIG_HIGHMEM4G is not set
  21.104 -CONFIG_HAVE_DEC_LOCK=y
  21.105 -# CONFIG_REGPARM is not set
  21.106 -
  21.107 -#
  21.108 -# Kernel hacking
  21.109 -#
  21.110 -# CONFIG_DEBUG_KERNEL is not set
  21.111 -CONFIG_EARLY_PRINTK=y
  21.112 -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
  21.113 -# CONFIG_FRAME_POINTER is not set
  21.114 -# CONFIG_4KSTACKS is not set
  21.115 -CONFIG_X86_BIOS_REBOOT=y
  21.116 -CONFIG_X86_STD_RESOURCES=y
  21.117 -CONFIG_PC=y
  21.118 -
  21.119 -#
  21.120 -# Executable file formats
  21.121 -#
  21.122 -CONFIG_BINFMT_ELF=y
  21.123 -# CONFIG_BINFMT_AOUT is not set
  21.124 -# CONFIG_BINFMT_MISC is not set
  21.125 -
  21.126 -#
  21.127 -# Device Drivers
  21.128 -#
  21.129 -
  21.130 -#
  21.131 -# Generic Driver Options
  21.132 -#
  21.133 -# CONFIG_FW_LOADER is not set
  21.134 -
  21.135 -#
  21.136 -# SCSI device support
  21.137 -#
  21.138 -CONFIG_SCSI=m
  21.139 -CONFIG_SCSI_PROC_FS=y
  21.140 -
  21.141 -#
  21.142 -# SCSI support type (disk, tape, CD-ROM)
  21.143 -#
  21.144 -CONFIG_BLK_DEV_SD=m
  21.145 -# CONFIG_CHR_DEV_ST is not set
  21.146 -# CONFIG_CHR_DEV_OSST is not set
  21.147 -# CONFIG_BLK_DEV_SR is not set
  21.148 -# CONFIG_CHR_DEV_SG is not set
  21.149 -
  21.150 -#
  21.151 -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
  21.152 -#
  21.153 -# CONFIG_SCSI_MULTI_LUN is not set
  21.154 -# CONFIG_SCSI_CONSTANTS is not set
  21.155 -# CONFIG_SCSI_LOGGING is not set
  21.156 -
  21.157 -#
  21.158 -# SCSI Transport Attributes
  21.159 -#
  21.160 -# CONFIG_SCSI_SPI_ATTRS is not set
  21.161 -# CONFIG_SCSI_FC_ATTRS is not set
  21.162 -
  21.163 -#
  21.164 -# SCSI low-level drivers
  21.165 -#
  21.166 -# CONFIG_SCSI_AIC7XXX_OLD is not set
  21.167 -# CONFIG_SCSI_SATA is not set
  21.168 -# CONFIG_SCSI_EATA_PIO is not set
  21.169 -# CONFIG_SCSI_DEBUG is not set
  21.170 -
  21.171 -#
  21.172 -# Block devices
  21.173 -#
  21.174 -# CONFIG_BLK_DEV_FD is not set
  21.175 -CONFIG_BLK_DEV_LOOP=m
  21.176 -# CONFIG_BLK_DEV_CRYPTOLOOP is not set
  21.177 -CONFIG_BLK_DEV_NBD=m
  21.178 -CONFIG_BLK_DEV_RAM=y
  21.179 -CONFIG_BLK_DEV_RAM_SIZE=4096
  21.180 -CONFIG_BLK_DEV_INITRD=y
  21.181 -# CONFIG_LBD is not set
  21.182 -
  21.183 -#
  21.184 -# Multi-device support (RAID and LVM)
  21.185 -#
  21.186 -# CONFIG_MD is not set
  21.187 -
  21.188 -#
  21.189 -# Networking support
  21.190 -#
  21.191 -CONFIG_NET=y
  21.192 -
  21.193 -#
  21.194 -# Networking options
  21.195 -#
  21.196 -CONFIG_PACKET=y
  21.197 -# CONFIG_PACKET_MMAP is not set
  21.198 -# CONFIG_NETLINK_DEV is not set
  21.199 -CONFIG_UNIX=y
  21.200 -# CONFIG_NET_KEY is not set
  21.201 -CONFIG_INET=y
  21.202 -# CONFIG_IP_MULTICAST is not set
  21.203 -# CONFIG_IP_ADVANCED_ROUTER is not set
  21.204 -CONFIG_IP_PNP=y
  21.205 -# CONFIG_IP_PNP_DHCP is not set
  21.206 -# CONFIG_IP_PNP_BOOTP is not set
  21.207 -# CONFIG_IP_PNP_RARP is not set
  21.208 -# CONFIG_NET_IPIP is not set
  21.209 -# CONFIG_NET_IPGRE is not set
  21.210 -# CONFIG_ARPD is not set
  21.211 -# CONFIG_SYN_COOKIES is not set
  21.212 -# CONFIG_INET_AH is not set
  21.213 -# CONFIG_INET_ESP is not set
  21.214 -# CONFIG_INET_IPCOMP is not set
  21.215 -# CONFIG_IPV6 is not set
  21.216 -# CONFIG_NETFILTER is not set
  21.217 -
  21.218 -#
  21.219 -# SCTP Configuration (EXPERIMENTAL)
  21.220 -#
  21.221 -# CONFIG_IP_SCTP is not set
  21.222 -# CONFIG_ATM is not set
  21.223 -# CONFIG_BRIDGE is not set
  21.224 -# CONFIG_VLAN_8021Q is not set
  21.225 -# CONFIG_DECNET is not set
  21.226 -# CONFIG_LLC2 is not set
  21.227 -# CONFIG_IPX is not set
  21.228 -# CONFIG_ATALK is not set
  21.229 -# CONFIG_X25 is not set
  21.230 -# CONFIG_LAPB is not set
  21.231 -# CONFIG_NET_DIVERT is not set
  21.232 -# CONFIG_ECONET is not set
  21.233 -# CONFIG_WAN_ROUTER is not set
  21.234 -# CONFIG_NET_FASTROUTE is not set
  21.235 -# CONFIG_NET_HW_FLOWCONTROL is not set
  21.236 -
  21.237 -#
  21.238 -# QoS and/or fair queueing
  21.239 -#
  21.240 -# CONFIG_NET_SCHED is not set
  21.241 -
  21.242 -#
  21.243 -# Network testing
  21.244 -#
  21.245 -# CONFIG_NET_PKTGEN is not set
  21.246 -# CONFIG_NETPOLL is not set
  21.247 -# CONFIG_NET_POLL_CONTROLLER is not set
  21.248 -# CONFIG_HAMRADIO is not set
  21.249 -# CONFIG_IRDA is not set
  21.250 -# CONFIG_BT is not set
  21.251 -CONFIG_NETDEVICES=y
  21.252 -# CONFIG_DUMMY is not set
  21.253 -# CONFIG_BONDING is not set
  21.254 -# CONFIG_EQUALIZER is not set
  21.255 -# CONFIG_TUN is not set
  21.256 -
  21.257 -#
  21.258 -# Ethernet (10 or 100Mbit)
  21.259 -#
  21.260 -# CONFIG_NET_ETHERNET is not set
  21.261 -
  21.262 -#
  21.263 -# Ethernet (1000 Mbit)
  21.264 -#
  21.265 -
  21.266 -#
  21.267 -# Ethernet (10000 Mbit)
  21.268 -#
  21.269 -
  21.270 -#
  21.271 -# Token Ring devices
  21.272 -#
  21.273 -
  21.274 -#
  21.275 -# Wireless LAN (non-hamradio)
  21.276 -#
  21.277 -# CONFIG_NET_RADIO is not set
  21.278 -
  21.279 -#
  21.280 -# Wan interfaces
  21.281 -#
  21.282 -# CONFIG_WAN is not set
  21.283 -# CONFIG_PPP is not set
  21.284 -# CONFIG_SLIP is not set
  21.285 -# CONFIG_SHAPER is not set
  21.286 -# CONFIG_NETCONSOLE is not set
  21.287 -CONFIG_INPUT=y
  21.288 -CONFIG_UNIX98_PTYS=y
  21.289 -
  21.290 -#
  21.291 -# File systems
  21.292 -#
  21.293 -CONFIG_EXT2_FS=y
  21.294 -# CONFIG_EXT2_FS_XATTR is not set
  21.295 -CONFIG_EXT3_FS=y
  21.296 -CONFIG_EXT3_FS_XATTR=y
  21.297 -# CONFIG_EXT3_FS_POSIX_ACL is not set
  21.298 -# CONFIG_EXT3_FS_SECURITY is not set
  21.299 -CONFIG_JBD=y
  21.300 -# CONFIG_JBD_DEBUG is not set
  21.301 -CONFIG_FS_MBCACHE=y
  21.302 -CONFIG_REISERFS_FS=y
  21.303 -# CONFIG_REISERFS_CHECK is not set
  21.304 -# CONFIG_REISERFS_PROC_INFO is not set
  21.305 -# CONFIG_REISERFS_FS_XATTR is not set
  21.306 -# CONFIG_JFS_FS is not set
  21.307 -# CONFIG_XFS_FS is not set
  21.308 -# CONFIG_MINIX_FS is not set
  21.309 -# CONFIG_ROMFS_FS is not set
  21.310 -# CONFIG_QUOTA is not set
  21.311 -CONFIG_AUTOFS_FS=y
  21.312 -CONFIG_AUTOFS4_FS=y
  21.313 -
  21.314 -#
  21.315 -# CD-ROM/DVD Filesystems
  21.316 -#
  21.317 -CONFIG_ISO9660_FS=y
  21.318 -CONFIG_JOLIET=y
  21.319 -CONFIG_ZISOFS=y
  21.320 -CONFIG_ZISOFS_FS=y
  21.321 -# CONFIG_UDF_FS is not set
  21.322 -
  21.323 -#
  21.324 -# DOS/FAT/NT Filesystems
  21.325 -#
  21.326 -CONFIG_FAT_FS=m
  21.327 -CONFIG_MSDOS_FS=m
  21.328 -CONFIG_VFAT_FS=m
  21.329 -# CONFIG_NTFS_FS is not set
  21.330 -
  21.331 -#
  21.332 -# Pseudo filesystems
  21.333 -#
  21.334 -CONFIG_PROC_FS=y
  21.335 -CONFIG_PROC_KCORE=y
  21.336 -CONFIG_SYSFS=y
  21.337 -# CONFIG_DEVFS_FS is not set
  21.338 -CONFIG_DEVPTS_FS_XATTR=y
  21.339 -# CONFIG_DEVPTS_FS_SECURITY is not set
  21.340 -CONFIG_TMPFS=y
  21.341 -# CONFIG_HUGETLBFS is not set
  21.342 -# CONFIG_HUGETLB_PAGE is not set
  21.343 -CONFIG_RAMFS=y
  21.344 -
  21.345 -#
  21.346 -# Miscellaneous filesystems
  21.347 -#
  21.348 -# CONFIG_ADFS_FS is not set
  21.349 -# CONFIG_AFFS_FS is not set
  21.350 -# CONFIG_HFS_FS is not set
  21.351 -# CONFIG_HFSPLUS_FS is not set
  21.352 -# CONFIG_BEFS_FS is not set
  21.353 -# CONFIG_BFS_FS is not set
  21.354 -# CONFIG_EFS_FS is not set
  21.355 -# CONFIG_CRAMFS is not set
  21.356 -# CONFIG_VXFS_FS is not set
  21.357 -# CONFIG_HPFS_FS is not set
  21.358 -# CONFIG_QNX4FS_FS is not set
  21.359 -# CONFIG_SYSV_FS is not set
  21.360 -# CONFIG_UFS_FS is not set
  21.361 -
  21.362 -#
  21.363 -# Network File Systems
  21.364 -#
  21.365 -CONFIG_NFS_FS=y
  21.366 -CONFIG_NFS_V3=y
  21.367 -# CONFIG_NFS_V4 is not set
  21.368 -# CONFIG_NFS_DIRECTIO is not set
  21.369 -# CONFIG_NFSD is not set
  21.370 -CONFIG_ROOT_NFS=y
  21.371 -CONFIG_LOCKD=y
  21.372 -CONFIG_LOCKD_V4=y
  21.373 -# CONFIG_EXPORTFS is not set
  21.374 -CONFIG_SUNRPC=y
  21.375 -# CONFIG_RPCSEC_GSS_KRB5 is not set
  21.376 -# CONFIG_SMB_FS is not set
  21.377 -# CONFIG_CIFS is not set
  21.378 -# CONFIG_NCP_FS is not set
  21.379 -# CONFIG_CODA_FS is not set
  21.380 -# CONFIG_AFS_FS is not set
  21.381 -
  21.382 -#
  21.383 -# Partition Types
  21.384 -#
  21.385 -# CONFIG_PARTITION_ADVANCED is not set
  21.386 -CONFIG_MSDOS_PARTITION=y
  21.387 -
  21.388 -#
  21.389 -# Native Language Support
  21.390 -#
  21.391 -CONFIG_NLS=y
  21.392 -CONFIG_NLS_DEFAULT="iso8859-1"
  21.393 -CONFIG_NLS_CODEPAGE_437=y
  21.394 -# CONFIG_NLS_CODEPAGE_737 is not set
  21.395 -# CONFIG_NLS_CODEPAGE_775 is not set
  21.396 -# CONFIG_NLS_CODEPAGE_850 is not set
  21.397 -# CONFIG_NLS_CODEPAGE_852 is not set
  21.398 -# CONFIG_NLS_CODEPAGE_855 is not set
  21.399 -# CONFIG_NLS_CODEPAGE_857 is not set
  21.400 -# CONFIG_NLS_CODEPAGE_860 is not set
  21.401 -# CONFIG_NLS_CODEPAGE_861 is not set
  21.402 -# CONFIG_NLS_CODEPAGE_862 is not set
  21.403 -# CONFIG_NLS_CODEPAGE_863 is not set
  21.404 -# CONFIG_NLS_CODEPAGE_864 is not set
  21.405 -# CONFIG_NLS_CODEPAGE_865 is not set
  21.406 -# CONFIG_NLS_CODEPAGE_866 is not set
  21.407 -# CONFIG_NLS_CODEPAGE_869 is not set
  21.408 -# CONFIG_NLS_CODEPAGE_936 is not set
  21.409 -# CONFIG_NLS_CODEPAGE_950 is not set
  21.410 -# CONFIG_NLS_CODEPAGE_932 is not set
  21.411 -# CONFIG_NLS_CODEPAGE_949 is not set
  21.412 -# CONFIG_NLS_CODEPAGE_874 is not set
  21.413 -# CONFIG_NLS_ISO8859_8 is not set
  21.414 -# CONFIG_NLS_CODEPAGE_1250 is not set
  21.415 -# CONFIG_NLS_CODEPAGE_1251 is not set
  21.416 -CONFIG_NLS_ISO8859_1=y
  21.417 -# CONFIG_NLS_ISO8859_2 is not set
  21.418 -# CONFIG_NLS_ISO8859_3 is not set
  21.419 -# CONFIG_NLS_ISO8859_4 is not set
  21.420 -# CONFIG_NLS_ISO8859_5 is not set
  21.421 -# CONFIG_NLS_ISO8859_6 is not set
  21.422 -# CONFIG_NLS_ISO8859_7 is not set
  21.423 -# CONFIG_NLS_ISO8859_9 is not set
  21.424 -# CONFIG_NLS_ISO8859_13 is not set
  21.425 -# CONFIG_NLS_ISO8859_14 is not set
  21.426 -# CONFIG_NLS_ISO8859_15 is not set
  21.427 -# CONFIG_NLS_KOI8_R is not set
  21.428 -# CONFIG_NLS_KOI8_U is not set
  21.429 -# CONFIG_NLS_UTF8 is not set
  21.430 -
  21.431 -#
  21.432 -# Security options
  21.433 -#
  21.434 -# CONFIG_SECURITY is not set
  21.435 -
  21.436 -#
  21.437 -# Cryptographic options
  21.438 -#
  21.439 -CONFIG_CRYPTO=y
  21.440 -# CONFIG_CRYPTO_HMAC is not set
  21.441 -# CONFIG_CRYPTO_NULL is not set
  21.442 -# CONFIG_CRYPTO_MD4 is not set
  21.443 -CONFIG_CRYPTO_MD5=m
  21.444 -# CONFIG_CRYPTO_SHA1 is not set
  21.445 -# CONFIG_CRYPTO_SHA256 is not set
  21.446 -# CONFIG_CRYPTO_SHA512 is not set
  21.447 -# CONFIG_CRYPTO_DES is not set
  21.448 -# CONFIG_CRYPTO_BLOWFISH is not set
  21.449 -# CONFIG_CRYPTO_TWOFISH is not set
  21.450 -# CONFIG_CRYPTO_SERPENT is not set
  21.451 -# CONFIG_CRYPTO_AES is not set
  21.452 -# CONFIG_CRYPTO_CAST5 is not set
  21.453 -# CONFIG_CRYPTO_CAST6 is not set
  21.454 -# CONFIG_CRYPTO_ARC4 is not set
  21.455 -# CONFIG_CRYPTO_DEFLATE is not set
  21.456 -# CONFIG_CRYPTO_MICHAEL_MIC is not set
  21.457 -CONFIG_CRYPTO_CRC32C=m
  21.458 -# CONFIG_CRYPTO_TEST is not set
  21.459 -
  21.460 -#
  21.461 -# Library routines
  21.462 -#
  21.463 -# CONFIG_CRC32 is not set
  21.464 -CONFIG_LIBCRC32C=m
  21.465 -CONFIG_ZLIB_INFLATE=y
    22.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/Kconfig	Fri Aug 27 08:43:54 2004 +0000
    22.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.3 @@ -1,932 +0,0 @@
    22.4 -#
    22.5 -# For a description of the syntax of this configuration file,
    22.6 -# see Documentation/kbuild/kconfig-language.txt.
    22.7 -#
    22.8 -
    22.9 -menu "X86 Processor Configuration"
   22.10 -
   22.11 -config XENARCH
   22.12 -	string
   22.13 -	default i386
   22.14 -
   22.15 -config MMU
   22.16 -	bool
   22.17 -	default y
   22.18 -
   22.19 -config SBUS
   22.20 -	bool
   22.21 -
   22.22 -config UID16
   22.23 -	bool
   22.24 -	default y
   22.25 -
   22.26 -config GENERIC_ISA_DMA
   22.27 -	bool
   22.28 -	default y
   22.29 -
   22.30 -
   22.31 -choice
   22.32 -	prompt "Processor family"
   22.33 -	default M686
   22.34 -
   22.35 -#config M386
   22.36 -#	bool "386"
   22.37 -#	---help---
   22.38 -#	  This is the processor type of your CPU. This information is used for
   22.39 -#	  optimizing purposes. In order to compile a kernel that can run on
   22.40 -#	  all x86 CPU types (albeit not optimally fast), you can specify
   22.41 -#	  "386" here.
   22.42 -#
   22.43 -#	  The kernel will not necessarily run on earlier architectures than
   22.44 -#	  the one you have chosen, e.g. a Pentium optimized kernel will run on
   22.45 -#	  a PPro, but not necessarily on a i486.
   22.46 -#
   22.47 -#	  Here are the settings recommended for greatest speed:
   22.48 -#	  - "386" for the AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix/TI
   22.49 -#	  486DLC/DLC2, UMC 486SX-S and NexGen Nx586.  Only "386" kernels
   22.50 -#	  will run on a 386 class machine.
   22.51 -#	  - "486" for the AMD/Cyrix/IBM/Intel 486DX/DX2/DX4 or
   22.52 -#	  SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S.
   22.53 -#	  - "586" for generic Pentium CPUs lacking the TSC
   22.54 -#	  (time stamp counter) register.
   22.55 -#	  - "Pentium-Classic" for the Intel Pentium.
   22.56 -#	  - "Pentium-MMX" for the Intel Pentium MMX.
   22.57 -#	  - "Pentium-Pro" for the Intel Pentium Pro.
   22.58 -#	  - "Pentium-II" for the Intel Pentium II or pre-Coppermine Celeron.
   22.59 -#	  - "Pentium-III" for the Intel Pentium III or Coppermine Celeron.
   22.60 -#	  - "Pentium-4" for the Intel Pentium 4 or P4-based Celeron.
   22.61 -#	  - "K6" for the AMD K6, K6-II and K6-III (aka K6-3D).
   22.62 -#	  - "Athlon" for the AMD K7 family (Athlon/Duron/Thunderbird).
   22.63 -#	  - "Crusoe" for the Transmeta Crusoe series.
   22.64 -#	  - "Winchip-C6" for original IDT Winchip.
   22.65 -#	  - "Winchip-2" for IDT Winchip 2.
   22.66 -#	  - "Winchip-2A" for IDT Winchips with 3dNow! capabilities.
   22.67 -#	  - "CyrixIII/VIA C3" for VIA Cyrix III or VIA C3.
   22.68 -#	  - "VIA C3-2 for VIA C3-2 "Nehemiah" (model 9 and above).
   22.69 -#
   22.70 -#	  If you don't know what to do, choose "386".
   22.71 -
   22.72 -#config M486
   22.73 -#	bool "486"
   22.74 -#	help
   22.75 -#	  Select this for a 486 series processor, either Intel or one of the
   22.76 -#	  compatible processors from AMD, Cyrix, IBM, or Intel.  Includes DX,
   22.77 -#	  DX2, and DX4 variants; also SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or
   22.78 -#	  U5S.
   22.79 -
   22.80 -#config M586
   22.81 -#	bool "586/K5/5x86/6x86/6x86MX"
   22.82 -#	help
   22.83 -#	  Select this for an 586 or 686 series processor such as the AMD K5,
   22.84 -#	  the Intel 5x86 or 6x86, or the Intel 6x86MX.  This choice does not
   22.85 -#	  assume the RDTSC (Read Time Stamp Counter) instruction.
   22.86 -
   22.87 -#config M586TSC
   22.88 -#	bool "Pentium-Classic"
   22.89 -#	help
   22.90 -#	  Select this for a Pentium Classic processor with the RDTSC (Read
   22.91 -#	  Time Stamp Counter) instruction for benchmarking.
   22.92 -
   22.93 -#config M586MMX
   22.94 -#	bool "Pentium-MMX"
   22.95 -#	help
   22.96 -#	  Select this for a Pentium with the MMX graphics/multimedia
   22.97 -#	  extended instructions.
   22.98 -
   22.99 -config M686
  22.100 -	bool "Pentium-Pro"
  22.101 -	help
  22.102 -	  Select this for Intel Pentium Pro chips.  This enables the use of
  22.103 -	  Pentium Pro extended instructions, and disables the init-time guard
  22.104 -	  against the f00f bug found in earlier Pentiums.
  22.105 -
  22.106 -config MPENTIUMII
  22.107 -	bool "Pentium-II/Celeron(pre-Coppermine)"
  22.108 -	help
  22.109 -	  Select this for Intel chips based on the Pentium-II and
  22.110 -	  pre-Coppermine Celeron core.  This option enables an unaligned
  22.111 -	  copy optimization, compiles the kernel with optimization flags
  22.112 -	  tailored for the chip, and applies any applicable Pentium Pro
  22.113 -	  optimizations.
  22.114 -
  22.115 -config MPENTIUMIII
  22.116 -	bool "Pentium-III/Celeron(Coppermine)/Pentium-III Xeon"
  22.117 -	help
  22.118 -	  Select this for Intel chips based on the Pentium-III and
  22.119 -	  Celeron-Coppermine core.  This option enables use of some
  22.120 -	  extended prefetch instructions in addition to the Pentium II
  22.121 -	  extensions.
  22.122 -
  22.123 -config MPENTIUMM
  22.124 -	bool "Pentium M"
  22.125 -	help
  22.126 -	  Select this for Intel Pentium M (not Pentium-4 M)
  22.127 -	  notebook chips.
  22.128 -
  22.129 -config MPENTIUM4
  22.130 -	bool "Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon"
  22.131 -	help
  22.132 -	  Select this for Intel Pentium 4 chips.  This includes the
  22.133 -	  Pentium 4, P4-based Celeron and Xeon, and Pentium-4 M
  22.134 -	  (not Pentium M) chips.  This option enables compile flags
  22.135 -	  optimized for the chip, uses the correct cache shift, and
  22.136 -	  applies any applicable Pentium III optimizations.
  22.137 -
  22.138 -config MK6
  22.139 -	bool "K6/K6-II/K6-III"
  22.140 -	help
  22.141 -	  Select this for an AMD K6-family processor.  Enables use of
  22.142 -	  some extended instructions, and passes appropriate optimization
  22.143 -	  flags to GCC.
  22.144 -
  22.145 -config MK7
  22.146 -	bool "Athlon/Duron/K7"
  22.147 -	help
  22.148 -	  Select this for an AMD Athlon K7-family processor.  Enables use of
  22.149 -	  some extended instructions, and passes appropriate optimization
  22.150 -	  flags to GCC.
  22.151 -
  22.152 -config MK8
  22.153 -	bool "Opteron/Athlon64/Hammer/K8"
  22.154 -	help
  22.155 -	  Select this for an AMD Opteron or Athlon64 Hammer-family processor.  Enables
  22.156 -	  use of some extended instructions, and passes appropriate optimization
  22.157 -	  flags to GCC.
  22.158 -
  22.159 -config MCRUSOE
  22.160 -	bool "Crusoe"
  22.161 -	help
  22.162 -	  Select this for a Transmeta Crusoe processor.  Treats the processor
  22.163 -	  like a 586 with TSC, and sets some GCC optimization flags (like a
  22.164 -	  Pentium Pro with no alignment requirements).
  22.165 -
  22.166 -#config MWINCHIPC6
  22.167 -#	bool "Winchip-C6"
  22.168 -#	help
  22.169 -#	  Select this for an IDT Winchip C6 chip.  Linux and GCC
  22.170 -#	  treat this chip as a 586TSC with some extended instructions
  22.171 -#	  and alignment requirements.
  22.172 -
  22.173 -#config MWINCHIP2
  22.174 -#	bool "Winchip-2"
  22.175 -#	help
  22.176 -#	  Select this for an IDT Winchip-2.  Linux and GCC
  22.177 -#	  treat this chip as a 586TSC with some extended instructions
  22.178 -#	  and alignment requirements.
  22.179 -
  22.180 -#config MWINCHIP3D
  22.181 -#	bool "Winchip-2A/Winchip-3"
  22.182 -#	help
  22.183 -#	  Select this for an IDT Winchip-2A or 3.  Linux and GCC
  22.184 -#	  treat this chip as a 586TSC with some extended instructions
  22.185 -#	  and alignment reqirements.  Also enable out of order memory
  22.186 -#	  stores for this CPU, which can increase performance of some
  22.187 -#	  operations.
  22.188 -
  22.189 -config MCYRIXIII
  22.190 -	bool "CyrixIII/VIA-C3"
  22.191 -	help
  22.192 -	  Select this for a Cyrix III or C3 chip.  Presently Linux and GCC
  22.193 -	  treat this chip as a generic 586. Whilst the CPU is 686 class,
  22.194 -	  it lacks the cmov extension which gcc assumes is present when
  22.195 -	  generating 686 code.
  22.196 -	  Note that Nehemiah (Model 9) and above will not boot with this
  22.197 -	  kernel due to them lacking the 3DNow! instructions used in earlier
  22.198 -	  incarnations of the CPU.
  22.199 -
  22.200 -config MVIAC3_2
  22.201 -	bool "VIA C3-2 (Nehemiah)"
  22.202 -	help
  22.203 -	  Select this for a VIA C3 "Nehemiah". Selecting this enables usage
  22.204 -	  of SSE and tells gcc to treat the CPU as a 686.
  22.205 -	  Note, this kernel will not boot on older (pre model 9) C3s.
  22.206 -
  22.207 -endchoice
  22.208 -
  22.209 -config X86_GENERIC
  22.210 -       bool "Generic x86 support" 
  22.211 -       help
  22.212 -	  Instead of just including optimizations for the selected
  22.213 -	  x86 variant (e.g. PII, Crusoe or Athlon), include some more
  22.214 -	  generic optimizations as well. This will make the kernel
  22.215 -	  perform better on x86 CPUs other than that selected.
  22.216 -
  22.217 -	  This is really intended for distributors who need more
  22.218 -	  generic optimizations.
  22.219 -
  22.220 -#
  22.221 -# Define implied options from the CPU selection here
  22.222 -#
  22.223 -config X86_CMPXCHG
  22.224 -	bool
  22.225 -	depends on !M386
  22.226 -	default y
  22.227 -
  22.228 -config X86_XADD
  22.229 -	bool
  22.230 -	depends on !M386
  22.231 -	default y
  22.232 -
  22.233 -config X86_L1_CACHE_SHIFT
  22.234 -	int
  22.235 -	default "7" if MPENTIUM4 || X86_GENERIC
  22.236 -	default "4" if X86_ELAN || M486 || M386
  22.237 -	default "5" if MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCRUSOE || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2
  22.238 -	default "6" if MK7 || MK8 || MPENTIUMM
  22.239 -
  22.240 -config RWSEM_GENERIC_SPINLOCK
  22.241 -	bool
  22.242 -	depends on M386
  22.243 -	default y
  22.244 -
  22.245 -config RWSEM_XCHGADD_ALGORITHM
  22.246 -	bool
  22.247 -	depends on !M386
  22.248 -	default y
  22.249 -
  22.250 -config X86_PPRO_FENCE
  22.251 -	bool
  22.252 -	depends on M686 || M586MMX || M586TSC || M586 || M486 || M386
  22.253 -	default y
  22.254 -
  22.255 -config X86_F00F_BUG
  22.256 -	bool
  22.257 -	depends on M586MMX || M586TSC || M586 || M486 || M386
  22.258 -	default y
  22.259 -
  22.260 -config X86_WP_WORKS_OK
  22.261 -	bool
  22.262 -	depends on !M386
  22.263 -	default y
  22.264 -
  22.265 -config X86_INVLPG
  22.266 -	bool
  22.267 -	depends on !M386
  22.268 -	default y
  22.269 -
  22.270 -config X86_BSWAP
  22.271 -	bool
  22.272 -	depends on !M386
  22.273 -	default y
  22.274 -
  22.275 -config X86_POPAD_OK
  22.276 -	bool
  22.277 -	depends on !M386
  22.278 -	default y
  22.279 -
  22.280 -config X86_ALIGNMENT_16
  22.281 -	bool
  22.282 -	depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || X86_ELAN || MK6 || M586MMX || M586TSC || M586 || M486 || MVIAC3_2
  22.283 -	default y
  22.284 -
  22.285 -config X86_GOOD_APIC
  22.286 -	bool
  22.287 -	depends on MK7 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || MK8
  22.288 -	default y
  22.289 -
  22.290 -config X86_INTEL_USERCOPY
  22.291 -	bool
  22.292 -	depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7
  22.293 -	default y
  22.294 -
  22.295 -config X86_USE_PPRO_CHECKSUM
  22.296 -	bool
  22.297 -	depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2
  22.298 -	default y
  22.299 -
  22.300 -config X86_USE_3DNOW
  22.301 -	bool
  22.302 -	depends on MCYRIXIII || MK7
  22.303 -	default y
  22.304 -
  22.305 -config X86_OOSTORE
  22.306 -	bool
  22.307 -	depends on (MWINCHIP3D || MWINCHIP2 || MWINCHIPC6) && MTRR
  22.308 -	default y
  22.309 -
  22.310 -config HPET_TIMER
  22.311 -	bool
  22.312 -	default n
  22.313 -#config HPET_TIMER
  22.314 -#	bool "HPET Timer Support"
  22.315 -#	help
  22.316 -#	  This enables the use of the HPET for the kernel's internal timer.
  22.317 -#	  HPET is the next generation timer replacing legacy 8254s.
  22.318 -#	  You can safely choose Y here.  However, HPET will only be
  22.319 -#	  activated if the platform and the BIOS support this feature.
  22.320 -#	  Otherwise the 8254 will be used for timing services.
  22.321 -#
  22.322 -#	  Choose N to continue using the legacy 8254 timer.
  22.323 -
  22.324 -config HPET_EMULATE_RTC
  22.325 -	def_bool HPET_TIMER && RTC=y
  22.326 -
  22.327 -config SMP
  22.328 -	bool
  22.329 -	default n
  22.330 -#config SMP
  22.331 -#	bool "Symmetric multi-processing support"
  22.332 -#	---help---
  22.333 -#	  This enables support for systems with more than one CPU. If you have
  22.334 -#	  a system with only one CPU, like most personal computers, say N. If
  22.335 -#	  you have a system with more than one CPU, say Y.
  22.336 -#
  22.337 -#	  If you say N here, the kernel will run on single and multiprocessor
  22.338 -#	  machines, but will use only one CPU of a multiprocessor machine. If
  22.339 -#	  you say Y here, the kernel will run on many, but not all,
  22.340 -#	  singleprocessor machines. On a singleprocessor machine, the kernel
  22.341 -#	  will run faster if you say N here.
  22.342 -#
  22.343 -#	  Note that if you say Y here and choose architecture "586" or
  22.344 -#	  "Pentium" under "Processor family", the kernel will not work on 486
  22.345 -#	  architectures. Similarly, multiprocessor kernels for the "PPro"
  22.346 -#	  architecture may not work on all Pentium based boards.
  22.347 -#
  22.348 -#	  People using multiprocessor machines who say Y here should also say
  22.349 -#	  Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
  22.350 -#	  Management" code will be disabled if you say Y here.
  22.351 -#
  22.352 -#	  See also the <file:Documentation/smp.txt>,
  22.353 -#	  <file:Documentation/i386/IO-APIC.txt>,
  22.354 -#	  <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
  22.355 -#	  <http://www.tldp.org/docs.html#howto>.
  22.356 -#
  22.357 -#	  If you don't know what to do here, say N.
  22.358 -
  22.359 -config NR_CPUS
  22.360 -	int "Maximum number of CPUs (2-255)"
  22.361 -	range 2 255
  22.362 -	depends on SMP
  22.363 -	default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000
  22.364 -	default "8"
  22.365 -	help
  22.366 -	  This allows you to specify the maximum number of CPUs which this
  22.367 -	  kernel will support.  The maximum supported value is 255 and the
  22.368 -	  minimum value which makes sense is 2.
  22.369 -
  22.370 -	  This is purely to save memory - each supported CPU adds
  22.371 -	  approximately eight kilobytes to the kernel image.
  22.372 -
  22.373 -config SCHED_SMT
  22.374 -	bool "SMT (Hyperthreading) scheduler support"
  22.375 -	depends on SMP
  22.376 -	default off
  22.377 -	help
  22.378 -	  SMT scheduler support improves the CPU scheduler's decision making
  22.379 -	  when dealing with Intel Pentium 4 chips with HyperThreading at a
  22.380 -	  cost of slightly increased overhead in some places. If unsure say
  22.381 -	  N here.
  22.382 -
  22.383 -config PREEMPT
  22.384 -	bool "Preemptible Kernel"
  22.385 -	help
  22.386 -	  This option reduces the latency of the kernel when reacting to
  22.387 -	  real-time or interactive events by allowing a low priority process to
  22.388 -	  be preempted even if it is in kernel mode executing a system call.
  22.389 -	  This allows applications to run more reliably even when the system is
  22.390 -	  under load.
  22.391 -
  22.392 -	  Say Y here if you are building a kernel for a desktop, embedded
  22.393 -	  or real-time system.  Say N if you are unsure.
  22.394 -
  22.395 -#config X86_TSC
  22.396 -#	 bool
  22.397 -#	depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2) && !X86_NUMAQ
  22.398 -#	 default y
  22.399 -
  22.400 -#config X86_MCE
  22.401 -#	 bool "Machine Check Exception"
  22.402 -#	depends on !X86_VOYAGER
  22.403 -#	 ---help---
  22.404 -#	   Machine Check Exception support allows the processor to notify the
  22.405 -#	   kernel if it detects a problem (e.g. overheating, component failure).
  22.406 -#	   The action the kernel takes depends on the severity of the problem,
  22.407 -#	   ranging from a warning message on the console, to halting the machine.
  22.408 -#	   Your processor must be a Pentium or newer to support this - check the
  22.409 -#	   flags in /proc/cpuinfo for mce.  Note that some older Pentium systems
  22.410 -#	   have a design flaw which leads to false MCE events - hence MCE is
  22.411 -#	   disabled on all P5 processors, unless explicitly enabled with "mce"
  22.412 -#	   as a boot argument.  Similarly, if MCE is built in and creates a
  22.413 -#	   problem on some new non-standard machine, you can boot with "nomce"
  22.414 -#	   to disable it.  MCE support simply ignores non-MCE processors like
  22.415 -#	   the 386 and 486, so nearly everyone can say Y here.
  22.416 -
  22.417 -#config X86_MCE_NONFATAL
  22.418 -#	tristate "Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4"
  22.419 -#	 depends on X86_MCE
  22.420 -#	 help
  22.421 -#	   Enabling this feature starts a timer that triggers every 5 seconds which
  22.422 -#	   will look at the machine check registers to see if anything happened.
  22.423 -#	   Non-fatal problems automatically get corrected (but still logged).
  22.424 -#	   Disable this if you don't want to see these messages.
  22.425 -#	   Seeing the messages this option prints out may be indicative of dying hardware,
  22.426 -#	   or out-of-spec (ie, overclocked) hardware.
  22.427 -#	   This option only does something on certain CPUs.
  22.428 -#	   (AMD Athlon/Duron and Intel Pentium 4)
  22.429 -
  22.430 -#config X86_MCE_P4THERMAL
  22.431 -#	 bool "check for P4 thermal throttling interrupt."
  22.432 -#	 depends on X86_MCE && (X86_UP_APIC || SMP)
  22.433 -#	 help
  22.434 -#	   Enabling this feature will cause a message to be printed when the P4
  22.435 -#	   enters thermal throttling.
  22.436 -
  22.437 -#config MICROCODE
  22.438 -#	 tristate "/dev/cpu/microcode - Intel IA32 CPU microcode support"
  22.439 -#	 ---help---
  22.440 -#	   If you say Y here and also to "/dev file system support" in the
  22.441 -#	   'File systems' section, you will be able to update the microcode on
  22.442 -#	   Intel processors in the IA32 family, e.g. Pentium Pro, Pentium II,
  22.443 -#	   Pentium III, Pentium 4, Xeon etc.  You will obviously need the
  22.444 -#	   actual microcode binary data itself which is not shipped with the
  22.445 -#	   Linux kernel.
  22.446 -#
  22.447 -#	   For latest news and information on obtaining all the required
  22.448 -#	   ingredients for this driver, check:
  22.449 -#	   <http://www.urbanmyth.org/microcode/>.
  22.450 -#
  22.451 -#	   To compile this driver as a module, choose M here: the
  22.452 -#	   module will be called microcode.
  22.453 -
  22.454 -#config X86_MSR
  22.455 -#	 tristate "/dev/cpu/*/msr - Model-specific register support"
  22.456 -#	 help
  22.457 -#	   This device gives privileged processes access to the x86
  22.458 -#	   Model-Specific Registers (MSRs).  It is a character device with
  22.459 -#	   major 202 and minors 0 to 31 for /dev/cpu/0/msr to /dev/cpu/31/msr.
  22.460 -#	   MSR accesses are directed to a specific CPU on multi-processor
  22.461 -#	   systems.
  22.462 -
  22.463 -config X86_CPUID
  22.464 -	tristate "/dev/cpu/*/cpuid - CPU information support"
  22.465 -	help
  22.466 -	  This device gives processes access to the x86 CPUID instruction to
  22.467 -	  be executed on a specific processor.  It is a character device
  22.468 -	  with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to
  22.469 -	  /dev/cpu/31/cpuid.
  22.470 -
  22.471 -source "drivers/firmware/Kconfig"
  22.472 -
  22.473 -choice
  22.474 -	prompt "High Memory Support"
  22.475 -	default NOHIGHMEM
  22.476 -
  22.477 -config NOHIGHMEM
  22.478 -	bool "off"
  22.479 -	---help---
  22.480 -	  Linux can use up to 64 Gigabytes of physical memory on x86 systems.
  22.481 -	  However, the address space of 32-bit x86 processors is only 4
  22.482 -	  Gigabytes large. That means that, if you have a large amount of
  22.483 -	  physical memory, not all of it can be "permanently mapped" by the
  22.484 -	  kernel. The physical memory that's not permanently mapped is called
  22.485 -	  "high memory".
  22.486 -
  22.487 -	  If you are compiling a kernel which will never run on a machine with
  22.488 -	  more than 1 Gigabyte total physical RAM, answer "off" here (default
  22.489 -	  choice and suitable for most users). This will result in a "3GB/1GB"
  22.490 -	  split: 3GB are mapped so that each process sees a 3GB virtual memory
  22.491 -	  space and the remaining part of the 4GB virtual memory space is used
  22.492 -	  by the kernel to permanently map as much physical memory as
  22.493 -	  possible.
  22.494 -
  22.495 -	  If the machine has between 1 and 4 Gigabytes physical RAM, then
  22.496 -	  answer "4GB" here.
  22.497 -
  22.498 -	  If more than 4 Gigabytes is used then answer "64GB" here. This
  22.499 -	  selection turns Intel PAE (Physical Address Extension) mode on.
  22.500 -	  PAE implements 3-level paging on IA32 processors. PAE is fully
  22.501 -	  supported by Linux, PAE mode is implemented on all recent Intel
  22.502 -	  processors (Pentium Pro and better). NOTE: If you say "64GB" here,
  22.503 -	  then the kernel will not boot on CPUs that don't support PAE!
  22.504 -
  22.505 -	  The actual amount of total physical memory will either be
  22.506 -	  auto detected or can be forced by using a kernel command line option
  22.507 -	  such as "mem=256M". (Try "man bootparam" or see the documentation of
  22.508 -	  your boot loader (lilo or loadlin) about how to pass options to the
  22.509 -	  kernel at boot time.)
  22.510 -
  22.511 -	  If unsure, say "off".
  22.512 -
  22.513 -config HIGHMEM4G
  22.514 -	bool "4GB"
  22.515 -	help
  22.516 -	  Select this if you have a 32-bit processor and between 1 and 4
  22.517 -	  gigabytes of physical RAM.
  22.518 -
  22.519 -#config HIGHMEM64G
  22.520 -#	bool "64GB"
  22.521 -#	help
  22.522 -#	  Select this if you have a 32-bit processor and more than 4
  22.523 -#	  gigabytes of physical RAM.
  22.524 -
  22.525 -endchoice
  22.526 -
  22.527 -config HIGHMEM
  22.528 -	bool
  22.529 -	depends on HIGHMEM64G || HIGHMEM4G
  22.530 -	default y
  22.531 -
  22.532 -config X86_PAE
  22.533 -	bool
  22.534 -	depends on HIGHMEM64G
  22.535 -	default y
  22.536 -
  22.537 -# Common NUMA Features
  22.538 -config NUMA
  22.539 -	bool "Numa Memory Allocation and Scheduler Support"
  22.540 -	depends on SMP && HIGHMEM64G && (X86_NUMAQ || X86_GENERICARCH || (X86_SUMMIT && ACPI))
  22.541 -	default n if X86_PC
  22.542 -	default y if (X86_NUMAQ || X86_SUMMIT)
  22.543 -
  22.544 -# Need comments to help the hapless user trying to turn on NUMA support
  22.545 -comment "NUMA (NUMA-Q) requires SMP, 64GB highmem support"
  22.546 -	depends on X86_NUMAQ && (!HIGHMEM64G || !SMP)
  22.547 -
  22.548 -comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI"
  22.549 -	depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI)
  22.550 -
  22.551 -config DISCONTIGMEM
  22.552 -	bool
  22.553 -	depends on NUMA
  22.554 -	default y
  22.555 -
  22.556 -config HAVE_ARCH_BOOTMEM_NODE
  22.557 -	bool
  22.558 -	depends on NUMA
  22.559 -	default y
  22.560 -
  22.561 -#config HIGHPTE
  22.562 -#	bool "Allocate 3rd-level pagetables from highmem"
  22.563 -#	depends on HIGHMEM4G || HIGHMEM64G
  22.564 -#	help
  22.565 -#	  The VM uses one page table entry for each page of physical memory.
  22.566 -#	  For systems with a lot of RAM, this can be wasteful of precious
  22.567 -#	  low memory.  Setting this option will put user-space page table
  22.568 -#	  entries in high memory.
  22.569 -
  22.570 -#config MTRR
  22.571 -#	 bool "MTRR (Memory Type Range Register) support"
  22.572 -#	 ---help---
  22.573 -#	   On Intel P6 family processors (Pentium Pro, Pentium II and later)
  22.574 -#	   the Memory Type Range Registers (MTRRs) may be used to control
  22.575 -#	   processor access to memory ranges. This is most useful if you have
  22.576 -#	   a video (VGA) card on a PCI or AGP bus. Enabling write-combining
  22.577 -#	   allows bus write transfers to be combined into a larger transfer
  22.578 -#	   before bursting over the PCI/AGP bus. This can increase performance
  22.579 -#	   of image write operations 2.5 times or more. Saying Y here creates a
  22.580 -#	   /proc/mtrr file which may be used to manipulate your processor's
  22.581 -#	   MTRRs. Typically the X server should use this.
  22.582 -#
  22.583 -#	   This code has a reasonably generic interface so that similar
  22.584 -#	   control registers on other processors can be easily supported
  22.585 -#	   as well:
  22.586 -#
  22.587 -#	   The Cyrix 6x86, 6x86MX and M II processors have Address Range
  22.588 -#	   Registers (ARRs) which provide a similar functionality to MTRRs. For
  22.589 -#	   these, the ARRs are used to emulate the MTRRs.
  22.590 -#	   The AMD K6-2 (stepping 8 and above) and K6-3 processors have two
  22.591 -#	   MTRRs. The Centaur C6 (WinChip) has 8 MCRs, allowing
  22.592 -#	   write-combining. All of these processors are supported by this code
  22.593 -#	   and it makes sense to say Y here if you have one of them.
  22.594 -#
  22.595 -#	   Saying Y here also fixes a problem with buggy SMP BIOSes which only
  22.596 -#	   set the MTRRs for the boot CPU and not for the secondary CPUs. This
  22.597 -#	   can lead to all sorts of problems, so it's good to say Y here.
  22.598 -#
  22.599 -#	   You can safely say Y even if your machine doesn't have MTRRs, you'll
  22.600 -#	   just add about 9 KB to your kernel.
  22.601 -#
  22.602 -#	   See <file:Documentation/mtrr.txt> for more information.
  22.603 -
  22.604 -config IRQBALANCE
  22.605 - 	bool "Enable kernel irq balancing"
  22.606 -	depends on SMP && X86_IO_APIC
  22.607 -	default y
  22.608 -	help
  22.609 - 	  The default yes will allow the kernel to do irq load balancing.
  22.610 -	  Saying no will keep the kernel from doing irq load balancing.
  22.611 -
  22.612 -config HAVE_DEC_LOCK
  22.613 -	bool
  22.614 -	depends on (SMP || PREEMPT) && X86_CMPXCHG
  22.615 -	default y
  22.616 -
  22.617 -# turning this on wastes a bunch of space.
  22.618 -# Summit needs it only when NUMA is on
  22.619 -config BOOT_IOREMAP
  22.620 -	bool
  22.621 -	depends on (((X86_SUMMIT || X86_GENERICARCH) && NUMA) || (X86 && EFI))
  22.622 -	default y
  22.623 -
  22.624 -config REGPARM
  22.625 -	bool "Use register arguments (EXPERIMENTAL)"
  22.626 -	depends on EXPERIMENTAL
  22.627 -	default n
  22.628 -	help
  22.629 -	Compile the kernel with -mregparm=3. This uses an different ABI
  22.630 -	and passes the first three arguments of a function call in registers.
  22.631 -	This will probably break binary only modules.
  22.632 -
  22.633 -	This feature is only enabled for gcc-3.0 and later - earlier compilers
  22.634 -	generate incorrect output with certain kernel constructs when
  22.635 -	-mregparm=3 is used.
  22.636 -
  22.637 -
  22.638 -if XEN_PHYSDEV_ACCESS
  22.639 -
  22.640 -menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
  22.641 -
  22.642 -config X86_VISWS_APIC
  22.643 -	bool
  22.644 -	depends on X86_VISWS
  22.645 -	default y
  22.646 -
  22.647 -config X86_LOCAL_APIC
  22.648 -	bool
  22.649 -	depends on (X86_VISWS || SMP) && !X86_VOYAGER
  22.650 -	default y
  22.651 -
  22.652 -config X86_IO_APIC
  22.653 -	bool
  22.654 -	depends on SMP && !(X86_VISWS || X86_VOYAGER)
  22.655 -	default y
  22.656 -
  22.657 -config PCI
  22.658 -	bool "PCI support" if !X86_VISWS
  22.659 -	depends on !X86_VOYAGER
  22.660 -	default y if X86_VISWS
  22.661 -	help
  22.662 -	  Find out whether you have a PCI motherboard. PCI is the name of a
  22.663 -	  bus system, i.e. the way the CPU talks to the other stuff inside
  22.664 -	  your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or
  22.665 -	  VESA. If you have PCI, say Y, otherwise N.
  22.666 -
  22.667 -	  The PCI-HOWTO, available from
  22.668 -	  <http://www.tldp.org/docs.html#howto>, contains valuable
  22.669 -	  information about which PCI hardware does work under Linux and which
  22.670 -	  doesn't.
  22.671 -
  22.672 -choice
  22.673 -	prompt "PCI access mode"
  22.674 -	depends on PCI && !X86_VISWS
  22.675 -	default PCI_GOANY
  22.676 -	---help---
  22.677 -	  On PCI systems, the BIOS can be used to detect the PCI devices and
  22.678 -	  determine their configuration. However, some old PCI motherboards
  22.679 -	  have BIOS bugs and may crash if this is done. Also, some embedded
  22.680 -	  PCI-based systems don't have any BIOS at all. Linux can also try to
  22.681 -	  detect the PCI hardware directly without using the BIOS.
  22.682 -
  22.683 -	  With this option, you can specify how Linux should detect the
  22.684 -	  PCI devices. If you choose "BIOS", the BIOS will be used,
  22.685 -	  if you choose "Direct", the BIOS won't be used, and if you
  22.686 -	  choose "MMConfig", then PCI Express MMCONFIG will be used.
  22.687 -	  If you choose "Any", the kernel will try MMCONFIG, then the
  22.688 -	  direct access method and falls back to the BIOS if that doesn't
  22.689 -	  work. If unsure, go with the default, which is "Any".
  22.690 -
  22.691 -config PCI_GOBIOS
  22.692 -	bool "BIOS"
  22.693 -
  22.694 -config PCI_GOMMCONFIG
  22.695 -	bool "MMConfig"
  22.696 -
  22.697 -config PCI_GODIRECT
  22.698 -	bool "Direct"
  22.699 -
  22.700 -config PCI_GOANY
  22.701 -	bool "Any"
  22.702 -
  22.703 -endchoice
  22.704 -
  22.705 -config PCI_BIOS
  22.706 -	bool
  22.707 -	depends on !X86_VISWS && PCI && (PCI_GOBIOS || PCI_GOANY)
  22.708 -	default y
  22.709 -
  22.710 -config PCI_DIRECT
  22.711 -	bool
  22.712 - 	depends on PCI && ((PCI_GODIRECT || PCI_GOANY) || X86_VISWS)
  22.713 -	default y
  22.714 -
  22.715 -source "drivers/pci/Kconfig"
  22.716 -
  22.717 -config ISA
  22.718 -	bool "ISA support"
  22.719 -	depends on !(X86_VOYAGER || X86_VISWS)
  22.720 -	help
  22.721 -	  Find out whether you have ISA slots on your motherboard.  ISA is the
  22.722 -	  name of a bus system, i.e. the way the CPU talks to the other stuff
  22.723 -	  inside your box.  Other bus systems are PCI, EISA, MicroChannel
  22.724 -	  (MCA) or VESA.  ISA is an older system, now being displaced by PCI;
  22.725 -	  newer boards don't support it.  If you have ISA, say Y, otherwise N.
  22.726 -
  22.727 -config EISA
  22.728 -	bool "EISA support"
  22.729 -	depends on ISA
  22.730 -	---help---
  22.731 -	  The Extended Industry Standard Architecture (EISA) bus was
  22.732 -	  developed as an open alternative to the IBM MicroChannel bus.
  22.733 -
  22.734 -	  The EISA bus provided some of the features of the IBM MicroChannel
  22.735 -	  bus while maintaining backward compatibility with cards made for
  22.736 -	  the older ISA bus.  The EISA bus saw limited use between 1988 and
  22.737 -	  1995 when it was made obsolete by the PCI bus.
  22.738 -
  22.739 -	  Say Y here if you are building a kernel for an EISA-based machine.
  22.740 -
  22.741 -	  Otherwise, say N.
  22.742 -
  22.743 -source "drivers/eisa/Kconfig"
  22.744 -
  22.745 -config MCA
  22.746 -	bool "MCA support"
  22.747 -	depends on !(X86_VISWS || X86_VOYAGER)
  22.748 -	help
  22.749 -	  MicroChannel Architecture is found in some IBM PS/2 machines and
  22.750 -	  laptops.  It is a bus system similar to PCI or ISA. See
  22.751 -	  <file:Documentation/mca.txt> (and especially the web page given
  22.752 -	  there) before attempting to build an MCA bus kernel.
  22.753 -
  22.754 -config MCA
  22.755 -	depends on X86_VOYAGER
  22.756 -	default y if X86_VOYAGER
  22.757 -
  22.758 -source "drivers/mca/Kconfig"
  22.759 -
  22.760 -config SCx200
  22.761 -	tristate "NatSemi SCx200 support"
  22.762 -	depends on !X86_VOYAGER
  22.763 -	help
  22.764 -	  This provides basic support for the National Semiconductor SCx200 
  22.765 -	  processor.  Right now this is just a driver for the GPIO pins.
  22.766 -
  22.767 -	  If you don't know what to do here, say N.
  22.768 -
  22.769 -	  This support is also available as a module.  If compiled as a
  22.770 -	  module, it will be called scx200.
  22.771 -
  22.772 -source "drivers/pcmcia/Kconfig"
  22.773 -
  22.774 -source "drivers/pci/hotplug/Kconfig"
  22.775 -
  22.776 -endmenu
  22.777 -
  22.778 -endif
  22.779 -
  22.780 -menu "Kernel hacking"
  22.781 -
  22.782 -config DEBUG_KERNEL
  22.783 -	bool "Kernel debugging"
  22.784 -	help
  22.785 -	  Say Y here if you are developing drivers or trying to debug and
  22.786 -	  identify kernel problems.
  22.787 -
  22.788 -config EARLY_PRINTK
  22.789 -	bool "Early printk" if EMBEDDED
  22.790 -	default y
  22.791 -	help
  22.792 -	  Write kernel log output directly into the VGA buffer or to a serial
  22.793 -	  port.
  22.794 -
  22.795 -	  This is useful for kernel debugging when your machine crashes very
  22.796 -	  early before the console code is initialized. For normal operation
  22.797 -	  it is not recommended because it looks ugly and doesn't cooperate
  22.798 -	  with klogd/syslogd or the X server. You should normally N here,
  22.799 -	  unless you want to debug such a crash.
  22.800 -
  22.801 -config DEBUG_STACKOVERFLOW
  22.802 -	bool "Check for stack overflows"
  22.803 -	depends on DEBUG_KERNEL
  22.804 -
  22.805 -config DEBUG_STACK_USAGE
  22.806 -	bool "Stack utilization instrumentation"
  22.807 -	depends on DEBUG_KERNEL
  22.808 -	help
  22.809 -	  Enables the display of the minimum amount of free stack which each
  22.810 -	  task has ever had available in the sysrq-T and sysrq-P debug output.
  22.811 -
  22.812 -	  This option will slow down process creation somewhat.
  22.813 -
  22.814 -config DEBUG_SLAB
  22.815 -	bool "Debug memory allocations"
  22.816 -	depends on DEBUG_KERNEL
  22.817 -	help
  22.818 -	  Say Y here to have the kernel do limited verification on memory
  22.819 -	  allocation as well as poisoning memory on free to catch use of freed
  22.820 -	  memory.
  22.821 -
  22.822 -config MAGIC_SYSRQ
  22.823 -	bool "Magic SysRq key"
  22.824 -	depends on DEBUG_KERNEL
  22.825 -	help
  22.826 -	  If you say Y here, you will have some control over the system even
  22.827 -	  if the system crashes for example during kernel debugging (e.g., you
  22.828 -	  will be able to flush the buffer cache to disk, reboot the system
  22.829 -	  immediately or dump some status information). This is accomplished
  22.830 -	  by pressing various keys while holding SysRq (Alt+PrintScreen). It
  22.831 -	  also works on a serial console (on PC hardware at least), if you
  22.832 -	  send a BREAK and then within 5 seconds a command keypress. The
  22.833 -	  keys are documented in <file:Documentation/sysrq.txt>. Don't say Y
  22.834 -	  unless you really know what this hack does.
  22.835 -
  22.836 -config DEBUG_SPINLOCK
  22.837 -	bool "Spinlock debugging"
  22.838 -	depends on DEBUG_KERNEL
  22.839 -	help
  22.840 -	  Say Y here and build SMP to catch missing spinlock initialization
  22.841 -	  and certain other kinds of spinlock errors commonly made.  This is
  22.842 -	  best used in conjunction with the NMI watchdog so that spinlock
  22.843 -	  deadlocks are also debuggable.
  22.844 -
  22.845 -config DEBUG_PAGEALLOC
  22.846 -	bool "Page alloc debugging"
  22.847 -	depends on DEBUG_KERNEL
  22.848 -	help
  22.849 -	  Unmap pages from the kernel linear mapping after free_pages().
  22.850 -	  This results in a large slowdown, but helps to find certain types
  22.851 -	  of memory corruptions.
  22.852 -
  22.853 -config DEBUG_HIGHMEM
  22.854 -	bool "Highmem debugging"
  22.855 -	depends on DEBUG_KERNEL && HIGHMEM
  22.856 -	help
  22.857 -	  This options enables addition error checking for high memory systems.
  22.858 -	  Disable for production systems.
  22.859 -
  22.860 -config DEBUG_INFO
  22.861 -	bool "Compile the kernel with debug info"
  22.862 -	depends on DEBUG_KERNEL
  22.863 -	help
  22.864 -          If you say Y here the resulting kernel image will include
  22.865 -	  debugging info resulting in a larger kernel image.
  22.866 -	  Say Y here only if you plan to use gdb to debug the kernel.
  22.867 -	  If you don't debug the kernel, you can say N.
  22.868 -	  
  22.869 -config DEBUG_SPINLOCK_SLEEP
  22.870 -	bool "Sleep-inside-spinlock checking"
  22.871 -	help
  22.872 -	  If you say Y here, various routines which may sleep will become very
  22.873 -	  noisy if they are called with a spinlock held.	
  22.874 -
  22.875 -config FRAME_POINTER
  22.876 -	bool "Compile the kernel with frame pointers"
  22.877 -	help
  22.878 -	  If you say Y here the resulting kernel image will be slightly larger
  22.879 -	  and slower, but it will give very useful debugging information.
  22.880 -	  If you don't debug the kernel, you can say N, but we may not be able
  22.881 -	  to solve problems without frame pointers.
  22.882 -
  22.883 -config 4KSTACKS
  22.884 -	bool "Use 4Kb for kernel stacks instead of 8Kb"
  22.885 -	help
  22.886 -	  If you say Y here the kernel will use a 4Kb stacksize for the
  22.887 -	  kernel stack attached to each process/thread. This facilitates
  22.888 -	  running more threads on a system and also reduces the pressure
  22.889 -	  on the VM subsystem for higher order allocations. This option
  22.890 -	  will also use IRQ stacks to compensate for the reduced stackspace.
  22.891 -
  22.892 -config X86_FIND_SMP_CONFIG
  22.893 -	bool
  22.894 -	depends on X86_LOCAL_APIC || X86_VOYAGER
  22.895 -	default y
  22.896 -
  22.897 -config X86_MPPARSE
  22.898 -	bool
  22.899 -	depends on X86_LOCAL_APIC && !X86_VISWS
  22.900 -	default y
  22.901 -
  22.902 -endmenu
  22.903 -
  22.904 -config X86_SMP
  22.905 -	bool
  22.906 -	depends on SMP && !X86_VOYAGER
  22.907 -	default y
  22.908 -
  22.909 -config X86_HT
  22.910 -	bool
  22.911 -	depends on SMP && !(X86_VISWS || X86_VOYAGER)
  22.912 -	default y
  22.913 -
  22.914 -config X86_BIOS_REBOOT
  22.915 -	bool
  22.916 -	depends on !(X86_VISWS || X86_VOYAGER)
  22.917 -	default y
  22.918 -
  22.919 -config X86_TRAMPOLINE
  22.920 -	bool
  22.921 -	depends on X86_SMP || (X86_VOYAGER && SMP)
  22.922 -	default y
  22.923 -
  22.924 -# std_resources is overridden for pc9800, but that's not
  22.925 -# a currently selectable arch choice
  22.926 -config X86_STD_RESOURCES
  22.927 -	bool
  22.928 -	default y
  22.929 -
  22.930 -config PC
  22.931 -	bool
  22.932 -	depends on X86 && !EMBEDDED
  22.933 -	default y
  22.934 -
  22.935 -endmenu
    23.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/Makefile	Fri Aug 27 08:43:54 2004 +0000
    23.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.3 @@ -1,97 +0,0 @@
    23.4 -#
    23.5 -# i386/Makefile
    23.6 -#
    23.7 -# This file is included by the global makefile so that you can add your own
    23.8 -# architecture-specific flags and dependencies. Remember to do have actions
    23.9 -# for "archclean" cleaning up for this architecture.
   23.10 -#
   23.11 -# This file is subject to the terms and conditions of the GNU General Public
   23.12 -# License.  See the file "COPYING" in the main directory of this archive
   23.13 -# for more details.
   23.14 -#
   23.15 -# Copyright (C) 1994 by Linus Torvalds
   23.16 -#
   23.17 -# 19990713  Artur Skawina <skawina@geocities.com>
   23.18 -#           Added '-march' and '-mpreferred-stack-boundary' support
   23.19 -#
   23.20 -
   23.21 -XENARCH	:= $(subst ",,$(CONFIG_XENARCH))
   23.22 -
   23.23 -LDFLAGS		:= -m elf_i386
   23.24 -LDFLAGS_vmlinux :=
   23.25 -CHECK		:= $(CHECK) -D__i386__=1
   23.26 -
   23.27 -CFLAGS += -pipe -msoft-float
   23.28 -
   23.29 -# prevent gcc from keeping the stack 16 byte aligned
   23.30 -CFLAGS += $(call check_gcc,-mpreferred-stack-boundary=2,)
   23.31 -
   23.32 -align := $(subst -functions=0,,$(call check_gcc,-falign-functions=0,-malign-functions=0))
   23.33 -
   23.34 -cflags-$(CONFIG_M386)		+= -march=i386
   23.35 -cflags-$(CONFIG_M486)		+= -march=i486
   23.36 -cflags-$(CONFIG_M586)		+= -march=i586
   23.37 -cflags-$(CONFIG_M586TSC)	+= -march=i586
   23.38 -cflags-$(CONFIG_M586MMX)	+= $(call check_gcc,-march=pentium-mmx,-march=i586)
   23.39 -cflags-$(CONFIG_M686)		+= -march=i686
   23.40 -cflags-$(CONFIG_MPENTIUMII)	+= $(call check_gcc,-march=pentium2,-march=i686)
   23.41 -cflags-$(CONFIG_MPENTIUMIII)	+= $(call check_gcc,-march=pentium3,-march=i686)
   23.42 -cflags-$(CONFIG_MPENTIUMM)	+= $(call check_gcc,-march=pentium3,-march=i686)
   23.43 -cflags-$(CONFIG_MPENTIUM4)	+= $(call check_gcc,-march=pentium4,-march=i686)
   23.44 -cflags-$(CONFIG_MK6)		+= -march=k6
   23.45 -# Please note, that patches that add -march=athlon-xp and friends are pointless.
   23.46 -# They make zero difference whatsosever to performance at this time.
   23.47 -cflags-$(CONFIG_MK7)		+= $(call check_gcc,-march=athlon,-march=i686 $(align)-functions=4)
   23.48 -cflags-$(CONFIG_MK8)		+= $(call check_gcc,-march=k8,$(call check_gcc,-march=athlon,-march=i686 $(align)-functions=4))
   23.49 -cflags-$(CONFIG_MCRUSOE)	+= -march=i686 $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0
   23.50 -cflags-$(CONFIG_MWINCHIPC6)	+= $(call check_gcc,-march=winchip-c6,-march=i586)
   23.51 -cflags-$(CONFIG_MWINCHIP2)	+= $(call check_gcc,-march=winchip2,-march=i586)
   23.52 -cflags-$(CONFIG_MWINCHIP3D)	+= $(call check_gcc,-march=winchip2,-march=i586)
   23.53 -cflags-$(CONFIG_MCYRIXIII)	+= $(call check_gcc,-march=c3,-march=i486) $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0
   23.54 -cflags-$(CONFIG_MVIAC3_2)	+= $(call check_gcc,-march=c3-2,-march=i686)
   23.55 -
   23.56 -# AMD Elan support
   23.57 -cflags-$(CONFIG_X86_ELAN)	+= -march=i486
   23.58 -
   23.59 -# -mregparm=3 works ok on gcc-3.0 and later
   23.60 -#
   23.61 -GCC_VERSION			:= $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))
   23.62 -cflags-$(CONFIG_REGPARM) 	+= $(shell if [ $(GCC_VERSION) -ge 0300 ] ; then echo "-mregparm=3"; fi ;)
   23.63 -
   23.64 -# Disable unit-at-a-time mode, it makes gcc use a lot more stack
   23.65 -# due to the lack of sharing of stacklots.
   23.66 -CFLAGS += $(call check_gcc,-fno-unit-at-a-time,)
   23.67 -
   23.68 -CFLAGS += $(cflags-y)
   23.69 -
   23.70 -head-y := arch/xen/i386/kernel/head.o arch/xen/i386/kernel/init_task.o
   23.71 -
   23.72 -libs-y 					+= arch/i386/lib/
   23.73 -core-y					+= arch/xen/i386/kernel/ \
   23.74 -					   arch/xen/i386/mm/
   23.75 -# \
   23.76 -#					   arch/xen/$(mcore-y)/
   23.77 -drivers-$(CONFIG_MATH_EMULATION)	+= arch/i386/math-emu/
   23.78 -drivers-$(CONFIG_PCI)			+= arch/xen/i386/pci/
   23.79 -# must be linked after kernel/
   23.80 -drivers-$(CONFIG_OPROFILE)		+= arch/i386/oprofile/
   23.81 -drivers-$(CONFIG_PM)			+= arch/i386/power/
   23.82 -
   23.83 -# for clean
   23.84 -obj-	+= kernel/ mm/ pci/
   23.85 -#obj-	+= ../../i386/lib/ ../../i386/mm/ 
   23.86 -#../../i386/$(mcore-y)/
   23.87 -#obj-	+= ../../i386/pci/ ../../i386/oprofile/ ../../i386/power/
   23.88 -
   23.89 -xenflags-y += -Iinclude/asm-xen/asm-i386/mach-xen
   23.90 -CFLAGS += $(xenflags-y)
   23.91 -AFLAGS += $(xenflags-y)
   23.92 -
   23.93 -prepare: include/asm-$(XENARCH)/asm_offsets.h
   23.94 -CLEAN_FILES += include/asm-$(XENARCH)/asm_offsets.h
   23.95 -
   23.96 -arch/$(XENARCH)/kernel/asm-offsets.s: include/asm include/.asm-ignore \
   23.97 -	include/linux/version.h include/config/MARKER
   23.98 -
   23.99 -include/asm-$(XENARCH)/asm_offsets.h: arch/$(XENARCH)/kernel/asm-offsets.s
  23.100 -	$(call filechk,gen-asm-offsets)
    24.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/Makefile	Fri Aug 27 08:43:54 2004 +0000
    24.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.3 @@ -1,92 +0,0 @@
    24.4 -#
    24.5 -# Makefile for the linux kernel.
    24.6 -#
    24.7 -
    24.8 -XENARCH	:= $(subst ",,$(CONFIG_XENARCH))
    24.9 -
   24.10 -CFLAGS	+= -Iarch/$(XENARCH)/kernel
   24.11 -
   24.12 -extra-y := head.o init_task.o vmlinux.lds.s
   24.13 -
   24.14 -obj-y	:= traps.o irq.o ldt.o setup.o entry.o time.o pci-dma.o process.o \
   24.15 -		ioport.o signal.o i386_ksyms.o
   24.16 -
   24.17 -c-obj-y	:= semaphore.o vm86.o \
   24.18 -		ptrace.o sys_i386.o \
   24.19 -		i387.o dmi_scan.o bootflag.o \
   24.20 -		doublefault.o
   24.21 -s-obj-y	:=
   24.22 -
   24.23 -obj-y				+= cpu/
   24.24 -obj-y				+= timers/
   24.25 -c-obj-$(CONFIG_ACPI_BOOT)	+= acpi/
   24.26 -#c-obj-$(CONFIG_X86_BIOS_REBOOT)	+= reboot.o
   24.27 -c-obj-$(CONFIG_MCA)		+= mca.o
   24.28 -c-obj-$(CONFIG_X86_MSR)		+= msr.o
   24.29 -c-obj-$(CONFIG_X86_CPUID)	+= cpuid.o
   24.30 -c-obj-$(CONFIG_MICROCODE)	+= microcode.o
   24.31 -c-obj-$(CONFIG_APM)		+= apm.o
   24.32 -c-obj-$(CONFIG_X86_SMP)		+= smp.o smpboot.o
   24.33 -c-obj-$(CONFIG_X86_TRAMPOLINE)	+= trampoline.o
   24.34 -c-obj-$(CONFIG_X86_MPPARSE)	+= mpparse.o
   24.35 -c-obj-$(CONFIG_X86_LOCAL_APIC)	+= apic.o nmi.o
   24.36 -c-obj-$(CONFIG_X86_IO_APIC)	+= io_apic.o
   24.37 -c-obj-$(CONFIG_X86_NUMAQ)	+= numaq.o
   24.38 -c-obj-$(CONFIG_X86_SUMMIT_NUMA)	+= summit.o
   24.39 -c-obj-$(CONFIG_MODULES)		+= module.o
   24.40 -obj-y				+= sysenter.o
   24.41 -obj-y				+= vsyscall.o
   24.42 -c-obj-$(CONFIG_ACPI_SRAT) 	+= srat.o
   24.43 -c-obj-$(CONFIG_HPET_TIMER) 	+= time_hpet.o
   24.44 -c-obj-$(CONFIG_EFI) 		+= efi.o efi_stub.o
   24.45 -c-obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
   24.46 -c-obj-$(CONFIG_X86_STD_RESOURCES)	+= std_resources.o
   24.47 -
   24.48 -EXTRA_AFLAGS   := -traditional
   24.49 -
   24.50 -c-obj-$(CONFIG_SCx200)		+= scx200.o
   24.51 -
   24.52 -AFLAGS_vmlinux.lds.o += -U$(XENARCH)
   24.53 -
   24.54 -# vsyscall.o contains the vsyscall DSO images as __initdata.
   24.55 -# We must build both images before we can assemble it.
   24.56 -# Note: kbuild does not track this dependency due to usage of .incbin
   24.57 -$(obj)/vsyscall.o: $(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so
   24.58 -targets += $(foreach F,int80 sysenter,vsyscall-$F.o vsyscall-$F.so)
   24.59 -
   24.60 -# The DSO images are built using a special linker script.
   24.61 -quiet_cmd_syscall = SYSCALL $@
   24.62 -      cmd_syscall = $(CC) -nostdlib $(SYSCFLAGS_$(@F)) \
   24.63 -		          -Wl,-T,$(filter-out FORCE,$^) -o $@
   24.64 -
   24.65 -vsyscall-flags = -shared -s -Wl,-soname=linux-gate.so.1
   24.66 -SYSCFLAGS_vsyscall-sysenter.so	= $(vsyscall-flags)
   24.67 -SYSCFLAGS_vsyscall-int80.so	= $(vsyscall-flags)
   24.68 -
   24.69 -$(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so: \
   24.70 -$(obj)/vsyscall-%.so: $(obj)/vsyscall.lds $(obj)/vsyscall-%.o FORCE
   24.71 -	$(call if_changed,syscall)
   24.72 -
   24.73 -# We also create a special relocatable object that should mirror the symbol
   24.74 -# table and layout of the linked DSO.  With ld -R we can then refer to
   24.75 -# these symbols in the kernel code rather than hand-coded addresses.
   24.76 -extra-y += vsyscall-syms.o
   24.77 -$(obj)/built-in.o: $(obj)/vsyscall-syms.o
   24.78 -$(obj)/built-in.o: ld_flags += -R $(obj)/vsyscall-syms.o
   24.79 -
   24.80 -SYSCFLAGS_vsyscall-syms.o = -r
   24.81 -$(obj)/vsyscall-syms.o: $(obj)/vsyscall.lds $(obj)/vsyscall-sysenter.o FORCE
   24.82 -	$(call if_changed,syscall)
   24.83 -
   24.84 -c-link	:= init_task.o
   24.85 -s-link	:= vsyscall-int80.o vsyscall-sysenter.o vsyscall-sigreturn.o
   24.86 -
   24.87 -$(patsubst %.o,$(obj)/%.c,$(c-obj-y) $(c-link)) $(patsubst %.o,$(obj)/%.S,$(s-obj-y) $(s-link)):
   24.88 -	@ln -fsn $(srctree)/arch/i386/kernel/$(notdir $@) $@
   24.89 -
   24.90 -$(obj)/vsyscall-int80.S: $(obj)/vsyscall-sigreturn.S
   24.91 -
   24.92 -obj-y	+= $(c-obj-y) $(s-obj-y)
   24.93 -
   24.94 -clean-files += $(patsubst %.o,%.c,$(c-obj-y) $(c-obj-) $(c-link))
   24.95 -clean-files += $(patsubst %.o,%.S,$(s-obj-y) $(s-obj-) $(s-link))
    25.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/cpu/Makefile	Fri Aug 27 08:43:54 2004 +0000
    25.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.3 @@ -1,31 +0,0 @@
    25.4 -#
    25.5 -# Makefile for x86-compatible CPU details and quirks
    25.6 -#
    25.7 -
    25.8 -CFLAGS	+= -Iarch/i386/kernel/cpu
    25.9 -
   25.10 -obj-y	:=	common.o
   25.11 -c-obj-y	+=	proc.o
   25.12 -
   25.13 -c-obj-y	+=	amd.o
   25.14 -c-obj-y	+=	cyrix.o
   25.15 -c-obj-y	+=	centaur.o
   25.16 -c-obj-y	+=	transmeta.o
   25.17 -c-obj-y	+=	intel.o
   25.18 -c-obj-y	+=	rise.o
   25.19 -c-obj-y	+=	nexgen.o
   25.20 -c-obj-y	+=	umc.o
   25.21 -
   25.22 -#obj-$(CONFIG_X86_MCE)	+=	../../../../i386/kernel/cpu/mcheck/
   25.23 -
   25.24 -#obj-$(CONFIG_MTRR)	+= 	../../../../i386/kernel/cpu/mtrr/
   25.25 -#obj-$(CONFIG_CPU_FREQ)	+=	../../../../i386/kernel/cpu/cpufreq/
   25.26 -
   25.27 -c-link	:=
   25.28 -
   25.29 -$(patsubst %.o,$(obj)/%.c,$(c-obj-y) $(c-link)):
   25.30 -	@ln -fsn $(srctree)/arch/i386/kernel/cpu/$(notdir $@) $@
   25.31 -
   25.32 -obj-y	+= $(c-obj-y)
   25.33 -
   25.34 -clean-files += $(patsubst %.o,%.c,$(c-obj-y) $(c-obj-) $(c-link))
    26.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/cpu/common.c	Fri Aug 27 08:43:54 2004 +0000
    26.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.3 @@ -1,597 +0,0 @@
    26.4 -#include <linux/init.h>
    26.5 -#include <linux/string.h>
    26.6 -#include <linux/delay.h>
    26.7 -#include <linux/smp.h>
    26.8 -#include <asm/semaphore.h>
    26.9 -#include <asm/processor.h>
   26.10 -#include <asm/i387.h>
   26.11 -#include <asm/msr.h>
   26.12 -#include <asm/io.h>
   26.13 -#include <asm/mmu_context.h>
   26.14 -#include <asm-xen/hypervisor.h>
   26.15 -
   26.16 -#include "cpu.h"
   26.17 -
   26.18 -static int cachesize_override __initdata = -1;
   26.19 -static int disable_x86_fxsr __initdata = 0;
   26.20 -static int disable_x86_serial_nr __initdata = 1;
   26.21 -
   26.22 -struct cpu_dev * cpu_devs[X86_VENDOR_NUM] = {};
   26.23 -
   26.24 -extern void mcheck_init(struct cpuinfo_x86 *c);
   26.25 -
   26.26 -extern int disable_pse;
   26.27 -
   26.28 -static void default_init(struct cpuinfo_x86 * c)
   26.29 -{
   26.30 -	/* Not much we can do here... */
   26.31 -	/* Check if at least it has cpuid */
   26.32 -	if (c->cpuid_level == -1) {
   26.33 -		/* No cpuid. It must be an ancient CPU */
   26.34 -		if (c->x86 == 4)
   26.35 -			strcpy(c->x86_model_id, "486");
   26.36 -		else if (c->x86 == 3)
   26.37 -			strcpy(c->x86_model_id, "386");
   26.38 -	}
   26.39 -}
   26.40 -
   26.41 -static struct cpu_dev default_cpu = {
   26.42 -	.c_init	= default_init,
   26.43 -};
   26.44 -static struct cpu_dev * this_cpu = &default_cpu;
   26.45 -
   26.46 -static int __init cachesize_setup(char *str)
   26.47 -{
   26.48 -	get_option (&str, &cachesize_override);
   26.49 -	return 1;
   26.50 -}
   26.51 -__setup("cachesize=", cachesize_setup);
   26.52 -
   26.53 -int __init get_model_name(struct cpuinfo_x86 *c)
   26.54 -{
   26.55 -	unsigned int *v;
   26.56 -	char *p, *q;
   26.57 -
   26.58 -	if (cpuid_eax(0x80000000) < 0x80000004)
   26.59 -		return 0;
   26.60 -
   26.61 -	v = (unsigned int *) c->x86_model_id;
   26.62 -	cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]);
   26.63 -	cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]);
   26.64 -	cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]);
   26.65 -	c->x86_model_id[48] = 0;
   26.66 -
   26.67 -	/* Intel chips right-justify this string for some dumb reason;
   26.68 -	   undo that brain damage */
   26.69 -	p = q = &c->x86_model_id[0];
   26.70 -	while ( *p == ' ' )
   26.71 -	     p++;
   26.72 -	if ( p != q ) {
   26.73 -	     while ( *p )
   26.74 -		  *q++ = *p++;
   26.75 -	     while ( q <= &c->x86_model_id[48] )
   26.76 -		  *q++ = '\0';	/* Zero-pad the rest */
   26.77 -	}
   26.78 -
   26.79 -	return 1;
   26.80 -}
   26.81 -
   26.82 -
   26.83 -void __init display_cacheinfo(struct cpuinfo_x86 *c)
   26.84 -{
   26.85 -	unsigned int n, dummy, ecx, edx, l2size;
   26.86 -
   26.87 -	n = cpuid_eax(0x80000000);
   26.88 -
   26.89 -	if (n >= 0x80000005) {
   26.90 -		cpuid(0x80000005, &dummy, &dummy, &ecx, &edx);
   26.91 -		printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d bytes/line)\n",
   26.92 -			edx>>24, edx&0xFF, ecx>>24, ecx&0xFF);
   26.93 -		c->x86_cache_size=(ecx>>24)+(edx>>24);	
   26.94 -	}
   26.95 -
   26.96 -	if (n < 0x80000006)	/* Some chips just has a large L1. */
   26.97 -		return;
   26.98 -
   26.99 -	ecx = cpuid_ecx(0x80000006);
  26.100 -	l2size = ecx >> 16;
  26.101 -	
  26.102 -	/* do processor-specific cache resizing */
  26.103 -	if (this_cpu->c_size_cache)
  26.104 -		l2size = this_cpu->c_size_cache(c,l2size);
  26.105 -
  26.106 -	/* Allow user to override all this if necessary. */
  26.107 -	if (cachesize_override != -1)
  26.108 -		l2size = cachesize_override;
  26.109 -
  26.110 -	if ( l2size == 0 )
  26.111 -		return;		/* Again, no L2 cache is possible */
  26.112 -
  26.113 -	c->x86_cache_size = l2size;
  26.114 -
  26.115 -	printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n",
  26.116 -	       l2size, ecx & 0xFF);
  26.117 -}
  26.118 -
  26.119 -/* Naming convention should be: <Name> [(<Codename>)] */
  26.120 -/* This table only is used unless init_<vendor>() below doesn't set it; */
  26.121 -/* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used */
  26.122 -
  26.123 -/* Look up CPU names by table lookup. */
  26.124 -static char __init *table_lookup_model(struct cpuinfo_x86 *c)
  26.125 -{
  26.126 -	struct cpu_model_info *info;
  26.127 -
  26.128 -	if ( c->x86_model >= 16 )
  26.129 -		return NULL;	/* Range check */
  26.130 -
  26.131 -	if (!this_cpu)
  26.132 -		return NULL;
  26.133 -
  26.134 -	info = this_cpu->c_models;
  26.135 -
  26.136 -	while (info && info->family) {
  26.137 -		if (info->family == c->x86)
  26.138 -			return info->model_names[c->x86_model];
  26.139 -		info++;
  26.140 -	}
  26.141 -	return NULL;		/* Not found */
  26.142 -}
  26.143 -
  26.144 -
  26.145 -void __init get_cpu_vendor(struct cpuinfo_x86 *c, int early)
  26.146 -{
  26.147 -	char *v = c->x86_vendor_id;
  26.148 -	int i;
  26.149 -
  26.150 -	for (i = 0; i < X86_VENDOR_NUM; i++) {
  26.151 -		if (cpu_devs[i]) {
  26.152 -			if (!strcmp(v,cpu_devs[i]->c_ident[0]) ||
  26.153 -			    (cpu_devs[i]->c_ident[1] && 
  26.154 -			     !strcmp(v,cpu_devs[i]->c_ident[1]))) {
  26.155 -				c->x86_vendor = i;
  26.156 -				if (!early)
  26.157 -					this_cpu = cpu_devs[i];
  26.158 -				break;
  26.159 -			}
  26.160 -		}
  26.161 -	}
  26.162 -}
  26.163 -
  26.164 -
  26.165 -static int __init x86_fxsr_setup(char * s)
  26.166 -{
  26.167 -	disable_x86_fxsr = 1;
  26.168 -	return 1;
  26.169 -}
  26.170 -__setup("nofxsr", x86_fxsr_setup);
  26.171 -
  26.172 -
  26.173 -/* Standard macro to see if a specific flag is changeable */
  26.174 -static inline int flag_is_changeable_p(u32 flag)
  26.175 -{
  26.176 -	u32 f1, f2;
  26.177 -
  26.178 -	asm("pushfl\n\t"
  26.179 -	    "pushfl\n\t"
  26.180 -	    "popl %0\n\t"
  26.181 -	    "movl %0,%1\n\t"
  26.182 -	    "xorl %2,%0\n\t"
  26.183 -	    "pushl %0\n\t"
  26.184 -	    "popfl\n\t"
  26.185 -	    "pushfl\n\t"
  26.186 -	    "popl %0\n\t"
  26.187 -	    "popfl\n\t"
  26.188 -	    : "=&r" (f1), "=&r" (f2)
  26.189 -	    : "ir" (flag));
  26.190 -
  26.191 -	return ((f1^f2) & flag) != 0;
  26.192 -}
  26.193 -
  26.194 -
  26.195 -/* Probe for the CPUID instruction */
  26.196 -int __init have_cpuid_p(void)
  26.197 -{
  26.198 -	return flag_is_changeable_p(X86_EFLAGS_ID);
  26.199 -}
  26.200 -
  26.201 -/* Do minimum CPU detection early.
  26.202 -   Fields really needed: vendor, cpuid_level, family, model, mask, cache alignment.
  26.203 -   The others are not touched to avoid unwanted side effects. */
  26.204 -void __init early_cpu_detect(void)
  26.205 -{
  26.206 -	struct cpuinfo_x86 *c = &boot_cpu_data;
  26.207 -
  26.208 -	c->x86_cache_alignment = 32;
  26.209 -
  26.210 -	if (!have_cpuid_p())
  26.211 -		return;
  26.212 -
  26.213 -	/* Get vendor name */
  26.214 -	cpuid(0x00000000, &c->cpuid_level,
  26.215 -	      (int *)&c->x86_vendor_id[0],
  26.216 -	      (int *)&c->x86_vendor_id[8],
  26.217 -	      (int *)&c->x86_vendor_id[4]);
  26.218 -
  26.219 -	get_cpu_vendor(c, 1);
  26.220 -
  26.221 -	c->x86 = 4;
  26.222 -	if (c->cpuid_level >= 0x00000001) {
  26.223 -		u32 junk, tfms, cap0, misc;
  26.224 -		cpuid(0x00000001, &tfms, &misc, &junk, &cap0);
  26.225 -		c->x86 = (tfms >> 8) & 15;
  26.226 -		c->x86_model = (tfms >> 4) & 15;
  26.227 -		if (c->x86 == 0xf) {
  26.228 -			c->x86 += (tfms >> 20) & 0xff;
  26.229 -			c->x86_model += ((tfms >> 16) & 0xF) << 4;
  26.230 -		}
  26.231 -		c->x86_mask = tfms & 15;
  26.232 -		if (cap0 & (1<<19))
  26.233 -			c->x86_cache_alignment = ((misc >> 8) & 0xff) * 8;
  26.234 -	}
  26.235 -
  26.236 -	early_intel_workaround(c);
  26.237 -}
  26.238 -
  26.239 -void __init generic_identify(struct cpuinfo_x86 * c)
  26.240 -{
  26.241 -	u32 tfms, xlvl;
  26.242 -	int junk;
  26.243 -
  26.244 -	if (have_cpuid_p()) {
  26.245 -		/* Get vendor name */
  26.246 -		cpuid(0x00000000, &c->cpuid_level,
  26.247 -		      (int *)&c->x86_vendor_id[0],
  26.248 -		      (int *)&c->x86_vendor_id[8],
  26.249 -		      (int *)&c->x86_vendor_id[4]);
  26.250 -		
  26.251 -		get_cpu_vendor(c, 0);
  26.252 -		/* Initialize the standard set of capabilities */
  26.253 -		/* Note that the vendor-specific code below might override */
  26.254 -	
  26.255 -		/* Intel-defined flags: level 0x00000001 */
  26.256 -		if ( c->cpuid_level >= 0x00000001 ) {
  26.257 -			u32 capability, excap;
  26.258 -			cpuid(0x00000001, &tfms, &junk, &excap, &capability);
  26.259 -			c->x86_capability[0] = capability;
  26.260 -			c->x86_capability[4] = excap;
  26.261 -			c->x86 = (tfms >> 8) & 15;
  26.262 -			c->x86_model = (tfms >> 4) & 15;
  26.263 -			if (c->x86 == 0xf) {
  26.264 -				c->x86 += (tfms >> 20) & 0xff;
  26.265 -				c->x86_model += ((tfms >> 16) & 0xF) << 4;
  26.266 -			} 
  26.267 -			c->x86_mask = tfms & 15;
  26.268 -		} else {
  26.269 -			/* Have CPUID level 0 only - unheard of */
  26.270 -			c->x86 = 4;
  26.271 -		}
  26.272 -
  26.273 -		/* AMD-defined flags: level 0x80000001 */
  26.274 -		xlvl = cpuid_eax(0x80000000);
  26.275 -		if ( (xlvl & 0xffff0000) == 0x80000000 ) {
  26.276 -			if ( xlvl >= 0x80000001 )
  26.277 -				c->x86_capability[1] = cpuid_edx(0x80000001);
  26.278 -			if ( xlvl >= 0x80000004 )
  26.279 -				get_model_name(c); /* Default name */
  26.280 -		}
  26.281 -	}
  26.282 -}
  26.283 -
  26.284 -static void __init squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
  26.285 -{
  26.286 -	if (cpu_has(c, X86_FEATURE_PN) && disable_x86_serial_nr ) {
  26.287 -		/* Disable processor serial number */
  26.288 -		unsigned long lo,hi;
  26.289 -		rdmsr(MSR_IA32_BBL_CR_CTL,lo,hi);
  26.290 -		lo |= 0x200000;
  26.291 -		wrmsr(MSR_IA32_BBL_CR_CTL,lo,hi);
  26.292 -		printk(KERN_NOTICE "CPU serial number disabled.\n");
  26.293 -		clear_bit(X86_FEATURE_PN, c->x86_capability);
  26.294 -
  26.295 -		/* Disabling the serial number may affect the cpuid level */
  26.296 -		c->cpuid_level = cpuid_eax(0);
  26.297 -	}
  26.298 -}
  26.299 -
  26.300 -static int __init x86_serial_nr_setup(char *s)
  26.301 -{
  26.302 -	disable_x86_serial_nr = 0;
  26.303 -	return 1;
  26.304 -}
  26.305 -__setup("serialnumber", x86_serial_nr_setup);
  26.306 -
  26.307 -
  26.308 -
  26.309 -/*
  26.310 - * This does the hard work of actually picking apart the CPU stuff...
  26.311 - */
  26.312 -void __init identify_cpu(struct cpuinfo_x86 *c)
  26.313 -{
  26.314 -	int i;
  26.315 -
  26.316 -	c->loops_per_jiffy = loops_per_jiffy;
  26.317 -	c->x86_cache_size = -1;
  26.318 -	c->x86_vendor = X86_VENDOR_UNKNOWN;
  26.319 -	c->cpuid_level = -1;	/* CPUID not detected */
  26.320 -	c->x86_model = c->x86_mask = 0;	/* So far unknown... */
  26.321 -	c->x86_vendor_id[0] = '\0'; /* Unset */
  26.322 -	c->x86_model_id[0] = '\0';  /* Unset */
  26.323 -	memset(&c->x86_capability, 0, sizeof c->x86_capability);
  26.324 -
  26.325 -	if (!have_cpuid_p()) {
  26.326 -		/* First of all, decide if this is a 486 or higher */
  26.327 -		/* It's a 486 if we can modify the AC flag */
  26.328 -		if ( flag_is_changeable_p(X86_EFLAGS_AC) )
  26.329 -			c->x86 = 4;
  26.330 -		else
  26.331 -			c->x86 = 3;
  26.332 -	}
  26.333 -
  26.334 -	generic_identify(c);
  26.335 -
  26.336 -	printk(KERN_DEBUG "CPU:     After generic identify, caps: %08lx %08lx %08lx %08lx\n",
  26.337 -		c->x86_capability[0],
  26.338 -		c->x86_capability[1],
  26.339 -		c->x86_capability[2],
  26.340 -		c->x86_capability[3]);
  26.341 -
  26.342 -	if (this_cpu->c_identify) {
  26.343 -		this_cpu->c_identify(c);
  26.344 -
  26.345 -	printk(KERN_DEBUG "CPU:     After vendor identify, caps: %08lx %08lx %08lx %08lx\n",
  26.346 -		c->x86_capability[0],
  26.347 -		c->x86_capability[1],
  26.348 -		c->x86_capability[2],
  26.349 -		c->x86_capability[3]);
  26.350 -}
  26.351 -
  26.352 -	/*
  26.353 -	 * Vendor-specific initialization.  In this section we
  26.354 -	 * canonicalize the feature flags, meaning if there are
  26.355 -	 * features a certain CPU supports which CPUID doesn't
  26.356 -	 * tell us, CPUID claiming incorrect flags, or other bugs,
  26.357 -	 * we handle them here.
  26.358 -	 *
  26.359 -	 * At the end of this section, c->x86_capability better
  26.360 -	 * indicate the features this CPU genuinely supports!
  26.361 -	 */
  26.362 -	if (this_cpu->c_init)
  26.363 -		this_cpu->c_init(c);
  26.364 -
  26.365 -	/* Disable the PN if appropriate */
  26.366 -	squash_the_stupid_serial_number(c);
  26.367 -
  26.368 -	/*
  26.369 -	 * The vendor-specific functions might have changed features.  Now
  26.370 -	 * we do "generic changes."
  26.371 -	 */
  26.372 -
  26.373 -	/* TSC disabled? */
  26.374 -	if ( tsc_disable )
  26.375 -		clear_bit(X86_FEATURE_TSC, c->x86_capability);
  26.376 -
  26.377 -	/* FXSR disabled? */
  26.378 -	if (disable_x86_fxsr) {
  26.379 -		clear_bit(X86_FEATURE_FXSR, c->x86_capability);
  26.380 -		clear_bit(X86_FEATURE_XMM, c->x86_capability);
  26.381 -	}
  26.382 -
  26.383 -	if (disable_pse)
  26.384 -		clear_bit(X86_FEATURE_PSE, c->x86_capability);
  26.385 -
  26.386 -	/* If the model name is still unset, do table lookup. */
  26.387 -	if ( !c->x86_model_id[0] ) {
  26.388 -		char *p;
  26.389 -		p = table_lookup_model(c);
  26.390 -		if ( p )
  26.391 -			strcpy(c->x86_model_id, p);
  26.392 -		else
  26.393 -			/* Last resort... */
  26.394 -			sprintf(c->x86_model_id, "%02x/%02x",
  26.395 -				c->x86_vendor, c->x86_model);
  26.396 -	}
  26.397 -
  26.398 -	/* Now the feature flags better reflect actual CPU features! */
  26.399 -
  26.400 -	printk(KERN_DEBUG "CPU:     After all inits, caps: %08lx %08lx %08lx %08lx\n",
  26.401 -	       c->x86_capability[0],
  26.402 -	       c->x86_capability[1],
  26.403 -	       c->x86_capability[2],
  26.404 -	       c->x86_capability[3]);
  26.405 -
  26.406 -	/*
  26.407 -	 * On SMP, boot_cpu_data holds the common feature set between
  26.408 -	 * all CPUs; so make sure that we indicate which features are
  26.409 -	 * common between the CPUs.  The first time this routine gets
  26.410 -	 * executed, c == &boot_cpu_data.
  26.411 -	 */
  26.412 -	if ( c != &boot_cpu_data ) {
  26.413 -		/* AND the already accumulated flags with these */
  26.414 -		for ( i = 0 ; i < NCAPINTS ; i++ )
  26.415 -			boot_cpu_data.x86_capability[i] &= c->x86_capability[i];
  26.416 -	}
  26.417 -
  26.418 -	/* Init Machine Check Exception if available. */
  26.419 -#ifdef CONFIG_X86_MCE
  26.420 -	mcheck_init(c);
  26.421 -#endif
  26.422 -}
  26.423 -/*
  26.424 - *	Perform early boot up checks for a valid TSC. See arch/i386/kernel/time.c
  26.425 - */
  26.426 - 
  26.427 -void __init dodgy_tsc(void)
  26.428 -{
  26.429 -	if (( boot_cpu_data.x86_vendor == X86_VENDOR_CYRIX ) ||
  26.430 -	    ( boot_cpu_data.x86_vendor == X86_VENDOR_NSC   ))
  26.431 -		cpu_devs[X86_VENDOR_CYRIX]->c_init(&boot_cpu_data);
  26.432 -}
  26.433 -
  26.434 -void __init print_cpu_info(struct cpuinfo_x86 *c)
  26.435 -{
  26.436 -	char *vendor = NULL;
  26.437 -
  26.438 -	if (c->x86_vendor < X86_VENDOR_NUM)
  26.439 -		vendor = this_cpu->c_vendor;
  26.440 -	else if (c->cpuid_level >= 0)
  26.441 -		vendor = c->x86_vendor_id;
  26.442 -
  26.443 -	if (vendor && strncmp(c->x86_model_id, vendor, strlen(vendor)))
  26.444 -		printk("%s ", vendor);
  26.445 -
  26.446 -	if (!c->x86_model_id[0])
  26.447 -		printk("%d86", c->x86);
  26.448 -	else
  26.449 -		printk("%s", c->x86_model_id);
  26.450 -
  26.451 -	if (c->x86_mask || c->cpuid_level >= 0) 
  26.452 -		printk(" stepping %02x\n", c->x86_mask);
  26.453 -	else
  26.454 -		printk("\n");
  26.455 -}
  26.456 -
  26.457 -unsigned long cpu_initialized __initdata = 0;
  26.458 -
  26.459 -/* This is hacky. :)
  26.460 - * We're emulating future behavior.
  26.461 - * In the future, the cpu-specific init functions will be called implicitly
  26.462 - * via the magic of initcalls.
  26.463 - * They will insert themselves into the cpu_devs structure.
  26.464 - * Then, when cpu_init() is called, we can just iterate over that array.
  26.465 - */
  26.466 -
  26.467 -extern int intel_cpu_init(void);
  26.468 -extern int cyrix_init_cpu(void);
  26.469 -extern int nsc_init_cpu(void);
  26.470 -extern int amd_init_cpu(void);
  26.471 -extern int centaur_init_cpu(void);
  26.472 -extern int transmeta_init_cpu(void);
  26.473 -extern int rise_init_cpu(void);
  26.474 -extern int nexgen_init_cpu(void);
  26.475 -extern int umc_init_cpu(void);
  26.476 -void early_cpu_detect(void);
  26.477 -
  26.478 -void __init early_cpu_init(void)
  26.479 -{
  26.480 -	early_cpu_detect();
  26.481 -	intel_cpu_init();
  26.482 -	cyrix_init_cpu();
  26.483 -	nsc_init_cpu();
  26.484 -	amd_init_cpu();
  26.485 -	centaur_init_cpu();
  26.486 -	transmeta_init_cpu();
  26.487 -	rise_init_cpu();
  26.488 -	nexgen_init_cpu();
  26.489 -	umc_init_cpu();
  26.490 -
  26.491 -#ifdef CONFIG_DEBUG_PAGEALLOC
  26.492 -	/* pse is not compatible with on-the-fly unmapping,
  26.493 -	 * disable it even if the cpus claim to support it.
  26.494 -	 */
  26.495 -	clear_bit(X86_FEATURE_PSE, boot_cpu_data.x86_capability);
  26.496 -	disable_pse = 1;
  26.497 -#endif
  26.498 -}
  26.499 -
  26.500 -void __init cpu_gdt_init(struct Xgt_desc_struct *gdt_descr)
  26.501 -{
  26.502 -	unsigned long frames[gdt_descr->size >> PAGE_SHIFT];
  26.503 -	unsigned long va;
  26.504 -	int f;
  26.505 -
  26.506 -	for (va = gdt_descr->address, f = 0;
  26.507 -	     va < gdt_descr->address + gdt_descr->size;
  26.508 -	     va += PAGE_SIZE, f++) {
  26.509 -		frames[f] = virt_to_machine(va) >> PAGE_SHIFT;
  26.510 -		wrprotect_bootpt(swapper_pg_dir, (void *)va, 1);
  26.511 -	}
  26.512 -	flush_page_update_queue();
  26.513 -	if (HYPERVISOR_set_gdt(frames, gdt_descr->size / 8))
  26.514 -		BUG();
  26.515 -	lgdt_finish();
  26.516 -}
  26.517 -
  26.518 -/*
  26.519 - * cpu_init() initializes state that is per-CPU. Some data is already
  26.520 - * initialized (naturally) in the bootstrap process, such as the GDT
  26.521 - * and IDT. We reload them nevertheless, this function acts as a
  26.522 - * 'CPU state barrier', nothing should get across.
  26.523 - */
  26.524 -void __init cpu_init (void)
  26.525 -{
  26.526 -	int cpu = smp_processor_id();
  26.527 -	struct tss_struct * t = init_tss + cpu;
  26.528 -	struct thread_struct *thread = &current->thread;
  26.529 -
  26.530 -	if (test_and_set_bit(cpu, &cpu_initialized)) {
  26.531 -		printk(KERN_WARNING "CPU#%d already initialized!\n", cpu);
  26.532 -		for (;;) local_irq_enable();
  26.533 -	}
  26.534 -	printk(KERN_INFO "Initializing CPU#%d\n", cpu);
  26.535 -
  26.536 -	if (cpu_has_vme || cpu_has_tsc || cpu_has_de)
  26.537 -		clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);
  26.538 -	if (tsc_disable && cpu_has_tsc) {
  26.539 -		printk(KERN_NOTICE "Disabling TSC...\n");
  26.540 -		/**** FIX-HPA: DOES THIS REALLY BELONG HERE? ****/
  26.541 -		clear_bit(X86_FEATURE_TSC, boot_cpu_data.x86_capability);
  26.542 -		set_in_cr4(X86_CR4_TSD);
  26.543 -	}
  26.544 -
  26.545 -	/*
  26.546 -	 * Initialize the per-CPU GDT with the boot GDT,
  26.547 -	 * and set up the GDT descriptor:
  26.548 -	 */
  26.549 -	if (cpu) {
  26.550 -		cpu_gdt_descr[cpu].size = GDT_SIZE;
  26.551 -		cpu_gdt_descr[cpu].address = 0;	/* XXXcl alloc page */
  26.552 -		BUG();		/* XXXcl SMP */
  26.553 -		memcpy((void *)cpu_gdt_descr[cpu].address,
  26.554 -		    (void *)cpu_gdt_descr[0].address, GDT_SIZE);
  26.555 -	}
  26.556 -	/*
  26.557 -	 * Set up the per-thread TLS descriptor cache:
  26.558 -	 */
  26.559 -	memcpy(thread->tls_array, &get_cpu_gdt_table(cpu)[GDT_ENTRY_TLS_MIN],
  26.560 -	    GDT_ENTRY_TLS_ENTRIES * 8);
  26.561 -
  26.562 -	cpu_gdt_init(&cpu_gdt_descr[cpu]);
  26.563 -
  26.564 -	/*
  26.565 -	 * Delete NT
  26.566 -	 */
  26.567 -	__asm__("pushfl ; andl $0xffffbfff,(%esp) ; popfl");
  26.568 -
  26.569 -	/*
  26.570 -	 * Set up and load the per-CPU TSS and LDT
  26.571 -	 */
  26.572 -	atomic_inc(&init_mm.mm_count);
  26.573 -	current->active_mm = &init_mm;
  26.574 -	if (current->mm)
  26.575 -		BUG();
  26.576 -	enter_lazy_tlb(&init_mm, current);
  26.577 -
  26.578 -	load_esp0(t, thread);
  26.579 -
  26.580 -	load_LDT(&init_mm.context);
  26.581 -	flush_page_update_queue();
  26.582 -
  26.583 -	/* Clear %fs and %gs. */
  26.584 -	asm volatile ("xorl %eax, %eax; movl %eax, %fs; movl %eax, %gs");
  26.585 -
  26.586 -	/* Clear all 6 debug registers: */
  26.587 -
  26.588 -#define CD(register) HYPERVISOR_set_debugreg(register, 0)
  26.589 -
  26.590 -	CD(0); CD(1); CD(2); CD(3); /* no db4 and db5 */; CD(6); CD(7);
  26.591 -
  26.592 -#undef CD
  26.593 -
  26.594 -	/*
  26.595 -	 * Force FPU initialization:
  26.596 -	 */
  26.597 -	current_thread_info()->status = 0;
  26.598 -	current->used_math = 0;
  26.599 -	mxcsr_feature_mask_init();
  26.600 -}
    27.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/entry.S	Fri Aug 27 08:43:54 2004 +0000
    27.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.3 @@ -1,1029 +0,0 @@
    27.4 -/*
    27.5 - *  linux/arch/i386/entry.S
    27.6 - *
    27.7 - *  Copyright (C) 1991, 1992  Linus Torvalds
    27.8 - */
    27.9 -
   27.10 -/*
   27.11 - * entry.S contains the system-call and fault low-level handling routines.
   27.12 - * This also contains the timer-interrupt handler, as well as all interrupts
   27.13 - * and faults that can result in a task-switch.
   27.14 - *
   27.15 - * NOTE: This code handles signal-recognition, which happens every time
   27.16 - * after a timer-interrupt and after each system call.
   27.17 - *
   27.18 - * I changed all the .align's to 4 (16 byte alignment), as that's faster
   27.19 - * on a 486.
   27.20 - *
   27.21 - * Stack layout in 'ret_from_system_call':
   27.22 - * 	ptrace needs to have all regs on the stack.
   27.23 - *	if the order here is changed, it needs to be
   27.24 - *	updated in fork.c:copy_process, signal.c:do_signal,
   27.25 - *	ptrace.c and ptrace.h
   27.26 - *
   27.27 - *	 0(%esp) - %ebx
   27.28 - *	 4(%esp) - %ecx
   27.29 - *	 8(%esp) - %edx
   27.30 - *       C(%esp) - %esi
   27.31 - *	10(%esp) - %edi
   27.32 - *	14(%esp) - %ebp
   27.33 - *	18(%esp) - %eax
   27.34 - *	1C(%esp) - %ds
   27.35 - *	20(%esp) - %es
   27.36 - *	24(%esp) - orig_eax
   27.37 - *	28(%esp) - %eip
   27.38 - *	2C(%esp) - %cs
   27.39 - *	30(%esp) - %eflags
   27.40 - *	34(%esp) - %oldesp
   27.41 - *	38(%esp) - %oldss
   27.42 - *
   27.43 - * "current" is in register %ebx during any slow entries.
   27.44 - */
   27.45 -
   27.46 -#include <linux/config.h>
   27.47 -#include <linux/linkage.h>
   27.48 -#include <asm/thread_info.h>
   27.49 -#include <asm/errno.h>
   27.50 -#include <asm/segment.h>
   27.51 -#include <asm/smp.h>
   27.52 -#include <asm/page.h>
   27.53 -#include "irq_vectors.h"
   27.54 -#include <asm/hypervisor-ifs/hypervisor-if.h>
   27.55 -
   27.56 -#define nr_syscalls ((syscall_table_size)/4)
   27.57 -
   27.58 -EBX		= 0x00
   27.59 -ECX		= 0x04
   27.60 -EDX		= 0x08
   27.61 -ESI		= 0x0C
   27.62 -EDI		= 0x10
   27.63 -EBP		= 0x14
   27.64 -EAX		= 0x18
   27.65 -DS		= 0x1C
   27.66 -ES		= 0x20
   27.67 -ORIG_EAX	= 0x24
   27.68 -EIP		= 0x28
   27.69 -CS		= 0x2C
   27.70 -EFLAGS		= 0x30
   27.71 -OLDESP		= 0x34
   27.72 -OLDSS		= 0x38
   27.73 -
   27.74 -CF_MASK		= 0x00000001
   27.75 -TF_MASK		= 0x00000100
   27.76 -IF_MASK		= 0x00000200
   27.77 -DF_MASK		= 0x00000400 
   27.78 -NT_MASK		= 0x00004000
   27.79 -VM_MASK		= 0x00020000
   27.80 -
   27.81 -/* Offsets into shared_info_t. */
   27.82 -#define evtchn_upcall_pending		/* 0 */
   27.83 -#define evtchn_upcall_mask		1
   27.84 -
   27.85 -#define XEN_BLOCK_EVENTS(reg)	movb $1,evtchn_upcall_mask(reg)
   27.86 -#define XEN_UNBLOCK_EVENTS(reg)	movb $0,evtchn_upcall_mask(reg)
   27.87 -#define XEN_TEST_PENDING(reg)	testb $0xFF,evtchn_upcall_pending(%reg)
   27.88 -
   27.89 -#ifdef CONFIG_PREEMPT
   27.90 -#define preempt_stop		movl HYPERVISOR_shared_info,%esi	; \
   27.91 -				XEN_BLOCK_EVENTS(%esi)
   27.92 -#else
   27.93 -#define preempt_stop
   27.94 -#define resume_kernel		restore_all
   27.95 -#endif
   27.96 -
   27.97 -#define SAVE_ALL \
   27.98 -	cld; \
   27.99 -	pushl %es; \
  27.100 -	pushl %ds; \
  27.101 -	pushl %eax; \
  27.102 -	pushl %ebp; \
  27.103 -	pushl %edi; \
  27.104 -	pushl %esi; \
  27.105 -	pushl %edx; \
  27.106 -	pushl %ecx; \
  27.107 -	pushl %ebx; \
  27.108 -	movl $(__KERNEL_DS), %edx; \
  27.109 -	movl %edx, %ds; \
  27.110 -	movl %edx, %es;
  27.111 -	# XXXcl USER?
  27.112 -
  27.113 -#define RESTORE_INT_REGS \
  27.114 -	popl %ebx;	\
  27.115 -	popl %ecx;	\
  27.116 -	popl %edx;	\
  27.117 -	popl %esi;	\
  27.118 -	popl %edi;	\
  27.119 -	popl %ebp;	\
  27.120 -	popl %eax
  27.121 -
  27.122 -#define RESTORE_REGS	\
  27.123 -	RESTORE_INT_REGS; \
  27.124 -1:	popl %ds;	\
  27.125 -2:	popl %es;	\
  27.126 -.section .fixup,"ax";	\
  27.127 -3:	movl $0,(%esp);	\
  27.128 -	jmp 1b;		\
  27.129 -4:	movl $0,(%esp);	\
  27.130 -	jmp 2b;		\
  27.131 -.previous;		\
  27.132 -.section __ex_table,"a";\
  27.133 -	.align 4;	\
  27.134 -	.long 1b,3b;	\
  27.135 -	.long 2b,4b;	\
  27.136 -.previous
  27.137 -
  27.138 -
  27.139 -#define RESTORE_ALL	\
  27.140 -	RESTORE_REGS	\
  27.141 -	addl $4, %esp;	\
  27.142 -1:	iret;		\
  27.143 -.section .fixup,"ax";   \
  27.144 -2:	movl $(__USER_DS), %edx; \
  27.145 -	movl %edx, %ds; \
  27.146 -	movl %edx, %es; \
  27.147 -	pushl $11;	\
  27.148 -	call do_exit;	\
  27.149 -.previous;		\
  27.150 -.section __ex_table,"a";\
  27.151 -	.align 4;	\
  27.152 -	.long 1b,2b;	\
  27.153 -.previous
  27.154 -
  27.155 -
  27.156 -
  27.157 -ENTRY(lcall7)
  27.158 -	pushfl			# We get a different stack layout with call
  27.159 -				# gates, which has to be cleaned up later..
  27.160 -	pushl %eax
  27.161 -	SAVE_ALL
  27.162 -	movl %esp, %ebp
  27.163 -	pushl %ebp
  27.164 -	pushl $0x7
  27.165 -do_lcall:
  27.166 -	movl EIP(%ebp), %eax	# due to call gates, this is eflags, not eip..
  27.167 -	movl CS(%ebp), %edx	# this is eip..
  27.168 -	movl EFLAGS(%ebp), %ecx	# and this is cs..
  27.169 -	movl %eax,EFLAGS(%ebp)	#
  27.170 -	movl %edx,EIP(%ebp)	# Now we move them to their "normal" places
  27.171 -	movl %ecx,CS(%ebp)	#
  27.172 -	GET_THREAD_INFO_WITH_ESP(%ebp)	# GET_THREAD_INFO
  27.173 -	movl TI_exec_domain(%ebp), %edx	# Get the execution domain
  27.174 -	call *EXEC_DOMAIN_handler(%edx)	# Call the handler for the domain
  27.175 -	addl $4, %esp
  27.176 -	popl %eax
  27.177 -	jmp resume_userspace
  27.178 -
  27.179 -ENTRY(lcall27)
  27.180 -	pushfl			# We get a different stack layout with call
  27.181 -				# gates, which has to be cleaned up later..
  27.182 -	pushl %eax
  27.183 -	SAVE_ALL
  27.184 -	movl %esp, %ebp
  27.185 -	pushl %ebp
  27.186 -	pushl $0x27
  27.187 -	jmp do_lcall
  27.188 -
  27.189 -
  27.190 -ENTRY(ret_from_fork)
  27.191 -	pushl %eax
  27.192 -	call schedule_tail
  27.193 -	GET_THREAD_INFO(%ebp)
  27.194 -	popl %eax
  27.195 -	jmp syscall_exit
  27.196 -
  27.197 -/*
  27.198 - * Return to user mode is not as complex as all this looks,
  27.199 - * but we want the default path for a system call return to
  27.200 - * go as quickly as possible which is why some of this is
  27.201 - * less clear than it otherwise should be.
  27.202 - */
  27.203 -
  27.204 -	# userspace resumption stub bypassing syscall exit tracing
  27.205 -	ALIGN
  27.206 -ret_from_exception:
  27.207 -	preempt_stop
  27.208 -ret_from_intr:
  27.209 -	GET_THREAD_INFO(%ebp)
  27.210 -	movl EFLAGS(%esp), %eax		# mix EFLAGS and CS
  27.211 -	movb CS(%esp), %al
  27.212 -	testl $(VM_MASK | 2), %eax
  27.213 -	jz resume_kernel		# returning to kernel or vm86-space
  27.214 -ENTRY(resume_userspace)
  27.215 -	movl HYPERVISOR_shared_info,%esi
  27.216 -	XEN_BLOCK_EVENTS(%esi)		# make tests atomic
  27.217 -					# make sure we don't miss an interrupt
  27.218 -					# setting need_resched or sigpending
  27.219 -					# between sampling and the iret
  27.220 -ret_syscall_tests:
  27.221 -	movl TI_flags(%ebp), %ecx
  27.222 -	andl $_TIF_WORK_MASK, %ecx	# is there any work to be done on
  27.223 -					# int/exception return?
  27.224 -	jne work_pending
  27.225 -	jmp restore_all_enable_events
  27.226 -
  27.227 -#ifdef CONFIG_PREEMPT
  27.228 -ENTRY(resume_kernel)
  27.229 -	movl HYPERVISOR_shared_info,%esi
  27.230 -	cmpl $0,TI_preempt_count(%ebp)	# non-zero preempt_count ?
  27.231 -	jnz restore_all_enable_events
  27.232 -need_resched:
  27.233 -	movl TI_flags(%ebp), %ecx	# need_resched set ?
  27.234 -	testb $_TIF_NEED_RESCHED, %cl
  27.235 -	jz restore_all_enable_events
  27.236 -	testl $IF_MASK,EFLAGS(%esp)     # interrupts off (exception path) ?
  27.237 -	jz restore_all_enable_events
  27.238 -	movl $PREEMPT_ACTIVE,TI_preempt_count(%ebp)
  27.239 -	XEN_UNBLOCK_EVENTS(%esi)	# reenable event callbacks
  27.240 -	call schedule
  27.241 -	movl $0,TI_preempt_count(%ebp)
  27.242 -	movl HYPERVISOR_shared_info,%esi
  27.243 -	XEN_BLOCK_EVENTS(%esi)		# make tests atomic
  27.244 -	jmp need_resched
  27.245 -#endif
  27.246 -
  27.247 -/* SYSENTER_RETURN points to after the "sysenter" instruction in
  27.248 -   the vsyscall page.  See vsyscall-sysentry.S, which defines the symbol.  */
  27.249 -
  27.250 -	# sysenter call handler stub
  27.251 -ENTRY(sysenter_entry)
  27.252 -	movl TSS_sysenter_esp0(%esp),%esp
  27.253 -sysenter_past_esp:
  27.254 -	sti
  27.255 -	pushl $(__USER_DS)
  27.256 -	pushl %ebp
  27.257 -	pushfl
  27.258 -	pushl $(__USER_CS)
  27.259 -	pushl $SYSENTER_RETURN
  27.260 -
  27.261 -/*
  27.262 - * Load the potential sixth argument from user stack.
  27.263 - * Careful about security.
  27.264 - */
  27.265 -	cmpl $__PAGE_OFFSET-3,%ebp
  27.266 -	jae syscall_fault
  27.267 -1:	movl (%ebp),%ebp
  27.268 -.section __ex_table,"a"
  27.269 -	.align 4
  27.270 -	.long 1b,syscall_fault
  27.271 -.previous
  27.272 -
  27.273 -	pushl %eax
  27.274 -	SAVE_ALL
  27.275 -	GET_THREAD_INFO(%ebp)
  27.276 -	cmpl $(nr_syscalls), %eax
  27.277 -	jae syscall_badsys
  27.278 -
  27.279 -	testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
  27.280 -	jnz syscall_trace_entry
  27.281 -	call *sys_call_table(,%eax,4)
  27.282 -	movl %eax,EAX(%esp)
  27.283 -	cli
  27.284 -	movl TI_flags(%ebp), %ecx
  27.285 -	testw $_TIF_ALLWORK_MASK, %cx
  27.286 -	jne syscall_exit_work
  27.287 -/* if something modifies registers it must also disable sysexit */
  27.288 -	movl EIP(%esp), %edx
  27.289 -	movl OLDESP(%esp), %ecx
  27.290 -	sti
  27.291 -	sysexit
  27.292 -
  27.293 -
  27.294 -	# system call handler stub
  27.295 -ENTRY(system_call)
  27.296 -	pushl %eax			# save orig_eax
  27.297 -	SAVE_ALL
  27.298 -	GET_THREAD_INFO(%ebp)
  27.299 -	cmpl $(nr_syscalls), %eax
  27.300 -	jae syscall_badsys
  27.301 -					# system call tracing in operation
  27.302 -	testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
  27.303 -	jnz syscall_trace_entry
  27.304 -syscall_call:
  27.305 -	call *sys_call_table(,%eax,4)
  27.306 -	movl %eax,EAX(%esp)		# store the return value
  27.307 -syscall_exit:
  27.308 -	movl HYPERVISOR_shared_info,%esi
  27.309 -	XEN_BLOCK_EVENTS(%esi)		# make tests atomic
  27.310 -					# make sure we don't miss an interrupt
  27.311 -					# setting need_resched or sigpending
  27.312 -					# between sampling and the iret
  27.313 -	movl TI_flags(%ebp), %ecx
  27.314 -	testw $_TIF_ALLWORK_MASK, %cx	# current->work
  27.315 -	jne syscall_exit_work
  27.316 -	jmp restore_all_enable_events
  27.317 -
  27.318 -	ALIGN
  27.319 -restore_all:
  27.320 -	RESTORE_ALL
  27.321 -
  27.322 -	# perform work that needs to be done immediately before resumption
  27.323 -	ALIGN
  27.324 -work_pending:
  27.325 -	XEN_UNBLOCK_EVENTS(%esi)	# reenable event callbacks
  27.326 -	testb $_TIF_NEED_RESCHED, %cl
  27.327 -	jz work_notifysig
  27.328 -work_resched:
  27.329 -	call schedule
  27.330 -	movl HYPERVISOR_shared_info,%esi
  27.331 -	XEN_BLOCK_EVENTS(%esi)		# make tests atomic
  27.332 -					# make sure we don't miss an interrupt
  27.333 -					# setting need_resched or sigpending
  27.334 -					# between sampling and the iret
  27.335 -	movl TI_flags(%ebp), %ecx
  27.336 -	andl $_TIF_WORK_MASK, %ecx	# is there any work to be done other
  27.337 -					# than syscall tracing?
  27.338 -	jz restore_all_enable_events
  27.339 -	# XXXcl sti missing???
  27.340 -	XEN_UNBLOCK_EVENTS(%esi)	# reenable event callbacks
  27.341 -	testb $_TIF_NEED_RESCHED, %cl
  27.342 -	jnz work_resched
  27.343 -
  27.344 -work_notifysig:				# deal with pending signals and
  27.345 -					# notify-resume requests
  27.346 -	testl $VM_MASK, EFLAGS(%esp)
  27.347 -	movl %esp, %eax
  27.348 -	jne work_notifysig_v86		# returning to kernel-space or
  27.349 -					# vm86-space
  27.350 -	xorl %edx, %edx
  27.351 -	call do_notify_resume
  27.352 -	movl HYPERVISOR_shared_info,%esi
  27.353 -	jmp restore_all_enable_events
  27.354 -
  27.355 -	ALIGN
  27.356 -work_notifysig_v86:
  27.357 -	pushl %ecx
  27.358 -	call save_v86_state
  27.359 -	popl %ecx
  27.360 -	movl %eax, %esp
  27.361 -	xorl %edx, %edx
  27.362 -	call do_notify_resume
  27.363 -	movl HYPERVISOR_shared_info,%esi
  27.364 -	jmp restore_all_enable_events
  27.365 -
  27.366 -	# perform syscall exit tracing
  27.367 -	ALIGN
  27.368 -syscall_trace_entry:
  27.369 -	movl $-ENOSYS,EAX(%esp)
  27.370 -	movl %esp, %eax
  27.371 -	xorl %edx,%edx
  27.372 -	call do_syscall_trace
  27.373 -	movl ORIG_EAX(%esp), %eax
  27.374 -	cmpl $(nr_syscalls), %eax
  27.375 -	jnae syscall_call
  27.376 -	jmp syscall_exit
  27.377 -
  27.378 -	# perform syscall exit tracing
  27.379 -	ALIGN
  27.380 -syscall_exit_work:
  27.381 -	movl HYPERVISOR_shared_info,%esi
  27.382 -	testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT), %cl
  27.383 -	jz work_pending
  27.384 -	XEN_UNBLOCK_EVENTS(%esi)	# reenable event callbacks
  27.385 -					# could let do_syscall_trace() call
  27.386 -					# schedule() instead
  27.387 -	movl %esp, %eax
  27.388 -	movl $1, %edx
  27.389 -	call do_syscall_trace
  27.390 -	jmp resume_userspace
  27.391 -
  27.392 -	ALIGN
  27.393 -syscall_fault:
  27.394 -	pushl %eax			# save orig_eax
  27.395 -	SAVE_ALL
  27.396 -	GET_THREAD_INFO(%ebp)
  27.397 -	movl $-EFAULT,EAX(%esp)
  27.398 -	jmp resume_userspace
  27.399 -
  27.400 -	ALIGN
  27.401 -syscall_badsys:
  27.402 -	movl $-ENOSYS,EAX(%esp)
  27.403 -	jmp resume_userspace
  27.404 -
  27.405 -ENTRY(divide_error)
  27.406 -	pushl $0			# no error code
  27.407 -	pushl $do_divide_error
  27.408 -	ALIGN
  27.409 -error_code:
  27.410 -	pushl %ds
  27.411 -	pushl %eax
  27.412 -	xorl %eax, %eax
  27.413 -	pushl %ebp
  27.414 -	pushl %edi
  27.415 -	pushl %esi
  27.416 -	pushl %edx
  27.417 -	decl %eax			# eax = -1
  27.418 -	pushl %ecx
  27.419 -	pushl %ebx
  27.420 -	cld
  27.421 -	movl %es, %ecx
  27.422 -	movl ORIG_EAX(%esp), %esi	# get the error code
  27.423 -	movl ES(%esp), %edi		# get the function address
  27.424 -	movl %eax, ORIG_EAX(%esp)
  27.425 -	movl %ecx, ES(%esp)
  27.426 -	movl %esp, %edx
  27.427 -	pushl %esi			# push the error code
  27.428 -	pushl %edx			# push the pt_regs pointer
  27.429 -	movl $(__KERNEL_DS), %edx	# XXXcl USER?
  27.430 -	movl %edx, %ds
  27.431 -	movl %edx, %es
  27.432 -	call *%edi
  27.433 -	addl $8, %esp
  27.434 -	jmp ret_from_exception
  27.435 -
  27.436 -# A note on the "critical region" in our callback handler.
  27.437 -# We want to avoid stacking callback handlers due to events occurring
  27.438 -# during handling of the last event. To do this, we keep events disabled
  27.439 -# until we've done all processing. HOWEVER, we must enable events before
  27.440 -# popping the stack frame (can't be done atomically) and so it would still
  27.441 -# be possible to get enough handler activations to overflow the stack.
  27.442 -# Although unlikely, bugs of that kind are hard to track down, so we'd
  27.443 -# like to avoid the possibility.
  27.444 -# So, on entry to the handler we detect whether we interrupted an
  27.445 -# existing activation in its critical region -- if so, we pop the current
  27.446 -# activation and restart the handler using the previous one.
  27.447 -ENTRY(hypervisor_callback)
  27.448 -	pushl %eax
  27.449 -	SAVE_ALL
  27.450 -	GET_THREAD_INFO(%ebp)
  27.451 -	movl EIP(%esp),%eax
  27.452 -	cmpl $scrit,%eax
  27.453 -	jb   11f
  27.454 -	cmpl $ecrit,%eax
  27.455 -	jb   critical_region_fixup
  27.456 -11:	push %esp
  27.457 -	call evtchn_do_upcall
  27.458 -	add  $4,%esp
  27.459 -	movl HYPERVISOR_shared_info,%esi
  27.460 -	movb CS(%esp),%cl
  27.461 -	test $2,%cl			# slow return to ring 2 or 3
  27.462 -	jne  ret_syscall_tests
  27.463 -restore_all_enable_events:  
  27.464 -safesti:XEN_UNBLOCK_EVENTS(%esi)	# reenable event callbacks
  27.465 -scrit:	/**** START OF CRITICAL REGION ****/
  27.466 -	testb $1,evtchn_upcall_pending(%esi)
  27.467 -	jnz  14f			# process more events if necessary...
  27.468 -	RESTORE_ALL
  27.469 -14:	XEN_BLOCK_EVENTS(%esi)
  27.470 -	jmp  11b
  27.471 -ecrit:  /**** END OF CRITICAL REGION ****/
  27.472 -# [How we do the fixup]. We want to merge the current stack frame with the
  27.473 -# just-interrupted frame. How we do this depends on where in the critical
  27.474 -# region the interrupted handler was executing, and so how many saved
  27.475 -# registers are in each frame. We do this quickly using the lookup table
  27.476 -# 'critical_fixup_table'. For each byte offset in the critical region, it
  27.477 -# provides the number of bytes which have already been popped from the
  27.478 -# interrupted stack frame. 
  27.479 -critical_region_fixup:
  27.480 -	addl $critical_fixup_table-scrit,%eax
  27.481 -	movzbl (%eax),%eax		# %eax contains num bytes popped
  27.482 -	mov  %esp,%esi
  27.483 -	add  %eax,%esi			# %esi points at end of src region
  27.484 -	mov  %esp,%edi
  27.485 -	add  $0x34,%edi			# %edi points at end of dst region
  27.486 -	mov  %eax,%ecx
  27.487 -	shr  $2,%ecx			# convert words to bytes
  27.488 -	je   16f			# skip loop if nothing to copy
  27.489 -15:	subl $4,%esi			# pre-decrementing copy loop
  27.490 -	subl $4,%edi
  27.491 -	movl (%esi),%eax
  27.492 -	movl %eax,(%edi)
  27.493 -	loop 15b
  27.494 -16:	movl %edi,%esp			# final %edi is top of merged stack
  27.495 -	jmp  11b
  27.496 -
  27.497 -critical_fixup_table:
  27.498 -	.byte 0x00,0x00,0x00		# testb $0xff,(%esi)
  27.499 -	.byte 0x00,0x00			# jnz  14f
  27.500 -	.byte 0x00			# pop  %ebx
  27.501 -	.byte 0x04			# pop  %ecx
  27.502 -	.byte 0x08			# pop  %edx
  27.503 -	.byte 0x0c			# pop  %esi
  27.504 -	.byte 0x10			# pop  %edi
  27.505 -	.byte 0x14			# pop  %ebp
  27.506 -	.byte 0x18			# pop  %eax
  27.507 -	.byte 0x1c			# pop  %ds
  27.508 -	.byte 0x20			# pop  %es
  27.509 -	.byte 0x24,0x24,0x24		# add  $4,%esp
  27.510 -	.byte 0x28			# iret
  27.511 -	.byte 0x00,0x00,0x00,0x00	# movb $1,1(%esi)
  27.512 -	.byte 0x00,0x00			# jmp  11b
  27.513 -
  27.514 -# Hypervisor uses this for application faults while it executes.
  27.515 -ENTRY(failsafe_callback)
  27.516 -	pushal
  27.517 -	call install_safe_pf_handler
  27.518 -	movl 32(%esp),%ebx
  27.519 -1:	movl %ebx,%ds
  27.520 -	movl 36(%esp),%ebx
  27.521 -2:	movl %ebx,%es
  27.522 -	movl 40(%esp),%ebx
  27.523 -3:	movl %ebx,%fs
  27.524 -	movl 44(%esp),%ebx
  27.525 -4:	movl %ebx,%gs
  27.526 -	call install_normal_pf_handler
  27.527 -	popal
  27.528 -	addl $16,%esp
  27.529 -5:	iret
  27.530 -.section .fixup,"ax";	\
  27.531 -6:	xorl %ebx,%ebx;	\
  27.532 -	jmp 1b;		\
  27.533 -7:	xorl %ebx,%ebx;	\
  27.534 -	jmp 2b;		\
  27.535 -8:	xorl %ebx,%ebx;	\
  27.536 -	jmp 3b;		\
  27.537 -9:	xorl %ebx,%ebx;	\
  27.538 -	jmp 4b;		\
  27.539 -10:	pushl %ss;	\
  27.540 -	popl %ds;	\
  27.541 -	pushl %ss;	\
  27.542 -	popl %es;	\
  27.543 -	pushl $11;	\
  27.544 -	call do_exit;	\
  27.545 -.previous;		\
  27.546 -.section __ex_table,"a";\
  27.547 -	.align 4;	\
  27.548 -	.long 1b,6b;	\
  27.549 -	.long 2b,7b;	\
  27.550 -	.long 3b,8b;	\
  27.551 -	.long 4b,9b;	\
  27.552 -	.long 5b,10b;	\
  27.553 -.previous
  27.554 -
  27.555 -ENTRY(coprocessor_error)
  27.556 -	pushl $0
  27.557 -	pushl $do_coprocessor_error
  27.558 -	jmp error_code
  27.559 -
  27.560 -ENTRY(simd_coprocessor_error)
  27.561 -	pushl $0
  27.562 -	pushl $do_simd_coprocessor_error
  27.563 -	jmp error_code
  27.564 -
  27.565 -ENTRY(device_not_available)
  27.566 -	pushl $-1			# mark this as an int
  27.567 -	SAVE_ALL
  27.568 -	preempt_stop
  27.569 -	call math_state_restore
  27.570 -	jmp ret_from_exception
  27.571 -
  27.572 -/*
  27.573 - * Debug traps and NMI can happen at the one SYSENTER instruction
  27.574 - * that sets up the real kernel stack. Check here, since we can't
  27.575 - * allow the wrong stack to be used.
  27.576 - *
  27.577 - * "TSS_sysenter_esp0+12" is because the NMI/debug handler will have
  27.578 - * already pushed 3 words if it hits on the sysenter instruction:
  27.579 - * eflags, cs and eip.
  27.580 - *
  27.581 - * We just load the right stack, and push the three (known) values
  27.582 - * by hand onto the new stack - while updating the return eip past
  27.583 - * the instruction that would have done it for sysenter.
  27.584 - */
  27.585 -#define FIX_STACK(offset, ok, label)		\
  27.586 -	cmpw $__KERNEL_CS,4(%esp);		\
  27.587 -	jne ok;					\
  27.588 -label:						\
  27.589 -	movl TSS_sysenter_esp0+offset(%esp),%esp;	\
  27.590 -	pushfl;					\
  27.591 -	pushl $__KERNEL_CS;			\
  27.592 -	pushl $sysenter_past_esp
  27.593 -
  27.594 -ENTRY(debug)
  27.595 -	cmpl $sysenter_entry,(%esp)
  27.596 -	jne debug_stack_correct
  27.597 -	FIX_STACK(12, debug_stack_correct, debug_esp_fix_insn)
  27.598 -debug_stack_correct:
  27.599 -	pushl $0
  27.600 -	pushl $do_debug
  27.601 -	jmp error_code
  27.602 -
  27.603 -#if 0
  27.604 -/*
  27.605 - * NMI is doubly nasty. It can happen _while_ we're handling
  27.606 - * a debug fault, and the debug fault hasn't yet been able to
  27.607 - * clear up the stack. So we first check whether we got  an
  27.608 - * NMI on the sysenter entry path, but after that we need to
  27.609 - * check whether we got an NMI on the debug path where the debug
  27.610 - * fault happened on the sysenter path.
  27.611 - */
  27.612 -ENTRY(nmi)
  27.613 -	cmpl $sysenter_entry,(%esp)
  27.614 -	je nmi_stack_fixup
  27.615 -	pushl %eax
  27.616 -	movl %esp,%eax
  27.617 -	/* Do not access memory above the end of our stack page,
  27.618 -	 * it might not exist.
  27.619 -	 */
  27.620 -	andl $(THREAD_SIZE-1),%eax
  27.621 -	cmpl $(THREAD_SIZE-20),%eax
  27.622 -	popl %eax
  27.623 -	jae nmi_stack_correct
  27.624 -	cmpl $sysenter_entry,12(%esp)
  27.625 -	je nmi_debug_stack_check
  27.626 -nmi_stack_correct:
  27.627 -	pushl %eax
  27.628 -	SAVE_ALL
  27.629 -	movl %esp, %edx
  27.630 -	pushl $0
  27.631 -	pushl %edx
  27.632 -	call do_nmi
  27.633 -	addl $8, %esp
  27.634 -	RESTORE_ALL
  27.635 -
  27.636 -nmi_stack_fixup:
  27.637 -	FIX_STACK(12,nmi_stack_correct, 1)
  27.638 -	jmp nmi_stack_correct
  27.639 -nmi_debug_stack_check:
  27.640 -	cmpw $__KERNEL_CS,16(%esp)
  27.641 -	jne nmi_stack_correct
  27.642 -	cmpl $debug - 1,(%esp)
  27.643 -	jle nmi_stack_correct
  27.644 -	cmpl $debug_esp_fix_insn,(%esp)
  27.645 -	jle nmi_debug_stack_fixup
  27.646 -nmi_debug_stack_fixup:
  27.647 -	FIX_STACK(24,nmi_stack_correct, 1)
  27.648 -	jmp nmi_stack_correct
  27.649 -#endif
  27.650 -
  27.651 -ENTRY(int3)
  27.652 -	pushl $0
  27.653 -	pushl $do_int3
  27.654 -	jmp error_code
  27.655 -
  27.656 -ENTRY(overflow)
  27.657 -	pushl $0
  27.658 -	pushl $do_overflow
  27.659 -	jmp error_code
  27.660 -
  27.661 -ENTRY(bounds)
  27.662 -	pushl $0
  27.663 -	pushl $do_bounds
  27.664 -	jmp error_code
  27.665 -
  27.666 -ENTRY(invalid_op)
  27.667 -	pushl $0
  27.668 -	pushl $do_invalid_op
  27.669 -	jmp error_code
  27.670 -
  27.671 -ENTRY(coprocessor_segment_overrun)
  27.672 -	pushl $0
  27.673 -	pushl $do_coprocessor_segment_overrun
  27.674 -	jmp error_code
  27.675 -
  27.676 -ENTRY(double_fault)
  27.677 -	pushl $do_double_fault
  27.678 -	jmp error_code
  27.679 -
  27.680 -ENTRY(invalid_TSS)
  27.681 -	pushl $do_invalid_TSS
  27.682 -	jmp error_code
  27.683 -
  27.684 -ENTRY(segment_not_present)
  27.685 -	pushl $do_segment_not_present
  27.686 -	jmp error_code
  27.687 -
  27.688 -ENTRY(stack_segment)
  27.689 -	pushl $do_stack_segment
  27.690 -	jmp error_code
  27.691 -
  27.692 -ENTRY(general_protection)
  27.693 -	pushl $do_general_protection
  27.694 -	jmp error_code
  27.695 -
  27.696 -ENTRY(alignment_check)
  27.697 -	pushl $do_alignment_check
  27.698 -	jmp error_code
  27.699 -
  27.700 -# This handler is special, because it gets an extra value on its stack,
  27.701 -# which is the linear faulting address.
  27.702 -#define PAGE_FAULT_STUB(_name1, _name2)					  \
  27.703 -ENTRY(_name1)								  \
  27.704 -	pushl %ds							; \
  27.705 -	pushl %eax							; \
  27.706 -	xorl %eax,%eax							; \
  27.707 -	pushl %ebp							; \
  27.708 -	pushl %edi							; \
  27.709 -	pushl %esi							; \
  27.710 -	pushl %edx							; \
  27.711 -	decl %eax			/* eax = -1 */			; \
  27.712 -	pushl %ecx							; \
  27.713 -	pushl %ebx							; \
  27.714 -	GET_THREAD_INFO(%ebp)						; \
  27.715 -	cld								; \
  27.716 -	movl %es,%ecx							; \
  27.717 -	movl ORIG_EAX(%esp), %esi	/* get the error code */	; \
  27.718 -	movl ES(%esp), %edi		/* get the faulting address */	; \
  27.719 -	movl %eax, ORIG_EAX(%esp)					; \
  27.720 -	movl %ecx, ES(%esp)						; \
  27.721 -	movl %esp,%edx							; \
  27.722 -	pushl %edi			/* push the faulting address */	; \
  27.723 -	pushl %esi			/* push the error code */	; \
  27.724 -	pushl %edx			/* push the pt_regs pointer */	; \
  27.725 -	movl $(__KERNEL_DS),%edx					; \
  27.726 -	movl %edx,%ds							; \
  27.727 -	movl %edx,%es							; \
  27.728 -	call _name2							; \
  27.729 -	addl $12,%esp							; \
  27.730 -	jmp ret_from_exception						;
  27.731 -PAGE_FAULT_STUB(page_fault, do_page_fault)
  27.732 -PAGE_FAULT_STUB(safe_page_fault, do_safe_page_fault)
  27.733 -
  27.734 -#ifdef CONFIG_X86_MCE
  27.735 -ENTRY(machine_check)
  27.736 -	pushl $0
  27.737 -	pushl machine_check_vector
  27.738 -	jmp error_code
  27.739 -#endif
  27.740 -
  27.741 -ENTRY(fixup_4gb_segment)
  27.742 -	pushl $do_fixup_4gb_segment
  27.743 -	jmp error_code
  27.744 -
  27.745 -.data
  27.746 -ENTRY(sys_call_table)
  27.747 -	.long sys_restart_syscall	/* 0 - old "setup()" system call, used for restarting */
  27.748 -	.long sys_exit
  27.749 -	.long sys_fork
  27.750 -	.long sys_read
  27.751 -	.long sys_write
  27.752 -	.long sys_open		/* 5 */
  27.753 -	.long sys_close
  27.754 -	.long sys_waitpid
  27.755 -	.long sys_creat
  27.756 -	.long sys_link
  27.757 -	.long sys_unlink	/* 10 */
  27.758 -	.long sys_execve
  27.759 -	.long sys_chdir
  27.760 -	.long sys_time
  27.761 -	.long sys_mknod
  27.762 -	.long sys_chmod		/* 15 */
  27.763 -	.long sys_lchown16
  27.764 -	.long sys_ni_syscall	/* old break syscall holder */
  27.765 -	.long sys_stat
  27.766 -	.long sys_lseek
  27.767 -	.long sys_getpid	/* 20 */
  27.768 -	.long sys_mount
  27.769 -	.long sys_oldumount
  27.770 -	.long sys_setuid16
  27.771 -	.long sys_getuid16
  27.772 -	.long sys_stime		/* 25 */
  27.773 -	.long sys_ptrace
  27.774 -	.long sys_alarm
  27.775 -	.long sys_fstat
  27.776 -	.long sys_pause
  27.777 -	.long sys_utime		/* 30 */
  27.778 -	.long sys_ni_syscall	/* old stty syscall holder */
  27.779 -	.long sys_ni_syscall	/* old gtty syscall holder */
  27.780 -	.long sys_access
  27.781 -	.long sys_nice
  27.782 -	.long sys_ni_syscall	/* 35 - old ftime syscall holder */
  27.783 -	.long sys_sync
  27.784 -	.long sys_kill
  27.785 -	.long sys_rename
  27.786 -	.long sys_mkdir
  27.787 -	.long sys_rmdir		/* 40 */
  27.788 -	.long sys_dup
  27.789 -	.long sys_pipe
  27.790 -	.long sys_times
  27.791 -	.long sys_ni_syscall	/* old prof syscall holder */
  27.792 -	.long sys_brk		/* 45 */
  27.793 -	.long sys_setgid16
  27.794 -	.long sys_getgid16
  27.795 -	.long sys_signal
  27.796 -	.long sys_geteuid16
  27.797 -	.long sys_getegid16	/* 50 */
  27.798 -	.long sys_acct
  27.799 -	.long sys_umount	/* recycled never used phys() */
  27.800 -	.long sys_ni_syscall	/* old lock syscall holder */
  27.801 -	.long sys_ioctl
  27.802 -	.long sys_fcntl		/* 55 */
  27.803 -	.long sys_ni_syscall	/* old mpx syscall holder */
  27.804 -	.long sys_setpgid
  27.805 -	.long sys_ni_syscall	/* old ulimit syscall holder */
  27.806 -	.long sys_olduname
  27.807 -	.long sys_umask		/* 60 */
  27.808 -	.long sys_chroot
  27.809 -	.long sys_ustat
  27.810 -	.long sys_dup2
  27.811 -	.long sys_getppid
  27.812 -	.long sys_getpgrp	/* 65 */
  27.813 -	.long sys_setsid
  27.814 -	.long sys_sigaction
  27.815 -	.long sys_sgetmask
  27.816 -	.long sys_ssetmask
  27.817 -	.long sys_setreuid16	/* 70 */
  27.818 -	.long sys_setregid16
  27.819 -	.long sys_sigsuspend
  27.820 -	.long sys_sigpending
  27.821 -	.long sys_sethostname
  27.822 -	.long sys_setrlimit	/* 75 */
  27.823 -	.long sys_old_getrlimit
  27.824 -	.long sys_getrusage
  27.825 -	.long sys_gettimeofday
  27.826 -	.long sys_settimeofday
  27.827 -	.long sys_getgroups16	/* 80 */
  27.828 -	.long sys_setgroups16
  27.829 -	.long old_select
  27.830 -	.long sys_symlink
  27.831 -	.long sys_lstat
  27.832 -	.long sys_readlink	/* 85 */
  27.833 -	.long sys_uselib
  27.834 -	.long sys_swapon
  27.835 -	.long sys_reboot
  27.836 -	.long old_readdir
  27.837 -	.long old_mmap		/* 90 */
  27.838 -	.long sys_munmap
  27.839 -	.long sys_truncate
  27.840 -	.long sys_ftruncate
  27.841 -	.long sys_fchmod
  27.842 -	.long sys_fchown16	/* 95 */
  27.843 -	.long sys_getpriority
  27.844 -	.long sys_setpriority
  27.845 -	.long sys_ni_syscall	/* old profil syscall holder */
  27.846 -	.long sys_statfs
  27.847 -	.long sys_fstatfs	/* 100 */
  27.848 -	.long sys_ioperm
  27.849 -	.long sys_socketcall
  27.850 -	.long sys_syslog
  27.851 -	.long sys_setitimer
  27.852 -	.long sys_getitimer	/* 105 */
  27.853 -	.long sys_newstat
  27.854 -	.long sys_newlstat
  27.855 -	.long sys_newfstat
  27.856 -	.long sys_uname
  27.857 -	.long sys_iopl		/* 110 */
  27.858 -	.long sys_vhangup
  27.859 -	.long sys_ni_syscall	/* old "idle" system call */
  27.860 -	.long sys_vm86old
  27.861 -	.long sys_wait4
  27.862 -	.long sys_swapoff	/* 115 */
  27.863 -	.long sys_sysinfo
  27.864 -	.long sys_ipc
  27.865 -	.long sys_fsync
  27.866 -	.long sys_sigreturn
  27.867 -	.long sys_clone		/* 120 */
  27.868 -	.long sys_setdomainname
  27.869 -	.long sys_newuname
  27.870 -	.long sys_modify_ldt
  27.871 -	.long sys_adjtimex
  27.872 -	.long sys_mprotect	/* 125 */
  27.873 -	.long sys_sigprocmask
  27.874 -	.long sys_ni_syscall	/* old "create_module" */ 
  27.875 -	.long sys_init_module
  27.876 -	.long sys_delete_module
  27.877 -	.long sys_ni_syscall	/* 130:	old "get_kernel_syms" */
  27.878 -	.long sys_quotactl
  27.879 -	.long sys_getpgid
  27.880 -	.long sys_fchdir
  27.881 -	.long sys_bdflush
  27.882 -	.long sys_sysfs		/* 135 */
  27.883 -	.long sys_personality
  27.884 -	.long sys_ni_syscall	/* reserved for afs_syscall */
  27.885 -	.long sys_setfsuid16
  27.886 -	.long sys_setfsgid16
  27.887 -	.long sys_llseek	/* 140 */
  27.888 -	.long sys_getdents
  27.889 -	.long sys_select
  27.890 -	.long sys_flock
  27.891 -	.long sys_msync
  27.892 -	.long sys_readv		/* 145 */
  27.893 -	.long sys_writev
  27.894 -	.long sys_getsid
  27.895 -	.long sys_fdatasync
  27.896 -	.long sys_sysctl
  27.897 -	.long sys_mlock		/* 150 */
  27.898 -	.long sys_munlock
  27.899 -	.long sys_mlockall
  27.900 -	.long sys_munlockall
  27.901 -	.long sys_sched_setparam
  27.902 -	.long sys_sched_getparam   /* 155 */
  27.903 -	.long sys_sched_setscheduler
  27.904 -	.long sys_sched_getscheduler
  27.905 -	.long sys_sched_yield
  27.906 -	.long sys_sched_get_priority_max
  27.907 -	.long sys_sched_get_priority_min  /* 160 */
  27.908 -	.long sys_sched_rr_get_interval
  27.909 -	.long sys_nanosleep
  27.910 -	.long sys_mremap
  27.911 -	.long sys_setresuid16
  27.912 -	.long sys_getresuid16	/* 165 */
  27.913 -	.long sys_vm86
  27.914 -	.long sys_ni_syscall	/* Old sys_query_module */
  27.915 -	.long sys_poll
  27.916 -	.long sys_nfsservctl
  27.917 -	.long sys_setresgid16	/* 170 */
  27.918 -	.long sys_getresgid16
  27.919 -	.long sys_prctl
  27.920 -	.long sys_rt_sigreturn
  27.921 -	.long sys_rt_sigaction
  27.922 -	.long sys_rt_sigprocmask	/* 175 */
  27.923 -	.long sys_rt_sigpending
  27.924 -	.long sys_rt_sigtimedwait
  27.925 -	.long sys_rt_sigqueueinfo
  27.926 -	.long sys_rt_sigsuspend
  27.927 -	.long sys_pread64	/* 180 */
  27.928 -	.long sys_pwrite64
  27.929 -	.long sys_chown16
  27.930 -	.long sys_getcwd
  27.931 -	.long sys_capget
  27.932 -	.long sys_capset	/* 185 */
  27.933 -	.long sys_sigaltstack
  27.934 -	.long sys_sendfile
  27.935 -	.long sys_ni_syscall	/* reserved for streams1 */
  27.936 -	.long sys_ni_syscall	/* reserved for streams2 */
  27.937 -	.long sys_vfork		/* 190 */
  27.938 -	.long sys_getrlimit
  27.939 -	.long sys_mmap2
  27.940 -	.long sys_truncate64
  27.941 -	.long sys_ftruncate64
  27.942 -	.long sys_stat64	/* 195 */
  27.943 -	.long sys_lstat64
  27.944 -	.long sys_fstat64
  27.945 -	.long sys_lchown
  27.946 -	.long sys_getuid
  27.947 -	.long sys_getgid	/* 200 */
  27.948 -	.long sys_geteuid
  27.949 -	.long sys_getegid
  27.950 -	.long sys_setreuid
  27.951 -	.long sys_setregid
  27.952 -	.long sys_getgroups	/* 205 */
  27.953 -	.long sys_setgroups
  27.954 -	.long sys_fchown
  27.955 -	.long sys_setresuid
  27.956 -	.long sys_getresuid
  27.957 -	.long sys_setresgid	/* 210 */
  27.958 -	.long sys_getresgid
  27.959 -	.long sys_chown
  27.960 -	.long sys_setuid
  27.961 -	.long sys_setgid
  27.962 -	.long sys_setfsuid	/* 215 */
  27.963 -	.long sys_setfsgid
  27.964 -	.long sys_pivot_root
  27.965 -	.long sys_mincore
  27.966 -	.long sys_madvise
  27.967 -	.long sys_getdents64	/* 220 */
  27.968 -	.long sys_fcntl64
  27.969 -	.long sys_ni_syscall	/* reserved for TUX */
  27.970 -	.long sys_ni_syscall
  27.971 -	.long sys_gettid
  27.972 -	.long sys_readahead	/* 225 */
  27.973 -	.long sys_setxattr
  27.974 -	.long sys_lsetxattr
  27.975 -	.long sys_fsetxattr
  27.976 -	.long sys_getxattr
  27.977 -	.long sys_lgetxattr	/* 230 */
  27.978 -	.long sys_fgetxattr
  27.979 -	.long sys_listxattr
  27.980 -	.long sys_llistxattr
  27.981 -	.long sys_flistxattr
  27.982 -	.long sys_removexattr	/* 235 */
  27.983 -	.long sys_lremovexattr
  27.984 -	.long sys_fremovexattr
  27.985 -	.long sys_tkill
  27.986 -	.long sys_sendfile64
  27.987 -	.long sys_futex		/* 240 */
  27.988 -	.long sys_sched_setaffinity
  27.989 -	.long sys_sched_getaffinity
  27.990 -	.long sys_set_thread_area
  27.991 -	.long sys_get_thread_area
  27.992 -	.long sys_io_setup	/* 245 */
  27.993 -	.long sys_io_destroy
  27.994 -	.long sys_io_getevents
  27.995 -	.long sys_io_submit
  27.996 -	.long sys_io_cancel
  27.997 -	.long sys_fadvise64	/* 250 */
  27.998 -	.long sys_ni_syscall
  27.999 -	.long sys_exit_group
 27.1000 -	.long sys_lookup_dcookie
 27.1001 -	.long sys_epoll_create
 27.1002 -	.long sys_epoll_ctl	/* 255 */
 27.1003 -	.long sys_epoll_wait
 27.1004 - 	.long sys_remap_file_pages
 27.1005 - 	.long sys_set_tid_address
 27.1006 - 	.long sys_timer_create
 27.1007 - 	.long sys_timer_settime		/* 260 */
 27.1008 - 	.long sys_timer_gettime
 27.1009 - 	.long sys_timer_getoverrun
 27.1010 - 	.long sys_timer_delete
 27.1011 - 	.long sys_clock_settime
 27.1012 - 	.long sys_clock_gettime		/* 265 */
 27.1013 - 	.long sys_clock_getres
 27.1014 - 	.long sys_clock_nanosleep
 27.1015 -	.long sys_statfs64
 27.1016 -	.long sys_fstatfs64	
 27.1017 -	.long sys_tgkill	/* 270 */
 27.1018 -	.long sys_utimes
 27.1019 - 	.long sys_fadvise64_64
 27.1020 -	.long sys_ni_syscall	/* sys_vserver */
 27.1021 -	.long sys_mbind
 27.1022 -	.long sys_get_mempolicy
 27.1023 -	.long sys_set_mempolicy
 27.1024 -	.long sys_mq_open
 27.1025 -	.long sys_mq_unlink
 27.1026 -	.long sys_mq_timedsend
 27.1027 -	.long sys_mq_timedreceive	/* 280 */
 27.1028 -	.long sys_mq_notify
 27.1029 -	.long sys_mq_getsetattr
 27.1030 -	.long sys_ni_syscall		/* reserved for kexec */
 27.1031 -
 27.1032 -syscall_table_size=(.-sys_call_table)
    28.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/head.S	Fri Aug 27 08:43:54 2004 +0000
    28.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.3 @@ -1,165 +0,0 @@
    28.4 -
    28.5 -.section __xen_guest
    28.6 -	.asciz "GUEST_OS=linux,GUEST_VER=2.6,XEN_VER=1.3"
    28.7 -
    28.8 -.text
    28.9 -#include <linux/config.h>
   28.10 -#include <linux/threads.h>
   28.11 -#include <linux/linkage.h>
   28.12 -#include <asm/segment.h>
   28.13 -#include <asm/thread_info.h>
   28.14 -#include <asm/asm_offsets.h>
   28.15 -#include <asm/hypervisor-ifs/arch-x86_32.h>
   28.16 -
   28.17 -/*
   28.18 - * References to members of the new_cpu_data structure.
   28.19 - */
   28.20 -
   28.21 -#define X86		new_cpu_data+CPUINFO_x86
   28.22 -#define X86_VENDOR	new_cpu_data+CPUINFO_x86_vendor
   28.23 -#define X86_MODEL	new_cpu_data+CPUINFO_x86_model
   28.24 -#define X86_MASK	new_cpu_data+CPUINFO_x86_mask
   28.25 -#define X86_HARD_MATH	new_cpu_data+CPUINFO_hard_math
   28.26 -#define X86_CPUID	new_cpu_data+CPUINFO_cpuid_level
   28.27 -#define X86_CAPABILITY	new_cpu_data+CPUINFO_x86_capability
   28.28 -#define X86_VENDOR_ID	new_cpu_data+CPUINFO_x86_vendor_id
   28.29 -
   28.30 -ENTRY(startup_32)
   28.31 -	cld
   28.32 -
   28.33 -	/* Set up the stack pointer */
   28.34 -	lss stack_start,%esp
   28.35 -
   28.36 -	/* Copy the necessary stuff from start_info structure. */
   28.37 -	mov  $start_info_union,%edi
   28.38 -	mov  $128,%ecx
   28.39 -	rep movsl
   28.40 -
   28.41 -checkCPUtype:
   28.42 -
   28.43 -	/* get vendor info */
   28.44 -	xorl %eax,%eax			# call CPUID with 0 -> return vendor ID
   28.45 -	cpuid
   28.46 -	movl %eax,X86_CPUID		# save CPUID level
   28.47 -	movl %ebx,X86_VENDOR_ID		# lo 4 chars
   28.48 -	movl %edx,X86_VENDOR_ID+4	# next 4 chars
   28.49 -	movl %ecx,X86_VENDOR_ID+8	# last 4 chars
   28.50 -
   28.51 -	movl $1,%eax		# Use the CPUID instruction to get CPU type
   28.52 -	cpuid
   28.53 -	movb %al,%cl		# save reg for future use
   28.54 -	andb $0x0f,%ah		# mask processor family
   28.55 -	movb %ah,X86
   28.56 -	andb $0xf0,%al		# mask model
   28.57 -	shrb $4,%al
   28.58 -	movb %al,X86_MODEL
   28.59 -	andb $0x0f,%cl		# mask mask revision
   28.60 -	movb %cl,X86_MASK
   28.61 -	movl %edx,X86_CAPABILITY
   28.62 -
   28.63 -	xorl %eax,%eax		# Clear FS/GS and LDT
   28.64 -	movl %eax,%fs
   28.65 -	movl %eax,%gs
   28.66 -	cld		# gcc2 wants the direction flag cleared at all times
   28.67 -
   28.68 -	call start_kernel
   28.69 -L6:
   28.70 -	jmp L6			# main should never return here, but
   28.71 -				# just in case, we know what happens.
   28.72 -
   28.73 -ENTRY(lgdt_finish)
   28.74 -	movl $(__KERNEL_DS),%eax	# reload all the segment registers
   28.75 -	movw %ax,%ss			# after changing gdt.
   28.76 -
   28.77 -	movl $(__USER_DS),%eax		# DS/ES contains default USER segment
   28.78 -	movw %ax,%ds
   28.79 -	movw %ax,%es
   28.80 -
   28.81 -	popl %eax			# reload CS by intersegment return
   28.82 -	pushl $(__KERNEL_CS)
   28.83 -	pushl %eax
   28.84 -	lret
   28.85 -
   28.86 -ENTRY(stack_start)
   28.87 -	.long init_thread_union+THREAD_SIZE
   28.88 -	.long __BOOT_DS
   28.89 -
   28.90 -# XXXcl
   28.91 -.globl idt_descr
   28.92 -.globl cpu_gdt_descr
   28.93 -
   28.94 -	ALIGN
   28.95 -	.word 0				# 32-bit align idt_desc.address
   28.96 -idt_descr:
   28.97 -	.word IDT_ENTRIES*8-1		# idt contains 256 entries
   28.98 -	.long idt_table
   28.99 -# XXXcl
  28.100 -
  28.101 -# boot GDT descriptor (later on used by CPU#0):
  28.102 -	.word 0				# 32 bit align gdt_desc.address
  28.103 -cpu_gdt_descr:
  28.104 -	.word GDT_SIZE
  28.105 -	.long cpu_gdt_table
  28.106 -
  28.107 -	.fill NR_CPUS-1,8,0		# space for the other GDT descriptors
  28.108 -
  28.109 -.org 0x1000
  28.110 -ENTRY(empty_zero_page)
  28.111 -
  28.112 -.org 0x2000
  28.113 -ENTRY(swapper_pg_dir)
  28.114 -
  28.115 -.org 0x3000
  28.116 -ENTRY(cpu_gdt_table)
  28.117 -	.quad 0x0000000000000000	/* NULL descriptor */
  28.118 -	.quad 0x0000000000000000	/* 0x0b reserved */
  28.119 -	.quad 0x0000000000000000	/* 0x13 reserved */
  28.120 -	.quad 0x0000000000000000	/* 0x1b reserved */
  28.121 -	.quad 0x0000000000000000	/* 0x20 unused */
  28.122 -	.quad 0x0000000000000000	/* 0x28 unused */
  28.123 -	.quad 0x0000000000000000	/* 0x33 TLS entry 1 */
  28.124 -	.quad 0x0000000000000000	/* 0x3b TLS entry 2 */
  28.125 -	.quad 0x0000000000000000	/* 0x43 TLS entry 3 */
  28.126 -	.quad 0x0000000000000000	/* 0x4b reserved */
  28.127 -	.quad 0x0000000000000000	/* 0x53 reserved */
  28.128 -	.quad 0x0000000000000000	/* 0x5b reserved */
  28.129 -
  28.130 -	.quad 0x00cfbb000000c3ff	/* 0x60 kernel 4GB code at 0x00000000 */
  28.131 -	.quad 0x00cfb3000000c3ff	/* 0x68 kernel 4GB data at 0x00000000 */
  28.132 -	.quad 0x00cffb000000c3ff	/* 0x73 user 4GB code at 0x00000000 */
  28.133 -	.quad 0x00cff3000000c3ff	/* 0x7b user 4GB data at 0x00000000 */
  28.134 -
  28.135 -	.quad 0x0000000000000000	/* 0x80 TSS descriptor */
  28.136 -	.quad 0x0000000000000000	/* 0x88 LDT descriptor */
  28.137 -
  28.138 -	/* Segments used for calling PnP BIOS */
  28.139 -	.quad 0x0000000000000000	/* 0x90 32-bit code */
  28.140 -	.quad 0x0000000000000000	/* 0x98 16-bit code */
  28.141 -	.quad 0x0000000000000000	/* 0xa0 16-bit data */
  28.142 -	.quad 0x0000000000000000	/* 0xa8 16-bit data */
  28.143 -	.quad 0x0000000000000000	/* 0xb0 16-bit data */
  28.144 -	/*
  28.145 -	 * The APM segments have byte granularity and their bases
  28.146 -	 * and limits are set at run time.
  28.147 -	 */
  28.148 -	.quad 0x0000000000000000	/* 0xb8 APM CS    code */
  28.149 -	.quad 0x0000000000000000	/* 0xc0 APM CS 16 code (16 bit) */
  28.150 -	.quad 0x0000000000000000	/* 0xc8 APM DS    data */
  28.151 -
  28.152 -	.quad 0x0000000000000000	/* 0xd0 - unused */
  28.153 -	.quad 0x0000000000000000	/* 0xd8 - unused */
  28.154 -	.quad 0x0000000000000000	/* 0xe0 - unused */
  28.155 -	.quad 0x0000000000000000	/* 0xe8 - unused */
  28.156 -	.quad 0x0000000000000000	/* 0xf0 - unused */
  28.157 -	.quad 0x0000000000000000	/* 0xf8 - GDT entry 31: double-fault TSS */
  28.158 -	.fill GDT_ENTRIES-32,8,0
  28.159 -
  28.160 -.org 0x4000
  28.161 -ENTRY(default_ldt)
  28.162 -
  28.163 -.org 0x5000
  28.164 -/*
  28.165 - * Real beginning of normal "text" segment
  28.166 - */
  28.167 -ENTRY(stext)
  28.168 -ENTRY(_stext)
    29.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c	Fri Aug 27 08:43:54 2004 +0000
    29.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.3 @@ -1,210 +0,0 @@
    29.4 -#include <linux/config.h>
    29.5 -#include <linux/module.h>
    29.6 -#include <linux/smp.h>
    29.7 -#include <linux/user.h>
    29.8 -#include <linux/elfcore.h>
    29.9 -#include <linux/mca.h>
   29.10 -#include <linux/sched.h>
   29.11 -#include <linux/in6.h>
   29.12 -#include <linux/interrupt.h>
   29.13 -#include <linux/smp_lock.h>
   29.14 -#include <linux/pm.h>
   29.15 -#include <linux/pci.h>
   29.16 -#include <linux/apm_bios.h>
   29.17 -#include <linux/kernel.h>
   29.18 -#include <linux/string.h>
   29.19 -#include <linux/tty.h>
   29.20 -#include <linux/highmem.h>
   29.21 -#include <linux/time.h>
   29.22 -
   29.23 -#include <asm/semaphore.h>
   29.24 -#include <asm/processor.h>
   29.25 -#include <asm/i387.h>
   29.26 -#include <asm/uaccess.h>
   29.27 -#include <asm/checksum.h>
   29.28 -#include <asm/io.h>
   29.29 -#include <asm/hardirq.h>
   29.30 -#include <asm/delay.h>
   29.31 -#include <asm/irq.h>
   29.32 -#include <asm/mmx.h>
   29.33 -#include <asm/desc.h>
   29.34 -#include <asm/pgtable.h>
   29.35 -#include <asm/pgalloc.h>
   29.36 -#include <asm/tlbflush.h>
   29.37 -#include <asm/nmi.h>
   29.38 -#include <asm/ist.h>
   29.39 -
   29.40 -extern void dump_thread(struct pt_regs *, struct user *);
   29.41 -extern spinlock_t rtc_lock;
   29.42 -
   29.43 -/* This is definitely a GPL-only symbol */
   29.44 -EXPORT_SYMBOL_GPL(cpu_gdt_table);
   29.45 -
   29.46 -#if defined(CONFIG_APM_MODULE)
   29.47 -extern void machine_real_restart(unsigned char *, int);
   29.48 -EXPORT_SYMBOL(machine_real_restart);
   29.49 -extern void default_idle(void);
   29.50 -EXPORT_SYMBOL(default_idle);
   29.51 -#endif
   29.52 -
   29.53 -#ifdef CONFIG_SMP
   29.54 -extern void FASTCALL( __write_lock_failed(rwlock_t *rw));
   29.55 -extern void FASTCALL( __read_lock_failed(rwlock_t *rw));
   29.56 -#endif
   29.57 -
   29.58 -#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE)
   29.59 -extern struct drive_info_struct drive_info;
   29.60 -EXPORT_SYMBOL(drive_info);
   29.61 -#endif
   29.62 -
   29.63 -extern unsigned long cpu_khz;
   29.64 -extern unsigned long get_cmos_time(void);
   29.65 -
   29.66 -/* platform dependent support */
   29.67 -EXPORT_SYMBOL(boot_cpu_data);
   29.68 -EXPORT_SYMBOL(MCA_bus);
   29.69 -#ifdef CONFIG_DISCONTIGMEM
   29.70 -EXPORT_SYMBOL(node_data);
   29.71 -EXPORT_SYMBOL(physnode_map);
   29.72 -#endif
   29.73 -#ifdef CONFIG_X86_NUMAQ
   29.74 -EXPORT_SYMBOL(xquad_portio);
   29.75 -#endif
   29.76 -EXPORT_SYMBOL(dump_thread);
   29.77 -EXPORT_SYMBOL(dump_fpu);
   29.78 -EXPORT_SYMBOL(dump_extended_fpu);
   29.79 -EXPORT_SYMBOL_GPL(kernel_fpu_begin);
   29.80 -EXPORT_SYMBOL(__ioremap);
   29.81 -EXPORT_SYMBOL(ioremap_nocache);
   29.82 -EXPORT_SYMBOL(iounmap);
   29.83 -EXPORT_SYMBOL(enable_irq);
   29.84 -EXPORT_SYMBOL(disable_irq);
   29.85 -EXPORT_SYMBOL(disable_irq_nosync);
   29.86 -EXPORT_SYMBOL(probe_irq_mask);
   29.87 -EXPORT_SYMBOL(kernel_thread);
   29.88 -EXPORT_SYMBOL(pm_idle);
   29.89 -#ifdef CONFIG_APM
   29.90 -EXPORT_SYMBOL(pm_power_off);
   29.91 -#endif
   29.92 -EXPORT_SYMBOL(get_cmos_time);
   29.93 -EXPORT_SYMBOL(cpu_khz);
   29.94 -EXPORT_SYMBOL(apm_info);
   29.95 -
   29.96 -EXPORT_SYMBOL_NOVERS(__down_failed);
   29.97 -EXPORT_SYMBOL_NOVERS(__down_failed_interruptible);
   29.98 -EXPORT_SYMBOL_NOVERS(__down_failed_trylock);
   29.99 -EXPORT_SYMBOL_NOVERS(__up_wakeup);
  29.100 -/* Networking helper routines. */
  29.101 -EXPORT_SYMBOL(csum_partial_copy_generic);
  29.102 -/* Delay loops */
  29.103 -EXPORT_SYMBOL(__ndelay);
  29.104 -EXPORT_SYMBOL(__udelay);
  29.105 -EXPORT_SYMBOL(__delay);
  29.106 -EXPORT_SYMBOL(__const_udelay);
  29.107 -
  29.108 -EXPORT_SYMBOL_NOVERS(__get_user_1);
  29.109 -EXPORT_SYMBOL_NOVERS(__get_user_2);
  29.110 -EXPORT_SYMBOL_NOVERS(__get_user_4);
  29.111 -
  29.112 -EXPORT_SYMBOL(strpbrk);
  29.113 -EXPORT_SYMBOL(strstr);
  29.114 -
  29.115 -EXPORT_SYMBOL(strncpy_from_user);
  29.116 -EXPORT_SYMBOL(__strncpy_from_user);
  29.117 -EXPORT_SYMBOL(clear_user);
  29.118 -EXPORT_SYMBOL(__clear_user);
  29.119 -EXPORT_SYMBOL(__copy_from_user_ll);
  29.120 -EXPORT_SYMBOL(__copy_to_user_ll);
  29.121 -EXPORT_SYMBOL(strnlen_user);
  29.122 -
  29.123 -EXPORT_SYMBOL(dma_alloc_coherent);
  29.124 -EXPORT_SYMBOL(dma_free_coherent);
  29.125 -
  29.126 -#ifdef CONFIG_PCI
  29.127 -EXPORT_SYMBOL(pcibios_penalize_isa_irq);
  29.128 -EXPORT_SYMBOL(pci_mem_start);
  29.129 -#endif
  29.130 -
  29.131 -#ifdef CONFIG_PCI_BIOS
  29.132 -EXPORT_SYMBOL(pcibios_set_irq_routing);
  29.133 -EXPORT_SYMBOL(pcibios_get_irq_routing_table);
  29.134 -#endif
  29.135 -
  29.136 -#ifdef CONFIG_X86_USE_3DNOW
  29.137 -EXPORT_SYMBOL(_mmx_memcpy);
  29.138 -EXPORT_SYMBOL(mmx_clear_page);
  29.139 -EXPORT_SYMBOL(mmx_copy_page);
  29.140 -#endif
  29.141 -
  29.142 -#ifdef CONFIG_X86_HT
  29.143 -EXPORT_SYMBOL(smp_num_siblings);
  29.144 -EXPORT_SYMBOL(cpu_sibling_map);
  29.145 -#endif
  29.146 -
  29.147 -#ifdef CONFIG_SMP
  29.148 -EXPORT_SYMBOL(cpu_data);
  29.149 -EXPORT_SYMBOL(cpu_online_map);
  29.150 -EXPORT_SYMBOL(cpu_callout_map);
  29.151 -EXPORT_SYMBOL_NOVERS(__write_lock_failed);
  29.152 -EXPORT_SYMBOL_NOVERS(__read_lock_failed);
  29.153 -
  29.154 -/* Global SMP stuff */
  29.155 -EXPORT_SYMBOL(synchronize_irq);
  29.156 -EXPORT_SYMBOL(smp_call_function);
  29.157 -
  29.158 -/* TLB flushing */
  29.159 -EXPORT_SYMBOL(flush_tlb_page);
  29.160 -EXPORT_SYMBOL_GPL(flush_tlb_all);
  29.161 -#endif
  29.162 -
  29.163 -#ifdef CONFIG_X86_IO_APIC
  29.164 -EXPORT_SYMBOL(IO_APIC_get_PCI_irq_vector);
  29.165 -#endif
  29.166 -
  29.167 -#ifdef CONFIG_MCA
  29.168 -EXPORT_SYMBOL(machine_id);
  29.169 -#endif
  29.170 -
  29.171 -#ifdef CONFIG_VT
  29.172 -EXPORT_SYMBOL(screen_info);
  29.173 -#endif
  29.174 -
  29.175 -EXPORT_SYMBOL(get_wchan);
  29.176 -
  29.177 -EXPORT_SYMBOL(rtc_lock);
  29.178 -
  29.179 -EXPORT_SYMBOL_GPL(set_nmi_callback);
  29.180 -EXPORT_SYMBOL_GPL(unset_nmi_callback);
  29.181 - 
  29.182 -#undef memcpy
  29.183 -#undef memset
  29.184 -#undef memcmp
  29.185 -extern void * memset(void *,int,__kernel_size_t);
  29.186 -extern void * memcpy(void *,const void *,__kernel_size_t);
  29.187 -extern int memcmp(const void *,const void *,__kernel_size_t);
  29.188 -EXPORT_SYMBOL_NOVERS(memcpy);
  29.189 -EXPORT_SYMBOL_NOVERS(memset);
  29.190 -EXPORT_SYMBOL_NOVERS(memcmp);
  29.191 -
  29.192 -#ifdef CONFIG_HAVE_DEC_LOCK
  29.193 -EXPORT_SYMBOL(atomic_dec_and_lock);
  29.194 -#endif
  29.195 -
  29.196 -extern int is_sony_vaio_laptop;
  29.197 -EXPORT_SYMBOL(is_sony_vaio_laptop);
  29.198 -
  29.199 -EXPORT_SYMBOL(__PAGE_KERNEL);
  29.200 -
  29.201 -#ifdef CONFIG_HIGHMEM
  29.202 -EXPORT_SYMBOL(kmap);
  29.203 -EXPORT_SYMBOL(kunmap);
  29.204 -EXPORT_SYMBOL(kmap_atomic);
  29.205 -EXPORT_SYMBOL(kunmap_atomic);
  29.206 -EXPORT_SYMBOL(kmap_atomic_to_page);
  29.207 -#endif
  29.208 -
  29.209 -#if defined(CONFIG_X86_SPEEDSTEP_SMI) || defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE)
  29.210 -EXPORT_SYMBOL(ist_info);
  29.211 -#endif
  29.212 -
  29.213 -EXPORT_SYMBOL(csum_partial);
    30.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/ioport.c	Fri Aug 27 08:43:54 2004 +0000
    30.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.3 @@ -1,49 +0,0 @@
    30.4 -#include <linux/sched.h>
    30.5 -#include <linux/kernel.h>
    30.6 -#include <linux/errno.h>
    30.7 -#include <linux/types.h>
    30.8 -#include <linux/ioport.h>
    30.9 -#include <linux/mm.h>
   30.10 -#include <linux/smp.h>
   30.11 -#include <linux/smp_lock.h>
   30.12 -#include <linux/stddef.h>
   30.13 -#include <linux/slab.h>
   30.14 -#include <asm/hypervisor-ifs/dom0_ops.h>
   30.15 -
   30.16 -asmlinkage long sys_iopl(unsigned int new_io_pl)
   30.17 -{
   30.18 -	unsigned int old_io_pl = current->thread.io_pl;
   30.19 -	dom0_op_t op;
   30.20 -
   30.21 -	if (new_io_pl > 3)
   30.22 -		return -EINVAL;
   30.23 -
   30.24 -	/* Need "raw I/O" privileges for direct port access. */
   30.25 -	if ((new_io_pl > old_io_pl) && !capable(CAP_SYS_RAWIO))
   30.26 -		return -EPERM;
   30.27 -
   30.28 -	if (!(start_info.flags & SIF_PRIVILEGED))
   30.29 -		return -EPERM;
   30.30 -
   30.31 -	/* Maintain OS privileges even if user attempts to relinquish them. */
   30.32 -	if (new_io_pl == 0)
   30.33 -		new_io_pl = 1;
   30.34 -
   30.35 -	/* Change our version of the privilege levels. */
   30.36 -	current->thread.io_pl = new_io_pl;
   30.37 -
   30.38 -	/* Force the change at ring 0. */
   30.39 -	op.cmd           = DOM0_IOPL;
   30.40 -	op.u.iopl.domain = DOMID_SELF;
   30.41 -	op.u.iopl.iopl   = new_io_pl;
   30.42 -	HYPERVISOR_dom0_op(&op);
   30.43 -
   30.44 -	return 0;
   30.45 -}
   30.46 -
   30.47 -asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
   30.48 -{
   30.49 -	printk(KERN_INFO "ioperm not fully supported - %s\n",
   30.50 -		turn_on ? "set iopl to 3" : "ignore resource release");
   30.51 -	return turn_on ? sys_iopl(3) : 0;
   30.52 -}
    31.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/irq.c	Fri Aug 27 08:43:54 2004 +0000
    31.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.3 @@ -1,1196 +0,0 @@
    31.4 -/*
    31.5 - *	linux/arch/i386/kernel/irq.c
    31.6 - *
    31.7 - *	Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
    31.8 - *
    31.9 - * This file contains the code used by various IRQ handling routines:
   31.10 - * asking for different IRQ's should be done through these routines
   31.11 - * instead of just grabbing them. Thus setups with different IRQ numbers
   31.12 - * shouldn't result in any weird surprises, and installing new handlers
   31.13 - * should be easier.
   31.14 - */
   31.15 -
   31.16 -/*
   31.17 - * (mostly architecture independent, will move to kernel/irq.c in 2.5.)
   31.18 - *
   31.19 - * IRQs are in fact implemented a bit like signal handlers for the kernel.
   31.20 - * Naturally it's not a 1:1 relation, but there are similarities.
   31.21 - */
   31.22 -
   31.23 -#include <linux/config.h>
   31.24 -#include <linux/errno.h>
   31.25 -#include <linux/module.h>
   31.26 -#include <linux/signal.h>
   31.27 -#include <linux/sched.h>
   31.28 -#include <linux/ioport.h>
   31.29 -#include <linux/interrupt.h>
   31.30 -#include <linux/timex.h>
   31.31 -#include <linux/slab.h>
   31.32 -#include <linux/random.h>
   31.33 -#include <linux/smp_lock.h>
   31.34 -#include <linux/init.h>
   31.35 -#include <linux/kernel_stat.h>
   31.36 -#include <linux/irq.h>
   31.37 -#include <linux/proc_fs.h>
   31.38 -#include <linux/seq_file.h>
   31.39 -#include <linux/kallsyms.h>
   31.40 -
   31.41 -#include <asm/atomic.h>
   31.42 -#include <asm/io.h>
   31.43 -#include <asm/smp.h>
   31.44 -#include <asm/system.h>
   31.45 -#include <asm/bitops.h>
   31.46 -#include <asm/uaccess.h>
   31.47 -#include <asm/pgalloc.h>
   31.48 -#include <asm/delay.h>
   31.49 -#include <asm/desc.h>
   31.50 -#include <asm/irq.h>
   31.51 -
   31.52 -/*
   31.53 - * Linux has a controller-independent x86 interrupt architecture.
   31.54 - * every controller has a 'controller-template', that is used
   31.55 - * by the main code to do the right thing. Each driver-visible
   31.56 - * interrupt source is transparently wired to the apropriate
   31.57 - * controller. Thus drivers need not be aware of the
   31.58 - * interrupt-controller.
   31.59 - *
   31.60 - * Various interrupt controllers we handle: 8259 PIC, SMP IO-APIC,
   31.61 - * PIIX4's internal 8259 PIC and SGI's Visual Workstation Cobalt (IO-)APIC.
   31.62 - * (IO-APICs assumed to be messaging to Pentium local-APICs)
   31.63 - *
   31.64 - * the code is designed to be easily extended with new/different
   31.65 - * interrupt controllers, without having to do assembly magic.
   31.66 - */
   31.67 -
   31.68 -/*
   31.69 - * Controller mappings for all interrupt sources:
   31.70 - */
   31.71 -irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned = {
   31.72 -	[0 ... NR_IRQS-1] = {
   31.73 -		.handler = &no_irq_type,
   31.74 -		.lock = SPIN_LOCK_UNLOCKED
   31.75 -	}
   31.76 -};
   31.77 -
   31.78 -static void register_irq_proc (unsigned int irq);
   31.79 -
   31.80 -/*
   31.81 - * per-CPU IRQ handling stacks
   31.82 - */
   31.83 -#ifdef CONFIG_4KSTACKS
   31.84 -union irq_ctx *hardirq_ctx[NR_CPUS];
   31.85 -union irq_ctx *softirq_ctx[NR_CPUS];
   31.86 -#endif
   31.87 -
   31.88 -/*
   31.89 - * Special irq handlers.
   31.90 - */
   31.91 -
   31.92 -irqreturn_t no_action(int cpl, void *dev_id, struct pt_regs *regs)
   31.93 -{ return IRQ_NONE; }
   31.94 -
   31.95 -/*
   31.96 - * Generic no controller code
   31.97 - */
   31.98 -
   31.99 -static void enable_none(unsigned int irq) { }
  31.100 -static unsigned int startup_none(unsigned int irq) { return 0; }
  31.101 -static void disable_none(unsigned int irq) { }
  31.102 -static void ack_none(unsigned int irq)
  31.103 -{
  31.104 -/*
  31.105 - * 'what should we do if we get a hw irq event on an illegal vector'.
  31.106 - * each architecture has to answer this themselves, it doesn't deserve
  31.107 - * a generic callback i think.
  31.108 - */
  31.109 -#ifdef CONFIG_X86
  31.110 -	printk("unexpected IRQ trap at vector %02x\n", irq);
  31.111 -#ifdef CONFIG_X86_LOCAL_APIC
  31.112 -	/*
  31.113 -	 * Currently unexpected vectors happen only on SMP and APIC.
  31.114 -	 * We _must_ ack these because every local APIC has only N
  31.115 -	 * irq slots per priority level, and a 'hanging, unacked' IRQ
  31.116 -	 * holds up an irq slot - in excessive cases (when multiple
  31.117 -	 * unexpected vectors occur) that might lock up the APIC
  31.118 -	 * completely.
  31.119 -	 */
  31.120 -	ack_APIC_irq();
  31.121 -#endif
  31.122 -#endif
  31.123 -}
  31.124 -
  31.125 -/* startup is the same as "enable", shutdown is same as "disable" */
  31.126 -#define shutdown_none	disable_none
  31.127 -#define end_none	enable_none
  31.128 -
  31.129 -struct hw_interrupt_type no_irq_type = {
  31.130 -	"none",
  31.131 -	startup_none,
  31.132 -	shutdown_none,
  31.133 -	enable_none,
  31.134 -	disable_none,
  31.135 -	ack_none,
  31.136 -	end_none
  31.137 -};
  31.138 -
  31.139 -atomic_t irq_err_count;
  31.140 -#if defined(CONFIG_X86_IO_APIC) && defined(APIC_MISMATCH_DEBUG)
  31.141 -atomic_t irq_mis_count;
  31.142 -#endif
  31.143 -
  31.144 -/*
  31.145 - * Generic, controller-independent functions:
  31.146 - */
  31.147 -
  31.148 -int show_interrupts(struct seq_file *p, void *v)
  31.149 -{
  31.150 -	int i = *(loff_t *) v, j;
  31.151 -	struct irqaction * action;
  31.152 -	unsigned long flags;
  31.153 -
  31.154 -	if (i == 0) {
  31.155 -		seq_printf(p, "           ");
  31.156 -		for (j=0; j<NR_CPUS; j++)
  31.157 -			if (cpu_online(j))
  31.158 -				seq_printf(p, "CPU%d       ",j);
  31.159 -		seq_putc(p, '\n');
  31.160 -	}
  31.161 -
  31.162 -	if (i < NR_IRQS) {
  31.163 -		spin_lock_irqsave(&irq_desc[i].lock, flags);
  31.164 -		action = irq_desc[i].action;
  31.165 -		if (!action) 
  31.166 -			goto skip;
  31.167 -		seq_printf(p, "%3d: ",i);
  31.168 -#ifndef CONFIG_SMP
  31.169 -		seq_printf(p, "%10u ", kstat_irqs(i));
  31.170 -#else
  31.171 -		for (j = 0; j < NR_CPUS; j++)
  31.172 -			if (cpu_online(j))
  31.173 -				seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
  31.174 -#endif
  31.175 -		seq_printf(p, " %14s", irq_desc[i].handler->typename);
  31.176 -		seq_printf(p, "  %s", action->name);
  31.177 -
  31.178 -		for (action=action->next; action; action = action->next)
  31.179 -			seq_printf(p, ", %s", action->name);
  31.180 -
  31.181 -		seq_putc(p, '\n');
  31.182 -skip:
  31.183 -		spin_unlock_irqrestore(&irq_desc[i].lock, flags);
  31.184 -	} else if (i == NR_IRQS) {
  31.185 -		seq_printf(p, "NMI: ");
  31.186 -		for (j = 0; j < NR_CPUS; j++)
  31.187 -			if (cpu_online(j))
  31.188 -				seq_printf(p, "%10u ", nmi_count(j));
  31.189 -		seq_putc(p, '\n');
  31.190 -#ifdef CONFIG_X86_LOCAL_APIC
  31.191 -		seq_printf(p, "LOC: ");
  31.192 -		for (j = 0; j < NR_CPUS; j++)
  31.193 -			if (cpu_online(j))
  31.194 -				seq_printf(p, "%10u ", irq_stat[j].apic_timer_irqs);
  31.195 -		seq_putc(p, '\n');
  31.196 -#endif
  31.197 -		seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
  31.198 -#if defined(CONFIG_X86_IO_APIC) && defined(APIC_MISMATCH_DEBUG)
  31.199 -		seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count));
  31.200 -#endif
  31.201 -	}
  31.202 -	return 0;
  31.203 -}
  31.204 -
  31.205 -
  31.206 -
  31.207 -
  31.208 -#ifdef CONFIG_SMP
  31.209 -inline void synchronize_irq(unsigned int irq)
  31.210 -{
  31.211 -	while (irq_desc[irq].status & IRQ_INPROGRESS)
  31.212 -		cpu_relax();
  31.213 -}
  31.214 -#endif
  31.215 -
  31.216 -/*
  31.217 - * This should really return information about whether
  31.218 - * we should do bottom half handling etc. Right now we
  31.219 - * end up _always_ checking the bottom half, which is a
  31.220 - * waste of time and is not what some drivers would
  31.221 - * prefer.
  31.222 - */
  31.223 -asmlinkage int handle_IRQ_event(unsigned int irq,
  31.224 -		struct pt_regs *regs, struct irqaction *action)
  31.225 -{
  31.226 -	int status = 1;	/* Force the "do bottom halves" bit */
  31.227 -	int retval = 0;
  31.228 -
  31.229 -	if (!(action->flags & SA_INTERRUPT))
  31.230 -		local_irq_enable();
  31.231 -
  31.232 -	do {
  31.233 -		status |= action->flags;
  31.234 -		retval |= action->handler(irq, action->dev_id, regs);
  31.235 -		action = action->next;
  31.236 -	} while (action);
  31.237 -	if (status & SA_SAMPLE_RANDOM)
  31.238 -		add_interrupt_randomness(irq);
  31.239 -	local_irq_disable();
  31.240 -	return retval;
  31.241 -}
  31.242 -
  31.243 -static void __report_bad_irq(int irq, irq_desc_t *desc, irqreturn_t action_ret)
  31.244 -{
  31.245 -	struct irqaction *action;
  31.246 -
  31.247 -	if (action_ret != IRQ_HANDLED && action_ret != IRQ_NONE) {
  31.248 -		printk(KERN_ERR "irq event %d: bogus return value %x\n",
  31.249 -				irq, action_ret);
  31.250 -	} else {
  31.251 -		printk(KERN_ERR "irq %d: nobody cared!\n", irq);
  31.252 -	}
  31.253 -	dump_stack();
  31.254 -	printk(KERN_ERR "handlers:\n");
  31.255 -	action = desc->action;
  31.256 -	do {
  31.257 -		printk(KERN_ERR "[<%p>]", action->handler);
  31.258 -		print_symbol(" (%s)",
  31.259 -			(unsigned long)action->handler);
  31.260 -		printk("\n");
  31.261 -		action = action->next;
  31.262 -	} while (action);
  31.263 -}
  31.264 -
  31.265 -static void report_bad_irq(int irq, irq_desc_t *desc, irqreturn_t action_ret)
  31.266 -{
  31.267 -	static int count = 100;
  31.268 -
  31.269 -	if (count) {
  31.270 -		count--;
  31.271 -		__report_bad_irq(irq, desc, action_ret);
  31.272 -	}
  31.273 -}
  31.274 -
  31.275 -static int noirqdebug;
  31.276 -
  31.277 -static int __init noirqdebug_setup(char *str)
  31.278 -{
  31.279 -	noirqdebug = 1;
  31.280 -	printk("IRQ lockup detection disabled\n");
  31.281 -	return 1;
  31.282 -}
  31.283 -
  31.284 -__setup("noirqdebug", noirqdebug_setup);
  31.285 -
  31.286 -/*
  31.287 - * If 99,900 of the previous 100,000 interrupts have not been handled then
  31.288 - * assume that the IRQ is stuck in some manner.  Drop a diagnostic and try to
  31.289 - * turn the IRQ off.
  31.290 - *
  31.291 - * (The other 100-of-100,000 interrupts may have been a correctly-functioning
  31.292 - *  device sharing an IRQ with the failing one)
  31.293 - *
  31.294 - * Called under desc->lock
  31.295 - */
  31.296 -static void note_interrupt(int irq, irq_desc_t *desc, irqreturn_t action_ret)
  31.297 -{
  31.298 -	if (action_ret != IRQ_HANDLED) {
  31.299 -		desc->irqs_unhandled++;
  31.300 -		if (action_ret != IRQ_NONE)
  31.301 -			report_bad_irq(irq, desc, action_ret);
  31.302 -	}
  31.303 -
  31.304 -	desc->irq_count++;
  31.305 -	if (desc->irq_count < 100000)
  31.306 -		return;
  31.307 -
  31.308 -	desc->irq_count = 0;
  31.309 -	if (desc->irqs_unhandled > 99900) {
  31.310 -		/*
  31.311 -		 * The interrupt is stuck
  31.312 -		 */
  31.313 -		__report_bad_irq(irq, desc, action_ret);
  31.314 -		/*
  31.315 -		 * Now kill the IRQ
  31.316 -		 */
  31.317 -		printk(KERN_EMERG "Disabling IRQ #%d\n", irq);
  31.318 -		desc->status |= IRQ_DISABLED;
  31.319 -		desc->handler->disable(irq);
  31.320 -	}
  31.321 -	desc->irqs_unhandled = 0;
  31.322 -}
  31.323 -
  31.324 -/*
  31.325 - * Generic enable/disable code: this just calls
  31.326 - * down into the PIC-specific version for the actual
  31.327 - * hardware disable after having gotten the irq
  31.328 - * controller lock. 
  31.329 - */
  31.330 - 
  31.331 -/**
  31.332 - *	disable_irq_nosync - disable an irq without waiting
  31.333 - *	@irq: Interrupt to disable
  31.334 - *
  31.335 - *	Disable the selected interrupt line.  Disables and Enables are
  31.336 - *	nested.
  31.337 - *	Unlike disable_irq(), this function does not ensure existing
  31.338 - *	instances of the IRQ handler have completed before returning.
  31.339 - *
  31.340 - *	This function may be called from IRQ context.
  31.341 - */
  31.342 - 
  31.343 -inline void disable_irq_nosync(unsigned int irq)
  31.344 -{
  31.345 -	irq_desc_t *desc = irq_desc + irq;
  31.346 -	unsigned long flags;
  31.347 -
  31.348 -	spin_lock_irqsave(&desc->lock, flags);
  31.349 -	if (!desc->depth++) {
  31.350 -		desc->status |= IRQ_DISABLED;
  31.351 -		desc->handler->disable(irq);
  31.352 -	}
  31.353 -	spin_unlock_irqrestore(&desc->lock, flags);
  31.354 -}
  31.355 -
  31.356 -/**
  31.357 - *	disable_irq - disable an irq and wait for completion
  31.358 - *	@irq: Interrupt to disable
  31.359 - *
  31.360 - *	Disable the selected interrupt line.  Enables and Disables are
  31.361 - *	nested.
  31.362 - *	This function waits for any pending IRQ handlers for this interrupt
  31.363 - *	to complete before returning. If you use this function while
  31.364 - *	holding a resource the IRQ handler may need you will deadlock.
  31.365 - *
  31.366 - *	This function may be called - with care - from IRQ context.
  31.367 - */
  31.368 - 
  31.369 -void disable_irq(unsigned int irq)
  31.370 -{
  31.371 -	irq_desc_t *desc = irq_desc + irq;
  31.372 -	disable_irq_nosync(irq);
  31.373 -	if (desc->action)
  31.374 -		synchronize_irq(irq);
  31.375 -}
  31.376 -
  31.377 -/**
  31.378 - *	enable_irq - enable handling of an irq
  31.379 - *	@irq: Interrupt to enable
  31.380 - *
  31.381 - *	Undoes the effect of one call to disable_irq().  If this
  31.382 - *	matches the last disable, processing of interrupts on this
  31.383 - *	IRQ line is re-enabled.
  31.384 - *
  31.385 - *	This function may be called from IRQ context.
  31.386 - */
  31.387 - 
  31.388 -void enable_irq(unsigned int irq)
  31.389 -{
  31.390 -	irq_desc_t *desc = irq_desc + irq;
  31.391 -	unsigned long flags;
  31.392 -
  31.393 -	spin_lock_irqsave(&desc->lock, flags);
  31.394 -	switch (desc->depth) {
  31.395 -	case 1: {
  31.396 -		unsigned int status = desc->status & ~IRQ_DISABLED;
  31.397 -		desc->status = status;
  31.398 -		if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
  31.399 -			desc->status = status | IRQ_REPLAY;
  31.400 -			hw_resend_irq(desc->handler,irq);
  31.401 -		}
  31.402 -		desc->handler->enable(irq);
  31.403 -		/* fall-through */
  31.404 -	}
  31.405 -	default:
  31.406 -		desc->depth--;
  31.407 -		break;
  31.408 -	case 0:
  31.409 -		printk("enable_irq(%u) unbalanced from %p\n", irq,
  31.410 -		       __builtin_return_address(0));
  31.411 -	}
  31.412 -	spin_unlock_irqrestore(&desc->lock, flags);
  31.413 -}
  31.414 -
  31.415 -/*
  31.416 - * do_IRQ handles all normal device IRQ's (the special
  31.417 - * SMP cross-CPU interrupts have their own specific
  31.418 - * handlers).
  31.419 - */
  31.420 -asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs)
  31.421 -{	
  31.422 -	/* 
  31.423 -	 * We ack quickly, we don't want the irq controller
  31.424 -	 * thinking we're snobs just because some other CPU has
  31.425 -	 * disabled global interrupts (we have already done the
  31.426 -	 * INT_ACK cycles, it's too late to try to pretend to the
  31.427 -	 * controller that we aren't taking the interrupt).
  31.428 -	 *
  31.429 -	 * 0 return value means that this irq is already being
  31.430 -	 * handled by some other CPU. (or is disabled)
  31.431 -	 */
  31.432 -	irq_desc_t *desc = irq_desc + irq;
  31.433 -	struct irqaction * action;
  31.434 -	unsigned int status;
  31.435 -
  31.436 -	irq_enter();
  31.437 -
  31.438 -#ifdef CONFIG_DEBUG_STACKOVERFLOW
  31.439 -	/* Debugging check for stack overflow: is there less than 1KB free? */
  31.440 -	{
  31.441 -		long esp;
  31.442 -
  31.443 -		__asm__ __volatile__("andl %%esp,%0" :
  31.444 -					"=r" (esp) : "0" (THREAD_SIZE - 1));
  31.445 -		if (unlikely(esp < (sizeof(struct thread_info) + STACK_WARN))) {
  31.446 -			printk("do_IRQ: stack overflow: %ld\n",
  31.447 -				esp - sizeof(struct thread_info));
  31.448 -			dump_stack();
  31.449 -		}
  31.450 -	}
  31.451 -#endif
  31.452 -	kstat_this_cpu.irqs[irq]++;
  31.453 -	spin_lock(&desc->lock);
  31.454 -	desc->handler->ack(irq);
  31.455 -	/*
  31.456 -	   REPLAY is when Linux resends an IRQ that was dropped earlier
  31.457 -	   WAITING is used by probe to mark irqs that are being tested
  31.458 -	   */
  31.459 -	status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING);
  31.460 -	status |= IRQ_PENDING; /* we _want_ to handle it */
  31.461 -
  31.462 -	/*
  31.463 -	 * If the IRQ is disabled for whatever reason, we cannot
  31.464 -	 * use the action we have.
  31.465 -	 */
  31.466 -	action = NULL;
  31.467 -	if (likely(!(status & (IRQ_DISABLED | IRQ_INPROGRESS)))) {
  31.468 -		action = desc->action;
  31.469 -		status &= ~IRQ_PENDING; /* we commit to handling */
  31.470 -		status |= IRQ_INPROGRESS; /* we are handling it */
  31.471 -	}
  31.472 -	desc->status = status;
  31.473 -
  31.474 -	/*
  31.475 -	 * If there is no IRQ handler or it was disabled, exit early.
  31.476 -	   Since we set PENDING, if another processor is handling
  31.477 -	   a different instance of this same irq, the other processor
  31.478 -	   will take care of it.
  31.479 -	 */
  31.480 -	if (unlikely(!action))
  31.481 -		goto out;
  31.482 -
  31.483 -	/*
  31.484 -	 * Edge triggered interrupts need to remember
  31.485 -	 * pending events.
  31.486 -	 * This applies to any hw interrupts that allow a second
  31.487 -	 * instance of the same irq to arrive while we are in do_IRQ
  31.488 -	 * or in the handler. But the code here only handles the _second_
  31.489 -	 * instance of the irq, not the third or fourth. So it is mostly
  31.490 -	 * useful for irq hardware that does not mask cleanly in an
  31.491 -	 * SMP environment.
  31.492 -	 */
  31.493 -#ifdef CONFIG_4KSTACKS
  31.494 -
  31.495 -	for (;;) {
  31.496 -		irqreturn_t action_ret;
  31.497 -		u32 *isp;
  31.498 -		union irq_ctx * curctx;
  31.499 -		union irq_ctx * irqctx;
  31.500 -
  31.501 -		curctx = (union irq_ctx *) current_thread_info();
  31.502 -		irqctx = hardirq_ctx[smp_processor_id()];
  31.503 -
  31.504 -		spin_unlock(&desc->lock);
  31.505 -
  31.506 -		/*
  31.507 -		 * this is where we switch to the IRQ stack. However, if we are already using
  31.508 -		 * the IRQ stack (because we interrupted a hardirq handler) we can't do that
  31.509 -		 * and just have to keep using the current stack (which is the irq stack already
  31.510 -		 * after all)
  31.511 -		 */
  31.512 -
  31.513 -		if (curctx == irqctx)
  31.514 -			action_ret = handle_IRQ_event(irq, regs, action);
  31.515 -		else {
  31.516 -			/* build the stack frame on the IRQ stack */
  31.517 -			isp = (u32*) ((char*)irqctx + sizeof(*irqctx));
  31.518 -			irqctx->tinfo.task = curctx->tinfo.task;
  31.519 -			irqctx->tinfo.previous_esp = current_stack_pointer();
  31.520 -
  31.521 -			*--isp = (u32) action;
  31.522 -			*--isp = (u32) regs;
  31.523 -			*--isp = (u32) irq;
  31.524 -
  31.525 -			asm volatile(
  31.526 -				"       xchgl   %%ebx,%%esp     \n"
  31.527 -				"       call    handle_IRQ_event \n"
  31.528 -				"       xchgl   %%ebx,%%esp     \n"
  31.529 -				: "=a"(action_ret)
  31.530 -				: "b"(isp)
  31.531 -				: "memory", "cc", "edx", "ecx"
  31.532 -			);
  31.533 -
  31.534 -
  31.535 -		}
  31.536 -		spin_lock(&desc->lock);
  31.537 -		if (!noirqdebug)
  31.538 -			note_interrupt(irq, desc, action_ret);
  31.539 -		if (curctx != irqctx)
  31.540 -			irqctx->tinfo.task = NULL;
  31.541 -		if (likely(!(desc->status & IRQ_PENDING)))
  31.542 -			break;
  31.543 -		desc->status &= ~IRQ_PENDING;
  31.544 -	}
  31.545 -
  31.546 -#else
  31.547 -
  31.548 -	for (;;) {
  31.549 -		irqreturn_t action_ret;
  31.550 -
  31.551 -		spin_unlock(&desc->lock);
  31.552 -
  31.553 -		action_ret = handle_IRQ_event(irq, regs, action);
  31.554 -
  31.555 -		spin_lock(&desc->lock);
  31.556 -		if (!noirqdebug)
  31.557 -			note_interrupt(irq, desc, action_ret);
  31.558 -		if (likely(!(desc->status & IRQ_PENDING)))
  31.559 -			break;
  31.560 -		desc->status &= ~IRQ_PENDING;
  31.561 -	}
  31.562 -#endif
  31.563 -	desc->status &= ~IRQ_INPROGRESS;
  31.564 -
  31.565 -out:
  31.566 -	/*
  31.567 -	 * The ->end() handler has to deal with interrupts which got
  31.568 -	 * disabled while the handler was running.
  31.569 -	 */
  31.570 -	desc->handler->end(irq);
  31.571 -	spin_unlock(&desc->lock);
  31.572 -
  31.573 -	irq_exit();
  31.574 -
  31.575 -	return 1;
  31.576 -}
  31.577 -
  31.578 -int can_request_irq(unsigned int irq, unsigned long irqflags)
  31.579 -{
  31.580 -	struct irqaction *action;
  31.581 -
  31.582 -	if (irq >= NR_IRQS)
  31.583 -		return 0;
  31.584 -	action = irq_desc[irq].action;
  31.585 -	if (action) {
  31.586 -		if (irqflags & action->flags & SA_SHIRQ)
  31.587 -			action = NULL;
  31.588 -	}
  31.589 -	return !action;
  31.590 -}
  31.591 -
  31.592 -/**
  31.593 - *	request_irq - allocate an interrupt line
  31.594 - *	@irq: Interrupt line to allocate
  31.595 - *	@handler: Function to be called when the IRQ occurs
  31.596 - *	@irqflags: Interrupt type flags
  31.597 - *	@devname: An ascii name for the claiming device
  31.598 - *	@dev_id: A cookie passed back to the handler function
  31.599 - *
  31.600 - *	This call allocates interrupt resources and enables the
  31.601 - *	interrupt line and IRQ handling. From the point this
  31.602 - *	call is made your handler function may be invoked. Since
  31.603 - *	your handler function must clear any interrupt the board 
  31.604 - *	raises, you must take care both to initialise your hardware
  31.605 - *	and to set up the interrupt handler in the right order.
  31.606 - *
  31.607 - *	Dev_id must be globally unique. Normally the address of the
  31.608 - *	device data structure is used as the cookie. Since the handler
  31.609 - *	receives this value it makes sense to use it.
  31.610 - *
  31.611 - *	If your interrupt is shared you must pass a non NULL dev_id
  31.612 - *	as this is required when freeing the interrupt.
  31.613 - *
  31.614 - *	Flags:
  31.615 - *
  31.616 - *	SA_SHIRQ		Interrupt is shared
  31.617 - *
  31.618 - *	SA_INTERRUPT		Disable local interrupts while processing
  31.619 - *
  31.620 - *	SA_SAMPLE_RANDOM	The interrupt can be used for entropy
  31.621 - *
  31.622 - */
  31.623 - 
  31.624 -int request_irq(unsigned int irq, 
  31.625 -		irqreturn_t (*handler)(int, void *, struct pt_regs *),
  31.626 -		unsigned long irqflags, 
  31.627 -		const char * devname,
  31.628 -		void *dev_id)
  31.629 -{
  31.630 -	int retval;
  31.631 -	struct irqaction * action;
  31.632 -
  31.633 -#if 1
  31.634 -	/*
  31.635 -	 * Sanity-check: shared interrupts should REALLY pass in
  31.636 -	 * a real dev-ID, otherwise we'll have trouble later trying
  31.637 -	 * to figure out which interrupt is which (messes up the
  31.638 -	 * interrupt freeing logic etc).
  31.639 -	 */
  31.640 -	if (irqflags & SA_SHIRQ) {
  31.641 -		if (!dev_id)
  31.642 -			printk("Bad boy: %s (at 0x%x) called us without a dev_id!\n", devname, (&irq)[-1]);
  31.643 -	}
  31.644 -#endif
  31.645 -
  31.646 -	if (irq >= NR_IRQS)
  31.647 -		return -EINVAL;
  31.648 -	if (!handler)
  31.649 -		return -EINVAL;
  31.650 -
  31.651 -	action = (struct irqaction *)
  31.652 -			kmalloc(sizeof(struct irqaction), GFP_ATOMIC);
  31.653 -	if (!action)
  31.654 -		return -ENOMEM;
  31.655 -
  31.656 -	action->handler = handler;
  31.657 -	action->flags = irqflags;
  31.658 -	action->mask = 0;
  31.659 -	action->name = devname;
  31.660 -	action->next = NULL;
  31.661 -	action->dev_id = dev_id;
  31.662 -
  31.663 -	retval = setup_irq(irq, action);
  31.664 -	if (retval)
  31.665 -		kfree(action);
  31.666 -	return retval;
  31.667 -}
  31.668 -
  31.669 -EXPORT_SYMBOL(request_irq);
  31.670 -
  31.671 -/**
  31.672 - *	free_irq - free an interrupt
  31.673 - *	@irq: Interrupt line to free
  31.674 - *	@dev_id: Device identity to free
  31.675 - *
  31.676 - *	Remove an interrupt handler. The handler is removed and if the
  31.677 - *	interrupt line is no longer in use by any driver it is disabled.
  31.678 - *	On a shared IRQ the caller must ensure the interrupt is disabled
  31.679 - *	on the card it drives before calling this function. The function
  31.680 - *	does not return until any executing interrupts for this IRQ
  31.681 - *	have completed.
  31.682 - *
  31.683 - *	This function must not be called from interrupt context. 
  31.684 - */
  31.685 - 
  31.686 -void free_irq(unsigned int irq, void *dev_id)
  31.687 -{
  31.688 -	irq_desc_t *desc;
  31.689 -	struct irqaction **p;
  31.690 -	unsigned long flags;
  31.691 -
  31.692 -	if (irq >= NR_IRQS)
  31.693 -		return;
  31.694 -
  31.695 -	desc = irq_desc + irq;
  31.696 -	spin_lock_irqsave(&desc->lock,flags);
  31.697 -	p = &desc->action;
  31.698 -	for (;;) {
  31.699 -		struct irqaction * action = *p;
  31.700 -
  31.701 -		if (action) {
  31.702 -			struct irqaction **pp = p;
  31.703 -			p = &action->next;
  31.704 -			if (action->dev_id != dev_id)
  31.705 -				continue;
  31.706 -
  31.707 -			/* Found it - now remove it from the list of entries */
  31.708 -			*pp = action->next;
  31.709 -			if (!desc->action) {
  31.710 -				desc->status |= IRQ_DISABLED;
  31.711 -				desc->handler->shutdown(irq);
  31.712 -			}
  31.713 -			spin_unlock_irqrestore(&desc->lock,flags);
  31.714 -
  31.715 -			/* Wait to make sure it's not being used on another CPU */
  31.716 -			synchronize_irq(irq);
  31.717 -
  31.718 -#define SA_STATIC_ACTION 0x01000000 /* Is it our duty to free the action? */
  31.719 -			if (!(action->flags & SA_STATIC_ACTION))
  31.720 -				kfree(action);
  31.721 -			return;
  31.722 -		}
  31.723 -		printk("Trying to free free IRQ%d\n",irq);
  31.724 -		spin_unlock_irqrestore(&desc->lock,flags);
  31.725 -		return;
  31.726 -	}
  31.727 -}
  31.728 -
  31.729 -EXPORT_SYMBOL(free_irq);
  31.730 -
  31.731 -/*
  31.732 - * IRQ autodetection code..
  31.733 - *
  31.734 - * This depends on the fact that any interrupt that
  31.735 - * comes in on to an unassigned handler will get stuck
  31.736 - * with "IRQ_WAITING" cleared and the interrupt
  31.737 - * disabled.
  31.738 - */
  31.739 -
  31.740 -static DECLARE_MUTEX(probe_sem);
  31.741 -
  31.742 -/**
  31.743 - *	probe_irq_on	- begin an interrupt autodetect
  31.744 - *
  31.745 - *	Commence probing for an interrupt. The interrupts are scanned
  31.746 - *	and a mask of potential interrupt lines is returned.
  31.747 - *
  31.748 - */
  31.749 - 
  31.750 -unsigned long probe_irq_on(void)
  31.751 -{
  31.752 -	unsigned int i;
  31.753 -	irq_desc_t *desc;
  31.754 -	unsigned long val;
  31.755 -	unsigned long delay;
  31.756 -
  31.757 -	down(&probe_sem);
  31.758 -	/* 
  31.759 -	 * something may have generated an irq long ago and we want to
  31.760 -	 * flush such a longstanding irq before considering it as spurious. 
  31.761 -	 */
  31.762 -	for (i = NR_PIRQS-1; i > 0; i--)  {
  31.763 -		desc = irq_desc + i;
  31.764 -
  31.765 -		spin_lock_irq(&desc->lock);
  31.766 -		if (!irq_desc[i].action) 
  31.767 -			irq_desc[i].handler->startup(i);
  31.768 -		spin_unlock_irq(&desc->lock);
  31.769 -	}
  31.770 -
  31.771 -	/* Wait for longstanding interrupts to trigger. */
  31.772 -	for (delay = jiffies + HZ/50; time_after(delay, jiffies); )
  31.773 -		/* about 20ms delay */ barrier();
  31.774 -
  31.775 -	/*
  31.776 -	 * enable any unassigned irqs
  31.777 -	 * (we must startup again here because if a longstanding irq
  31.778 -	 * happened in the previous stage, it may have masked itself)
  31.779 -	 */
  31.780 -	for (i = NR_PIRQS-1; i > 0; i--) {
  31.781 -		desc = irq_desc + i;
  31.782 -
  31.783 -		spin_lock_irq(&desc->lock);
  31.784 -		if (!desc->action) {
  31.785 -			desc->status |= IRQ_AUTODETECT | IRQ_WAITING;
  31.786 -			if (desc->handler->startup(i))
  31.787 -				desc->status |= IRQ_PENDING;
  31.788 -		}
  31.789 -		spin_unlock_irq(&desc->lock);
  31.790 -	}
  31.791 -
  31.792 -	/*
  31.793 -	 * Wait for spurious interrupts to trigger
  31.794 -	 */
  31.795 -	for (delay = jiffies + HZ/10; time_after(delay, jiffies); )
  31.796 -		/* about 100ms delay */ barrier();
  31.797 -
  31.798 -	/*
  31.799 -	 * Now filter out any obviously spurious interrupts
  31.800 -	 */
  31.801 -	val = 0;
  31.802 -	for (i = 0; i < NR_PIRQS; i++) {
  31.803 -		irq_desc_t *desc = irq_desc + i;
  31.804 -		unsigned int status;
  31.805 -
  31.806 -		spin_lock_irq(&desc->lock);
  31.807 -		status = desc->status;
  31.808 -
  31.809 -		if (status & IRQ_AUTODETECT) {
  31.810 -			/* It triggered already - consider it spurious. */
  31.811 -			if (!(status & IRQ_WAITING)) {
  31.812 -				desc->status = status & ~IRQ_AUTODETECT;
  31.813 -				desc->handler->shutdown(i);
  31.814 -			} else
  31.815 -				if (i < 32)
  31.816 -					val |= 1 << i;
  31.817 -		}
  31.818 -		spin_unlock_irq(&desc->lock);
  31.819 -	}
  31.820 -
  31.821 -	return val;
  31.822 -}
  31.823 -
  31.824 -EXPORT_SYMBOL(probe_irq_on);
  31.825 -
  31.826 -/*
  31.827 - * Return a mask of triggered interrupts (this
  31.828 - * can handle only legacy ISA interrupts).
  31.829 - */
  31.830 - 
  31.831 -/**
  31.832 - *	probe_irq_mask - scan a bitmap of interrupt lines
  31.833 - *	@val:	mask of interrupts to consider
  31.834 - *
  31.835 - *	Scan the ISA bus interrupt lines and return a bitmap of
  31.836 - *	active interrupts. The interrupt probe logic state is then
  31.837 - *	returned to its previous value.
  31.838 - *
  31.839 - *	Note: we need to scan all the irq's even though we will
  31.840 - *	only return ISA irq numbers - just so that we reset them
  31.841 - *	all to a known state.
  31.842 - */
  31.843 -unsigned int probe_irq_mask(unsigned long val)
  31.844 -{
  31.845 -	int i;
  31.846 -	unsigned int mask;
  31.847 -
  31.848 -	mask = 0;
  31.849 -	for (i = 0; i < NR_PIRQS; i++) {
  31.850 -		irq_desc_t *desc = irq_desc + i;
  31.851 -		unsigned int status;
  31.852 -
  31.853 -		spin_lock_irq(&desc->lock);
  31.854 -		status = desc->status;
  31.855 -
  31.856 -		if (status & IRQ_AUTODETECT) {
  31.857 -			if (i < 16 && !(status & IRQ_WAITING))
  31.858 -				mask |= 1 << i;
  31.859 -
  31.860 -			desc->status = status & ~IRQ_AUTODETECT;
  31.861 -			desc->handler->shutdown(i);
  31.862 -		}
  31.863 -		spin_unlock_irq(&desc->lock);
  31.864 -	}
  31.865 -	up(&probe_sem);
  31.866 -
  31.867 -	return mask & val;
  31.868 -}
  31.869 -
  31.870 -/*
  31.871 - * Return the one interrupt that triggered (this can
  31.872 - * handle any interrupt source).
  31.873 - */
  31.874 -
  31.875 -/**
  31.876 - *	probe_irq_off	- end an interrupt autodetect
  31.877 - *	@val: mask of potential interrupts (unused)
  31.878 - *
  31.879 - *	Scans the unused interrupt lines and returns the line which
  31.880 - *	appears to have triggered the interrupt. If no interrupt was
  31.881 - *	found then zero is returned. If more than one interrupt is
  31.882 - *	found then minus the first candidate is returned to indicate
  31.883 - *	their is doubt.
  31.884 - *
  31.885 - *	The interrupt probe logic state is returned to its previous
  31.886 - *	value.
  31.887 - *
  31.888 - *	BUGS: When used in a module (which arguably shouldnt happen)
  31.889 - *	nothing prevents two IRQ probe callers from overlapping. The
  31.890 - *	results of this are non-optimal.
  31.891 - */
  31.892 - 
  31.893 -int probe_irq_off(unsigned long val)
  31.894 -{
  31.895 -	int i, irq_found, nr_irqs;
  31.896 -
  31.897 -	nr_irqs = 0;
  31.898 -	irq_found = 0;
  31.899 -	for (i = 0; i < NR_PIRQS; i++) {
  31.900 -		irq_desc_t *desc = irq_desc + i;
  31.901 -		unsigned int status;
  31.902 -
  31.903 -		spin_lock_irq(&desc->lock);
  31.904 -		status = desc->status;
  31.905 -
  31.906 -		if (status & IRQ_AUTODETECT) {
  31.907 -			if (!(status & IRQ_WAITING)) {
  31.908 -				if (!nr_irqs)
  31.909 -					irq_found = i;
  31.910 -				nr_irqs++;
  31.911 -			}
  31.912 -			desc->status = status & ~IRQ_AUTODETECT;
  31.913 -			desc->handler->shutdown(i);
  31.914 -		}
  31.915 -		spin_unlock_irq(&desc->lock);
  31.916 -	}
  31.917 -	up(&probe_sem);
  31.918 -
  31.919 -	if (nr_irqs > 1)
  31.920 -		irq_found = -irq_found;
  31.921 -	return irq_found;
  31.922 -}
  31.923 -
  31.924 -EXPORT_SYMBOL(probe_irq_off);
  31.925 -
  31.926 -/* this was setup_x86_irq but it seems pretty generic */
  31.927 -int setup_irq(unsigned int irq, struct irqaction * new)
  31.928 -{
  31.929 -	int shared = 0;
  31.930 -	unsigned long flags;
  31.931 -	struct irqaction *old, **p;
  31.932 -	irq_desc_t *desc = irq_desc + irq;
  31.933 -
  31.934 -	if (desc->handler == &no_irq_type)
  31.935 -		return -ENOSYS;
  31.936 -	/*
  31.937 -	 * Some drivers like serial.c use request_irq() heavily,
  31.938 -	 * so we have to be careful not to interfere with a
  31.939 -	 * running system.
  31.940 -	 */
  31.941 -	if (new->flags & SA_SAMPLE_RANDOM) {
  31.942 -		/*
  31.943 -		 * This function might sleep, we want to call it first,
  31.944 -		 * outside of the atomic block.
  31.945 -		 * Yes, this might clear the entropy pool if the wrong
  31.946 -		 * driver is attempted to be loaded, without actually
  31.947 -		 * installing a new handler, but is this really a problem,
  31.948 -		 * only the sysadmin is able to do this.
  31.949 -		 */
  31.950 -		rand_initialize_irq(irq);
  31.951 -	}
  31.952 -
  31.953 -	/*
  31.954 -	 * The following block of code has to be executed atomically
  31.955 -	 */
  31.956 -	spin_lock_irqsave(&desc->lock,flags);
  31.957 -	p = &desc->action;
  31.958 -	if ((old = *p) != NULL) {
  31.959 -		/* Can't share interrupts unless both agree to */
  31.960 -		if (!(old->flags & new->flags & SA_SHIRQ)) {
  31.961 -			spin_unlock_irqrestore(&desc->lock,flags);
  31.962 -			return -EBUSY;
  31.963 -		}
  31.964 -
  31.965 -		/* add new interrupt at end of irq queue */
  31.966 -		do {
  31.967 -			p = &old->next;
  31.968 -			old = *p;
  31.969 -		} while (old);
  31.970 -		shared = 1;
  31.971 -	}
  31.972 -
  31.973 -	*p = new;
  31.974 -
  31.975 -	if (!shared) {
  31.976 -		desc->depth = 0;
  31.977 -		desc->status &= ~(IRQ_DISABLED | IRQ_AUTODETECT | IRQ_WAITING | IRQ_INPROGRESS);
  31.978 -		desc->handler->startup(irq);
  31.979 -	}
  31.980 -	spin_unlock_irqrestore(&desc->lock,flags);
  31.981 -
  31.982 -	register_irq_proc(irq);
  31.983 -	return 0;
  31.984 -}
  31.985 -
  31.986 -static struct proc_dir_entry * root_irq_dir;
  31.987 -static struct proc_dir_entry * irq_dir [NR_IRQS];
  31.988 -
  31.989 -#ifdef CONFIG_SMP
  31.990 -
  31.991 -static struct proc_dir_entry *smp_affinity_entry[NR_IRQS];
  31.992 -
  31.993 -cpumask_t irq_affinity[NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
  31.994 -
  31.995 -static int irq_affinity_read_proc(char *page, char **start, off_t off,
  31.996 -			int count, int *eof, void *data)
  31.997 -{
  31.998 -	int len = cpumask_scnprintf(page, count, irq_affinity[(long)data]);
  31.999 -	if (count - len < 2)
 31.1000 -		return -EINVAL;
 31.1001 -	len += sprintf(page + len, "\n");
 31.1002 -	return len;
 31.1003 -}
 31.1004 -
 31.1005 -static int irq_affinity_write_proc(struct file *file, const char __user *buffer,
 31.1006 -					unsigned long count, void *data)
 31.1007 -{
 31.1008 -	int irq = (long)data, full_count = count, err;
 31.1009 -	cpumask_t new_value, tmp;
 31.1010 -
 31.1011 -	if (!irq_desc[irq].handler->set_affinity)
 31.1012 -		return -EIO;
 31.1013 -
 31.1014 -	err = cpumask_parse(buffer, count, new_value);
 31.1015 -	if (err)
 31.1016 -		return err;
 31.1017 -
 31.1018 -	/*
 31.1019 -	 * Do not allow disabling IRQs completely - it's a too easy
 31.1020 -	 * way to make the system unusable accidentally :-) At least
 31.1021 -	 * one online CPU still has to be targeted.
 31.1022 -	 */
 31.1023 -	cpus_and(tmp, new_value, cpu_online_map);
 31.1024 -	if (cpus_empty(tmp))
 31.1025 -		return -EINVAL;
 31.1026 -
 31.1027 -	irq_affinity[irq] = new_value;
 31.1028 -	irq_desc[irq].handler->set_affinity(irq,
 31.1029 -					cpumask_of_cpu(first_cpu(new_value)));
 31.1030 -
 31.1031 -	return full_count;
 31.1032 -}
 31.1033 -
 31.1034 -#endif
 31.1035 -
 31.1036 -static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
 31.1037 -			int count, int *eof, void *data)
 31.1038 -{
 31.1039 -	int len = cpumask_scnprintf(page, count, *(cpumask_t *)data);
 31.1040 -	if (count - len < 2)
 31.1041 -		return -EINVAL;
 31.1042 -	len += sprintf(page + len, "\n");
 31.1043 -	return len;
 31.1044 -}
 31.1045 -
 31.1046 -static int prof_cpu_mask_write_proc (struct file *file, const char __user *buffer,
 31.1047 -					unsigned long count, void *data)
 31.1048 -{
 31.1049 -	cpumask_t *mask = (cpumask_t *)data;
 31.1050 -	unsigned long full_count = count, err;
 31.1051 -	cpumask_t new_value;
 31.1052 -
 31.1053 -	err = cpumask_parse(buffer, count, new_value);
 31.1054 -	if (err)
 31.1055 -		return err;
 31.1056 -
 31.1057 -	*mask = new_value;
 31.1058 -	return full_count;
 31.1059 -}
 31.1060 -
 31.1061 -#define MAX_NAMELEN 10
 31.1062 -
 31.1063 -static void register_irq_proc (unsigned int irq)
 31.1064 -{
 31.1065 -	char name [MAX_NAMELEN];
 31.1066 -
 31.1067 -	if (!root_irq_dir || (irq_desc[irq].handler == &no_irq_type) ||
 31.1068 -			irq_dir[irq])
 31.1069 -		return;
 31.1070 -
 31.1071 -	memset(name, 0, MAX_NAMELEN);
 31.1072 -	sprintf(name, "%d", irq);
 31.1073 -
 31.1074 -	/* create /proc/irq/1234 */
 31.1075 -	irq_dir[irq] = proc_mkdir(name, root_irq_dir);
 31.1076 -
 31.1077 -#ifdef CONFIG_SMP
 31.1078 -	{
 31.1079 -		struct proc_dir_entry *entry;
 31.1080 -
 31.1081 -		/* create /proc/irq/1234/smp_affinity */
 31.1082 -		entry = create_proc_entry("smp_affinity", 0600, irq_dir[irq]);
 31.1083 -
 31.1084 -		if (entry) {
 31.1085 -			entry->nlink = 1;
 31.1086 -			entry->data = (void *)(long)irq;
 31.1087 -			entry->read_proc = irq_affinity_read_proc;
 31.1088 -			entry->write_proc = irq_affinity_write_proc;
 31.1089 -		}
 31.1090 -
 31.1091 -		smp_affinity_entry[irq] = entry;
 31.1092 -	}
 31.1093 -#endif
 31.1094 -}
 31.1095 -
 31.1096 -unsigned long prof_cpu_mask = -1;
 31.1097 -
 31.1098 -void init_irq_proc (void)
 31.1099 -{
 31.1100 -	struct proc_dir_entry *entry;
 31.1101 -	int i;
 31.1102 -
 31.1103 -	/* create /proc/irq */
 31.1104 -	root_irq_dir = proc_mkdir("irq", 0);
 31.1105 -
 31.1106 -	/* create /proc/irq/prof_cpu_mask */
 31.1107 -	entry = create_proc_entry("prof_cpu_mask", 0600, root_irq_dir);
 31.1108 -
 31.1109 -	if (!entry)
 31.1110 -	    return;
 31.1111 -
 31.1112 -	entry->nlink = 1;
 31.1113 -	entry->data = (void *)&prof_cpu_mask;
 31.1114 -	entry->read_proc = prof_cpu_mask_read_proc;
 31.1115 -	entry->write_proc = prof_cpu_mask_write_proc;
 31.1116 -
 31.1117 -	/*
 31.1118 -	 * Create entries for all existing IRQs.
 31.1119 -	 */
 31.1120 -	for (i = 0; i < NR_IRQS; i++)
 31.1121 -		register_irq_proc(i);
 31.1122 -}
 31.1123 -
 31.1124 -
 31.1125 -#ifdef CONFIG_4KSTACKS
 31.1126 -static char softirq_stack[NR_CPUS * THREAD_SIZE]  __attribute__((__aligned__(THREAD_SIZE), __section__(".bss.page_aligned")));
 31.1127 -static char hardirq_stack[NR_CPUS * THREAD_SIZE]  __attribute__((__aligned__(THREAD_SIZE), __section__(".bss.page_aligned")));
 31.1128 -
 31.1129 -/*
 31.1130 - * allocate per-cpu stacks for hardirq and for softirq processing
 31.1131 - */
 31.1132 -void irq_ctx_init(int cpu)
 31.1133 -{
 31.1134 -	union irq_ctx *irqctx;
 31.1135 -
 31.1136 -	if (hardirq_ctx[cpu])
 31.1137 -		return;
 31.1138 -
 31.1139 -	irqctx = (union irq_ctx*) &hardirq_stack[cpu*THREAD_SIZE];
 31.1140 -	irqctx->tinfo.task              = NULL;
 31.1141 -	irqctx->tinfo.exec_domain       = NULL;
 31.1142 -	irqctx->tinfo.cpu               = cpu;
 31.1143 -	irqctx->tinfo.preempt_count     = HARDIRQ_OFFSET;
 31.1144 -	irqctx->tinfo.addr_limit        = MAKE_MM_SEG(0);
 31.1145 -
 31.1146 -	hardirq_ctx[cpu] = irqctx;
 31.1147 -
 31.1148 -	irqctx = (union irq_ctx*) &softirq_stack[cpu*THREAD_SIZE];
 31.1149 -	irqctx->tinfo.task              = NULL;
 31.1150 -	irqctx->tinfo.exec_domain       = NULL;
 31.1151 -	irqctx->tinfo.cpu               = cpu;
 31.1152 -	irqctx->tinfo.preempt_count     = SOFTIRQ_OFFSET;
 31.1153 -	irqctx->tinfo.addr_limit        = MAKE_MM_SEG(0);
 31.1154 -
 31.1155 -	softirq_ctx[cpu] = irqctx;
 31.1156 -
 31.1157 -	printk("CPU %u irqstacks, hard=%p soft=%p\n",
 31.1158 -		cpu,hardirq_ctx[cpu],softirq_ctx[cpu]);
 31.1159 -}
 31.1160 -
 31.1161 -extern asmlinkage void __do_softirq(void);
 31.1162 -
 31.1163 -asmlinkage void do_softirq(void)
 31.1164 -{
 31.1165 -	unsigned long flags;
 31.1166 -	struct thread_info *curctx;
 31.1167 -	union irq_ctx *irqctx;
 31.1168 -	u32 *isp;
 31.1169 -
 31.1170 -	if (in_interrupt())
 31.1171 -		return;
 31.1172 -
 31.1173 -	local_irq_save(flags);
 31.1174 -
 31.1175 -	if (local_softirq_pending()) {
 31.1176 -		curctx = current_thread_info();
 31.1177 -		irqctx = softirq_ctx[smp_processor_id()];
 31.1178 -		irqctx->tinfo.task = curctx->task;
 31.1179 -		irqctx->tinfo.previous_esp = current_stack_pointer();
 31.1180 -
 31.1181 -		/* build the stack frame on the softirq stack */
 31.1182 -		isp = (u32*) ((char*)irqctx + sizeof(*irqctx));
 31.1183 -
 31.1184 -
 31.1185 -		asm volatile(
 31.1186 -			"       xchgl   %%ebx,%%esp     \n"
 31.1187 -			"       call    __do_softirq    \n"
 31.1188 -			"       movl    %%ebx,%%esp     \n"
 31.1189 -			: "=b"(isp)
 31.1190 -			: "0"(isp)
 31.1191 -			: "memory", "cc", "edx", "ecx", "eax"
 31.1192 -		);
 31.1193 -	}
 31.1194 -
 31.1195 -	local_irq_restore(flags);
 31.1196 -}
 31.1197 -
 31.1198 -EXPORT_SYMBOL(do_softirq);
 31.1199 -#endif
    32.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/ldt.c	Fri Aug 27 08:43:54 2004 +0000
    32.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.3 @@ -1,262 +0,0 @@
    32.4 -/*
    32.5 - * linux/kernel/ldt.c
    32.6 - *
    32.7 - * Copyright (C) 1992 Krishna Balasubramanian and Linus Torvalds
    32.8 - * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com>
    32.9 - */
   32.10 -
   32.11 -#include <linux/errno.h>
   32.12 -#include <linux/sched.h>
   32.13 -#include <linux/string.h>
   32.14 -#include <linux/mm.h>
   32.15 -#include <linux/smp.h>
   32.16 -#include <linux/smp_lock.h>
   32.17 -#include <linux/vmalloc.h>
   32.18 -#include <linux/slab.h>
   32.19 -
   32.20 -#include <asm/uaccess.h>
   32.21 -#include <asm/system.h>
   32.22 -#include <asm/ldt.h>
   32.23 -#include <asm/desc.h>
   32.24 -
   32.25 -#ifdef CONFIG_SMP /* avoids "defined but not used" warnig */
   32.26 -static void flush_ldt(void *null)
   32.27 -{
   32.28 -	if (current->active_mm)
   32.29 -		load_LDT(&current->active_mm->context);
   32.30 -}
   32.31 -#endif
   32.32 -
   32.33 -static int alloc_ldt(mm_context_t *pc, int mincount, int reload)
   32.34 -{
   32.35 -	void *oldldt;
   32.36 -	void *newldt;
   32.37 -	int oldsize;
   32.38 -
   32.39 -	if (mincount <= pc->size)
   32.40 -		return 0;
   32.41 -	oldsize = pc->size;
   32.42 -	mincount = (mincount+511)&(~511);
   32.43 -	if (mincount*LDT_ENTRY_SIZE > PAGE_SIZE)
   32.44 -		newldt = vmalloc(mincount*LDT_ENTRY_SIZE);
   32.45 -	else
   32.46 -		newldt = kmalloc(mincount*LDT_ENTRY_SIZE, GFP_KERNEL);
   32.47 -
   32.48 -	if (!newldt)
   32.49 -		return -ENOMEM;
   32.50 -
   32.51 -	if (oldsize)
   32.52 -		memcpy(newldt, pc->ldt, oldsize*LDT_ENTRY_SIZE);
   32.53 -	oldldt = pc->ldt;
   32.54 -	memset(newldt+oldsize*LDT_ENTRY_SIZE, 0, (mincount-oldsize)*LDT_ENTRY_SIZE);
   32.55 -	pc->ldt = newldt;
   32.56 -	wmb();
   32.57 -	pc->size = mincount;
   32.58 -	wmb();
   32.59 -
   32.60 -	if (reload) {
   32.61 -#ifdef CONFIG_SMP
   32.62 -		cpumask_t mask;
   32.63 -		preempt_disable();
   32.64 -#endif
   32.65 -		make_pages_readonly(pc->ldt, (pc->size * LDT_ENTRY_SIZE) /
   32.66 -				    PAGE_SIZE);
   32.67 -		load_LDT(pc);
   32.68 -		flush_page_update_queue();
   32.69 -#ifdef CONFIG_SMP
   32.70 -		mask = cpumask_of_cpu(smp_processor_id());
   32.71 -		if (!cpus_equal(current->mm->cpu_vm_mask, mask))
   32.72 -			smp_call_function(flush_ldt, 0, 1, 1);
   32.73 -		preempt_enable();
   32.74 -#endif
   32.75 -	}
   32.76 -	if (oldsize) {
   32.77 -		make_pages_writable(oldldt, (oldsize * LDT_ENTRY_SIZE) /
   32.78 -			PAGE_SIZE);
   32.79 -		flush_page_update_queue();
   32.80 -		if (oldsize*LDT_ENTRY_SIZE > PAGE_SIZE)
   32.81 -			vfree(oldldt);
   32.82 -		else
   32.83 -			kfree(oldldt);
   32.84 -	}
   32.85 -	return 0;
   32.86 -}
   32.87 -
   32.88 -static inline int copy_ldt(mm_context_t *new, mm_context_t *old)
   32.89 -{
   32.90 -	int err = alloc_ldt(new, old->size, 0);
   32.91 -	if (err < 0)
   32.92 -		return err;
   32.93 -	memcpy(new->ldt, old->ldt, old->size*LDT_ENTRY_SIZE);
   32.94 -	make_pages_readonly(new->ldt, (new->size * LDT_ENTRY_SIZE) /
   32.95 -			    PAGE_SIZE);
   32.96 -	return 0;
   32.97 -}
   32.98 -
   32.99 -/*
  32.100 - * we do not have to muck with descriptors here, that is
  32.101 - * done in switch_mm() as needed.
  32.102 - */
  32.103 -int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
  32.104 -{
  32.105 -	struct mm_struct * old_mm;
  32.106 -	int retval = 0;
  32.107 -
  32.108 -	init_MUTEX(&mm->context.sem);
  32.109 -	mm->context.size = 0;
  32.110 -	old_mm = current->mm;
  32.111 -	if (old_mm && old_mm->context.size > 0) {
  32.112 -		down(&old_mm->context.sem);
  32.113 -		retval = copy_ldt(&mm->context, &old_mm->context);
  32.114 -		up(&old_mm->context.sem);
  32.115 -	}
  32.116 -	return retval;
  32.117 -}
  32.118 -
  32.119 -/*
  32.120 - * No need to lock the MM as we are the last user
  32.121 - */
  32.122 -void destroy_context(struct mm_struct *mm)
  32.123 -{
  32.124 -	if (mm->context.size) {
  32.125 -		if (mm == current->active_mm)
  32.126 -			clear_LDT();
  32.127 -		make_pages_writable(mm->context.ldt, 
  32.128 -                                    (mm->context.size * LDT_ENTRY_SIZE) /
  32.129 -                                    PAGE_SIZE);
  32.130 -		flush_page_update_queue();
  32.131 -		if (mm->context.size*LDT_ENTRY_SIZE > PAGE_SIZE)
  32.132 -			vfree(mm->context.ldt);
  32.133 -		else
  32.134 -			kfree(mm->context.ldt);
  32.135 -		mm->context.size = 0;
  32.136 -	}
  32.137 -}
  32.138 -
  32.139 -static int read_ldt(void __user * ptr, unsigned long bytecount)
  32.140 -{
  32.141 -	int err;
  32.142 -	unsigned long size;
  32.143 -	struct mm_struct * mm = current->mm;
  32.144 -
  32.145 -	if (!mm->context.size)
  32.146 -		return 0;
  32.147 -	if (bytecount > LDT_ENTRY_SIZE*LDT_ENTRIES)
  32.148 -		bytecount = LDT_ENTRY_SIZE*LDT_ENTRIES;
  32.149 -
  32.150 -	down(&mm->context.sem);
  32.151 -	size = mm->context.size*LDT_ENTRY_SIZE;
  32.152 -	if (size > bytecount)
  32.153 -		size = bytecount;
  32.154 -
  32.155 -	err = 0;
  32.156 -	if (copy_to_user(ptr, mm->context.ldt, size))
  32.157 -		err = -EFAULT;
  32.158 -	up(&mm->context.sem);
  32.159 -	if (err < 0)
  32.160 -		return err;
  32.161 -	if (size != bytecount) {
  32.162 -		/* zero-fill the rest */
  32.163 -		clear_user(ptr+size, bytecount-size);
  32.164 -	}
  32.165 -	return bytecount;
  32.166 -}
  32.167 -
  32.168 -static int read_default_ldt(void __user * ptr, unsigned long bytecount)
  32.169 -{
  32.170 -	int err;
  32.171 -	unsigned long size;
  32.172 -	void *address;
  32.173 -
  32.174 -	err = 0;
  32.175 -	address = &default_ldt[0];
  32.176 -	size = 5*sizeof(struct desc_struct);
  32.177 -	if (size > bytecount)
  32.178 -		size = bytecount;
  32.179 -
  32.180 -	err = size;
  32.181 -	if (copy_to_user(ptr, address, size))
  32.182 -		err = -EFAULT;
  32.183 -
  32.184 -	return err;
  32.185 -}
  32.186 -
  32.187 -static int write_ldt(void __user * ptr, unsigned long bytecount, int oldmode)
  32.188 -{
  32.189 -	struct mm_struct * mm = current->mm;
  32.190 -	__u32 entry_1, entry_2, *lp;
  32.191 -	unsigned long phys_lp;
  32.192 -	int error;
  32.193 -	struct user_desc ldt_info;
  32.194 -
  32.195 -	error = -EINVAL;
  32.196 -	if (bytecount != sizeof(ldt_info))
  32.197 -		goto out;
  32.198 -	error = -EFAULT; 	
  32.199 -	if (copy_from_user(&ldt_info, ptr, sizeof(ldt_info)))
  32.200 -		goto out;
  32.201 -
  32.202 -	error = -EINVAL;
  32.203 -	if (ldt_info.entry_number >= LDT_ENTRIES)
  32.204 -		goto out;
  32.205 -	if (ldt_info.contents == 3) {
  32.206 -		if (oldmode)
  32.207 -			goto out;
  32.208 -		if (ldt_info.seg_not_present == 0)
  32.209 -			goto out;
  32.210 -	}
  32.211 -
  32.212 -	down(&mm->context.sem);
  32.213 -	if (ldt_info.entry_number >= mm->context.size) {
  32.214 -		error = alloc_ldt(&current->mm->context, ldt_info.entry_number+1, 1);
  32.215 -		if (error < 0)
  32.216 -			goto out_unlock;
  32.217 -	}
  32.218 -
  32.219 -	lp = (__u32 *) ((ldt_info.entry_number << 3) + (char *) mm->context.ldt);
  32.220 -	phys_lp = arbitrary_virt_to_phys(lp);
  32.221 -
  32.222 -   	/* Allow LDTs to be cleared by the user. */
  32.223 -   	if (ldt_info.base_addr == 0 && ldt_info.limit == 0) {
  32.224 -		if (oldmode || LDT_empty(&ldt_info)) {
  32.225 -			entry_1 = 0;
  32.226 -			entry_2 = 0;
  32.227 -			goto install;
  32.228 -		}
  32.229 -	}
  32.230 -
  32.231 -	entry_1 = LDT_entry_a(&ldt_info);
  32.232 -	entry_2 = LDT_entry_b(&ldt_info);
  32.233 -	if (oldmode)
  32.234 -		entry_2 &= ~(1 << 20);
  32.235 -
  32.236 -	/* Install the new entry ...  */
  32.237 -install:
  32.238 -	error = HYPERVISOR_update_descriptor(phys_lp, entry_1, entry_2);
  32.239 -
  32.240 -out_unlock:
  32.241 -	up(&mm->context.sem);
  32.242 -out:
  32.243 -	return error;
  32.244 -}
  32.245 -
  32.246 -asmlinkage int sys_modify_ldt(int func, void __user *ptr, unsigned long bytecount)
  32.247 -{
  32.248 -	int ret = -ENOSYS;
  32.249 -
  32.250 -	switch (func) {
  32.251 -	case 0:
  32.252 -		ret = read_ldt(ptr, bytecount);
  32.253 -		break;
  32.254 -	case 1:
  32.255 -		ret = write_ldt(ptr, bytecount, 1);
  32.256 -		break;
  32.257 -	case 2:
  32.258 -		ret = read_default_ldt(ptr, bytecount);
  32.259 -		break;
  32.260 -	case 0x11:
  32.261 -		ret = write_ldt(ptr, bytecount, 0);
  32.262 -		break;
  32.263 -	}
  32.264 -	return ret;
  32.265 -}
    33.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/pci-dma.c	Fri Aug 27 08:43:54 2004 +0000
    33.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.3 @@ -1,103 +0,0 @@
    33.4 -/*
    33.5 - * Dynamic DMA mapping support.
    33.6 - *
    33.7 - * On i386 there is no hardware dynamic DMA address translation,
    33.8 - * so consistent alloc/free are merely page allocation/freeing.
    33.9 - * The rest of the dynamic DMA mapping interface is implemented
   33.10 - * in asm/pci.h.
   33.11 - */
   33.12 -
   33.13 -#include <linux/types.h>
   33.14 -#include <linux/mm.h>
   33.15 -#include <linux/string.h>
   33.16 -#include <linux/pci.h>
   33.17 -#include <linux/version.h>
   33.18 -#include <asm/io.h>
   33.19 -
   33.20 -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
   33.21 -#define pte_offset_kernel pte_offset
   33.22 -void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
   33.23 -			   dma_addr_t *dma_handle)
   33.24 -#else
   33.25 -void *dma_alloc_coherent(struct device *dev, size_t size,
   33.26 -			   dma_addr_t *dma_handle, int gfp)
   33.27 -#endif
   33.28 -{
   33.29 -	void *ret;
   33.30 -	unsigned int order = get_order(size);
   33.31 -	unsigned long vstart;
   33.32 -
   33.33 -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
   33.34 -	int gfp = GFP_ATOMIC;
   33.35 -
   33.36 -	if (hwdev == NULL || ((u32)hwdev->dma_mask < 0xffffffff))
   33.37 -		gfp |= GFP_DMA;
   33.38 -#else
   33.39 -	/* ignore region specifiers */
   33.40 -	gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);
   33.41 -
   33.42 -	if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff))
   33.43 -		gfp |= GFP_DMA;
   33.44 -#endif
   33.45 -
   33.46 -	ret = (void *)vstart = __get_free_pages(gfp, order);
   33.47 -	if (ret == NULL)
   33.48 -		return ret;
   33.49 -
   33.50 -	/*
   33.51 -	 * Ensure multi-page extents are contiguous in machine memory.
   33.52 -	 * This code could be cleaned up some, and the number of
   33.53 -	 * hypercalls reduced.
   33.54 -	 */
   33.55 -	if (size > PAGE_SIZE) {
   33.56 -		pgd_t         *pgd; 
   33.57 -		pmd_t         *pmd;
   33.58 -		pte_t         *pte;
   33.59 -		unsigned long  pfn, i;
   33.60 -		/* 1. Zap current PTEs, giving away the underlying pages. */
   33.61 -		for (i = 0; i < (1<<order); i++) {
   33.62 -			pgd = pgd_offset_k(   (vstart + (i*PAGE_SIZE)));
   33.63 -			pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE)));
   33.64 -			pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
   33.65 -			pfn = pte->pte_low >> PAGE_SHIFT;
   33.66 -			queue_l1_entry_update(pte, 0);
   33.67 -			phys_to_machine_mapping[(__pa(ret)>>PAGE_SHIFT)+i] =
   33.68 -				INVALID_P2M_ENTRY;
   33.69 -			flush_page_update_queue();
   33.70 -			if (HYPERVISOR_dom_mem_op(MEMOP_decrease_reservation, 
   33.71 -						  &pfn, 1, 0) != 1) BUG();
   33.72 -		}
   33.73 -		/* 2. Get a new contiguous memory extent. */
   33.74 -		if (HYPERVISOR_dom_mem_op(MEMOP_increase_reservation,
   33.75 -					  &pfn, 1, order) != 1) BUG();
   33.76 -		/* 3. Map the new extent in place of old pages. */
   33.77 -		for (i = 0; i < (1<<order); i++) {
   33.78 -			pgd = pgd_offset_k(   (vstart + (i*PAGE_SIZE)));
   33.79 -			pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE)));
   33.80 -			pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
   33.81 -			queue_l1_entry_update(
   33.82 -				pte, ((pfn+i)<<PAGE_SHIFT)|__PAGE_KERNEL);
   33.83 -			queue_machphys_update(
   33.84 -				pfn+i, (__pa(ret)>>PAGE_SHIFT)+i);
   33.85 -			phys_to_machine_mapping[(__pa(ret)>>PAGE_SHIFT)+i] =
   33.86 -				pfn+i;
   33.87 -		}
   33.88 -		flush_page_update_queue();
   33.89 -	}
   33.90 -
   33.91 -	memset(ret, 0, size);
   33.92 -	*dma_handle = virt_to_bus(ret);
   33.93 -
   33.94 -	return ret;
   33.95 -}
   33.96 -
   33.97 -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
   33.98 -void pci_free_consistent(struct pci_dev *hwdev, size_t size,
   33.99 -			 void *vaddr, dma_addr_t dma_handle)
  33.100 -#else
  33.101 -void dma_free_coherent(struct device *dev, size_t size,
  33.102 -			 void *vaddr, dma_addr_t dma_handle)
  33.103 -#endif
  33.104 -{
  33.105 -	free_pages((unsigned long)vaddr, get_order(size));
  33.106 -}
    34.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/process.c	Fri Aug 27 08:43:54 2004 +0000
    34.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.3 @@ -1,819 +0,0 @@
    34.4 -/*
    34.5 - *  linux/arch/i386/kernel/process.c
    34.6 - *
    34.7 - *  Copyright (C) 1995  Linus Torvalds
    34.8 - *
    34.9 - *  Pentium III FXSR, SSE support
   34.10 - *	Gareth Hughes <gareth@valinux.com>, May 2000
   34.11 - */
   34.12 -
   34.13 -/*
   34.14 - * This file handles the architecture-dependent parts of process handling..
   34.15 - */
   34.16 -
   34.17 -#include <stdarg.h>
   34.18 -
   34.19 -#include <linux/errno.h>
   34.20 -#include <linux/sched.h>
   34.21 -#include <linux/fs.h>
   34.22 -#include <linux/kernel.h>
   34.23 -#include <linux/mm.h>
   34.24 -#include <linux/elfcore.h>
   34.25 -#include <linux/smp.h>
   34.26 -#include <linux/smp_lock.h>
   34.27 -#include <linux/stddef.h>
   34.28 -#include <linux/slab.h>
   34.29 -#include <linux/vmalloc.h>
   34.30 -#include <linux/user.h>
   34.31 -#include <linux/a.out.h>
   34.32 -#include <linux/interrupt.h>
   34.33 -#include <linux/config.h>
   34.34 -#include <linux/version.h>
   34.35 -#include <linux/delay.h>
   34.36 -#include <linux/reboot.h>
   34.37 -#include <linux/init.h>
   34.38 -#include <linux/mc146818rtc.h>
   34.39 -#include <linux/module.h>
   34.40 -#include <linux/kallsyms.h>
   34.41 -#include <linux/ptrace.h>
   34.42 -
   34.43 -#include <asm/uaccess.h>
   34.44 -#include <asm/pgtable.h>
   34.45 -#include <asm/system.h>
   34.46 -#include <asm/io.h>
   34.47 -#include <asm/ldt.h>
   34.48 -#include <asm/processor.h>
   34.49 -#include <asm/i387.h>
   34.50 -#include <asm/irq.h>
   34.51 -#include <asm/desc.h>
   34.52 -#include <asm-xen/multicall.h>
   34.53 -#include <asm/hypervisor-ifs/dom0_ops.h>
   34.54 -#ifdef CONFIG_MATH_EMULATION
   34.55 -#include <asm/math_emu.h>
   34.56 -#endif
   34.57 -
   34.58 -#include <linux/irq.h>
   34.59 -#include <linux/err.h>
   34.60 -
   34.61 -asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
   34.62 -
   34.63 -int hlt_counter;
   34.64 -
   34.65 -/*
   34.66 - * Return saved PC of a blocked thread.
   34.67 - */
   34.68 -unsigned long thread_saved_pc(struct task_struct *tsk)
   34.69 -{
   34.70 -	return ((unsigned long *)tsk->thread.esp)[3];
   34.71 -}
   34.72 -
   34.73 -/*
   34.74 - * Powermanagement idle function, if any..
   34.75 - */
   34.76 -void (*pm_idle)(void);
   34.77 -
   34.78 -void disable_hlt(void)
   34.79 -{
   34.80 -	hlt_counter++;
   34.81 -}
   34.82 -
   34.83 -EXPORT_SYMBOL(disable_hlt);
   34.84 -
   34.85 -void enable_hlt(void)
   34.86 -{
   34.87 -	hlt_counter--;
   34.88 -}
   34.89 -
   34.90 -EXPORT_SYMBOL(enable_hlt);
   34.91 -
   34.92 -/*
   34.93 - * We use this if we don't have any better
   34.94 - * idle routine..
   34.95 - */
   34.96 -void default_idle(void)
   34.97 -{
   34.98 -	if (!hlt_counter && current_cpu_data.hlt_works_ok) {
   34.99 -		local_irq_disable();
  34.100 -		if (!need_resched())
  34.101 -			safe_halt();
  34.102 -		else
  34.103 -			local_irq_enable();
  34.104 -	}
  34.105 -}
  34.106 -
  34.107 -/*
  34.108 - * On SMP it's slightly faster (but much more power-consuming!)
  34.109 - * to poll the ->work.need_resched flag instead of waiting for the
  34.110 - * cross-CPU IPI to arrive. Use this option with caution.
  34.111 - */
  34.112 -static void poll_idle (void)
  34.113 -{
  34.114 -	int oldval;
  34.115 -
  34.116 -	local_irq_enable();
  34.117 -
  34.118 -	/*
  34.119 -	 * Deal with another CPU just having chosen a thread to
  34.120 -	 * run here:
  34.121 -	 */
  34.122 -	oldval = test_and_clear_thread_flag(TIF_NEED_RESCHED);
  34.123 -
  34.124 -	if (!oldval) {
  34.125 -		set_thread_flag(TIF_POLLING_NRFLAG);
  34.126 -		asm volatile(
  34.127 -			"2:"
  34.128 -			"testl %0, %1;"
  34.129 -			"rep; nop;"
  34.130 -			"je 2b;"
  34.131 -			: : "i"(_TIF_NEED_RESCHED), "m" (current_thread_info()->flags));
  34.132 -
  34.133 -		clear_thread_flag(TIF_POLLING_NRFLAG);
  34.134 -	} else {
  34.135 -		set_need_resched();
  34.136 -	}
  34.137 -}
  34.138 -
  34.139 -/*
  34.140 - * The idle thread. There's no useful work to be
  34.141 - * done, so just try to conserve power and have a
  34.142 - * low exit latency (ie sit in a loop waiting for
  34.143 - * somebody to say that they'd like to reschedule)
  34.144 - */
  34.145 -void cpu_idle (void)
  34.146 -{
  34.147 -	/* endless idle loop with no priority at all */
  34.148 -	while (1) {
  34.149 -		while (!need_resched()) {
  34.150 -			void (*idle)(void) = pm_idle;
  34.151 -
  34.152 -			if (!idle)
  34.153 -				idle = default_idle;
  34.154 -
  34.155 -			irq_stat[smp_processor_id()].idle_timestamp = jiffies;
  34.156 -			idle();
  34.157 -		}
  34.158 -		schedule();
  34.159 -	}
  34.160 -}
  34.161 -
  34.162 -/*
  34.163 - * This uses new MONITOR/MWAIT instructions on P4 processors with PNI,
  34.164 - * which can obviate IPI to trigger checking of need_resched.
  34.165 - * We execute MONITOR against need_resched and enter optimized wait state
  34.166 - * through MWAIT. Whenever someone changes need_resched, we would be woken
  34.167 - * up from MWAIT (without an IPI).
  34.168 - */
  34.169 -static void mwait_idle(void)
  34.170 -{
  34.171 -	local_irq_enable();
  34.172 -
  34.173 -	if (!need_resched()) {
  34.174 -		set_thread_flag(TIF_POLLING_NRFLAG);
  34.175 -		do {
  34.176 -			__monitor((void *)&current_thread_info()->flags, 0, 0);
  34.177 -			if (need_resched())
  34.178 -				break;
  34.179 -			__mwait(0, 0);
  34.180 -		} while (!need_resched());
  34.181 -		clear_thread_flag(TIF_POLLING_NRFLAG);
  34.182 -	}
  34.183 -}
  34.184 -
  34.185 -void __init select_idle_routine(const struct cpuinfo_x86 *c)
  34.186 -{
  34.187 -	if (cpu_has(c, X86_FEATURE_MWAIT)) {
  34.188 -		printk("monitor/mwait feature present.\n");
  34.189 -		/*
  34.190 -		 * Skip, if setup has overridden idle.
  34.191 -		 * Also, take care of system with asymmetric CPUs.
  34.192 -		 * Use, mwait_idle only if all cpus support it.
  34.193 -		 * If not, we fallback to default_idle()
  34.194 -		 */
  34.195 -		if (!pm_idle) {
  34.196 -			printk("using mwait in idle threads.\n");
  34.197 -			pm_idle = mwait_idle;
  34.198 -		}
  34.199 -		return;
  34.200 -	}
  34.201 -	if (!pm_idle)
  34.202 -		pm_idle = default_idle;
  34.203 -	return;
  34.204 -}
  34.205 -
  34.206 -static int __init idle_setup (char *str)
  34.207 -{
  34.208 -	if (!strncmp(str, "poll", 4)) {
  34.209 -		printk("using polling idle threads.\n");
  34.210 -		pm_idle = poll_idle;
  34.211 -#ifdef CONFIG_X86_SMP
  34.212 -		if (smp_num_siblings > 1)
  34.213 -			printk("WARNING: polling idle and HT enabled, performance may degrade.\n");
  34.214 -#endif
  34.215 -	} else if (!strncmp(str, "halt", 4)) {
  34.216 -		printk("using halt in idle threads.\n");
  34.217 -		pm_idle = default_idle;
  34.218 -	}
  34.219 -
  34.220 -	return 1;
  34.221 -}
  34.222 -
  34.223 -__setup("idle=", idle_setup);
  34.224 -
  34.225 -void show_regs(struct pt_regs * regs)
  34.226 -{
  34.227 -	printk("\n");
  34.228 -	printk("Pid: %d, comm: %20s\n", current->pid, current->comm);
  34.229 -	printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, smp_processor_id());
  34.230 -	print_symbol("EIP is at %s\n", regs->eip);
  34.231 -
  34.232 -	if (regs->xcs & 2)
  34.233 -		printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
  34.234 -	printk(" EFLAGS: %08lx    %s  (%s)\n",regs->eflags, print_tainted(),UTS_RELEASE);
  34.235 -	printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
  34.236 -		regs->eax,regs->ebx,regs->ecx,regs->edx);
  34.237 -	printk("ESI: %08lx EDI: %08lx EBP: %08lx",
  34.238 -		regs->esi, regs->edi, regs->ebp);
  34.239 -	printk(" DS: %04x ES: %04x\n",
  34.240 -		0xffff & regs->xds,0xffff & regs->xes);
  34.241 -
  34.242 -	show_trace(NULL, &regs->esp);
  34.243 -}
  34.244 -
  34.245 -/*
  34.246 - * This gets run with %ebx containing the
  34.247 - * function to call, and %edx containing
  34.248 - * the "args".
  34.249 - */
  34.250 -extern void kernel_thread_helper(void);
  34.251 -__asm__(".section .text\n"
  34.252 -	".align 4\n"
  34.253 -	"kernel_thread_helper:\n\t"
  34.254 -	"movl %edx,%eax\n\t"
  34.255 -	"pushl %edx\n\t"
  34.256 -	"call *%ebx\n\t"
  34.257 -	"pushl %eax\n\t"
  34.258 -	"call do_exit\n"
  34.259 -	".previous");
  34.260 -
  34.261 -/*
  34.262 - * Create a kernel thread
  34.263 - */
  34.264 -int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
  34.265 -{
  34.266 -	struct pt_regs regs;
  34.267 -
  34.268 -	memset(&regs, 0, sizeof(regs));
  34.269 -
  34.270 -	regs.ebx = (unsigned long) fn;
  34.271 -	regs.edx = (unsigned long) arg;
  34.272 -
  34.273 -	regs.xds = __USER_DS;
  34.274 -	regs.xes = __USER_DS;
  34.275 -	regs.orig_eax = -1;
  34.276 -	regs.eip = (unsigned long) kernel_thread_helper;
  34.277 -	regs.xcs = __KERNEL_CS;
  34.278 -	regs.eflags = X86_EFLAGS_IF | X86_EFLAGS_SF | X86_EFLAGS_PF | 0x2;
  34.279 -
  34.280 -	/* Ok, create the new process.. */
  34.281 -	return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, &regs, 0, NULL, NULL);
  34.282 -}
  34.283 -
  34.284 -/*
  34.285 - * Free current thread data structures etc..
  34.286 - */
  34.287 -void exit_thread(void)
  34.288 -{
  34.289 -	struct task_struct *tsk = current;
  34.290 -
  34.291 -	/* The process may have allocated an io port bitmap... nuke it. */
  34.292 -	if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) {
  34.293 -		int cpu = get_cpu();
  34.294 -		struct tss_struct *tss = init_tss + cpu;
  34.295 -		kfree(tsk->thread.io_bitmap_ptr);
  34.296 -		tsk->thread.io_bitmap_ptr = NULL;
  34.297 -		tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET;
  34.298 -		put_cpu();
  34.299 -	}
  34.300 -}
  34.301 -
  34.302 -void flush_thread(void)
  34.303 -{
  34.304 -	struct task_struct *tsk = current;
  34.305 -
  34.306 -	memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8);
  34.307 -	memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));	
  34.308 -	/*
  34.309 -	 * Forget coprocessor state..
  34.310 -	 */
  34.311 -	clear_fpu(tsk);
  34.312 -	tsk->used_math = 0;
  34.313 -}
  34.314 -
  34.315 -void release_thread(struct task_struct *dead_task)
  34.316 -{
  34.317 -	if (dead_task->mm) {
  34.318 -		// temporary debugging check
  34.319 -		if (dead_task->mm->context.size) {
  34.320 -			printk("WARNING: dead process %8s still has LDT? <%p/%d>\n",
  34.321 -					dead_task->comm,
  34.322 -					dead_task->mm->context.ldt,
  34.323 -					dead_task->mm->context.size);
  34.324 -			BUG();
  34.325 -		}
  34.326 -	}
  34.327 -
  34.328 -	release_x86_irqs(dead_task);
  34.329 -}
  34.330 -
  34.331 -/*
  34.332 - * This gets called before we allocate a new thread and copy
  34.333 - * the current task into it.
  34.334 - */
  34.335 -void prepare_to_copy(struct task_struct *tsk)
  34.336 -{
  34.337 -	unlazy_fpu(tsk);
  34.338 -}
  34.339 -
  34.340 -int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
  34.341 -	unsigned long unused,
  34.342 -	struct task_struct * p, struct pt_regs * regs)
  34.343 -{
  34.344 -	struct pt_regs * childregs;
  34.345 -	struct task_struct *tsk;
  34.346 -	int err;
  34.347 -	unsigned long eflags;
  34.348 -
  34.349 -	childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p->thread_info)) - 1;
  34.350 -	struct_cpy(childregs, regs);
  34.351 -	childregs->eax = 0;
  34.352 -	childregs->esp = esp;
  34.353 -	p->set_child_tid = p->clear_child_tid = NULL;
  34.354 -
  34.355 -	p->thread.esp = (unsigned long) childregs;
  34.356 -	p->thread.esp0 = (unsigned long) (childregs+1);
  34.357 -
  34.358 -	p->thread.eip = (unsigned long) ret_from_fork;
  34.359 -
  34.360 -	savesegment(fs,p->thread.fs);
  34.361 -	savesegment(gs,p->thread.gs);
  34.362 -
  34.363 -	tsk = current;
  34.364 -	if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) {
  34.365 -		p->thread.io_bitmap_ptr = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL);
  34.366 -		if (!p->thread.io_bitmap_ptr)
  34.367 -			return -ENOMEM;
  34.368 -		memcpy(p->thread.io_bitmap_ptr, tsk->thread.io_bitmap_ptr,
  34.369 -			IO_BITMAP_BYTES);
  34.370 -	}
  34.371 -
  34.372 -	/*
  34.373 -	 * Set a new TLS for the child thread?
  34.374 -	 */
  34.375 -	if (clone_flags & CLONE_SETTLS) {
  34.376 -		struct desc_struct *desc;
  34.377 -		struct user_desc info;
  34.378 -		int idx;
  34.379 -
  34.380 -		err = -EFAULT;
  34.381 -		if (copy_from_user(&info, (void __user *)childregs->esi, sizeof(info)))
  34.382 -			goto out;
  34.383 -		err = -EINVAL;
  34.384 -		if (LDT_empty(&info))
  34.385 -			goto out;
  34.386 -
  34.387 -		idx = info.entry_number;
  34.388 -		if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
  34.389 -			goto out;
  34.390 -
  34.391 -		desc = p->thread.tls_array + idx - GDT_ENTRY_TLS_MIN;
  34.392 -		desc->a = LDT_entry_a(&info);
  34.393 -		desc->b = LDT_entry_b(&info);
  34.394 -	}
  34.395 -
  34.396 -
  34.397 -	__asm__ __volatile__ ( "pushfl; popl %0" : "=r" (eflags) : );
  34.398 -	p->thread.io_pl = (eflags >> 12) & 3;
  34.399 -
  34.400 -	err = 0;
  34.401 - out:
  34.402 -	if (err && p->thread.io_bitmap_ptr)
  34.403 -		kfree(p->thread.io_bitmap_ptr);
  34.404 -	return err;
  34.405 -}
  34.406 -
  34.407 -/*
  34.408 - * fill in the user structure for a core dump..
  34.409 - */
  34.410 -void dump_thread(struct pt_regs * regs, struct user * dump)
  34.411 -{
  34.412 -	int i;
  34.413 -
  34.414 -/* changed the size calculations - should hopefully work better. lbt */
  34.415 -	dump->magic = CMAGIC;
  34.416 -	dump->start_code = 0;
  34.417 -	dump->start_stack = regs->esp & ~(PAGE_SIZE - 1);
  34.418 -	dump->u_tsize = ((unsigned long) current->mm->end_code) >> PAGE_SHIFT;
  34.419 -	dump->u_dsize = ((unsigned long) (current->mm->brk + (PAGE_SIZE-1))) >> PAGE_SHIFT;
  34.420 -	dump->u_dsize -= dump->u_tsize;
  34.421 -	dump->u_ssize = 0;
  34.422 -	for (i = 0; i < 8; i++)
  34.423 -		dump->u_debugreg[i] = current->thread.debugreg[i];  
  34.424 -
  34.425 -	if (dump->start_stack < TASK_SIZE)
  34.426 -		dump->u_ssize = ((unsigned long) (TASK_SIZE - dump->start_stack)) >> PAGE_SHIFT;
  34.427 -
  34.428 -	dump->regs.ebx = regs->ebx;
  34.429 -	dump->regs.ecx = regs->ecx;
  34.430 -	dump->regs.edx = regs->edx;
  34.431 -	dump->regs.esi = regs->esi;
  34.432 -	dump->regs.edi = regs->edi;
  34.433 -	dump->regs.ebp = regs->ebp;
  34.434 -	dump->regs.eax = regs->eax;
  34.435 -	dump->regs.ds = regs->xds;
  34.436 -	dump->regs.es = regs->xes;
  34.437 -	savesegment(fs,dump->regs.fs);
  34.438 -	savesegment(gs,dump->regs.gs);
  34.439 -	dump->regs.orig_eax = regs->orig_eax;
  34.440 -	dump->regs.eip = regs->eip;
  34.441 -	dump->regs.cs = regs->xcs;
  34.442 -	dump->regs.eflags = regs->eflags;
  34.443 -	dump->regs.esp = regs->esp;
  34.444 -	dump->regs.ss = regs->xss;
  34.445 -
  34.446 -	dump->u_fpvalid = dump_fpu (regs, &dump->i387);
  34.447 -}
  34.448 -
  34.449 -/* 
  34.450 - * Capture the user space registers if the task is not running (in user space)
  34.451 - */
  34.452 -int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
  34.453 -{
  34.454 -	struct pt_regs ptregs;
  34.455 -	
  34.456 -	ptregs = *(struct pt_regs *)
  34.457 -		((unsigned long)tsk->thread_info+THREAD_SIZE - sizeof(ptregs));
  34.458 -	ptregs.xcs &= 0xffff;
  34.459 -	ptregs.xds &= 0xffff;
  34.460 -	ptregs.xes &= 0xffff;
  34.461 -	ptregs.xss &= 0xffff;
  34.462 -
  34.463 -	elf_core_copy_regs(regs, &ptregs);
  34.464 -
  34.465 -	return 1;
  34.466 -}
  34.467 -
  34.468 -/*
  34.469 - * This special macro can be used to load a debugging register
  34.470 - */
  34.471 -#define loaddebug(thread,register) \
  34.472 -		HYPERVISOR_set_debugreg((register),	\
  34.473 -			(thread->debugreg[register]))
  34.474 -
  34.475 -/*
  34.476 - *	switch_to(x,yn) should switch tasks from x to y.
  34.477 - *
  34.478 - * We fsave/fwait so that an exception goes off at the right time
  34.479 - * (as a call from the fsave or fwait in effect) rather than to
  34.480 - * the wrong process. Lazy FP saving no longer makes any sense
  34.481 - * with modern CPU's, and this simplifies a lot of things (SMP
  34.482 - * and UP become the same).
  34.483 - *
  34.484 - * NOTE! We used to use the x86 hardware context switching. The
  34.485 - * reason for not using it any more becomes apparent when you
  34.486 - * try to recover gracefully from saved state that is no longer
  34.487 - * valid (stale segment register values in particular). With the
  34.488 - * hardware task-switch, there is no way to fix up bad state in
  34.489 - * a reasonable manner.
  34.490 - *
  34.491 - * The fact that Intel documents the hardware task-switching to
  34.492 - * be slow is a fairly red herring - this code is not noticeably
  34.493 - * faster. However, there _is_ some room for improvement here,
  34.494 - * so the performance issues may eventually be a valid point.
  34.495 - * More important, however, is the fact that this allows us much
  34.496 - * more flexibility.
  34.497 - *
  34.498 - * The return value (in %eax) will be the "prev" task after
  34.499 - * the task-switch, and shows up in ret_from_fork in entry.S,
  34.500 - * for example.
  34.501 - */
  34.502 -struct task_struct fastcall * __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
  34.503 -{
  34.504 -	struct thread_struct *prev = &prev_p->thread,
  34.505 -				 *next = &next_p->thread;
  34.506 -	int cpu = smp_processor_id();
  34.507 -	struct tss_struct *tss = init_tss + cpu;
  34.508 -	dom0_op_t op;
  34.509 -
  34.510 -        /* NB. No need to disable interrupts as already done in sched.c */
  34.511 -        /* __cli(); */
  34.512 -
  34.513 -	/*
  34.514 -	 * Save away %fs and %gs. No need to save %es and %ds, as
  34.515 -	 * those are always kernel segments while inside the kernel.
  34.516 -	 */
  34.517 -	asm volatile("movl %%fs,%0":"=m" (*(int *)&prev->fs));
  34.518 -	asm volatile("movl %%gs,%0":"=m" (*(int *)&prev->gs));
  34.519 -
  34.520 -	/*
  34.521 -	 * We clobber FS and GS here so that we avoid a GPF when
  34.522 -	 * restoring previous task's FS/GS values in Xen when the LDT
  34.523 -	 * is switched. If we don't do this then we can end up
  34.524 -	 * erroneously re-flushing the page-update queue when we
  34.525 -	 * 'execute_multicall_list'.
  34.526 -	 */
  34.527 -	__asm__ __volatile__ ( 
  34.528 -		"xorl %%eax,%%eax; movl %%eax,%%fs; movl %%eax,%%gs" : : :
  34.529 -		"eax" );
  34.530 -
  34.531 -	MULTICALL_flush_page_update_queue();
  34.532 -
  34.533 -	/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
  34.534 -
  34.535 -	/*
  34.536 -	 * This is basically '__unlazy_fpu', except that we queue a
  34.537 -	 * multicall to indicate FPU task switch, rather than
  34.538 -	 * synchronously trapping to Xen.
  34.539 -	 */
  34.540 -	if (prev_p->thread_info->status & TS_USEDFPU) {
  34.541 -		save_init_fpu(prev_p);
  34.542 -		queue_multicall0(__HYPERVISOR_fpu_taskswitch);
  34.543 -	}
  34.544 -
  34.545 -	/*
  34.546 -	 * Reload esp0, LDT and the page table pointer:
  34.547 -	 * This is load_esp0(tss, next) with a multicall.
  34.548 -	 */
  34.549 -	tss->esp0 = next->esp0;
  34.550 -	/* This can only happen when SEP is enabled, no need to test
  34.551 -	 * "SEP"arately */
  34.552 -	if (unlikely(tss->ss1 != next->sysenter_cs)) {
  34.553 -		tss->ss1 = next->sysenter_cs;
  34.554 -		wrmsr(MSR_IA32_SYSENTER_CS, next->sysenter_cs, 0);
  34.555 -	}
  34.556 -	queue_multicall2(__HYPERVISOR_stack_switch, tss->ss0, tss->esp0);
  34.557 -
  34.558 -	/*
  34.559 -	 * Load the per-thread Thread-Local Storage descriptor.
  34.560 -	 * This is load_TLS(next, cpu) with multicalls.
  34.561 -	 */
  34.562 -#define C(i) queue_multicall3(__HYPERVISOR_update_descriptor, virt_to_machine(&get_cpu_gdt_table(cpu)[GDT_ENTRY_TLS_MIN + i]), ((u32 *)&next->tls_array[i])[0], ((u32 *)&next->tls_array[i])[1])
  34.563 -	C(0); C(1); C(2);
  34.564 -#undef C
  34.565 -
  34.566 -	if (start_info.flags & SIF_PRIVILEGED) {
  34.567 -		op.cmd           = DOM0_IOPL;
  34.568 -		op.u.iopl.domain = DOMID_SELF;
  34.569 -		op.u.iopl.iopl   = next->io_pl;
  34.570 -		queue_multicall1(__HYPERVISOR_dom0_op, (unsigned long)&op);
  34.571 -	}
  34.572 -
  34.573 -	/* EXECUTE ALL TASK SWITCH XEN SYSCALLS AT THIS POINT. */
  34.574 -	execute_multicall_list();
  34.575 -        /* __sti(); */
  34.576 -
  34.577 -	/*
  34.578 -	 * Restore %fs and %gs if needed.
  34.579 -	 */
  34.580 -	if (unlikely(prev->fs | prev->gs | next->fs | next->gs)) {
  34.581 -		loadsegment(fs, next->fs);
  34.582 -		loadsegment(gs, next->gs);
  34.583 -	}
  34.584 -
  34.585 -	/*
  34.586 -	 * Now maybe reload the debug registers
  34.587 -	 */
  34.588 -	if (unlikely(next->debugreg[7])) {
  34.589 -		loaddebug(next, 0);
  34.590 -		loaddebug(next, 1);
  34.591 -		loaddebug(next, 2);
  34.592 -		loaddebug(next, 3);
  34.593 -		/* no 4 and 5 */
  34.594 -		loaddebug(next, 6);
  34.595 -		loaddebug(next, 7);
  34.596 -	}
  34.597 -
  34.598 -	if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr)) {
  34.599 -		if (next->io_bitmap_ptr) {
  34.600 -			/*
  34.601 -			 * 4 cachelines copy ... not good, but not that
  34.602 -			 * bad either. Anyone got something better?
  34.603 -			 * This only affects processes which use ioperm().
  34.604 -			 * [Putting the TSSs into 4k-tlb mapped regions
  34.605 -			 * and playing VM tricks to switch the IO bitmap
  34.606 -			 * is not really acceptable.]
  34.607 -			 */
  34.608 -			memcpy(tss->io_bitmap, next->io_bitmap_ptr,
  34.609 -				IO_BITMAP_BYTES);
  34.610 -			tss->io_bitmap_base = IO_BITMAP_OFFSET;
  34.611 -		} else
  34.612 -			/*
  34.613 -			 * a bitmap offset pointing outside of the TSS limit
  34.614 -			 * causes a nicely controllable SIGSEGV if a process
  34.615 -			 * tries to use a port IO instruction. The first
  34.616 -			 * sys_ioperm() call sets up the bitmap properly.
  34.617 -			 */
  34.618 -			tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET;
  34.619 -	}
  34.620 -	return prev_p;
  34.621 -}
  34.622 -
  34.623 -asmlinkage int sys_fork(struct pt_regs regs)
  34.624 -{
  34.625 -	return do_fork(SIGCHLD, regs.esp, &regs, 0, NULL, NULL);
  34.626 -}
  34.627 -
  34.628 -asmlinkage int sys_clone(struct pt_regs regs)
  34.629 -{
  34.630 -	unsigned long clone_flags;
  34.631 -	unsigned long newsp;
  34.632 -	int __user *parent_tidptr, *child_tidptr;
  34.633 -
  34.634 -	clone_flags = regs.ebx;
  34.635 -	newsp = regs.ecx;
  34.636 -	parent_tidptr = (int __user *)regs.edx;
  34.637 -	child_tidptr = (int __user *)regs.edi;
  34.638 -	if (!newsp)
  34.639 -		newsp = regs.esp;
  34.640 -	return do_fork(clone_flags & ~CLONE_IDLETASK, newsp, &regs, 0, parent_tidptr, child_tidptr);
  34.641 -}
  34.642 -
  34.643 -/*
  34.644 - * This is trivial, and on the face of it looks like it
  34.645 - * could equally well be done in user mode.
  34.646 - *
  34.647 - * Not so, for quite unobvious reasons - register pressure.
  34.648 - * In user mode vfork() cannot have a stack frame, and if
  34.649 - * done by calling the "clone()" system call directly, you
  34.650 - * do not have enough call-clobbered registers to hold all
  34.651 - * the information you need.
  34.652 - */
  34.653 -asmlinkage int sys_vfork(struct pt_regs regs)
  34.654 -{
  34.655 -	return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs.esp, &regs, 0, NULL, NULL);
  34.656 -}
  34.657 -
  34.658 -/*
  34.659 - * sys_execve() executes a new program.
  34.660 - */
  34.661 -asmlinkage int sys_execve(struct pt_regs regs)
  34.662 -{
  34.663 -	int error;
  34.664 -	char * filename;
  34.665 -
  34.666 -	filename = getname((char __user *) regs.ebx);
  34.667 -	error = PTR_ERR(filename);
  34.668 -	if (IS_ERR(filename))
  34.669 -		goto out;
  34.670 -	error = do_execve(filename,
  34.671 -			(char __user * __user *) regs.ecx,
  34.672 -			(char __user * __user *) regs.edx,
  34.673 -			&regs);
  34.674 -	if (error == 0) {
  34.675 -		current->ptrace &= ~PT_DTRACE;
  34.676 -		/* Make sure we don't return using sysenter.. */
  34.677 -		set_thread_flag(TIF_IRET);
  34.678 -	}
  34.679 -	putname(filename);
  34.680 -out:
  34.681 -	return error;
  34.682 -}
  34.683 -
  34.684 -#define top_esp                (THREAD_SIZE - sizeof(unsigned long))
  34.685 -#define top_ebp                (THREAD_SIZE - 2*sizeof(unsigned long))
  34.686 -
  34.687 -unsigned long get_wchan(struct task_struct *p)
  34.688 -{
  34.689 -	unsigned long ebp, esp, eip;
  34.690 -	unsigned long stack_page;
  34.691 -	int count = 0;
  34.692 -	if (!p || p == current || p->state == TASK_RUNNING)
  34.693 -		return 0;
  34.694 -	stack_page = (unsigned long)p->thread_info;
  34.695 -	esp = p->thread.esp;
  34.696 -	if (!stack_page || esp < stack_page || esp > top_esp+stack_page)
  34.697 -		return 0;
  34.698 -	/* include/asm-i386/system.h:switch_to() pushes ebp last. */
  34.699 -	ebp = *(unsigned long *) esp;
  34.700 -	do {
  34.701 -		if (ebp < stack_page || ebp > top_ebp+stack_page)
  34.702 -			return 0;
  34.703 -		eip = *(unsigned long *) (ebp+4);
  34.704 -		if (!in_sched_functions(eip))
  34.705 -			return eip;
  34.706 -		ebp = *(unsigned long *) ebp;
  34.707 -	} while (count++ < 16);
  34.708 -	return 0;
  34.709 -}
  34.710 -
  34.711 -/*
  34.712 - * sys_alloc_thread_area: get a yet unused TLS descriptor index.
  34.713 - */
  34.714 -static int get_free_idx(void)
  34.715 -{
  34.716 -	struct thread_struct *t = &current->thread;
  34.717 -	int idx;
  34.718 -
  34.719 -	for (idx = 0; idx < GDT_ENTRY_TLS_ENTRIES; idx++)
  34.720 -		if (desc_empty(t->tls_array + idx))
  34.721 -			return idx + GDT_ENTRY_TLS_MIN;
  34.722 -	return -ESRCH;
  34.723 -}
  34.724 -
  34.725 -/*
  34.726 - * Set a given TLS descriptor:
  34.727 - */
  34.728 -asmlinkage int sys_set_thread_area(struct user_desc __user *u_info)
  34.729 -{
  34.730 -	struct thread_struct *t = &current->thread;
  34.731 -	struct user_desc info;
  34.732 -	struct desc_struct *desc;
  34.733 -	int cpu, idx;
  34.734 -
  34.735 -	if (copy_from_user(&info, u_info, sizeof(info)))
  34.736 -		return -EFAULT;
  34.737 -	idx = info.entry_number;
  34.738 -
  34.739 -	/*
  34.740 -	 * index -1 means the kernel should try to find and
  34.741 -	 * allocate an empty descriptor:
  34.742 -	 */
  34.743 -	if (idx == -1) {
  34.744 -		idx = get_free_idx();
  34.745 -		if (idx < 0)
  34.746 -			return idx;
  34.747 -		if (put_user(idx, &u_info->entry_number))
  34.748 -			return -EFAULT;
  34.749 -	}
  34.750 -
  34.751 -	if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
  34.752 -		return -EINVAL;
  34.753 -
  34.754 -	desc = t->tls_array + idx - GDT_ENTRY_TLS_MIN;
  34.755 -
  34.756 -	/*
  34.757 -	 * We must not get preempted while modifying the TLS.
  34.758 -	 */
  34.759 -	cpu = get_cpu();
  34.760 -
  34.761 -	if (LDT_empty(&info)) {
  34.762 -		desc->a = 0;
  34.763 -		desc->b = 0;
  34.764 -	} else {
  34.765 -		desc->a = LDT_entry_a(&info);
  34.766 -		desc->b = LDT_entry_b(&info);
  34.767 -	}
  34.768 -	load_TLS(t, cpu);
  34.769 -
  34.770 -	put_cpu();
  34.771 -
  34.772 -	return 0;
  34.773 -}
  34.774 -
  34.775 -/*
  34.776 - * Get the current Thread-Local Storage area:
  34.777 - */
  34.778 -
  34.779 -#define GET_BASE(desc) ( \
  34.780 -	(((desc)->a >> 16) & 0x0000ffff) | \
  34.781 -	(((desc)->b << 16) & 0x00ff0000) | \
  34.782 -	( (desc)->b        & 0xff000000)   )
  34.783 -
  34.784 -#define GET_LIMIT(desc) ( \
  34.785 -	((desc)->a & 0x0ffff) | \
  34.786 -	 ((desc)->b & 0xf0000) )
  34.787 -	
  34.788 -#define GET_32BIT(desc)		(((desc)->b >> 22) & 1)
  34.789 -#define GET_CONTENTS(desc)	(((desc)->b >> 10) & 3)
  34.790 -#define GET_WRITABLE(desc)	(((desc)->b >>  9) & 1)
  34.791 -#define GET_LIMIT_PAGES(desc)	(((desc)->b >> 23) & 1)
  34.792 -#define GET_PRESENT(desc)	(((desc)->b >> 15) & 1)
  34.793 -#define GET_USEABLE(desc)	(((desc)->b >> 20) & 1)
  34.794 -
  34.795 -asmlinkage int sys_get_thread_area(struct user_desc __user *u_info)
  34.796 -{
  34.797 -	struct user_desc info;
  34.798 -	struct desc_struct *desc;
  34.799 -	int idx;
  34.800 -
  34.801 -	if (get_user(idx, &u_info->entry_number))
  34.802 -		return -EFAULT;
  34.803 -	if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
  34.804 -		return -EINVAL;
  34.805 -
  34.806 -	desc = current->thread.tls_array + idx - GDT_ENTRY_TLS_MIN;
  34.807 -
  34.808 -	info.entry_number = idx;
  34.809 -	info.base_addr = GET_BASE(desc);
  34.810 -	info.limit = GET_LIMIT(desc);
  34.811 -	info.seg_32bit = GET_32BIT(desc);
  34.812 -	info.contents = GET_CONTENTS(desc);
  34.813 -	info.read_exec_only = !GET_WRITABLE(desc);
  34.814 -	info.limit_in_pages = GET_LIMIT_PAGES(desc);
  34.815 -	info.seg_not_present = !GET_PRESENT(desc);
  34.816 -	info.useable = GET_USEABLE(desc);
  34.817 -
  34.818 -	if (copy_to_user(u_info, &info, sizeof(info)))
  34.819 -		return -EFAULT;
  34.820 -	return 0;
  34.821 -}
  34.822 -
    35.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/setup.c	Fri Aug 27 08:43:54 2004 +0000
    35.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.3 @@ -1,1282 +0,0 @@
    35.4 -/*
    35.5 - *  linux/arch/i386/kernel/setup.c
    35.6 - *
    35.7 - *  Copyright (C) 1995  Linus Torvalds
    35.8 - *
    35.9 - *  Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
   35.10 - *
   35.11 - *  Memory region support
   35.12 - *	David Parsons <orc@pell.chi.il.us>, July-August 1999
   35.13 - *
   35.14 - *  Added E820 sanitization routine (removes overlapping memory regions);
   35.15 - *  Brian Moyle <bmoyle@mvista.com>, February 2001
   35.16 - *
   35.17 - * Moved CPU detection code to cpu/${cpu}.c
   35.18 - *    Patrick Mochel <mochel@osdl.org>, March 2002
   35.19 - *
   35.20 - *  Provisions for empty E820 memory regions (reported by certain BIOSes).
   35.21 - *  Alex Achenbach <xela@slit.de>, December 2002.
   35.22 - *
   35.23 - */
   35.24 -
   35.25 -/*
   35.26 - * This file handles the architecture-dependent parts of initialization
   35.27 - */
   35.28 -
   35.29 -#include <linux/sched.h>
   35.30 -#include <linux/mm.h>
   35.31 -#include <linux/tty.h>
   35.32 -#include <linux/ioport.h>
   35.33 -#include <linux/acpi.h>
   35.34 -#include <linux/apm_bios.h>
   35.35 -#include <linux/initrd.h>
   35.36 -#include <linux/bootmem.h>
   35.37 -#include <linux/seq_file.h>
   35.38 -#include <linux/console.h>
   35.39 -#include <linux/root_dev.h>
   35.40 -#include <linux/highmem.h>
   35.41 -#include <linux/module.h>
   35.42 -#include <linux/efi.h>
   35.43 -#include <linux/init.h>
   35.44 -#include <linux/edd.h>
   35.45 -#include <video/edid.h>
   35.46 -#include <asm/e820.h>
   35.47 -#include <asm/mpspec.h>
   35.48 -#include <asm/setup.h>
   35.49 -#include <asm/arch_hooks.h>
   35.50 -#include <asm/sections.h>
   35.51 -#include <asm/io_apic.h>
   35.52 -#include <asm/ist.h>
   35.53 -#include <asm/std_resources.h>
   35.54 -#include <asm-xen/hypervisor.h>
   35.55 -#include "setup_arch_pre.h"
   35.56 -
   35.57 -int disable_pse __initdata = 0;
   35.58 -
   35.59 -static inline char * __init machine_specific_memory_setup(void);
   35.60 -
   35.61 -/*
   35.62 - * Machine setup..
   35.63 - */
   35.64 -
   35.65 -#ifdef CONFIG_EFI
   35.66 -int efi_enabled = 0;
   35.67 -EXPORT_SYMBOL(efi_enabled);
   35.68 -#endif
   35.69 -
   35.70 -/* cpu data as detected by the assembly code in head.S */
   35.71 -struct cpuinfo_x86 new_cpu_data __initdata = { 0, 0, 0, 0, -1, 0, 1, 0, -1 };
   35.72 -/* common cpu data for all cpus */
   35.73 -struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1, 0, 1, 0, -1 };
   35.74 -
   35.75 -unsigned long mmu_cr4_features;
   35.76 -EXPORT_SYMBOL_GPL(mmu_cr4_features);
   35.77 -
   35.78 -#ifdef	CONFIG_ACPI_INTERPRETER
   35.79 -	int acpi_disabled = 0;
   35.80 -#else
   35.81 -	int acpi_disabled = 1;
   35.82 -#endif
   35.83 -EXPORT_SYMBOL(acpi_disabled);
   35.84 -
   35.85 -#ifdef	CONFIG_ACPI_BOOT
   35.86 -int __initdata acpi_force = 0;
   35.87 -extern acpi_interrupt_flags	acpi_sci_flags;
   35.88 -#endif
   35.89 -
   35.90 -int MCA_bus;
   35.91 -/* for MCA, but anyone else can use it if they want */
   35.92 -unsigned int machine_id;
   35.93 -unsigned int machine_submodel_id;
   35.94 -unsigned int BIOS_revision;
   35.95 -unsigned int mca_pentium_flag;
   35.96 -
   35.97 -/* For PCI or other memory-mapped resources */
   35.98 -unsigned long pci_mem_start = 0x10000000;
   35.99 -
  35.100 -/* user-defined highmem size */
  35.101 -static unsigned int highmem_pages = -1;
  35.102 -
  35.103 -/*
  35.104 - * Setup options
  35.105 - */
  35.106 -struct drive_info_struct { char dummy[32]; } drive_info;
  35.107 -struct screen_info screen_info;
  35.108 -struct apm_info apm_info;
  35.109 -struct sys_desc_table_struct {
  35.110 -	unsigned short length;
  35.111 -	unsigned char table[0];
  35.112 -};
  35.113 -struct edid_info edid_info;
  35.114 -struct ist_info ist_info;
  35.115 -struct e820map e820;
  35.116 -
  35.117 -unsigned char aux_device_present;
  35.118 -
  35.119 -extern void early_cpu_init(void);
  35.120 -extern void dmi_scan_machine(void);
  35.121 -extern void generic_apic_probe(char *);
  35.122 -extern int root_mountflags;
  35.123 -
  35.124 -unsigned long saved_videomode;
  35.125 -
  35.126 -#define RAMDISK_IMAGE_START_MASK  	0x07FF
  35.127 -#define RAMDISK_PROMPT_FLAG		0x8000
  35.128 -#define RAMDISK_LOAD_FLAG		0x4000	
  35.129 -
  35.130 -static char command_line[COMMAND_LINE_SIZE];
  35.131 -       char saved_command_line[COMMAND_LINE_SIZE];
  35.132 -
  35.133 -unsigned char __initdata boot_params[PARAM_SIZE];
  35.134 -
  35.135 -static struct resource code_resource = { "Kernel code", 0x100000, 0 };
  35.136 -static struct resource data_resource = { "Kernel data", 0, 0 };
  35.137 -
  35.138 -/*
  35.139 - * Point at the empty zero page to start with. We map the real shared_info
  35.140 - * page as soon as fixmap is up and running.
  35.141 - */
  35.142 -shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
  35.143 -EXPORT_SYMBOL(HYPERVISOR_shared_info);
  35.144 -
  35.145 -unsigned long *phys_to_machine_mapping, *pfn_to_mfn_frame_list;
  35.146 -EXPORT_SYMBOL(phys_to_machine_mapping);
  35.147 -
  35.148 -multicall_entry_t multicall_list[8];
  35.149 -int nr_multicall_ents = 0;
  35.150 -
  35.151 -/* Raw start-of-day parameters from the hypervisor. */
  35.152 -union start_info_union start_info_union;
  35.153 -
  35.154 -extern void (*pm_idle)(void);
  35.155 -
  35.156 -static void __init limit_regions(unsigned long long size)
  35.157 -{
  35.158 -	unsigned long long current_addr = 0;
  35.159 -	int i;
  35.160 -
  35.161 -	if (efi_enabled) {
  35.162 -		for (i = 0; i < memmap.nr_map; i++) {
  35.163 -			current_addr = memmap.map[i].phys_addr +
  35.164 -				       (memmap.map[i].num_pages << 12);
  35.165 -			if (memmap.map[i].type == EFI_CONVENTIONAL_MEMORY) {
  35.166 -				if (current_addr >= size) {
  35.167 -					memmap.map[i].num_pages -=
  35.168 -						(((current_addr-size) + PAGE_SIZE-1) >> PAGE_SHIFT);
  35.169 -					memmap.nr_map = i + 1;
  35.170 -					return;
  35.171 -				}
  35.172 -			}
  35.173 -		}
  35.174 -	}
  35.175 -	for (i = 0; i < e820.nr_map; i++) {
  35.176 -		if (e820.map[i].type == E820_RAM) {
  35.177 -			current_addr = e820.map[i].addr + e820.map[i].size;
  35.178 -			if (current_addr >= size) {
  35.179 -				e820.map[i].size -= current_addr-size;
  35.180 -				e820.nr_map = i + 1;
  35.181 -				return;
  35.182 -			}
  35.183 -		}
  35.184 -	}
  35.185 -}
  35.186 -
  35.187 -static void __init add_memory_region(unsigned long long start,
  35.188 -                                  unsigned long long size, int type)
  35.189 -{
  35.190 -	int x;
  35.191 -
  35.192 -	if (!efi_enabled) {
  35.193 -       		x = e820.nr_map;
  35.194 -
  35.195 -		if (x == E820MAX) {
  35.196 -		    printk(KERN_ERR "Ooops! Too many entries in the memory map!\n");
  35.197 -		    return;
  35.198 -		}
  35.199 -
  35.200 -		e820.map[x].addr = start;
  35.201 -		e820.map[x].size = size;
  35.202 -		e820.map[x].type = type;
  35.203 -		e820.nr_map++;
  35.204 -	}
  35.205 -} /* add_memory_region */
  35.206 -
  35.207 -#define E820_DEBUG	1
  35.208 -
  35.209 -static void __init print_memory_map(char *who)
  35.210 -{
  35.211 -	int i;
  35.212 -
  35.213 -	for (i = 0; i < e820.nr_map; i++) {
  35.214 -		printk(" %s: %016Lx - %016Lx ", who,
  35.215 -			e820.map[i].addr,
  35.216 -			e820.map[i].addr + e820.map[i].size);
  35.217 -		switch (e820.map[i].type) {
  35.218 -		case E820_RAM:	printk("(usable)\n");
  35.219 -				break;
  35.220 -		case E820_RESERVED:
  35.221 -				printk("(reserved)\n");
  35.222 -				break;
  35.223 -		case E820_ACPI:
  35.224 -				printk("(ACPI data)\n");
  35.225 -				break;
  35.226 -		case E820_NVS:
  35.227 -				printk("(ACPI NVS)\n");
  35.228 -				break;
  35.229 -		default:	printk("type %lu\n", e820.map[i].type);
  35.230 -				break;
  35.231 -		}
  35.232 -	}
  35.233 -}
  35.234 -
  35.235 -#if 0
  35.236 -/*
  35.237 - * Sanitize the BIOS e820 map.
  35.238 - *
  35.239 - * Some e820 responses include overlapping entries.  The following 
  35.240 - * replaces the original e820 map with a new one, removing overlaps.
  35.241 - *
  35.242 - */
  35.243 -struct change_member {
  35.244 -	struct e820entry *pbios; /* pointer to original bios entry */
  35.245 -	unsigned long long addr; /* address for this change point */
  35.246 -};
  35.247 -struct change_member change_point_list[2*E820MAX] __initdata;
  35.248 -struct change_member *change_point[2*E820MAX] __initdata;
  35.249 -struct e820entry *overlap_list[E820MAX] __initdata;
  35.250 -struct e820entry new_bios[E820MAX] __initdata;
  35.251 -
  35.252 -static int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map)
  35.253 -{
  35.254 -	struct change_member *change_tmp;
  35.255 -	unsigned long current_type, last_type;
  35.256 -	unsigned long long last_addr;
  35.257 -	int chgidx, still_changing;
  35.258 -	int overlap_entries;
  35.259 -	int new_bios_entry;
  35.260 -	int old_nr, new_nr, chg_nr;
  35.261 -	int i;
  35.262 -
  35.263 -	/*
  35.264 -		Visually we're performing the following (1,2,3,4 = memory types)...
  35.265 -
  35.266 -		Sample memory map (w/overlaps):
  35.267 -		   ____22__________________
  35.268 -		   ______________________4_
  35.269 -		   ____1111________________
  35.270 -		   _44_____________________
  35.271 -		   11111111________________
  35.272 -		   ____________________33__
  35.273 -		   ___________44___________
  35.274 -		   __________33333_________
  35.275 -		   ______________22________
  35.276 -		   ___________________2222_
  35.277 -		   _________111111111______
  35.278 -		   _____________________11_
  35.279 -		   _________________4______
  35.280 -
  35.281 -		Sanitized equivalent (no overlap):
  35.282 -		   1_______________________
  35.283 -		   _44_____________________
  35.284 -		   ___1____________________
  35.285 -		   ____22__________________
  35.286 -		   ______11________________
  35.287 -		   _________1______________
  35.288 -		   __________3_____________
  35.289 -		   ___________44___________
  35.290 -		   _____________33_________
  35.291 -		   _______________2________
  35.292 -		   ________________1_______
  35.293 -		   _________________4______
  35.294 -		   ___________________2____
  35.295 -		   ____________________33__
  35.296 -		   ______________________4_
  35.297 -	*/
  35.298 -
  35.299 -	/* if there's only one memory region, don't bother */
  35.300 -	if (*pnr_map < 2)
  35.301 -		return -1;
  35.302 -
  35.303 -	old_nr = *pnr_map;
  35.304 -
  35.305 -	/* bail out if we find any unreasonable addresses in bios map */
  35.306 -	for (i=0; i<old_nr; i++)
  35.307 -		if (biosmap[i].addr + biosmap[i].size < biosmap[i].addr)
  35.308 -			return -1;
  35.309 -
  35.310 -	/* create pointers for initial change-point information (for sorting) */
  35.311 -	for (i=0; i < 2*old_nr; i++)
  35.312 -		change_point[i] = &change_point_list[i];
  35.313 -
  35.314 -	/* record all known change-points (starting and ending addresses),
  35.315 -	   omitting those that are for empty memory regions */
  35.316 -	chgidx = 0;
  35.317 -	for (i=0; i < old_nr; i++)	{
  35.318 -		if (biosmap[i].size != 0) {
  35.319 -			change_point[chgidx]->addr = biosmap[i].addr;
  35.320 -			change_point[chgidx++]->pbios = &biosmap[i];
  35.321 -			change_point[chgidx]->addr = biosmap[i].addr + biosmap[i].size;
  35.322 -			change_point[chgidx++]->pbios = &biosmap[i];
  35.323 -		}
  35.324 -	}
  35.325 -	chg_nr = chgidx;    	/* true number of change-points */
  35.326 -
  35.327 -	/* sort change-point list by memory addresses (low -> high) */
  35.328 -	still_changing = 1;
  35.329 -	while (still_changing)	{
  35.330 -		still_changing = 0;
  35.331 -		for (i=1; i < chg_nr; i++)  {
  35.332 -			/* if <current_addr> > <last_addr>, swap */
  35.333 -			/* or, if current=<start_addr> & last=<end_addr>, swap */
  35.334 -			if ((change_point[i]->addr < change_point[i-1]->addr) ||
  35.335 -				((change_point[i]->addr == change_point[i-1]->addr) &&
  35.336 -				 (change_point[i]->addr == change_point[i]->pbios->addr) &&
  35.337 -				 (change_point[i-1]->addr != change_point[i-1]->pbios->addr))
  35.338 -			   )
  35.339 -			{
  35.340 -				change_tmp = change_point[i];
  35.341 -				change_point[i] = change_point[i-1];
  35.342 -				change_point[i-1] = change_tmp;
  35.343 -				still_changing=1;
  35.344 -			}
  35.345 -		}
  35.346 -	}
  35.347 -
  35.348 -	/* create a new bios memory map, removing overlaps */
  35.349 -	overlap_entries=0;	 /* number of entries in the overlap table */
  35.350 -	new_bios_entry=0;	 /* index for creating new bios map entries */
  35.351 -	last_type = 0;		 /* start with undefined memory type */
  35.352 -	last_addr = 0;		 /* start with 0 as last starting address */
  35.353 -	/* loop through change-points, determining affect on the new bios map */
  35.354 -	for (chgidx=0; chgidx < chg_nr; chgidx++)
  35.355 -	{
  35.356 -		/* keep track of all overlapping bios entries */
  35.357 -		if (change_point[chgidx]->addr == change_point[chgidx]->pbios->addr)
  35.358 -		{
  35.359 -			/* add map entry to overlap list (> 1 entry implies an overlap) */
  35.360 -			overlap_list[overlap_entries++]=change_point[chgidx]->pbios;
  35.361 -		}
  35.362 -		else
  35.363 -		{
  35.364 -			/* remove entry from list (order independent, so swap with last) */
  35.365 -			for (i=0; i<overlap_entries; i++)
  35.366 -			{
  35.367 -				if (overlap_list[i] == change_point[chgidx]->pbios)
  35.368 -					overlap_list[i] = overlap_list[overlap_entries-1];
  35.369 -			}
  35.370 -			overlap_entries--;
  35.371 -		}
  35.372 -		/* if there are overlapping entries, decide which "type" to use */
  35.373 -		/* (larger value takes precedence -- 1=usable, 2,3,4,4+=unusable) */
  35.374 -		current_type = 0;
  35.375 -		for (i=0; i<overlap_entries; i++)
  35.376 -			if (overlap_list[i]->type > current_type)
  35.377 -				current_type = overlap_list[i]->type;
  35.378 -		/* continue building up new bios map based on this information */
  35.379 -		if (current_type != last_type)	{
  35.380 -			if (last_type != 0)	 {
  35.381 -				new_bios[new_bios_entry].size =
  35.382 -					change_point[chgidx]->addr - last_addr;
  35.383 -				/* move forward only if the new size was non-zero */
  35.384 -				if (new_bios[new_bios_entry].size != 0)
  35.385 -					if (++new_bios_entry >= E820MAX)
  35.386 -						break; 	/* no more space left for new bios entries */
  35.387 -			}
  35.388 -			if (current_type != 0)	{
  35.389 -				new_bios[new_bios_entry].addr = change_point[chgidx]->addr;
  35.390 -				new_bios[new_bios_entry].type = current_type;
  35.391 -				last_addr=change_point[chgidx]->addr;
  35.392 -			}
  35.393 -			last_type = current_type;
  35.394 -		}
  35.395 -	}
  35.396 -	new_nr = new_bios_entry;   /* retain count for new bios entries */
  35.397 -
  35.398 -	/* copy new bios mapping into original location */
  35.399 -	memcpy(biosmap, new_bios, new_nr*sizeof(struct e820entry));
  35.400 -	*pnr_map = new_nr;
  35.401 -
  35.402 -	return 0;
  35.403 -}
  35.404 -
  35.405 -/*
  35.406 - * Copy the BIOS e820 map into a safe place.
  35.407 - *
  35.408 - * Sanity-check it while we're at it..
  35.409 - *
  35.410 - * If we're lucky and live on a modern system, the setup code
  35.411 - * will have given us a memory map that we can use to properly
  35.412 - * set up memory.  If we aren't, we'll fake a memory map.
  35.413 - *
  35.414 - * We check to see that the memory map contains at least 2 elements
  35.415 - * before we'll use it, because the detection code in setup.S may
  35.416 - * not be perfect and most every PC known to man has two memory
  35.417 - * regions: one from 0 to 640k, and one from 1mb up.  (The IBM
  35.418 - * thinkpad 560x, for example, does not cooperate with the memory
  35.419 - * detection code.)
  35.420 - */
  35.421 -static int __init copy_e820_map(struct e820entry * biosmap, int nr_map)
  35.422 -{
  35.423 -	/* Only one memory region (or negative)? Ignore it */
  35.424 -	if (nr_map < 2)
  35.425 -		return -1;
  35.426 -
  35.427 -	do {
  35.428 -		unsigned long long start = biosmap->addr;
  35.429 -		unsigned long long size = biosmap->size;
  35.430 -		unsigned long long end = start + size;
  35.431 -		unsigned long type = biosmap->type;
  35.432 -
  35.433 -		/* Overflow in 64 bits? Ignore the memory map. */
  35.434 -		if (start > end)
  35.435 -			return -1;
  35.436 -
  35.437 -		/*
  35.438 -		 * Some BIOSes claim RAM in the 640k - 1M region.
  35.439 -		 * Not right. Fix it up.
  35.440 -		 */
  35.441 -		if (type == E820_RAM) {
  35.442 -			if (start < 0x100000ULL && end > 0xA0000ULL) {
  35.443 -				if (start < 0xA0000ULL)
  35.444 -					add_memory_region(start, 0xA0000ULL-start, type);
  35.445 -				if (end <= 0x100000ULL)
  35.446 -					continue;
  35.447 -				start = 0x100000ULL;
  35.448 -				size = end - start;
  35.449 -			}
  35.450 -		}
  35.451 -		add_memory_region(start, size, type);
  35.452 -	} while (biosmap++,--nr_map);
  35.453 -	return 0;
  35.454 -}
  35.455 -#endif
  35.456 -
  35.457 -#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
  35.458 -unsigned char eddnr;
  35.459 -struct edd_info edd[EDDMAXNR];
  35.460 -unsigned int edd_disk80_sig;
  35.461 -#ifdef CONFIG_EDD_MODULE
  35.462 -EXPORT_SYMBOL(eddnr);
  35.463 -EXPORT_SYMBOL(edd);
  35.464 -EXPORT_SYMBOL(edd_disk80_sig);
  35.465 -#endif
  35.466 -/**
  35.467 - * copy_edd() - Copy the BIOS EDD information
  35.468 - *              from boot_params into a safe place.
  35.469 - *
  35.470 - */
  35.471 -static inline void copy_edd(void)
  35.472 -{
  35.473 -     eddnr = EDD_NR;
  35.474 -     memcpy(edd, EDD_BUF, sizeof(edd));
  35.475 -     edd_disk80_sig = DISK80_SIGNATURE;
  35.476 -}
  35.477 -#else
  35.478 -#define copy_edd() do {} while (0)
  35.479 -#endif
  35.480 -
  35.481 -/*
  35.482 - * Do NOT EVER look at the BIOS memory size location.
  35.483 - * It does not work on many machines.
  35.484 - */
  35.485 -#define LOWMEMSIZE()	(0x9f000)
  35.486 -
  35.487 -static void __init setup_memory_region(void)
  35.488 -{
  35.489 -	char *who = machine_specific_memory_setup();
  35.490 -	printk(KERN_INFO "BIOS-provided physical RAM map:\n");
  35.491 -	print_memory_map(who);
  35.492 -} /* setup_memory_region */
  35.493 -
  35.494 -
  35.495 -static void __init parse_cmdline_early (char ** cmdline_p)
  35.496 -{
  35.497 -	char c = ' ', *to = command_line, *from = saved_command_line;
  35.498 -	int len = 0;
  35.499 -	int userdef = 0;
  35.500 -
  35.501 -        memcpy(saved_command_line, start_info.cmd_line, MAX_CMDLINE);
  35.502 -	/* Save unparsed command line copy for /proc/cmdline */
  35.503 -	saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
  35.504 -
  35.505 -	for (;;) {
  35.506 -		/*
  35.507 -		 * "mem=nopentium" disables the 4MB page tables.
  35.508 -		 * "mem=XXX[kKmM]" defines a memory region from HIGH_MEM
  35.509 -		 * to <mem>, overriding the bios size.
  35.510 -		 * "memmap=XXX[KkmM]@XXX[KkmM]" defines a memory region from
  35.511 -		 * <start> to <start>+<mem>, overriding the bios size.
  35.512 -		 *
  35.513 -		 * HPA tells me bootloaders need to parse mem=, so no new
  35.514 -		 * option should be mem=  [also see Documentation/i386/boot.txt]
  35.515 -		 */
  35.516 -		if (c == ' ' && !memcmp(from, "mem=", 4)) {
  35.517 -			if (to != command_line)
  35.518 -				to--;
  35.519 -			if (!memcmp(from+4, "nopentium", 9)) {
  35.520 -				from += 9+4;
  35.521 -				clear_bit(X86_FEATURE_PSE, boot_cpu_data.x86_capability);
  35.522 -				disable_pse = 1;
  35.523 -			} else {
  35.524 -				/* If the user specifies memory size, we
  35.525 -				 * limit the BIOS-provided memory map to
  35.526 -				 * that size. exactmap can be used to specify
  35.527 -				 * the exact map. mem=number can be used to
  35.528 -				 * trim the existing memory map.
  35.529 -				 */
  35.530 -				unsigned long long mem_size;
  35.531 - 
  35.532 -				mem_size = memparse(from+4, &from);
  35.533 -				limit_regions(mem_size);
  35.534 -				userdef=1;
  35.535 -			}
  35.536 -		}
  35.537 -
  35.538 -		if (c == ' ' && !memcmp(from, "memmap=", 7)) {
  35.539 -			if (to != command_line)
  35.540 -				to--;
  35.541 -			if (!memcmp(from+7, "exactmap", 8)) {
  35.542 -				from += 8+7;
  35.543 -				e820.nr_map = 0;
  35.544 -				userdef = 1;
  35.545 -			} else {
  35.546 -				/* If the user specifies memory size, we
  35.547 -				 * limit the BIOS-provided memory map to
  35.548 -				 * that size. exactmap can be used to specify
  35.549 -				 * the exact map. mem=number can be used to
  35.550 -				 * trim the existing memory map.
  35.551 -				 */
  35.552 -				unsigned long long start_at, mem_size;
  35.553 - 
  35.554 -				mem_size = memparse(from+7, &from);
  35.555 -				if (*from == '@') {
  35.556 -					start_at = memparse(from+1, &from);
  35.557 -					add_memory_region(start_at, mem_size, E820_RAM);
  35.558 -				} else if (*from == '#') {
  35.559 -					start_at = memparse(from+1, &from);
  35.560 -					add_memory_region(start_at, mem_size, E820_ACPI);
  35.561 -				} else if (*from == '$') {
  35.562 -					start_at = memparse(from+1, &from);
  35.563 -					add_memory_region(start_at, mem_size, E820_RESERVED);
  35.564 -				} else {
  35.565 -					limit_regions(mem_size);
  35.566 -					userdef=1;
  35.567 -				}
  35.568 -			}
  35.569 -		}
  35.570 -
  35.571 -#ifdef  CONFIG_X86_SMP
  35.572 -		/*
  35.573 -		 * If the BIOS enumerates physical processors before logical,
  35.574 -		 * maxcpus=N at enumeration-time can be used to disable HT.
  35.575 -		 */
  35.576 -		else if (!memcmp(from, "maxcpus=", 8)) {
  35.577 -			extern unsigned int maxcpus;
  35.578 -
  35.579 -			maxcpus = simple_strtoul(from + 8, NULL, 0);
  35.580 -		}
  35.581 -#endif
  35.582 -
  35.583 -#ifdef CONFIG_ACPI_BOOT
  35.584 -		/* "acpi=off" disables both ACPI table parsing and interpreter */
  35.585 -		else if (!memcmp(from, "acpi=off", 8)) {
  35.586 -			disable_acpi();
  35.587 -		}
  35.588 -
  35.589 -		/* acpi=force to over-ride black-list */
  35.590 -		else if (!memcmp(from, "acpi=force", 10)) {
  35.591 -			acpi_force = 1;
  35.592 -			acpi_ht = 1;
  35.593 -			acpi_disabled = 0;
  35.594 -		}
  35.595 -
  35.596 -		/* acpi=strict disables out-of-spec workarounds */
  35.597 -		else if (!memcmp(from, "acpi=strict", 11)) {
  35.598 -			acpi_strict = 1;
  35.599 -		}
  35.600 -
  35.601 -		/* Limit ACPI just to boot-time to enable HT */
  35.602 -		else if (!memcmp(from, "acpi=ht", 7)) {
  35.603 -			if (!acpi_force)
  35.604 -				disable_acpi();
  35.605 -			acpi_ht = 1;
  35.606 -		}
  35.607 -		
  35.608 -		/* "pci=noacpi" disable ACPI IRQ routing and PCI scan */
  35.609 -		else if (!memcmp(from, "pci=noacpi", 10)) {
  35.610 -			acpi_disable_pci();
  35.611 -		}
  35.612 -		/* "acpi=noirq" disables ACPI interrupt routing */
  35.613 -		else if (!memcmp(from, "acpi=noirq", 10)) {
  35.614 -			acpi_noirq_set();
  35.615 -		}
  35.616 -
  35.617 -		else if (!memcmp(from, "acpi_sci=edge", 13))
  35.618 -			acpi_sci_flags.trigger =  1;
  35.619 -
  35.620 -		else if (!memcmp(from, "acpi_sci=level", 14))
  35.621 -			acpi_sci_flags.trigger = 3;
  35.622 -
  35.623 -		else if (!memcmp(from, "acpi_sci=high", 13))
  35.624 -			acpi_sci_flags.polarity = 1;
  35.625 -
  35.626 -		else if (!memcmp(from, "acpi_sci=low", 12))
  35.627 -			acpi_sci_flags.polarity = 3;
  35.628 -
  35.629 -#ifdef CONFIG_X86_IO_APIC
  35.630 -		else if (!memcmp(from, "acpi_skip_timer_override", 24))
  35.631 -			acpi_skip_timer_override = 1;
  35.632 -#endif
  35.633 -
  35.634 -#ifdef CONFIG_X86_LOCAL_APIC
  35.635 -		/* disable IO-APIC */
  35.636 -		else if (!memcmp(from, "noapic", 6))
  35.637 -			disable_ioapic_setup();
  35.638 -#endif /* CONFIG_X86_LOCAL_APIC */
  35.639 -#endif /* CONFIG_ACPI_BOOT */
  35.640 -
  35.641 -		/*
  35.642 -		 * highmem=size forces highmem to be exactly 'size' bytes.
  35.643 -		 * This works even on boxes that have no highmem otherwise.
  35.644 -		 * This also works to reduce highmem size on bigger boxes.
  35.645 -		 */
  35.646 -		if (c == ' ' && !memcmp(from, "highmem=", 8))
  35.647 -			highmem_pages = memparse(from+8, &from) >> PAGE_SHIFT;
  35.648 -	
  35.649 -		c = *(from++);
  35.650 -		if (!c)
  35.651 -			break;
  35.652 -		if (COMMAND_LINE_SIZE <= ++len)
  35.653 -			break;
  35.654 -		*(to++) = c;
  35.655 -	}
  35.656 -	*to = '\0';
  35.657 -	*cmdline_p = command_line;
  35.658 -	if (userdef) {
  35.659 -		printk(KERN_INFO "user-defined physical RAM map:\n");
  35.660 -		print_memory_map("user");
  35.661 -	}
  35.662 -}
  35.663 -
  35.664 -/*
  35.665 - * Callback for efi_memory_walk.
  35.666 - */
  35.667 -static int __init
  35.668 -efi_find_max_pfn(unsigned long start, unsigned long end, void *arg)
  35.669 -{
  35.670 -	unsigned long *max_pfn = arg, pfn;
  35.671 -
  35.672 -	if (start < end) {
  35.673 -		pfn = PFN_UP(end -1);
  35.674 -		if (pfn > *max_pfn)
  35.675 -			*max_pfn = pfn;
  35.676 -	}
  35.677 -	return 0;
  35.678 -}
  35.679 -
  35.680 -
  35.681 -/*
  35.682 - * Find the highest page frame number we have available
  35.683 - */
  35.684 -void __init find_max_pfn(void)
  35.685 -{
  35.686 -	int i;
  35.687 -
  35.688 -	max_pfn = 0;
  35.689 -	if (efi_enabled) {
  35.690 -		efi_memmap_walk(efi_find_max_pfn, &max_pfn);
  35.691 -		return;
  35.692 -	}
  35.693 -
  35.694 -	for (i = 0; i < e820.nr_map; i++) {
  35.695 -		unsigned long start, end;
  35.696 -		/* RAM? */
  35.697 -		if (e820.map[i].type != E820_RAM)
  35.698 -			continue;
  35.699 -		start = PFN_UP(e820.map[i].addr);
  35.700 -		end = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
  35.701 -		if (start >= end)
  35.702 -			continue;
  35.703 -		if (end > max_pfn)
  35.704 -			max_pfn = end;
  35.705 -	}
  35.706 -}
  35.707 -
  35.708 -/*
  35.709 - * Determine low and high memory ranges:
  35.710 - */
  35.711 -unsigned long __init find_max_low_pfn(void)
  35.712 -{
  35.713 -	unsigned long max_low_pfn;
  35.714 -
  35.715 -	max_low_pfn = max_pfn;
  35.716 -	if (max_low_pfn > MAXMEM_PFN) {
  35.717 -		if (highmem_pages == -1)
  35.718 -			highmem_pages = max_pfn - MAXMEM_PFN;
  35.719 -		if (highmem_pages + MAXMEM_PFN < max_pfn)
  35.720 -			max_pfn = MAXMEM_PFN + highmem_pages;
  35.721 -		if (highmem_pages + MAXMEM_PFN > max_pfn) {
  35.722 -			printk("only %luMB highmem pages available, ignoring highmem size of %uMB.\n", pages_to_mb(max_pfn - MAXMEM_PFN), pages_to_mb(highmem_pages));
  35.723 -			highmem_pages = 0;
  35.724 -		}
  35.725 -		max_low_pfn = MAXMEM_PFN;
  35.726 -#ifndef CONFIG_HIGHMEM
  35.727 -		/* Maximum memory usable is what is directly addressable */
  35.728 -		printk(KERN_WARNING "Warning only %ldMB will be used.\n",
  35.729 -					MAXMEM>>20);
  35.730 -		if (max_pfn > MAX_NONPAE_PFN)
  35.731 -			printk(KERN_WARNING "Use a PAE enabled kernel.\n");
  35.732 -		else
  35.733 -			printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n");
  35.734 -		max_pfn = MAXMEM_PFN;
  35.735 -#else /* !CONFIG_HIGHMEM */
  35.736 -#ifndef CONFIG_X86_PAE
  35.737 -		if (max_pfn > MAX_NONPAE_PFN) {
  35.738 -			max_pfn = MAX_NONPAE_PFN;
  35.739 -			printk(KERN_WARNING "Warning only 4GB will be used.\n");
  35.740 -			printk(KERN_WARNING "Use a PAE enabled kernel.\n");
  35.741 -		}
  35.742 -#endif /* !CONFIG_X86_PAE */
  35.743 -#endif /* !CONFIG_HIGHMEM */
  35.744 -	} else {
  35.745 -		if (highmem_pages == -1)
  35.746 -			highmem_pages = 0;
  35.747 -#ifdef CONFIG_HIGHMEM
  35.748 -		if (highmem_pages >= max_pfn) {
  35.749 -			printk(KERN_ERR "highmem size specified (%uMB) is bigger than pages available (%luMB)!.\n", pages_to_mb(highmem_pages), pages_to_mb(max_pfn));
  35.750 -			highmem_pages = 0;
  35.751 -		}
  35.752 -		if (highmem_pages) {
  35.753 -			if (max_low_pfn-highmem_pages < 64*1024*1024/PAGE_SIZE){
  35.754 -				printk(KERN_ERR "highmem size %uMB results in smaller than 64MB lowmem, ignoring it.\n", pages_to_mb(highmem_pages));
  35.755 -				highmem_pages = 0;
  35.756 -			}
  35.757 -			max_low_pfn -= highmem_pages;
  35.758 -		}
  35.759 -#else
  35.760 -		if (highmem_pages)
  35.761 -			printk(KERN_ERR "ignoring highmem size on non-highmem kernel!\n");
  35.762 -#endif
  35.763 -	}
  35.764 -	return max_low_pfn;
  35.765 -}
  35.766 -
  35.767 -#ifndef CONFIG_DISCONTIGMEM
  35.768 -
  35.769 -/*
  35.770 - * Free all available memory for boot time allocation.  Used
  35.771 - * as a callback function by efi_memory_walk()
  35.772 - */
  35.773 -
  35.774 -static int __init
  35.775 -free_available_memory(unsigned long start, unsigned long end, void *arg)
  35.776 -{
  35.777 -	/* check max_low_pfn */
  35.778 -	if (start >= ((max_low_pfn + 1) << PAGE_SHIFT))
  35.779 -		return 0;
  35.780 -	if (end >= ((max_low_pfn + 1) << PAGE_SHIFT))
  35.781 -		end = (max_low_pfn + 1) << PAGE_SHIFT;
  35.782 -	if (start < end)
  35.783 -		free_bootmem(start, end - start);
  35.784 -
  35.785 -	return 0;
  35.786 -}
  35.787 -/*
  35.788 - * Register fully available low RAM pages with the bootmem allocator.
  35.789 - */
  35.790 -static void __init register_bootmem_low_pages(unsigned long max_low_pfn)
  35.791 -{
  35.792 -	int i;
  35.793 -
  35.794 -	if (efi_enabled) {
  35.795 -		efi_memmap_walk(free_available_memory, NULL);
  35.796 -		return;
  35.797 -	}
  35.798 -	for (i = 0; i < e820.nr_map; i++) {
  35.799 -		unsigned long curr_pfn, last_pfn, size;
  35.800 -		/*
  35.801 -		 * Reserve usable low memory
  35.802 -		 */
  35.803 -		if (e820.map[i].type != E820_RAM)
  35.804 -			continue;
  35.805 -		/*
  35.806 -		 * We are rounding up the start address of usable memory:
  35.807 -		 */
  35.808 -		curr_pfn = PFN_UP(e820.map[i].addr);
  35.809 -		if (curr_pfn >= max_low_pfn)
  35.810 -			continue;
  35.811 -		/*
  35.812 -		 * ... and at the end of the usable range downwards:
  35.813 -		 */
  35.814 -		last_pfn = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
  35.815 -
  35.816 -		if (last_pfn > max_low_pfn)
  35.817 -			last_pfn = max_low_pfn;
  35.818 -
  35.819 -		/*
  35.820 -		 * .. finally, did all the rounding and playing
  35.821 -		 * around just make the area go away?
  35.822 -		 */
  35.823 -		if (last_pfn <= curr_pfn)
  35.824 -			continue;
  35.825 -
  35.826 -		size = last_pfn - curr_pfn;
  35.827 -		free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size));
  35.828 -	}
  35.829 -}
  35.830 -
  35.831 -static unsigned long __init setup_memory(void)
  35.832 -{
  35.833 -	unsigned long bootmap_size, start_pfn, max_low_pfn;
  35.834 -
  35.835 -	/*
  35.836 -	 * partially used pages are not usable - thus
  35.837 -	 * we are rounding upwards:
  35.838 -	 */
  35.839 -	start_pfn = PFN_UP(__pa(start_info.pt_base)) + start_info.nr_pt_frames;
  35.840 -
  35.841 -	find_max_pfn();
  35.842 -
  35.843 -	max_low_pfn = find_max_low_pfn();
  35.844 -
  35.845 -#ifdef CONFIG_HIGHMEM
  35.846 -	highstart_pfn = highend_pfn = max_pfn;
  35.847 -	if (max_pfn > max_low_pfn) {
  35.848 -		highstart_pfn = max_low_pfn;
  35.849 -	}
  35.850 -	printk(KERN_NOTICE "%ldMB HIGHMEM available.\n",
  35.851 -		pages_to_mb(highend_pfn - highstart_pfn));
  35.852 -#endif
  35.853 -	printk(KERN_NOTICE "%ldMB LOWMEM available.\n",
  35.854 -			pages_to_mb(max_low_pfn));
  35.855 -	/*
  35.856 -	 * Initialize the boot-time allocator (with low memory only):
  35.857 -	 */
  35.858 -	bootmap_size = init_bootmem(start_pfn, max_low_pfn);
  35.859 -
  35.860 -	register_bootmem_low_pages(max_low_pfn);
  35.861 -
  35.862 -	/*
  35.863 -	 * Reserve the bootmem bitmap itself as well. We do this in two
  35.864 -	 * steps (first step was init_bootmem()) because this catches
  35.865 -	 * the (very unlikely) case of us accidentally initializing the
  35.866 -	 * bootmem allocator with an invalid RAM area.
  35.867 -	 */
  35.868 -	reserve_bootmem(HIGH_MEMORY, (PFN_PHYS(start_pfn) +
  35.869 -			 bootmap_size + PAGE_SIZE-1) - (HIGH_MEMORY));
  35.870 -
  35.871 -    /* could be an AMD 768MPX chipset. Reserve a page  before VGA to prevent
  35.872 -       PCI prefetch into it (errata #56). Usually the page is reserved anyways,
  35.873 -       unless you have no PS/2 mouse plugged in. */
  35.874 -	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
  35.875 -	    boot_cpu_data.x86 == 6)
  35.876 -	     reserve_bootmem(0xa0000 - 4096, 4096);
  35.877 -
  35.878 -#ifdef CONFIG_SMP
  35.879 -	/*
  35.880 -	 * But first pinch a few for the stack/trampoline stuff
  35.881 -	 * FIXME: Don't need the extra page at 4K, but need to fix
  35.882 -	 * trampoline before removing it. (see the GDT stuff)
  35.883 -	 */
  35.884 -	reserve_bootmem(PAGE_SIZE, PAGE_SIZE);
  35.885 -#endif
  35.886 -#ifdef CONFIG_ACPI_SLEEP
  35.887 -	/*
  35.888 -	 * Reserve low memory region for sleep support.
  35.889 -	 */
  35.890 -	acpi_reserve_bootmem();
  35.891 -#endif
  35.892 -#ifdef CONFIG_X86_FIND_SMP_CONFIG
  35.893 -	/*
  35.894 -	 * Find and reserve possible boot-time SMP configuration:
  35.895 -	 */
  35.896 -	find_smp_config();
  35.897 -#endif
  35.898 -
  35.899 -#ifdef CONFIG_BLK_DEV_INITRD
  35.900 -	if (start_info.mod_start) {
  35.901 -		if (INITRD_START + INITRD_SIZE <= (max_low_pfn << PAGE_SHIFT)) {
  35.902 -			/*reserve_bootmem(INITRD_START, INITRD_SIZE);*/
  35.903 -			initrd_start = INITRD_START + PAGE_OFFSET;
  35.904 -			initrd_end = initrd_start+INITRD_SIZE;
  35.905 -			initrd_below_start_ok = 1;
  35.906 -		}
  35.907 -		else {
  35.908 -			printk(KERN_ERR "initrd extends beyond end of memory "
  35.909 -			    "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
  35.910 -			    INITRD_START + INITRD_SIZE,
  35.911 -			    max_low_pfn << PAGE_SHIFT);
  35.912 -			initrd_start = 0;
  35.913 -		}
  35.914 -	}
  35.915 -#endif
  35.916 -
  35.917 -	phys_to_machine_mapping = (unsigned long *)start_info.mfn_list;
  35.918 -
  35.919 -	return max_low_pfn;
  35.920 -}
  35.921 -#else
  35.922 -extern unsigned long setup_memory(void);
  35.923 -#endif /* !CONFIG_DISCONTIGMEM */
  35.924 -
  35.925 -/*
  35.926 - * Request address space for all standard RAM and ROM resources
  35.927 - * and also for regions reported as reserved by the e820.
  35.928 - */
  35.929 -static void __init
  35.930 -legacy_init_iomem_resources(struct resource *code_resource, struct resource *data_resource)
  35.931 -{
  35.932 -	int i;
  35.933 -
  35.934 -#ifdef CONFIG_XEN_PRIVILEGED_GUEST
  35.935 -	probe_roms();
  35.936 -#endif
  35.937 -	for (i = 0; i < e820.nr_map; i++) {
  35.938 -		struct resource *res;
  35.939 -		if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL)
  35.940 -			continue;
  35.941 -		res = alloc_bootmem_low(sizeof(struct resource));
  35.942 -		switch (e820.map[i].type) {
  35.943 -		case E820_RAM:	res->name = "System RAM"; break;
  35.944 -		case E820_ACPI:	res->name = "ACPI Tables"; break;
  35.945 -		case E820_NVS:	res->name = "ACPI Non-volatile Storage"; break;
  35.946 -		default:	res->name = "reserved";
  35.947 -		}
  35.948 -		res->start = e820.map[i].addr;
  35.949 -		res->end = res->start + e820.map[i].size - 1;
  35.950 -		res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
  35.951 -		request_resource(&iomem_resource, res);
  35.952 -		if (e820.map[i].type == E820_RAM) {
  35.953 -			/*
  35.954 -			 *  We don't know which RAM region contains kernel data,
  35.955 -			 *  so we try it repeatedly and let the resource manager
  35.956 -			 *  test it.
  35.957 -			 */
  35.958 -			request_resource(res, code_resource);
  35.959 -			request_resource(res, data_resource);
  35.960 -		}
  35.961 -	}
  35.962 -}
  35.963 -
  35.964 -/*
  35.965 - * Request address space for all standard resources
  35.966 - */
  35.967 -static void __init register_memory(unsigned long max_low_pfn)
  35.968 -{
  35.969 -	unsigned long low_mem_size;
  35.970 -