ia64/xen-unstable

changeset 2730:145b7783c604

bitkeeper revision 1.1159.1.272 (417d33eaZEb_tnkLdhSsCNFpEXrEiw)

Update to Linux 2.6.9.
author cl349@freefall.cl.cam.ac.uk
date Mon Oct 25 17:12:10 2004 +0000 (2004-10-25)
parents 62cd5cf03a25
children 337efea3503e
files .rootkeys linux-2.6.8.1-patches/agpgart.patch linux-2.6.8.1-patches/drm.patch 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/pageattr.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/skbuff.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/balloon/Makefile linux-2.6.8.1-xen-sparse/drivers/xen/balloon/balloon.c 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/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 linux-2.6.8.1-xen-sparse/net/core/skbuff.c linux-2.6.8.1-xen-sparse/net/ipv4/raw.c linux-2.6.9-patches/agpgart.patch linux-2.6.9-patches/drm.patch linux-2.6.9-xen-sparse/arch/xen/Kconfig linux-2.6.9-xen-sparse/arch/xen/Kconfig.drivers linux-2.6.9-xen-sparse/arch/xen/Makefile linux-2.6.9-xen-sparse/arch/xen/boot/Makefile linux-2.6.9-xen-sparse/arch/xen/configs/xen0_defconfig linux-2.6.9-xen-sparse/arch/xen/configs/xenU_defconfig linux-2.6.9-xen-sparse/arch/xen/i386/Kconfig linux-2.6.9-xen-sparse/arch/xen/i386/Makefile linux-2.6.9-xen-sparse/arch/xen/i386/kernel/Makefile linux-2.6.9-xen-sparse/arch/xen/i386/kernel/cpu/Makefile linux-2.6.9-xen-sparse/arch/xen/i386/kernel/cpu/common.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/entry.S linux-2.6.9-xen-sparse/arch/xen/i386/kernel/head.S linux-2.6.9-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/ioport.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/irq.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/ldt.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/pci-dma.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/process.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/setup.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/signal.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/sysenter.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/time.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/timers/Makefile linux-2.6.9-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/traps.c linux-2.6.9-xen-sparse/arch/xen/i386/kernel/vmlinux.lds.S linux-2.6.9-xen-sparse/arch/xen/i386/kernel/vsyscall.S linux-2.6.9-xen-sparse/arch/xen/i386/kernel/vsyscall.lds linux-2.6.9-xen-sparse/arch/xen/i386/mm/Makefile linux-2.6.9-xen-sparse/arch/xen/i386/mm/fault.c linux-2.6.9-xen-sparse/arch/xen/i386/mm/highmem.c linux-2.6.9-xen-sparse/arch/xen/i386/mm/hypervisor.c linux-2.6.9-xen-sparse/arch/xen/i386/mm/init.c linux-2.6.9-xen-sparse/arch/xen/i386/mm/ioremap.c linux-2.6.9-xen-sparse/arch/xen/i386/mm/pageattr.c linux-2.6.9-xen-sparse/arch/xen/i386/mm/pgtable.c linux-2.6.9-xen-sparse/arch/xen/i386/pci/Makefile linux-2.6.9-xen-sparse/arch/xen/i386/pci/direct.c linux-2.6.9-xen-sparse/arch/xen/i386/pci/irq.c linux-2.6.9-xen-sparse/arch/xen/kernel/Makefile linux-2.6.9-xen-sparse/arch/xen/kernel/ctrl_if.c linux-2.6.9-xen-sparse/arch/xen/kernel/empty.c linux-2.6.9-xen-sparse/arch/xen/kernel/evtchn.c linux-2.6.9-xen-sparse/arch/xen/kernel/fixup.c linux-2.6.9-xen-sparse/arch/xen/kernel/gnttab.c linux-2.6.9-xen-sparse/arch/xen/kernel/process.c linux-2.6.9-xen-sparse/arch/xen/kernel/reboot.c linux-2.6.9-xen-sparse/arch/xen/kernel/skbuff.c linux-2.6.9-xen-sparse/arch/xen/kernel/xen_proc.c linux-2.6.9-xen-sparse/drivers/Makefile linux-2.6.9-xen-sparse/drivers/char/mem.c linux-2.6.9-xen-sparse/drivers/char/tty_io.c linux-2.6.9-xen-sparse/drivers/xen/Makefile linux-2.6.9-xen-sparse/drivers/xen/balloon/Makefile linux-2.6.9-xen-sparse/drivers/xen/balloon/balloon.c linux-2.6.9-xen-sparse/drivers/xen/blkback/Makefile linux-2.6.9-xen-sparse/drivers/xen/blkback/blkback.c linux-2.6.9-xen-sparse/drivers/xen/blkback/common.h linux-2.6.9-xen-sparse/drivers/xen/blkback/control.c linux-2.6.9-xen-sparse/drivers/xen/blkback/interface.c linux-2.6.9-xen-sparse/drivers/xen/blkback/vbd.c linux-2.6.9-xen-sparse/drivers/xen/blkfront/Kconfig linux-2.6.9-xen-sparse/drivers/xen/blkfront/Makefile linux-2.6.9-xen-sparse/drivers/xen/blkfront/blkfront.c linux-2.6.9-xen-sparse/drivers/xen/blkfront/block.h linux-2.6.9-xen-sparse/drivers/xen/blkfront/vbd.c linux-2.6.9-xen-sparse/drivers/xen/console/Makefile linux-2.6.9-xen-sparse/drivers/xen/console/console.c linux-2.6.9-xen-sparse/drivers/xen/evtchn/Makefile linux-2.6.9-xen-sparse/drivers/xen/evtchn/evtchn.c linux-2.6.9-xen-sparse/drivers/xen/netback/Makefile linux-2.6.9-xen-sparse/drivers/xen/netback/common.h linux-2.6.9-xen-sparse/drivers/xen/netback/control.c linux-2.6.9-xen-sparse/drivers/xen/netback/interface.c linux-2.6.9-xen-sparse/drivers/xen/netback/netback.c linux-2.6.9-xen-sparse/drivers/xen/netfront/Kconfig linux-2.6.9-xen-sparse/drivers/xen/netfront/Makefile linux-2.6.9-xen-sparse/drivers/xen/netfront/netfront.c linux-2.6.9-xen-sparse/drivers/xen/privcmd/Makefile linux-2.6.9-xen-sparse/drivers/xen/privcmd/privcmd.c linux-2.6.9-xen-sparse/include/asm-generic/pgtable.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/desc.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/fixmap.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/highmem.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/io.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/do_timer.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/io_ports.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_mpspec.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_reboot.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_time.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_timer.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_traps.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/pci-functions.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mmu_context.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/msr.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/page.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/param.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pci.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgalloc.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable-2level-defs.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/processor.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/ptrace.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/segment.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/setup.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/system.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/timer.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/tlbflush.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/vga.h linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/xor.h linux-2.6.9-xen-sparse/include/asm-xen/ctrl_if.h linux-2.6.9-xen-sparse/include/asm-xen/evtchn.h linux-2.6.9-xen-sparse/include/asm-xen/gnttab.h linux-2.6.9-xen-sparse/include/asm-xen/hypervisor.h linux-2.6.9-xen-sparse/include/asm-xen/multicall.h linux-2.6.9-xen-sparse/include/asm-xen/proc_cmd.h linux-2.6.9-xen-sparse/include/asm-xen/queues.h linux-2.6.9-xen-sparse/include/asm-xen/suspend.h linux-2.6.9-xen-sparse/include/asm-xen/xen_proc.h linux-2.6.9-xen-sparse/include/linux/bio.h linux-2.6.9-xen-sparse/include/linux/page-flags.h linux-2.6.9-xen-sparse/include/linux/skbuff.h linux-2.6.9-xen-sparse/mkbuildtree linux-2.6.9-xen-sparse/mm/memory.c linux-2.6.9-xen-sparse/mm/page_alloc.c linux-2.6.9-xen-sparse/net/core/skbuff.c linux-2.6.9-xen-sparse/net/ipv4/raw.c
line diff
     1.1 --- a/.rootkeys	Mon Oct 25 12:45:34 2004 +0000
     1.2 +++ b/.rootkeys	Mon Oct 25 17:12:10 2004 +0000
     1.3 @@ -124,143 +124,142 @@ 409ba2e7akOFqQUg6Qyg2s28xcXiMg linux-2.4
     1.4  3e5a4e683HKVU-sxtagrDasRB8eBVw linux-2.4.27-xen-sparse/mm/swapfile.c
     1.5  41180721bNns9Na7w1nJ0ZVt8bhUNA linux-2.4.27-xen-sparse/mm/vmalloc.c
     1.6  41505c57WAd5l1rlfCLNSCpx9J13vA linux-2.4.27-xen-sparse/net/core/skbuff.c
     1.7 -413aa1d0oNP8HXLvfPuMe6cSroUfSA linux-2.6.8.1-patches/agpgart.patch
     1.8 -413aa1d0ewvSv-ohnNnQQNGsbPTTNA linux-2.6.8.1-patches/drm.patch
     1.9 -40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.8.1-xen-sparse/arch/xen/Kconfig
    1.10 -40f56237utH41NPukqHksuNf29IC9A linux-2.6.8.1-xen-sparse/arch/xen/Kconfig.drivers
    1.11 -40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.8.1-xen-sparse/arch/xen/Makefile
    1.12 -40f56237JTc60m1FRlUxkUaGSQKrNw linux-2.6.8.1-xen-sparse/arch/xen/boot/Makefile
    1.13 -40f56237hRxbacU_3PdoAl6DjZ3Jnw linux-2.6.8.1-xen-sparse/arch/xen/configs/xen0_defconfig
    1.14 -40f56237wubfjJKlfIzZlI3ZM2VgGA linux-2.6.8.1-xen-sparse/arch/xen/configs/xenU_defconfig
    1.15 -40f56237Mta0yHNaMS_qtM2rge0qYA linux-2.6.8.1-xen-sparse/arch/xen/i386/Kconfig
    1.16 -40f56238u2CJdXNpjsZgHBxeVyY-2g linux-2.6.8.1-xen-sparse/arch/xen/i386/Makefile
    1.17 -40f56238eczveJ86k_4hNxCLRQIF-g linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/Makefile
    1.18 -40f56238rXVTJQKbBuXXLH52qEArcg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/cpu/Makefile
    1.19 -40f562385s4lr6Zg92gExe7UQ4A76Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/cpu/common.c
    1.20 -40f56238XDtHSijkAFlbv1PT8Bhw_Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/entry.S
    1.21 -40f56238bnvciAuyzAiMkdzGErYt1A linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/head.S
    1.22 -40f58a0d31M2EkuPbG94ns_nOi0PVA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c
    1.23 -40faa751_zbZlAmLyQgCXdYekVFdWA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/ioport.c
    1.24 -40f562382aC3_Gt4RG-4ZsfvDRUg3Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/irq.c
    1.25 -40f56238ue3YRsK52HG7iccNzP1AwQ linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/ldt.c
    1.26 -4107adf1cNtsuOxOB4T6paAoY2R2PA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/pci-dma.c
    1.27 -40f56238a8iOVDEoostsbun_sy2i4g linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/process.c
    1.28 -40f56238YQIJoYG2ehDGEcdTgLmGbg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/setup.c
    1.29 -40f56238nWMQg7CKbyTy0KJNvCzbtg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/signal.c
    1.30 -40f56238UL9uv78ODDzMwLL9yryeFw linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/sysenter.c
    1.31 -40f56238qVGkpO_ycnQA8k03kQzAgA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c
    1.32 -40f56238NzTgeO63RGoxHrW5NQeO3Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/timers/Makefile
    1.33 -40f56238BMqG5PuSHufpjbvp_helBw linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c
    1.34 -40f562389xNa78YBZciUibQjyRU_Lg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/traps.c
    1.35 -40f56238qASEI_IOhCKWNuwFKNZrKQ linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vmlinux.lds.S
    1.36 -40f56238JypKAUG01ZojFwH7qnZ5uA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vsyscall.S
    1.37 -40f56238wi6AdNQjm0RT57bSkwb6hg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vsyscall.lds
    1.38 -40f56238a3w6-byOzexIlMgni76Lcg linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/Makefile
    1.39 -40f56238ILx8xlbywNbzTdv5Zr4xXQ linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/fault.c
    1.40 -4118cc35CbY8rfGVspF5O-7EkXBEAA linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/highmem.c
    1.41 -40f562383SKvDStdtrvzr5fyCbW4rw linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/hypervisor.c
    1.42 -40f56239xcNylAxuGsQHwi1AyMLV8w linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/init.c
    1.43 -41062ab7CjxC1UBaFhOMWWdhHkIUyg linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/ioremap.c
    1.44 -413b5ab8LIowAnQrEmaOJSdmqm96jQ linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/pageattr.c
    1.45 -40f5623906UYHv1rsVUeRc0tFT0dWw linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/pgtable.c
    1.46 -4107adf12ndy94MidCaivDibJ3pPAg linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/Makefile
    1.47 -4107adf1WcCgkhsdLTRGX52cOG1vJg linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/direct.c
    1.48 -4107adf1s5u6249DNPUViX1YNagbUQ linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/irq.c
    1.49 -40f56239zOksGg_H4XD4ye6iZNtoZA linux-2.6.8.1-xen-sparse/arch/xen/kernel/Makefile
    1.50 -40f56239bvOjuuuViZ0XMlNiREFC0A linux-2.6.8.1-xen-sparse/arch/xen/kernel/ctrl_if.c
    1.51 -40f56239pYRq5yshPTkv3ujXKc8K6g linux-2.6.8.1-xen-sparse/arch/xen/kernel/empty.c
    1.52 -40f56238xFQe9T7M_U_FItM-bZIpLw linux-2.6.8.1-xen-sparse/arch/xen/kernel/evtchn.c
    1.53 -4110f478aeQWllIN7J4kouAHiAqrPw linux-2.6.8.1-xen-sparse/arch/xen/kernel/fixup.c
    1.54 -412dfae9eA3_6e6bCGUtg1mj8b56fQ linux-2.6.8.1-xen-sparse/arch/xen/kernel/gnttab.c
    1.55 -40f56239sFcjHiIRmnObRIDF-zaeKQ linux-2.6.8.1-xen-sparse/arch/xen/kernel/process.c
    1.56 -40f562392LBhwmOxVPsYdkYXMxI_ZQ linux-2.6.8.1-xen-sparse/arch/xen/kernel/reboot.c
    1.57 -414c113396tK1HTVeUalm3u-1DF16g linux-2.6.8.1-xen-sparse/arch/xen/kernel/skbuff.c
    1.58 -3f68905c5eiA-lBMQSvXLMWS1ikDEA linux-2.6.8.1-xen-sparse/arch/xen/kernel/xen_proc.c
    1.59 -41261688yS8eAyy-7kzG4KBs0xbYCA linux-2.6.8.1-xen-sparse/drivers/Makefile
    1.60 -4108f5c1WfTIrs0HZFeV39sttekCTw linux-2.6.8.1-xen-sparse/drivers/char/mem.c
    1.61 -4111308bZAIzwf_Kzu6x1TZYZ3E0_Q linux-2.6.8.1-xen-sparse/drivers/char/tty_io.c
    1.62 -40f56239Dp_vMTgz8TEbvo1hjHGc3w linux-2.6.8.1-xen-sparse/drivers/xen/Makefile
    1.63 -41768fbcncpBQf8s2l2-CwoSNIZ9uA linux-2.6.8.1-xen-sparse/drivers/xen/balloon/Makefile
    1.64 -3e6377f8i5e9eGz7Pw6fQuhuTQ7DQg linux-2.6.8.1-xen-sparse/drivers/xen/balloon/balloon.c
    1.65 -410d0893otFGghmv4dUXDUBBdY5aIA linux-2.6.8.1-xen-sparse/drivers/xen/blkback/Makefile
    1.66 -4087cf0d1XgMkooTZAiJS6NrcpLQNQ linux-2.6.8.1-xen-sparse/drivers/xen/blkback/blkback.c
    1.67 -4087cf0dZadZ8r6CEt4fNN350Yle3A linux-2.6.8.1-xen-sparse/drivers/xen/blkback/common.h
    1.68 -4087cf0dxlh29iw0w-9rxOCEGCjPcw linux-2.6.8.1-xen-sparse/drivers/xen/blkback/control.c
    1.69 -4087cf0dbuoH20fMjNZjcgrRK-1msQ linux-2.6.8.1-xen-sparse/drivers/xen/blkback/interface.c
    1.70 -4087cf0dk97tacDzxfByWV7JifUYqA linux-2.6.8.1-xen-sparse/drivers/xen/blkback/vbd.c
    1.71 -40f56239Sfle6wGv5FS0wjS_HI150A linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/Kconfig
    1.72 -40f562395atl9x4suKGhPkjqLOXESg linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/Makefile
    1.73 -40f56239-JNIaTzlviVJohVdoYOUpw linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/blkfront.c
    1.74 -40f56239y9naBTXe40Pi2J_z3p-d1g linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/block.h
    1.75 -40f56239BVfPsXBiWQitXgDRtOsiqg linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/vbd.c
    1.76 -40f56239fsLjvtD8YBRAWphps4FDjg linux-2.6.8.1-xen-sparse/drivers/xen/console/Makefile
    1.77 -3e5a4e651TH-SXHoufurnWjgl5bfOA linux-2.6.8.1-xen-sparse/drivers/xen/console/console.c
    1.78 -40f56239KYxO0YabhPzCTeUuln-lnA linux-2.6.8.1-xen-sparse/drivers/xen/evtchn/Makefile
    1.79 -40f56239DoibTX6R-ZYd3QTXAB8_TA linux-2.6.8.1-xen-sparse/drivers/xen/evtchn/evtchn.c
    1.80 -410a9817HEVJvred5Oy_uKH3HFJC5Q linux-2.6.8.1-xen-sparse/drivers/xen/netback/Makefile
    1.81 -4097ba831lpGeLlPg-bfV8XarVVuoQ linux-2.6.8.1-xen-sparse/drivers/xen/netback/common.h
    1.82 -4097ba83wvv8yi5P5xugCUBAdb6O-A linux-2.6.8.1-xen-sparse/drivers/xen/netback/control.c
    1.83 -4097ba83byY5bTSugJGZ1exTxIcMKw linux-2.6.8.1-xen-sparse/drivers/xen/netback/interface.c
    1.84 -4087cf0dGmSbFhFZyIZBJzvqxY-qBw linux-2.6.8.1-xen-sparse/drivers/xen/netback/netback.c
    1.85 -40f56239lrg_Ob0BJ8WBFS1zeg2CYw linux-2.6.8.1-xen-sparse/drivers/xen/netfront/Kconfig
    1.86 -40f56239Wd4k_ycG_mFsSO1r5xKdtQ linux-2.6.8.1-xen-sparse/drivers/xen/netfront/Makefile
    1.87 -405853f6nbeazrNyEWNHBuoSg2PiPA linux-2.6.8.1-xen-sparse/drivers/xen/netfront/netfront.c
    1.88 -4108f5c1ppFXVpQzCOAZ6xXYubsjKA linux-2.6.8.1-xen-sparse/drivers/xen/privcmd/Makefile
    1.89 -3e5a4e65IUfzzMu2kZFlGEB8-rpTaA linux-2.6.8.1-xen-sparse/drivers/xen/privcmd/privcmd.c
    1.90 -412f47e4RKD-R5IS5gEXvcT8L4v8gA linux-2.6.8.1-xen-sparse/include/asm-generic/pgtable.h
    1.91 -40f56239YAjS52QG2FIAQpHDZAdGHg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/desc.h
    1.92 -4107adf1E5O4ztGHNGMzCCNhcvqNow linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h
    1.93 -40f5623akIoBsQ3KxSB2kufkbgONXQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/fixmap.h
    1.94 -4118b6a418gnL6AZsTdglC92YGqYTg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/highmem.h
    1.95 -40f5623aJVXQwpJMOLE99XgvGsfQ8Q linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/io.h
    1.96 -40f5623am9BzluYFuV6EQfTd-so3dA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/do_timer.h
    1.97 -40f5623adZQ1IZGPxbDXONjyZGYuTA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/io_ports.h
    1.98 -40f5623aKXkBBxgpLx2NcvkncQ1Yyw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h
    1.99 -40f5623aMQZoYuf4ml9v69N3gu8ing linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_mpspec.h
   1.100 -40f5623a8LroVMnZ5YRzJJmIc-zHlw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_reboot.h
   1.101 -40f5623an3wOvFKmpIvqSxQfWzklVQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_resources.h
   1.102 -40f5623ayR1vnzfF__htza35a8Ft-g linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_time.h
   1.103 -40f5623a4YdRdVzYWJzOOoqe8mnrXA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_timer.h
   1.104 -40f5623aDLxmbOtUHvkWztKjAO4EjA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_traps.h
   1.105 -41062ab7HMSSuaUv3_Z4agLpjSO88A linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/pci-functions.h
   1.106 -40f5623aDMCsWOFO0jktZ4e8sjwvEg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h
   1.107 -40f5623arsFXkGdPvIqvFi3yFXGR0Q linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h
   1.108 -4120f807GCO0uqsLqdZj9csxR1Wthw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mmu_context.h
   1.109 -40f5623aFTyFTR-vdiA-KaGxk5JOKQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/msr.h
   1.110 -40f5623adgjZq9nAgCt0IXdWl7udSA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/page.h
   1.111 -40f5623a54NuG-7qHihGYmw4wWQnMA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/param.h
   1.112 -41137cc1kkvg0cg7uxddcEfjL7L67w linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pci.h
   1.113 -40f5623atCokYc2uCysSJ8jFO8TEsw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgalloc.h
   1.114 -412e01beTwiaC8sYY4XJP8PxLST5CA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable-2level-defs.h
   1.115 -40f5623aEToIXouJgO-ao5d5pcEt1w linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h
   1.116 -40f5623aCCXRPlGpNthVXstGz9ZV3A linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable.h
   1.117 -40f5623aPCkQQfPtJSooGdhcatrvnQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/processor.h
   1.118 -412ea0afQL2CAI-f522TbLjLPMibPQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/ptrace.h
   1.119 -40f5623bzLvxr7WoJIxVf2OH4rCBJg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/segment.h
   1.120 -40f5623bG_LzgG6-qwk292nTc5Wabw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/setup.h
   1.121 -40f5623bgzm_9vwxpzJswlAxg298Gg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h
   1.122 -40f5623bVdKP7Dt7qm8twu3NcnGNbA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/system.h
   1.123 -40f5623bSgGrvrGRpD71K-lIYqaGgg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/timer.h
   1.124 -40f5623bc8LKPRO09wY5dGDnY_YCpw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/tlbflush.h
   1.125 -41062ab7uFxnCq-KtPeAm-aV8CicgA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/vga.h
   1.126 -40f5623bxUbeGjkRrjDguCy_Gm8RLw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/xor.h
   1.127 -40f5623bYNP7tHE2zX6YQxp9Zq2utQ linux-2.6.8.1-xen-sparse/include/asm-xen/ctrl_if.h
   1.128 -40f5623b3Eqs8pAc5WpPX8_jTzV2qw linux-2.6.8.1-xen-sparse/include/asm-xen/evtchn.h
   1.129 -412dfaeazclyNDM0cpnp60Yo4xulpQ linux-2.6.8.1-xen-sparse/include/asm-xen/gnttab.h
   1.130 -40f5623aGPlsm0u1LTO-NVZ6AGzNRQ linux-2.6.8.1-xen-sparse/include/asm-xen/hypervisor.h
   1.131 -40f5623cndVUFlkxpf7Lfx7xu8madQ linux-2.6.8.1-xen-sparse/include/asm-xen/multicall.h
   1.132 -3f108af1ylCIm82H052FVTfXACBHrw linux-2.6.8.1-xen-sparse/include/asm-xen/proc_cmd.h
   1.133 -4122466356eIBnC9ot44WSVVIFyhQA linux-2.6.8.1-xen-sparse/include/asm-xen/queues.h
   1.134 -3fa8e3f0kBLeE4To2vpdi3cpJbIkbQ linux-2.6.8.1-xen-sparse/include/asm-xen/suspend.h
   1.135 -3f689063BoW-HWV3auUJ-OqXfcGArw linux-2.6.8.1-xen-sparse/include/asm-xen/xen_proc.h
   1.136 -4124d8c4aocX7A-jIbuGraWN84pxGQ linux-2.6.8.1-xen-sparse/include/linux/bio.h
   1.137 -4124f66fp5QwbDHEfoUIa7pqO5Xhag linux-2.6.8.1-xen-sparse/include/linux/page-flags.h
   1.138 -4124f66f4NaKNa0xPiGGykn9QaZk3w linux-2.6.8.1-xen-sparse/include/linux/skbuff.h
   1.139 -40f56a0ddHCSs3501MY4hRf22tctOw linux-2.6.8.1-xen-sparse/mkbuildtree
   1.140 -412f46c0LJuKAgSPGoC0Z1DEkLfuLA linux-2.6.8.1-xen-sparse/mm/memory.c
   1.141 -410a94a4KT6I6X0LVc7djB39tRDp4g linux-2.6.8.1-xen-sparse/mm/page_alloc.c
   1.142 -41505c572m-s9ATiO1LiD1GPznTTIg linux-2.6.8.1-xen-sparse/net/core/skbuff.c
   1.143 -4149ec79wMpIHdvbntxqVGLRZZjPxw linux-2.6.8.1-xen-sparse/net/ipv4/raw.c
   1.144 +413aa1d0oNP8HXLvfPuMe6cSroUfSA linux-2.6.9-patches/agpgart.patch
   1.145 +413aa1d0ewvSv-ohnNnQQNGsbPTTNA linux-2.6.9-patches/drm.patch
   1.146 +40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.9-xen-sparse/arch/xen/Kconfig
   1.147 +40f56237utH41NPukqHksuNf29IC9A linux-2.6.9-xen-sparse/arch/xen/Kconfig.drivers
   1.148 +40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.9-xen-sparse/arch/xen/Makefile
   1.149 +40f56237JTc60m1FRlUxkUaGSQKrNw linux-2.6.9-xen-sparse/arch/xen/boot/Makefile
   1.150 +40f56237hRxbacU_3PdoAl6DjZ3Jnw linux-2.6.9-xen-sparse/arch/xen/configs/xen0_defconfig
   1.151 +40f56237wubfjJKlfIzZlI3ZM2VgGA linux-2.6.9-xen-sparse/arch/xen/configs/xenU_defconfig
   1.152 +40f56237Mta0yHNaMS_qtM2rge0qYA linux-2.6.9-xen-sparse/arch/xen/i386/Kconfig
   1.153 +40f56238u2CJdXNpjsZgHBxeVyY-2g linux-2.6.9-xen-sparse/arch/xen/i386/Makefile
   1.154 +40f56238eczveJ86k_4hNxCLRQIF-g linux-2.6.9-xen-sparse/arch/xen/i386/kernel/Makefile
   1.155 +40f56238rXVTJQKbBuXXLH52qEArcg linux-2.6.9-xen-sparse/arch/xen/i386/kernel/cpu/Makefile
   1.156 +40f562385s4lr6Zg92gExe7UQ4A76Q linux-2.6.9-xen-sparse/arch/xen/i386/kernel/cpu/common.c
   1.157 +40f56238XDtHSijkAFlbv1PT8Bhw_Q linux-2.6.9-xen-sparse/arch/xen/i386/kernel/entry.S
   1.158 +40f56238bnvciAuyzAiMkdzGErYt1A linux-2.6.9-xen-sparse/arch/xen/i386/kernel/head.S
   1.159 +40f58a0d31M2EkuPbG94ns_nOi0PVA linux-2.6.9-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c
   1.160 +40faa751_zbZlAmLyQgCXdYekVFdWA linux-2.6.9-xen-sparse/arch/xen/i386/kernel/ioport.c
   1.161 +40f562382aC3_Gt4RG-4ZsfvDRUg3Q linux-2.6.9-xen-sparse/arch/xen/i386/kernel/irq.c
   1.162 +40f56238ue3YRsK52HG7iccNzP1AwQ linux-2.6.9-xen-sparse/arch/xen/i386/kernel/ldt.c
   1.163 +4107adf1cNtsuOxOB4T6paAoY2R2PA linux-2.6.9-xen-sparse/arch/xen/i386/kernel/pci-dma.c
   1.164 +40f56238a8iOVDEoostsbun_sy2i4g linux-2.6.9-xen-sparse/arch/xen/i386/kernel/process.c
   1.165 +40f56238YQIJoYG2ehDGEcdTgLmGbg linux-2.6.9-xen-sparse/arch/xen/i386/kernel/setup.c
   1.166 +40f56238nWMQg7CKbyTy0KJNvCzbtg linux-2.6.9-xen-sparse/arch/xen/i386/kernel/signal.c
   1.167 +40f56238UL9uv78ODDzMwLL9yryeFw linux-2.6.9-xen-sparse/arch/xen/i386/kernel/sysenter.c
   1.168 +40f56238qVGkpO_ycnQA8k03kQzAgA linux-2.6.9-xen-sparse/arch/xen/i386/kernel/time.c
   1.169 +40f56238NzTgeO63RGoxHrW5NQeO3Q linux-2.6.9-xen-sparse/arch/xen/i386/kernel/timers/Makefile
   1.170 +40f56238BMqG5PuSHufpjbvp_helBw linux-2.6.9-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c
   1.171 +40f562389xNa78YBZciUibQjyRU_Lg linux-2.6.9-xen-sparse/arch/xen/i386/kernel/traps.c
   1.172 +40f56238qASEI_IOhCKWNuwFKNZrKQ linux-2.6.9-xen-sparse/arch/xen/i386/kernel/vmlinux.lds.S
   1.173 +40f56238JypKAUG01ZojFwH7qnZ5uA linux-2.6.9-xen-sparse/arch/xen/i386/kernel/vsyscall.S
   1.174 +40f56238wi6AdNQjm0RT57bSkwb6hg linux-2.6.9-xen-sparse/arch/xen/i386/kernel/vsyscall.lds
   1.175 +40f56238a3w6-byOzexIlMgni76Lcg linux-2.6.9-xen-sparse/arch/xen/i386/mm/Makefile
   1.176 +40f56238ILx8xlbywNbzTdv5Zr4xXQ linux-2.6.9-xen-sparse/arch/xen/i386/mm/fault.c
   1.177 +4118cc35CbY8rfGVspF5O-7EkXBEAA linux-2.6.9-xen-sparse/arch/xen/i386/mm/highmem.c
   1.178 +40f562383SKvDStdtrvzr5fyCbW4rw linux-2.6.9-xen-sparse/arch/xen/i386/mm/hypervisor.c
   1.179 +40f56239xcNylAxuGsQHwi1AyMLV8w linux-2.6.9-xen-sparse/arch/xen/i386/mm/init.c
   1.180 +41062ab7CjxC1UBaFhOMWWdhHkIUyg linux-2.6.9-xen-sparse/arch/xen/i386/mm/ioremap.c
   1.181 +413b5ab8LIowAnQrEmaOJSdmqm96jQ linux-2.6.9-xen-sparse/arch/xen/i386/mm/pageattr.c
   1.182 +40f5623906UYHv1rsVUeRc0tFT0dWw linux-2.6.9-xen-sparse/arch/xen/i386/mm/pgtable.c
   1.183 +4107adf12ndy94MidCaivDibJ3pPAg linux-2.6.9-xen-sparse/arch/xen/i386/pci/Makefile
   1.184 +4107adf1WcCgkhsdLTRGX52cOG1vJg linux-2.6.9-xen-sparse/arch/xen/i386/pci/direct.c
   1.185 +4107adf1s5u6249DNPUViX1YNagbUQ linux-2.6.9-xen-sparse/arch/xen/i386/pci/irq.c
   1.186 +40f56239zOksGg_H4XD4ye6iZNtoZA linux-2.6.9-xen-sparse/arch/xen/kernel/Makefile
   1.187 +40f56239bvOjuuuViZ0XMlNiREFC0A linux-2.6.9-xen-sparse/arch/xen/kernel/ctrl_if.c
   1.188 +40f56239pYRq5yshPTkv3ujXKc8K6g linux-2.6.9-xen-sparse/arch/xen/kernel/empty.c
   1.189 +40f56238xFQe9T7M_U_FItM-bZIpLw linux-2.6.9-xen-sparse/arch/xen/kernel/evtchn.c
   1.190 +4110f478aeQWllIN7J4kouAHiAqrPw linux-2.6.9-xen-sparse/arch/xen/kernel/fixup.c
   1.191 +412dfae9eA3_6e6bCGUtg1mj8b56fQ linux-2.6.9-xen-sparse/arch/xen/kernel/gnttab.c
   1.192 +40f56239sFcjHiIRmnObRIDF-zaeKQ linux-2.6.9-xen-sparse/arch/xen/kernel/process.c
   1.193 +40f562392LBhwmOxVPsYdkYXMxI_ZQ linux-2.6.9-xen-sparse/arch/xen/kernel/reboot.c
   1.194 +414c113396tK1HTVeUalm3u-1DF16g linux-2.6.9-xen-sparse/arch/xen/kernel/skbuff.c
   1.195 +3f68905c5eiA-lBMQSvXLMWS1ikDEA linux-2.6.9-xen-sparse/arch/xen/kernel/xen_proc.c
   1.196 +41261688yS8eAyy-7kzG4KBs0xbYCA linux-2.6.9-xen-sparse/drivers/Makefile
   1.197 +4108f5c1WfTIrs0HZFeV39sttekCTw linux-2.6.9-xen-sparse/drivers/char/mem.c
   1.198 +4111308bZAIzwf_Kzu6x1TZYZ3E0_Q linux-2.6.9-xen-sparse/drivers/char/tty_io.c
   1.199 +40f56239Dp_vMTgz8TEbvo1hjHGc3w linux-2.6.9-xen-sparse/drivers/xen/Makefile
   1.200 +41768fbcncpBQf8s2l2-CwoSNIZ9uA linux-2.6.9-xen-sparse/drivers/xen/balloon/Makefile
   1.201 +3e6377f8i5e9eGz7Pw6fQuhuTQ7DQg linux-2.6.9-xen-sparse/drivers/xen/balloon/balloon.c
   1.202 +410d0893otFGghmv4dUXDUBBdY5aIA linux-2.6.9-xen-sparse/drivers/xen/blkback/Makefile
   1.203 +4087cf0d1XgMkooTZAiJS6NrcpLQNQ linux-2.6.9-xen-sparse/drivers/xen/blkback/blkback.c
   1.204 +4087cf0dZadZ8r6CEt4fNN350Yle3A linux-2.6.9-xen-sparse/drivers/xen/blkback/common.h
   1.205 +4087cf0dxlh29iw0w-9rxOCEGCjPcw linux-2.6.9-xen-sparse/drivers/xen/blkback/control.c
   1.206 +4087cf0dbuoH20fMjNZjcgrRK-1msQ linux-2.6.9-xen-sparse/drivers/xen/blkback/interface.c
   1.207 +4087cf0dk97tacDzxfByWV7JifUYqA linux-2.6.9-xen-sparse/drivers/xen/blkback/vbd.c
   1.208 +40f56239Sfle6wGv5FS0wjS_HI150A linux-2.6.9-xen-sparse/drivers/xen/blkfront/Kconfig
   1.209 +40f562395atl9x4suKGhPkjqLOXESg linux-2.6.9-xen-sparse/drivers/xen/blkfront/Makefile
   1.210 +40f56239-JNIaTzlviVJohVdoYOUpw linux-2.6.9-xen-sparse/drivers/xen/blkfront/blkfront.c
   1.211 +40f56239y9naBTXe40Pi2J_z3p-d1g linux-2.6.9-xen-sparse/drivers/xen/blkfront/block.h
   1.212 +40f56239BVfPsXBiWQitXgDRtOsiqg linux-2.6.9-xen-sparse/drivers/xen/blkfront/vbd.c
   1.213 +40f56239fsLjvtD8YBRAWphps4FDjg linux-2.6.9-xen-sparse/drivers/xen/console/Makefile
   1.214 +3e5a4e651TH-SXHoufurnWjgl5bfOA linux-2.6.9-xen-sparse/drivers/xen/console/console.c
   1.215 +40f56239KYxO0YabhPzCTeUuln-lnA linux-2.6.9-xen-sparse/drivers/xen/evtchn/Makefile
   1.216 +40f56239DoibTX6R-ZYd3QTXAB8_TA linux-2.6.9-xen-sparse/drivers/xen/evtchn/evtchn.c
   1.217 +410a9817HEVJvred5Oy_uKH3HFJC5Q linux-2.6.9-xen-sparse/drivers/xen/netback/Makefile
   1.218 +4097ba831lpGeLlPg-bfV8XarVVuoQ linux-2.6.9-xen-sparse/drivers/xen/netback/common.h
   1.219 +4097ba83wvv8yi5P5xugCUBAdb6O-A linux-2.6.9-xen-sparse/drivers/xen/netback/control.c
   1.220 +4097ba83byY5bTSugJGZ1exTxIcMKw linux-2.6.9-xen-sparse/drivers/xen/netback/interface.c
   1.221 +4087cf0dGmSbFhFZyIZBJzvqxY-qBw linux-2.6.9-xen-sparse/drivers/xen/netback/netback.c
   1.222 +40f56239lrg_Ob0BJ8WBFS1zeg2CYw linux-2.6.9-xen-sparse/drivers/xen/netfront/Kconfig
   1.223 +40f56239Wd4k_ycG_mFsSO1r5xKdtQ linux-2.6.9-xen-sparse/drivers/xen/netfront/Makefile
   1.224 +405853f6nbeazrNyEWNHBuoSg2PiPA linux-2.6.9-xen-sparse/drivers/xen/netfront/netfront.c
   1.225 +4108f5c1ppFXVpQzCOAZ6xXYubsjKA linux-2.6.9-xen-sparse/drivers/xen/privcmd/Makefile
   1.226 +3e5a4e65IUfzzMu2kZFlGEB8-rpTaA linux-2.6.9-xen-sparse/drivers/xen/privcmd/privcmd.c
   1.227 +412f47e4RKD-R5IS5gEXvcT8L4v8gA linux-2.6.9-xen-sparse/include/asm-generic/pgtable.h
   1.228 +40f56239YAjS52QG2FIAQpHDZAdGHg linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/desc.h
   1.229 +4107adf1E5O4ztGHNGMzCCNhcvqNow linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h
   1.230 +40f5623akIoBsQ3KxSB2kufkbgONXQ linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/fixmap.h
   1.231 +4118b6a418gnL6AZsTdglC92YGqYTg linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/highmem.h
   1.232 +40f5623aJVXQwpJMOLE99XgvGsfQ8Q linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/io.h
   1.233 +40f5623am9BzluYFuV6EQfTd-so3dA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/do_timer.h
   1.234 +40f5623adZQ1IZGPxbDXONjyZGYuTA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/io_ports.h
   1.235 +40f5623aKXkBBxgpLx2NcvkncQ1Yyw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h
   1.236 +40f5623aMQZoYuf4ml9v69N3gu8ing linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_mpspec.h
   1.237 +40f5623a8LroVMnZ5YRzJJmIc-zHlw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_reboot.h
   1.238 +40f5623ayR1vnzfF__htza35a8Ft-g linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_time.h
   1.239 +40f5623a4YdRdVzYWJzOOoqe8mnrXA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_timer.h
   1.240 +40f5623aDLxmbOtUHvkWztKjAO4EjA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_traps.h
   1.241 +41062ab7HMSSuaUv3_Z4agLpjSO88A linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/pci-functions.h
   1.242 +40f5623aDMCsWOFO0jktZ4e8sjwvEg linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h
   1.243 +40f5623arsFXkGdPvIqvFi3yFXGR0Q linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h
   1.244 +4120f807GCO0uqsLqdZj9csxR1Wthw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mmu_context.h
   1.245 +40f5623aFTyFTR-vdiA-KaGxk5JOKQ linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/msr.h
   1.246 +40f5623adgjZq9nAgCt0IXdWl7udSA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/page.h
   1.247 +40f5623a54NuG-7qHihGYmw4wWQnMA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/param.h
   1.248 +41137cc1kkvg0cg7uxddcEfjL7L67w linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pci.h
   1.249 +40f5623atCokYc2uCysSJ8jFO8TEsw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgalloc.h
   1.250 +412e01beTwiaC8sYY4XJP8PxLST5CA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable-2level-defs.h
   1.251 +40f5623aEToIXouJgO-ao5d5pcEt1w linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h
   1.252 +40f5623aCCXRPlGpNthVXstGz9ZV3A linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable.h
   1.253 +40f5623aPCkQQfPtJSooGdhcatrvnQ linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/processor.h
   1.254 +412ea0afQL2CAI-f522TbLjLPMibPQ linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/ptrace.h
   1.255 +40f5623bzLvxr7WoJIxVf2OH4rCBJg linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/segment.h
   1.256 +40f5623bG_LzgG6-qwk292nTc5Wabw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/setup.h
   1.257 +40f5623bgzm_9vwxpzJswlAxg298Gg linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h
   1.258 +40f5623bVdKP7Dt7qm8twu3NcnGNbA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/system.h
   1.259 +40f5623bSgGrvrGRpD71K-lIYqaGgg linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/timer.h
   1.260 +40f5623bc8LKPRO09wY5dGDnY_YCpw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/tlbflush.h
   1.261 +41062ab7uFxnCq-KtPeAm-aV8CicgA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/vga.h
   1.262 +40f5623bxUbeGjkRrjDguCy_Gm8RLw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/xor.h
   1.263 +40f5623bYNP7tHE2zX6YQxp9Zq2utQ linux-2.6.9-xen-sparse/include/asm-xen/ctrl_if.h
   1.264 +40f5623b3Eqs8pAc5WpPX8_jTzV2qw linux-2.6.9-xen-sparse/include/asm-xen/evtchn.h
   1.265 +412dfaeazclyNDM0cpnp60Yo4xulpQ linux-2.6.9-xen-sparse/include/asm-xen/gnttab.h
   1.266 +40f5623aGPlsm0u1LTO-NVZ6AGzNRQ linux-2.6.9-xen-sparse/include/asm-xen/hypervisor.h
   1.267 +40f5623cndVUFlkxpf7Lfx7xu8madQ linux-2.6.9-xen-sparse/include/asm-xen/multicall.h
   1.268 +3f108af1ylCIm82H052FVTfXACBHrw linux-2.6.9-xen-sparse/include/asm-xen/proc_cmd.h
   1.269 +4122466356eIBnC9ot44WSVVIFyhQA linux-2.6.9-xen-sparse/include/asm-xen/queues.h
   1.270 +3fa8e3f0kBLeE4To2vpdi3cpJbIkbQ linux-2.6.9-xen-sparse/include/asm-xen/suspend.h
   1.271 +3f689063BoW-HWV3auUJ-OqXfcGArw linux-2.6.9-xen-sparse/include/asm-xen/xen_proc.h
   1.272 +4124d8c4aocX7A-jIbuGraWN84pxGQ linux-2.6.9-xen-sparse/include/linux/bio.h
   1.273 +4124f66fp5QwbDHEfoUIa7pqO5Xhag linux-2.6.9-xen-sparse/include/linux/page-flags.h
   1.274 +4124f66f4NaKNa0xPiGGykn9QaZk3w linux-2.6.9-xen-sparse/include/linux/skbuff.h
   1.275 +40f56a0ddHCSs3501MY4hRf22tctOw linux-2.6.9-xen-sparse/mkbuildtree
   1.276 +412f46c0LJuKAgSPGoC0Z1DEkLfuLA linux-2.6.9-xen-sparse/mm/memory.c
   1.277 +410a94a4KT6I6X0LVc7djB39tRDp4g linux-2.6.9-xen-sparse/mm/page_alloc.c
   1.278 +41505c572m-s9ATiO1LiD1GPznTTIg linux-2.6.9-xen-sparse/net/core/skbuff.c
   1.279 +4149ec79wMpIHdvbntxqVGLRZZjPxw linux-2.6.9-xen-sparse/net/ipv4/raw.c
   1.280  413cb1e4zst25MDYjg63Y-NGC5_pLg netbsd-2.0-xen-sparse/Makefile
   1.281  413cb1e5c_Mkxf_X0zimEhTKI_l4DA netbsd-2.0-xen-sparse/mkbuildtree
   1.282  413cb1e5kY_Zil7-b0kI6hvCIxBEYg netbsd-2.0-xen-sparse/nbconfig-xen
     2.1 --- a/linux-2.6.8.1-patches/agpgart.patch	Mon Oct 25 12:45:34 2004 +0000
     2.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.3 @@ -1,346 +0,0 @@
     2.4 ---- linux-2.6.8.1/drivers/char/agp/ali-agp.c	2004-08-14 11:55:35.000000000 +0100
     2.5 -+++ linux-2.6.8.1-xen0/drivers/char/agp/ali-agp.c	2004-09-05 05:55:58.876495340 +0100
     2.6 -@@ -150,7 +150,7 @@
     2.7 - 	pci_read_config_dword(agp_bridge->dev, ALI_CACHE_FLUSH_CTRL, &temp);
     2.8 - 	pci_write_config_dword(agp_bridge->dev, ALI_CACHE_FLUSH_CTRL,
     2.9 - 			(((temp & ALI_CACHE_FLUSH_ADDR_MASK) |
    2.10 --			  virt_to_phys(addr)) | ALI_CACHE_FLUSH_EN ));
    2.11 -+			  virt_to_bus(addr)) | ALI_CACHE_FLUSH_EN ));
    2.12 - 	return addr;
    2.13 - }
    2.14 - 
    2.15 -@@ -174,7 +174,7 @@
    2.16 - 	pci_read_config_dword(agp_bridge->dev, ALI_CACHE_FLUSH_CTRL, &temp);
    2.17 - 	pci_write_config_dword(agp_bridge->dev, ALI_CACHE_FLUSH_CTRL,
    2.18 - 			(((temp & ALI_CACHE_FLUSH_ADDR_MASK) |
    2.19 --			  virt_to_phys(addr)) | ALI_CACHE_FLUSH_EN));
    2.20 -+			  virt_to_bus(addr)) | ALI_CACHE_FLUSH_EN));
    2.21 - 	agp_generic_destroy_page(addr);
    2.22 - }
    2.23 - 
    2.24 ---- linux-2.6.8.1/drivers/char/agp/amd-k7-agp.c	2004-08-14 11:56:24.000000000 +0100
    2.25 -+++ linux-2.6.8.1-xen0/drivers/char/agp/amd-k7-agp.c	2004-09-05 05:55:58.877495108 +0100
    2.26 -@@ -43,7 +43,7 @@
    2.27 - 
    2.28 - 	SetPageReserved(virt_to_page(page_map->real));
    2.29 - 	global_cache_flush();
    2.30 --	page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real),
    2.31 -+	page_map->remapped = ioremap_nocache(virt_to_bus(page_map->real),
    2.32 - 					    PAGE_SIZE);
    2.33 - 	if (page_map->remapped == NULL) {
    2.34 - 		ClearPageReserved(virt_to_page(page_map->real));
    2.35 -@@ -152,7 +152,7 @@
    2.36 - 
    2.37 - 	agp_bridge->gatt_table_real = (u32 *)page_dir.real;
    2.38 - 	agp_bridge->gatt_table = (u32 *)page_dir.remapped;
    2.39 --	agp_bridge->gatt_bus_addr = virt_to_phys(page_dir.real);
    2.40 -+	agp_bridge->gatt_bus_addr = virt_to_bus(page_dir.real);
    2.41 - 
    2.42 - 	/* Get the address for the gart region.
    2.43 - 	 * This is a bus address even on the alpha, b/c its
    2.44 -@@ -166,7 +166,7 @@
    2.45 - 	/* Calculate the agp offset */
    2.46 - 	for (i = 0; i < value->num_entries / 1024; i++, addr += 0x00400000) {
    2.47 - 		page_dir.remapped[GET_PAGE_DIR_OFF(addr)] =
    2.48 --			virt_to_phys(amd_irongate_private.gatt_pages[i]->real);
    2.49 -+			virt_to_bus(amd_irongate_private.gatt_pages[i]->real);
    2.50 - 		page_dir.remapped[GET_PAGE_DIR_OFF(addr)] |= 0x00000001;
    2.51 - 	}
    2.52 - 
    2.53 ---- linux-2.6.8.1/drivers/char/agp/amd64-agp.c	2004-08-14 11:55:47.000000000 +0100
    2.54 -+++ linux-2.6.8.1-xen0/drivers/char/agp/amd64-agp.c	2004-09-05 05:55:58.877495108 +0100
    2.55 -@@ -212,7 +212,7 @@
    2.56 - 
    2.57 - static int amd_8151_configure(void)
    2.58 - {
    2.59 --	unsigned long gatt_bus = virt_to_phys(agp_bridge->gatt_table_real);
    2.60 -+	unsigned long gatt_bus = virt_to_bus(agp_bridge->gatt_table_real);
    2.61 - 
    2.62 - 	/* Configure AGP regs in each x86-64 host bridge. */
    2.63 - 	for_each_nb() {
    2.64 -@@ -521,7 +521,7 @@
    2.65 - {
    2.66 - 	struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
    2.67 - 
    2.68 --	release_mem_region(virt_to_phys(bridge->gatt_table_real),
    2.69 -+	release_mem_region(virt_to_bus(bridge->gatt_table_real),
    2.70 - 			   amd64_aperture_sizes[bridge->aperture_size_idx].size);
    2.71 - 	agp_remove_bridge(bridge);
    2.72 - 	agp_put_bridge(bridge);
    2.73 ---- linux-2.6.8.1/drivers/char/agp/ati-agp.c	2004-08-14 11:55:48.000000000 +0100
    2.74 -+++ linux-2.6.8.1-xen0/drivers/char/agp/ati-agp.c	2004-09-05 05:55:58.877495108 +0100
    2.75 -@@ -64,7 +64,7 @@
    2.76 - 
    2.77 - 	/* CACHE_FLUSH(); */
    2.78 - 	global_cache_flush();
    2.79 --	page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real),
    2.80 -+	page_map->remapped = ioremap_nocache(virt_to_bus(page_map->real),
    2.81 - 					    PAGE_SIZE);
    2.82 - 	if (page_map->remapped == NULL || err) {
    2.83 - 		ClearPageReserved(virt_to_page(page_map->real));
    2.84 ---- linux-2.6.8.1/drivers/char/agp/backend.c	2004-08-14 11:55:47.000000000 +0100
    2.85 -+++ linux-2.6.8.1-xen0/drivers/char/agp/backend.c	2004-09-05 05:55:58.878494876 +0100
    2.86 -@@ -142,7 +142,7 @@
    2.87 - 			return -ENOMEM;
    2.88 - 		}
    2.89 - 
    2.90 --		bridge->scratch_page_real = virt_to_phys(addr);
    2.91 -+		bridge->scratch_page_real = virt_to_bus(addr);
    2.92 - 		bridge->scratch_page =
    2.93 - 		    bridge->driver->mask_memory(bridge->scratch_page_real, 0);
    2.94 - 	}
    2.95 -@@ -186,7 +186,7 @@
    2.96 - err_out:
    2.97 - 	if (bridge->driver->needs_scratch_page)
    2.98 - 		bridge->driver->agp_destroy_page(
    2.99 --				phys_to_virt(bridge->scratch_page_real));
   2.100 -+				bus_to_virt(bridge->scratch_page_real));
   2.101 - 	if (got_gatt)
   2.102 - 		bridge->driver->free_gatt_table();
   2.103 - 	if (got_keylist) {
   2.104 -@@ -211,7 +211,7 @@
   2.105 - 	if (bridge->driver->agp_destroy_page &&
   2.106 - 	    bridge->driver->needs_scratch_page)
   2.107 - 		bridge->driver->agp_destroy_page(
   2.108 --				phys_to_virt(bridge->scratch_page_real));
   2.109 -+				bus_to_virt(bridge->scratch_page_real));
   2.110 - }
   2.111 - 
   2.112 - static const drm_agp_t drm_agp = {
   2.113 ---- linux-2.6.8.1/drivers/char/agp/generic.c	2004-08-14 11:55:10.000000000 +0100
   2.114 -+++ linux-2.6.8.1-xen0/drivers/char/agp/generic.c	2004-09-05 05:55:58.879494644 +0100
   2.115 -@@ -127,7 +127,7 @@
   2.116 - 	}
   2.117 - 	if (curr->page_count != 0) {
   2.118 - 		for (i = 0; i < curr->page_count; i++) {
   2.119 --			agp_bridge->driver->agp_destroy_page(phys_to_virt(curr->memory[i]));
   2.120 -+			agp_bridge->driver->agp_destroy_page(bus_to_virt(curr->memory[i]));
   2.121 - 		}
   2.122 - 	}
   2.123 - 	agp_free_key(curr->key);
   2.124 -@@ -181,7 +181,7 @@
   2.125 - 			return NULL;
   2.126 - 		}
   2.127 - 		new->memory[i] =
   2.128 --			agp_bridge->driver->mask_memory(virt_to_phys(addr), type);
   2.129 -+			agp_bridge->driver->mask_memory(virt_to_bus(addr), type);
   2.130 - 		new->page_count++;
   2.131 - 	}
   2.132 - 
   2.133 -@@ -636,6 +636,7 @@
   2.134 - 	int i;
   2.135 - 	void *temp;
   2.136 - 	struct page *page;
   2.137 -+	dma_addr_t dma;
   2.138 - 
   2.139 - 	/* The generic routines can't handle 2 level gatt's */
   2.140 - 	if (agp_bridge->driver->size_type == LVL2_APER_SIZE)
   2.141 -@@ -674,8 +675,10 @@
   2.142 - 				break;
   2.143 - 			}
   2.144 - 
   2.145 --			table = (char *) __get_free_pages(GFP_KERNEL,
   2.146 --							  page_order);
   2.147 -+			table = dma_alloc_coherent(
   2.148 -+					&agp_bridge->dev->dev,
   2.149 -+					PAGE_SIZE << page_order, &dma,
   2.150 -+					GFP_KERNEL);
   2.151 - 
   2.152 - 			if (table == NULL) {
   2.153 - 				i++;
   2.154 -@@ -706,7 +709,9 @@
   2.155 - 		size = ((struct aper_size_info_fixed *) temp)->size;
   2.156 - 		page_order = ((struct aper_size_info_fixed *) temp)->page_order;
   2.157 - 		num_entries = ((struct aper_size_info_fixed *) temp)->num_entries;
   2.158 --		table = (char *) __get_free_pages(GFP_KERNEL, page_order);
   2.159 -+		table = dma_alloc_coherent(
   2.160 -+				&agp_bridge->dev->dev,
   2.161 -+				PAGE_SIZE << page_order, &dma, GFP_KERNEL);
   2.162 - 	}
   2.163 - 
   2.164 - 	if (table == NULL)
   2.165 -@@ -721,7 +726,7 @@
   2.166 - 	agp_gatt_table = (void *)table;
   2.167 - 
   2.168 - 	agp_bridge->driver->cache_flush();
   2.169 --	agp_bridge->gatt_table = ioremap_nocache(virt_to_phys(table),
   2.170 -+	agp_bridge->gatt_table = ioremap_nocache(virt_to_bus(table),
   2.171 - 					(PAGE_SIZE * (1 << page_order)));
   2.172 - 	agp_bridge->driver->cache_flush();
   2.173 - 
   2.174 -@@ -729,11 +734,12 @@
   2.175 - 		for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
   2.176 - 			ClearPageReserved(page);
   2.177 - 
   2.178 --		free_pages((unsigned long) table, page_order);
   2.179 -+		dma_free_coherent(&agp_bridge->dev->dev, PAGE_SIZE<<page_order,
   2.180 -+					table, dma);
   2.181 - 
   2.182 - 		return -ENOMEM;
   2.183 - 	}
   2.184 --	agp_bridge->gatt_bus_addr = virt_to_phys(agp_bridge->gatt_table_real);
   2.185 -+	agp_bridge->gatt_bus_addr = virt_to_bus(table);
   2.186 - 
   2.187 - 	/* AK: bogus, should encode addresses > 4GB */
   2.188 - 	for (i = 0; i < num_entries; i++)
   2.189 -@@ -785,7 +791,8 @@
   2.190 - 	for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
   2.191 - 		ClearPageReserved(page);
   2.192 - 
   2.193 --	free_pages((unsigned long) agp_bridge->gatt_table_real, page_order);
   2.194 -+	dma_free_coherent(&agp_bridge->dev->dev, PAGE_SIZE<<page_order,
   2.195 -+		agp_bridge->gatt_table_real, agp_bridge->gatt_bus_addr);
   2.196 - 
   2.197 - 	agp_gatt_table = NULL;
   2.198 - 	agp_bridge->gatt_table = NULL;
   2.199 ---- linux-2.6.8.1/drivers/char/agp/hp-agp.c	2004-08-14 11:55:59.000000000 +0100
   2.200 -+++ linux-2.6.8.1-xen0/drivers/char/agp/hp-agp.c	2004-09-05 05:55:58.879494644 +0100
   2.201 -@@ -110,7 +110,7 @@
   2.202 - 	hp->gart_size = HP_ZX1_GART_SIZE;
   2.203 - 	hp->gatt_entries = hp->gart_size / hp->io_page_size;
   2.204 - 
   2.205 --	hp->io_pdir = phys_to_virt(INREG64(hp->ioc_regs, HP_ZX1_PDIR_BASE));
   2.206 -+	hp->io_pdir = bus_to_virt(INREG64(hp->ioc_regs, HP_ZX1_PDIR_BASE));
   2.207 - 	hp->gatt = &hp->io_pdir[HP_ZX1_IOVA_TO_PDIR(hp->gart_base)];
   2.208 - 
   2.209 - 	if (hp->gatt[0] != HP_ZX1_SBA_IOMMU_COOKIE) {
   2.210 -@@ -248,7 +248,7 @@
   2.211 - 	agp_bridge->mode = INREG32(hp->lba_regs, hp->lba_cap_offset + PCI_AGP_STATUS);
   2.212 - 
   2.213 - 	if (hp->io_pdir_owner) {
   2.214 --		OUTREG64(hp->ioc_regs, HP_ZX1_PDIR_BASE, virt_to_phys(hp->io_pdir));
   2.215 -+		OUTREG64(hp->ioc_regs, HP_ZX1_PDIR_BASE, virt_to_bus(hp->io_pdir));
   2.216 - 		OUTREG64(hp->ioc_regs, HP_ZX1_TCNFG, hp->io_tlb_ps);
   2.217 - 		OUTREG64(hp->ioc_regs, HP_ZX1_IMASK, ~(HP_ZX1_IOVA_SIZE - 1));
   2.218 - 		OUTREG64(hp->ioc_regs, HP_ZX1_IBASE, hp->iova_base | 0x1);
   2.219 ---- linux-2.6.8.1/drivers/char/agp/i460-agp.c	2004-08-14 11:55:34.000000000 +0100
   2.220 -+++ linux-2.6.8.1-xen0/drivers/char/agp/i460-agp.c	2004-09-05 05:55:58.879494644 +0100
   2.221 -@@ -371,7 +371,7 @@
   2.222 - 	}
   2.223 - 	memset(lp->alloced_map, 0, map_size);
   2.224 - 
   2.225 --	lp->paddr = virt_to_phys(lpage);
   2.226 -+	lp->paddr = virt_to_bus(lpage);
   2.227 - 	lp->refcount = 0;
   2.228 - 	atomic_add(I460_KPAGES_PER_IOPAGE, &agp_bridge->current_memory_agp);
   2.229 - 	return 0;
   2.230 -@@ -382,7 +382,7 @@
   2.231 - 	kfree(lp->alloced_map);
   2.232 - 	lp->alloced_map = NULL;
   2.233 - 
   2.234 --	free_pages((unsigned long) phys_to_virt(lp->paddr), I460_IO_PAGE_SHIFT - PAGE_SHIFT);
   2.235 -+	free_pages((unsigned long) bus_to_virt(lp->paddr), I460_IO_PAGE_SHIFT - PAGE_SHIFT);
   2.236 - 	atomic_sub(I460_KPAGES_PER_IOPAGE, &agp_bridge->current_memory_agp);
   2.237 - }
   2.238 - 
   2.239 ---- linux-2.6.8.1/drivers/char/agp/intel-agp.c	2004-08-14 11:55:32.000000000 +0100
   2.240 -+++ linux-2.6.8.1-xen0/drivers/char/agp/intel-agp.c	2004-09-05 05:55:58.880494412 +0100
   2.241 -@@ -285,7 +285,7 @@
   2.242 - 	if (new == NULL)
   2.243 - 		return NULL;
   2.244 - 
   2.245 --	new->memory[0] = virt_to_phys(addr);
   2.246 -+	new->memory[0] = virt_to_bus(addr);
   2.247 - 	if (pg_count == 4) {
   2.248 - 		/* kludge to get 4 physical pages for ARGB cursor */
   2.249 - 		new->memory[1] = new->memory[0] + PAGE_SIZE;
   2.250 -@@ -328,10 +328,10 @@
   2.251 - 	agp_free_key(curr->key);
   2.252 - 	if(curr->type == AGP_PHYS_MEMORY) {
   2.253 - 		if (curr->page_count == 4)
   2.254 --			i8xx_destroy_pages(phys_to_virt(curr->memory[0]));
   2.255 -+			i8xx_destroy_pages(bus_to_virt(curr->memory[0]));
   2.256 - 		else
   2.257 - 	   		agp_bridge->driver->agp_destroy_page(
   2.258 --				 phys_to_virt(curr->memory[0]));
   2.259 -+				 bus_to_virt(curr->memory[0]));
   2.260 - 		vfree(curr->memory);
   2.261 - 	}
   2.262 - 	kfree(curr);
   2.263 ---- linux-2.6.8.1/drivers/char/agp/intel-mch-agp.c	2004-08-14 11:54:49.000000000 +0100
   2.264 -+++ linux-2.6.8.1-xen0/drivers/char/agp/intel-mch-agp.c	2004-09-05 05:55:58.880494412 +0100
   2.265 -@@ -51,7 +51,7 @@
   2.266 - 	if (new == NULL)
   2.267 - 		return NULL;
   2.268 - 
   2.269 --	new->memory[0] = agp_bridge->driver->mask_memory(virt_to_phys(addr), type);
   2.270 -+	new->memory[0] = agp_bridge->driver->mask_memory(virt_to_bus(addr), type);
   2.271 - 	new->page_count = 1;
   2.272 - 	new->num_scratch_pages = 1;
   2.273 - 	new->type = AGP_PHYS_MEMORY;
   2.274 -@@ -63,7 +63,7 @@
   2.275 - {
   2.276 - 	agp_free_key(curr->key);
   2.277 - 	if(curr->type == AGP_PHYS_MEMORY) {
   2.278 --		agp_bridge->driver->agp_destroy_page(phys_to_virt(curr->memory[0]));
   2.279 -+		agp_bridge->driver->agp_destroy_page(bus_to_virt(curr->memory[0]));
   2.280 - 		vfree(curr->memory);
   2.281 - 	}
   2.282 - 	kfree(curr);
   2.283 ---- linux-2.6.8.1/drivers/char/agp/sworks-agp.c	2004-08-14 11:55:10.000000000 +0100
   2.284 -+++ linux-2.6.8.1-xen0/drivers/char/agp/sworks-agp.c	2004-09-05 05:55:58.881494180 +0100
   2.285 -@@ -51,7 +51,7 @@
   2.286 - 	}
   2.287 - 	SetPageReserved(virt_to_page(page_map->real));
   2.288 - 	global_cache_flush();
   2.289 --	page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real), 
   2.290 -+	page_map->remapped = ioremap_nocache(virt_to_bus(page_map->real), 
   2.291 - 					    PAGE_SIZE);
   2.292 - 	if (page_map->remapped == NULL) {
   2.293 - 		ClearPageReserved(virt_to_page(page_map->real));
   2.294 -@@ -164,7 +164,7 @@
   2.295 - 	for(i = 0; i < 1024; i++) {
   2.296 - 		serverworks_private.scratch_dir.remapped[i] = (unsigned long) agp_bridge->scratch_page;
   2.297 - 		page_dir.remapped[i] =
   2.298 --			virt_to_phys(serverworks_private.scratch_dir.real);
   2.299 -+			virt_to_bus(serverworks_private.scratch_dir.real);
   2.300 - 		page_dir.remapped[i] |= 0x00000001;
   2.301 - 	}
   2.302 - 
   2.303 -@@ -177,7 +177,7 @@
   2.304 - 
   2.305 - 	agp_bridge->gatt_table_real = (u32 *)page_dir.real;
   2.306 - 	agp_bridge->gatt_table = (u32 *)page_dir.remapped;
   2.307 --	agp_bridge->gatt_bus_addr = virt_to_phys(page_dir.real);
   2.308 -+	agp_bridge->gatt_bus_addr = virt_to_bus(page_dir.real);
   2.309 - 
   2.310 - 	/* Get the address for the gart region.
   2.311 - 	 * This is a bus address even on the alpha, b/c its
   2.312 -@@ -191,7 +191,7 @@
   2.313 - 
   2.314 - 	for(i = 0; i < value->num_entries / 1024; i++) {
   2.315 - 		page_dir.remapped[i] =
   2.316 --			virt_to_phys(serverworks_private.gatt_pages[i]->real);
   2.317 -+			virt_to_bus(serverworks_private.gatt_pages[i]->real);
   2.318 - 		page_dir.remapped[i] |= 0x00000001;
   2.319 - 	}
   2.320 - 
   2.321 ---- linux-2.6.8.1/drivers/char/agp/uninorth-agp.c	2004-08-14 11:55:32.000000000 +0100
   2.322 -+++ linux-2.6.8.1-xen0/drivers/char/agp/uninorth-agp.c	2004-09-05 05:55:58.881494180 +0100
   2.323 -@@ -200,7 +200,7 @@
   2.324 - 
   2.325 - 	agp_bridge->gatt_table_real = (u32 *) table;
   2.326 - 	agp_bridge->gatt_table = (u32 *)table;
   2.327 --	agp_bridge->gatt_bus_addr = virt_to_phys(table);
   2.328 -+	agp_bridge->gatt_bus_addr = virt_to_bus(table);
   2.329 - 
   2.330 - 	for (i = 0; i < num_entries; i++) {
   2.331 - 		agp_bridge->gatt_table[i] =
   2.332 ---- linux-2.6.8.1/include/asm-i386/agp.h	2004-08-14 11:54:47.000000000 +0100
   2.333 -+++ linux-2.6.8.1-xen0/include/asm-i386/agp.h	2004-09-05 05:57:26.040268956 +0100
   2.334 -@@ -3,6 +3,7 @@
   2.335 - 
   2.336 - #include <asm/pgtable.h>
   2.337 - #include <asm/cacheflush.h>
   2.338 -+#include <asm/system.h>
   2.339 - 
   2.340 - /* 
   2.341 -  * Functions to keep the agpgart mappings coherent with the MMU.
   2.342 -@@ -19,6 +20,6 @@
   2.343 - /* Could use CLFLUSH here if the cpu supports it. But then it would
   2.344 -    need to be called for each cacheline of the whole page so it may not be 
   2.345 -    worth it. Would need a page for it. */
   2.346 --#define flush_agp_cache() asm volatile("wbinvd":::"memory")
   2.347 -+#define flush_agp_cache() wbinvd()
   2.348 - 
   2.349 - #endif
     3.1 --- a/linux-2.6.8.1-patches/drm.patch	Mon Oct 25 12:45:34 2004 +0000
     3.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.3 @@ -1,11 +0,0 @@
     3.4 ---- linux-2.6.8.1/drivers/char/drm/ati_pcigart.h	2004-08-14 11:56:14.000000000 +0100
     3.5 -+++ linux-2.6.8.1-xen0/drivers/char/drm/ati_pcigart.h	2004-09-05 06:14:51.751782846 +0100
     3.6 -@@ -158,7 +158,7 @@
     3.7 - 	ret = 1;
     3.8 - 
     3.9 - #if defined(__i386__) || defined(__x86_64__)
    3.10 --	asm volatile ( "wbinvd" ::: "memory" );
    3.11 -+	wbinvd();
    3.12 - #else
    3.13 - 	mb();
    3.14 - #endif
     4.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/Kconfig	Mon Oct 25 12:45:34 2004 +0000
     4.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.3 @@ -1,172 +0,0 @@
     4.4 -#
     4.5 -# For a description of the syntax of this configuration file,
     4.6 -# see Documentation/kbuild/kconfig-language.txt.
     4.7 -#
     4.8 -
     4.9 -mainmenu "Linux Kernel Configuration"
    4.10 -
    4.11 -config XEN
    4.12 -	bool
    4.13 -	default y
    4.14 -	help
    4.15 -	  This is the Linux Xen port.
    4.16 -
    4.17 -config ARCH_XEN
    4.18 -	bool
    4.19 -	default y
    4.20 -
    4.21 -
    4.22 -config NO_IDLE_HZ
    4.23 -	bool
    4.24 -	default y
    4.25 -
    4.26 -
    4.27 -menu "XEN"
    4.28 -
    4.29 -config XEN_PRIVILEGED_GUEST
    4.30 -	bool "Privileged Guest (domain 0)"
    4.31 -	default n
    4.32 -        select XEN_PHYSDEV_ACCESS
    4.33 -	help
    4.34 -	  Support for privileged operation (domain 0)
    4.35 -
    4.36 -config XEN_PHYSDEV_ACCESS
    4.37 -	bool "Physical device access"
    4.38 -	default y if XEN_PRIVILEGED_GUEST
    4.39 -	default n if !XEN_PRIVILEGED_GUEST
    4.40 -	help
    4.41 -	  Assume access is available to physical hardware devices
    4.42 -          (e.g., hard drives, network cards). This allows you to configure
    4.43 -          such devices and also includes some low-level support that is
    4.44 -          otherwise not compiled into the kernel.
    4.45 -
    4.46 -config XEN_BLKDEV_BACKEND
    4.47 -        bool "Block-device backend driver"
    4.48 -        default y if XEN_PHYSDEV_ACCESS
    4.49 -        default n if !XEN_PHYSDEV_ACCESS
    4.50 -        help
    4.51 -          The block-device backend driver allows the kernel to export its
    4.52 -          block devices to other guests via a high-performance shared-memory
    4.53 -          interface.
    4.54 -
    4.55 -config XEN_NETDEV_BACKEND
    4.56 -        bool "Network-device backend driver"
    4.57 -        default y if XEN_PHYSDEV_ACCESS
    4.58 -        default n if !XEN_PHYSDEV_ACCESS
    4.59 -        help
    4.60 -          The network-device backend driver allows the kernel to export its
    4.61 -          network devices to other guests via a high-performance shared-memory
    4.62 -          interface.
    4.63 -
    4.64 -config XEN_BLKDEV_FRONTEND
    4.65 -        bool "Block-device frontend driver"
    4.66 -        default y
    4.67 -        help
    4.68 -          The block-device frontend driver allows the kernel to access block
    4.69 -          devices mounted within another guest OS. Unless you are building a
    4.70 -          dedicated device-driver domain, or your master control domain
    4.71 -          (domain 0), then you almost certainly want to say Y here.
    4.72 -
    4.73 -config XEN_NETDEV_FRONTEND
    4.74 -        bool "Network-device frontend driver"
    4.75 -        default y
    4.76 -        help
    4.77 -          The network-device frontend driver allows the kernel to access
    4.78 -          network interfaces within another guest OS. Unless you are building a
    4.79 -          dedicated device-driver domain, or your master control domain
    4.80 -          (domain 0), then you almost certainly want to say Y here.
    4.81 -
    4.82 -if XEN_NETDEV_FRONTEND
    4.83 -config XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER
    4.84 -        bool "Pipelined transmitter (DANGEROUS)"
    4.85 -        default n
    4.86 -        help
    4.87 -          The driver will assume that the backend is pipelining packets for
    4.88 -          transmission: whenever packets are pending in the remote backend,
    4.89 -          the driver will not send asynchronous notifications when it queues
    4.90 -          additional packets for transmission.
    4.91 -          If the backend is a dumb domain, such as a transparent Ethernet
    4.92 -          bridge with no local IP interface, it is safe to say Y here to get
    4.93 -          slightly lower network overhead.
    4.94 -          If the backend has a local IP interface; or may be doing smart things
    4.95 -          like reassembling packets to perform firewall filtering; or if you
    4.96 -          are unsure; or if you experience network hangs when this option is
    4.97 -          enabled; then you must say N here.
    4.98 -endif
    4.99 -
   4.100 -config XEN_WRITABLE_PAGETABLES
   4.101 -	bool "Use writable pagetables"
   4.102 -	default n
   4.103 -	help
   4.104 -	  Use writable L1 pagetables
   4.105 -
   4.106 -config XEN_SCRUB_PAGES
   4.107 -        bool "Scrub memory before freeing it to Xen"
   4.108 -        default y
   4.109 -        help
   4.110 -          Erase memory contents before freeing it back to Xen's global
   4.111 -          pool. This ensures that any secrets contained within that
   4.112 -          memory (e.g., private keys) cannot be found by other guests that
   4.113 -          may be running on the machine. Most people will want to say Y here.
   4.114 -          If security is not a concern then you may increase performance by
   4.115 -          saying N.
   4.116 -
   4.117 -endmenu
   4.118 -
   4.119 -config FOREIGN_PAGES
   4.120 -	bool
   4.121 -	default y
   4.122 -
   4.123 -config HAVE_ARCH_DEV_ALLOC_SKB
   4.124 -	bool
   4.125 -	default y
   4.126 -
   4.127 -#config VT
   4.128 -#	bool
   4.129 -#	default y
   4.130 -
   4.131 -#config VT_CONSOLE
   4.132 -#	bool
   4.133 -#	default y
   4.134 -
   4.135 -#config HW_CONSOLE
   4.136 -#	bool
   4.137 -#	default y
   4.138 -
   4.139 -choice
   4.140 -	prompt "Processor Type"
   4.141 -	default X86
   4.142 -
   4.143 -config X86
   4.144 -	bool "X86"
   4.145 -	help
   4.146 -	  Choose this option if your computer is a X86 architecture.
   4.147 -
   4.148 -config X86_64
   4.149 -	bool "X86_64"
   4.150 -	help
   4.151 -	  Choose this option if your computer is a X86 architecture.
   4.152 -
   4.153 -endchoice
   4.154 -
   4.155 -source "init/Kconfig"
   4.156 -
   4.157 -if X86
   4.158 -source "arch/xen/i386/Kconfig"
   4.159 -endif
   4.160 -
   4.161 -menu "Executable file formats"
   4.162 -
   4.163 -source "fs/Kconfig.binfmt"
   4.164 -
   4.165 -endmenu
   4.166 -
   4.167 -source "arch/xen/Kconfig.drivers"
   4.168 -
   4.169 -source "fs/Kconfig"
   4.170 -
   4.171 -source "security/Kconfig"
   4.172 -
   4.173 -source "crypto/Kconfig"
   4.174 -
   4.175 -source "lib/Kconfig"
     5.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/Kconfig.drivers	Mon Oct 25 12:45:34 2004 +0000
     5.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.3 @@ -1,55 +0,0 @@
     5.4 -# arch/xen/Kconfig.drivers
     5.5 -
     5.6 -menu "Device Drivers"
     5.7 -
     5.8 -source "drivers/base/Kconfig"
     5.9 -
    5.10 -if XEN_PHYSDEV_ACCESS
    5.11 -source "drivers/mtd/Kconfig"
    5.12 -source "drivers/parport/Kconfig"
    5.13 -source "drivers/pnp/Kconfig"
    5.14 -endif
    5.15 -
    5.16 -source "drivers/block/Kconfig"
    5.17 -
    5.18 -if XEN_PHYSDEV_ACCESS
    5.19 -source "drivers/ide/Kconfig"
    5.20 -endif
    5.21 -
    5.22 -source "drivers/scsi/Kconfig"
    5.23 -
    5.24 -if XEN_PHYSDEV_ACCESS
    5.25 -source "drivers/cdrom/Kconfig"
    5.26 -endif
    5.27 -
    5.28 -source "drivers/md/Kconfig"
    5.29 -
    5.30 -if XEN_PHYSDEV_ACCESS
    5.31 -source "drivers/message/fusion/Kconfig"
    5.32 -source "drivers/ieee1394/Kconfig"
    5.33 -source "drivers/message/i2o/Kconfig"
    5.34 -endif
    5.35 -
    5.36 -source "net/Kconfig"
    5.37 -
    5.38 -if XEN_PHYSDEV_ACCESS
    5.39 -source "drivers/isdn/Kconfig"
    5.40 -source "drivers/telephony/Kconfig"
    5.41 -source "drivers/input/Kconfig"
    5.42 -source "drivers/char/Kconfig"
    5.43 -source "drivers/i2c/Kconfig"
    5.44 -source "drivers/w1/Kconfig"
    5.45 -source "drivers/misc/Kconfig"
    5.46 -source "drivers/media/Kconfig"
    5.47 -source "drivers/video/Kconfig"
    5.48 -source "sound/Kconfig"
    5.49 -source "drivers/usb/Kconfig"
    5.50 -endif
    5.51 -
    5.52 -if !XEN_PHYSDEV_ACCESS
    5.53 -config UNIX98_PTYS
    5.54 -	bool
    5.55 -	default y
    5.56 -endif
    5.57 -
    5.58 -endmenu
     6.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/Makefile	Mon Oct 25 12:45:34 2004 +0000
     6.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.3 @@ -1,75 +0,0 @@
     6.4 -#
     6.5 -# xen/Makefile
     6.6 -#
     6.7 -# This file is included by the global makefile so that you can add your own
     6.8 -# architecture-specific flags and dependencies. Remember to do have actions
     6.9 -# for "archclean" cleaning up for this architecture.
    6.10 -#
    6.11 -# This file is subject to the terms and conditions of the GNU General Public
    6.12 -# License.  See the file "COPYING" in the main directory of this archive
    6.13 -# for more details.
    6.14 -#
    6.15 -# Copyright (C) 2004 by Christian Limpach
    6.16 -#
    6.17 -
    6.18 -XENARCH	:= $(subst ",,$(CONFIG_XENARCH))
    6.19 -
    6.20 -# pick up headers from include/asm-xen/asm in preference over include/asm
    6.21 -NOSTDINC_FLAGS  = -nostdinc -iwithprefix include/asm-xen -Iinclude/asm-xen -iwithprefix include
    6.22 -
    6.23 -# make uname return the processor arch
    6.24 -UTS_MACHINE := $(XENARCH)
    6.25 -
    6.26 -core-y	+= arch/xen/kernel/
    6.27 -
    6.28 -include/.asm-ignore:
    6.29 -	@rm -f include/.asm-ignore
    6.30 -	@mv include/asm include/.asm-ignore
    6.31 -	@echo '  SYMLINK include/asm -> include/asm-$(XENARCH)'
    6.32 -	$(Q)if [ ! -d include ]; then mkdir -p include; fi;
    6.33 -	@ln -fsn asm-$(XENARCH) include/asm
    6.34 -
    6.35 -include/asm-xen/asm:
    6.36 -	@echo '  SYMLINK $@ -> include/asm-xen/asm-$(XENARCH)'
    6.37 -	@ln -fsn asm-$(XENARCH) $@
    6.38 -
    6.39 -include/asm-xen/asm-$(XENARCH)/hypervisor-ifs:
    6.40 -	@echo '  SYMLINK $@ -> include/asm-xen/hypervisor-ifs'
    6.41 -	@ln -fsn ../hypervisor-ifs $@
    6.42 -
    6.43 -arch/xen/arch:
    6.44 -	@rm -f $@
    6.45 -	@ln -fsn $(XENARCH) $@
    6.46 -
    6.47 -prepare: include/.asm-ignore include/asm-xen/asm \
    6.48 -	include/asm-xen/asm-$(XENARCH)/hypervisor-ifs \
    6.49 -	arch/xen/arch ;
    6.50 -
    6.51 -all: vmlinuz
    6.52 -
    6.53 -vmlinuz: vmlinux
    6.54 -	$(Q)$(MAKE) $(build)=arch/xen/boot vmlinuz
    6.55 -
    6.56 -XINSTALL_NAME ?= $(KERNELRELEASE)
    6.57 -install: vmlinuz
    6.58 -	mkdir -p $(INSTALL_PATH)/boot
    6.59 -	install -m0644 vmlinuz $(INSTALL_PATH)/boot/vmlinuz-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
    6.60 -	install -m0644 vmlinux $(INSTALL_PATH)/boot/vmlinux-syms-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
    6.61 -	install -m0664 .config $(INSTALL_PATH)/boot/config-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
    6.62 -	install -m0664 System.map $(INSTALL_PATH)/boot/System.map-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
    6.63 -
    6.64 -dist:
    6.65 -	$(MAKE) INSTALL_PATH=../install install
    6.66 -
    6.67 -archclean:
    6.68 -	@if [ -e arch/xen/arch ]; then $(MAKE) $(clean)=arch/xen/arch; fi;
    6.69 -	@rm -f arch/xen/arch include/.asm-ignore include/asm-xen/asm
    6.70 -
    6.71 -define archhelp
    6.72 -  echo  '* vmlinuz	- Compressed kernel image'
    6.73 -  echo  '  install	- Install kernel image and config file'
    6.74 -endef
    6.75 -
    6.76 -ifneq ($(XENARCH),)
    6.77 -include	$(srctree)/arch/xen/$(XENARCH)/Makefile
    6.78 -endif
     7.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/boot/Makefile	Mon Oct 25 12:45:34 2004 +0000
     7.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.3 @@ -1,8 +0,0 @@
     7.4 -
     7.5 -OBJCOPYFLAGS := -g --strip-unneeded
     7.6 -
     7.7 -vmlinuz: vmlinux-stripped FORCE
     7.8 -	$(call if_changed,gzip)
     7.9 -
    7.10 -vmlinux-stripped: vmlinux FORCE
    7.11 -	$(call if_changed,objcopy)
     8.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/configs/xen0_defconfig	Mon Oct 25 12:45:34 2004 +0000
     8.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.3 @@ -1,1032 +0,0 @@
     8.4 -#
     8.5 -# Automatically generated make config: don't edit
     8.6 -#
     8.7 -CONFIG_XEN=y
     8.8 -CONFIG_ARCH_XEN=y
     8.9 -CONFIG_NO_IDLE_HZ=y
    8.10 -
    8.11 -#
    8.12 -# XEN
    8.13 -#
    8.14 -CONFIG_XEN_PRIVILEGED_GUEST=y
    8.15 -CONFIG_XEN_PHYSDEV_ACCESS=y
    8.16 -CONFIG_XEN_BLKDEV_BACKEND=y
    8.17 -CONFIG_XEN_NETDEV_BACKEND=y
    8.18 -CONFIG_XEN_BLKDEV_FRONTEND=y
    8.19 -CONFIG_XEN_NETDEV_FRONTEND=y
    8.20 -# CONFIG_XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER is not set
    8.21 -CONFIG_XEN_WRITABLE_PAGETABLES=y
    8.22 -CONFIG_XEN_SCRUB_PAGES=y
    8.23 -CONFIG_FOREIGN_PAGES=y
    8.24 -CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
    8.25 -CONFIG_X86=y
    8.26 -# CONFIG_X86_64 is not set
    8.27 -
    8.28 -#
    8.29 -# Code maturity level options
    8.30 -#
    8.31 -CONFIG_EXPERIMENTAL=y
    8.32 -# CONFIG_CLEAN_COMPILE is not set
    8.33 -CONFIG_BROKEN=y
    8.34 -CONFIG_BROKEN_ON_SMP=y
    8.35 -
    8.36 -#
    8.37 -# General setup
    8.38 -#
    8.39 -CONFIG_SWAP=y
    8.40 -CONFIG_SYSVIPC=y
    8.41 -# CONFIG_POSIX_MQUEUE is not set
    8.42 -# CONFIG_BSD_PROCESS_ACCT is not set
    8.43 -CONFIG_SYSCTL=y
    8.44 -# CONFIG_AUDIT is not set
    8.45 -CONFIG_LOG_BUF_SHIFT=14
    8.46 -CONFIG_HOTPLUG=y
    8.47 -# CONFIG_IKCONFIG is not set
    8.48 -# CONFIG_EMBEDDED is not set
    8.49 -CONFIG_KALLSYMS=y
    8.50 -# CONFIG_KALLSYMS_ALL is not set
    8.51 -# CONFIG_KALLSYMS_EXTRA_PASS is not set
    8.52 -CONFIG_FUTEX=y
    8.53 -CONFIG_EPOLL=y
    8.54 -CONFIG_IOSCHED_NOOP=y
    8.55 -CONFIG_IOSCHED_AS=y
    8.56 -CONFIG_IOSCHED_DEADLINE=y
    8.57 -CONFIG_IOSCHED_CFQ=y
    8.58 -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    8.59 -
    8.60 -#
    8.61 -# Loadable module support
    8.62 -#
    8.63 -CONFIG_MODULES=y
    8.64 -CONFIG_MODULE_UNLOAD=y
    8.65 -# CONFIG_MODULE_FORCE_UNLOAD is not set
    8.66 -CONFIG_OBSOLETE_MODPARM=y
    8.67 -# CONFIG_MODVERSIONS is not set
    8.68 -CONFIG_KMOD=y
    8.69 -
    8.70 -#
    8.71 -# X86 Processor Configuration
    8.72 -#
    8.73 -CONFIG_XENARCH="i386"
    8.74 -CONFIG_MMU=y
    8.75 -CONFIG_UID16=y
    8.76 -CONFIG_GENERIC_ISA_DMA=y
    8.77 -# CONFIG_M686 is not set
    8.78 -# CONFIG_MPENTIUMII is not set
    8.79 -# CONFIG_MPENTIUMIII is not set
    8.80 -# CONFIG_MPENTIUMM is not set
    8.81 -CONFIG_MPENTIUM4=y
    8.82 -# CONFIG_MK6 is not set
    8.83 -# CONFIG_MK7 is not set
    8.84 -# CONFIG_MK8 is not set
    8.85 -# CONFIG_MCRUSOE is not set
    8.86 -# CONFIG_MCYRIXIII is not set
    8.87 -# CONFIG_MVIAC3_2 is not set
    8.88 -# CONFIG_X86_GENERIC is not set
    8.89 -CONFIG_X86_CMPXCHG=y
    8.90 -CONFIG_X86_XADD=y
    8.91 -CONFIG_X86_L1_CACHE_SHIFT=7
    8.92 -CONFIG_RWSEM_XCHGADD_ALGORITHM=y
    8.93 -CONFIG_X86_WP_WORKS_OK=y
    8.94 -CONFIG_X86_INVLPG=y
    8.95 -CONFIG_X86_BSWAP=y
    8.96 -CONFIG_X86_POPAD_OK=y
    8.97 -CONFIG_X86_GOOD_APIC=y
    8.98 -CONFIG_X86_INTEL_USERCOPY=y
    8.99 -CONFIG_X86_USE_PPRO_CHECKSUM=y
   8.100 -# CONFIG_HPET_TIMER is not set
   8.101 -# CONFIG_HPET_EMULATE_RTC is not set
   8.102 -# CONFIG_SMP is not set
   8.103 -CONFIG_PREEMPT=y
   8.104 -CONFIG_X86_CPUID=y
   8.105 -
   8.106 -#
   8.107 -# Firmware Drivers
   8.108 -#
   8.109 -# CONFIG_EDD is not set
   8.110 -CONFIG_NOHIGHMEM=y
   8.111 -# CONFIG_HIGHMEM4G is not set
   8.112 -CONFIG_HAVE_DEC_LOCK=y
   8.113 -# CONFIG_REGPARM is not set
   8.114 -
   8.115 -#
   8.116 -# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
   8.117 -#
   8.118 -CONFIG_PCI=y
   8.119 -# CONFIG_PCI_GOBIOS is not set
   8.120 -# CONFIG_PCI_GOMMCONFIG is not set
   8.121 -CONFIG_PCI_GODIRECT=y
   8.122 -# CONFIG_PCI_GOANY is not set
   8.123 -CONFIG_PCI_DIRECT=y
   8.124 -CONFIG_PCI_LEGACY_PROC=y
   8.125 -# CONFIG_PCI_NAMES is not set
   8.126 -CONFIG_ISA=y
   8.127 -# CONFIG_EISA is not set
   8.128 -# CONFIG_MCA is not set
   8.129 -# CONFIG_SCx200 is not set
   8.130 -
   8.131 -#
   8.132 -# PCMCIA/CardBus support
   8.133 -#
   8.134 -CONFIG_PCMCIA=m
   8.135 -# CONFIG_PCMCIA_DEBUG is not set
   8.136 -CONFIG_YENTA=m
   8.137 -CONFIG_CARDBUS=y
   8.138 -# CONFIG_PD6729 is not set
   8.139 -# CONFIG_I82092 is not set
   8.140 -# CONFIG_I82365 is not set
   8.141 -# CONFIG_TCIC is not set
   8.142 -CONFIG_PCMCIA_PROBE=y
   8.143 -
   8.144 -#
   8.145 -# PCI Hotplug Support
   8.146 -#
   8.147 -# CONFIG_HOTPLUG_PCI is not set
   8.148 -
   8.149 -#
   8.150 -# Kernel hacking
   8.151 -#
   8.152 -CONFIG_DEBUG_KERNEL=y
   8.153 -CONFIG_EARLY_PRINTK=y
   8.154 -# CONFIG_DEBUG_STACKOVERFLOW is not set
   8.155 -# CONFIG_DEBUG_STACK_USAGE is not set
   8.156 -# CONFIG_DEBUG_SLAB is not set
   8.157 -CONFIG_MAGIC_SYSRQ=y
   8.158 -# CONFIG_DEBUG_SPINLOCK is not set
   8.159 -# CONFIG_DEBUG_PAGEALLOC is not set
   8.160 -# CONFIG_DEBUG_INFO is not set
   8.161 -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   8.162 -# CONFIG_FRAME_POINTER is not set
   8.163 -# CONFIG_4KSTACKS is not set
   8.164 -CONFIG_X86_BIOS_REBOOT=y
   8.165 -CONFIG_X86_STD_RESOURCES=y
   8.166 -CONFIG_PC=y
   8.167 -
   8.168 -#
   8.169 -# Executable file formats
   8.170 -#
   8.171 -CONFIG_BINFMT_ELF=y
   8.172 -# CONFIG_BINFMT_AOUT is not set
   8.173 -# CONFIG_BINFMT_MISC is not set
   8.174 -
   8.175 -#
   8.176 -# Device Drivers
   8.177 -#
   8.178 -
   8.179 -#
   8.180 -# Generic Driver Options
   8.181 -#
   8.182 -# CONFIG_STANDALONE is not set
   8.183 -CONFIG_PREVENT_FIRMWARE_BUILD=y
   8.184 -# CONFIG_FW_LOADER is not set
   8.185 -# CONFIG_DEBUG_DRIVER is not set
   8.186 -
   8.187 -#
   8.188 -# Memory Technology Devices (MTD)
   8.189 -#
   8.190 -# CONFIG_MTD is not set
   8.191 -
   8.192 -#
   8.193 -# Parallel port support
   8.194 -#
   8.195 -# CONFIG_PARPORT is not set
   8.196 -
   8.197 -#
   8.198 -# Plug and Play support
   8.199 -#
   8.200 -# CONFIG_PNP is not set
   8.201 -
   8.202 -#
   8.203 -# Block devices
   8.204 -#
   8.205 -# CONFIG_BLK_DEV_FD is not set
   8.206 -# CONFIG_BLK_DEV_XD is not set
   8.207 -# CONFIG_BLK_CPQ_DA is not set
   8.208 -# CONFIG_BLK_CPQ_CISS_DA is not set
   8.209 -# CONFIG_BLK_DEV_DAC960 is not set
   8.210 -# CONFIG_BLK_DEV_UMEM is not set
   8.211 -CONFIG_BLK_DEV_LOOP=y
   8.212 -# CONFIG_BLK_DEV_CRYPTOLOOP is not set
   8.213 -CONFIG_BLK_DEV_NBD=y
   8.214 -# CONFIG_BLK_DEV_SX8 is not set
   8.215 -CONFIG_BLK_DEV_RAM=y
   8.216 -CONFIG_BLK_DEV_RAM_SIZE=4096
   8.217 -CONFIG_BLK_DEV_INITRD=y
   8.218 -# CONFIG_LBD is not set
   8.219 -
   8.220 -#
   8.221 -# ATA/ATAPI/MFM/RLL support
   8.222 -#
   8.223 -CONFIG_IDE=y
   8.224 -CONFIG_BLK_DEV_IDE=y
   8.225 -
   8.226 -#
   8.227 -# Please see Documentation/ide.txt for help/info on IDE drives
   8.228 -#
   8.229 -# CONFIG_BLK_DEV_IDE_SATA is not set
   8.230 -# CONFIG_BLK_DEV_HD_IDE is not set
   8.231 -CONFIG_BLK_DEV_IDEDISK=y
   8.232 -# CONFIG_IDEDISK_MULTI_MODE is not set
   8.233 -# CONFIG_BLK_DEV_IDECS is not set
   8.234 -CONFIG_BLK_DEV_IDECD=y
   8.235 -# CONFIG_BLK_DEV_IDETAPE is not set
   8.236 -# CONFIG_BLK_DEV_IDEFLOPPY is not set
   8.237 -# CONFIG_BLK_DEV_IDESCSI is not set
   8.238 -# CONFIG_IDE_TASK_IOCTL is not set
   8.239 -# CONFIG_IDE_TASKFILE_IO is not set
   8.240 -
   8.241 -#
   8.242 -# IDE chipset support/bugfixes
   8.243 -#
   8.244 -CONFIG_IDE_GENERIC=y
   8.245 -# CONFIG_BLK_DEV_CMD640 is not set
   8.246 -CONFIG_BLK_DEV_IDEPCI=y
   8.247 -# CONFIG_IDEPCI_SHARE_IRQ is not set
   8.248 -# CONFIG_BLK_DEV_OFFBOARD is not set
   8.249 -CONFIG_BLK_DEV_GENERIC=y
   8.250 -# CONFIG_BLK_DEV_OPTI621 is not set
   8.251 -# CONFIG_BLK_DEV_RZ1000 is not set
   8.252 -CONFIG_BLK_DEV_IDEDMA_PCI=y
   8.253 -# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
   8.254 -CONFIG_IDEDMA_PCI_AUTO=y
   8.255 -# CONFIG_IDEDMA_ONLYDISK is not set
   8.256 -CONFIG_BLK_DEV_ADMA=y
   8.257 -# CONFIG_BLK_DEV_AEC62XX is not set
   8.258 -# CONFIG_BLK_DEV_ALI15X3 is not set
   8.259 -# CONFIG_BLK_DEV_AMD74XX is not set
   8.260 -# CONFIG_BLK_DEV_ATIIXP is not set
   8.261 -# CONFIG_BLK_DEV_CMD64X is not set
   8.262 -# CONFIG_BLK_DEV_TRIFLEX is not set
   8.263 -# CONFIG_BLK_DEV_CY82C693 is not set
   8.264 -# CONFIG_BLK_DEV_CS5520 is not set
   8.265 -# CONFIG_BLK_DEV_CS5530 is not set
   8.266 -# CONFIG_BLK_DEV_HPT34X is not set
   8.267 -# CONFIG_BLK_DEV_HPT366 is not set
   8.268 -# CONFIG_BLK_DEV_SC1200 is not set
   8.269 -CONFIG_BLK_DEV_PIIX=y
   8.270 -# CONFIG_BLK_DEV_NS87415 is not set
   8.271 -# CONFIG_BLK_DEV_PDC202XX_OLD is not set
   8.272 -# CONFIG_BLK_DEV_PDC202XX_NEW is not set
   8.273 -CONFIG_BLK_DEV_SVWKS=y
   8.274 -# CONFIG_BLK_DEV_SIIMAGE is not set
   8.275 -# CONFIG_BLK_DEV_SIS5513 is not set
   8.276 -# CONFIG_BLK_DEV_SLC90E66 is not set
   8.277 -# CONFIG_BLK_DEV_TRM290 is not set
   8.278 -# CONFIG_BLK_DEV_VIA82CXXX is not set
   8.279 -# CONFIG_IDE_ARM is not set
   8.280 -# CONFIG_IDE_CHIPSETS is not set
   8.281 -CONFIG_BLK_DEV_IDEDMA=y
   8.282 -# CONFIG_IDEDMA_IVB is not set
   8.283 -CONFIG_IDEDMA_AUTO=y
   8.284 -# CONFIG_BLK_DEV_HD is not set
   8.285 -
   8.286 -#
   8.287 -# SCSI device support
   8.288 -#
   8.289 -CONFIG_SCSI=y
   8.290 -CONFIG_SCSI_PROC_FS=y
   8.291 -
   8.292 -#
   8.293 -# SCSI support type (disk, tape, CD-ROM)
   8.294 -#
   8.295 -CONFIG_BLK_DEV_SD=y
   8.296 -# CONFIG_CHR_DEV_ST is not set
   8.297 -# CONFIG_CHR_DEV_OSST is not set
   8.298 -# CONFIG_BLK_DEV_SR is not set
   8.299 -# CONFIG_CHR_DEV_SG is not set
   8.300 -
   8.301 -#
   8.302 -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
   8.303 -#
   8.304 -# CONFIG_SCSI_MULTI_LUN is not set
   8.305 -# CONFIG_SCSI_CONSTANTS is not set
   8.306 -# CONFIG_SCSI_LOGGING is not set
   8.307 -
   8.308 -#
   8.309 -# SCSI Transport Attributes
   8.310 -#
   8.311 -# CONFIG_SCSI_SPI_ATTRS is not set
   8.312 -# CONFIG_SCSI_FC_ATTRS is not set
   8.313 -
   8.314 -#
   8.315 -# SCSI low-level drivers
   8.316 -#
   8.317 -CONFIG_BLK_DEV_3W_XXXX_RAID=y
   8.318 -# CONFIG_SCSI_3W_9XXX is not set
   8.319 -# CONFIG_SCSI_7000FASST is not set
   8.320 -# CONFIG_SCSI_ACARD is not set
   8.321 -# CONFIG_SCSI_AHA152X is not set
   8.322 -# CONFIG_SCSI_AHA1542 is not set
   8.323 -CONFIG_SCSI_AACRAID=y
   8.324 -CONFIG_SCSI_AIC7XXX=y
   8.325 -CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
   8.326 -CONFIG_AIC7XXX_RESET_DELAY_MS=15000
   8.327 -# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set
   8.328 -CONFIG_AIC7XXX_DEBUG_ENABLE=y
   8.329 -CONFIG_AIC7XXX_DEBUG_MASK=0
   8.330 -CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
   8.331 -# CONFIG_SCSI_AIC7XXX_OLD is not set
   8.332 -CONFIG_SCSI_AIC79XX=y
   8.333 -CONFIG_AIC79XX_CMDS_PER_DEVICE=32
   8.334 -CONFIG_AIC79XX_RESET_DELAY_MS=15000
   8.335 -# CONFIG_AIC79XX_BUILD_FIRMWARE is not set
   8.336 -# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
   8.337 -CONFIG_AIC79XX_DEBUG_ENABLE=y
   8.338 -CONFIG_AIC79XX_DEBUG_MASK=0
   8.339 -CONFIG_AIC79XX_REG_PRETTY_PRINT=y
   8.340 -# CONFIG_SCSI_DPT_I2O is not set
   8.341 -# CONFIG_SCSI_ADVANSYS is not set
   8.342 -# CONFIG_SCSI_IN2000 is not set
   8.343 -CONFIG_SCSI_MEGARAID=y
   8.344 -CONFIG_SCSI_SATA=y
   8.345 -# CONFIG_SCSI_SATA_SVW is not set
   8.346 -CONFIG_SCSI_ATA_PIIX=y
   8.347 -# CONFIG_SCSI_SATA_NV is not set
   8.348 -CONFIG_SCSI_SATA_PROMISE=y
   8.349 -CONFIG_SCSI_SATA_SX4=y
   8.350 -CONFIG_SCSI_SATA_SIL=y
   8.351 -# CONFIG_SCSI_SATA_SIS is not set
   8.352 -# CONFIG_SCSI_SATA_VIA is not set
   8.353 -# CONFIG_SCSI_SATA_VITESSE is not set
   8.354 -CONFIG_SCSI_BUSLOGIC=y
   8.355 -# CONFIG_SCSI_OMIT_FLASHPOINT is not set
   8.356 -# CONFIG_SCSI_CPQFCTS is not set
   8.357 -# CONFIG_SCSI_DMX3191D is not set
   8.358 -# CONFIG_SCSI_DTC3280 is not set
   8.359 -# CONFIG_SCSI_EATA is not set
   8.360 -# CONFIG_SCSI_EATA_PIO is not set
   8.361 -# CONFIG_SCSI_FUTURE_DOMAIN is not set
   8.362 -# CONFIG_SCSI_GDTH is not set
   8.363 -# CONFIG_SCSI_GENERIC_NCR5380 is not set
   8.364 -# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
   8.365 -# CONFIG_SCSI_IPS is not set
   8.366 -# CONFIG_SCSI_INITIO is not set
   8.367 -# CONFIG_SCSI_INIA100 is not set
   8.368 -# CONFIG_SCSI_NCR53C406A is not set
   8.369 -# CONFIG_SCSI_SYM53C8XX_2 is not set
   8.370 -# CONFIG_SCSI_IPR is not set
   8.371 -# CONFIG_SCSI_PAS16 is not set
   8.372 -# CONFIG_SCSI_PCI2000 is not set
   8.373 -# CONFIG_SCSI_PCI2220I is not set
   8.374 -# CONFIG_SCSI_PSI240I is not set
   8.375 -# CONFIG_SCSI_QLOGIC_FAS is not set
   8.376 -# CONFIG_SCSI_QLOGIC_ISP is not set
   8.377 -# CONFIG_SCSI_QLOGIC_FC is not set
   8.378 -# CONFIG_SCSI_QLOGIC_1280 is not set
   8.379 -CONFIG_SCSI_QLA2XXX=y
   8.380 -# CONFIG_SCSI_QLA21XX is not set
   8.381 -# CONFIG_SCSI_QLA22XX is not set
   8.382 -# CONFIG_SCSI_QLA2300 is not set
   8.383 -# CONFIG_SCSI_QLA2322 is not set
   8.384 -# CONFIG_SCSI_QLA6312 is not set
   8.385 -# CONFIG_SCSI_QLA6322 is not set
   8.386 -# CONFIG_SCSI_SEAGATE is not set
   8.387 -# CONFIG_SCSI_SYM53C416 is not set
   8.388 -# CONFIG_SCSI_DC395x is not set
   8.389 -# CONFIG_SCSI_DC390T is not set
   8.390 -# CONFIG_SCSI_T128 is not set
   8.391 -# CONFIG_SCSI_U14_34F is not set
   8.392 -# CONFIG_SCSI_ULTRASTOR is not set
   8.393 -# CONFIG_SCSI_NSP32 is not set
   8.394 -# CONFIG_SCSI_DEBUG is not set
   8.395 -
   8.396 -#
   8.397 -# PCMCIA SCSI adapter support
   8.398 -#
   8.399 -# CONFIG_PCMCIA_AHA152X is not set
   8.400 -# CONFIG_PCMCIA_FDOMAIN is not set
   8.401 -# CONFIG_PCMCIA_NINJA_SCSI is not set
   8.402 -# CONFIG_PCMCIA_QLOGIC is not set
   8.403 -# CONFIG_PCMCIA_SYM53C500 is not set
   8.404 -
   8.405 -#
   8.406 -# Old CD-ROM drivers (not SCSI, not IDE)
   8.407 -#
   8.408 -# CONFIG_CD_NO_IDESCSI is not set
   8.409 -
   8.410 -#
   8.411 -# Multi-device support (RAID and LVM)
   8.412 -#
   8.413 -CONFIG_MD=y
   8.414 -CONFIG_BLK_DEV_MD=y
   8.415 -# CONFIG_MD_LINEAR is not set
   8.416 -CONFIG_MD_RAID0=y
   8.417 -CONFIG_MD_RAID1=y
   8.418 -CONFIG_MD_RAID5=y
   8.419 -# CONFIG_MD_RAID6 is not set
   8.420 -# CONFIG_MD_MULTIPATH is not set
   8.421 -CONFIG_BLK_DEV_DM=y
   8.422 -# CONFIG_DM_CRYPT is not set
   8.423 -CONFIG_DM_SNAPSHOT=y
   8.424 -CONFIG_DM_MIRROR=y
   8.425 -# CONFIG_DM_ZERO is not set
   8.426 -
   8.427 -#
   8.428 -# Fusion MPT device support
   8.429 -#
   8.430 -# CONFIG_FUSION is not set
   8.431 -
   8.432 -#
   8.433 -# IEEE 1394 (FireWire) support
   8.434 -#
   8.435 -# CONFIG_IEEE1394 is not set
   8.436 -
   8.437 -#
   8.438 -# I2O device support
   8.439 -#
   8.440 -# CONFIG_I2O is not set
   8.441 -
   8.442 -#
   8.443 -# Networking support
   8.444 -#
   8.445 -CONFIG_NET=y
   8.446 -
   8.447 -#
   8.448 -# Networking options
   8.449 -#
   8.450 -CONFIG_PACKET=y
   8.451 -# CONFIG_PACKET_MMAP is not set
   8.452 -# CONFIG_NETLINK_DEV is not set
   8.453 -CONFIG_UNIX=y
   8.454 -# CONFIG_NET_KEY is not set
   8.455 -CONFIG_INET=y
   8.456 -# CONFIG_IP_MULTICAST is not set
   8.457 -# CONFIG_IP_ADVANCED_ROUTER is not set
   8.458 -CONFIG_IP_PNP=y
   8.459 -CONFIG_IP_PNP_DHCP=y
   8.460 -# CONFIG_IP_PNP_BOOTP is not set
   8.461 -# CONFIG_IP_PNP_RARP is not set
   8.462 -# CONFIG_NET_IPIP is not set
   8.463 -# CONFIG_NET_IPGRE is not set
   8.464 -# CONFIG_ARPD is not set
   8.465 -# CONFIG_SYN_COOKIES is not set
   8.466 -# CONFIG_INET_AH is not set
   8.467 -# CONFIG_INET_ESP is not set
   8.468 -# CONFIG_INET_IPCOMP is not set
   8.469 -
   8.470 -#
   8.471 -# IP: Virtual Server Configuration
   8.472 -#
   8.473 -# CONFIG_IP_VS is not set
   8.474 -# CONFIG_IPV6 is not set
   8.475 -CONFIG_NETFILTER=y
   8.476 -# CONFIG_NETFILTER_DEBUG is not set
   8.477 -CONFIG_BRIDGE_NETFILTER=y
   8.478 -
   8.479 -#
   8.480 -# IP: Netfilter Configuration
   8.481 -#
   8.482 -CONFIG_IP_NF_CONNTRACK=m
   8.483 -CONFIG_IP_NF_FTP=m
   8.484 -# CONFIG_IP_NF_IRC is not set
   8.485 -# CONFIG_IP_NF_TFTP is not set
   8.486 -# CONFIG_IP_NF_AMANDA is not set
   8.487 -# CONFIG_IP_NF_QUEUE is not set
   8.488 -CONFIG_IP_NF_IPTABLES=m
   8.489 -# CONFIG_IP_NF_MATCH_LIMIT is not set
   8.490 -# CONFIG_IP_NF_MATCH_IPRANGE is not set
   8.491 -# CONFIG_IP_NF_MATCH_MAC is not set
   8.492 -# CONFIG_IP_NF_MATCH_PKTTYPE is not set
   8.493 -# CONFIG_IP_NF_MATCH_MARK is not set
   8.494 -# CONFIG_IP_NF_MATCH_MULTIPORT is not set
   8.495 -# CONFIG_IP_NF_MATCH_TOS is not set
   8.496 -# CONFIG_IP_NF_MATCH_RECENT is not set
   8.497 -# CONFIG_IP_NF_MATCH_ECN is not set
   8.498 -# CONFIG_IP_NF_MATCH_DSCP is not set
   8.499 -# CONFIG_IP_NF_MATCH_AH_ESP is not set
   8.500 -# CONFIG_IP_NF_MATCH_LENGTH is not set
   8.501 -# CONFIG_IP_NF_MATCH_TTL is not set
   8.502 -# CONFIG_IP_NF_MATCH_TCPMSS is not set
   8.503 -# CONFIG_IP_NF_MATCH_HELPER is not set
   8.504 -# CONFIG_IP_NF_MATCH_STATE is not set
   8.505 -# CONFIG_IP_NF_MATCH_CONNTRACK is not set
   8.506 -# CONFIG_IP_NF_MATCH_OWNER is not set
   8.507 -# CONFIG_IP_NF_MATCH_PHYSDEV is not set
   8.508 -# CONFIG_IP_NF_FILTER is not set
   8.509 -# CONFIG_IP_NF_NAT is not set
   8.510 -# CONFIG_IP_NF_MANGLE is not set
   8.511 -# CONFIG_IP_NF_TARGET_LOG is not set
   8.512 -# CONFIG_IP_NF_TARGET_ULOG is not set
   8.513 -# CONFIG_IP_NF_TARGET_TCPMSS is not set
   8.514 -# CONFIG_IP_NF_ARPTABLES is not set
   8.515 -# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
   8.516 -# CONFIG_IP_NF_COMPAT_IPFWADM is not set
   8.517 -# CONFIG_IP_NF_RAW is not set
   8.518 -# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
   8.519 -# CONFIG_IP_NF_MATCH_REALM is not set
   8.520 -
   8.521 -#
   8.522 -# Bridge: Netfilter Configuration
   8.523 -#
   8.524 -# CONFIG_BRIDGE_NF_EBTABLES is not set
   8.525 -
   8.526 -#
   8.527 -# SCTP Configuration (EXPERIMENTAL)
   8.528 -#
   8.529 -# CONFIG_IP_SCTP is not set
   8.530 -# CONFIG_ATM is not set
   8.531 -CONFIG_BRIDGE=y
   8.532 -# CONFIG_VLAN_8021Q is not set
   8.533 -# CONFIG_DECNET is not set
   8.534 -# CONFIG_LLC2 is not set
   8.535 -# CONFIG_IPX is not set
   8.536 -# CONFIG_ATALK is not set
   8.537 -# CONFIG_X25 is not set
   8.538 -# CONFIG_LAPB is not set
   8.539 -# CONFIG_NET_DIVERT is not set
   8.540 -# CONFIG_ECONET is not set
   8.541 -# CONFIG_WAN_ROUTER is not set
   8.542 -# CONFIG_NET_HW_FLOWCONTROL is not set
   8.543 -
   8.544 -#
   8.545 -# QoS and/or fair queueing
   8.546 -#
   8.547 -# CONFIG_NET_SCHED is not set
   8.548 -# CONFIG_NET_CLS_ROUTE is not set
   8.549 -
   8.550 -#
   8.551 -# Network testing
   8.552 -#
   8.553 -# CONFIG_NET_PKTGEN is not set
   8.554 -# CONFIG_NETPOLL is not set
   8.555 -# CONFIG_NET_POLL_CONTROLLER is not set
   8.556 -# CONFIG_HAMRADIO is not set
   8.557 -# CONFIG_IRDA is not set
   8.558 -# CONFIG_BT is not set
   8.559 -CONFIG_NETDEVICES=y
   8.560 -# CONFIG_DUMMY is not set
   8.561 -# CONFIG_BONDING is not set
   8.562 -# CONFIG_EQUALIZER is not set
   8.563 -# CONFIG_TUN is not set
   8.564 -
   8.565 -#
   8.566 -# ARCnet devices
   8.567 -#
   8.568 -# CONFIG_ARCNET is not set
   8.569 -
   8.570 -#
   8.571 -# Ethernet (10 or 100Mbit)
   8.572 -#
   8.573 -CONFIG_NET_ETHERNET=y
   8.574 -CONFIG_MII=y
   8.575 -# CONFIG_HAPPYMEAL is not set
   8.576 -# CONFIG_SUNGEM is not set
   8.577 -CONFIG_NET_VENDOR_3COM=y
   8.578 -# CONFIG_EL1 is not set
   8.579 -# CONFIG_EL2 is not set
   8.580 -# CONFIG_ELPLUS is not set
   8.581 -# CONFIG_EL16 is not set
   8.582 -# CONFIG_EL3 is not set
   8.583 -# CONFIG_3C515 is not set
   8.584 -CONFIG_VORTEX=y
   8.585 -# CONFIG_TYPHOON is not set
   8.586 -# CONFIG_LANCE is not set
   8.587 -# CONFIG_NET_VENDOR_SMC is not set
   8.588 -# CONFIG_NET_VENDOR_RACAL is not set
   8.589 -
   8.590 -#
   8.591 -# Tulip family network device support
   8.592 -#
   8.593 -CONFIG_NET_TULIP=y
   8.594 -# CONFIG_DE2104X is not set
   8.595 -CONFIG_TULIP=y
   8.596 -# CONFIG_TULIP_MWI is not set
   8.597 -# CONFIG_TULIP_MMIO is not set
   8.598 -# CONFIG_TULIP_NAPI is not set
   8.599 -# CONFIG_DE4X5 is not set
   8.600 -# CONFIG_WINBOND_840 is not set
   8.601 -# CONFIG_DM9102 is not set
   8.602 -# CONFIG_PCMCIA_XIRCOM is not set
   8.603 -# CONFIG_PCMCIA_XIRTULIP is not set
   8.604 -# CONFIG_AT1700 is not set
   8.605 -# CONFIG_DEPCA is not set
   8.606 -# CONFIG_HP100 is not set
   8.607 -# CONFIG_NET_ISA is not set
   8.608 -CONFIG_NET_PCI=y
   8.609 -CONFIG_PCNET32=y
   8.610 -# CONFIG_AMD8111_ETH is not set
   8.611 -# CONFIG_ADAPTEC_STARFIRE is not set
   8.612 -# CONFIG_AC3200 is not set
   8.613 -# CONFIG_APRICOT is not set
   8.614 -# CONFIG_B44 is not set
   8.615 -# CONFIG_FORCEDETH is not set
   8.616 -# CONFIG_CS89x0 is not set
   8.617 -# CONFIG_DGRS is not set
   8.618 -# CONFIG_EEPRO100 is not set
   8.619 -CONFIG_E100=y
   8.620 -# CONFIG_E100_NAPI is not set
   8.621 -# CONFIG_FEALNX is not set
   8.622 -# CONFIG_NATSEMI is not set
   8.623 -# CONFIG_NE2K_PCI is not set
   8.624 -# CONFIG_8139CP is not set
   8.625 -CONFIG_8139TOO=y
   8.626 -CONFIG_8139TOO_PIO=y
   8.627 -# CONFIG_8139TOO_TUNE_TWISTER is not set
   8.628 -# CONFIG_8139TOO_8129 is not set
   8.629 -# CONFIG_8139_OLD_RX_RESET is not set
   8.630 -# CONFIG_SIS900 is not set
   8.631 -# CONFIG_EPIC100 is not set
   8.632 -# CONFIG_SUNDANCE is not set
   8.633 -# CONFIG_TLAN is not set
   8.634 -CONFIG_VIA_RHINE=y
   8.635 -# CONFIG_VIA_RHINE_MMIO is not set
   8.636 -# CONFIG_VIA_VELOCITY is not set
   8.637 -# CONFIG_NET_POCKET is not set
   8.638 -
   8.639 -#
   8.640 -# Ethernet (1000 Mbit)
   8.641 -#
   8.642 -CONFIG_ACENIC=y
   8.643 -# CONFIG_ACENIC_OMIT_TIGON_I is not set
   8.644 -# CONFIG_DL2K is not set
   8.645 -CONFIG_E1000=y
   8.646 -# CONFIG_E1000_NAPI is not set
   8.647 -# CONFIG_NS83820 is not set
   8.648 -# CONFIG_HAMACHI is not set
   8.649 -# CONFIG_YELLOWFIN is not set
   8.650 -# CONFIG_R8169 is not set
   8.651 -# CONFIG_SK98LIN is not set
   8.652 -CONFIG_TIGON3=y
   8.653 -
   8.654 -#
   8.655 -# Ethernet (10000 Mbit)
   8.656 -#
   8.657 -# CONFIG_IXGB is not set
   8.658 -# CONFIG_S2IO is not set
   8.659 -
   8.660 -#
   8.661 -# Token Ring devices
   8.662 -#
   8.663 -# CONFIG_TR is not set
   8.664 -
   8.665 -#
   8.666 -# Wireless LAN (non-hamradio)
   8.667 -#
   8.668 -# CONFIG_NET_RADIO is not set
   8.669 -
   8.670 -#
   8.671 -# PCMCIA network device support
   8.672 -#
   8.673 -# CONFIG_NET_PCMCIA is not set
   8.674 -
   8.675 -#
   8.676 -# Wan interfaces
   8.677 -#
   8.678 -# CONFIG_WAN is not set
   8.679 -# CONFIG_FDDI is not set
   8.680 -# CONFIG_HIPPI is not set
   8.681 -# CONFIG_PPP is not set
   8.682 -# CONFIG_SLIP is not set
   8.683 -# CONFIG_NET_FC is not set
   8.684 -# CONFIG_SHAPER is not set
   8.685 -# CONFIG_NETCONSOLE is not set
   8.686 -
   8.687 -#
   8.688 -# ISDN subsystem
   8.689 -#
   8.690 -# CONFIG_ISDN is not set
   8.691 -
   8.692 -#
   8.693 -# Telephony Support
   8.694 -#
   8.695 -# CONFIG_PHONE is not set
   8.696 -
   8.697 -#
   8.698 -# Input device support
   8.699 -#
   8.700 -CONFIG_INPUT=y
   8.701 -
   8.702 -#
   8.703 -# Userland interfaces
   8.704 -#
   8.705 -CONFIG_INPUT_MOUSEDEV=y
   8.706 -CONFIG_INPUT_MOUSEDEV_PSAUX=y
   8.707 -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
   8.708 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
   8.709 -# CONFIG_INPUT_JOYDEV is not set
   8.710 -# CONFIG_INPUT_TSDEV is not set
   8.711 -# CONFIG_INPUT_EVDEV is not set
   8.712 -# CONFIG_INPUT_EVBUG is not set
   8.713 -
   8.714 -#
   8.715 -# Input I/O drivers
   8.716 -#
   8.717 -# CONFIG_GAMEPORT is not set
   8.718 -CONFIG_SOUND_GAMEPORT=y
   8.719 -CONFIG_SERIO=y
   8.720 -CONFIG_SERIO_I8042=y
   8.721 -CONFIG_SERIO_SERPORT=y
   8.722 -# CONFIG_SERIO_CT82C710 is not set
   8.723 -# CONFIG_SERIO_PCIPS2 is not set
   8.724 -
   8.725 -#
   8.726 -# Input Device Drivers
   8.727 -#
   8.728 -CONFIG_INPUT_KEYBOARD=y
   8.729 -CONFIG_KEYBOARD_ATKBD=y
   8.730 -# CONFIG_KEYBOARD_SUNKBD is not set
   8.731 -# CONFIG_KEYBOARD_LKKBD is not set
   8.732 -# CONFIG_KEYBOARD_XTKBD is not set
   8.733 -# CONFIG_KEYBOARD_NEWTON is not set
   8.734 -CONFIG_INPUT_MOUSE=y
   8.735 -CONFIG_MOUSE_PS2=y
   8.736 -# CONFIG_MOUSE_SERIAL is not set
   8.737 -# CONFIG_MOUSE_INPORT is not set
   8.738 -# CONFIG_MOUSE_LOGIBM is not set
   8.739 -# CONFIG_MOUSE_PC110PAD is not set
   8.740 -# CONFIG_MOUSE_VSXXXAA is not set
   8.741 -# CONFIG_INPUT_JOYSTICK is not set
   8.742 -# CONFIG_INPUT_TOUCHSCREEN is not set
   8.743 -# CONFIG_INPUT_MISC is not set
   8.744 -
   8.745 -#
   8.746 -# Character devices
   8.747 -#
   8.748 -CONFIG_VT=y
   8.749 -CONFIG_VT_CONSOLE=y
   8.750 -CONFIG_HW_CONSOLE=y
   8.751 -# CONFIG_SERIAL_NONSTANDARD is not set
   8.752 -
   8.753 -#
   8.754 -# Serial drivers
   8.755 -#
   8.756 -# CONFIG_SERIAL_8250 is not set
   8.757 -
   8.758 -#
   8.759 -# Non-8250 serial port support
   8.760 -#
   8.761 -CONFIG_UNIX98_PTYS=y
   8.762 -CONFIG_LEGACY_PTYS=y
   8.763 -CONFIG_LEGACY_PTY_COUNT=256
   8.764 -# CONFIG_QIC02_TAPE is not set
   8.765 -
   8.766 -#
   8.767 -# IPMI
   8.768 -#
   8.769 -# CONFIG_IPMI_HANDLER is not set
   8.770 -
   8.771 -#
   8.772 -# Watchdog Cards
   8.773 -#
   8.774 -# CONFIG_WATCHDOG is not set
   8.775 -# CONFIG_HW_RANDOM is not set
   8.776 -# CONFIG_NVRAM is not set
   8.777 -# CONFIG_RTC is not set
   8.778 -# CONFIG_GEN_RTC is not set
   8.779 -# CONFIG_DTLK is not set
   8.780 -# CONFIG_R3964 is not set
   8.781 -# CONFIG_APPLICOM is not set
   8.782 -# CONFIG_SONYPI is not set
   8.783 -
   8.784 -#
   8.785 -# Ftape, the floppy tape device driver
   8.786 -#
   8.787 -# CONFIG_FTAPE is not set
   8.788 -# CONFIG_AGP is not set
   8.789 -# CONFIG_DRM is not set
   8.790 -
   8.791 -#
   8.792 -# PCMCIA character devices
   8.793 -#
   8.794 -# CONFIG_SYNCLINK_CS is not set
   8.795 -# CONFIG_MWAVE is not set
   8.796 -# CONFIG_RAW_DRIVER is not set
   8.797 -# CONFIG_HANGCHECK_TIMER is not set
   8.798 -
   8.799 -#
   8.800 -# I2C support
   8.801 -#
   8.802 -# CONFIG_I2C is not set
   8.803 -
   8.804 -#
   8.805 -# Dallas's 1-wire bus
   8.806 -#
   8.807 -# CONFIG_W1 is not set
   8.808 -
   8.809 -#
   8.810 -# Misc devices
   8.811 -#
   8.812 -# CONFIG_IBM_ASM is not set
   8.813 -
   8.814 -#
   8.815 -# Multimedia devices
   8.816 -#
   8.817 -# CONFIG_VIDEO_DEV is not set
   8.818 -
   8.819 -#
   8.820 -# Digital Video Broadcasting Devices
   8.821 -#
   8.822 -# CONFIG_DVB is not set
   8.823 -
   8.824 -#
   8.825 -# Graphics support
   8.826 -#
   8.827 -# CONFIG_FB is not set
   8.828 -# CONFIG_VIDEO_SELECT is not set
   8.829 -
   8.830 -#
   8.831 -# Console display driver support
   8.832 -#
   8.833 -CONFIG_VGA_CONSOLE=y
   8.834 -# CONFIG_MDA_CONSOLE is not set
   8.835 -CONFIG_DUMMY_CONSOLE=y
   8.836 -
   8.837 -#
   8.838 -# Sound
   8.839 -#
   8.840 -# CONFIG_SOUND is not set
   8.841 -
   8.842 -#
   8.843 -# USB support
   8.844 -#
   8.845 -# CONFIG_USB is not set
   8.846 -
   8.847 -#
   8.848 -# USB Gadget Support
   8.849 -#
   8.850 -# CONFIG_USB_GADGET is not set
   8.851 -
   8.852 -#
   8.853 -# File systems
   8.854 -#
   8.855 -CONFIG_EXT2_FS=y
   8.856 -# CONFIG_EXT2_FS_XATTR is not set
   8.857 -CONFIG_EXT3_FS=y
   8.858 -CONFIG_EXT3_FS_XATTR=y
   8.859 -# CONFIG_EXT3_FS_POSIX_ACL is not set
   8.860 -# CONFIG_EXT3_FS_SECURITY is not set
   8.861 -CONFIG_JBD=y
   8.862 -# CONFIG_JBD_DEBUG is not set
   8.863 -CONFIG_FS_MBCACHE=y
   8.864 -CONFIG_REISERFS_FS=y
   8.865 -# CONFIG_REISERFS_CHECK is not set
   8.866 -# CONFIG_REISERFS_PROC_INFO is not set
   8.867 -# CONFIG_REISERFS_FS_XATTR is not set
   8.868 -# CONFIG_JFS_FS is not set
   8.869 -# CONFIG_XFS_FS is not set
   8.870 -# CONFIG_MINIX_FS is not set
   8.871 -# CONFIG_ROMFS_FS is not set
   8.872 -# CONFIG_QUOTA is not set
   8.873 -# CONFIG_AUTOFS_FS is not set
   8.874 -# CONFIG_AUTOFS4_FS is not set
   8.875 -
   8.876 -#
   8.877 -# CD-ROM/DVD Filesystems
   8.878 -#
   8.879 -CONFIG_ISO9660_FS=y
   8.880 -CONFIG_JOLIET=y
   8.881 -CONFIG_ZISOFS=y
   8.882 -CONFIG_ZISOFS_FS=y
   8.883 -# CONFIG_UDF_FS is not set
   8.884 -
   8.885 -#
   8.886 -# DOS/FAT/NT Filesystems
   8.887 -#
   8.888 -CONFIG_FAT_FS=m
   8.889 -CONFIG_MSDOS_FS=m
   8.890 -CONFIG_VFAT_FS=m
   8.891 -CONFIG_FAT_DEFAULT_CODEPAGE=437
   8.892 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
   8.893 -# CONFIG_NTFS_FS is not set
   8.894 -
   8.895 -#
   8.896 -# Pseudo filesystems
   8.897 -#
   8.898 -CONFIG_PROC_FS=y
   8.899 -CONFIG_PROC_KCORE=y
   8.900 -CONFIG_SYSFS=y
   8.901 -# CONFIG_DEVFS_FS is not set
   8.902 -# CONFIG_DEVPTS_FS_XATTR is not set
   8.903 -CONFIG_TMPFS=y
   8.904 -# CONFIG_HUGETLBFS is not set
   8.905 -# CONFIG_HUGETLB_PAGE is not set
   8.906 -CONFIG_RAMFS=y
   8.907 -
   8.908 -#
   8.909 -# Miscellaneous filesystems
   8.910 -#
   8.911 -# CONFIG_ADFS_FS is not set
   8.912 -# CONFIG_AFFS_FS is not set
   8.913 -# CONFIG_HFS_FS is not set
   8.914 -# CONFIG_HFSPLUS_FS is not set
   8.915 -# CONFIG_BEFS_FS is not set
   8.916 -# CONFIG_BFS_FS is not set
   8.917 -# CONFIG_EFS_FS is not set
   8.918 -# CONFIG_CRAMFS is not set
   8.919 -# CONFIG_VXFS_FS is not set
   8.920 -# CONFIG_HPFS_FS is not set
   8.921 -# CONFIG_QNX4FS_FS is not set
   8.922 -# CONFIG_SYSV_FS is not set
   8.923 -# CONFIG_UFS_FS is not set
   8.924 -
   8.925 -#
   8.926 -# Network File Systems
   8.927 -#
   8.928 -CONFIG_NFS_FS=y
   8.929 -CONFIG_NFS_V3=y
   8.930 -# CONFIG_NFS_V4 is not set
   8.931 -# CONFIG_NFS_DIRECTIO is not set
   8.932 -CONFIG_NFSD=m
   8.933 -CONFIG_NFSD_V3=y
   8.934 -# CONFIG_NFSD_V4 is not set
   8.935 -CONFIG_NFSD_TCP=y
   8.936 -CONFIG_ROOT_NFS=y
   8.937 -CONFIG_LOCKD=y
   8.938 -CONFIG_LOCKD_V4=y
   8.939 -CONFIG_EXPORTFS=m
   8.940 -CONFIG_SUNRPC=y
   8.941 -# CONFIG_RPCSEC_GSS_KRB5 is not set
   8.942 -# CONFIG_SMB_FS is not set
   8.943 -# CONFIG_CIFS is not set
   8.944 -# CONFIG_NCP_FS is not set
   8.945 -# CONFIG_CODA_FS is not set
   8.946 -# CONFIG_AFS_FS is not set
   8.947 -
   8.948 -#
   8.949 -# Partition Types
   8.950 -#
   8.951 -# CONFIG_PARTITION_ADVANCED is not set
   8.952 -CONFIG_MSDOS_PARTITION=y
   8.953 -
   8.954 -#
   8.955 -# Native Language Support
   8.956 -#
   8.957 -CONFIG_NLS=y
   8.958 -CONFIG_NLS_DEFAULT="iso8859-1"
   8.959 -CONFIG_NLS_CODEPAGE_437=y
   8.960 -# CONFIG_NLS_CODEPAGE_737 is not set
   8.961 -# CONFIG_NLS_CODEPAGE_775 is not set
   8.962 -# CONFIG_NLS_CODEPAGE_850 is not set
   8.963 -# CONFIG_NLS_CODEPAGE_852 is not set
   8.964 -# CONFIG_NLS_CODEPAGE_855 is not set
   8.965 -# CONFIG_NLS_CODEPAGE_857 is not set
   8.966 -# CONFIG_NLS_CODEPAGE_860 is not set
   8.967 -# CONFIG_NLS_CODEPAGE_861 is not set
   8.968 -# CONFIG_NLS_CODEPAGE_862 is not set
   8.969 -# CONFIG_NLS_CODEPAGE_863 is not set
   8.970 -# CONFIG_NLS_CODEPAGE_864 is not set
   8.971 -# CONFIG_NLS_CODEPAGE_865 is not set
   8.972 -# CONFIG_NLS_CODEPAGE_866 is not set
   8.973 -# CONFIG_NLS_CODEPAGE_869 is not set
   8.974 -# CONFIG_NLS_CODEPAGE_936 is not set
   8.975 -# CONFIG_NLS_CODEPAGE_950 is not set
   8.976 -# CONFIG_NLS_CODEPAGE_932 is not set
   8.977 -# CONFIG_NLS_CODEPAGE_949 is not set
   8.978 -# CONFIG_NLS_CODEPAGE_874 is not set
   8.979 -# CONFIG_NLS_ISO8859_8 is not set
   8.980 -# CONFIG_NLS_CODEPAGE_1250 is not set
   8.981 -# CONFIG_NLS_CODEPAGE_1251 is not set
   8.982 -# CONFIG_NLS_ASCII is not set
   8.983 -CONFIG_NLS_ISO8859_1=y
   8.984 -# CONFIG_NLS_ISO8859_2 is not set
   8.985 -# CONFIG_NLS_ISO8859_3 is not set
   8.986 -# CONFIG_NLS_ISO8859_4 is not set
   8.987 -# CONFIG_NLS_ISO8859_5 is not set
   8.988 -# CONFIG_NLS_ISO8859_6 is not set
   8.989 -# CONFIG_NLS_ISO8859_7 is not set
   8.990 -# CONFIG_NLS_ISO8859_9 is not set
   8.991 -# CONFIG_NLS_ISO8859_13 is not set
   8.992 -# CONFIG_NLS_ISO8859_14 is not set
   8.993 -# CONFIG_NLS_ISO8859_15 is not set
   8.994 -# CONFIG_NLS_KOI8_R is not set
   8.995 -# CONFIG_NLS_KOI8_U is not set
   8.996 -# CONFIG_NLS_UTF8 is not set
   8.997 -
   8.998 -#
   8.999 -# Security options
  8.1000 -#
  8.1001 -# CONFIG_SECURITY is not set
  8.1002 -
  8.1003 -#
  8.1004 -# Cryptographic options
  8.1005 -#
  8.1006 -CONFIG_CRYPTO=y
  8.1007 -CONFIG_CRYPTO_HMAC=y
  8.1008 -# CONFIG_CRYPTO_NULL is not set
  8.1009 -# CONFIG_CRYPTO_MD4 is not set
  8.1010 -CONFIG_CRYPTO_MD5=m
  8.1011 -CONFIG_CRYPTO_SHA1=m
  8.1012 -# CONFIG_CRYPTO_SHA256 is not set
  8.1013 -# CONFIG_CRYPTO_SHA512 is not set
  8.1014 -CONFIG_CRYPTO_DES=m
  8.1015 -# CONFIG_CRYPTO_BLOWFISH is not set
  8.1016 -# CONFIG_CRYPTO_TWOFISH is not set
  8.1017 -# CONFIG_CRYPTO_SERPENT is not set
  8.1018 -# CONFIG_CRYPTO_AES_586 is not set
  8.1019 -# CONFIG_CRYPTO_CAST5 is not set
  8.1020 -# CONFIG_CRYPTO_CAST6 is not set
  8.1021 -# CONFIG_CRYPTO_TEA is not set
  8.1022 -# CONFIG_CRYPTO_ARC4 is not set
  8.1023 -# CONFIG_CRYPTO_KHAZAD is not set
  8.1024 -# CONFIG_CRYPTO_DEFLATE is not set
  8.1025 -# CONFIG_CRYPTO_MICHAEL_MIC is not set
  8.1026 -CONFIG_CRYPTO_CRC32C=m
  8.1027 -# CONFIG_CRYPTO_TEST is not set
  8.1028 -
  8.1029 -#
  8.1030 -# Library routines
  8.1031 -#
  8.1032 -# CONFIG_CRC_CCITT is not set
  8.1033 -CONFIG_CRC32=y
  8.1034 -CONFIG_LIBCRC32C=y
  8.1035 -CONFIG_ZLIB_INFLATE=y
     9.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/configs/xenU_defconfig	Mon Oct 25 12:45:34 2004 +0000
     9.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.3 @@ -1,475 +0,0 @@
     9.4 -#
     9.5 -# Automatically generated make config: don't edit
     9.6 -#
     9.7 -CONFIG_XEN=y
     9.8 -CONFIG_ARCH_XEN=y
     9.9 -CONFIG_NO_IDLE_HZ=y
    9.10 -
    9.11 -#
    9.12 -# XEN
    9.13 -#
    9.14 -# CONFIG_XEN_PRIVILEGED_GUEST is not set
    9.15 -# CONFIG_XEN_PHYSDEV_ACCESS is not set
    9.16 -# CONFIG_XEN_BLKDEV_BACKEND is not set
    9.17 -# CONFIG_XEN_NETDEV_BACKEND is not set
    9.18 -CONFIG_XEN_BLKDEV_FRONTEND=y
    9.19 -CONFIG_XEN_NETDEV_FRONTEND=y
    9.20 -# CONFIG_XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER is not set
    9.21 -CONFIG_XEN_WRITABLE_PAGETABLES=y
    9.22 -CONFIG_XEN_SCRUB_PAGES=y
    9.23 -CONFIG_FOREIGN_PAGES=y
    9.24 -CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
    9.25 -CONFIG_X86=y
    9.26 -# CONFIG_X86_64 is not set
    9.27 -
    9.28 -#
    9.29 -# Code maturity level options
    9.30 -#
    9.31 -CONFIG_EXPERIMENTAL=y
    9.32 -CONFIG_CLEAN_COMPILE=y
    9.33 -CONFIG_BROKEN_ON_SMP=y
    9.34 -
    9.35 -#
    9.36 -# General setup
    9.37 -#
    9.38 -CONFIG_SWAP=y
    9.39 -CONFIG_SYSVIPC=y
    9.40 -# CONFIG_POSIX_MQUEUE is not set
    9.41 -# CONFIG_BSD_PROCESS_ACCT is not set
    9.42 -CONFIG_SYSCTL=y
    9.43 -# CONFIG_AUDIT is not set
    9.44 -CONFIG_LOG_BUF_SHIFT=14
    9.45 -CONFIG_HOTPLUG=y
    9.46 -# CONFIG_IKCONFIG is not set
    9.47 -# CONFIG_EMBEDDED is not set
    9.48 -CONFIG_KALLSYMS=y
    9.49 -# CONFIG_KALLSYMS_EXTRA_PASS is not set
    9.50 -CONFIG_FUTEX=y
    9.51 -CONFIG_EPOLL=y
    9.52 -CONFIG_IOSCHED_NOOP=y
    9.53 -CONFIG_IOSCHED_AS=y
    9.54 -CONFIG_IOSCHED_DEADLINE=y
    9.55 -CONFIG_IOSCHED_CFQ=y
    9.56 -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    9.57 -
    9.58 -#
    9.59 -# Loadable module support
    9.60 -#
    9.61 -CONFIG_MODULES=y
    9.62 -CONFIG_MODULE_UNLOAD=y
    9.63 -# CONFIG_MODULE_FORCE_UNLOAD is not set
    9.64 -CONFIG_OBSOLETE_MODPARM=y
    9.65 -# CONFIG_MODVERSIONS is not set
    9.66 -CONFIG_KMOD=y
    9.67 -
    9.68 -#
    9.69 -# X86 Processor Configuration
    9.70 -#
    9.71 -CONFIG_XENARCH="i386"
    9.72 -CONFIG_MMU=y
    9.73 -CONFIG_UID16=y
    9.74 -CONFIG_GENERIC_ISA_DMA=y
    9.75 -# CONFIG_M686 is not set
    9.76 -# CONFIG_MPENTIUMII is not set
    9.77 -# CONFIG_MPENTIUMIII is not set
    9.78 -# CONFIG_MPENTIUMM is not set
    9.79 -CONFIG_MPENTIUM4=y
    9.80 -# CONFIG_MK6 is not set
    9.81 -# CONFIG_MK7 is not set
    9.82 -# CONFIG_MK8 is not set
    9.83 -# CONFIG_MCRUSOE is not set
    9.84 -# CONFIG_MCYRIXIII is not set
    9.85 -# CONFIG_MVIAC3_2 is not set
    9.86 -# CONFIG_X86_GENERIC is not set
    9.87 -CONFIG_X86_CMPXCHG=y
    9.88 -CONFIG_X86_XADD=y
    9.89 -CONFIG_X86_L1_CACHE_SHIFT=7
    9.90 -CONFIG_RWSEM_XCHGADD_ALGORITHM=y
    9.91 -CONFIG_X86_WP_WORKS_OK=y
    9.92 -CONFIG_X86_INVLPG=y
    9.93 -CONFIG_X86_BSWAP=y
    9.94 -CONFIG_X86_POPAD_OK=y
    9.95 -CONFIG_X86_GOOD_APIC=y
    9.96 -CONFIG_X86_INTEL_USERCOPY=y
    9.97 -CONFIG_X86_USE_PPRO_CHECKSUM=y
    9.98 -# CONFIG_HPET_TIMER is not set
    9.99 -# CONFIG_HPET_EMULATE_RTC is not set
   9.100 -# CONFIG_SMP is not set
   9.101 -CONFIG_PREEMPT=y
   9.102 -CONFIG_X86_CPUID=y
   9.103 -
   9.104 -#
   9.105 -# Firmware Drivers
   9.106 -#
   9.107 -# CONFIG_EDD is not set
   9.108 -CONFIG_NOHIGHMEM=y
   9.109 -# CONFIG_HIGHMEM4G is not set
   9.110 -CONFIG_HAVE_DEC_LOCK=y
   9.111 -# CONFIG_REGPARM is not set
   9.112 -
   9.113 -#
   9.114 -# Kernel hacking
   9.115 -#
   9.116 -# CONFIG_DEBUG_KERNEL is not set
   9.117 -CONFIG_EARLY_PRINTK=y
   9.118 -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   9.119 -# CONFIG_FRAME_POINTER is not set
   9.120 -# CONFIG_4KSTACKS is not set
   9.121 -CONFIG_X86_BIOS_REBOOT=y
   9.122 -CONFIG_X86_STD_RESOURCES=y
   9.123 -CONFIG_PC=y
   9.124 -
   9.125 -#
   9.126 -# Executable file formats
   9.127 -#
   9.128 -CONFIG_BINFMT_ELF=y
   9.129 -# CONFIG_BINFMT_AOUT is not set
   9.130 -# CONFIG_BINFMT_MISC is not set
   9.131 -
   9.132 -#
   9.133 -# Device Drivers
   9.134 -#
   9.135 -
   9.136 -#
   9.137 -# Generic Driver Options
   9.138 -#
   9.139 -CONFIG_STANDALONE=y
   9.140 -CONFIG_PREVENT_FIRMWARE_BUILD=y
   9.141 -# CONFIG_FW_LOADER is not set
   9.142 -
   9.143 -#
   9.144 -# Block devices
   9.145 -#
   9.146 -# CONFIG_BLK_DEV_FD is not set
   9.147 -CONFIG_BLK_DEV_LOOP=m
   9.148 -# CONFIG_BLK_DEV_CRYPTOLOOP is not set
   9.149 -CONFIG_BLK_DEV_NBD=m
   9.150 -CONFIG_BLK_DEV_RAM=y
   9.151 -CONFIG_BLK_DEV_RAM_SIZE=4096
   9.152 -CONFIG_BLK_DEV_INITRD=y
   9.153 -# CONFIG_LBD is not set
   9.154 -
   9.155 -#
   9.156 -# SCSI device support
   9.157 -#
   9.158 -CONFIG_SCSI=m
   9.159 -CONFIG_SCSI_PROC_FS=y
   9.160 -
   9.161 -#
   9.162 -# SCSI support type (disk, tape, CD-ROM)
   9.163 -#
   9.164 -CONFIG_BLK_DEV_SD=m
   9.165 -# CONFIG_CHR_DEV_ST is not set
   9.166 -# CONFIG_CHR_DEV_OSST is not set
   9.167 -# CONFIG_BLK_DEV_SR is not set
   9.168 -# CONFIG_CHR_DEV_SG is not set
   9.169 -
   9.170 -#
   9.171 -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
   9.172 -#
   9.173 -# CONFIG_SCSI_MULTI_LUN is not set
   9.174 -# CONFIG_SCSI_CONSTANTS is not set
   9.175 -# CONFIG_SCSI_LOGGING is not set
   9.176 -
   9.177 -#
   9.178 -# SCSI Transport Attributes
   9.179 -#
   9.180 -# CONFIG_SCSI_SPI_ATTRS is not set
   9.181 -# CONFIG_SCSI_FC_ATTRS is not set
   9.182 -
   9.183 -#
   9.184 -# SCSI low-level drivers
   9.185 -#
   9.186 -# CONFIG_SCSI_AIC7XXX_OLD is not set
   9.187 -# CONFIG_SCSI_SATA is not set
   9.188 -# CONFIG_SCSI_EATA_PIO is not set
   9.189 -# CONFIG_SCSI_DEBUG is not set
   9.190 -
   9.191 -#
   9.192 -# Multi-device support (RAID and LVM)
   9.193 -#
   9.194 -# CONFIG_MD is not set
   9.195 -
   9.196 -#
   9.197 -# Networking support
   9.198 -#
   9.199 -CONFIG_NET=y
   9.200 -
   9.201 -#
   9.202 -# Networking options
   9.203 -#
   9.204 -CONFIG_PACKET=y
   9.205 -# CONFIG_PACKET_MMAP is not set
   9.206 -# CONFIG_NETLINK_DEV is not set
   9.207 -CONFIG_UNIX=y
   9.208 -# CONFIG_NET_KEY is not set
   9.209 -CONFIG_INET=y
   9.210 -# CONFIG_IP_MULTICAST is not set
   9.211 -# CONFIG_IP_ADVANCED_ROUTER is not set
   9.212 -CONFIG_IP_PNP=y
   9.213 -# CONFIG_IP_PNP_DHCP is not set
   9.214 -# CONFIG_IP_PNP_BOOTP is not set
   9.215 -# CONFIG_IP_PNP_RARP is not set
   9.216 -# CONFIG_NET_IPIP is not set
   9.217 -# CONFIG_NET_IPGRE is not set
   9.218 -# CONFIG_ARPD is not set
   9.219 -# CONFIG_SYN_COOKIES is not set
   9.220 -# CONFIG_INET_AH is not set
   9.221 -# CONFIG_INET_ESP is not set
   9.222 -# CONFIG_INET_IPCOMP is not set
   9.223 -# CONFIG_IPV6 is not set
   9.224 -# CONFIG_NETFILTER is not set
   9.225 -
   9.226 -#
   9.227 -# SCTP Configuration (EXPERIMENTAL)
   9.228 -#
   9.229 -# CONFIG_IP_SCTP is not set
   9.230 -# CONFIG_ATM is not set
   9.231 -# CONFIG_BRIDGE is not set
   9.232 -# CONFIG_VLAN_8021Q is not set
   9.233 -# CONFIG_DECNET is not set
   9.234 -# CONFIG_LLC2 is not set
   9.235 -# CONFIG_IPX is not set
   9.236 -# CONFIG_ATALK is not set
   9.237 -# CONFIG_X25 is not set
   9.238 -# CONFIG_LAPB is not set
   9.239 -# CONFIG_NET_DIVERT is not set
   9.240 -# CONFIG_ECONET is not set
   9.241 -# CONFIG_WAN_ROUTER is not set
   9.242 -# CONFIG_NET_HW_FLOWCONTROL is not set
   9.243 -
   9.244 -#
   9.245 -# QoS and/or fair queueing
   9.246 -#
   9.247 -# CONFIG_NET_SCHED is not set
   9.248 -# CONFIG_NET_CLS_ROUTE is not set
   9.249 -
   9.250 -#
   9.251 -# Network testing
   9.252 -#
   9.253 -# CONFIG_NET_PKTGEN is not set
   9.254 -# CONFIG_NETPOLL is not set
   9.255 -# CONFIG_NET_POLL_CONTROLLER is not set
   9.256 -# CONFIG_HAMRADIO is not set
   9.257 -# CONFIG_IRDA is not set
   9.258 -# CONFIG_BT is not set
   9.259 -CONFIG_NETDEVICES=y
   9.260 -# CONFIG_DUMMY is not set
   9.261 -# CONFIG_BONDING is not set
   9.262 -# CONFIG_EQUALIZER is not set
   9.263 -# CONFIG_TUN is not set
   9.264 -
   9.265 -#
   9.266 -# Ethernet (10 or 100Mbit)
   9.267 -#
   9.268 -# CONFIG_NET_ETHERNET is not set
   9.269 -
   9.270 -#
   9.271 -# Ethernet (1000 Mbit)
   9.272 -#
   9.273 -
   9.274 -#
   9.275 -# Ethernet (10000 Mbit)
   9.276 -#
   9.277 -
   9.278 -#
   9.279 -# Token Ring devices
   9.280 -#
   9.281 -
   9.282 -#
   9.283 -# Wireless LAN (non-hamradio)
   9.284 -#
   9.285 -# CONFIG_NET_RADIO is not set
   9.286 -
   9.287 -#
   9.288 -# Wan interfaces
   9.289 -#
   9.290 -# CONFIG_WAN is not set
   9.291 -# CONFIG_PPP is not set
   9.292 -# CONFIG_SLIP is not set
   9.293 -# CONFIG_SHAPER is not set
   9.294 -# CONFIG_NETCONSOLE is not set
   9.295 -CONFIG_UNIX98_PTYS=y
   9.296 -
   9.297 -#
   9.298 -# File systems
   9.299 -#
   9.300 -CONFIG_EXT2_FS=y
   9.301 -# CONFIG_EXT2_FS_XATTR is not set
   9.302 -CONFIG_EXT3_FS=y
   9.303 -CONFIG_EXT3_FS_XATTR=y
   9.304 -# CONFIG_EXT3_FS_POSIX_ACL is not set
   9.305 -# CONFIG_EXT3_FS_SECURITY is not set
   9.306 -CONFIG_JBD=y
   9.307 -# CONFIG_JBD_DEBUG is not set
   9.308 -CONFIG_FS_MBCACHE=y
   9.309 -CONFIG_REISERFS_FS=y
   9.310 -# CONFIG_REISERFS_CHECK is not set
   9.311 -# CONFIG_REISERFS_PROC_INFO is not set
   9.312 -# CONFIG_REISERFS_FS_XATTR is not set
   9.313 -# CONFIG_JFS_FS is not set
   9.314 -# CONFIG_XFS_FS is not set
   9.315 -# CONFIG_MINIX_FS is not set
   9.316 -# CONFIG_ROMFS_FS is not set
   9.317 -# CONFIG_QUOTA is not set
   9.318 -CONFIG_AUTOFS_FS=y
   9.319 -CONFIG_AUTOFS4_FS=y
   9.320 -
   9.321 -#
   9.322 -# CD-ROM/DVD Filesystems
   9.323 -#
   9.324 -CONFIG_ISO9660_FS=y
   9.325 -CONFIG_JOLIET=y
   9.326 -CONFIG_ZISOFS=y
   9.327 -CONFIG_ZISOFS_FS=y
   9.328 -# CONFIG_UDF_FS is not set
   9.329 -
   9.330 -#
   9.331 -# DOS/FAT/NT Filesystems
   9.332 -#
   9.333 -CONFIG_FAT_FS=m
   9.334 -CONFIG_MSDOS_FS=m
   9.335 -CONFIG_VFAT_FS=m
   9.336 -CONFIG_FAT_DEFAULT_CODEPAGE=437
   9.337 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
   9.338 -# CONFIG_NTFS_FS is not set
   9.339 -
   9.340 -#
   9.341 -# Pseudo filesystems
   9.342 -#
   9.343 -CONFIG_PROC_FS=y
   9.344 -CONFIG_PROC_KCORE=y
   9.345 -CONFIG_SYSFS=y
   9.346 -# CONFIG_DEVFS_FS is not set
   9.347 -CONFIG_DEVPTS_FS_XATTR=y
   9.348 -# CONFIG_DEVPTS_FS_SECURITY is not set
   9.349 -CONFIG_TMPFS=y
   9.350 -# CONFIG_HUGETLBFS is not set
   9.351 -# CONFIG_HUGETLB_PAGE is not set
   9.352 -CONFIG_RAMFS=y
   9.353 -
   9.354 -#
   9.355 -# Miscellaneous filesystems
   9.356 -#
   9.357 -# CONFIG_ADFS_FS is not set
   9.358 -# CONFIG_AFFS_FS is not set
   9.359 -# CONFIG_HFS_FS is not set
   9.360 -# CONFIG_HFSPLUS_FS is not set
   9.361 -# CONFIG_BEFS_FS is not set
   9.362 -# CONFIG_BFS_FS is not set
   9.363 -# CONFIG_EFS_FS is not set
   9.364 -# CONFIG_CRAMFS is not set
   9.365 -# CONFIG_VXFS_FS is not set
   9.366 -# CONFIG_HPFS_FS is not set
   9.367 -# CONFIG_QNX4FS_FS is not set
   9.368 -# CONFIG_SYSV_FS is not set
   9.369 -# CONFIG_UFS_FS is not set
   9.370 -
   9.371 -#
   9.372 -# Network File Systems
   9.373 -#
   9.374 -CONFIG_NFS_FS=y
   9.375 -CONFIG_NFS_V3=y
   9.376 -# CONFIG_NFS_V4 is not set
   9.377 -# CONFIG_NFS_DIRECTIO is not set
   9.378 -# CONFIG_NFSD is not set
   9.379 -CONFIG_ROOT_NFS=y
   9.380 -CONFIG_LOCKD=y
   9.381 -CONFIG_LOCKD_V4=y
   9.382 -# CONFIG_EXPORTFS is not set
   9.383 -CONFIG_SUNRPC=y
   9.384 -# CONFIG_RPCSEC_GSS_KRB5 is not set
   9.385 -# CONFIG_SMB_FS is not set
   9.386 -# CONFIG_CIFS is not set
   9.387 -# CONFIG_NCP_FS is not set
   9.388 -# CONFIG_CODA_FS is not set
   9.389 -# CONFIG_AFS_FS is not set
   9.390 -
   9.391 -#
   9.392 -# Partition Types
   9.393 -#
   9.394 -# CONFIG_PARTITION_ADVANCED is not set
   9.395 -CONFIG_MSDOS_PARTITION=y
   9.396 -
   9.397 -#
   9.398 -# Native Language Support
   9.399 -#
   9.400 -CONFIG_NLS=y
   9.401 -CONFIG_NLS_DEFAULT="iso8859-1"
   9.402 -CONFIG_NLS_CODEPAGE_437=y
   9.403 -# CONFIG_NLS_CODEPAGE_737 is not set
   9.404 -# CONFIG_NLS_CODEPAGE_775 is not set
   9.405 -# CONFIG_NLS_CODEPAGE_850 is not set
   9.406 -# CONFIG_NLS_CODEPAGE_852 is not set
   9.407 -# CONFIG_NLS_CODEPAGE_855 is not set
   9.408 -# CONFIG_NLS_CODEPAGE_857 is not set
   9.409 -# CONFIG_NLS_CODEPAGE_860 is not set
   9.410 -# CONFIG_NLS_CODEPAGE_861 is not set
   9.411 -# CONFIG_NLS_CODEPAGE_862 is not set
   9.412 -# CONFIG_NLS_CODEPAGE_863 is not set
   9.413 -# CONFIG_NLS_CODEPAGE_864 is not set
   9.414 -# CONFIG_NLS_CODEPAGE_865 is not set
   9.415 -# CONFIG_NLS_CODEPAGE_866 is not set
   9.416 -# CONFIG_NLS_CODEPAGE_869 is not set
   9.417 -# CONFIG_NLS_CODEPAGE_936 is not set
   9.418 -# CONFIG_NLS_CODEPAGE_950 is not set
   9.419 -# CONFIG_NLS_CODEPAGE_932 is not set
   9.420 -# CONFIG_NLS_CODEPAGE_949 is not set
   9.421 -# CONFIG_NLS_CODEPAGE_874 is not set
   9.422 -# CONFIG_NLS_ISO8859_8 is not set
   9.423 -# CONFIG_NLS_CODEPAGE_1250 is not set
   9.424 -# CONFIG_NLS_CODEPAGE_1251 is not set
   9.425 -# CONFIG_NLS_ASCII is not set
   9.426 -CONFIG_NLS_ISO8859_1=y
   9.427 -# CONFIG_NLS_ISO8859_2 is not set
   9.428 -# CONFIG_NLS_ISO8859_3 is not set
   9.429 -# CONFIG_NLS_ISO8859_4 is not set
   9.430 -# CONFIG_NLS_ISO8859_5 is not set
   9.431 -# CONFIG_NLS_ISO8859_6 is not set
   9.432 -# CONFIG_NLS_ISO8859_7 is not set
   9.433 -# CONFIG_NLS_ISO8859_9 is not set
   9.434 -# CONFIG_NLS_ISO8859_13 is not set
   9.435 -# CONFIG_NLS_ISO8859_14 is not set
   9.436 -# CONFIG_NLS_ISO8859_15 is not set
   9.437 -# CONFIG_NLS_KOI8_R is not set
   9.438 -# CONFIG_NLS_KOI8_U is not set
   9.439 -# CONFIG_NLS_UTF8 is not set
   9.440 -
   9.441 -#
   9.442 -# Security options
   9.443 -#
   9.444 -# CONFIG_SECURITY is not set
   9.445 -
   9.446 -#
   9.447 -# Cryptographic options
   9.448 -#
   9.449 -CONFIG_CRYPTO=y
   9.450 -# CONFIG_CRYPTO_HMAC is not set
   9.451 -# CONFIG_CRYPTO_NULL is not set
   9.452 -# CONFIG_CRYPTO_MD4 is not set
   9.453 -CONFIG_CRYPTO_MD5=m
   9.454 -# CONFIG_CRYPTO_SHA1 is not set
   9.455 -# CONFIG_CRYPTO_SHA256 is not set
   9.456 -# CONFIG_CRYPTO_SHA512 is not set
   9.457 -# CONFIG_CRYPTO_DES is not set
   9.458 -# CONFIG_CRYPTO_BLOWFISH is not set
   9.459 -# CONFIG_CRYPTO_TWOFISH is not set
   9.460 -# CONFIG_CRYPTO_SERPENT is not set
   9.461 -# CONFIG_CRYPTO_AES_586 is not set
   9.462 -# CONFIG_CRYPTO_CAST5 is not set
   9.463 -# CONFIG_CRYPTO_CAST6 is not set
   9.464 -# CONFIG_CRYPTO_TEA is not set
   9.465 -# CONFIG_CRYPTO_ARC4 is not set
   9.466 -# CONFIG_CRYPTO_KHAZAD is not set
   9.467 -# CONFIG_CRYPTO_DEFLATE is not set
   9.468 -# CONFIG_CRYPTO_MICHAEL_MIC is not set
   9.469 -CONFIG_CRYPTO_CRC32C=m
   9.470 -# CONFIG_CRYPTO_TEST is not set
   9.471 -
   9.472 -#
   9.473 -# Library routines
   9.474 -#
   9.475 -# CONFIG_CRC_CCITT is not set
   9.476 -# CONFIG_CRC32 is not set
   9.477 -CONFIG_LIBCRC32C=m
   9.478 -CONFIG_ZLIB_INFLATE=y
    10.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/Kconfig	Mon Oct 25 12:45:34 2004 +0000
    10.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.3 @@ -1,937 +0,0 @@
    10.4 -#
    10.5 -# For a description of the syntax of this configuration file,
    10.6 -# see Documentation/kbuild/kconfig-language.txt.
    10.7 -#
    10.8 -
    10.9 -menu "X86 Processor Configuration"
   10.10 -
   10.11 -config XENARCH
   10.12 -	string
   10.13 -	default i386
   10.14 -
   10.15 -config MMU
   10.16 -	bool
   10.17 -	default y
   10.18 -
   10.19 -config SBUS
   10.20 -	bool
   10.21 -
   10.22 -config UID16
   10.23 -	bool
   10.24 -	default y
   10.25 -
   10.26 -config GENERIC_ISA_DMA
   10.27 -	bool
   10.28 -	default y
   10.29 -
   10.30 -
   10.31 -choice
   10.32 -	prompt "Processor family"
   10.33 -	default M686
   10.34 -
   10.35 -#config M386
   10.36 -#	bool "386"
   10.37 -#	---help---
   10.38 -#	  This is the processor type of your CPU. This information is used for
   10.39 -#	  optimizing purposes. In order to compile a kernel that can run on
   10.40 -#	  all x86 CPU types (albeit not optimally fast), you can specify
   10.41 -#	  "386" here.
   10.42 -#
   10.43 -#	  The kernel will not necessarily run on earlier architectures than
   10.44 -#	  the one you have chosen, e.g. a Pentium optimized kernel will run on
   10.45 -#	  a PPro, but not necessarily on a i486.
   10.46 -#
   10.47 -#	  Here are the settings recommended for greatest speed:
   10.48 -#	  - "386" for the AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix/TI
   10.49 -#	  486DLC/DLC2, UMC 486SX-S and NexGen Nx586.  Only "386" kernels
   10.50 -#	  will run on a 386 class machine.
   10.51 -#	  - "486" for the AMD/Cyrix/IBM/Intel 486DX/DX2/DX4 or
   10.52 -#	  SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S.
   10.53 -#	  - "586" for generic Pentium CPUs lacking the TSC
   10.54 -#	  (time stamp counter) register.
   10.55 -#	  - "Pentium-Classic" for the Intel Pentium.
   10.56 -#	  - "Pentium-MMX" for the Intel Pentium MMX.
   10.57 -#	  - "Pentium-Pro" for the Intel Pentium Pro.
   10.58 -#	  - "Pentium-II" for the Intel Pentium II or pre-Coppermine Celeron.
   10.59 -#	  - "Pentium-III" for the Intel Pentium III or Coppermine Celeron.
   10.60 -#	  - "Pentium-4" for the Intel Pentium 4 or P4-based Celeron.
   10.61 -#	  - "K6" for the AMD K6, K6-II and K6-III (aka K6-3D).
   10.62 -#	  - "Athlon" for the AMD K7 family (Athlon/Duron/Thunderbird).
   10.63 -#	  - "Crusoe" for the Transmeta Crusoe series.
   10.64 -#	  - "Winchip-C6" for original IDT Winchip.
   10.65 -#	  - "Winchip-2" for IDT Winchip 2.
   10.66 -#	  - "Winchip-2A" for IDT Winchips with 3dNow! capabilities.
   10.67 -#	  - "CyrixIII/VIA C3" for VIA Cyrix III or VIA C3.
   10.68 -#	  - "VIA C3-2 for VIA C3-2 "Nehemiah" (model 9 and above).
   10.69 -#
   10.70 -#	  If you don't know what to do, choose "386".
   10.71 -
   10.72 -#config M486
   10.73 -#	bool "486"
   10.74 -#	help
   10.75 -#	  Select this for a 486 series processor, either Intel or one of the
   10.76 -#	  compatible processors from AMD, Cyrix, IBM, or Intel.  Includes DX,
   10.77 -#	  DX2, and DX4 variants; also SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or
   10.78 -#	  U5S.
   10.79 -
   10.80 -#config M586
   10.81 -#	bool "586/K5/5x86/6x86/6x86MX"
   10.82 -#	help
   10.83 -#	  Select this for an 586 or 686 series processor such as the AMD K5,
   10.84 -#	  the Intel 5x86 or 6x86, or the Intel 6x86MX.  This choice does not
   10.85 -#	  assume the RDTSC (Read Time Stamp Counter) instruction.
   10.86 -
   10.87 -#config M586TSC
   10.88 -#	bool "Pentium-Classic"
   10.89 -#	help
   10.90 -#	  Select this for a Pentium Classic processor with the RDTSC (Read
   10.91 -#	  Time Stamp Counter) instruction for benchmarking.
   10.92 -
   10.93 -#config M586MMX
   10.94 -#	bool "Pentium-MMX"
   10.95 -#	help
   10.96 -#	  Select this for a Pentium with the MMX graphics/multimedia
   10.97 -#	  extended instructions.
   10.98 -
   10.99 -config M686
  10.100 -	bool "Pentium-Pro"
  10.101 -	help
  10.102 -	  Select this for Intel Pentium Pro chips.  This enables the use of
  10.103 -	  Pentium Pro extended instructions, and disables the init-time guard
  10.104 -	  against the f00f bug found in earlier Pentiums.
  10.105 -
  10.106 -config MPENTIUMII
  10.107 -	bool "Pentium-II/Celeron(pre-Coppermine)"
  10.108 -	help
  10.109 -	  Select this for Intel chips based on the Pentium-II and
  10.110 -	  pre-Coppermine Celeron core.  This option enables an unaligned
  10.111 -	  copy optimization, compiles the kernel with optimization flags
  10.112 -	  tailored for the chip, and applies any applicable Pentium Pro
  10.113 -	  optimizations.
  10.114 -
  10.115 -config MPENTIUMIII
  10.116 -	bool "Pentium-III/Celeron(Coppermine)/Pentium-III Xeon"
  10.117 -	help
  10.118 -	  Select this for Intel chips based on the Pentium-III and
  10.119 -	  Celeron-Coppermine core.  This option enables use of some
  10.120 -	  extended prefetch instructions in addition to the Pentium II
  10.121 -	  extensions.
  10.122 -
  10.123 -config MPENTIUMM
  10.124 -	bool "Pentium M"
  10.125 -	help
  10.126 -	  Select this for Intel Pentium M (not Pentium-4 M)
  10.127 -	  notebook chips.
  10.128 -
  10.129 -config MPENTIUM4
  10.130 -	bool "Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon"
  10.131 -	help
  10.132 -	  Select this for Intel Pentium 4 chips.  This includes the
  10.133 -	  Pentium 4, P4-based Celeron and Xeon, and Pentium-4 M
  10.134 -	  (not Pentium M) chips.  This option enables compile flags
  10.135 -	  optimized for the chip, uses the correct cache shift, and
  10.136 -	  applies any applicable Pentium III optimizations.
  10.137 -
  10.138 -config MK6
  10.139 -	bool "K6/K6-II/K6-III"
  10.140 -	help
  10.141 -	  Select this for an AMD K6-family processor.  Enables use of
  10.142 -	  some extended instructions, and passes appropriate optimization
  10.143 -	  flags to GCC.
  10.144 -
  10.145 -config MK7
  10.146 -	bool "Athlon/Duron/K7"
  10.147 -	help
  10.148 -	  Select this for an AMD Athlon K7-family processor.  Enables use of
  10.149 -	  some extended instructions, and passes appropriate optimization
  10.150 -	  flags to GCC.
  10.151 -
  10.152 -config MK8
  10.153 -	bool "Opteron/Athlon64/Hammer/K8"
  10.154 -	help
  10.155 -	  Select this for an AMD Opteron or Athlon64 Hammer-family processor.  Enables
  10.156 -	  use of some extended instructions, and passes appropriate optimization
  10.157 -	  flags to GCC.
  10.158 -
  10.159 -config MCRUSOE
  10.160 -	bool "Crusoe"
  10.161 -	help
  10.162 -	  Select this for a Transmeta Crusoe processor.  Treats the processor
  10.163 -	  like a 586 with TSC, and sets some GCC optimization flags (like a
  10.164 -	  Pentium Pro with no alignment requirements).
  10.165 -
  10.166 -#config MWINCHIPC6
  10.167 -#	bool "Winchip-C6"
  10.168 -#	help
  10.169 -#	  Select this for an IDT Winchip C6 chip.  Linux and GCC
  10.170 -#	  treat this chip as a 586TSC with some extended instructions
  10.171 -#	  and alignment requirements.
  10.172 -
  10.173 -#config MWINCHIP2
  10.174 -#	bool "Winchip-2"
  10.175 -#	help
  10.176 -#	  Select this for an IDT Winchip-2.  Linux and GCC
  10.177 -#	  treat this chip as a 586TSC with some extended instructions
  10.178 -#	  and alignment requirements.
  10.179 -
  10.180 -#config MWINCHIP3D
  10.181 -#	bool "Winchip-2A/Winchip-3"
  10.182 -#	help
  10.183 -#	  Select this for an IDT Winchip-2A or 3.  Linux and GCC
  10.184 -#	  treat this chip as a 586TSC with some extended instructions
  10.185 -#	  and alignment reqirements.  Also enable out of order memory
  10.186 -#	  stores for this CPU, which can increase performance of some
  10.187 -#	  operations.
  10.188 -
  10.189 -config MCYRIXIII
  10.190 -	bool "CyrixIII/VIA-C3"
  10.191 -	help
  10.192 -	  Select this for a Cyrix III or C3 chip.  Presently Linux and GCC
  10.193 -	  treat this chip as a generic 586. Whilst the CPU is 686 class,
  10.194 -	  it lacks the cmov extension which gcc assumes is present when
  10.195 -	  generating 686 code.
  10.196 -	  Note that Nehemiah (Model 9) and above will not boot with this
  10.197 -	  kernel due to them lacking the 3DNow! instructions used in earlier
  10.198 -	  incarnations of the CPU.
  10.199 -
  10.200 -config MVIAC3_2
  10.201 -	bool "VIA C3-2 (Nehemiah)"
  10.202 -	help
  10.203 -	  Select this for a VIA C3 "Nehemiah". Selecting this enables usage
  10.204 -	  of SSE and tells gcc to treat the CPU as a 686.
  10.205 -	  Note, this kernel will not boot on older (pre model 9) C3s.
  10.206 -
  10.207 -endchoice
  10.208 -
  10.209 -config X86_GENERIC
  10.210 -       bool "Generic x86 support" 
  10.211 -       help
  10.212 -	  Instead of just including optimizations for the selected
  10.213 -	  x86 variant (e.g. PII, Crusoe or Athlon), include some more
  10.214 -	  generic optimizations as well. This will make the kernel
  10.215 -	  perform better on x86 CPUs other than that selected.
  10.216 -
  10.217 -	  This is really intended for distributors who need more
  10.218 -	  generic optimizations.
  10.219 -
  10.220 -#
  10.221 -# Define implied options from the CPU selection here
  10.222 -#
  10.223 -config X86_CMPXCHG
  10.224 -	bool
  10.225 -	depends on !M386
  10.226 -	default y
  10.227 -
  10.228 -config X86_XADD
  10.229 -	bool
  10.230 -	depends on !M386
  10.231 -	default y
  10.232 -
  10.233 -config X86_L1_CACHE_SHIFT
  10.234 -	int
  10.235 -	default "7" if MPENTIUM4 || X86_GENERIC
  10.236 -	default "4" if X86_ELAN || M486 || M386
  10.237 -	default "5" if MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCRUSOE || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2
  10.238 -	default "6" if MK7 || MK8 || MPENTIUMM
  10.239 -
  10.240 -config RWSEM_GENERIC_SPINLOCK
  10.241 -	bool
  10.242 -	depends on M386
  10.243 -	default y
  10.244 -
  10.245 -config RWSEM_XCHGADD_ALGORITHM
  10.246 -	bool
  10.247 -	depends on !M386
  10.248 -	default y
  10.249 -
  10.250 -config X86_PPRO_FENCE
  10.251 -	bool
  10.252 -	depends on M686 || M586MMX || M586TSC || M586 || M486 || M386
  10.253 -	default y
  10.254 -
  10.255 -config X86_F00F_BUG
  10.256 -	bool
  10.257 -	depends on M586MMX || M586TSC || M586 || M486 || M386
  10.258 -	default y
  10.259 -
  10.260 -config X86_WP_WORKS_OK
  10.261 -	bool
  10.262 -	depends on !M386
  10.263 -	default y
  10.264 -
  10.265 -config X86_INVLPG
  10.266 -	bool
  10.267 -	depends on !M386
  10.268 -	default y
  10.269 -
  10.270 -config X86_BSWAP
  10.271 -	bool
  10.272 -	depends on !M386
  10.273 -	default y
  10.274 -
  10.275 -config X86_POPAD_OK
  10.276 -	bool
  10.277 -	depends on !M386
  10.278 -	default y
  10.279 -
  10.280 -config X86_ALIGNMENT_16
  10.281 -	bool
  10.282 -	depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || X86_ELAN || MK6 || M586MMX || M586TSC || M586 || M486 || MVIAC3_2
  10.283 -	default y
  10.284 -
  10.285 -config X86_GOOD_APIC
  10.286 -	bool
  10.287 -	depends on MK7 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || MK8
  10.288 -	default y
  10.289 -
  10.290 -config X86_INTEL_USERCOPY
  10.291 -	bool
  10.292 -	depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7
  10.293 -	default y
  10.294 -
  10.295 -config X86_USE_PPRO_CHECKSUM
  10.296 -	bool
  10.297 -	depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2
  10.298 -	default y
  10.299 -
  10.300 -config X86_USE_3DNOW
  10.301 -	bool
  10.302 -	depends on MCYRIXIII || MK7
  10.303 -	default y
  10.304 -
  10.305 -config X86_OOSTORE
  10.306 -	bool
  10.307 -	depends on (MWINCHIP3D || MWINCHIP2 || MWINCHIPC6) && MTRR
  10.308 -	default y
  10.309 -
  10.310 -config HPET_TIMER
  10.311 -	bool
  10.312 -	default n
  10.313 -#config HPET_TIMER
  10.314 -#	bool "HPET Timer Support"
  10.315 -#	help
  10.316 -#	  This enables the use of the HPET for the kernel's internal timer.
  10.317 -#	  HPET is the next generation timer replacing legacy 8254s.
  10.318 -#	  You can safely choose Y here.  However, HPET will only be
  10.319 -#	  activated if the platform and the BIOS support this feature.
  10.320 -#	  Otherwise the 8254 will be used for timing services.
  10.321 -#
  10.322 -#	  Choose N to continue using the legacy 8254 timer.
  10.323 -
  10.324 -config HPET_EMULATE_RTC
  10.325 -	def_bool HPET_TIMER && RTC=y
  10.326 -
  10.327 -config SMP
  10.328 -	bool
  10.329 -	default n
  10.330 -#config SMP
  10.331 -#	bool "Symmetric multi-processing support"
  10.332 -#	---help---
  10.333 -#	  This enables support for systems with more than one CPU. If you have
  10.334 -#	  a system with only one CPU, like most personal computers, say N. If
  10.335 -#	  you have a system with more than one CPU, say Y.
  10.336 -#
  10.337 -#	  If you say N here, the kernel will run on single and multiprocessor
  10.338 -#	  machines, but will use only one CPU of a multiprocessor machine. If
  10.339 -#	  you say Y here, the kernel will run on many, but not all,
  10.340 -#	  singleprocessor machines. On a singleprocessor machine, the kernel
  10.341 -#	  will run faster if you say N here.
  10.342 -#
  10.343 -#	  Note that if you say Y here and choose architecture "586" or
  10.344 -#	  "Pentium" under "Processor family", the kernel will not work on 486
  10.345 -#	  architectures. Similarly, multiprocessor kernels for the "PPro"
  10.346 -#	  architecture may not work on all Pentium based boards.
  10.347 -#
  10.348 -#	  People using multiprocessor machines who say Y here should also say
  10.349 -#	  Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
  10.350 -#	  Management" code will be disabled if you say Y here.
  10.351 -#
  10.352 -#	  See also the <file:Documentation/smp.txt>,
  10.353 -#	  <file:Documentation/i386/IO-APIC.txt>,
  10.354 -#	  <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
  10.355 -#	  <http://www.tldp.org/docs.html#howto>.
  10.356 -#
  10.357 -#	  If you don't know what to do here, say N.
  10.358 -
  10.359 -config NR_CPUS
  10.360 -	int "Maximum number of CPUs (2-255)"
  10.361 -	range 2 255
  10.362 -	depends on SMP
  10.363 -	default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000
  10.364 -	default "8"
  10.365 -	help
  10.366 -	  This allows you to specify the maximum number of CPUs which this
  10.367 -	  kernel will support.  The maximum supported value is 255 and the
  10.368 -	  minimum value which makes sense is 2.
  10.369 -
  10.370 -	  This is purely to save memory - each supported CPU adds
  10.371 -	  approximately eight kilobytes to the kernel image.
  10.372 -
  10.373 -config SCHED_SMT
  10.374 -	bool "SMT (Hyperthreading) scheduler support"
  10.375 -	depends on SMP
  10.376 -	default off
  10.377 -	help
  10.378 -	  SMT scheduler support improves the CPU scheduler's decision making
  10.379 -	  when dealing with Intel Pentium 4 chips with HyperThreading at a
  10.380 -	  cost of slightly increased overhead in some places. If unsure say
  10.381 -	  N here.
  10.382 -
  10.383 -config PREEMPT
  10.384 -	bool "Preemptible Kernel"
  10.385 -	help
  10.386 -	  This option reduces the latency of the kernel when reacting to
  10.387 -	  real-time or interactive events by allowing a low priority process to
  10.388 -	  be preempted even if it is in kernel mode executing a system call.
  10.389 -	  This allows applications to run more reliably even when the system is
  10.390 -	  under load.
  10.391 -
  10.392 -	  Say Y here if you are building a kernel for a desktop, embedded
  10.393 -	  or real-time system.  Say N if you are unsure.
  10.394 -
  10.395 -#config X86_TSC
  10.396 -#	 bool
  10.397 -#	depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2) && !X86_NUMAQ
  10.398 -#	 default y
  10.399 -
  10.400 -#config X86_MCE
  10.401 -#	 bool "Machine Check Exception"
  10.402 -#	depends on !X86_VOYAGER
  10.403 -#	 ---help---
  10.404 -#	   Machine Check Exception support allows the processor to notify the
  10.405 -#	   kernel if it detects a problem (e.g. overheating, component failure).
  10.406 -#	   The action the kernel takes depends on the severity of the problem,
  10.407 -#	   ranging from a warning message on the console, to halting the machine.
  10.408 -#	   Your processor must be a Pentium or newer to support this - check the
  10.409 -#	   flags in /proc/cpuinfo for mce.  Note that some older Pentium systems
  10.410 -#	   have a design flaw which leads to false MCE events - hence MCE is
  10.411 -#	   disabled on all P5 processors, unless explicitly enabled with "mce"
  10.412 -#	   as a boot argument.  Similarly, if MCE is built in and creates a
  10.413 -#	   problem on some new non-standard machine, you can boot with "nomce"
  10.414 -#	   to disable it.  MCE support simply ignores non-MCE processors like
  10.415 -#	   the 386 and 486, so nearly everyone can say Y here.
  10.416 -
  10.417 -#config X86_MCE_NONFATAL
  10.418 -#	tristate "Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4"
  10.419 -#	 depends on X86_MCE
  10.420 -#	 help
  10.421 -#	   Enabling this feature starts a timer that triggers every 5 seconds which
  10.422 -#	   will look at the machine check registers to see if anything happened.
  10.423 -#	   Non-fatal problems automatically get corrected (but still logged).
  10.424 -#	   Disable this if you don't want to see these messages.
  10.425 -#	   Seeing the messages this option prints out may be indicative of dying hardware,
  10.426 -#	   or out-of-spec (ie, overclocked) hardware.
  10.427 -#	   This option only does something on certain CPUs.
  10.428 -#	   (AMD Athlon/Duron and Intel Pentium 4)
  10.429 -
  10.430 -#config X86_MCE_P4THERMAL
  10.431 -#	 bool "check for P4 thermal throttling interrupt."
  10.432 -#	 depends on X86_MCE && (X86_UP_APIC || SMP)
  10.433 -#	 help
  10.434 -#	   Enabling this feature will cause a message to be printed when the P4
  10.435 -#	   enters thermal throttling.
  10.436 -
  10.437 -#config MICROCODE
  10.438 -#	 tristate "/dev/cpu/microcode - Intel IA32 CPU microcode support"
  10.439 -#	 ---help---
  10.440 -#	   If you say Y here and also to "/dev file system support" in the
  10.441 -#	   'File systems' section, you will be able to update the microcode on
  10.442 -#	   Intel processors in the IA32 family, e.g. Pentium Pro, Pentium II,
  10.443 -#	   Pentium III, Pentium 4, Xeon etc.  You will obviously need the
  10.444 -#	   actual microcode binary data itself which is not shipped with the
  10.445 -#	   Linux kernel.
  10.446 -#
  10.447 -#	   For latest news and information on obtaining all the required
  10.448 -#	   ingredients for this driver, check:
  10.449 -#	   <http://www.urbanmyth.org/microcode/>.
  10.450 -#
  10.451 -#	   To compile this driver as a module, choose M here: the
  10.452 -#	   module will be called microcode.
  10.453 -
  10.454 -#config X86_MSR
  10.455 -#	 tristate "/dev/cpu/*/msr - Model-specific register support"
  10.456 -#	 help
  10.457 -#	   This device gives privileged processes access to the x86
  10.458 -#	   Model-Specific Registers (MSRs).  It is a character device with
  10.459 -#	   major 202 and minors 0 to 31 for /dev/cpu/0/msr to /dev/cpu/31/msr.
  10.460 -#	   MSR accesses are directed to a specific CPU on multi-processor
  10.461 -#	   systems.
  10.462 -
  10.463 -config X86_CPUID
  10.464 -	tristate "/dev/cpu/*/cpuid - CPU information support"
  10.465 -	help
  10.466 -	  This device gives processes access to the x86 CPUID instruction to
  10.467 -	  be executed on a specific processor.  It is a character device
  10.468 -	  with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to
  10.469 -	  /dev/cpu/31/cpuid.
  10.470 -
  10.471 -source "drivers/firmware/Kconfig"
  10.472 -
  10.473 -choice
  10.474 -	prompt "High Memory Support"
  10.475 -	default NOHIGHMEM
  10.476 -
  10.477 -config NOHIGHMEM
  10.478 -	bool "off"
  10.479 -	---help---
  10.480 -	  Linux can use up to 64 Gigabytes of physical memory on x86 systems.
  10.481 -	  However, the address space of 32-bit x86 processors is only 4
  10.482 -	  Gigabytes large. That means that, if you have a large amount of
  10.483 -	  physical memory, not all of it can be "permanently mapped" by the
  10.484 -	  kernel. The physical memory that's not permanently mapped is called
  10.485 -	  "high memory".
  10.486 -
  10.487 -	  If you are compiling a kernel which will never run on a machine with
  10.488 -	  more than 1 Gigabyte total physical RAM, answer "off" here (default
  10.489 -	  choice and suitable for most users). This will result in a "3GB/1GB"
  10.490 -	  split: 3GB are mapped so that each process sees a 3GB virtual memory
  10.491 -	  space and the remaining part of the 4GB virtual memory space is used
  10.492 -	  by the kernel to permanently map as much physical memory as
  10.493 -	  possible.
  10.494 -
  10.495 -	  If the machine has between 1 and 4 Gigabytes physical RAM, then
  10.496 -	  answer "4GB" here.
  10.497 -
  10.498 -	  If more than 4 Gigabytes is used then answer "64GB" here. This
  10.499 -	  selection turns Intel PAE (Physical Address Extension) mode on.
  10.500 -	  PAE implements 3-level paging on IA32 processors. PAE is fully
  10.501 -	  supported by Linux, PAE mode is implemented on all recent Intel
  10.502 -	  processors (Pentium Pro and better). NOTE: If you say "64GB" here,
  10.503 -	  then the kernel will not boot on CPUs that don't support PAE!
  10.504 -
  10.505 -	  The actual amount of total physical memory will either be
  10.506 -	  auto detected or can be forced by using a kernel command line option
  10.507 -	  such as "mem=256M". (Try "man bootparam" or see the documentation of
  10.508 -	  your boot loader (lilo or loadlin) about how to pass options to the
  10.509 -	  kernel at boot time.)
  10.510 -
  10.511 -	  If unsure, say "off".
  10.512 -
  10.513 -config HIGHMEM4G
  10.514 -	bool "4GB"
  10.515 -	help
  10.516 -	  Select this if you have a 32-bit processor and between 1 and 4
  10.517 -	  gigabytes of physical RAM.
  10.518 -
  10.519 -#config HIGHMEM64G
  10.520 -#	bool "64GB"
  10.521 -#	help
  10.522 -#	  Select this if you have a 32-bit processor and more than 4
  10.523 -#	  gigabytes of physical RAM.
  10.524 -
  10.525 -endchoice
  10.526 -
  10.527 -config HIGHMEM
  10.528 -	bool
  10.529 -	depends on HIGHMEM64G || HIGHMEM4G
  10.530 -	default y
  10.531 -
  10.532 -config X86_PAE
  10.533 -	bool
  10.534 -	depends on HIGHMEM64G
  10.535 -	default y
  10.536 -
  10.537 -# Common NUMA Features
  10.538 -config NUMA
  10.539 -	bool "Numa Memory Allocation and Scheduler Support"
  10.540 -	depends on SMP && HIGHMEM64G && (X86_NUMAQ || X86_GENERICARCH || (X86_SUMMIT && ACPI))
  10.541 -	default n if X86_PC
  10.542 -	default y if (X86_NUMAQ || X86_SUMMIT)
  10.543 -
  10.544 -# Need comments to help the hapless user trying to turn on NUMA support
  10.545 -comment "NUMA (NUMA-Q) requires SMP, 64GB highmem support"
  10.546 -	depends on X86_NUMAQ && (!HIGHMEM64G || !SMP)
  10.547 -
  10.548 -comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI"
  10.549 -	depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI)
  10.550 -
  10.551 -config DISCONTIGMEM
  10.552 -	bool
  10.553 -	depends on NUMA
  10.554 -	default y
  10.555 -
  10.556 -config HAVE_ARCH_BOOTMEM_NODE
  10.557 -	bool
  10.558 -	depends on NUMA
  10.559 -	default y
  10.560 -
  10.561 -#config HIGHPTE
  10.562 -#	bool "Allocate 3rd-level pagetables from highmem"
  10.563 -#	depends on HIGHMEM4G || HIGHMEM64G
  10.564 -#	help
  10.565 -#	  The VM uses one page table entry for each page of physical memory.
  10.566 -#	  For systems with a lot of RAM, this can be wasteful of precious
  10.567 -#	  low memory.  Setting this option will put user-space page table
  10.568 -#	  entries in high memory.
  10.569 -
  10.570 -#config MTRR
  10.571 -#	 bool "MTRR (Memory Type Range Register) support"
  10.572 -#	 ---help---
  10.573 -#	   On Intel P6 family processors (Pentium Pro, Pentium II and later)
  10.574 -#	   the Memory Type Range Registers (MTRRs) may be used to control
  10.575 -#	   processor access to memory ranges. This is most useful if you have
  10.576 -#	   a video (VGA) card on a PCI or AGP bus. Enabling write-combining
  10.577 -#	   allows bus write transfers to be combined into a larger transfer
  10.578 -#	   before bursting over the PCI/AGP bus. This can increase performance
  10.579 -#	   of image write operations 2.5 times or more. Saying Y here creates a
  10.580 -#	   /proc/mtrr file which may be used to manipulate your processor's
  10.581 -#	   MTRRs. Typically the X server should use this.
  10.582 -#
  10.583 -#	   This code has a reasonably generic interface so that similar
  10.584 -#	   control registers on other processors can be easily supported
  10.585 -#	   as well:
  10.586 -#
  10.587 -#	   The Cyrix 6x86, 6x86MX and M II processors have Address Range
  10.588 -#	   Registers (ARRs) which provide a similar functionality to MTRRs. For
  10.589 -#	   these, the ARRs are used to emulate the MTRRs.
  10.590 -#	   The AMD K6-2 (stepping 8 and above) and K6-3 processors have two
  10.591 -#	   MTRRs. The Centaur C6 (WinChip) has 8 MCRs, allowing
  10.592 -#	   write-combining. All of these processors are supported by this code
  10.593 -#	   and it makes sense to say Y here if you have one of them.
  10.594 -#
  10.595 -#	   Saying Y here also fixes a problem with buggy SMP BIOSes which only
  10.596 -#	   set the MTRRs for the boot CPU and not for the secondary CPUs. This
  10.597 -#	   can lead to all sorts of problems, so it's good to say Y here.
  10.598 -#
  10.599 -#	   You can safely say Y even if your machine doesn't have MTRRs, you'll
  10.600 -#	   just add about 9 KB to your kernel.
  10.601 -#
  10.602 -#	   See <file:Documentation/mtrr.txt> for more information.
  10.603 -
  10.604 -config IRQBALANCE
  10.605 - 	bool "Enable kernel irq balancing"
  10.606 -	depends on SMP && X86_IO_APIC
  10.607 -	default y
  10.608 -	help
  10.609 - 	  The default yes will allow the kernel to do irq load balancing.
  10.610 -	  Saying no will keep the kernel from doing irq load balancing.
  10.611 -
  10.612 -config HAVE_DEC_LOCK
  10.613 -	bool
  10.614 -	depends on (SMP || PREEMPT) && X86_CMPXCHG
  10.615 -	default y
  10.616 -
  10.617 -# turning this on wastes a bunch of space.
  10.618 -# Summit needs it only when NUMA is on
  10.619 -config BOOT_IOREMAP
  10.620 -	bool
  10.621 -	depends on (((X86_SUMMIT || X86_GENERICARCH) && NUMA) || (X86 && EFI))
  10.622 -	default y
  10.623 -
  10.624 -config REGPARM
  10.625 -	bool "Use register arguments (EXPERIMENTAL)"
  10.626 -	depends on EXPERIMENTAL
  10.627 -	default n
  10.628 -	help
  10.629 -	Compile the kernel with -mregparm=3. This uses an different ABI
  10.630 -	and passes the first three arguments of a function call in registers.
  10.631 -	This will probably break binary only modules.
  10.632 -
  10.633 -	This feature is only enabled for gcc-3.0 and later - earlier compilers
  10.634 -	generate incorrect output with certain kernel constructs when
  10.635 -	-mregparm=3 is used.
  10.636 -
  10.637 -
  10.638 -if XEN_PHYSDEV_ACCESS
  10.639 -
  10.640 -menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
  10.641 -
  10.642 -config X86_VISWS_APIC
  10.643 -	bool
  10.644 -	depends on X86_VISWS
  10.645 -	default y
  10.646 -
  10.647 -config X86_LOCAL_APIC
  10.648 -	bool
  10.649 -	depends on (X86_VISWS || SMP) && !X86_VOYAGER
  10.650 -	default y
  10.651 -
  10.652 -config X86_IO_APIC
  10.653 -	bool
  10.654 -	depends on SMP && !(X86_VISWS || X86_VOYAGER)
  10.655 -	default y
  10.656 -
  10.657 -config PCI
  10.658 -	bool "PCI support" if !X86_VISWS
  10.659 -	depends on !X86_VOYAGER
  10.660 -	default y if X86_VISWS
  10.661 -	help
  10.662 -	  Find out whether you have a PCI motherboard. PCI is the name of a
  10.663 -	  bus system, i.e. the way the CPU talks to the other stuff inside
  10.664 -	  your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or
  10.665 -	  VESA. If you have PCI, say Y, otherwise N.
  10.666 -
  10.667 -	  The PCI-HOWTO, available from
  10.668 -	  <http://www.tldp.org/docs.html#howto>, contains valuable
  10.669 -	  information about which PCI hardware does work under Linux and which
  10.670 -	  doesn't.
  10.671 -
  10.672 -#choice
  10.673 -#	prompt "PCI access mode"
  10.674 -#	depends on PCI && !X86_VISWS
  10.675 -#	default PCI_GOANY
  10.676 -#	---help---
  10.677 -#	  On PCI systems, the BIOS can be used to detect the PCI devices and
  10.678 -#	  determine their configuration. However, some old PCI motherboards
  10.679 -#	  have BIOS bugs and may crash if this is done. Also, some embedded
  10.680 -#	  PCI-based systems don't have any BIOS at all. Linux can also try to
  10.681 -#	  detect the PCI hardware directly without using the BIOS.
  10.682 -#
  10.683 -#	  With this option, you can specify how Linux should detect the
  10.684 -#	  PCI devices. If you choose "BIOS", the BIOS will be used,
  10.685 -#	  if you choose "Direct", the BIOS won't be used, and if you
  10.686 -#	  choose "MMConfig", then PCI Express MMCONFIG will be used.
  10.687 -#	  If you choose "Any", the kernel will try MMCONFIG, then the
  10.688 -#	  direct access method and falls back to the BIOS if that doesn't
  10.689 -#	  work. If unsure, go with the default, which is "Any".
  10.690 -#
  10.691 -#config PCI_GOBIOS
  10.692 -#	bool "BIOS"
  10.693 -#
  10.694 -#config PCI_GOMMCONFIG
  10.695 -#	bool "MMConfig"
  10.696 -#
  10.697 -#config PCI_GODIRECT
  10.698 -#	bool "Direct"
  10.699 -#
  10.700 -#config PCI_GOANY
  10.701 -#	bool "Any"
  10.702 -#
  10.703 -#endchoice
  10.704 -#
  10.705 -#config PCI_BIOS
  10.706 -#	bool
  10.707 -#	depends on !X86_VISWS && PCI && (PCI_GOBIOS || PCI_GOANY)
  10.708 -#	default y
  10.709 -#
  10.710 -#config PCI_DIRECT
  10.711 -#	bool
  10.712 -# 	depends on PCI && ((PCI_GODIRECT || PCI_GOANY) || X86_VISWS)
  10.713 -#	default y
  10.714 -
  10.715 -config PCI_DIRECT
  10.716 -	bool
  10.717 - 	depends on PCI
  10.718 -	default y
  10.719 -
  10.720 -source "drivers/pci/Kconfig"
  10.721 -
  10.722 -config ISA
  10.723 -	bool "ISA support"
  10.724 -	depends on !(X86_VOYAGER || X86_VISWS)
  10.725 -	help
  10.726 -	  Find out whether you have ISA slots on your motherboard.  ISA is the
  10.727 -	  name of a bus system, i.e. the way the CPU talks to the other stuff
  10.728 -	  inside your box.  Other bus systems are PCI, EISA, MicroChannel
  10.729 -	  (MCA) or VESA.  ISA is an older system, now being displaced by PCI;
  10.730 -	  newer boards don't support it.  If you have ISA, say Y, otherwise N.
  10.731 -
  10.732 -config EISA
  10.733 -	bool "EISA support"
  10.734 -	depends on ISA
  10.735 -	---help---
  10.736 -	  The Extended Industry Standard Architecture (EISA) bus was
  10.737 -	  developed as an open alternative to the IBM MicroChannel bus.
  10.738 -
  10.739 -	  The EISA bus provided some of the features of the IBM MicroChannel
  10.740 -	  bus while maintaining backward compatibility with cards made for
  10.741 -	  the older ISA bus.  The EISA bus saw limited use between 1988 and
  10.742 -	  1995 when it was made obsolete by the PCI bus.
  10.743 -
  10.744 -	  Say Y here if you are building a kernel for an EISA-based machine.
  10.745 -
  10.746 -	  Otherwise, say N.
  10.747 -
  10.748 -source "drivers/eisa/Kconfig"
  10.749 -
  10.750 -config MCA
  10.751 -	bool "MCA support"
  10.752 -	depends on !(X86_VISWS || X86_VOYAGER)
  10.753 -	help
  10.754 -	  MicroChannel Architecture is found in some IBM PS/2 machines and
  10.755 -	  laptops.  It is a bus system similar to PCI or ISA. See
  10.756 -	  <file:Documentation/mca.txt> (and especially the web page given
  10.757 -	  there) before attempting to build an MCA bus kernel.
  10.758 -
  10.759 -config MCA
  10.760 -	depends on X86_VOYAGER
  10.761 -	default y if X86_VOYAGER
  10.762 -
  10.763 -source "drivers/mca/Kconfig"
  10.764 -
  10.765 -config SCx200
  10.766 -	tristate "NatSemi SCx200 support"
  10.767 -	depends on !X86_VOYAGER
  10.768 -	help
  10.769 -	  This provides basic support for the National Semiconductor SCx200 
  10.770 -	  processor.  Right now this is just a driver for the GPIO pins.
  10.771 -
  10.772 -	  If you don't know what to do here, say N.
  10.773 -
  10.774 -	  This support is also available as a module.  If compiled as a
  10.775 -	  module, it will be called scx200.
  10.776 -
  10.777 -source "drivers/pcmcia/Kconfig"
  10.778 -
  10.779 -source "drivers/pci/hotplug/Kconfig"
  10.780 -
  10.781 -endmenu
  10.782 -
  10.783 -endif
  10.784 -
  10.785 -menu "Kernel hacking"
  10.786 -
  10.787 -config DEBUG_KERNEL
  10.788 -	bool "Kernel debugging"
  10.789 -	help
  10.790 -	  Say Y here if you are developing drivers or trying to debug and
  10.791 -	  identify kernel problems.
  10.792 -
  10.793 -config EARLY_PRINTK
  10.794 -	bool "Early printk" if EMBEDDED
  10.795 -	default y
  10.796 -	help
  10.797 -	  Write kernel log output directly into the VGA buffer or to a serial
  10.798 -	  port.
  10.799 -
  10.800 -	  This is useful for kernel debugging when your machine crashes very
  10.801 -	  early before the console code is initialized. For normal operation
  10.802 -	  it is not recommended because it looks ugly and doesn't cooperate
  10.803 -	  with klogd/syslogd or the X server. You should normally N here,
  10.804 -	  unless you want to debug such a crash.
  10.805 -
  10.806 -config DEBUG_STACKOVERFLOW
  10.807 -	bool "Check for stack overflows"
  10.808 -	depends on DEBUG_KERNEL
  10.809 -
  10.810 -config DEBUG_STACK_USAGE
  10.811 -	bool "Stack utilization instrumentation"
  10.812 -	depends on DEBUG_KERNEL
  10.813 -	help
  10.814 -	  Enables the display of the minimum amount of free stack which each
  10.815 -	  task has ever had available in the sysrq-T and sysrq-P debug output.
  10.816 -
  10.817 -	  This option will slow down process creation somewhat.
  10.818 -
  10.819 -config DEBUG_SLAB
  10.820 -	bool "Debug memory allocations"
  10.821 -	depends on DEBUG_KERNEL
  10.822 -	help
  10.823 -	  Say Y here to have the kernel do limited verification on memory
  10.824 -	  allocation as well as poisoning memory on free to catch use of freed
  10.825 -	  memory.
  10.826 -
  10.827 -config MAGIC_SYSRQ
  10.828 -	bool "Magic SysRq key"
  10.829 -	depends on DEBUG_KERNEL
  10.830 -	help
  10.831 -	  If you say Y here, you will have some control over the system even
  10.832 -	  if the system crashes for example during kernel debugging (e.g., you
  10.833 -	  will be able to flush the buffer cache to disk, reboot the system
  10.834 -	  immediately or dump some status information). This is accomplished
  10.835 -	  by pressing various keys while holding SysRq (Alt+PrintScreen). It
  10.836 -	  also works on a serial console (on PC hardware at least), if you
  10.837 -	  send a BREAK and then within 5 seconds a command keypress. The
  10.838 -	  keys are documented in <file:Documentation/sysrq.txt>. Don't say Y
  10.839 -	  unless you really know what this hack does.
  10.840 -
  10.841 -config DEBUG_SPINLOCK
  10.842 -	bool "Spinlock debugging"
  10.843 -	depends on DEBUG_KERNEL
  10.844 -	help
  10.845 -	  Say Y here and build SMP to catch missing spinlock initialization
  10.846 -	  and certain other kinds of spinlock errors commonly made.  This is
  10.847 -	  best used in conjunction with the NMI watchdog so that spinlock
  10.848 -	  deadlocks are also debuggable.
  10.849 -
  10.850 -config DEBUG_PAGEALLOC
  10.851 -	bool "Page alloc debugging"
  10.852 -	depends on DEBUG_KERNEL
  10.853 -	help
  10.854 -	  Unmap pages from the kernel linear mapping after free_pages().
  10.855 -	  This results in a large slowdown, but helps to find certain types
  10.856 -	  of memory corruptions.
  10.857 -
  10.858 -config DEBUG_HIGHMEM
  10.859 -	bool "Highmem debugging"
  10.860 -	depends on DEBUG_KERNEL && HIGHMEM
  10.861 -	help
  10.862 -	  This options enables addition error checking for high memory systems.
  10.863 -	  Disable for production systems.
  10.864 -
  10.865 -config DEBUG_INFO
  10.866 -	bool "Compile the kernel with debug info"
  10.867 -	depends on DEBUG_KERNEL
  10.868 -	help
  10.869 -          If you say Y here the resulting kernel image will include
  10.870 -	  debugging info resulting in a larger kernel image.
  10.871 -	  Say Y here only if you plan to use gdb to debug the kernel.
  10.872 -	  If you don't debug the kernel, you can say N.
  10.873 -	  
  10.874 -config DEBUG_SPINLOCK_SLEEP
  10.875 -	bool "Sleep-inside-spinlock checking"
  10.876 -	help
  10.877 -	  If you say Y here, various routines which may sleep will become very
  10.878 -	  noisy if they are called with a spinlock held.	
  10.879 -
  10.880 -config FRAME_POINTER
  10.881 -	bool "Compile the kernel with frame pointers"
  10.882 -	help
  10.883 -	  If you say Y here the resulting kernel image will be slightly larger
  10.884 -	  and slower, but it will give very useful debugging information.
  10.885 -	  If you don't debug the kernel, you can say N, but we may not be able
  10.886 -	  to solve problems without frame pointers.
  10.887 -
  10.888 -config 4KSTACKS
  10.889 -	bool "Use 4Kb for kernel stacks instead of 8Kb"
  10.890 -	help
  10.891 -	  If you say Y here the kernel will use a 4Kb stacksize for the
  10.892 -	  kernel stack attached to each process/thread. This facilitates
  10.893 -	  running more threads on a system and also reduces the pressure
  10.894 -	  on the VM subsystem for higher order allocations. This option
  10.895 -	  will also use IRQ stacks to compensate for the reduced stackspace.
  10.896 -
  10.897 -config X86_FIND_SMP_CONFIG
  10.898 -	bool
  10.899 -	depends on X86_LOCAL_APIC || X86_VOYAGER
  10.900 -	default y
  10.901 -
  10.902 -config X86_MPPARSE
  10.903 -	bool
  10.904 -	depends on X86_LOCAL_APIC && !X86_VISWS
  10.905 -	default y
  10.906 -
  10.907 -endmenu
  10.908 -
  10.909 -config X86_SMP
  10.910 -	bool
  10.911 -	depends on SMP && !X86_VOYAGER
  10.912 -	default y
  10.913 -
  10.914 -config X86_HT
  10.915 -	bool
  10.916 -	depends on SMP && !(X86_VISWS || X86_VOYAGER)
  10.917 -	default y
  10.918 -
  10.919 -config X86_BIOS_REBOOT
  10.920 -	bool
  10.921 -	depends on !(X86_VISWS || X86_VOYAGER)
  10.922 -	default y
  10.923 -
  10.924 -config X86_TRAMPOLINE
  10.925 -	bool
  10.926 -	depends on X86_SMP || (X86_VOYAGER && SMP)
  10.927 -	default y
  10.928 -
  10.929 -# std_resources is overridden for pc9800, but that's not
  10.930 -# a currently selectable arch choice
  10.931 -config X86_STD_RESOURCES
  10.932 -	bool
  10.933 -	default y
  10.934 -
  10.935 -config PC
  10.936 -	bool
  10.937 -	depends on X86 && !EMBEDDED
  10.938 -	default y
  10.939 -
  10.940 -endmenu
    11.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/Makefile	Mon Oct 25 12:45:34 2004 +0000
    11.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.3 @@ -1,98 +0,0 @@
    11.4 -#
    11.5 -# i386/Makefile
    11.6 -#
    11.7 -# This file is included by the global makefile so that you can add your own
    11.8 -# architecture-specific flags and dependencies. Remember to do have actions
    11.9 -# for "archclean" cleaning up for this architecture.
   11.10 -#
   11.11 -# This file is subject to the terms and conditions of the GNU General Public
   11.12 -# License.  See the file "COPYING" in the main directory of this archive
   11.13 -# for more details.
   11.14 -#
   11.15 -# Copyright (C) 1994 by Linus Torvalds
   11.16 -#
   11.17 -# 19990713  Artur Skawina <skawina@geocities.com>
   11.18 -#           Added '-march' and '-mpreferred-stack-boundary' support
   11.19 -#
   11.20 -
   11.21 -XENARCH	:= $(subst ",,$(CONFIG_XENARCH))
   11.22 -
   11.23 -LDFLAGS		:= -m elf_i386
   11.24 -LDFLAGS_vmlinux :=
   11.25 -CHECK		:= $(CHECK) -D__i386__=1
   11.26 -
   11.27 -CFLAGS += -pipe -msoft-float
   11.28 -
   11.29 -# prevent gcc from keeping the stack 16 byte aligned
   11.30 -CFLAGS += $(call check_gcc,-mpreferred-stack-boundary=2,)
   11.31 -
   11.32 -align := $(subst -functions=0,,$(call check_gcc,-falign-functions=0,-malign-functions=0))
   11.33 -
   11.34 -cflags-$(CONFIG_M386)		+= -march=i386
   11.35 -cflags-$(CONFIG_M486)		+= -march=i486
   11.36 -cflags-$(CONFIG_M586)		+= -march=i586
   11.37 -cflags-$(CONFIG_M586TSC)	+= -march=i586
   11.38 -cflags-$(CONFIG_M586MMX)	+= $(call check_gcc,-march=pentium-mmx,-march=i586)
   11.39 -cflags-$(CONFIG_M686)		+= -march=i686
   11.40 -cflags-$(CONFIG_MPENTIUMII)	+= $(call check_gcc,-march=pentium2,-march=i686)
   11.41 -cflags-$(CONFIG_MPENTIUMIII)	+= $(call check_gcc,-march=pentium3,-march=i686)
   11.42 -cflags-$(CONFIG_MPENTIUMM)	+= $(call check_gcc,-march=pentium3,-march=i686)
   11.43 -cflags-$(CONFIG_MPENTIUM4)	+= $(call check_gcc,-march=pentium4,-march=i686)
   11.44 -cflags-$(CONFIG_MK6)		+= -march=k6
   11.45 -# Please note, that patches that add -march=athlon-xp and friends are pointless.
   11.46 -# They make zero difference whatsosever to performance at this time.
   11.47 -cflags-$(CONFIG_MK7)		+= $(call check_gcc,-march=athlon,-march=i686 $(align)-functions=4)
   11.48 -cflags-$(CONFIG_MK8)		+= $(call check_gcc,-march=k8,$(call check_gcc,-march=athlon,-march=i686 $(align)-functions=4))
   11.49 -cflags-$(CONFIG_MCRUSOE)	+= -march=i686 $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0
   11.50 -cflags-$(CONFIG_MWINCHIPC6)	+= $(call check_gcc,-march=winchip-c6,-march=i586)
   11.51 -cflags-$(CONFIG_MWINCHIP2)	+= $(call check_gcc,-march=winchip2,-march=i586)
   11.52 -cflags-$(CONFIG_MWINCHIP3D)	+= $(call check_gcc,-march=winchip2,-march=i586)
   11.53 -cflags-$(CONFIG_MCYRIXIII)	+= $(call check_gcc,-march=c3,-march=i486) $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0
   11.54 -cflags-$(CONFIG_MVIAC3_2)	+= $(call check_gcc,-march=c3-2,-march=i686)
   11.55 -
   11.56 -# AMD Elan support
   11.57 -cflags-$(CONFIG_X86_ELAN)	+= -march=i486
   11.58 -
   11.59 -# -mregparm=3 works ok on gcc-3.0 and later
   11.60 -#
   11.61 -GCC_VERSION			:= $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))
   11.62 -cflags-$(CONFIG_REGPARM) 	+= $(shell if [ $(GCC_VERSION) -ge 0300 ] ; then echo "-mregparm=3"; fi ;)
   11.63 -
   11.64 -# Disable unit-at-a-time mode, it makes gcc use a lot more stack
   11.65 -# due to the lack of sharing of stacklots.
   11.66 -CFLAGS += $(call check_gcc,-fno-unit-at-a-time,)
   11.67 -
   11.68 -CFLAGS += $(cflags-y)
   11.69 -
   11.70 -head-y := arch/xen/i386/kernel/head.o arch/xen/i386/kernel/init_task.o
   11.71 -
   11.72 -libs-y 					+= arch/i386/lib/
   11.73 -core-y					+= arch/xen/i386/kernel/ \
   11.74 -					   arch/xen/i386/mm/ \
   11.75 -					   arch/i386/crypto/
   11.76 -# \
   11.77 -#					   arch/xen/$(mcore-y)/
   11.78 -drivers-$(CONFIG_MATH_EMULATION)	+= arch/i386/math-emu/
   11.79 -drivers-$(CONFIG_PCI)			+= arch/xen/i386/pci/
   11.80 -# must be linked after kernel/
   11.81 -drivers-$(CONFIG_OPROFILE)		+= arch/i386/oprofile/
   11.82 -drivers-$(CONFIG_PM)			+= arch/i386/power/
   11.83 -
   11.84 -# for clean
   11.85 -obj-	+= kernel/ mm/ pci/
   11.86 -#obj-	+= ../../i386/lib/ ../../i386/mm/ 
   11.87 -#../../i386/$(mcore-y)/
   11.88 -#obj-	+= ../../i386/pci/ ../../i386/oprofile/ ../../i386/power/
   11.89 -
   11.90 -xenflags-y += -Iinclude/asm-xen/asm-i386/mach-xen
   11.91 -CFLAGS += $(xenflags-y)
   11.92 -AFLAGS += $(xenflags-y)
   11.93 -
   11.94 -prepare: include/asm-$(XENARCH)/asm_offsets.h
   11.95 -CLEAN_FILES += include/asm-$(XENARCH)/asm_offsets.h
   11.96 -
   11.97 -arch/$(XENARCH)/kernel/asm-offsets.s: include/asm include/.asm-ignore \
   11.98 -	include/linux/version.h include/config/MARKER
   11.99 -
  11.100 -include/asm-$(XENARCH)/asm_offsets.h: arch/$(XENARCH)/kernel/asm-offsets.s
  11.101 -	$(call filechk,gen-asm-offsets)
    12.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/Makefile	Mon Oct 25 12:45:34 2004 +0000
    12.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.3 @@ -1,91 +0,0 @@
    12.4 -#
    12.5 -# Makefile for the linux kernel.
    12.6 -#
    12.7 -
    12.8 -XENARCH	:= $(subst ",,$(CONFIG_XENARCH))
    12.9 -
   12.10 -CFLAGS	+= -Iarch/$(XENARCH)/kernel
   12.11 -
   12.12 -extra-y := head.o init_task.o vmlinux.lds.s
   12.13 -
   12.14 -obj-y	:= traps.o irq.o ldt.o setup.o entry.o time.o pci-dma.o process.o \
   12.15 -		ioport.o signal.o i386_ksyms.o
   12.16 -
   12.17 -c-obj-y	:= semaphore.o vm86.o \
   12.18 -		ptrace.o sys_i386.o \
   12.19 -		i387.o dmi_scan.o bootflag.o \
   12.20 -		doublefault.o
   12.21 -s-obj-y	:=
   12.22 -
   12.23 -obj-y				+= cpu/
   12.24 -obj-y				+= timers/
   12.25 -c-obj-$(CONFIG_ACPI_BOOT)	+= acpi/
   12.26 -#c-obj-$(CONFIG_X86_BIOS_REBOOT)	+= reboot.o
   12.27 -c-obj-$(CONFIG_MCA)		+= mca.o
   12.28 -c-obj-$(CONFIG_X86_MSR)		+= msr.o
   12.29 -c-obj-$(CONFIG_X86_CPUID)	+= cpuid.o
   12.30 -c-obj-$(CONFIG_MICROCODE)	+= microcode.o
   12.31 -c-obj-$(CONFIG_APM)		+= apm.o
   12.32 -c-obj-$(CONFIG_X86_SMP)		+= smp.o smpboot.o
   12.33 -c-obj-$(CONFIG_X86_TRAMPOLINE)	+= trampoline.o
   12.34 -c-obj-$(CONFIG_X86_MPPARSE)	+= mpparse.o
   12.35 -c-obj-$(CONFIG_X86_LOCAL_APIC)	+= apic.o nmi.o
   12.36 -c-obj-$(CONFIG_X86_IO_APIC)	+= io_apic.o
   12.37 -c-obj-$(CONFIG_X86_NUMAQ)	+= numaq.o
   12.38 -c-obj-$(CONFIG_X86_SUMMIT_NUMA)	+= summit.o
   12.39 -c-obj-$(CONFIG_MODULES)		+= module.o
   12.40 -obj-y				+= sysenter.o
   12.41 -obj-y				+= vsyscall.o
   12.42 -c-obj-$(CONFIG_ACPI_SRAT) 	+= srat.o
   12.43 -c-obj-$(CONFIG_HPET_TIMER) 	+= time_hpet.o
   12.44 -c-obj-$(CONFIG_EFI) 		+= efi.o efi_stub.o
   12.45 -c-obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
   12.46 -
   12.47 -EXTRA_AFLAGS   := -traditional
   12.48 -
   12.49 -c-obj-$(CONFIG_SCx200)		+= scx200.o
   12.50 -
   12.51 -AFLAGS_vmlinux.lds.o += -U$(XENARCH)
   12.52 -
   12.53 -# vsyscall.o contains the vsyscall DSO images as __initdata.
   12.54 -# We must build both images before we can assemble it.
   12.55 -# Note: kbuild does not track this dependency due to usage of .incbin
   12.56 -$(obj)/vsyscall.o: $(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so
   12.57 -targets += $(foreach F,int80 sysenter,vsyscall-$F.o vsyscall-$F.so)
   12.58 -
   12.59 -# The DSO images are built using a special linker script.
   12.60 -quiet_cmd_syscall = SYSCALL $@
   12.61 -      cmd_syscall = $(CC) -nostdlib $(SYSCFLAGS_$(@F)) \
   12.62 -		          -Wl,-T,$(filter-out FORCE,$^) -o $@
   12.63 -
   12.64 -vsyscall-flags = -shared -s -Wl,-soname=linux-gate.so.1
   12.65 -SYSCFLAGS_vsyscall-sysenter.so	= $(vsyscall-flags)
   12.66 -SYSCFLAGS_vsyscall-int80.so	= $(vsyscall-flags)
   12.67 -
   12.68 -$(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so: \
   12.69 -$(obj)/vsyscall-%.so: $(obj)/vsyscall.lds $(obj)/vsyscall-%.o FORCE
   12.70 -	$(call if_changed,syscall)
   12.71 -
   12.72 -# We also create a special relocatable object that should mirror the symbol
   12.73 -# table and layout of the linked DSO.  With ld -R we can then refer to
   12.74 -# these symbols in the kernel code rather than hand-coded addresses.
   12.75 -extra-y += vsyscall-syms.o
   12.76 -$(obj)/built-in.o: $(obj)/vsyscall-syms.o
   12.77 -$(obj)/built-in.o: ld_flags += -R $(obj)/vsyscall-syms.o
   12.78 -
   12.79 -SYSCFLAGS_vsyscall-syms.o = -r
   12.80 -$(obj)/vsyscall-syms.o: $(obj)/vsyscall.lds $(obj)/vsyscall-sysenter.o FORCE
   12.81 -	$(call if_changed,syscall)
   12.82 -
   12.83 -c-link	:= init_task.o
   12.84 -s-link	:= vsyscall-int80.o vsyscall-sysenter.o vsyscall-sigreturn.o
   12.85 -
   12.86 -$(patsubst %.o,$(obj)/%.c,$(c-obj-y) $(c-link)) $(patsubst %.o,$(obj)/%.S,$(s-obj-y) $(s-link)):
   12.87 -	@ln -fsn $(srctree)/arch/i386/kernel/$(notdir $@) $@
   12.88 -
   12.89 -$(obj)/vsyscall-int80.S: $(obj)/vsyscall-sigreturn.S
   12.90 -
   12.91 -obj-y	+= $(c-obj-y) $(s-obj-y)
   12.92 -
   12.93 -clean-files += $(patsubst %.o,%.c,$(c-obj-y) $(c-obj-) $(c-link))
   12.94 -clean-files += $(patsubst %.o,%.S,$(s-obj-y) $(s-obj-) $(s-link))
    13.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/cpu/Makefile	Mon Oct 25 12:45:34 2004 +0000
    13.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.3 @@ -1,31 +0,0 @@
    13.4 -#
    13.5 -# Makefile for x86-compatible CPU details and quirks
    13.6 -#
    13.7 -
    13.8 -CFLAGS	+= -Iarch/i386/kernel/cpu
    13.9 -
   13.10 -obj-y	:=	common.o
   13.11 -c-obj-y	+=	proc.o
   13.12 -
   13.13 -c-obj-y	+=	amd.o
   13.14 -c-obj-y	+=	cyrix.o
   13.15 -c-obj-y	+=	centaur.o
   13.16 -c-obj-y	+=	transmeta.o
   13.17 -c-obj-y	+=	intel.o
   13.18 -c-obj-y	+=	rise.o
   13.19 -c-obj-y	+=	nexgen.o
   13.20 -c-obj-y	+=	umc.o
   13.21 -
   13.22 -#obj-$(CONFIG_X86_MCE)	+=	../../../../i386/kernel/cpu/mcheck/
   13.23 -
   13.24 -#obj-$(CONFIG_MTRR)	+= 	../../../../i386/kernel/cpu/mtrr/
   13.25 -#obj-$(CONFIG_CPU_FREQ)	+=	../../../../i386/kernel/cpu/cpufreq/
   13.26 -
   13.27 -c-link	:=
   13.28 -
   13.29 -$(patsubst %.o,$(obj)/%.c,$(c-obj-y) $(c-link)):
   13.30 -	@ln -fsn $(srctree)/arch/i386/kernel/cpu/$(notdir $@) $@
   13.31 -
   13.32 -obj-y	+= $(c-obj-y)
   13.33 -
   13.34 -clean-files += $(patsubst %.o,%.c,$(c-obj-y) $(c-obj-) $(c-link))
    14.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/cpu/common.c	Mon Oct 25 12:45:34 2004 +0000
    14.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.3 @@ -1,601 +0,0 @@
    14.4 -#include <linux/init.h>
    14.5 -#include <linux/string.h>
    14.6 -#include <linux/delay.h>
    14.7 -#include <linux/smp.h>
    14.8 -#include <asm/semaphore.h>
    14.9 -#include <asm/processor.h>
   14.10 -#include <asm/i387.h>
   14.11 -#include <asm/msr.h>
   14.12 -#include <asm/io.h>
   14.13 -#include <asm/mmu_context.h>
   14.14 -#include <asm-xen/hypervisor.h>
   14.15 -
   14.16 -#include "cpu.h"
   14.17 -
   14.18 -static int cachesize_override __initdata = -1;
   14.19 -static int disable_x86_fxsr __initdata = 0;
   14.20 -static int disable_x86_serial_nr __initdata = 1;
   14.21 -
   14.22 -struct cpu_dev * cpu_devs[X86_VENDOR_NUM] = {};
   14.23 -
   14.24 -extern void mcheck_init(struct cpuinfo_x86 *c);
   14.25 -
   14.26 -extern void machine_specific_modify_cpu_capabilities(struct cpuinfo_x86 *c);
   14.27 -
   14.28 -extern int disable_pse;
   14.29 -
   14.30 -static void default_init(struct cpuinfo_x86 * c)
   14.31 -{
   14.32 -	/* Not much we can do here... */
   14.33 -	/* Check if at least it has cpuid */
   14.34 -	if (c->cpuid_level == -1) {
   14.35 -		/* No cpuid. It must be an ancient CPU */
   14.36 -		if (c->x86 == 4)
   14.37 -			strcpy(c->x86_model_id, "486");
   14.38 -		else if (c->x86 == 3)
   14.39 -			strcpy(c->x86_model_id, "386");
   14.40 -	}
   14.41 -}
   14.42 -
   14.43 -static struct cpu_dev default_cpu = {
   14.44 -	.c_init	= default_init,
   14.45 -};
   14.46 -static struct cpu_dev * this_cpu = &default_cpu;
   14.47 -
   14.48 -static int __init cachesize_setup(char *str)
   14.49 -{
   14.50 -	get_option (&str, &cachesize_override);
   14.51 -	return 1;
   14.52 -}
   14.53 -__setup("cachesize=", cachesize_setup);
   14.54 -
   14.55 -int __init get_model_name(struct cpuinfo_x86 *c)
   14.56 -{
   14.57 -	unsigned int *v;
   14.58 -	char *p, *q;
   14.59 -
   14.60 -	if (cpuid_eax(0x80000000) < 0x80000004)
   14.61 -		return 0;
   14.62 -
   14.63 -	v = (unsigned int *) c->x86_model_id;
   14.64 -	cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]);
   14.65 -	cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]);
   14.66 -	cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]);
   14.67 -	c->x86_model_id[48] = 0;
   14.68 -
   14.69 -	/* Intel chips right-justify this string for some dumb reason;
   14.70 -	   undo that brain damage */
   14.71 -	p = q = &c->x86_model_id[0];
   14.72 -	while ( *p == ' ' )
   14.73 -	     p++;
   14.74 -	if ( p != q ) {
   14.75 -	     while ( *p )
   14.76 -		  *q++ = *p++;
   14.77 -	     while ( q <= &c->x86_model_id[48] )
   14.78 -		  *q++ = '\0';	/* Zero-pad the rest */
   14.79 -	}
   14.80 -
   14.81 -	return 1;
   14.82 -}
   14.83 -
   14.84 -
   14.85 -void __init display_cacheinfo(struct cpuinfo_x86 *c)
   14.86 -{
   14.87 -	unsigned int n, dummy, ecx, edx, l2size;
   14.88 -
   14.89 -	n = cpuid_eax(0x80000000);
   14.90 -
   14.91 -	if (n >= 0x80000005) {
   14.92 -		cpuid(0x80000005, &dummy, &dummy, &ecx, &edx);
   14.93 -		printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d bytes/line)\n",
   14.94 -			edx>>24, edx&0xFF, ecx>>24, ecx&0xFF);
   14.95 -		c->x86_cache_size=(ecx>>24)+(edx>>24);	
   14.96 -	}
   14.97 -
   14.98 -	if (n < 0x80000006)	/* Some chips just has a large L1. */
   14.99 -		return;
  14.100 -
  14.101 -	ecx = cpuid_ecx(0x80000006);
  14.102 -	l2size = ecx >> 16;
  14.103 -	
  14.104 -	/* do processor-specific cache resizing */
  14.105 -	if (this_cpu->c_size_cache)
  14.106 -		l2size = this_cpu->c_size_cache(c,l2size);
  14.107 -
  14.108 -	/* Allow user to override all this if necessary. */
  14.109 -	if (cachesize_override != -1)
  14.110 -		l2size = cachesize_override;
  14.111 -
  14.112 -	if ( l2size == 0 )
  14.113 -		return;		/* Again, no L2 cache is possible */
  14.114 -
  14.115 -	c->x86_cache_size = l2size;
  14.116 -
  14.117 -	printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n",
  14.118 -	       l2size, ecx & 0xFF);
  14.119 -}
  14.120 -
  14.121 -/* Naming convention should be: <Name> [(<Codename>)] */
  14.122 -/* This table only is used unless init_<vendor>() below doesn't set it; */
  14.123 -/* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used */
  14.124 -
  14.125 -/* Look up CPU names by table lookup. */
  14.126 -static char __init *table_lookup_model(struct cpuinfo_x86 *c)
  14.127 -{
  14.128 -	struct cpu_model_info *info;
  14.129 -
  14.130 -	if ( c->x86_model >= 16 )
  14.131 -		return NULL;	/* Range check */
  14.132 -
  14.133 -	if (!this_cpu)
  14.134 -		return NULL;
  14.135 -
  14.136 -	info = this_cpu->c_models;
  14.137 -
  14.138 -	while (info && info->family) {
  14.139 -		if (info->family == c->x86)
  14.140 -			return info->model_names[c->x86_model];
  14.141 -		info++;
  14.142 -	}
  14.143 -	return NULL;		/* Not found */
  14.144 -}
  14.145 -
  14.146 -
  14.147 -void __init get_cpu_vendor(struct cpuinfo_x86 *c, int early)
  14.148 -{
  14.149 -	char *v = c->x86_vendor_id;
  14.150 -	int i;
  14.151 -
  14.152 -	for (i = 0; i < X86_VENDOR_NUM; i++) {
  14.153 -		if (cpu_devs[i]) {
  14.154 -			if (!strcmp(v,cpu_devs[i]->c_ident[0]) ||
  14.155 -			    (cpu_devs[i]->c_ident[1] && 
  14.156 -			     !strcmp(v,cpu_devs[i]->c_ident[1]))) {
  14.157 -				c->x86_vendor = i;
  14.158 -				if (!early)
  14.159 -					this_cpu = cpu_devs[i];
  14.160 -				break;
  14.161 -			}
  14.162 -		}
  14.163 -	}
  14.164 -}
  14.165 -
  14.166 -
  14.167 -static int __init x86_fxsr_setup(char * s)
  14.168 -{
  14.169 -	disable_x86_fxsr = 1;
  14.170 -	return 1;
  14.171 -}
  14.172 -__setup("nofxsr", x86_fxsr_setup);
  14.173 -
  14.174 -
  14.175 -/* Standard macro to see if a specific flag is changeable */
  14.176 -static inline int flag_is_changeable_p(u32 flag)
  14.177 -{
  14.178 -	u32 f1, f2;
  14.179 -
  14.180 -	asm("pushfl\n\t"
  14.181 -	    "pushfl\n\t"
  14.182 -	    "popl %0\n\t"
  14.183 -	    "movl %0,%1\n\t"
  14.184 -	    "xorl %2,%0\n\t"
  14.185 -	    "pushl %0\n\t"
  14.186 -	    "popfl\n\t"
  14.187 -	    "pushfl\n\t"
  14.188 -	    "popl %0\n\t"
  14.189 -	    "popfl\n\t"
  14.190 -	    : "=&r" (f1), "=&r" (f2)
  14.191 -	    : "ir" (flag));
  14.192 -
  14.193 -	return ((f1^f2) & flag) != 0;
  14.194 -}
  14.195 -
  14.196 -
  14.197 -/* Probe for the CPUID instruction */
  14.198 -int __init have_cpuid_p(void)
  14.199 -{
  14.200 -	return flag_is_changeable_p(X86_EFLAGS_ID);
  14.201 -}
  14.202 -
  14.203 -/* Do minimum CPU detection early.
  14.204 -   Fields really needed: vendor, cpuid_level, family, model, mask, cache alignment.
  14.205 -   The others are not touched to avoid unwanted side effects. */
  14.206 -void __init early_cpu_detect(void)
  14.207 -{
  14.208 -	struct cpuinfo_x86 *c = &boot_cpu_data;
  14.209 -
  14.210 -	c->x86_cache_alignment = 32;
  14.211 -
  14.212 -	if (!have_cpuid_p())
  14.213 -		return;
  14.214 -
  14.215 -	/* Get vendor name */
  14.216 -	cpuid(0x00000000, &c->cpuid_level,
  14.217 -	      (int *)&c->x86_vendor_id[0],
  14.218 -	      (int *)&c->x86_vendor_id[8],
  14.219 -	      (int *)&c->x86_vendor_id[4]);
  14.220 -
  14.221 -	get_cpu_vendor(c, 1);
  14.222 -
  14.223 -	c->x86 = 4;
  14.224 -	if (c->cpuid_level >= 0x00000001) {
  14.225 -		u32 junk, tfms, cap0, misc;
  14.226 -		cpuid(0x00000001, &tfms, &misc, &junk, &cap0);
  14.227 -		c->x86 = (tfms >> 8) & 15;
  14.228 -		c->x86_model = (tfms >> 4) & 15;
  14.229 -		if (c->x86 == 0xf) {
  14.230 -			c->x86 += (tfms >> 20) & 0xff;
  14.231 -			c->x86_model += ((tfms >> 16) & 0xF) << 4;
  14.232 -		}
  14.233 -		c->x86_mask = tfms & 15;
  14.234 -		if (cap0 & (1<<19))
  14.235 -			c->x86_cache_alignment = ((misc >> 8) & 0xff) * 8;
  14.236 -	}
  14.237 -
  14.238 -	early_intel_workaround(c);
  14.239 -}
  14.240 -
  14.241 -void __init generic_identify(struct cpuinfo_x86 * c)
  14.242 -{
  14.243 -	u32 tfms, xlvl;
  14.244 -	int junk;
  14.245 -
  14.246 -	if (have_cpuid_p()) {
  14.247 -		/* Get vendor name */
  14.248 -		cpuid(0x00000000, &c->cpuid_level,
  14.249 -		      (int *)&c->x86_vendor_id[0],
  14.250 -		      (int *)&c->x86_vendor_id[8],
  14.251 -		      (int *)&c->x86_vendor_id[4]);
  14.252 -		
  14.253 -		get_cpu_vendor(c, 0);
  14.254 -		/* Initialize the standard set of capabilities */
  14.255 -		/* Note that the vendor-specific code below might override */
  14.256 -	
  14.257 -		/* Intel-defined flags: level 0x00000001 */
  14.258 -		if ( c->cpuid_level >= 0x00000001 ) {
  14.259 -			u32 capability, excap;
  14.260 -			cpuid(0x00000001, &tfms, &junk, &excap, &capability);
  14.261 -			c->x86_capability[0] = capability;
  14.262 -			c->x86_capability[4] = excap;
  14.263 -			c->x86 = (tfms >> 8) & 15;
  14.264 -			c->x86_model = (tfms >> 4) & 15;
  14.265 -			if (c->x86 == 0xf) {
  14.266 -				c->x86 += (tfms >> 20) & 0xff;
  14.267 -				c->x86_model += ((tfms >> 16) & 0xF) << 4;
  14.268 -			} 
  14.269 -			c->x86_mask = tfms & 15;
  14.270 -		} else {
  14.271 -			/* Have CPUID level 0 only - unheard of */
  14.272 -			c->x86 = 4;
  14.273 -		}
  14.274 -
  14.275 -		/* AMD-defined flags: level 0x80000001 */
  14.276 -		xlvl = cpuid_eax(0x80000000);
  14.277 -		if ( (xlvl & 0xffff0000) == 0x80000000 ) {
  14.278 -			if ( xlvl >= 0x80000001 )
  14.279 -				c->x86_capability[1] = cpuid_edx(0x80000001);
  14.280 -			if ( xlvl >= 0x80000004 )
  14.281 -				get_model_name(c); /* Default name */
  14.282 -		}
  14.283 -	}
  14.284 -}
  14.285 -
  14.286 -static void __init squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
  14.287 -{
  14.288 -	if (cpu_has(c, X86_FEATURE_PN) && disable_x86_serial_nr ) {
  14.289 -		/* Disable processor serial number */
  14.290 -		unsigned long lo,hi;
  14.291 -		rdmsr(MSR_IA32_BBL_CR_CTL,lo,hi);
  14.292 -		lo |= 0x200000;
  14.293 -		wrmsr(MSR_IA32_BBL_CR_CTL,lo,hi);
  14.294 -		printk(KERN_NOTICE "CPU serial number disabled.\n");
  14.295 -		clear_bit(X86_FEATURE_PN, c->x86_capability);
  14.296 -
  14.297 -		/* Disabling the serial number may affect the cpuid level */
  14.298 -		c->cpuid_level = cpuid_eax(0);
  14.299 -	}
  14.300 -}
  14.301 -
  14.302 -static int __init x86_serial_nr_setup(char *s)
  14.303 -{
  14.304 -	disable_x86_serial_nr = 0;
  14.305 -	return 1;
  14.306 -}
  14.307 -__setup("serialnumber", x86_serial_nr_setup);
  14.308 -
  14.309 -
  14.310 -
  14.311 -/*
  14.312 - * This does the hard work of actually picking apart the CPU stuff...
  14.313 - */
  14.314 -void __init identify_cpu(struct cpuinfo_x86 *c)
  14.315 -{
  14.316 -	int i;
  14.317 -
  14.318 -	c->loops_per_jiffy = loops_per_jiffy;
  14.319 -	c->x86_cache_size = -1;
  14.320 -	c->x86_vendor = X86_VENDOR_UNKNOWN;
  14.321 -	c->cpuid_level = -1;	/* CPUID not detected */
  14.322 -	c->x86_model = c->x86_mask = 0;	/* So far unknown... */
  14.323 -	c->x86_vendor_id[0] = '\0'; /* Unset */
  14.324 -	c->x86_model_id[0] = '\0';  /* Unset */
  14.325 -	memset(&c->x86_capability, 0, sizeof c->x86_capability);
  14.326 -
  14.327 -	if (!have_cpuid_p()) {
  14.328 -		/* First of all, decide if this is a 486 or higher */
  14.329 -		/* It's a 486 if we can modify the AC flag */
  14.330 -		if ( flag_is_changeable_p(X86_EFLAGS_AC) )
  14.331 -			c->x86 = 4;
  14.332 -		else
  14.333 -			c->x86 = 3;
  14.334 -	}
  14.335 -
  14.336 -	generic_identify(c);
  14.337 -
  14.338 -	printk(KERN_DEBUG "CPU: After generic identify, caps: %08lx %08lx %08lx %08lx\n",
  14.339 -		c->x86_capability[0],
  14.340 -		c->x86_capability[1],
  14.341 -		c->x86_capability[2],
  14.342 -		c->x86_capability[3]);
  14.343 -
  14.344 -	if (this_cpu->c_identify) {
  14.345 -		this_cpu->c_identify(c);
  14.346 -
  14.347 -	printk(KERN_DEBUG "CPU: After vendor identify, caps:  %08lx %08lx %08lx %08lx\n",
  14.348 -		c->x86_capability[0],
  14.349 -		c->x86_capability[1],
  14.350 -		c->x86_capability[2],
  14.351 -		c->x86_capability[3]);
  14.352 -}
  14.353 -
  14.354 -	/*
  14.355 -	 * Vendor-specific initialization.  In this section we
  14.356 -	 * canonicalize the feature flags, meaning if there are
  14.357 -	 * features a certain CPU supports which CPUID doesn't
  14.358 -	 * tell us, CPUID claiming incorrect flags, or other bugs,
  14.359 -	 * we handle them here.
  14.360 -	 *
  14.361 -	 * At the end of this section, c->x86_capability better
  14.362 -	 * indicate the features this CPU genuinely supports!
  14.363 -	 */
  14.364 -	if (this_cpu->c_init)
  14.365 -		this_cpu->c_init(c);
  14.366 -
  14.367 -	/* Disable the PN if appropriate */
  14.368 -	squash_the_stupid_serial_number(c);
  14.369 -
  14.370 -	/*
  14.371 -	 * The vendor-specific functions might have changed features.  Now
  14.372 -	 * we do "generic changes."
  14.373 -	 */
  14.374 -
  14.375 -	/* TSC disabled? */
  14.376 -	if ( tsc_disable )
  14.377 -		clear_bit(X86_FEATURE_TSC, c->x86_capability);
  14.378 -
  14.379 -	/* FXSR disabled? */
  14.380 -	if (disable_x86_fxsr) {
  14.381 -		clear_bit(X86_FEATURE_FXSR, c->x86_capability);
  14.382 -		clear_bit(X86_FEATURE_XMM, c->x86_capability);
  14.383 -	}
  14.384 -
  14.385 -	if (disable_pse)
  14.386 -		clear_bit(X86_FEATURE_PSE, c->x86_capability);
  14.387 -
  14.388 -	/* If the model name is still unset, do table lookup. */
  14.389 -	if ( !c->x86_model_id[0] ) {
  14.390 -		char *p;
  14.391 -		p = table_lookup_model(c);
  14.392 -		if ( p )
  14.393 -			strcpy(c->x86_model_id, p);
  14.394 -		else
  14.395 -			/* Last resort... */
  14.396 -			sprintf(c->x86_model_id, "%02x/%02x",
  14.397 -				c->x86_vendor, c->x86_model);
  14.398 -	}
  14.399 -
  14.400 -	machine_specific_modify_cpu_capabilities(c);
  14.401 -
  14.402 -	/* Now the feature flags better reflect actual CPU features! */
  14.403 -
  14.404 -	printk(KERN_DEBUG "CPU: After all inits, caps:        %08lx %08lx %08lx %08lx\n",
  14.405 -	       c->x86_capability[0],
  14.406 -	       c->x86_capability[1],
  14.407 -	       c->x86_capability[2],
  14.408 -	       c->x86_capability[3]);
  14.409 -
  14.410 -	/*
  14.411 -	 * On SMP, boot_cpu_data holds the common feature set between
  14.412 -	 * all CPUs; so make sure that we indicate which features are
  14.413 -	 * common between the CPUs.  The first time this routine gets
  14.414 -	 * executed, c == &boot_cpu_data.
  14.415 -	 */
  14.416 -	if ( c != &boot_cpu_data ) {
  14.417 -		/* AND the already accumulated flags with these */
  14.418 -		for ( i = 0 ; i < NCAPINTS ; i++ )
  14.419 -			boot_cpu_data.x86_capability[i] &= c->x86_capability[i];
  14.420 -	}
  14.421 -
  14.422 -	/* Init Machine Check Exception if available. */
  14.423 -#ifdef CONFIG_X86_MCE
  14.424 -	mcheck_init(c);
  14.425 -#endif
  14.426 -}
  14.427 -/*
  14.428 - *	Perform early boot up checks for a valid TSC. See arch/i386/kernel/time.c
  14.429 - */
  14.430 - 
  14.431 -void __init dodgy_tsc(void)
  14.432 -{
  14.433 -	if (( boot_cpu_data.x86_vendor == X86_VENDOR_CYRIX ) ||
  14.434 -	    ( boot_cpu_data.x86_vendor == X86_VENDOR_NSC   ))
  14.435 -		cpu_devs[X86_VENDOR_CYRIX]->c_init(&boot_cpu_data);
  14.436 -}
  14.437 -
  14.438 -void __init print_cpu_info(struct cpuinfo_x86 *c)
  14.439 -{
  14.440 -	char *vendor = NULL;
  14.441 -
  14.442 -	if (c->x86_vendor < X86_VENDOR_NUM)
  14.443 -		vendor = this_cpu->c_vendor;
  14.444 -	else if (c->cpuid_level >= 0)
  14.445 -		vendor = c->x86_vendor_id;
  14.446 -
  14.447 -	if (vendor && strncmp(c->x86_model_id, vendor, strlen(vendor)))
  14.448 -		printk("%s ", vendor);
  14.449 -
  14.450 -	if (!c->x86_model_id[0])
  14.451 -		printk("%d86", c->x86);
  14.452 -	else
  14.453 -		printk("%s", c->x86_model_id);
  14.454 -
  14.455 -	if (c->x86_mask || c->cpuid_level >= 0) 
  14.456 -		printk(" stepping %02x\n", c->x86_mask);
  14.457 -	else
  14.458 -		printk("\n");
  14.459 -}
  14.460 -
  14.461 -unsigned long cpu_initialized __initdata = 0;
  14.462 -
  14.463 -/* This is hacky. :)
  14.464 - * We're emulating future behavior.
  14.465 - * In the future, the cpu-specific init functions will be called implicitly
  14.466 - * via the magic of initcalls.
  14.467 - * They will insert themselves into the cpu_devs structure.
  14.468 - * Then, when cpu_init() is called, we can just iterate over that array.
  14.469 - */
  14.470 -
  14.471 -extern int intel_cpu_init(void);
  14.472 -extern int cyrix_init_cpu(void);
  14.473 -extern int nsc_init_cpu(void);
  14.474 -extern int amd_init_cpu(void);
  14.475 -extern int centaur_init_cpu(void);
  14.476 -extern int transmeta_init_cpu(void);
  14.477 -extern int rise_init_cpu(void);
  14.478 -extern int nexgen_init_cpu(void);
  14.479 -extern int umc_init_cpu(void);
  14.480 -void early_cpu_detect(void);
  14.481 -
  14.482 -void __init early_cpu_init(void)
  14.483 -{
  14.484 -	intel_cpu_init();
  14.485 -	cyrix_init_cpu();
  14.486 -	nsc_init_cpu();
  14.487 -	amd_init_cpu();
  14.488 -	centaur_init_cpu();
  14.489 -	transmeta_init_cpu();
  14.490 -	rise_init_cpu();
  14.491 -	nexgen_init_cpu();
  14.492 -	umc_init_cpu();
  14.493 -	early_cpu_detect();
  14.494 -
  14.495 -#ifdef CONFIG_DEBUG_PAGEALLOC
  14.496 -	/* pse is not compatible with on-the-fly unmapping,
  14.497 -	 * disable it even if the cpus claim to support it.
  14.498 -	 */
  14.499 -	clear_bit(X86_FEATURE_PSE, boot_cpu_data.x86_capability);
  14.500 -	disable_pse = 1;
  14.501 -#endif
  14.502 -}
  14.503 -
  14.504 -void __init cpu_gdt_init(struct Xgt_desc_struct *gdt_descr)
  14.505 -{
  14.506 -	unsigned long frames[gdt_descr->size >> PAGE_SHIFT];
  14.507 -	unsigned long va;
  14.508 -	int f;
  14.509 -
  14.510 -	for (va = gdt_descr->address, f = 0;
  14.511 -	     va < gdt_descr->address + gdt_descr->size;
  14.512 -	     va += PAGE_SIZE, f++) {
  14.513 -		frames[f] = virt_to_machine(va) >> PAGE_SHIFT;
  14.514 -		protect_page(swapper_pg_dir, (void *)va, PROT_ON);
  14.515 -	}
  14.516 -	flush_page_update_queue();
  14.517 -	if (HYPERVISOR_set_gdt(frames, gdt_descr->size / 8))
  14.518 -		BUG();
  14.519 -	lgdt_finish();
  14.520 -}
  14.521 -
  14.522 -/*
  14.523 - * cpu_init() initializes state that is per-CPU. Some data is already
  14.524 - * initialized (naturally) in the bootstrap process, such as the GDT
  14.525 - * and IDT. We reload them nevertheless, this function acts as a
  14.526 - * 'CPU state barrier', nothing should get across.
  14.527 - */
  14.528 -void __init cpu_init (void)
  14.529 -{
  14.530 -	int cpu = smp_processor_id();
  14.531 -	struct tss_struct * t = init_tss + cpu;
  14.532 -	struct thread_struct *thread = &current->thread;
  14.533 -
  14.534 -	if (test_and_set_bit(cpu, &cpu_initialized)) {
  14.535 -		printk(KERN_WARNING "CPU#%d already initialized!\n", cpu);
  14.536 -		for (;;) local_irq_enable();
  14.537 -	}
  14.538 -	printk(KERN_INFO "Initializing CPU#%d\n", cpu);
  14.539 -
  14.540 -	if (cpu_has_vme || cpu_has_de)
  14.541 -		clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);
  14.542 -	if (tsc_disable && cpu_has_tsc) {
  14.543 -		printk(KERN_NOTICE "Disabling TSC...\n");
  14.544 -		/**** FIX-HPA: DOES THIS REALLY BELONG HERE? ****/
  14.545 -		clear_bit(X86_FEATURE_TSC, boot_cpu_data.x86_capability);
  14.546 -		set_in_cr4(X86_CR4_TSD);
  14.547 -	}
  14.548 -
  14.549 -	/*
  14.550 -	 * Initialize the per-CPU GDT with the boot GDT,
  14.551 -	 * and set up the GDT descriptor:
  14.552 -	 */
  14.553 -	if (cpu) {
  14.554 -		cpu_gdt_descr[cpu].size = GDT_SIZE;
  14.555 -		cpu_gdt_descr[cpu].address = 0;	/* XXXcl alloc page */
  14.556 -		BUG();		/* XXXcl SMP */
  14.557 -		memcpy((void *)cpu_gdt_descr[cpu].address,
  14.558 -		    (void *)cpu_gdt_descr[0].address, GDT_SIZE);
  14.559 -	}
  14.560 -	/*
  14.561 -	 * Set up the per-thread TLS descriptor cache:
  14.562 -	 */
  14.563 -	memcpy(thread->tls_array, &get_cpu_gdt_table(cpu)[GDT_ENTRY_TLS_MIN],
  14.564 -	    GDT_ENTRY_TLS_ENTRIES * 8);
  14.565 -
  14.566 -	cpu_gdt_init(&cpu_gdt_descr[cpu]);
  14.567 -
  14.568 -	/*
  14.569 -	 * Delete NT
  14.570 -	 */
  14.571 -	__asm__("pushfl ; andl $0xffffbfff,(%esp) ; popfl");
  14.572 -
  14.573 -	/*
  14.574 -	 * Set up and load the per-CPU TSS and LDT
  14.575 -	 */
  14.576 -	atomic_inc(&init_mm.mm_count);
  14.577 -	current->active_mm = &init_mm;
  14.578 -	if (current->mm)
  14.579 -		BUG();
  14.580 -	enter_lazy_tlb(&init_mm, current);
  14.581 -
  14.582 -	load_esp0(t, thread);
  14.583 -
  14.584 -	load_LDT(&init_mm.context);
  14.585 -	flush_page_update_queue();
  14.586 -
  14.587 -	/* Clear %fs and %gs. */
  14.588 -	asm volatile ("xorl %eax, %eax; movl %eax, %fs; movl %eax, %gs");
  14.589 -
  14.590 -	/* Clear all 6 debug registers: */
  14.591 -
  14.592 -#define CD(register) HYPERVISOR_set_debugreg(register, 0)
  14.593 -
  14.594 -	CD(0); CD(1); CD(2); CD(3); /* no db4 and db5 */; CD(6); CD(7);
  14.595 -
  14.596 -#undef CD
  14.597 -
  14.598 -	/*
  14.599 -	 * Force FPU initialization:
  14.600 -	 */
  14.601 -	current_thread_info()->status = 0;
  14.602 -	current->used_math = 0;
  14.603 -	mxcsr_feature_mask_init();
  14.604 -}
    15.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/entry.S	Mon Oct 25 12:45:34 2004 +0000
    15.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.3 @@ -1,1029 +0,0 @@
    15.4 -/*
    15.5 - *  linux/arch/i386/entry.S
    15.6 - *
    15.7 - *  Copyright (C) 1991, 1992  Linus Torvalds
    15.8 - */
    15.9 -
   15.10 -/*
   15.11 - * entry.S contains the system-call and fault low-level handling routines.
   15.12 - * This also contains the timer-interrupt handler, as well as all interrupts
   15.13 - * and faults that can result in a task-switch.
   15.14 - *
   15.15 - * NOTE: This code handles signal-recognition, which happens every time
   15.16 - * after a timer-interrupt and after each system call.
   15.17 - *
   15.18 - * I changed all the .align's to 4 (16 byte alignment), as that's faster
   15.19 - * on a 486.
   15.20 - *
   15.21 - * Stack layout in 'ret_from_system_call':
   15.22 - * 	ptrace needs to have all regs on the stack.
   15.23 - *	if the order here is changed, it needs to be
   15.24 - *	updated in fork.c:copy_process, signal.c:do_signal,
   15.25 - *	ptrace.c and ptrace.h
   15.26 - *
   15.27 - *	 0(%esp) - %ebx
   15.28 - *	 4(%esp) - %ecx
   15.29 - *	 8(%esp) - %edx
   15.30 - *       C(%esp) - %esi
   15.31 - *	10(%esp) - %edi
   15.32 - *	14(%esp) - %ebp
   15.33 - *	18(%esp) - %eax
   15.34 - *	1C(%esp) - %ds
   15.35 - *	20(%esp) - %es
   15.36 - *	24(%esp) - orig_eax
   15.37 - *	28(%esp) - %eip
   15.38 - *	2C(%esp) - %cs
   15.39 - *	30(%esp) - %eflags
   15.40 - *	34(%esp) - %oldesp
   15.41 - *	38(%esp) - %oldss
   15.42 - *
   15.43 - * "current" is in register %ebx during any slow entries.
   15.44 - */
   15.45 -
   15.46 -#include <linux/config.h>
   15.47 -#include <linux/linkage.h>
   15.48 -#include <asm/thread_info.h>
   15.49 -#include <asm/errno.h>
   15.50 -#include <asm/segment.h>
   15.51 -#include <asm/smp.h>
   15.52 -#include <asm/page.h>
   15.53 -#include "irq_vectors.h"
   15.54 -#include <asm/hypervisor-ifs/hypervisor-if.h>
   15.55 -
   15.56 -#define nr_syscalls ((syscall_table_size)/4)
   15.57 -
   15.58 -EBX		= 0x00
   15.59 -ECX		= 0x04
   15.60 -EDX		= 0x08
   15.61 -ESI		= 0x0C
   15.62 -EDI		= 0x10
   15.63 -EBP		= 0x14
   15.64 -EAX		= 0x18
   15.65 -DS		= 0x1C
   15.66 -ES		= 0x20
   15.67 -ORIG_EAX	= 0x24
   15.68 -EIP		= 0x28
   15.69 -CS		= 0x2C
   15.70 -EFLAGS		= 0x30
   15.71 -OLDESP		= 0x34
   15.72 -OLDSS		= 0x38
   15.73 -
   15.74 -CF_MASK		= 0x00000001
   15.75 -TF_MASK		= 0x00000100
   15.76 -IF_MASK		= 0x00000200
   15.77 -DF_MASK		= 0x00000400 
   15.78 -NT_MASK		= 0x00004000
   15.79 -VM_MASK		= 0x00020000
   15.80 -
   15.81 -/* Offsets into shared_info_t. */
   15.82 -#define evtchn_upcall_pending		/* 0 */
   15.83 -#define evtchn_upcall_mask		1
   15.84 -
   15.85 -#define XEN_BLOCK_EVENTS(reg)	movb $1,evtchn_upcall_mask(reg)
   15.86 -#define XEN_UNBLOCK_EVENTS(reg)	movb $0,evtchn_upcall_mask(reg)
   15.87 -#define XEN_TEST_PENDING(reg)	testb $0xFF,evtchn_upcall_pending(%reg)
   15.88 -
   15.89 -#ifdef CONFIG_PREEMPT
   15.90 -#define preempt_stop		movl HYPERVISOR_shared_info,%esi	; \
   15.91 -				XEN_BLOCK_EVENTS(%esi)
   15.92 -#else
   15.93 -#define preempt_stop
   15.94 -#define resume_kernel		restore_all
   15.95 -#endif
   15.96 -
   15.97 -#define SAVE_ALL \
   15.98 -	cld; \
   15.99 -	pushl %es; \
  15.100 -	pushl %ds; \
  15.101 -	pushl %eax; \
  15.102 -	pushl %ebp; \
  15.103 -	pushl %edi; \
  15.104 -	pushl %esi; \
  15.105 -	pushl %edx; \
  15.106 -	pushl %ecx; \
  15.107 -	pushl %ebx; \
  15.108 -	movl $(__KERNEL_DS), %edx; \
  15.109 -	movl %edx, %ds; \
  15.110 -	movl %edx, %es;
  15.111 -	# XXXcl USER?
  15.112 -
  15.113 -#define RESTORE_INT_REGS \
  15.114 -	popl %ebx;	\
  15.115 -	popl %ecx;	\
  15.116 -	popl %edx;	\
  15.117 -	popl %esi;	\
  15.118 -	popl %edi;	\
  15.119 -	popl %ebp;	\
  15.120 -	popl %eax
  15.121 -
  15.122 -#define RESTORE_REGS	\
  15.123 -	RESTORE_INT_REGS; \
  15.124 -1:	popl %ds;	\
  15.125 -2:	popl %es;	\
  15.126 -.section .fixup,"ax";	\
  15.127 -3:	movl $0,(%esp);	\
  15.128 -	jmp 1b;		\
  15.129 -4:	movl $0,(%esp);	\
  15.130 -	jmp 2b;		\
  15.131 -.previous;		\
  15.132 -.section __ex_table,"a";\
  15.133 -	.align 4;	\
  15.134 -	.long 1b,3b;	\
  15.135 -	.long 2b,4b;	\
  15.136 -.previous
  15.137 -
  15.138 -
  15.139 -#define RESTORE_ALL	\
  15.140 -	RESTORE_REGS	\
  15.141 -	addl $4, %esp;	\
  15.142 -1:	iret;		\
  15.143 -.section .fixup,"ax";   \
  15.144 -2:	movl $(__USER_DS), %edx; \
  15.145 -	movl %edx, %ds; \
  15.146 -	movl %edx, %es; \
  15.147 -	pushl $11;	\
  15.148 -	call do_exit;	\
  15.149 -.previous;		\
  15.150 -.section __ex_table,"a";\
  15.151 -	.align 4;	\
  15.152 -	.long 1b,2b;	\
  15.153 -.previous
  15.154 -
  15.155 -
  15.156 -
  15.157 -ENTRY(lcall7)
  15.158 -	pushfl			# We get a different stack layout with call
  15.159 -				# gates, which has to be cleaned up later..
  15.160 -	pushl %eax
  15.161 -	SAVE_ALL
  15.162 -	movl %esp, %ebp
  15.163 -	pushl %ebp
  15.164 -	pushl $0x7
  15.165 -do_lcall:
  15.166 -	movl EIP(%ebp), %eax	# due to call gates, this is eflags, not eip..
  15.167 -	movl CS(%ebp), %edx	# this is eip..
  15.168 -	movl EFLAGS(%ebp), %ecx	# and this is cs..
  15.169 -	movl %eax,EFLAGS(%ebp)	#
  15.170 -	movl %edx,EIP(%ebp)	# Now we move them to their "normal" places
  15.171 -	movl %ecx,CS(%ebp)	#
  15.172 -	GET_THREAD_INFO_WITH_ESP(%ebp)	# GET_THREAD_INFO
  15.173 -	movl TI_exec_domain(%ebp), %edx	# Get the execution domain
  15.174 -	call *EXEC_DOMAIN_handler(%edx)	# Call the handler for the domain
  15.175 -	addl $4, %esp
  15.176 -	popl %eax
  15.177 -	jmp resume_userspace
  15.178 -
  15.179 -ENTRY(lcall27)
  15.180 -	pushfl			# We get a different stack layout with call
  15.181 -				# gates, which has to be cleaned up later..
  15.182 -	pushl %eax
  15.183 -	SAVE_ALL
  15.184 -	movl %esp, %ebp
  15.185 -	pushl %ebp
  15.186 -	pushl $0x27
  15.187 -	jmp do_lcall
  15.188 -
  15.189 -
  15.190 -ENTRY(ret_from_fork)
  15.191 -	pushl %eax
  15.192 -	call schedule_tail
  15.193 -	GET_THREAD_INFO(%ebp)
  15.194 -	popl %eax
  15.195 -	jmp syscall_exit
  15.196 -
  15.197 -/*
  15.198 - * Return to user mode is not as complex as all this looks,
  15.199 - * but we want the default path for a system call return to
  15.200 - * go as quickly as possible which is why some of this is
  15.201 - * less clear than it otherwise should be.
  15.202 - */
  15.203 -
  15.204 -	# userspace resumption stub bypassing syscall exit tracing
  15.205 -	ALIGN
  15.206 -ret_from_exception:
  15.207 -	preempt_stop
  15.208 -ret_from_intr:
  15.209 -	GET_THREAD_INFO(%ebp)
  15.210 -	movl EFLAGS(%esp), %eax		# mix EFLAGS and CS
  15.211 -	movb CS(%esp), %al
  15.212 -	testl $(VM_MASK | 2), %eax
  15.213 -	jz resume_kernel		# returning to kernel or vm86-space
  15.214 -ENTRY(resume_userspace)
  15.215 -	movl HYPERVISOR_shared_info,%esi
  15.216 -	XEN_BLOCK_EVENTS(%esi)		# make tests atomic
  15.217 -					# make sure we don't miss an interrupt
  15.218 -					# setting need_resched or sigpending
  15.219 -					# between sampling and the iret
  15.220 -ret_syscall_tests:
  15.221 -	movl TI_flags(%ebp), %ecx
  15.222 -	andl $_TIF_WORK_MASK, %ecx	# is there any work to be done on
  15.223 -					# int/exception return?
  15.224 -	jne work_pending
  15.225 -	jmp restore_all_enable_events
  15.226 -
  15.227 -#ifdef CONFIG_PREEMPT
  15.228 -ENTRY(resume_kernel)
  15.229 -	movl HYPERVISOR_shared_info,%esi
  15.230 -	cmpl $0,TI_preempt_count(%ebp)	# non-zero preempt_count ?
  15.231 -	jnz restore_all_enable_events
  15.232 -need_resched:
  15.233 -	movl TI_flags(%ebp), %ecx	# need_resched set ?
  15.234 -	testb $_TIF_NEED_RESCHED, %cl
  15.235 -	jz restore_all_enable_events
  15.236 -	testl $IF_MASK,EFLAGS(%esp)     # interrupts off (exception path) ?
  15.237 -	jz restore_all_enable_events
  15.238 -	movl $PREEMPT_ACTIVE,TI_preempt_count(%ebp)
  15.239 -	XEN_UNBLOCK_EVENTS(%esi)	# reenable event callbacks
  15.240 -	call schedule
  15.241 -	movl $0,TI_preempt_count(%ebp)
  15.242 -	movl HYPERVISOR_shared_info,%esi
  15.243 -	XEN_BLOCK_EVENTS(%esi)		# make tests atomic
  15.244 -	jmp need_resched
  15.245 -#endif
  15.246 -
  15.247 -/* SYSENTER_RETURN points to after the "sysenter" instruction in
  15.248 -   the vsyscall page.  See vsyscall-sysentry.S, which defines the symbol.  */
  15.249 -
  15.250 -	# sysenter call handler stub
  15.251 -ENTRY(sysenter_entry)
  15.252 -	movl TSS_sysenter_esp0(%esp),%esp
  15.253 -sysenter_past_esp:
  15.254 -	sti
  15.255 -	pushl $(__USER_DS)
  15.256 -	pushl %ebp
  15.257 -	pushfl
  15.258 -	pushl $(__USER_CS)
  15.259 -	pushl $SYSENTER_RETURN
  15.260 -
  15.261 -/*
  15.262 - * Load the potential sixth argument from user stack.
  15.263 - * Careful about security.
  15.264 - */
  15.265 -	cmpl $__PAGE_OFFSET-3,%ebp
  15.266 -	jae syscall_fault
  15.267 -1:	movl (%ebp),%ebp
  15.268 -.section __ex_table,"a"
  15.269 -	.align 4
  15.270 -	.long 1b,syscall_fault
  15.271 -.previous
  15.272 -
  15.273 -	pushl %eax
  15.274 -	SAVE_ALL
  15.275 -	GET_THREAD_INFO(%ebp)
  15.276 -	cmpl $(nr_syscalls), %eax
  15.277 -	jae syscall_badsys
  15.278 -
  15.279 -	testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
  15.280 -	jnz syscall_trace_entry
  15.281 -	call *sys_call_table(,%eax,4)
  15.282 -	movl %eax,EAX(%esp)
  15.283 -	cli
  15.284 -	movl TI_flags(%ebp), %ecx
  15.285 -	testw $_TIF_ALLWORK_MASK, %cx
  15.286 -	jne syscall_exit_work
  15.287 -/* if something modifies registers it must also disable sysexit */
  15.288 -	movl EIP(%esp), %edx
  15.289 -	movl OLDESP(%esp), %ecx
  15.290 -	sti
  15.291 -	sysexit
  15.292 -
  15.293 -
  15.294 -	# system call handler stub
  15.295 -ENTRY(system_call)
  15.296 -	pushl %eax			# save orig_eax
  15.297 -	SAVE_ALL
  15.298 -	GET_THREAD_INFO(%ebp)
  15.299 -	cmpl $(nr_syscalls), %eax
  15.300 -	jae syscall_badsys
  15.301 -					# system call tracing in operation
  15.302 -	testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
  15.303 -	jnz syscall_trace_entry
  15.304 -syscall_call:
  15.305 -	call *sys_call_table(,%eax,4)
  15.306 -	movl %eax,EAX(%esp)		# store the return value
  15.307 -syscall_exit:
  15.308 -	movl HYPERVISOR_shared_info,%esi
  15.309 -	XEN_BLOCK_EVENTS(%esi)		# make tests atomic
  15.310 -					# make sure we don't miss an interrupt
  15.311 -					# setting need_resched or sigpending
  15.312 -					# between sampling and the iret
  15.313 -	movl TI_flags(%ebp), %ecx
  15.314 -	testw $_TIF_ALLWORK_MASK, %cx	# current->work
  15.315 -	jne syscall_exit_work
  15.316 -	jmp restore_all_enable_events
  15.317 -
  15.318 -	ALIGN
  15.319 -restore_all:
  15.320 -	RESTORE_ALL
  15.321 -
  15.322 -	# perform work that needs to be done immediately before resumption
  15.323 -	ALIGN
  15.324 -work_pending:
  15.325 -	XEN_UNBLOCK_EVENTS(%esi)	# reenable event callbacks
  15.326 -	testb $_TIF_NEED_RESCHED, %cl
  15.327 -	jz work_notifysig
  15.328 -work_resched:
  15.329 -	call schedule
  15.330 -	movl HYPERVISOR_shared_info,%esi
  15.331 -	XEN_BLOCK_EVENTS(%esi)		# make tests atomic
  15.332 -					# make sure we don't miss an interrupt
  15.333 -					# setting need_resched or sigpending
  15.334 -					# between sampling and the iret
  15.335 -	movl TI_flags(%ebp), %ecx
  15.336 -	andl $_TIF_WORK_MASK, %ecx	# is there any work to be done other
  15.337 -					# than syscall tracing?
  15.338 -	jz restore_all_enable_events
  15.339 -	# XXXcl sti missing???
  15.340 -	XEN_UNBLOCK_EVENTS(%esi)	# reenable event callbacks
  15.341 -	testb $_TIF_NEED_RESCHED, %cl
  15.342 -	jnz work_resched
  15.343 -
  15.344 -work_notifysig:				# deal with pending signals and
  15.345 -					# notify-resume requests
  15.346 -	testl $VM_MASK, EFLAGS(%esp)
  15.347 -	movl %esp, %eax
  15.348 -	jne work_notifysig_v86		# returning to kernel-space or
  15.349 -					# vm86-space
  15.350 -	xorl %edx, %edx
  15.351 -	call do_notify_resume
  15.352 -	movl HYPERVISOR_shared_info,%esi
  15.353 -	jmp restore_all_enable_events
  15.354 -
  15.355 -	ALIGN
  15.356 -work_notifysig_v86:
  15.357 -	pushl %ecx
  15.358 -	call save_v86_state
  15.359 -	popl %ecx
  15.360 -	movl %eax, %esp
  15.361 -	xorl %edx, %edx
  15.362 -	call do_notify_resume
  15.363 -	movl HYPERVISOR_shared_info,%esi
  15.364 -	jmp restore_all_enable_events
  15.365 -
  15.366 -	# perform syscall exit tracing
  15.367 -	ALIGN
  15.368 -syscall_trace_entry:
  15.369 -	movl $-ENOSYS,EAX(%esp)
  15.370 -	movl %esp, %eax
  15.371 -	xorl %edx,%edx
  15.372 -	call do_syscall_trace
  15.373 -	movl ORIG_EAX(%esp), %eax
  15.374 -	cmpl $(nr_syscalls), %eax
  15.375 -	jnae syscall_call
  15.376 -	jmp syscall_exit
  15.377 -
  15.378 -	# perform syscall exit tracing
  15.379 -	ALIGN
  15.380 -syscall_exit_work:
  15.381 -	movl HYPERVISOR_shared_info,%esi
  15.382 -	testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT), %cl
  15.383 -	jz work_pending
  15.384 -	XEN_UNBLOCK_EVENTS(%esi)	# reenable event callbacks
  15.385 -					# could let do_syscall_trace() call
  15.386 -					# schedule() instead
  15.387 -	movl %esp, %eax
  15.388 -	movl $1, %edx
  15.389 -	call do_syscall_trace
  15.390 -	jmp resume_userspace
  15.391 -
  15.392 -	ALIGN
  15.393 -syscall_fault:
  15.394 -	pushl %eax			# save orig_eax
  15.395 -	SAVE_ALL
  15.396 -	GET_THREAD_INFO(%ebp)
  15.397 -	movl $-EFAULT,EAX(%esp)
  15.398 -	jmp resume_userspace
  15.399 -
  15.400 -	ALIGN
  15.401 -syscall_badsys:
  15.402 -	movl $-ENOSYS,EAX(%esp)
  15.403 -	jmp resume_userspace
  15.404 -
  15.405 -ENTRY(divide_error)
  15.406 -	pushl $0			# no error code
  15.407 -	pushl $do_divide_error
  15.408 -	ALIGN
  15.409 -error_code:
  15.410 -	pushl %ds
  15.411 -	pushl %eax
  15.412 -	xorl %eax, %eax
  15.413 -	pushl %ebp
  15.414 -	pushl %edi
  15.415 -	pushl %esi
  15.416 -	pushl %edx
  15.417 -	decl %eax			# eax = -1
  15.418 -	pushl %ecx
  15.419 -	pushl %ebx
  15.420 -	cld
  15.421 -	movl %es, %ecx
  15.422 -	movl ORIG_EAX(%esp), %esi	# get the error code
  15.423 -	movl ES(%esp), %edi		# get the function address
  15.424 -	movl %eax, ORIG_EAX(%esp)
  15.425 -	movl %ecx, ES(%esp)
  15.426 -	movl %esp, %edx
  15.427 -	pushl %esi			# push the error code
  15.428 -	pushl %edx			# push the pt_regs pointer
  15.429 -	movl $(__KERNEL_DS), %edx	# XXXcl USER?
  15.430 -	movl %edx, %ds
  15.431 -	movl %edx, %es
  15.432 -	call *%edi
  15.433 -	addl $8, %esp
  15.434 -	jmp ret_from_exception
  15.435 -
  15.436 -# A note on the "critical region" in our callback handler.
  15.437 -# We want to avoid stacking callback handlers due to events occurring
  15.438 -# during handling of the last event. To do this, we keep events disabled
  15.439 -# until we've done all processing. HOWEVER, we must enable events before
  15.440 -# popping the stack frame (can't be done atomically) and so it would still
  15.441 -# be possible to get enough handler activations to overflow the stack.
  15.442 -# Although unlikely, bugs of that kind are hard to track down, so we'd
  15.443 -# like to avoid the possibility.
  15.444 -# So, on entry to the handler we detect whether we interrupted an
  15.445 -# existing activation in its critical region -- if so, we pop the current
  15.446 -# activation and restart the handler using the previous one.
  15.447 -ENTRY(hypervisor_callback)
  15.448 -	pushl %eax
  15.449 -	SAVE_ALL
  15.450 -	GET_THREAD_INFO(%ebp)
  15.451 -	movl EIP(%esp),%eax
  15.452 -	cmpl $scrit,%eax
  15.453 -	jb   11f
  15.454 -	cmpl $ecrit,%eax
  15.455 -	jb   critical_region_fixup
  15.456 -11:	push %esp
  15.457 -	call evtchn_do_upcall
  15.458 -	add  $4,%esp
  15.459 -	movl HYPERVISOR_shared_info,%esi
  15.460 -	movb CS(%esp),%cl
  15.461 -	test $2,%cl			# slow return to ring 2 or 3
  15.462 -	jne  ret_syscall_tests
  15.463 -restore_all_enable_events:  
  15.464 -safesti:XEN_UNBLOCK_EVENTS(%esi)	# reenable event callbacks
  15.465 -scrit:	/**** START OF CRITICAL REGION ****/
  15.466 -	testb $1,evtchn_upcall_pending(%esi)
  15.467 -	jnz  14f			# process more events if necessary...
  15.468 -	RESTORE_ALL
  15.469 -14:	XEN_BLOCK_EVENTS(%esi)
  15.470 -	jmp  11b
  15.471 -ecrit:  /**** END OF CRITICAL REGION ****/
  15.472 -# [How we do the fixup]. We want to merge the current stack frame with the
  15.473 -# just-interrupted frame. How we do this depends on where in the critical
  15.474 -# region the interrupted handler was executing, and so how many saved
  15.475 -# registers are in each frame. We do this quickly using the lookup table
  15.476 -# 'critical_fixup_table'. For each byte offset in the critical region, it
  15.477 -# provides the number of bytes which have already been popped from the
  15.478 -# interrupted stack frame. 
  15.479 -critical_region_fixup:
  15.480 -	addl $critical_fixup_table-scrit,%eax
  15.481 -	movzbl (%eax),%eax		# %eax contains num bytes popped
  15.482 -	mov  %esp,%esi
  15.483 -	add  %eax,%esi			# %esi points at end of src region
  15.484 -	mov  %esp,%edi
  15.485 -	add  $0x34,%edi			# %edi points at end of dst region
  15.486 -	mov  %eax,%ecx
  15.487 -	shr  $2,%ecx			# convert words to bytes
  15.488 -	je   16f			# skip loop if nothing to copy
  15.489 -15:	subl $4,%esi			# pre-decrementing copy loop
  15.490 -	subl $4,%edi
  15.491 -	movl (%esi),%eax
  15.492 -	movl %eax,(%edi)
  15.493 -	loop 15b
  15.494 -16:	movl %edi,%esp			# final %edi is top of merged stack
  15.495 -	jmp  11b
  15.496 -
  15.497 -critical_fixup_table:
  15.498 -	.byte 0x00,0x00,0x00		# testb $0xff,(%esi)
  15.499 -	.byte 0x00,0x00			# jnz  14f
  15.500 -	.byte 0x00			# pop  %ebx
  15.501 -	.byte 0x04			# pop  %ecx
  15.502 -	.byte 0x08			# pop  %edx
  15.503 -	.byte 0x0c			# pop  %esi
  15.504 -	.byte 0x10			# pop  %edi
  15.505 -	.byte 0x14			# pop  %ebp
  15.506 -	.byte 0x18			# pop  %eax
  15.507 -	.byte 0x1c			# pop  %ds
  15.508 -	.byte 0x20			# pop  %es
  15.509 -	.byte 0x24,0x24,0x24		# add  $4,%esp
  15.510 -	.byte 0x28			# iret
  15.511 -	.byte 0x00,0x00,0x00,0x00	# movb $1,1(%esi)
  15.512 -	.byte 0x00,0x00			# jmp  11b
  15.513 -
  15.514 -# Hypervisor uses this for application faults while it executes.
  15.515 -ENTRY(failsafe_callback)
  15.516 -	pushal
  15.517 -	call install_safe_pf_handler
  15.518 -	movl 32(%esp),%ebx
  15.519 -1:	movl %ebx,%ds
  15.520 -	movl 36(%esp),%ebx
  15.521 -2:	movl %ebx,%es
  15.522 -	movl 40(%esp),%ebx
  15.523 -3:	movl %ebx,%fs
  15.524 -	movl 44(%esp),%ebx
  15.525 -4:	movl %ebx,%gs
  15.526 -	call install_normal_pf_handler
  15.527 -	popal
  15.528 -	addl $16,%esp
  15.529 -5:	iret
  15.530 -.section .fixup,"ax";	\
  15.531 -6:	xorl %ebx,%ebx;	\
  15.532 -	jmp 1b;		\
  15.533 -7:	xorl %ebx,%ebx;	\
  15.534 -	jmp 2b;		\
  15.535 -8:	xorl %ebx,%ebx;	\
  15.536 -	jmp 3b;		\
  15.537 -9:	xorl %ebx,%ebx;	\
  15.538 -	jmp 4b;		\
  15.539 -10:	pushl %ss;	\
  15.540 -	popl %ds;	\
  15.541 -	pushl %ss;	\
  15.542 -	popl %es;	\
  15.543 -	pushl $11;	\
  15.544 -	call do_exit;	\
  15.545 -.previous;		\
  15.546 -.section __ex_table,"a";\
  15.547 -	.align 4;	\
  15.548 -	.long 1b,6b;	\
  15.549 -	.long 2b,7b;	\
  15.550 -	.long 3b,8b;	\
  15.551 -	.long 4b,9b;	\
  15.552 -	.long 5b,10b;	\
  15.553 -.previous
  15.554 -
  15.555 -ENTRY(coprocessor_error)
  15.556 -	pushl $0
  15.557 -	pushl $do_coprocessor_error
  15.558 -	jmp error_code
  15.559 -
  15.560 -ENTRY(simd_coprocessor_error)
  15.561 -	pushl $0
  15.562 -	pushl $do_simd_coprocessor_error
  15.563 -	jmp error_code
  15.564 -
  15.565 -ENTRY(device_not_available)
  15.566 -	pushl $-1			# mark this as an int
  15.567 -	SAVE_ALL
  15.568 -	preempt_stop
  15.569 -	call math_state_restore
  15.570 -	jmp ret_from_exception
  15.571 -
  15.572 -/*
  15.573 - * Debug traps and NMI can happen at the one SYSENTER instruction
  15.574 - * that sets up the real kernel stack. Check here, since we can't
  15.575 - * allow the wrong stack to be used.
  15.576 - *
  15.577 - * "TSS_sysenter_esp0+12" is because the NMI/debug handler will have
  15.578 - * already pushed 3 words if it hits on the sysenter instruction:
  15.579 - * eflags, cs and eip.
  15.580 - *
  15.581 - * We just load the right stack, and push the three (known) values
  15.582 - * by hand onto the new stack - while updating the return eip past
  15.583 - * the instruction that would have done it for sysenter.
  15.584 - */
  15.585 -#define FIX_STACK(offset, ok, label)		\
  15.586 -	cmpw $__KERNEL_CS,4(%esp);		\
  15.587 -	jne ok;					\
  15.588 -label:						\
  15.589 -	movl TSS_sysenter_esp0+offset(%esp),%esp;	\
  15.590 -	pushfl;					\
  15.591 -	pushl $__KERNEL_CS;			\
  15.592 -	pushl $sysenter_past_esp
  15.593 -
  15.594 -ENTRY(debug)
  15.595 -	cmpl $sysenter_entry,(%esp)
  15.596 -	jne debug_stack_correct
  15.597 -	FIX_STACK(12, debug_stack_correct, debug_esp_fix_insn)
  15.598 -debug_stack_correct:
  15.599 -	pushl $0
  15.600 -	pushl $do_debug
  15.601 -	jmp error_code
  15.602 -
  15.603 -#if 0
  15.604 -/*
  15.605 - * NMI is doubly nasty. It can happen _while_ we're handling
  15.606 - * a debug fault, and the debug fault hasn't yet been able to
  15.607 - * clear up the stack. So we first check whether we got  an
  15.608 - * NMI on the sysenter entry path, but after that we need to
  15.609 - * check whether we got an NMI on the debug path where the debug
  15.610 - * fault happened on the sysenter path.
  15.611 - */
  15.612 -ENTRY(nmi)
  15.613 -	cmpl $sysenter_entry,(%esp)
  15.614 -	je nmi_stack_fixup
  15.615 -	pushl %eax
  15.616 -	movl %esp,%eax
  15.617 -	/* Do not access memory above the end of our stack page,
  15.618 -	 * it might not exist.
  15.619 -	 */
  15.620 -	andl $(THREAD_SIZE-1),%eax
  15.621 -	cmpl $(THREAD_SIZE-20),%eax
  15.622 -	popl %eax
  15.623 -	jae nmi_stack_correct
  15.624 -	cmpl $sysenter_entry,12(%esp)
  15.625 -	je nmi_debug_stack_check
  15.626 -nmi_stack_correct:
  15.627 -	pushl %eax
  15.628 -	SAVE_ALL
  15.629 -	movl %esp, %edx
  15.630 -	pushl $0
  15.631 -	pushl %edx
  15.632 -	call do_nmi
  15.633 -	addl $8, %esp
  15.634 -	RESTORE_ALL
  15.635 -
  15.636 -nmi_stack_fixup:
  15.637 -	FIX_STACK(12,nmi_stack_correct, 1)
  15.638 -	jmp nmi_stack_correct
  15.639 -nmi_debug_stack_check:
  15.640 -	cmpw $__KERNEL_CS,16(%esp)
  15.641 -	jne nmi_stack_correct
  15.642 -	cmpl $debug - 1,(%esp)
  15.643 -	jle nmi_stack_correct
  15.644 -	cmpl $debug_esp_fix_insn,(%esp)
  15.645 -	jle nmi_debug_stack_fixup
  15.646 -nmi_debug_stack_fixup:
  15.647 -	FIX_STACK(24,nmi_stack_correct, 1)
  15.648 -	jmp nmi_stack_correct
  15.649 -#endif
  15.650 -
  15.651 -ENTRY(int3)
  15.652 -	pushl $0
  15.653 -	pushl $do_int3
  15.654 -	jmp error_code
  15.655 -
  15.656 -ENTRY(overflow)
  15.657 -	pushl $0
  15.658 -	pushl $do_overflow
  15.659 -	jmp error_code
  15.660 -
  15.661 -ENTRY(bounds)
  15.662 -	pushl $0
  15.663 -	pushl $do_bounds
  15.664 -	jmp error_code
  15.665 -
  15.666 -ENTRY(invalid_op)
  15.667 -	pushl $0
  15.668 -	pushl $do_invalid_op
  15.669 -	jmp error_code
  15.670 -
  15.671 -ENTRY(coprocessor_segment_overrun)
  15.672 -	pushl $0
  15.673 -	pushl $do_coprocessor_segment_overrun
  15.674 -	jmp error_code
  15.675 -
  15.676 -ENTRY(double_fault)
  15.677 -	pushl $do_double_fault
  15.678 -	jmp error_code
  15.679 -
  15.680 -ENTRY(invalid_TSS)
  15.681 -	pushl $do_invalid_TSS
  15.682 -	jmp error_code
  15.683 -
  15.684 -ENTRY(segment_not_present)
  15.685 -	pushl $do_segment_not_present
  15.686 -	jmp error_code
  15.687 -
  15.688 -ENTRY(stack_segment)
  15.689 -	pushl $do_stack_segment
  15.690 -	jmp error_code
  15.691 -
  15.692 -ENTRY(general_protection)
  15.693 -	pushl $do_general_protection
  15.694 -	jmp error_code
  15.695 -
  15.696 -ENTRY(alignment_check)
  15.697 -	pushl $do_alignment_check
  15.698 -	jmp error_code
  15.699 -
  15.700 -# This handler is special, because it gets an extra value on its stack,
  15.701 -# which is the linear faulting address.
  15.702 -#define PAGE_FAULT_STUB(_name1, _name2)					  \
  15.703 -ENTRY(_name1)								  \
  15.704 -	pushl %ds							; \
  15.705 -	pushl %eax							; \
  15.706 -	xorl %eax,%eax							; \
  15.707 -	pushl %ebp							; \
  15.708 -	pushl %edi							; \
  15.709 -	pushl %esi							; \
  15.710 -	pushl %edx							; \
  15.711 -	decl %eax			/* eax = -1 */			; \
  15.712 -	pushl %ecx							; \
  15.713 -	pushl %ebx							; \
  15.714 -	GET_THREAD_INFO(%ebp)						; \
  15.715 -	cld								; \
  15.716 -	movl %es,%ecx							; \
  15.717 -	movl ORIG_EAX(%esp), %esi	/* get the error code */	; \
  15.718 -	movl ES(%esp), %edi		/* get the faulting address */	; \
  15.719 -	movl %eax, ORIG_EAX(%esp)					; \
  15.720 -	movl %ecx, ES(%esp)						; \
  15.721 -	movl %esp,%edx							; \
  15.722 -	pushl %edi			/* push the faulting address */	; \
  15.723 -	pushl %esi			/* push the error code */	; \
  15.724 -	pushl %edx			/* push the pt_regs pointer */	; \
  15.725 -	movl $(__KERNEL_DS),%edx					; \
  15.726 -	movl %edx,%ds							; \
  15.727 -	movl %edx,%es							; \
  15.728 -	call _name2							; \
  15.729 -	addl $12,%esp							; \
  15.730 -	jmp ret_from_exception						;
  15.731 -PAGE_FAULT_STUB(page_fault, do_page_fault)
  15.732 -PAGE_FAULT_STUB(safe_page_fault, do_safe_page_fault)
  15.733 -
  15.734 -#ifdef CONFIG_X86_MCE
  15.735 -ENTRY(machine_check)
  15.736 -	pushl $0
  15.737 -	pushl machine_check_vector
  15.738 -	jmp error_code
  15.739 -#endif
  15.740 -
  15.741 -ENTRY(fixup_4gb_segment)
  15.742 -	pushl $do_fixup_4gb_segment
  15.743 -	jmp error_code
  15.744 -
  15.745 -.data
  15.746 -ENTRY(sys_call_table)
  15.747 -	.long sys_restart_syscall	/* 0 - old "setup()" system call, used for restarting */
  15.748 -	.long sys_exit
  15.749 -	.long sys_fork
  15.750 -	.long sys_read
  15.751 -	.long sys_write
  15.752 -	.long sys_open		/* 5 */
  15.753 -	.long sys_close
  15.754 -	.long sys_waitpid
  15.755 -	.long sys_creat
  15.756 -	.long sys_link
  15.757 -	.long sys_unlink	/* 10 */
  15.758 -	.long sys_execve
  15.759 -	.long sys_chdir
  15.760 -	.long sys_time
  15.761 -	.long sys_mknod
  15.762 -	.long sys_chmod		/* 15 */
  15.763 -	.long sys_lchown16
  15.764 -	.long sys_ni_syscall	/* old break syscall holder */
  15.765 -	.long sys_stat
  15.766 -	.long sys_lseek
  15.767 -	.long sys_getpid	/* 20 */
  15.768 -	.long sys_mount
  15.769 -	.long sys_oldumount
  15.770 -	.long sys_setuid16
  15.771 -	.long sys_getuid16
  15.772 -	.long sys_stime		/* 25 */
  15.773 -	.long sys_ptrace
  15.774 -	.long sys_alarm
  15.775 -	.long sys_fstat
  15.776 -	.long sys_pause
  15.777 -	.long sys_utime		/* 30 */
  15.778 -	.long sys_ni_syscall	/* old stty syscall holder */
  15.779 -	.long sys_ni_syscall	/* old gtty syscall holder */
  15.780 -	.long sys_access
  15.781 -	.long sys_nice
  15.782 -	.long sys_ni_syscall	/* 35 - old ftime syscall holder */
  15.783 -	.long sys_sync
  15.784 -	.long sys_kill
  15.785 -	.long sys_rename
  15.786 -	.long sys_mkdir
  15.787 -	.long sys_rmdir		/* 40 */
  15.788 -	.long sys_dup
  15.789 -	.long sys_pipe
  15.790 -	.long sys_times
  15.791 -	.long sys_ni_syscall	/* old prof syscall holder */
  15.792 -	.long sys_brk		/* 45 */
  15.793 -	.long sys_setgid16
  15.794 -	.long sys_getgid16
  15.795 -	.long sys_signal
  15.796 -	.long sys_geteuid16
  15.797 -	.long sys_getegid16	/* 50 */
  15.798 -	.long sys_acct
  15.799 -	.long sys_umount	/* recycled never used phys() */
  15.800 -	.long sys_ni_syscall	/* old lock syscall holder */
  15.801 -	.long sys_ioctl
  15.802 -	.long sys_fcntl		/* 55 */
  15.803 -	.long sys_ni_syscall	/* old mpx syscall holder */
  15.804 -	.long sys_setpgid
  15.805 -	.long sys_ni_syscall	/* old ulimit syscall holder */
  15.806 -	.long sys_olduname
  15.807 -	.long sys_umask		/* 60 */
  15.808 -	.long sys_chroot
  15.809 -	.long sys_ustat
  15.810 -	.long sys_dup2
  15.811 -	.long sys_getppid
  15.812 -	.long sys_getpgrp	/* 65 */
  15.813 -	.long sys_setsid
  15.814 -	.long sys_sigaction
  15.815 -	.long sys_sgetmask
  15.816 -	.long sys_ssetmask
  15.817 -	.long sys_setreuid16	/* 70 */
  15.818 -	.long sys_setregid16
  15.819 -	.long sys_sigsuspend
  15.820 -	.long sys_sigpending
  15.821 -	.long sys_sethostname
  15.822 -	.long sys_setrlimit	/* 75 */
  15.823 -	.long sys_old_getrlimit
  15.824 -	.long sys_getrusage
  15.825 -	.long sys_gettimeofday
  15.826 -	.long sys_settimeofday
  15.827 -	.long sys_getgroups16	/* 80 */
  15.828 -	.long sys_setgroups16
  15.829 -	.long old_select
  15.830 -	.long sys_symlink
  15.831 -	.long sys_lstat
  15.832 -	.long sys_readlink	/* 85 */
  15.833 -	.long sys_uselib
  15.834 -	.long sys_swapon
  15.835 -	.long sys_reboot
  15.836 -	.long old_readdir
  15.837 -	.long old_mmap		/* 90 */
  15.838 -	.long sys_munmap
  15.839 -	.long sys_truncate
  15.840 -	.long sys_ftruncate
  15.841 -	.long sys_fchmod
  15.842 -	.long sys_fchown16	/* 95 */
  15.843 -	.long sys_getpriority
  15.844 -	.long sys_setpriority
  15.845 -	.long sys_ni_syscall	/* old profil syscall holder */
  15.846 -	.long sys_statfs
  15.847 -	.long sys_fstatfs	/* 100 */
  15.848 -	.long sys_ioperm
  15.849 -	.long sys_socketcall
  15.850 -	.long sys_syslog
  15.851 -	.long sys_setitimer
  15.852 -	.long sys_getitimer	/* 105 */
  15.853 -	.long sys_newstat
  15.854 -	.long sys_newlstat
  15.855 -	.long sys_newfstat
  15.856 -	.long sys_uname
  15.857 -	.long sys_iopl		/* 110 */
  15.858 -	.long sys_vhangup
  15.859 -	.long sys_ni_syscall	/* old "idle" system call */
  15.860 -	.long sys_ni_syscall	/* disable sys_vm86old */
  15.861 -	.long sys_wait4
  15.862 -	.long sys_swapoff	/* 115 */
  15.863 -	.long sys_sysinfo
  15.864 -	.long sys_ipc
  15.865 -	.long sys_fsync
  15.866 -	.long sys_sigreturn
  15.867 -	.long sys_clone		/* 120 */
  15.868 -	.long sys_setdomainname
  15.869 -	.long sys_newuname
  15.870 -	.long sys_modify_ldt
  15.871 -	.long sys_adjtimex
  15.872 -	.long sys_mprotect	/* 125 */
  15.873 -	.long sys_sigprocmask
  15.874 -	.long sys_ni_syscall	/* old "create_module" */ 
  15.875 -	.long sys_init_module
  15.876 -	.long sys_delete_module
  15.877 -	.long sys_ni_syscall	/* 130:	old "get_kernel_syms" */
  15.878 -	.long sys_quotactl
  15.879 -	.long sys_getpgid
  15.880 -	.long sys_fchdir
  15.881 -	.long sys_bdflush
  15.882 -	.long sys_sysfs		/* 135 */
  15.883 -	.long sys_personality
  15.884 -	.long sys_ni_syscall	/* reserved for afs_syscall */
  15.885 -	.long sys_setfsuid16
  15.886 -	.long sys_setfsgid16
  15.887 -	.long sys_llseek	/* 140 */
  15.888 -	.long sys_getdents
  15.889 -	.long sys_select
  15.890 -	.long sys_flock
  15.891 -	.long sys_msync
  15.892 -	.long sys_readv		/* 145 */
  15.893 -	.long sys_writev
  15.894 -	.long sys_getsid
  15.895 -	.long sys_fdatasync
  15.896 -	.long sys_sysctl
  15.897 -	.long sys_mlock		/* 150 */
  15.898 -	.long sys_munlock
  15.899 -	.long sys_mlockall
  15.900 -	.long sys_munlockall
  15.901 -	.long sys_sched_setparam
  15.902 -	.long sys_sched_getparam   /* 155 */
  15.903 -	.long sys_sched_setscheduler
  15.904 -	.long sys_sched_getscheduler
  15.905 -	.long sys_sched_yield
  15.906 -	.long sys_sched_get_priority_max
  15.907 -	.long sys_sched_get_priority_min  /* 160 */
  15.908 -	.long sys_sched_rr_get_interval
  15.909 -	.long sys_nanosleep
  15.910 -	.long sys_mremap
  15.911 -	.long sys_setresuid16
  15.912 -	.long sys_getresuid16	/* 165 */
  15.913 -	.long sys_vm86
  15.914 -	.long sys_ni_syscall	/* Old sys_query_module */
  15.915 -	.long sys_poll
  15.916 -	.long sys_nfsservctl
  15.917 -	.long sys_setresgid16	/* 170 */
  15.918 -	.long sys_getresgid16
  15.919 -	.long sys_prctl
  15.920 -	.long sys_rt_sigreturn
  15.921 -	.long sys_rt_sigaction
  15.922 -	.long sys_rt_sigprocmask	/* 175 */
  15.923 -	.long sys_rt_sigpending
  15.924 -	.long sys_rt_sigtimedwait
  15.925 -	.long sys_rt_sigqueueinfo
  15.926 -	.long sys_rt_sigsuspend
  15.927 -	.long sys_pread64	/* 180 */
  15.928 -	.long sys_pwrite64
  15.929 -	.long sys_chown16
  15.930 -	.long sys_getcwd
  15.931 -	.long sys_capget
  15.932 -	.long sys_capset	/* 185 */
  15.933 -	.long sys_sigaltstack
  15.934 -	.long sys_sendfile
  15.935 -	.long sys_ni_syscall	/* reserved for streams1 */
  15.936 -	.long sys_ni_syscall	/* reserved for streams2 */
  15.937 -	.long sys_vfork		/* 190 */
  15.938 -	.long sys_getrlimit
  15.939 -	.long sys_mmap2
  15.940 -	.long sys_truncate64
  15.941 -	.long sys_ftruncate64
  15.942 -	.long sys_stat64	/* 195 */
  15.943 -	.long sys_lstat64
  15.944 -	.long sys_fstat64
  15.945 -	.long sys_lchown
  15.946 -	.long sys_getuid
  15.947 -	.long sys_getgid	/* 200 */
  15.948 -	.long sys_geteuid
  15.949 -	.long sys_getegid
  15.950 -	.long sys_setreuid
  15.951 -	.long sys_setregid
  15.952 -	.long sys_getgroups	/* 205 */
  15.953 -	.long sys_setgroups
  15.954 -	.long sys_fchown
  15.955 -	.long sys_setresuid
  15.956 -	.long sys_getresuid
  15.957 -	.long sys_setresgid	/* 210 */
  15.958 -	.long sys_getresgid
  15.959 -	.long sys_chown
  15.960 -	.long sys_setuid
  15.961 -	.long sys_setgid
  15.962 -	.long sys_setfsuid	/* 215 */
  15.963 -	.long sys_setfsgid
  15.964 -	.long sys_pivot_root
  15.965 -	.long sys_mincore
  15.966 -	.long sys_madvise
  15.967 -	.long sys_getdents64	/* 220 */
  15.968 -	.long sys_fcntl64
  15.969 -	.long sys_ni_syscall	/* reserved for TUX */
  15.970 -	.long sys_ni_syscall
  15.971 -	.long sys_gettid
  15.972 -	.long sys_readahead	/* 225 */
  15.973 -	.long sys_setxattr
  15.974 -	.long sys_lsetxattr
  15.975 -	.long sys_fsetxattr
  15.976 -	.long sys_getxattr
  15.977 -	.long sys_lgetxattr	/* 230 */
  15.978 -	.long sys_fgetxattr
  15.979 -	.long sys_listxattr
  15.980 -	.long sys_llistxattr
  15.981 -	.long sys_flistxattr
  15.982 -	.long sys_removexattr	/* 235 */
  15.983 -	.long sys_lremovexattr
  15.984 -	.long sys_fremovexattr
  15.985 -	.long sys_tkill
  15.986 -	.long sys_sendfile64
  15.987 -	.long sys_futex		/* 240 */
  15.988 -	.long sys_sched_setaffinity
  15.989 -	.long sys_sched_getaffinity
  15.990 -	.long sys_set_thread_area
  15.991 -	.long sys_get_thread_area
  15.992 -	.long sys_io_setup	/* 245 */
  15.993 -	.long sys_io_destroy
  15.994 -	.long sys_io_getevents
  15.995 -	.long sys_io_submit
  15.996 -	.long sys_io_cancel
  15.997 -	.long sys_fadvise64	/* 250 */
  15.998 -	.long sys_ni_syscall
  15.999 -	.long sys_exit_group
 15.1000 -	.long sys_lookup_dcookie
 15.1001 -	.long sys_epoll_create
 15.1002 -	.long sys_epoll_ctl	/* 255 */
 15.1003 -	.long sys_epoll_wait
 15.1004 - 	.long sys_remap_file_pages
 15.1005 - 	.long sys_set_tid_address
 15.1006 - 	.long sys_timer_create
 15.1007 - 	.long sys_timer_settime		/* 260 */
 15.1008 - 	.long sys_timer_gettime
 15.1009 - 	.long sys_timer_getoverrun
 15.1010 - 	.long sys_timer_delete
 15.1011 - 	.long sys_clock_settime
 15.1012 - 	.long sys_clock_gettime		/* 265 */
 15.1013 - 	.long sys_clock_getres
 15.1014 - 	.long sys_clock_nanosleep
 15.1015 -	.long sys_statfs64
 15.1016 -	.long sys_fstatfs64	
 15.1017 -	.long sys_tgkill	/* 270 */
 15.1018 -	.long sys_utimes
 15.1019 - 	.long sys_fadvise64_64
 15.1020 -	.long sys_ni_syscall	/* sys_vserver */
 15.1021 -	.long sys_mbind
 15.1022 -	.long sys_get_mempolicy
 15.1023 -	.long sys_set_mempolicy
 15.1024 -	.long sys_mq_open
 15.1025 -	.long sys_mq_unlink
 15.1026 -	.long sys_mq_timedsend
 15.1027 -	.long sys_mq_timedreceive	/* 280 */
 15.1028 -	.long sys_mq_notify
 15.1029 -	.long sys_mq_getsetattr
 15.1030 -	.long sys_ni_syscall		/* reserved for kexec */
 15.1031 -
 15.1032 -syscall_table_size=(.-sys_call_table)
    16.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/head.S	Mon Oct 25 12:45:34 2004 +0000
    16.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.3 @@ -1,171 +0,0 @@
    16.4 -
    16.5 -#include <linux/config.h>
    16.6 -
    16.7 -.section __xen_guest
    16.8 -	.ascii	"GUEST_OS=linux,GUEST_VER=2.6,XEN_VER=2.0,VIRT_BASE=0xC0000000"
    16.9 -	.ascii	",LOADER=generic"
   16.10 -#ifdef CONFIG_XEN_WRITABLE_PAGETABLES
   16.11 -	.ascii	",PT_MODE_WRITABLE"
   16.12 -#endif
   16.13 -	.byte	0
   16.14 -
   16.15 -.text
   16.16 -#include <linux/threads.h>
   16.17 -#include <linux/linkage.h>
   16.18 -#include <asm/segment.h>
   16.19 -#include <asm/thread_info.h>
   16.20 -#include <asm/asm_offsets.h>
   16.21 -#include <asm/hypervisor-ifs/arch-x86_32.h>
   16.22 -
   16.23 -/*
   16.24 - * References to members of the new_cpu_data structure.
   16.25 - */
   16.26 -
   16.27 -#define X86		new_cpu_data+CPUINFO_x86
   16.28 -#define X86_VENDOR	new_cpu_data+CPUINFO_x86_vendor
   16.29 -#define X86_MODEL	new_cpu_data+CPUINFO_x86_model
   16.30 -#define X86_MASK	new_cpu_data+CPUINFO_x86_mask
   16.31 -#define X86_HARD_MATH	new_cpu_data+CPUINFO_hard_math
   16.32 -#define X86_CPUID	new_cpu_data+CPUINFO_cpuid_level
   16.33 -#define X86_CAPABILITY	new_cpu_data+CPUINFO_x86_capability
   16.34 -#define X86_VENDOR_ID	new_cpu_data+CPUINFO_x86_vendor_id
   16.35 -
   16.36 -ENTRY(startup_32)
   16.37 -	cld
   16.38 -
   16.39 -	/* Set up the stack pointer */
   16.40 -	lss stack_start,%esp
   16.41 -
   16.42 -	/* Copy the necessary stuff from xen_start_info structure. */
   16.43 -	mov  $xen_start_info_union,%edi
   16.44 -	mov  $128,%ecx
   16.45 -	rep movsl
   16.46 -
   16.47 -checkCPUtype:
   16.48 -
   16.49 -	/* get vendor info */
   16.50 -	xorl %eax,%eax			# call CPUID with 0 -> return vendor ID
   16.51 -	cpuid
   16.52 -	movl %eax,X86_CPUID		# save CPUID level
   16.53 -	movl %ebx,X86_VENDOR_ID		# lo 4 chars
   16.54 -	movl %edx,X86_VENDOR_ID+4	# next 4 chars
   16.55 -	movl %ecx,X86_VENDOR_ID+8	# last 4 chars
   16.56 -
   16.57 -	movl $1,%eax		# Use the CPUID instruction to get CPU type
   16.58 -	cpuid
   16.59 -	movb %al,%cl		# save reg for future use
   16.60 -	andb $0x0f,%ah		# mask processor family
   16.61 -	movb %ah,X86
   16.62 -	andb $0xf0,%al		# mask model
   16.63 -	shrb $4,%al
   16.64 -	movb %al,X86_MODEL
   16.65 -	andb $0x0f,%cl		# mask mask revision
   16.66 -	movb %cl,X86_MASK
   16.67 -	movl %edx,X86_CAPABILITY
   16.68 -
   16.69 -	xorl %eax,%eax		# Clear FS/GS and LDT
   16.70 -	movl %eax,%fs
   16.71 -	movl %eax,%gs
   16.72 -	cld		# gcc2 wants the direction flag cleared at all times
   16.73 -
   16.74 -	call start_kernel
   16.75 -L6:
   16.76 -	jmp L6			# main should never return here, but
   16.77 -				# just in case, we know what happens.
   16.78 -
   16.79 -ENTRY(lgdt_finish)
   16.80 -	movl $(__KERNEL_DS),%eax	# reload all the segment registers
   16.81 -	movw %ax,%ss			# after changing gdt.
   16.82 -
   16.83 -	movl $(__USER_DS),%eax		# DS/ES contains default USER segment
   16.84 -	movw %ax,%ds
   16.85 -	movw %ax,%es
   16.86 -
   16.87 -	popl %eax			# reload CS by intersegment return
   16.88 -	pushl $(__KERNEL_CS)
   16.89 -	pushl %eax
   16.90 -	lret
   16.91 -
   16.92 -ENTRY(stack_start)
   16.93 -	.long init_thread_union+THREAD_SIZE
   16.94 -	.long __BOOT_DS
   16.95 -
   16.96 -# XXXcl
   16.97 -.globl idt_descr
   16.98 -.globl cpu_gdt_descr
   16.99 -
  16.100 -	ALIGN
  16.101 -	.word 0				# 32-bit align idt_desc.address
  16.102 -idt_descr:
  16.103 -	.word IDT_ENTRIES*8-1		# idt contains 256 entries
  16.104 -	.long idt_table
  16.105 -# XXXcl
  16.106 -
  16.107 -# boot GDT descriptor (later on used by CPU#0):
  16.108 -	.word 0				# 32 bit align gdt_desc.address
  16.109 -cpu_gdt_descr:
  16.110 -	.word GDT_SIZE
  16.111 -	.long cpu_gdt_table
  16.112 -
  16.113 -	.fill NR_CPUS-1,8,0		# space for the other GDT descriptors
  16.114 -
  16.115 -.org 0x1000
  16.116 -ENTRY(empty_zero_page)
  16.117 -
  16.118 -.org 0x2000
  16.119 -ENTRY(swapper_pg_dir)
  16.120 -
  16.121 -.org 0x3000
  16.122 -ENTRY(cpu_gdt_table)
  16.123 -	.quad 0x0000000000000000	/* NULL descriptor */
  16.124 -	.quad 0x0000000000000000	/* 0x0b reserved */
  16.125 -	.quad 0x0000000000000000	/* 0x13 reserved */
  16.126 -	.quad 0x0000000000000000	/* 0x1b reserved */
  16.127 -	.quad 0x0000000000000000	/* 0x20 unused */
  16.128 -	.quad 0x0000000000000000	/* 0x28 unused */
  16.129 -	.quad 0x0000000000000000	/* 0x33 TLS entry 1 */
  16.130 -	.quad 0x0000000000000000	/* 0x3b TLS entry 2 */
  16.131 -	.quad 0x0000000000000000	/* 0x43 TLS entry 3 */
  16.132 -	.quad 0x0000000000000000	/* 0x4b reserved */
  16.133 -	.quad 0x0000000000000000	/* 0x53 reserved */
  16.134 -	.quad 0x0000000000000000	/* 0x5b reserved */
  16.135 -
  16.136 -	.quad 0x00cfbb000000c3ff	/* 0x60 kernel 4GB code at 0x00000000 */
  16.137 -	.quad 0x00cfb3000000c3ff	/* 0x68 kernel 4GB data at 0x00000000 */
  16.138 -	.quad 0x00cffb000000c3ff	/* 0x73 user 4GB code at 0x00000000 */
  16.139 -	.quad 0x00cff3000000c3ff	/* 0x7b user 4GB data at 0x00000000 */
  16.140 -
  16.141 -	.quad 0x0000000000000000	/* 0x80 TSS descriptor */
  16.142 -	.quad 0x0000000000000000	/* 0x88 LDT descriptor */
  16.143 -
  16.144 -	/* Segments used for calling PnP BIOS */
  16.145 -	.quad 0x0000000000000000	/* 0x90 32-bit code */
  16.146 -	.quad 0x0000000000000000	/* 0x98 16-bit code */
  16.147 -	.quad 0x0000000000000000	/* 0xa0 16-bit data */
  16.148 -	.quad 0x0000000000000000	/* 0xa8 16-bit data */
  16.149 -	.quad 0x0000000000000000	/* 0xb0 16-bit data */
  16.150 -	/*
  16.151 -	 * The APM segments have byte granularity and their bases
  16.152 -	 * and limits are set at run time.
  16.153 -	 */
  16.154 -	.quad 0x0000000000000000	/* 0xb8 APM CS    code */
  16.155 -	.quad 0x0000000000000000	/* 0xc0 APM CS 16 code (16 bit) */
  16.156 -	.quad 0x0000000000000000	/* 0xc8 APM DS    data */
  16.157 -
  16.158 -	.quad 0x0000000000000000	/* 0xd0 - unused */
  16.159 -	.quad 0x0000000000000000	/* 0xd8 - unused */
  16.160 -	.quad 0x0000000000000000	/* 0xe0 - unused */
  16.161 -	.quad 0x0000000000000000	/* 0xe8 - unused */
  16.162 -	.quad 0x0000000000000000	/* 0xf0 - unused */
  16.163 -	.quad 0x0000000000000000	/* 0xf8 - GDT entry 31: double-fault TSS */
  16.164 -	.fill GDT_ENTRIES-32,8,0
  16.165 -
  16.166 -.org 0x4000
  16.167 -ENTRY(default_ldt)
  16.168 -
  16.169 -.org 0x5000
  16.170 -/*
  16.171 - * Real beginning of normal "text" segment
  16.172 - */
  16.173 -ENTRY(stext)
  16.174 -ENTRY(_stext)
    17.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c	Mon Oct 25 12:45:34 2004 +0000
    17.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.3 @@ -1,200 +0,0 @@
    17.4 -#include <linux/config.h>
    17.5 -#include <linux/module.h>
    17.6 -#include <linux/smp.h>
    17.7 -#include <linux/user.h>
    17.8 -#include <linux/elfcore.h>
    17.9 -#include <linux/mca.h>
   17.10 -#include <linux/sched.h>
   17.11 -#include <linux/in6.h>
   17.12 -#include <linux/interrupt.h>
   17.13 -#include <linux/smp_lock.h>
   17.14 -#include <linux/pm.h>
   17.15 -#include <linux/pci.h>
   17.16 -#include <linux/apm_bios.h>
   17.17 -#include <linux/kernel.h>
   17.18 -#include <linux/string.h>
   17.19 -#include <linux/tty.h>
   17.20 -#include <linux/highmem.h>
   17.21 -#include <linux/time.h>
   17.22 -
   17.23 -#include <asm/semaphore.h>
   17.24 -#include <asm/processor.h>
   17.25 -#include <asm/i387.h>
   17.26 -#include <asm/uaccess.h>
   17.27 -#include <asm/checksum.h>
   17.28 -#include <asm/io.h>
   17.29 -#include <asm/hardirq.h>
   17.30 -#include <asm/delay.h>
   17.31 -#include <asm/irq.h>
   17.32 -#include <asm/mmx.h>
   17.33 -#include <asm/desc.h>
   17.34 -#include <asm/pgtable.h>
   17.35 -#include <asm/tlbflush.h>
   17.36 -#include <asm/nmi.h>
   17.37 -#include <asm/ist.h>
   17.38 -
   17.39 -extern void dump_thread(struct pt_regs *, struct user *);
   17.40 -extern spinlock_t rtc_lock;
   17.41 -
   17.42 -/* This is definitely a GPL-only symbol */
   17.43 -EXPORT_SYMBOL_GPL(cpu_gdt_table);
   17.44 -
   17.45 -#if defined(CONFIG_APM_MODULE)
   17.46 -extern void machine_real_restart(unsigned char *, int);
   17.47 -EXPORT_SYMBOL(machine_real_restart);
   17.48 -extern void default_idle(void);
   17.49 -EXPORT_SYMBOL(default_idle);
   17.50 -#endif
   17.51 -
   17.52 -#ifdef CONFIG_SMP
   17.53 -extern void FASTCALL( __write_lock_failed(rwlock_t *rw));
   17.54 -extern void FASTCALL( __read_lock_failed(rwlock_t *rw));
   17.55 -#endif
   17.56 -
   17.57 -#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE)
   17.58 -extern struct drive_info_struct drive_info;
   17.59 -EXPORT_SYMBOL(drive_info);
   17.60 -#endif
   17.61 -
   17.62 -extern unsigned long cpu_khz;
   17.63 -extern unsigned long get_cmos_time(void);
   17.64 -
   17.65 -/* platform dependent support */
   17.66 -EXPORT_SYMBOL(boot_cpu_data);
   17.67 -EXPORT_SYMBOL(MCA_bus);
   17.68 -#ifdef CONFIG_DISCONTIGMEM
   17.69 -EXPORT_SYMBOL(node_data);
   17.70 -EXPORT_SYMBOL(physnode_map);
   17.71 -#endif
   17.72 -#ifdef CONFIG_X86_NUMAQ
   17.73 -EXPORT_SYMBOL(xquad_portio);
   17.74 -#endif
   17.75 -EXPORT_SYMBOL(dump_thread);
   17.76 -EXPORT_SYMBOL(dump_fpu);
   17.77 -EXPORT_SYMBOL(dump_extended_fpu);
   17.78 -EXPORT_SYMBOL_GPL(kernel_fpu_begin);
   17.79 -EXPORT_SYMBOL(__ioremap);
   17.80 -EXPORT_SYMBOL(ioremap_nocache);
   17.81 -EXPORT_SYMBOL(iounmap);
   17.82 -EXPORT_SYMBOL(enable_irq);
   17.83 -EXPORT_SYMBOL(disable_irq);
   17.84 -EXPORT_SYMBOL(disable_irq_nosync);
   17.85 -EXPORT_SYMBOL(probe_irq_mask);
   17.86 -EXPORT_SYMBOL(kernel_thread);
   17.87 -EXPORT_SYMBOL(pm_idle);
   17.88 -#ifdef CONFIG_APM
   17.89 -EXPORT_SYMBOL(pm_power_off);
   17.90 -#endif
   17.91 -EXPORT_SYMBOL(get_cmos_time);
   17.92 -EXPORT_SYMBOL(cpu_khz);
   17.93 -EXPORT_SYMBOL(apm_info);
   17.94 -
   17.95 -EXPORT_SYMBOL_NOVERS(__down_failed);
   17.96 -EXPORT_SYMBOL_NOVERS(__down_failed_interruptible);
   17.97 -EXPORT_SYMBOL_NOVERS(__down_failed_trylock);
   17.98 -EXPORT_SYMBOL_NOVERS(__up_wakeup);
   17.99 -/* Networking helper routines. */
  17.100 -EXPORT_SYMBOL(csum_partial_copy_generic);
  17.101 -/* Delay loops */
  17.102 -EXPORT_SYMBOL(__ndelay);
  17.103 -EXPORT_SYMBOL(__udelay);
  17.104 -EXPORT_SYMBOL(__delay);
  17.105 -EXPORT_SYMBOL(__const_udelay);
  17.106 -
  17.107 -EXPORT_SYMBOL_NOVERS(__get_user_1);
  17.108 -EXPORT_SYMBOL_NOVERS(__get_user_2);
  17.109 -EXPORT_SYMBOL_NOVERS(__get_user_4);
  17.110 -
  17.111 -EXPORT_SYMBOL(strpbrk);
  17.112 -EXPORT_SYMBOL(strstr);
  17.113 -
  17.114 -EXPORT_SYMBOL(strncpy_from_user);
  17.115 -EXPORT_SYMBOL(__strncpy_from_user);
  17.116 -EXPORT_SYMBOL(clear_user);
  17.117 -EXPORT_SYMBOL(__clear_user);
  17.118 -EXPORT_SYMBOL(__copy_from_user_ll);
  17.119 -EXPORT_SYMBOL(__copy_to_user_ll);
  17.120 -EXPORT_SYMBOL(strnlen_user);
  17.121 -
  17.122 -EXPORT_SYMBOL(dma_alloc_coherent);
  17.123 -EXPORT_SYMBOL(dma_free_coherent);
  17.124 -
  17.125 -#ifdef CONFIG_PCI
  17.126 -EXPORT_SYMBOL(pcibios_penalize_isa_irq);
  17.127 -EXPORT_SYMBOL(pci_mem_start);
  17.128 -#endif
  17.129 -
  17.130 -#ifdef CONFIG_PCI_BIOS
  17.131 -EXPORT_SYMBOL(pcibios_set_irq_routing);
  17.132 -EXPORT_SYMBOL(pcibios_get_irq_routing_table);
  17.133 -#endif
  17.134 -
  17.135 -#ifdef CONFIG_X86_USE_3DNOW
  17.136 -EXPORT_SYMBOL(_mmx_memcpy);
  17.137 -EXPORT_SYMBOL(mmx_clear_page);
  17.138 -EXPORT_SYMBOL(mmx_copy_page);
  17.139 -#endif
  17.140 -
  17.141 -#ifdef CONFIG_X86_HT
  17.142 -EXPORT_SYMBOL(smp_num_siblings);
  17.143 -EXPORT_SYMBOL(cpu_sibling_map);
  17.144 -#endif
  17.145 -
  17.146 -#ifdef CONFIG_SMP
  17.147 -EXPORT_SYMBOL(cpu_data);
  17.148 -EXPORT_SYMBOL(cpu_online_map);
  17.149 -EXPORT_SYMBOL(cpu_callout_map);
  17.150 -EXPORT_SYMBOL_NOVERS(__write_lock_failed);
  17.151 -EXPORT_SYMBOL_NOVERS(__read_lock_failed);
  17.152 -
  17.153 -/* Global SMP stuff */
  17.154 -EXPORT_SYMBOL(synchronize_irq);
  17.155 -EXPORT_SYMBOL(smp_call_function);
  17.156 -
  17.157 -/* TLB flushing */
  17.158 -EXPORT_SYMBOL(flush_tlb_page);
  17.159 -EXPORT_SYMBOL_GPL(flush_tlb_all);
  17.160 -#endif
  17.161 -
  17.162 -#ifdef CONFIG_X86_IO_APIC
  17.163 -EXPORT_SYMBOL(IO_APIC_get_PCI_irq_vector);
  17.164 -#endif
  17.165 -
  17.166 -#ifdef CONFIG_MCA
  17.167 -EXPORT_SYMBOL(machine_id);
  17.168 -#endif
  17.169 -
  17.170 -#ifdef CONFIG_VT
  17.171 -EXPORT_SYMBOL(screen_info);
  17.172 -#endif
  17.173 -
  17.174 -EXPORT_SYMBOL(get_wchan);
  17.175 -
  17.176 -EXPORT_SYMBOL(rtc_lock);
  17.177 -
  17.178 -EXPORT_SYMBOL_GPL(set_nmi_callback);
  17.179 -EXPORT_SYMBOL_GPL(unset_nmi_callback);
  17.180 -
  17.181 -#undef memcmp
  17.182 -extern int memcmp(const void *,const void *,__kernel_size_t);
  17.183 -EXPORT_SYMBOL_NOVERS(memcmp);
  17.184 -
  17.185 -#ifdef CONFIG_HAVE_DEC_LOCK
  17.186 -EXPORT_SYMBOL(atomic_dec_and_lock);
  17.187 -#endif
  17.188 -
  17.189 -EXPORT_SYMBOL(__PAGE_KERNEL);
  17.190 -
  17.191 -#ifdef CONFIG_HIGHMEM
  17.192 -EXPORT_SYMBOL(kmap);
  17.193 -EXPORT_SYMBOL(kunmap);
  17.194 -EXPORT_SYMBOL(kmap_atomic);
  17.195 -EXPORT_SYMBOL(kunmap_atomic);
  17.196 -EXPORT_SYMBOL(kmap_atomic_to_page);
  17.197 -#endif
  17.198 -
  17.199 -#if defined(CONFIG_X86_SPEEDSTEP_SMI) || defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE)
  17.200 -EXPORT_SYMBOL(ist_info);
  17.201 -#endif
  17.202 -
  17.203 -EXPORT_SYMBOL(csum_partial);
    18.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/ioport.c	Mon Oct 25 12:45:34 2004 +0000
    18.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.3 @@ -1,49 +0,0 @@
    18.4 -#include <linux/sched.h>
    18.5 -#include <linux/kernel.h>
    18.6 -#include <linux/errno.h>
    18.7 -#include <linux/types.h>
    18.8 -#include <linux/ioport.h>
    18.9 -#include <linux/mm.h>
   18.10 -#include <linux/smp.h>
   18.11 -#include <linux/smp_lock.h>
   18.12 -#include <linux/stddef.h>
   18.13 -#include <linux/slab.h>
   18.14 -#include <asm/hypervisor-ifs/dom0_ops.h>
   18.15 -
   18.16 -asmlinkage long sys_iopl(unsigned int new_io_pl)
   18.17 -{
   18.18 -	unsigned int old_io_pl = current->thread.io_pl;
   18.19 -	dom0_op_t op;
   18.20 -
   18.21 -	if (new_io_pl > 3)
   18.22 -		return -EINVAL;
   18.23 -
   18.24 -	/* Need "raw I/O" privileges for direct port access. */
   18.25 -	if ((new_io_pl > old_io_pl) && !capable(CAP_SYS_RAWIO))
   18.26 -		return -EPERM;
   18.27 -
   18.28 -	if (!(xen_start_info.flags & SIF_PRIVILEGED))
   18.29 -		return -EPERM;
   18.30 -
   18.31 -	/* Maintain OS privileges even if user attempts to relinquish them. */
   18.32 -	if (new_io_pl == 0)
   18.33 -		new_io_pl = 1;
   18.34 -
   18.35 -	/* Change our version of the privilege levels. */
   18.36 -	current->thread.io_pl = new_io_pl;
   18.37 -
   18.38 -	/* Force the change at ring 0. */
   18.39 -	op.cmd           = DOM0_IOPL;
   18.40 -	op.u.iopl.domain = DOMID_SELF;
   18.41 -	op.u.iopl.iopl   = new_io_pl;
   18.42 -	HYPERVISOR_dom0_op(&op);
   18.43 -
   18.44 -	return 0;
   18.45 -}
   18.46 -
   18.47 -asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
   18.48 -{
   18.49 -	printk(KERN_INFO "ioperm not fully supported - %s\n",
   18.50 -		turn_on ? "set iopl to 3" : "ignore resource release");
   18.51 -	return turn_on ? sys_iopl(3) : 0;
   18.52 -}
    19.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/irq.c	Mon Oct 25 12:45:34 2004 +0000
    19.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.3 @@ -1,1199 +0,0 @@
    19.4 -/*
    19.5 - *	linux/arch/i386/kernel/irq.c
    19.6 - *
    19.7 - *	Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
    19.8 - *
    19.9 - * This file contains the code used by various IRQ handling routines:
   19.10 - * asking for different IRQ's should be done through these routines
   19.11 - * instead of just grabbing them. Thus setups with different IRQ numbers
   19.12 - * shouldn't result in any weird surprises, and installing new handlers
   19.13 - * should be easier.
   19.14 - */
   19.15 -
   19.16 -/*
   19.17 - * (mostly architecture independent, will move to kernel/irq.c in 2.5.)
   19.18 - *
   19.19 - * IRQs are in fact implemented a bit like signal handlers for the kernel.
   19.20 - * Naturally it's not a 1:1 relation, but there are similarities.
   19.21 - */
   19.22 -
   19.23 -#include <linux/config.h>
   19.24 -#include <linux/errno.h>
   19.25 -#include <linux/module.h>
   19.26 -#include <linux/signal.h>
   19.27 -#include <linux/sched.h>
   19.28 -#include <linux/ioport.h>
   19.29 -#include <linux/interrupt.h>
   19.30 -#include <linux/timex.h>
   19.31 -#include <linux/slab.h>
   19.32 -#include <linux/random.h>
   19.33 -#include <linux/smp_lock.h>
   19.34 -#include <linux/init.h>
   19.35 -#include <linux/kernel_stat.h>
   19.36 -#include <linux/irq.h>
   19.37 -#include <linux/proc_fs.h>
   19.38 -#include <linux/seq_file.h>
   19.39 -#include <linux/kallsyms.h>
   19.40 -
   19.41 -#include <asm/atomic.h>
   19.42 -#include <asm/io.h>
   19.43 -#include <asm/smp.h>
   19.44 -#include <asm/system.h>
   19.45 -#include <asm/bitops.h>
   19.46 -#include <asm/uaccess.h>
   19.47 -#include <asm/delay.h>
   19.48 -#include <asm/desc.h>
   19.49 -#include <asm/irq.h>
   19.50 -
   19.51 -/*
   19.52 - * Linux has a controller-independent x86 interrupt architecture.
   19.53 - * every controller has a 'controller-template', that is used
   19.54 - * by the main code to do the right thing. Each driver-visible
   19.55 - * interrupt source is transparently wired to the apropriate
   19.56 - * controller. Thus drivers need not be aware of the
   19.57 - * interrupt-controller.
   19.58 - *
   19.59 - * Various interrupt controllers we handle: 8259 PIC, SMP IO-APIC,
   19.60 - * PIIX4's internal 8259 PIC and SGI's Visual Workstation Cobalt (IO-)APIC.
   19.61 - * (IO-APICs assumed to be messaging to Pentium local-APICs)
   19.62 - *
   19.63 - * the code is designed to be easily extended with new/different
   19.64 - * interrupt controllers, without having to do assembly magic.
   19.65 - */
   19.66 -
   19.67 -/*
   19.68 - * Controller mappings for all interrupt sources:
   19.69 - */
   19.70 -irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned = {
   19.71 -	[0 ... NR_IRQS-1] = {
   19.72 -		.handler = &no_irq_type,
   19.73 -		.lock = SPIN_LOCK_UNLOCKED
   19.74 -	}
   19.75 -};
   19.76 -
   19.77 -static void register_irq_proc (unsigned int irq);
   19.78 -
   19.79 -/*
   19.80 - * per-CPU IRQ handling stacks
   19.81 - */
   19.82 -#ifdef CONFIG_4KSTACKS
   19.83 -union irq_ctx *hardirq_ctx[NR_CPUS];
   19.84 -union irq_ctx *softirq_ctx[NR_CPUS];
   19.85 -#endif
   19.86 -
   19.87 -/*
   19.88 - * Special irq handlers.
   19.89 - */
   19.90 -
   19.91 -irqreturn_t no_action(int cpl, void *dev_id, struct pt_regs *regs)
   19.92 -{ return IRQ_NONE; }
   19.93 -
   19.94 -/*
   19.95 - * Generic no controller code
   19.96 - */
   19.97 -
   19.98 -static void enable_none(unsigned int irq) { }
   19.99 -static unsigned int startup_none(unsigned int irq) { return 0; }
  19.100 -static void disable_none(unsigned int irq) { }
  19.101 -static void ack_none(unsigned int irq)
  19.102 -{
  19.103 -/*
  19.104 - * 'what should we do if we get a hw irq event on an illegal vector'.
  19.105 - * each architecture has to answer this themselves, it doesn't deserve
  19.106 - * a generic callback i think.
  19.107 - */
  19.108 -#ifdef CONFIG_X86
  19.109 -	printk("unexpected IRQ trap at vector %02x\n", irq);
  19.110 -#ifdef CONFIG_X86_LOCAL_APIC
  19.111 -	/*
  19.112 -	 * Currently unexpected vectors happen only on SMP and APIC.
  19.113 -	 * We _must_ ack these because every local APIC has only N
  19.114 -	 * irq slots per priority level, and a 'hanging, unacked' IRQ
  19.115 -	 * holds up an irq slot - in excessive cases (when multiple
  19.116 -	 * unexpected vectors occur) that might lock up the APIC
  19.117 -	 * completely.
  19.118 -	 */
  19.119 -	ack_APIC_irq();
  19.120 -#endif
  19.121 -#endif
  19.122 -}
  19.123 -
  19.124 -/* startup is the same as "enable", shutdown is same as "disable" */
  19.125 -#define shutdown_none	disable_none
  19.126 -#define end_none	enable_none
  19.127 -
  19.128 -struct hw_interrupt_type no_irq_type = {
  19.129 -	"none",
  19.130 -	startup_none,
  19.131 -	shutdown_none,
  19.132 -	enable_none,
  19.133 -	disable_none,
  19.134 -	ack_none,
  19.135 -	end_none
  19.136 -};
  19.137 -
  19.138 -atomic_t irq_err_count;
  19.139 -#if defined(CONFIG_X86_IO_APIC) && defined(APIC_MISMATCH_DEBUG)
  19.140 -atomic_t irq_mis_count;
  19.141 -#endif
  19.142 -
  19.143 -/*
  19.144 - * Generic, controller-independent functions:
  19.145 - */
  19.146 -
  19.147 -int show_interrupts(struct seq_file *p, void *v)
  19.148 -{
  19.149 -	int i = *(loff_t *) v, j;
  19.150 -	struct irqaction * action;
  19.151 -	unsigned long flags;
  19.152 -
  19.153 -	if (i == 0) {
  19.154 -		seq_printf(p, "           ");
  19.155 -		for (j=0; j<NR_CPUS; j++)
  19.156 -			if (cpu_online(j))
  19.157 -				seq_printf(p, "CPU%d       ",j);
  19.158 -		seq_putc(p, '\n');
  19.159 -	}
  19.160 -
  19.161 -	if (i < NR_IRQS) {
  19.162 -		spin_lock_irqsave(&irq_desc[i].lock, flags);
  19.163 -		action = irq_desc[i].action;
  19.164 -		if (!action) 
  19.165 -			goto skip;
  19.166 -		seq_printf(p, "%3d: ",i);
  19.167 -#ifndef CONFIG_SMP
  19.168 -		seq_printf(p, "%10u ", kstat_irqs(i));
  19.169 -#else
  19.170 -		for (j = 0; j < NR_CPUS; j++)
  19.171 -			if (cpu_online(j))
  19.172 -				seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
  19.173 -#endif
  19.174 -		seq_printf(p, " %14s", irq_desc[i].handler->typename);
  19.175 -		seq_printf(p, "  %s", action->name);
  19.176 -
  19.177 -		for (action=action->next; action; action = action->next)
  19.178 -			seq_printf(p, ", %s", action->name);
  19.179 -
  19.180 -		seq_putc(p, '\n');
  19.181 -skip:
  19.182 -		spin_unlock_irqrestore(&irq_desc[i].lock, flags);
  19.183 -	} else if (i == NR_IRQS) {
  19.184 -		seq_printf(p, "NMI: ");
  19.185 -		for (j = 0; j < NR_CPUS; j++)
  19.186 -			if (cpu_online(j))
  19.187 -				seq_printf(p, "%10u ", nmi_count(j));
  19.188 -		seq_putc(p, '\n');
  19.189 -#ifdef CONFIG_X86_LOCAL_APIC
  19.190 -		seq_printf(p, "LOC: ");
  19.191 -		for (j = 0; j < NR_CPUS; j++)
  19.192 -			if (cpu_online(j))
  19.193 -				seq_printf(p, "%10u ", irq_stat[j].apic_timer_irqs);
  19.194 -		seq_putc(p, '\n');
  19.195 -#endif
  19.196 -		seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
  19.197 -#if defined(CONFIG_X86_IO_APIC) && defined(APIC_MISMATCH_DEBUG)
  19.198 -		seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count));
  19.199 -#endif
  19.200 -	}
  19.201 -	return 0;
  19.202 -}
  19.203 -
  19.204 -
  19.205 -
  19.206 -
  19.207 -#ifdef CONFIG_SMP
  19.208 -inline void synchronize_irq(unsigned int irq)
  19.209 -{
  19.210 -	while (irq_desc[irq].status & IRQ_INPROGRESS)
  19.211 -		cpu_relax();
  19.212 -}
  19.213 -#endif
  19.214 -
  19.215 -/*
  19.216 - * This should really return information about whether
  19.217 - * we should do bottom half handling etc. Right now we
  19.218 - * end up _always_ checking the bottom half, which is a
  19.219 - * waste of time and is not what some drivers would
  19.220 - * prefer.
  19.221 - */
  19.222 -asmlinkage int handle_IRQ_event(unsigned int irq,
  19.223 -		struct pt_regs *regs, struct irqaction *action)
  19.224 -{
  19.225 -	int status = 1;	/* Force the "do bottom halves" bit */
  19.226 -	int retval = 0;
  19.227 -
  19.228 -	if (!(action->flags & SA_INTERRUPT))
  19.229 -		local_irq_enable();
  19.230 -
  19.231 -	do {
  19.232 -		status |= action->flags;
  19.233 -		retval |= action->handler(irq, action->dev_id, regs);
  19.234 -		action = action->next;
  19.235 -	} while (action);
  19.236 -	if (status & SA_SAMPLE_RANDOM)
  19.237 -		add_interrupt_randomness(irq);
  19.238 -	local_irq_disable();
  19.239 -	return retval;
  19.240 -}
  19.241 -
  19.242 -static void __report_bad_irq(int irq, irq_desc_t *desc, irqreturn_t action_ret)
  19.243 -{
  19.244 -	struct irqaction *action;
  19.245 -
  19.246 -	if (action_ret != IRQ_HANDLED && action_ret != IRQ_NONE) {
  19.247 -		printk(KERN_ERR "irq event %d: bogus return value %x\n",
  19.248 -				irq, action_ret);
  19.249 -	} else {
  19.250 -		printk(KERN_ERR "irq %d: nobody cared!\n", irq);
  19.251 -	}
  19.252 -	dump_stack();
  19.253 -	printk(KERN_ERR "handlers:\n");
  19.254 -	action = desc->action;
  19.255 -	do {
  19.256 -		printk(KERN_ERR "[<%p>]", action->handler);
  19.257 -		print_symbol(" (%s)",
  19.258 -			(unsigned long)action->handler);
  19.259 -		printk("\n");
  19.260 -		action = action->next;
  19.261 -	} while (action);
  19.262 -}
  19.263 -
  19.264 -static void report_bad_irq(int irq, irq_desc_t *desc, irqreturn_t action_ret)
  19.265 -{
  19.266 -	static int count = 100;
  19.267 -
  19.268 -	if (count) {
  19.269 -		count--;
  19.270 -		__report_bad_irq(irq, desc, action_ret);
  19.271 -	}
  19.272 -}
  19.273 -
  19.274 -static int noirqdebug;
  19.275 -
  19.276 -static int __init noirqdebug_setup(char *str)
  19.277 -{
  19.278 -	noirqdebug = 1;
  19.279 -	printk("IRQ lockup detection disabled\n");
  19.280 -	return 1;
  19.281 -}
  19.282 -
  19.283 -__setup("noirqdebug", noirqdebug_setup);
  19.284 -
  19.285 -/*
  19.286 - * If 99,900 of the previous 100,000 interrupts have not been handled then
  19.287 - * assume that the IRQ is stuck in some manner.  Drop a diagnostic and try to
  19.288 - * turn the IRQ off.
  19.289 - *
  19.290 - * (The other 100-of-100,000 interrupts may have been a correctly-functioning
  19.291 - *  device sharing an IRQ with the failing one)
  19.292 - *
  19.293 - * Called under desc->lock
  19.294 - */
  19.295 -static void note_interrupt(int irq, irq_desc_t *desc, irqreturn_t action_ret)
  19.296 -{
  19.297 -	if (action_ret != IRQ_HANDLED) {
  19.298 -		desc->irqs_unhandled++;
  19.299 -		if (action_ret != IRQ_NONE)
  19.300 -			report_bad_irq(irq, desc, action_ret);
  19.301 -	}
  19.302 -
  19.303 -	desc->irq_count++;
  19.304 -	if (desc->irq_count < 100000)
  19.305 -		return;
  19.306 -
  19.307 -	desc->irq_count = 0;
  19.308 -	if (desc->irqs_unhandled > 99900) {
  19.309 -		/*
  19.310 -		 * The interrupt is stuck
  19.311 -		 */
  19.312 -		__report_bad_irq(irq, desc, action_ret);
  19.313 -		/*
  19.314 -		 * Now kill the IRQ
  19.315 -		 */
  19.316 -		printk(KERN_EMERG "Disabling IRQ #%d\n", irq);
  19.317 -		desc->status |= IRQ_DISABLED;
  19.318 -		desc->handler->disable(irq);
  19.319 -	}
  19.320 -	desc->irqs_unhandled = 0;
  19.321 -}
  19.322 -
  19.323 -/*
  19.324 - * Generic enable/disable code: this just calls
  19.325 - * down into the PIC-specific version for the actual
  19.326 - * hardware disable after having gotten the irq
  19.327 - * controller lock. 
  19.328 - */
  19.329 - 
  19.330 -/**
  19.331 - *	disable_irq_nosync - disable an irq without waiting
  19.332 - *	@irq: Interrupt to disable
  19.333 - *
  19.334 - *	Disable the selected interrupt line.  Disables and Enables are
  19.335 - *	nested.
  19.336 - *	Unlike disable_irq(), this function does not ensure existing
  19.337 - *	instances of the IRQ handler have completed before returning.
  19.338 - *
  19.339 - *	This function may be called from IRQ context.
  19.340 - */
  19.341 - 
  19.342 -inline void disable_irq_nosync(unsigned int irq)
  19.343 -{
  19.344 -	irq_desc_t *desc = irq_desc + irq;
  19.345 -	unsigned long flags;
  19.346 -
  19.347 -	spin_lock_irqsave(&desc->lock, flags);
  19.348 -	if (!desc->depth++) {
  19.349 -		desc->status |= IRQ_DISABLED;
  19.350 -		desc->handler->disable(irq);
  19.351 -	}
  19.352 -	spin_unlock_irqrestore(&desc->lock, flags);
  19.353 -}
  19.354 -
  19.355 -/**
  19.356 - *	disable_irq - disable an irq and wait for completion
  19.357 - *	@irq: Interrupt to disable
  19.358 - *
  19.359 - *	Disable the selected interrupt line.  Enables and Disables are
  19.360 - *	nested.
  19.361 - *	This function waits for any pending IRQ handlers for this interrupt
  19.362 - *	to complete before returning. If you use this function while
  19.363 - *	holding a resource the IRQ handler may need you will deadlock.
  19.364 - *
  19.365 - *	This function may be called - with care - from IRQ context.
  19.366 - */
  19.367 - 
  19.368 -void disable_irq(unsigned int irq)
  19.369 -{
  19.370 -	irq_desc_t *desc = irq_desc + irq;
  19.371 -	disable_irq_nosync(irq);
  19.372 -	if (desc->action)
  19.373 -		synchronize_irq(irq);
  19.374 -}
  19.375 -
  19.376 -/**
  19.377 - *	enable_irq - enable handling of an irq
  19.378 - *	@irq: Interrupt to enable
  19.379 - *
  19.380 - *	Undoes the effect of one call to disable_irq().  If this
  19.381 - *	matches the last disable, processing of interrupts on this
  19.382 - *	IRQ line is re-enabled.
  19.383 - *
  19.384 - *	This function may be called from IRQ context.
  19.385 - */
  19.386 - 
  19.387 -void enable_irq(unsigned int irq)
  19.388 -{
  19.389 -	irq_desc_t *desc = irq_desc + irq;
  19.390 -	unsigned long flags;
  19.391 -
  19.392 -	spin_lock_irqsave(&desc->lock, flags);
  19.393 -	switch (desc->depth) {
  19.394 -	case 1: {
  19.395 -		unsigned int status = desc->status & ~IRQ_DISABLED;
  19.396 -		desc->status = status;
  19.397 -		if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
  19.398 -			desc->status = status | IRQ_REPLAY;
  19.399 -			hw_resend_irq(desc->handler,irq);
  19.400 -		}
  19.401 -		desc->handler->enable(irq);
  19.402 -		/* fall-through */
  19.403 -	}
  19.404 -	default:
  19.405 -		desc->depth--;
  19.406 -		break;
  19.407 -	case 0:
  19.408 -		printk("enable_irq(%u) unbalanced from %p\n", irq,
  19.409 -		       __builtin_return_address(0));
  19.410 -	}
  19.411 -	spin_unlock_irqrestore(&desc->lock, flags);
  19.412 -}
  19.413 -
  19.414 -/*
  19.415 - * do_IRQ handles all normal device IRQ's (the special
  19.416 - * SMP cross-CPU interrupts have their own specific
  19.417 - * handlers).
  19.418 - */
  19.419 -asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs)
  19.420 -{	
  19.421 -	/* 
  19.422 -	 * We ack quickly, we don't want the irq controller
  19.423 -	 * thinking we're snobs just because some other CPU has
  19.424 -	 * disabled global interrupts (we have already done the
  19.425 -	 * INT_ACK cycles, it's too late to try to pretend to the
  19.426 -	 * controller that we aren't taking the interrupt).
  19.427 -	 *
  19.428 -	 * 0 return value means that this irq is already being
  19.429 -	 * handled by some other CPU. (or is disabled)
  19.430 -	 */
  19.431 -	irq_desc_t *desc = irq_desc + irq;
  19.432 -	struct irqaction * action;
  19.433 -	unsigned int status;
  19.434 -
  19.435 -	irq_enter();
  19.436 -
  19.437 -#ifdef CONFIG_DEBUG_STACKOVERFLOW
  19.438 -	/* Debugging check for stack overflow: is there less than 1KB free? */
  19.439 -	{
  19.440 -		long esp;
  19.441 -
  19.442 -		__asm__ __volatile__("andl %%esp,%0" :
  19.443 -					"=r" (esp) : "0" (THREAD_SIZE - 1));
  19.444 -		if (unlikely(esp < (sizeof(struct thread_info) + STACK_WARN))) {
  19.445 -			printk("do_IRQ: stack overflow: %ld\n",
  19.446 -				esp - sizeof(struct thread_info));
  19.447 -			dump_stack();
  19.448 -		}
  19.449 -	}
  19.450 -#endif
  19.451 -	kstat_this_cpu.irqs[irq]++;
  19.452 -	spin_lock(&desc->lock);
  19.453 -	desc->handler->ack(irq);
  19.454 -	/*
  19.455 -	   REPLAY is when Linux resends an IRQ that was dropped earlier
  19.456 -	   WAITING is used by probe to mark irqs that are being tested
  19.457 -	   */
  19.458 -	status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING);
  19.459 -	status |= IRQ_PENDING; /* we _want_ to handle it */
  19.460 -
  19.461 -	/*
  19.462 -	 * If the IRQ is disabled for whatever reason, we cannot
  19.463 -	 * use the action we have.
  19.464 -	 */
  19.465 -	action = NULL;
  19.466 -	if (likely(!(status & (IRQ_DISABLED | IRQ_INPROGRESS)))) {
  19.467 -		action = desc->action;
  19.468 -		status &= ~IRQ_PENDING; /* we commit to handling */
  19.469 -		status |= IRQ_INPROGRESS; /* we are handling it */
  19.470 -	}
  19.471 -	desc->status = status;
  19.472 -
  19.473 -	/*
  19.474 -	 * If there is no IRQ handler or it was disabled, exit early.
  19.475 -	   Since we set PENDING, if another processor is handling
  19.476 -	   a different instance of this same irq, the other processor
  19.477 -	   will take care of it.
  19.478 -	 */
  19.479 -	if (unlikely(!action))
  19.480 -		goto out;
  19.481 -
  19.482 -	/*
  19.483 -	 * Edge triggered interrupts need to remember
  19.484 -	 * pending events.
  19.485 -	 * This applies to any hw interrupts that allow a second
  19.486 -	 * instance of the same irq to arrive while we are in do_IRQ
  19.487 -	 * or in the handler. But the code here only handles the _second_
  19.488 -	 * instance of the irq, not the third or fourth. So it is mostly
  19.489 -	 * useful for irq hardware that does not mask cleanly in an
  19.490 -	 * SMP environment.
  19.491 -	 */
  19.492 -#ifdef CONFIG_4KSTACKS
  19.493 -
  19.494 -	for (;;) {
  19.495 -		irqreturn_t action_ret;
  19.496 -		u32 *isp;
  19.497 -		union irq_ctx * curctx;
  19.498 -		union irq_ctx * irqctx;
  19.499 -
  19.500 -		curctx = (union irq_ctx *) current_thread_info();
  19.501 -		irqctx = hardirq_ctx[smp_processor_id()];
  19.502 -
  19.503 -		spin_unlock(&desc->lock);
  19.504 -
  19.505 -		/*
  19.506 -		 * this is where we switch to the IRQ stack. However, if we are already using
  19.507 -		 * the IRQ stack (because we interrupted a hardirq handler) we can't do that
  19.508 -		 * and just have to keep using the current stack (which is the irq stack already
  19.509 -		 * after all)
  19.510 -		 */
  19.511 -
  19.512 -		if (curctx == irqctx)
  19.513 -			action_ret = handle_IRQ_event(irq, regs, action);
  19.514 -		else {
  19.515 -			/* build the stack frame on the IRQ stack */
  19.516 -			isp = (u32*) ((char*)irqctx + sizeof(*irqctx));
  19.517 -			irqctx->tinfo.task = curctx->tinfo.task;
  19.518 -			irqctx->tinfo.previous_esp = current_stack_pointer();
  19.519 -
  19.520 -			*--isp = (u32) action;
  19.521 -			*--isp = (u32) regs;
  19.522 -			*--isp = (u32) irq;
  19.523 -
  19.524 -			asm volatile(
  19.525 -				"       xchgl   %%ebx,%%esp     \n"
  19.526 -				"       call    handle_IRQ_event \n"
  19.527 -				"       xchgl   %%ebx,%%esp     \n"
  19.528 -				: "=a"(action_ret)
  19.529 -				: "b"(isp)
  19.530 -				: "memory", "cc", "edx", "ecx"
  19.531 -			);
  19.532 -
  19.533 -
  19.534 -		}
  19.535 -		spin_lock(&desc->lock);
  19.536 -		if (!noirqdebug)
  19.537 -			note_interrupt(irq, desc, action_ret);
  19.538 -		if (curctx != irqctx)
  19.539 -			irqctx->tinfo.task = NULL;
  19.540 -		if (likely(!(desc->status & IRQ_PENDING)))
  19.541 -			break;
  19.542 -		desc->status &= ~IRQ_PENDING;
  19.543 -	}
  19.544 -
  19.545 -#else
  19.546 -
  19.547 -	for (;;) {
  19.548 -		irqreturn_t action_ret;
  19.549 -
  19.550 -		spin_unlock(&desc->lock);
  19.551 -
  19.552 -		action_ret = handle_IRQ_event(irq, regs, action);
  19.553 -
  19.554 -		spin_lock(&desc->lock);
  19.555 -		if (!noirqdebug)
  19.556 -			note_interrupt(irq, desc, action_ret);
  19.557 -		if (likely(!(desc->status & IRQ_PENDING)))
  19.558 -			break;
  19.559 -		desc->status &= ~IRQ_PENDING;
  19.560 -	}
  19.561 -#endif
  19.562 -	desc->status &= ~IRQ_INPROGRESS;
  19.563 -
  19.564 -out:
  19.565 -	/*
  19.566 -	 * The ->end() handler has to deal with interrupts which got
  19.567 -	 * disabled while the handler was running.
  19.568 -	 */
  19.569 -	desc->handler->end(irq);
  19.570 -	spin_unlock(&desc->lock);
  19.571 -
  19.572 -	irq_exit();
  19.573 -
  19.574 -	return 1;
  19.575 -}
  19.576 -
  19.577 -int can_request_irq(unsigned int irq, unsigned long irqflags)
  19.578 -{
  19.579 -	struct irqaction *action;
  19.580 -
  19.581 -	if (irq >= NR_IRQS)
  19.582 -		return 0;
  19.583 -	action = irq_desc[irq].action;
  19.584 -	if (action) {
  19.585 -		if (irqflags & action->flags & SA_SHIRQ)
  19.586 -			action = NULL;
  19.587 -	}
  19.588 -	return !action;
  19.589 -}
  19.590 -
  19.591 -/**
  19.592 - *	request_irq - allocate an interrupt line
  19.593 - *	@irq: Interrupt line to allocate
  19.594 - *	@handler: Function to be called when the IRQ occurs
  19.595 - *	@irqflags: Interrupt type flags
  19.596 - *	@devname: An ascii name for the claiming device
  19.597 - *	@dev_id: A cookie passed back to the handler function
  19.598 - *
  19.599 - *	This call allocates interrupt resources and enables the
  19.600 - *	interrupt line and IRQ handling. From the point this
  19.601 - *	call is made your handler function may be invoked. Since
  19.602 - *	your handler function must clear any interrupt the board 
  19.603 - *	raises, you must take care both to initialise your hardware
  19.604 - *	and to set up the interrupt handler in the right order.
  19.605 - *
  19.606 - *	Dev_id must be globally unique. Normally the address of the
  19.607 - *	device data structure is used as the cookie. Since the handler
  19.608 - *	receives this value it makes sense to use it.
  19.609 - *
  19.610 - *	If your interrupt is shared you must pass a non NULL dev_id
  19.611 - *	as this is required when freeing the interrupt.
  19.612 - *
  19.613 - *	Flags:
  19.614 - *
  19.615 - *	SA_SHIRQ		Interrupt is shared
  19.616 - *
  19.617 - *	SA_INTERRUPT		Disable local interrupts while processing
  19.618 - *
  19.619 - *	SA_SAMPLE_RANDOM	The interrupt can be used for entropy
  19.620 - *
  19.621 - */
  19.622 - 
  19.623 -int request_irq(unsigned int irq, 
  19.624 -		irqreturn_t (*handler)(int, void *, struct pt_regs *),
  19.625 -		unsigned long irqflags, 
  19.626 -		const char * devname,
  19.627 -		void *dev_id)
  19.628 -{
  19.629 -	int retval;
  19.630 -	struct irqaction * action;
  19.631 -
  19.632 -#if 1
  19.633 -	/*
  19.634 -	 * Sanity-check: shared interrupts should REALLY pass in
  19.635 -	 * a real dev-ID, otherwise we'll have trouble later trying
  19.636 -	 * to figure out which interrupt is which (messes up the
  19.637 -	 * interrupt freeing logic etc).
  19.638 -	 */
  19.639 -	if (irqflags & SA_SHIRQ) {
  19.640 -		if (!dev_id)
  19.641 -			printk("Bad boy: %s (at 0x%x) called us without a dev_id!\n", devname, (&irq)[-1]);
  19.642 -	}
  19.643 -#endif
  19.644 -
  19.645 -	if (irq >= NR_IRQS)
  19.646 -		return -EINVAL;
  19.647 -	if (!handler)
  19.648 -		return -EINVAL;
  19.649 -
  19.650 -	action = (struct irqaction *)
  19.651 -			kmalloc(sizeof(struct irqaction), GFP_ATOMIC);
  19.652 -	if (!action)
  19.653 -		return -ENOMEM;
  19.654 -
  19.655 -	action->handler = handler;
  19.656 -	action->flags = irqflags;
  19.657 -	cpus_clear(action->mask);
  19.658 -	action->name = devname;
  19.659 -	action->next = NULL;
  19.660 -	action->dev_id = dev_id;
  19.661 -
  19.662 -	retval = setup_irq(irq, action);
  19.663 -	if (retval)
  19.664 -		kfree(action);
  19.665 -	return retval;
  19.666 -}
  19.667 -
  19.668 -EXPORT_SYMBOL(request_irq);
  19.669 -
  19.670 -/**
  19.671 - *	free_irq - free an interrupt
  19.672 - *	@irq: Interrupt line to free
  19.673 - *	@dev_id: Device identity to free
  19.674 - *
  19.675 - *	Remove an interrupt handler. The handler is removed and if the
  19.676 - *	interrupt line is no longer in use by any driver it is disabled.
  19.677 - *	On a shared IRQ the caller must ensure the interrupt is disabled
  19.678 - *	on the card it drives before calling this function. The function
  19.679 - *	does not return until any executing interrupts for this IRQ
  19.680 - *	have completed.
  19.681 - *
  19.682 - *	This function must not be called from interrupt context. 
  19.683 - */
  19.684 - 
  19.685 -void free_irq(unsigned int irq, void *dev_id)
  19.686 -{
  19.687 -	irq_desc_t *desc;
  19.688 -	struct irqaction **p;
  19.689 -	unsigned long flags;
  19.690 -
  19.691 -	if (irq >= NR_IRQS)
  19.692 -		return;
  19.693 -
  19.694 -	desc = irq_desc + irq;
  19.695 -	spin_lock_irqsave(&desc->lock,flags);
  19.696 -	p = &desc->action;
  19.697 -	for (;;) {
  19.698 -		struct irqaction * action = *p;
  19.699 -
  19.700 -		if (action) {
  19.701 -			struct irqaction **pp = p;
  19.702 -			p = &action->next;
  19.703 -			if (action->dev_id != dev_id)
  19.704 -				continue;
  19.705 -
  19.706 -			/* Found it - now remove it from the list of entries */
  19.707 -			*pp = action->next;
  19.708 -			if (!desc->action) {
  19.709 -				desc->status |= IRQ_DISABLED;
  19.710 -				desc->handler->shutdown(irq);
  19.711 -			}
  19.712 -			spin_unlock_irqrestore(&desc->lock,flags);
  19.713 -
  19.714 -			/* Wait to make sure it's not being used on another CPU */
  19.715 -			synchronize_irq(irq);
  19.716 -
  19.717 -#define SA_STATIC_ACTION 0x01000000 /* Is it our duty to free the action? */
  19.718 -			if (!(action->flags & SA_STATIC_ACTION))
  19.719 -				kfree(action);
  19.720 -			return;
  19.721 -		}
  19.722 -		printk("Trying to free free IRQ%d\n",irq);
  19.723 -		spin_unlock_irqrestore(&desc->lock,flags);
  19.724 -		return;
  19.725 -	}
  19.726 -}
  19.727 -
  19.728 -EXPORT_SYMBOL(free_irq);
  19.729 -
  19.730 -/*
  19.731 - * IRQ autodetection code..
  19.732 - *
  19.733 - * This depends on the fact that any interrupt that
  19.734 - * comes in on to an unassigned handler will get stuck
  19.735 - * with "IRQ_WAITING" cleared and the interrupt
  19.736 - * disabled.
  19.737 - */
  19.738 -
  19.739 -static DECLARE_MUTEX(probe_sem);
  19.740 -
  19.741 -/**
  19.742 - *	probe_irq_on	- begin an interrupt autodetect
  19.743 - *
  19.744 - *	Commence probing for an interrupt. The interrupts are scanned
  19.745 - *	and a mask of potential interrupt lines is returned.
  19.746 - *
  19.747 - */
  19.748 - 
  19.749 -unsigned long probe_irq_on(void)
  19.750 -{
  19.751 -	unsigned int i;
  19.752 -	irq_desc_t *desc;
  19.753 -	unsigned long val;
  19.754 -	unsigned long delay;
  19.755 -
  19.756 -	down(&probe_sem);
  19.757 -	/* 
  19.758 -	 * something may have generated an irq long ago and we want to
  19.759 -	 * flush such a longstanding irq before considering it as spurious. 
  19.760 -	 */
  19.761 -	for (i = NR_PIRQS-1; i > 0; i--)  {
  19.762 -		desc = irq_desc + i;
  19.763 -
  19.764 -		spin_lock_irq(&desc->lock);
  19.765 -		if (!irq_desc[i].action) 
  19.766 -			irq_desc[i].handler->startup(i);
  19.767 -		spin_unlock_irq(&desc->lock);
  19.768 -	}
  19.769 -
  19.770 -	/* Wait for longstanding interrupts to trigger. */
  19.771 -	for (delay = jiffies + HZ/50; time_after(delay, jiffies); )
  19.772 -		/* about 20ms delay */ barrier();
  19.773 -
  19.774 -	/*
  19.775 -	 * enable any unassigned irqs
  19.776 -	 * (we must startup again here because if a longstanding irq
  19.777 -	 * happened in the previous stage, it may have masked itself)
  19.778 -	 */
  19.779 -	for (i = NR_PIRQS-1; i > 0; i--) {
  19.780 -		desc = irq_desc + i;
  19.781 -
  19.782 -		spin_lock_irq(&desc->lock);
  19.783 -		if (!desc->action) {
  19.784 -			desc->status |= IRQ_AUTODETECT | IRQ_WAITING;
  19.785 -			if (desc->handler->startup(i))
  19.786 -				desc->status |= IRQ_PENDING;
  19.787 -		}
  19.788 -		spin_unlock_irq(&desc->lock);
  19.789 -	}
  19.790 -
  19.791 -	/*
  19.792 -	 * Wait for spurious interrupts to trigger
  19.793 -	 */
  19.794 -	for (delay = jiffies + HZ/10; time_after(delay, jiffies); )
  19.795 -		/* about 100ms delay */ barrier();
  19.796 -
  19.797 -	/*
  19.798 -	 * Now filter out any obviously spurious interrupts
  19.799 -	 */
  19.800 -	val = 0;
  19.801 -	for (i = 0; i < NR_PIRQS; i++) {
  19.802 -		irq_desc_t *desc = irq_desc + i;
  19.803 -		unsigned int status;
  19.804 -
  19.805 -		spin_lock_irq(&desc->lock);
  19.806 -		status = desc->status;
  19.807 -
  19.808 -		if (status & IRQ_AUTODETECT) {
  19.809 -			/* It triggered already - consider it spurious. */
  19.810 -			if (!(status & IRQ_WAITING)) {
  19.811 -				desc->status = status & ~IRQ_AUTODETECT;
  19.812 -				desc->handler->shutdown(i);
  19.813 -			} else
  19.814 -				if (i < 32)
  19.815 -					val |= 1 << i;
  19.816 -		}
  19.817 -		spin_unlock_irq(&desc->lock);
  19.818 -	}
  19.819 -
  19.820 -	return val;
  19.821 -}
  19.822 -
  19.823 -EXPORT_SYMBOL(probe_irq_on);
  19.824 -
  19.825 -/*
  19.826 - * Return a mask of triggered interrupts (this
  19.827 - * can handle only legacy ISA interrupts).
  19.828 - */
  19.829 - 
  19.830 -/**
  19.831 - *	probe_irq_mask - scan a bitmap of interrupt lines
  19.832 - *	@val:	mask of interrupts to consider
  19.833 - *
  19.834 - *	Scan the ISA bus interrupt lines and return a bitmap of
  19.835 - *	active interrupts. The interrupt probe logic state is then
  19.836 - *	returned to its previous value.
  19.837 - *
  19.838 - *	Note: we need to scan all the irq's even though we will
  19.839 - *	only return ISA irq numbers - just so that we reset them
  19.840 - *	all to a known state.
  19.841 - */
  19.842 -unsigned int probe_irq_mask(unsigned long val)
  19.843 -{
  19.844 -	int i;
  19.845 -	unsigned int mask;
  19.846 -
  19.847 -	mask = 0;
  19.848 -	for (i = 0; i < NR_PIRQS; i++) {
  19.849 -		irq_desc_t *desc = irq_desc + i;
  19.850 -		unsigned int status;
  19.851 -
  19.852 -		spin_lock_irq(&desc->lock);
  19.853 -		status = desc->status;
  19.854 -
  19.855 -		if (status & IRQ_AUTODETECT) {
  19.856 -			if (i < 16 && !(status & IRQ_WAITING))
  19.857 -				mask |= 1 << i;
  19.858 -
  19.859 -			desc->status = status & ~IRQ_AUTODETECT;
  19.860 -			desc->handler->shutdown(i);
  19.861 -		}
  19.862 -		spin_unlock_irq(&desc->lock);
  19.863 -	}
  19.864 -	up(&probe_sem);
  19.865 -
  19.866 -	return mask & val;
  19.867 -}
  19.868 -
  19.869 -/*
  19.870 - * Return the one interrupt that triggered (this can
  19.871 - * handle any interrupt source).
  19.872 - */
  19.873 -
  19.874 -/**
  19.875 - *	probe_irq_off	- end an interrupt autodetect
  19.876 - *	@val: mask of potential interrupts (unused)
  19.877 - *
  19.878 - *	Scans the unused interrupt lines and returns the line which
  19.879 - *	appears to have triggered the interrupt. If no interrupt was
  19.880 - *	found then zero is returned. If more than one interrupt is
  19.881 - *	found then minus the first candidate is returned to indicate
  19.882 - *	their is doubt.
  19.883 - *
  19.884 - *	The interrupt probe logic state is returned to its previous
  19.885 - *	value.
  19.886 - *
  19.887 - *	BUGS: When used in a module (which arguably shouldnt happen)
  19.888 - *	nothing prevents two IRQ probe callers from overlapping. The
  19.889 - *	results of this are non-optimal.
  19.890 - */
  19.891 - 
  19.892 -int probe_irq_off(unsigned long val)
  19.893 -{
  19.894 -	int i, irq_found, nr_irqs;
  19.895 -
  19.896 -	nr_irqs = 0;
  19.897 -	irq_found = 0;
  19.898 -	for (i = 0; i < NR_PIRQS; i++) {
  19.899 -		irq_desc_t *desc = irq_desc + i;
  19.900 -		unsigned int status;
  19.901 -
  19.902 -		spin_lock_irq(&desc->lock);
  19.903 -		status = desc->status;
  19.904 -
  19.905 -		if (status & IRQ_AUTODETECT) {
  19.906 -			if (!(status & IRQ_WAITING)) {
  19.907 -				if (!nr_irqs)
  19.908 -					irq_found = i;
  19.909 -				nr_irqs++;
  19.910 -			}
  19.911 -			desc->status = status & ~IRQ_AUTODETECT;
  19.912 -			desc->handler->shutdown(i);
  19.913 -		}
  19.914 -		spin_unlock_irq(&desc->lock);
  19.915 -	}
  19.916 -	up(&probe_sem);
  19.917 -
  19.918 -	if (nr_irqs > 1)
  19.919 -		irq_found = -irq_found;
  19.920 -	return irq_found;
  19.921 -}
  19.922 -
  19.923 -EXPORT_SYMBOL(probe_irq_off);
  19.924 -
  19.925 -/* this was setup_x86_irq but it seems pretty generic */
  19.926 -int setup_irq(unsigned int irq, struct irqaction * new)
  19.927 -{
  19.928 -	int shared = 0;
  19.929 -	unsigned long flags;
  19.930 -	struct irqaction *old, **p;
  19.931 -	irq_desc_t *desc = irq_desc + irq;
  19.932 -
  19.933 -	if (desc->handler == &no_irq_type)
  19.934 -		return -ENOSYS;
  19.935 -	/*
  19.936 -	 * Some drivers like serial.c use request_irq() heavily,
  19.937 -	 * so we have to be careful not to interfere with a
  19.938 -	 * running system.
  19.939 -	 */
  19.940 -	if (new->flags & SA_SAMPLE_RANDOM) {
  19.941 -		/*
  19.942 -		 * This function might sleep, we want to call it first,
  19.943 -		 * outside of the atomic block.
  19.944 -		 * Yes, this might clear the entropy pool if the wrong
  19.945 -		 * driver is attempted to be loaded, without actually
  19.946 -		 * installing a new handler, but is this really a problem,
  19.947 -		 * only the sysadmin is able to do this.
  19.948 -		 */
  19.949 -		rand_initialize_irq(irq);
  19.950 -	}
  19.951 -
  19.952 -	/*
  19.953 -	 * The following block of code has to be executed atomically
  19.954 -	 */
  19.955 -	spin_lock_irqsave(&desc->lock,flags);
  19.956 -	p = &desc->action;
  19.957 -	if ((old = *p) != NULL) {
  19.958 -		/* Can't share interrupts unless both agree to */
  19.959 -		if (!(old->flags & new->flags & SA_SHIRQ)) {
  19.960 -			spin_unlock_irqrestore(&desc->lock,flags);
  19.961 -			return -EBUSY;
  19.962 -		}
  19.963 -
  19.964 -		/* add new interrupt at end of irq queue */
  19.965 -		do {
  19.966 -			p = &old->next;
  19.967 -			old = *p;
  19.968 -		} while (old);
  19.969 -		shared = 1;
  19.970 -	}
  19.971 -
  19.972 -	*p = new;
  19.973 -
  19.974 -	if (!shared) {
  19.975 -		desc->depth = 0;
  19.976 -		desc->status &= ~(IRQ_DISABLED | IRQ_AUTODETECT | IRQ_WAITING | IRQ_INPROGRESS);
  19.977 -		desc->handler->startup(irq);
  19.978 -	}
  19.979 -	spin_unlock_irqrestore(&desc->lock,flags);
  19.980 -
  19.981 -	register_irq_proc(irq);
  19.982 -	return 0;
  19.983 -}
  19.984 -
  19.985 -static struct proc_dir_entry * root_irq_dir;
  19.986 -static struct proc_dir_entry * irq_dir [NR_IRQS];
  19.987 -
  19.988 -#ifdef CONFIG_SMP
  19.989 -
  19.990 -static struct proc_dir_entry *smp_affinity_entry[NR_IRQS];
  19.991 -
  19.992 -cpumask_t irq_affinity[NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
  19.993 -
  19.994 -static int irq_affinity_read_proc(char *page, char **start, off_t off,
  19.995 -			int count, int *eof, void *data)
  19.996 -{
  19.997 -	int len = cpumask_scnprintf(page, count, irq_affinity[(long)data]);
  19.998 -	if (count - len < 2)
  19.999 -		return -EINVAL;
 19.1000 -	len += sprintf(page + len, "\n");
 19.1001 -	return len;
 19.1002 -}
 19.1003 -
 19.1004 -static int irq_affinity_write_proc(struct file *file, const char __user *buffer,
 19.1005 -					unsigned long count, void *data)
 19.1006 -{
 19.1007 -	int irq = (long)data, full_count = count, err;
 19.1008 -	cpumask_t new_value, tmp;
 19.1009 -
 19.1010 -	if (!irq_desc[irq].handler->set_affinity)
 19.1011 -		return -EIO;
 19.1012 -
 19.1013 -	err = cpumask_parse(buffer, count, new_value);
 19.1014 -	if (err)
 19.1015 -		return err;
 19.1016 -
 19.1017 -	/*
 19.1018 -	 * Do not allow disabling IRQs completely - it's a too easy
 19.1019 -	 * way to make the system unusable accidentally :-) At least
 19.1020 -	 * one online CPU still has to be targeted.
 19.1021 -	 */
 19.1022 -	cpus_and(tmp, new_value, cpu_online_map);
 19.1023 -	if (cpus_empty(tmp))
 19.1024 -		return -EINVAL;
 19.1025 -
 19.1026 -	irq_affinity[irq] = new_value;
 19.1027 -	irq_desc[irq].handler->set_affinity(irq,
 19.1028 -					cpumask_of_cpu(first_cpu(new_value)));
 19.1029 -
 19.1030 -	return full_count;
 19.1031 -}
 19.1032 -
 19.1033 -#endif
 19.1034 -
 19.1035 -static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
 19.1036 -			int count, int *eof, void *data)
 19.1037 -{
 19.1038 -	int len = cpumask_scnprintf(page, count, *(cpumask_t *)data);
 19.1039 -	if (count - len < 2)
 19.1040 -		return -EINVAL;
 19.1041 -	len += sprintf(page + len, "\n");
 19.1042 -	return len;
 19.1043 -}
 19.1044 -
 19.1045 -static int prof_cpu_mask_write_proc (struct file *file, const char __user *buffer,
 19.1046 -					unsigned long count, void *data)
 19.1047 -{
 19.1048 -	cpumask_t *mask = (cpumask_t *)data;
 19.1049 -	unsigned long full_count = count, err;
 19.1050 -	cpumask_t new_value;
 19.1051 -
 19.1052 -	err = cpumask_parse(buffer, count, new_value);
 19.1053 -	if (err)
 19.1054 -		return err;
 19.1055 -
 19.1056 -	*mask = new_value;
 19.1057 -	return full_count;
 19.1058 -}
 19.1059 -
 19.1060 -#define MAX_NAMELEN 10
 19.1061 -
 19.1062 -static void register_irq_proc (unsigned int irq)
 19.1063 -{
 19.1064 -	char name [MAX_NAMELEN];
 19.1065 -
 19.1066 -	if (!root_irq_dir || (irq_desc[irq].handler == &no_irq_type) ||
 19.1067 -			irq_dir[irq])
 19.1068 -		return;
 19.1069 -
 19.1070 -	memset(name, 0, MAX_NAMELEN);
 19.1071 -	sprintf(name, "%d", irq);
 19.1072 -
 19.1073 -	/* create /proc/irq/1234 */
 19.1074 -	irq_dir[irq] = proc_mkdir(name, root_irq_dir);
 19.1075 -
 19.1076 -#ifdef CONFIG_SMP
 19.1077 -	{
 19.1078 -		struct proc_dir_entry *entry;
 19.1079 -
 19.1080 -		/* create /proc/irq/1234/smp_affinity */
 19.1081 -		entry = create_proc_entry("smp_affinity", 0600, irq_dir[irq]);
 19.1082 -
 19.1083 -		if (entry) {
 19.1084 -			entry->nlink = 1;
 19.1085 -			entry->data = (void *)(long)irq;
 19.1086 -			entry->read_proc = irq_affinity_read_proc;
 19.1087 -			entry->write_proc = irq_affinity_write_proc;
 19.1088 -		}
 19.1089 -
 19.1090 -		smp_affinity_entry[irq] = entry;
 19.1091 -	}
 19.1092 -#endif
 19.1093 -}
 19.1094 -
 19.1095 -unsigned long prof_cpu_mask = -1;
 19.1096 -
 19.1097 -void init_irq_proc (void)
 19.1098 -{
 19.1099 -	struct proc_dir_entry *entry;
 19.1100 -	int i;
 19.1101 -
 19.1102 -	/* create /proc/irq */
 19.1103 -	root_irq_dir = proc_mkdir("irq", NULL);
 19.1104 -
 19.1105 -	/* create /proc/irq/prof_cpu_mask */
 19.1106 -	entry = create_proc_entry("prof_cpu_mask", 0600, root_irq_dir);
 19.1107 -
 19.1108 -	if (!entry)
 19.1109 -	    return;
 19.1110 -
 19.1111 -	entry->nlink = 1;
 19.1112 -	entry->data = (void *)&prof_cpu_mask;
 19.1113 -	entry->read_proc = prof_cpu_mask_read_proc;
 19.1114 -	entry->write_proc = prof_cpu_mask_write_proc;
 19.1115 -
 19.1116 -	/*
 19.1117 -	 * Create entries for all existing IRQs.
 19.1118 -	 */
 19.1119 -	for (i = 0; i < NR_IRQS; i++)
 19.1120 -		register_irq_proc(i);
 19.1121 -}
 19.1122 -
 19.1123 -
 19.1124 -#ifdef CONFIG_4KSTACKS
 19.1125 -/*
 19.1126 - * These should really be __section__(".bss.page_aligned") as well, but
 19.1127 - * gcc's 3.0 and earlier don't handle that correctly.
 19.1128 - */
 19.1129 -static char softirq_stack[NR_CPUS * THREAD_SIZE]  __attribute__((__aligned__(THREAD_SIZE)));
 19.1130 -static char hardirq_stack[NR_CPUS * THREAD_SIZE]  __attribute__((__aligned__(THREAD_SIZE)));
 19.1131 -
 19.1132 -/*
 19.1133 - * allocate per-cpu stacks for hardirq and for softirq processing
 19.1134 - */
 19.1135 -void irq_ctx_init(int cpu)
 19.1136 -{
 19.1137 -	union irq_ctx *irqctx;
 19.1138 -
 19.1139 -	if (hardirq_ctx[cpu])
 19.1140 -		return;
 19.1141 -
 19.1142 -	irqctx = (union irq_ctx*) &hardirq_stack[cpu*THREAD_SIZE];
 19.1143 -	irqctx->tinfo.task              = NULL;
 19.1144 -	irqctx->tinfo.exec_domain       = NULL;
 19.1145 -	irqctx->tinfo.cpu               = cpu;
 19.1146 -	irqctx->tinfo.preempt_count     = HARDIRQ_OFFSET;
 19.1147 -	irqctx->tinfo.addr_limit        = MAKE_MM_SEG(0);
 19.1148 -
 19.1149 -	hardirq_ctx[cpu] = irqctx;
 19.1150 -
 19.1151 -	irqctx = (union irq_ctx*) &softirq_stack[cpu*THREAD_SIZE];
 19.1152 -	irqctx->tinfo.task              = NULL;
 19.1153 -	irqctx->tinfo.exec_domain       = NULL;
 19.1154 -	irqctx->tinfo.cpu               = cpu;
 19.1155 -	irqctx->tinfo.preempt_count     = SOFTIRQ_OFFSET;
 19.1156 -	irqctx->tinfo.addr_limit        = MAKE_MM_SEG(0);
 19.1157 -
 19.1158 -	softirq_ctx[cpu] = irqctx;
 19.1159 -
 19.1160 -	printk("CPU %u irqstacks, hard=%p soft=%p\n",
 19.1161 -		cpu,hardirq_ctx[cpu],softirq_ctx[cpu]);
 19.1162 -}
 19.1163 -
 19.1164 -extern asmlinkage void __do_softirq(void);
 19.1165 -
 19.1166 -asmlinkage void do_softirq(void)
 19.1167 -{
 19.1168 -	unsigned long flags;
 19.1169 -	struct thread_info *curctx;
 19.1170 -	union irq_ctx *irqctx;
 19.1171 -	u32 *isp;
 19.1172 -
 19.1173 -	if (in_interrupt())
 19.1174 -		return;
 19.1175 -
 19.1176 -	local_irq_save(flags);
 19.1177 -
 19.1178 -	if (local_softirq_pending()) {
 19.1179 -		curctx = current_thread_info();
 19.1180 -		irqctx = softirq_ctx[smp_processor_id()];
 19.1181 -		irqctx->tinfo.task = curctx->task;
 19.1182 -		irqctx->tinfo.previous_esp = current_stack_pointer();
 19.1183 -
 19.1184 -		/* build the stack frame on the softirq stack */
 19.1185 -		isp = (u32*) ((char*)irqctx + sizeof(*irqctx));
 19.1186 -
 19.1187 -
 19.1188 -		asm volatile(
 19.1189 -			"       xchgl   %%ebx,%%esp     \n"
 19.1190 -			"       call    __do_softirq    \n"
 19.1191 -			"       movl    %%ebx,%%esp     \n"
 19.1192 -			: "=b"(isp)
 19.1193 -			: "0"(isp)
 19.1194 -			: "memory", "cc", "edx", "ecx", "eax"
 19.1195 -		);
 19.1196 -	}
 19.1197 -
 19.1198 -	local_irq_restore(flags);
 19.1199 -}
 19.1200 -
 19.1201 -EXPORT_SYMBOL(do_softirq);
 19.1202 -#endif
    20.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/ldt.c	Mon Oct 25 12:45:34 2004 +0000
    20.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.3 @@ -1,265 +0,0 @@
    20.4 -/*
    20.5 - * linux/kernel/ldt.c
    20.6 - *
    20.7 - * Copyright (C) 1992 Krishna Balasubramanian and Linus Torvalds
    20.8 - * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com>
    20.9 - */
   20.10 -
   20.11 -#include <linux/errno.h>
   20.12 -#include <linux/sched.h>
   20.13 -#include <linux/string.h>
   20.14 -#include <linux/mm.h>
   20.15 -#include <linux/smp.h>
   20.16 -#include <linux/smp_lock.h>
   20.17 -#include <linux/vmalloc.h>
   20.18 -#include <linux/slab.h>
   20.19 -
   20.20 -#include <asm/uaccess.h>
   20.21 -#include <asm/system.h>
   20.22 -#include <asm/ldt.h>
   20.23 -#include <asm/desc.h>
   20.24 -
   20.25 -#ifdef CONFIG_SMP /* avoids "defined but not used" warnig */
   20.26 -static void flush_ldt(void *null)
   20.27 -{
   20.28 -	if (current->active_mm) {
   20.29 -		load_LDT(&current->active_mm->context);
   20.30 -		flush_page_update_queue();
   20.31 -	}
   20.32 -}
   20.33 -#endif
   20.34 -
   20.35 -static int alloc_ldt(mm_context_t *pc, int mincount, int reload)
   20.36 -{
   20.37 -	void *oldldt;
   20.38 -	void *newldt;
   20.39 -	int oldsize;
   20.40 -
   20.41 -	if (mincount <= pc->size)
   20.42 -		return 0;
   20.43 -	oldsize = pc->size;
   20.44 -	mincount = (mincount+511)&(~511);
   20.45 -	if (mincount*LDT_ENTRY_SIZE > PAGE_SIZE)
   20.46 -		newldt = vmalloc(mincount*LDT_ENTRY_SIZE);
   20.47 -	else
   20.48 -		newldt = kmalloc(mincount*LDT_ENTRY_SIZE, GFP_KERNEL);
   20.49 -
   20.50 -	if (!newldt)
   20.51 -		return -ENOMEM;
   20.52 -
   20.53 -	if (oldsize)
   20.54 -		memcpy(newldt, pc->ldt, oldsize*LDT_ENTRY_SIZE);
   20.55 -	oldldt = pc->ldt;
   20.56 -	memset(newldt+oldsize*LDT_ENTRY_SIZE, 0, (mincount-oldsize)*LDT_ENTRY_SIZE);
   20.57 -	pc->ldt = newldt;
   20.58 -	wmb();
   20.59 -	pc->size = mincount;
   20.60 -	wmb();
   20.61 -
   20.62 -	if (reload) {
   20.63 -#ifdef CONFIG_SMP
   20.64 -		cpumask_t mask;
   20.65 -		preempt_disable();
   20.66 -#endif
   20.67 -		make_pages_readonly(pc->ldt, (pc->size * LDT_ENTRY_SIZE) /
   20.68 -				    PAGE_SIZE);
   20.69 -		load_LDT(pc);
   20.70 -		flush_page_update_queue();
   20.71 -#ifdef CONFIG_SMP
   20.72 -		mask = cpumask_of_cpu(smp_processor_id());
   20.73 -		if (!cpus_equal(current->mm->cpu_vm_mask, mask))
   20.74 -			smp_call_function(flush_ldt, NULL, 1, 1);
   20.75 -		preempt_enable();
   20.76 -#endif
   20.77 -	}
   20.78 -	if (oldsize) {
   20.79 -		make_pages_writable(oldldt, (oldsize * LDT_ENTRY_SIZE) /
   20.80 -			PAGE_SIZE);
   20.81 -		flush_page_update_queue();
   20.82 -		if (oldsize*LDT_ENTRY_SIZE > PAGE_SIZE)
   20.83 -			vfree(oldldt);
   20.84 -		else
   20.85 -			kfree(oldldt);
   20.86 -	}
   20.87 -	return 0;
   20.88 -}
   20.89 -
   20.90 -static inline int copy_ldt(mm_context_t *new, mm_context_t *old)
   20.91 -{
   20.92 -	int err = alloc_ldt(new, old->size, 0);
   20.93 -	if (err < 0)
   20.94 -		return err;
   20.95 -	memcpy(new->ldt, old->ldt, old->size*LDT_ENTRY_SIZE);
   20.96 -	make_pages_readonly(new->ldt, (new->size * LDT_ENTRY_SIZE) /
   20.97 -			    PAGE_SIZE);
   20.98 -	flush_page_update_queue();
   20.99 -	return 0;
  20.100 -}
  20.101 -
  20.102 -/*
  20.103 - * we do not have to muck with descriptors here, that is
  20.104 - * done in switch_mm() as needed.
  20.105 - */
  20.106 -int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
  20.107 -{
  20.108 -	struct mm_struct * old_mm;
  20.109 -	int retval = 0;
  20.110 -
  20.111 -	init_MUTEX(&mm->context.sem);
  20.112 -	mm->context.size = 0;
  20.113 -	old_mm = current->mm;
  20.114 -	if (old_mm && old_mm->context.size > 0) {
  20.115 -		down(&old_mm->context.sem);
  20.116 -		retval = copy_ldt(&mm->context, &old_mm->context);
  20.117 -		up(&old_mm->context.sem);
  20.118 -	}
  20.119 -	return retval;
  20.120 -}
  20.121 -
  20.122 -/*
  20.123 - * No need to lock the MM as we are the last user
  20.124 - */
  20.125 -void destroy_context(struct mm_struct *mm)
  20.126 -{
  20.127 -	if (mm->context.size) {
  20.128 -		if (mm == current->active_mm)
  20.129 -			clear_LDT();
  20.130 -		make_pages_writable(mm->context.ldt, 
  20.131 -                                    (mm->context.size * LDT_ENTRY_SIZE) /
  20.132 -                                    PAGE_SIZE);
  20.133 -		flush_page_update_queue();
  20.134 -		if (mm->context.size*LDT_ENTRY_SIZE > PAGE_SIZE)
  20.135 -			vfree(mm->context.ldt);
  20.136 -		else
  20.137 -			kfree(mm->context.ldt);
  20.138 -		mm->context.size = 0;
  20.139 -	}
  20.140 -}
  20.141 -
  20.142 -static int read_ldt(void __user * ptr, unsigned long bytecount)
  20.143 -{
  20.144 -	int err;
  20.145 -	unsigned long size;
  20.146 -	struct mm_struct * mm = current->mm;
  20.147 -
  20.148 -	if (!mm->context.size)
  20.149 -		return 0;
  20.150 -	if (bytecount > LDT_ENTRY_SIZE*LDT_ENTRIES)
  20.151 -		bytecount = LDT_ENTRY_SIZE*LDT_ENTRIES;
  20.152 -
  20.153 -	down(&mm->context.sem);
  20.154 -	size = mm->context.size*LDT_ENTRY_SIZE;
  20.155 -	if (size > bytecount)
  20.156 -		size = bytecount;
  20.157 -
  20.158 -	err = 0;
  20.159 -	if (copy_to_user(ptr, mm->context.ldt, size))
  20.160 -		err = -EFAULT;
  20.161 -	up(&mm->context.sem);
  20.162 -	if (err < 0)
  20.163 -		return err;
  20.164 -	if (size != bytecount) {
  20.165 -		/* zero-fill the rest */
  20.166 -		clear_user(ptr+size, bytecount-size);
  20.167 -	}
  20.168 -	return bytecount;
  20.169 -}
  20.170 -
  20.171 -static int read_default_ldt(void __user * ptr, unsigned long bytecount)
  20.172 -{
  20.173 -	int err;
  20.174 -	unsigned long size;
  20.175 -	void *address;
  20.176 -
  20.177 -	err = 0;
  20.178 -	address = &default_ldt[0];
  20.179 -	size = 5*sizeof(struct desc_struct);
  20.180 -	if (size > bytecount)
  20.181 -		size = bytecount;
  20.182 -
  20.183 -	err = size;
  20.184 -	if (copy_to_user(ptr, address, size))
  20.185 -		err = -EFAULT;
  20.186 -
  20.187 -	return err;
  20.188 -}
  20.189 -
  20.190 -static int write_ldt(void __user * ptr, unsigned long bytecount, int oldmode)
  20.191 -{
  20.192 -	struct mm_struct * mm = current->mm;
  20.193 -	__u32 entry_1, entry_2, *lp;
  20.194 -	unsigned long phys_lp;
  20.195 -	int error;
  20.196 -	struct user_desc ldt_info;
  20.197 -
  20.198 -	error = -EINVAL;
  20.199 -	if (bytecount != sizeof(ldt_info))
  20.200 -		goto out;
  20.201 -	error = -EFAULT; 	
  20.202 -	if (copy_from_user(&ldt_info, ptr, sizeof(ldt_info)))
  20.203 -		goto out;
  20.204 -
  20.205 -	error = -EINVAL;
  20.206 -	if (ldt_info.entry_number >= LDT_ENTRIES)
  20.207 -		goto out;
  20.208 -	if (ldt_info.contents == 3) {
  20.209 -		if (oldmode)
  20.210 -			goto out;
  20.211 -		if (ldt_info.seg_not_present == 0)
  20.212 -			goto out;
  20.213 -	}
  20.214 -
  20.215 -	down(&mm->context.sem);
  20.216 -	if (ldt_info.entry_number >= mm->context.size) {
  20.217 -		error = alloc_ldt(&current->mm->context, ldt_info.entry_number+1, 1);
  20.218 -		if (error < 0)
  20.219 -			goto out_unlock;
  20.220 -	}
  20.221 -
  20.222 -	lp = (__u32 *) ((ldt_info.entry_number << 3) + (char *) mm->context.ldt);
  20.223 -	phys_lp = arbitrary_virt_to_phys(lp);
  20.224 -
  20.225 -   	/* Allow LDTs to be cleared by the user. */
  20.226 -   	if (ldt_info.base_addr == 0 && ldt_info.limit == 0) {
  20.227 -		if (oldmode || LDT_empty(&ldt_info)) {
  20.228 -			entry_1 = 0;
  20.229 -			entry_2 = 0;
  20.230 -			goto install;
  20.231 -		}
  20.232 -	}
  20.233 -
  20.234 -	entry_1 = LDT_entry_a(&ldt_info);
  20.235 -	entry_2 = LDT_entry_b(&ldt_info);
  20.236 -	if (oldmode)
  20.237 -		entry_2 &= ~(1 << 20);
  20.238 -
  20.239 -	/* Install the new entry ...  */
  20.240 -install:
  20.241 -	error = HYPERVISOR_update_descriptor(phys_lp, entry_1, entry_2);
  20.242 -
  20.243 -out_unlock:
  20.244 -	up(&mm->context.sem);
  20.245 -out:
  20.246 -	return error;
  20.247 -}
  20.248 -
  20.249 -asmlinkage int sys_modify_ldt(int func, void __user *ptr, unsigned long bytecount)
  20.250 -{
  20.251 -	int ret = -ENOSYS;
  20.252 -
  20.253 -	switch (func) {
  20.254 -	case 0:
  20.255 -		ret = read_ldt(ptr, bytecount);
  20.256 -		break;
  20.257 -	case 1:
  20.258 -		ret = write_ldt(ptr, bytecount, 1);
  20.259 -		break;
  20.260 -	case 2:
  20.261 -		ret = read_default_ldt(ptr, bytecount);
  20.262 -		break;
  20.263 -	case 0x11:
  20.264 -		ret = write_ldt(ptr, bytecount, 0);
  20.265 -		break;
  20.266 -	}
  20.267 -	return ret;
  20.268 -}
    21.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/pci-dma.c	Mon Oct 25 12:45:34 2004 +0000
    21.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.3 @@ -1,106 +0,0 @@
    21.4 -/*
    21.5 - * Dynamic DMA mapping support.
    21.6 - *
    21.7 - * On i386 there is no hardware dynamic DMA address translation,
    21.8 - * so consistent alloc/free are merely page allocation/freeing.
    21.9 - * The rest of the dynamic DMA mapping interface is implemented
   21.10 - * in asm/pci.h.
   21.11 - */
   21.12 -
   21.13 -#include <linux/types.h>
   21.14 -#include <linux/mm.h>
   21.15 -#include <linux/string.h>
   21.16 -#include <linux/pci.h>
   21.17 -#include <linux/version.h>
   21.18 -#include <asm/io.h>
   21.19 -
   21.20 -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
   21.21 -#define pte_offset_kernel pte_offset
   21.22 -void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
   21.23 -			   dma_addr_t *dma_handle)
   21.24 -#else
   21.25 -void *dma_alloc_coherent(struct device *dev, size_t size,
   21.26 -			   dma_addr_t *dma_handle, int gfp)
   21.27 -#endif
   21.28 -{
   21.29 -	void *ret;
   21.30 -	unsigned int order = get_order(size);
   21.31 -	unsigned long vstart;
   21.32 -
   21.33 -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
   21.34 -	int gfp = GFP_ATOMIC;
   21.35 -
   21.36 -	if (hwdev == NULL || ((u32)hwdev->dma_mask < 0xffffffff))
   21.37 -		gfp |= GFP_DMA;
   21.38 -#else
   21.39 -	/* ignore region specifiers */
   21.40 -	gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);
   21.41 -
   21.42 -	if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff))
   21.43 -		gfp |= GFP_DMA;
   21.44 -#endif
   21.45 -
   21.46 -	vstart = __get_free_pages(gfp, order);
   21.47 -	ret = (void *)vstart;
   21.48 -	if (ret == NULL)
   21.49 -		return ret;
   21.50 -
   21.51 -	/*
   21.52 -	 * Ensure multi-page extents are contiguous in machine memory.
   21.53 -	 * This code could be cleaned up some, and the number of
   21.54 -	 * hypercalls reduced.
   21.55 -	 */
   21.56 -	if (size > PAGE_SIZE) {
   21.57 -		pgd_t         *pgd; 
   21.58 -		pmd_t         *pmd;
   21.59 -		pte_t         *pte;
   21.60 -		unsigned long  pfn, i;
   21.61 -		scrub_pages(vstart, 1 << order);
   21.62 -		/* 1. Zap current PTEs, giving away the underlying pages. */
   21.63 -		for (i = 0; i < (1<<order); i++) {
   21.64 -			pgd = pgd_offset_k(   (vstart + (i*PAGE_SIZE)));
   21.65 -			pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE)));
   21.66 -			pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
   21.67 -			pfn = pte->pte_low >> PAGE_SHIFT;
   21.68 -			queue_l1_entry_update(pte, 0);
   21.69 -			phys_to_machine_mapping[(__pa(ret)>>PAGE_SHIFT)+i] =
   21.70 -				INVALID_P2M_ENTRY;
   21.71 -			flush_page_update_queue();
   21.72 -			if (HYPERVISOR_dom_mem_op(MEMOP_decrease_reservation, 
   21.73 -						  &pfn, 1, 0) != 1) BUG();
   21.74 -		}
   21.75 -		/* 2. Get a new contiguous memory extent. */
   21.76 -		if (HYPERVISOR_dom_mem_op(MEMOP_increase_reservation,
   21.77 -					  &pfn, 1, order) != 1) BUG();
   21.78 -		/* 3. Map the new extent in place of old pages. */
   21.79 -		for (i = 0; i < (1<<order); i++) {
   21.80 -			pgd = pgd_offset_k(   (vstart + (i*PAGE_SIZE)));
   21.81 -			pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE)));
   21.82 -			pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
   21.83 -			queue_l1_entry_update(
   21.84 -				pte, ((pfn+i)<<PAGE_SHIFT)|__PAGE_KERNEL);
   21.85 -			queue_machphys_update(
   21.86 -				pfn+i, (__pa(ret)>>PAGE_SHIFT)+i);
   21.87 -			phys_to_machine_mapping[(__pa(ret)>>PAGE_SHIFT)+i] =
   21.88 -				pfn+i;
   21.89 -		}
   21.90 -		/* Flush updates through and flush the TLB. */
   21.91 -		xen_tlb_flush();
   21.92 -	}
   21.93 -
   21.94 -	memset(ret, 0, size);
   21.95 -	*dma_handle = virt_to_bus(ret);
   21.96 -
   21.97 -	return ret;
   21.98 -}
   21.99 -
  21.100 -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
  21.101 -void pci_free_consistent(struct pci_dev *hwdev, size_t size,
  21.102 -			 void *vaddr, dma_addr_t dma_handle)
  21.103 -#else
  21.104 -void dma_free_coherent(struct device *dev, size_t size,
  21.105 -			 void *vaddr, dma_addr_t dma_handle)
  21.106 -#endif
  21.107 -{
  21.108 -	free_pages((unsigned long)vaddr, get_order(size));
  21.109 -}
    22.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/process.c	Mon Oct 25 12:45:34 2004 +0000
    22.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.3 @@ -1,827 +0,0 @@
    22.4 -/*
    22.5 - *  linux/arch/i386/kernel/process.c
    22.6 - *
    22.7 - *  Copyright (C) 1995  Linus Torvalds
    22.8 - *
    22.9 - *  Pentium III FXSR, SSE support
   22.10 - *	Gareth Hughes <gareth@valinux.com>, May 2000
   22.11 - */
   22.12 -
   22.13 -/*
   22.14 - * This file handles the architecture-dependent parts of process handling..
   22.15 - */
   22.16 -
   22.17 -#include <stdarg.h>
   22.18 -
   22.19 -#include <linux/errno.h>
   22.20 -#include <linux/sched.h>
   22.21 -#include <linux/fs.h>
   22.22 -#include <linux/kernel.h>
   22.23 -#include <linux/mm.h>
   22.24 -#include <linux/elfcore.h>
   22.25 -#include <linux/smp.h>
   22.26 -#include <linux/smp_lock.h>
   22.27 -#include <linux/stddef.h>
   22.28 -#include <linux/slab.h>
   22.29 -#include <linux/vmalloc.h>
   22.30 -#include <linux/user.h>
   22.31 -#include <linux/a.out.h>
   22.32 -#include <linux/interrupt.h>
   22.33 -#include <linux/config.h>
   22.34 -#include <linux/version.h>
   22.35 -#include <linux/delay.h>
   22.36 -#include <linux/reboot.h>
   22.37 -#include <linux/init.h>
   22.38 -#include <linux/mc146818rtc.h>
   22.39 -#include <linux/module.h>
   22.40 -#include <linux/kallsyms.h>
   22.41 -#include <linux/ptrace.h>
   22.42 -
   22.43 -#include <asm/uaccess.h>
   22.44 -#include <asm/pgtable.h>
   22.45 -#include <asm/system.h>
   22.46 -#include <asm/io.h>
   22.47 -#include <asm/ldt.h>
   22.48 -#include <asm/processor.h>
   22.49 -#include <asm/i387.h>
   22.50 -#include <asm/irq.h>
   22.51 -#include <asm/desc.h>
   22.52 -#include <asm-xen/multicall.h>
   22.53 -#include <asm/hypervisor-ifs/dom0_ops.h>
   22.54 -#ifdef CONFIG_MATH_EMULATION
   22.55 -#include <asm/math_emu.h>
   22.56 -#endif
   22.57 -
   22.58 -#include <linux/irq.h>
   22.59 -#include <linux/err.h>
   22.60 -
   22.61 -asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
   22.62 -
   22.63 -int hlt_counter;
   22.64 -
   22.65 -/*
   22.66 - * Return saved PC of a blocked thread.
   22.67 - */
   22.68 -unsigned long thread_saved_pc(struct task_struct *tsk)
   22.69 -{
   22.70 -	return ((unsigned long *)tsk->thread.esp)[3];
   22.71 -}
   22.72 -
   22.73 -/*
   22.74 - * Powermanagement idle function, if any..
   22.75 - */
   22.76 -void (*pm_idle)(void);
   22.77 -
   22.78 -void disable_hlt(void)
   22.79 -{
   22.80 -	hlt_counter++;
   22.81 -}
   22.82 -
   22.83 -EXPORT_SYMBOL(disable_hlt);
   22.84 -
   22.85 -void enable_hlt(void)
   22.86 -{
   22.87 -	hlt_counter--;
   22.88 -}
   22.89 -
   22.90 -EXPORT_SYMBOL(enable_hlt);
   22.91 -
   22.92 -/*
   22.93 - * We use this if we don't have any better
   22.94 - * idle routine..
   22.95 - */
   22.96 -void default_idle(void)
   22.97 -{
   22.98 -	if (!hlt_counter && current_cpu_data.hlt_works_ok) {
   22.99 -		local_irq_disable();
  22.100 -		if (!need_resched())
  22.101 -			safe_halt();
  22.102 -		else
  22.103 -			local_irq_enable();
  22.104 -	}
  22.105 -}
  22.106 -
  22.107 -/*
  22.108 - * On SMP it's slightly faster (but much more power-consuming!)
  22.109 - * to poll the ->work.need_resched flag instead of waiting for the
  22.110 - * cross-CPU IPI to arrive. Use this option with caution.
  22.111 - */
  22.112 -static void poll_idle (void)
  22.113 -{
  22.114 -	int oldval;
  22.115 -
  22.116 -	local_irq_enable();
  22.117 -
  22.118 -	/*
  22.119 -	 * Deal with another CPU just having chosen a thread to
  22.120 -	 * run here:
  22.121 -	 */
  22.122 -	oldval = test_and_clear_thread_flag(TIF_NEED_RESCHED);
  22.123 -
  22.124 -	if (!oldval) {
  22.125 -		set_thread_flag(TIF_POLLING_NRFLAG);
  22.126 -		asm volatile(
  22.127 -			"2:"
  22.128 -			"testl %0, %1;"
  22.129 -			"rep; nop;"
  22.130 -			"je 2b;"
  22.131 -			: : "i"(_TIF_NEED_RESCHED), "m" (current_thread_info()->flags));
  22.132 -
  22.133 -		clear_thread_flag(TIF_POLLING_NRFLAG);
  22.134 -	} else {
  22.135 -		set_need_resched();
  22.136 -	}
  22.137 -}
  22.138 -
  22.139 -/*
  22.140 - * The idle thread. There's no useful work to be
  22.141 - * done, so just try to conserve power and have a
  22.142 - * low exit latency (ie sit in a loop waiting for
  22.143 - * somebody to say that they'd like to reschedule)
  22.144 - */
  22.145 -void cpu_idle (void)
  22.146 -{
  22.147 -	/* endless idle loop with no priority at all */
  22.148 -	while (1) {
  22.149 -		while (!need_resched()) {
  22.150 -			void (*idle)(void) = pm_idle;
  22.151 -
  22.152 -			if (!idle)
  22.153 -				idle = default_idle;
  22.154 -
  22.155 -			irq_stat[smp_processor_id()].idle_timestamp = jiffies;
  22.156 -			idle();
  22.157 -		}
  22.158 -		schedule();
  22.159 -	}
  22.160 -}
  22.161 -
  22.162 -/*
  22.163 - * This uses new MONITOR/MWAIT instructions on P4 processors with PNI,
  22.164 - * which can obviate IPI to trigger checking of need_resched.
  22.165 - * We execute MONITOR against need_resched and enter optimized wait state
  22.166 - * through MWAIT. Whenever someone changes need_resched, we would be woken
  22.167 - * up from MWAIT (without an IPI).
  22.168 - */
  22.169 -static void mwait_idle(void)
  22.170 -{
  22.171 -	local_irq_enable();
  22.172 -
  22.173 -	if (!need_resched()) {
  22.174 -		set_thread_flag(TIF_POLLING_NRFLAG);
  22.175 -		do {
  22.176 -			__monitor((void *)&current_thread_info()->flags, 0, 0);
  22.177 -			if (need_resched())
  22.178 -				break;
  22.179 -			__mwait(0, 0);
  22.180 -		} while (!need_resched());
  22.181 -		clear_thread_flag(TIF_POLLING_NRFLAG);
  22.182 -	}
  22.183 -}
  22.184 -
  22.185 -void __init select_idle_routine(const struct cpuinfo_x86 *c)
  22.186 -{
  22.187 -	if (cpu_has(c, X86_FEATURE_MWAIT)) {
  22.188 -		printk("monitor/mwait feature present.\n");
  22.189 -		/*
  22.190 -		 * Skip, if setup has overridden idle.
  22.191 -		 * Also, take care of system with asymmetric CPUs.
  22.192 -		 * Use, mwait_idle only if all cpus support it.
  22.193 -		 * If not, we fallback to default_idle()
  22.194 -		 */
  22.195 -		if (!pm_idle) {
  22.196 -			printk("using mwait in idle threads.\n");
  22.197 -			pm_idle = mwait_idle;
  22.198 -		}
  22.199 -		return;
  22.200 -	}
  22.201 -	if (!pm_idle)
  22.202 -		pm_idle = default_idle;
  22.203 -	return;
  22.204 -}
  22.205 -
  22.206 -static int __init idle_setup (char *str)
  22.207 -{
  22.208 -	if (!strncmp(str, "poll", 4)) {
  22.209 -		printk("using polling idle threads.\n");
  22.210 -		pm_idle = poll_idle;
  22.211 -#ifdef CONFIG_X86_SMP
  22.212 -		if (smp_num_siblings > 1)
  22.213 -			printk("WARNING: polling idle and HT enabled, performance may degrade.\n");
  22.214 -#endif
  22.215 -	} else if (!strncmp(str, "halt", 4)) {
  22.216 -		printk("using halt in idle threads.\n");
  22.217 -		pm_idle = default_idle;
  22.218 -	}
  22.219 -
  22.220 -	return 1;
  22.221 -}
  22.222 -
  22.223 -__setup("idle=", idle_setup);
  22.224 -
  22.225 -void show_regs(struct pt_regs * regs)
  22.226 -{
  22.227 -	printk("\n");
  22.228 -	printk("Pid: %d, comm: %20s\n", current->pid, current->comm);
  22.229 -	printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, smp_processor_id());
  22.230 -	print_symbol("EIP is at %s\n", regs->eip);
  22.231 -
  22.232 -	if (regs->xcs & 2)
  22.233 -		printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
  22.234 -	printk(" EFLAGS: %08lx    %s  (%s)\n",regs->eflags, print_tainted(),UTS_RELEASE);
  22.235 -	printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
  22.236 -		regs->eax,regs->ebx,regs->ecx,regs->edx);
  22.237 -	printk("ESI: %08lx EDI: %08lx EBP: %08lx",
  22.238 -		regs->esi, regs->edi, regs->ebp);
  22.239 -	printk(" DS: %04x ES: %04x\n",
  22.240 -		0xffff & regs->xds,0xffff & regs->xes);
  22.241 -
  22.242 -	show_trace(NULL, &regs->esp);
  22.243 -}
  22.244 -
  22.245 -/*
  22.246 - * This gets run with %ebx containing the
  22.247 - * function to call, and %edx containing
  22.248 - * the "args".
  22.249 - */
  22.250 -extern void kernel_thread_helper(void);
  22.251 -__asm__(".section .text\n"
  22.252 -	".align 4\n"
  22.253 -	"kernel_thread_helper:\n\t"
  22.254 -	"movl %edx,%eax\n\t"
  22.255 -	"pushl %edx\n\t"
  22.256 -	"call *%ebx\n\t"
  22.257 -	"pushl %eax\n\t"
  22.258 -	"call do_exit\n"
  22.259 -	".previous");
  22.260 -
  22.261 -/*
  22.262 - * Create a kernel thread
  22.263 - */
  22.264 -int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
  22.265 -{
  22.266 -	struct pt_regs regs;
  22.267 -
  22.268 -	memset(&regs, 0, sizeof(regs));
  22.269 -
  22.270 -	regs.ebx = (unsigned long) fn;
  22.271 -	regs.edx = (unsigned long) arg;
  22.272 -
  22.273 -	regs.xds = __USER_DS;
  22.274 -	regs.xes = __USER_DS;
  22.275 -	regs.orig_eax = -1;
  22.276 -	regs.eip = (unsigned long) kernel_thread_helper;
  22.277 -	regs.xcs = __KERNEL_CS;
  22.278 -	regs.eflags = X86_EFLAGS_IF | X86_EFLAGS_SF | X86_EFLAGS_PF | 0x2;
  22.279 -
  22.280 -	/* Ok, create the new process.. */
  22.281 -	return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, &regs, 0, NULL, NULL);
  22.282 -}
  22.283 -
  22.284 -/*
  22.285 - * Free current thread data structures etc..
  22.286 - */
  22.287 -void exit_thread(void)
  22.288 -{
  22.289 -	struct task_struct *tsk = current;
  22.290 -
  22.291 -	/* The process may have allocated an io port bitmap... nuke it. */
  22.292 -	if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) {
  22.293 -		int cpu = get_cpu();
  22.294 -		struct tss_struct *tss = init_tss + cpu;
  22.295 -		kfree(tsk->thread.io_bitmap_ptr);
  22.296 -		tsk->thread.io_bitmap_ptr = NULL;
  22.297 -		tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET;
  22.298 -		put_cpu();
  22.299 -	}
  22.300 -}
  22.301 -
  22.302 -void flush_thread(void)
  22.303 -{
  22.304 -	struct task_struct *tsk = current;
  22.305 -
  22.306 -	memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8);
  22.307 -	memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));	
  22.308 -	/*
  22.309 -	 * Forget coprocessor state..
  22.310 -	 */
  22.311 -	clear_fpu(tsk);
  22.312 -	tsk->used_math = 0;
  22.313 -}
  22.314 -
  22.315 -void release_thread(struct task_struct *dead_task)
  22.316 -{
  22.317 -	if (dead_task->mm) {
  22.318 -		// temporary debugging check
  22.319 -		if (dead_task->mm->context.size) {
  22.320 -			printk("WARNING: dead process %8s still has LDT? <%p/%d>\n",
  22.321 -					dead_task->comm,
  22.322 -					dead_task->mm->context.ldt,
  22.323 -					dead_task->mm->context.size);
  22.324 -			BUG();
  22.325 -		}
  22.326 -	}
  22.327 -
  22.328 -	release_x86_irqs(dead_task);
  22.329 -}
  22.330 -
  22.331 -/*
  22.332 - * This gets called before we allocate a new thread and copy
  22.333 - * the current task into it.
  22.334 - */
  22.335 -void prepare_to_copy(struct task_struct *tsk)
  22.336 -{
  22.337 -	unlazy_fpu(tsk);
  22.338 -}
  22.339 -
  22.340 -int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
  22.341 -	unsigned long unused,
  22.342 -	struct task_struct * p, struct pt_regs * regs)
  22.343 -{
  22.344 -	struct pt_regs * childregs;
  22.345 -	struct task_struct *tsk;
  22.346 -	int err;
  22.347 -	unsigned long eflags;
  22.348 -
  22.349 -	childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p->thread_info)) - 1;
  22.350 -	*childregs = *regs;
  22.351 -	childregs->eax = 0;
  22.352 -	childregs->esp = esp;
  22.353 -	p->set_child_tid = p->clear_child_tid = NULL;
  22.354 -
  22.355 -	p->thread.esp = (unsigned long) childregs;
  22.356 -	p->thread.esp0 = (unsigned long) (childregs+1);
  22.357 -
  22.358 -	p->thread.eip = (unsigned long) ret_from_fork;
  22.359 -
  22.360 -	savesegment(fs,p->thread.fs);
  22.361 -	savesegment(gs,p->thread.gs);
  22.362 -
  22.363 -	tsk = current;
  22.364 -	if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) {
  22.365 -		p->thread.io_bitmap_ptr = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL);
  22.366 -		if (!p->thread.io_bitmap_ptr)
  22.367 -			return -ENOMEM;
  22.368 -		memcpy(p->thread.io_bitmap_ptr, tsk->thread.io_bitmap_ptr,
  22.369 -			IO_BITMAP_BYTES);
  22.370 -	}
  22.371 -
  22.372 -	/*
  22.373 -	 * Set a new TLS for the child thread?
  22.374 -	 */
  22.375 -	if (clone_flags & CLONE_SETTLS) {
  22.376 -		struct desc_struct *desc;
  22.377 -		struct user_desc info;
  22.378 -		int idx;
  22.379 -
  22.380 -		err = -EFAULT;
  22.381 -		if (copy_from_user(&info, (void __user *)childregs->esi, sizeof(info)))
  22.382 -			goto out;
  22.383 -		err = -EINVAL;
  22.384 -		if (LDT_empty(&info))
  22.385 -			goto out;
  22.386 -
  22.387 -		idx = info.entry_number;
  22.388 -		if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
  22.389 -			goto out;
  22.390 -
  22.391 -		desc = p->thread.tls_array + idx - GDT_ENTRY_TLS_MIN;
  22.392 -		desc->a = LDT_entry_a(&info);
  22.393 -		desc->b = LDT_entry_b(&info);
  22.394 -	}
  22.395 -
  22.396 -
  22.397 -	__asm__ __volatile__ ( "pushfl; popl %0" : "=r" (eflags) : );
  22.398 -	p->thread.io_pl = (eflags >> 12) & 3;
  22.399 -
  22.400 -	err = 0;
  22.401 - out:
  22.402 -	if (err && p->thread.io_bitmap_ptr)
  22.403 -		kfree(p->thread.io_bitmap_ptr);
  22.404 -	return err;
  22.405 -}
  22.406 -
  22.407 -/*
  22.408 - * fill in the user structure for a core dump..
  22.409 - */
  22.410 -void dump_thread(struct pt_regs * regs, struct user * dump)
  22.411 -{
  22.412 -	int i;
  22.413 -
  22.414 -/* changed the size calculations - should hopefully work better. lbt */
  22.415 -	dump->magic = CMAGIC;
  22.416 -	dump->start_code = 0;
  22.417 -	dump->start_stack = regs->esp & ~(PAGE_SIZE - 1);
  22.418 -	dump->u_tsize = ((unsigned long) current->mm->end_code) >> PAGE_SHIFT;
  22.419 -	dump->u_dsize = ((unsigned long) (current->mm->brk + (PAGE_SIZE-1))) >> PAGE_SHIFT;
  22.420 -	dump->u_dsize -= dump->u_tsize;
  22.421 -	dump->u_ssize = 0;
  22.422 -	for (i = 0; i < 8; i++)
  22.423 -		dump->u_debugreg[i] = current->thread.debugreg[i];  
  22.424 -
  22.425 -	if (dump->start_stack < TASK_SIZE)
  22.426 -		dump->u_ssize = ((unsigned long) (TASK_SIZE - dump->start_stack)) >> PAGE_SHIFT;
  22.427 -
  22.428 -	dump->regs.ebx = regs->ebx;
  22.429 -	dump->regs.ecx = regs->ecx;
  22.430 -	dump->regs.edx = regs->edx;
  22.431 -	dump->regs.esi = regs->esi;
  22.432 -	dump->regs.edi = regs->edi;
  22.433 -	dump->regs.ebp = regs->ebp;
  22.434 -	dump->regs.eax = regs->eax;
  22.435 -	dump->regs.ds = regs->xds;
  22.436 -	dump->regs.es = regs->xes;
  22.437 -	savesegment(fs,dump->regs.fs);
  22.438 -	savesegment(gs,dump->regs.gs);
  22.439 -	dump->regs.orig_eax = regs->orig_eax;
  22.440 -	dump->regs.eip = regs->eip;
  22.441 -	dump->regs.cs = regs->xcs;
  22.442 -	dump->regs.eflags = regs->eflags;
  22.443 -	dump->regs.esp = regs->esp;
  22.444 -	dump->regs.ss = regs->xss;
  22.445 -
  22.446 -	dump->u_fpvalid = dump_fpu (regs, &dump->i387);
  22.447 -}
  22.448 -
  22.449 -/* 
  22.450 - * Capture the user space registers if the task is not running (in user space)
  22.451 - */
  22.452 -int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
  22.453 -{
  22.454 -	struct pt_regs ptregs;
  22.455 -	
  22.456 -	ptregs = *(struct pt_regs *)
  22.457 -		((unsigned long)tsk->thread_info+THREAD_SIZE - sizeof(ptregs));
  22.458 -	ptregs.xcs &= 0xffff;
  22.459 -	ptregs.xds &= 0xffff;
  22.460 -	ptregs.xes &= 0xffff;
  22.461 -	ptregs.xss &= 0xffff;
  22.462 -
  22.463 -	elf_core_copy_regs(regs, &ptregs);
  22.464 -
  22.465 -	return 1;
  22.466 -}
  22.467 -
  22.468 -/*
  22.469 - * This special macro can be used to load a debugging register
  22.470 - */
  22.471 -#define loaddebug(thread,register) \
  22.472 -		HYPERVISOR_set_debugreg((register),	\
  22.473 -			(thread->debugreg[register]))
  22.474 -
  22.475 -/*
  22.476 - *	switch_to(x,yn) should switch tasks from x to y.
  22.477 - *
  22.478 - * We fsave/fwait so that an exception goes off at the right time
  22.479 - * (as a call from the fsave or fwait in effect) rather than to
  22.480 - * the wrong process. Lazy FP saving no longer makes any sense
  22.481 - * with modern CPU's, and this simplifies a lot of things (SMP
  22.482 - * and UP become the same).
  22.483 - *
  22.484 - * NOTE! We used to use the x86 hardware context switching. The
  22.485 - * reason for not using it any more becomes apparent when you
  22.486 - * try to recover gracefully from saved state that is no longer
  22.487 - * valid (stale segment register values in particular). With the
  22.488 - * hardware task-switch, there is no way to fix up bad state in
  22.489 - * a reasonable manner.
  22.490 - *
  22.491 - * The fact that Intel documents the hardware task-switching to
  22.492 - * be slow is a fairly red herring - this code is not noticeably
  22.493 - * faster. However, there _is_ some room for improvement here,
  22.494 - * so the performance issues may eventually be a valid point.
  22.495 - * More important, however, is the fact that this allows us much
  22.496 - * more flexibility.
  22.497 - *
  22.498 - * The return value (in %eax) will be the "prev" task after
  22.499 - * the task-switch, and shows up in ret_from_fork in entry.S,
  22.500 - * for example.
  22.501 - */
  22.502 -struct task_struct fastcall * __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
  22.503 -{
  22.504 -	struct thread_struct *prev = &prev_p->thread,
  22.505 -				 *next = &next_p->thread;
  22.506 -	int cpu = smp_processor_id();
  22.507 -	struct tss_struct *tss = init_tss + cpu;
  22.508 -	dom0_op_t op;
  22.509 -
  22.510 -        /* NB. No need to disable interrupts as already done in sched.c */
  22.511 -        /* __cli(); */
  22.512 -
  22.513 -	/*
  22.514 -	 * Save away %fs and %gs. No need to save %es and %ds, as
  22.515 -	 * those are always kernel segments while inside the kernel.
  22.516 -	 */
  22.517 -	asm volatile("movl %%fs,%0":"=m" (*(int *)&prev->fs));
  22.518 -	asm volatile("movl %%gs,%0":"=m" (*(int *)&prev->gs));
  22.519 -
  22.520 -	/*
  22.521 -	 * We clobber FS and GS here so that we avoid a GPF when
  22.522 -	 * restoring previous task's FS/GS values in Xen when the LDT
  22.523 -	 * is switched. If we don't do this then we can end up
  22.524 -	 * erroneously re-flushing the page-update queue when we
  22.525 -	 * 'execute_multicall_list'.
  22.526 -	 */
  22.527 -	__asm__ __volatile__ ( 
  22.528 -		"xorl %%eax,%%eax; movl %%eax,%%fs; movl %%eax,%%gs" : : :
  22.529 -		"eax" );
  22.530 -
  22.531 -	MULTICALL_flush_page_update_queue();
  22.532 -
  22.533 -	/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
  22.534 -
  22.535 -	/*
  22.536 -	 * This is basically '__unlazy_fpu', except that we queue a
  22.537 -	 * multicall to indicate FPU task switch, rather than
  22.538 -	 * synchronously trapping to Xen.
  22.539 -	 */
  22.540 -	if (prev_p->thread_info->status & TS_USEDFPU) {
  22.541 -		save_init_fpu(prev_p);
  22.542 -		queue_multicall0(__HYPERVISOR_fpu_taskswitch);
  22.543 -	}
  22.544 -
  22.545 -	/*
  22.546 -	 * Reload esp0, LDT and the page table pointer:
  22.547 -	 * This is load_esp0(tss, next) with a multicall.
  22.548 -	 */
  22.549 -	tss->esp0 = next->esp0;
  22.550 -	/* This can only happen when SEP is enabled, no need to test
  22.551 -	 * "SEP"arately */
  22.552 -	if (unlikely(tss->ss1 != next->sysenter_cs)) {
  22.553 -		tss->ss1 = next->sysenter_cs;
  22.554 -		wrmsr(MSR_IA32_SYSENTER_CS, next->sysenter_cs, 0);
  22.555 -	}
  22.556 -	queue_multicall2(__HYPERVISOR_stack_switch, tss->ss0, tss->esp0);
  22.557 -
  22.558 -	/*
  22.559 -	 * Load the per-thread Thread-Local Storage descriptor.
  22.560 -	 * This is load_TLS(next, cpu) with multicalls.
  22.561 -	 */
  22.562 -#define C(i) do {							    \
  22.563 -	if (unlikely(next->tls_array[i].a != prev->tls_array[i].a ||	    \
  22.564 -		     next->tls_array[i].b != prev->tls_array[i].b))	    \
  22.565 -		queue_multicall3(__HYPERVISOR_update_descriptor,	    \
  22.566 -				 virt_to_machine(&get_cpu_gdt_table(cpu)    \
  22.567 -						 [GDT_ENTRY_TLS_MIN + i]),  \
  22.568 -				 ((u32 *)&next->tls_array[i])[0],	    \
  22.569 -				 ((u32 *)&next->tls_array[i])[1]);	    \
  22.570 -} while (0)
  22.571 -	C(0); C(1); C(2);
  22.572 -#undef C
  22.573 -
  22.574 -	if (xen_start_info.flags & SIF_PRIVILEGED) {
  22.575 -		op.cmd           = DOM0_IOPL;
  22.576 -		op.u.iopl.domain = DOMID_SELF;
  22.577 -		op.u.iopl.iopl   = next->io_pl;
  22.578 -		queue_multicall1(__HYPERVISOR_dom0_op, (unsigned long)&op);
  22.579 -	}
  22.580 -
  22.581 -	/* EXECUTE ALL TASK SWITCH XEN SYSCALLS AT THIS POINT. */
  22.582 -	execute_multicall_list();
  22.583 -        /* __sti(); */
  22.584 -
  22.585 -	/*
  22.586 -	 * Restore %fs and %gs if needed.
  22.587 -	 */
  22.588 -	if (unlikely(prev->fs | prev->gs | next->fs | next->gs)) {
  22.589 -		loadsegment(fs, next->fs);
  22.590 -		loadsegment(gs, next->gs);
  22.591 -	}
  22.592 -
  22.593 -	/*
  22.594 -	 * Now maybe reload the debug registers
  22.595 -	 */
  22.596 -	if (unlikely(next->debugreg[7])) {
  22.597 -		loaddebug(next, 0);
  22.598 -		loaddebug(next, 1);
  22.599 -		loaddebug(next, 2);
  22.600 -		loaddebug(next, 3);
  22.601 -		/* no 4 and 5 */
  22.602 -		loaddebug(next, 6);
  22.603 -		loaddebug(next, 7);
  22.604 -	}
  22.605 -
  22.606 -	if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr)) {
  22.607 -		if (next->io_bitmap_ptr) {
  22.608 -			/*
  22.609 -			 * 4 cachelines copy ... not good, but not that
  22.610 -			 * bad either. Anyone got something better?
  22.611 -			 * This only affects processes which use ioperm().
  22.612 -			 * [Putting the TSSs into 4k-tlb mapped regions
  22.613 -			 * and playing VM tricks to switch the IO bitmap
  22.614 -			 * is not really acceptable.]
  22.615 -			 */
  22.616 -			memcpy(tss->io_bitmap, next->io_bitmap_ptr,
  22.617 -				IO_BITMAP_BYTES);
  22.618 -			tss->io_bitmap_base = IO_BITMAP_OFFSET;
  22.619 -		} else
  22.620 -			/*
  22.621 -			 * a bitmap offset pointing outside of the TSS limit
  22.622 -			 * causes a nicely controllable SIGSEGV if a process
  22.623 -			 * tries to use a port IO instruction. The first
  22.624 -			 * sys_ioperm() call sets up the bitmap properly.
  22.625 -			 */
  22.626 -			tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET;
  22.627 -	}
  22.628 -	return prev_p;
  22.629 -}
  22.630 -
  22.631 -asmlinkage int sys_fork(struct pt_regs regs)
  22.632 -{
  22.633 -	return do_fork(SIGCHLD, regs.esp, &regs, 0, NULL, NULL);
  22.634 -}
  22.635 -
  22.636 -asmlinkage int sys_clone(struct pt_regs regs)
  22.637 -{
  22.638 -	unsigned long clone_flags;
  22.639 -	unsigned long newsp;
  22.640 -	int __user *parent_tidptr, *child_tidptr;
  22.641 -
  22.642 -	clone_flags = regs.ebx;
  22.643 -	newsp = regs.ecx;
  22.644 -	parent_tidptr = (int __user *)regs.edx;
  22.645 -	child_tidptr = (int __user *)regs.edi;
  22.646 -	if (!newsp)
  22.647 -		newsp = regs.esp;
  22.648 -	return do_fork(clone_flags & ~CLONE_IDLETASK, newsp, &regs, 0, parent_tidptr, child_tidptr);
  22.649 -}
  22.650 -
  22.651 -/*
  22.652 - * This is trivial, and on the face of it looks like it
  22.653 - * could equally well be done in user mode.
  22.654 - *
  22.655 - * Not so, for quite unobvious reasons - register pressure.
  22.656 - * In user mode vfork() cannot have a stack frame, and if
  22.657 - * done by calling the "clone()" system call directly, you
  22.658 - * do not have enough call-clobbered registers to hold all
  22.659 - * the information you need.
  22.660 - */
  22.661 -asmlinkage int sys_vfork(struct pt_regs regs)
  22.662 -{
  22.663 -	return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs.esp, &regs, 0, NULL, NULL);
  22.664 -}
  22.665 -
  22.666 -/*
  22.667 - * sys_execve() executes a new program.
  22.668 - */
  22.669 -asmlinkage int sys_execve(struct pt_regs regs)
  22.670 -{
  22.671 -	int error;
  22.672 -	char * filename;
  22.673 -
  22.674 -	filename = getname((char __user *) regs.ebx);
  22.675 -	error = PTR_ERR(filename);
  22.676 -	if (IS_ERR(filename))
  22.677 -		goto out;
  22.678 -	error = do_execve(filename,
  22.679 -			(char __user * __user *) regs.ecx,
  22.680 -			(char __user * __user *) regs.edx,
  22.681 -			&regs);
  22.682 -	if (error == 0) {
  22.683 -		current->ptrace &= ~PT_DTRACE;
  22.684 -		/* Make sure we don't return using sysenter.. */
  22.685 -		set_thread_flag(TIF_IRET);
  22.686 -	}
  22.687 -	putname(filename);
  22.688 -out:
  22.689 -	return error;
  22.690 -}
  22.691 -
  22.692 -#define top_esp                (THREAD_SIZE - sizeof(unsigned long))
  22.693 -#define top_ebp                (THREAD_SIZE - 2*sizeof(unsigned long))
  22.694 -
  22.695 -unsigned long get_wchan(struct task_struct *p)
  22.696 -{
  22.697 -	unsigned long ebp, esp, eip;
  22.698 -	unsigned long stack_page;
  22.699 -	int count = 0;
  22.700 -	if (!p || p == current || p->state == TASK_RUNNING)
  22.701 -		return 0;
  22.702 -	stack_page = (unsigned long)p->thread_info;
  22.703 -	esp = p->thread.esp;
  22.704 -	if (!stack_page || esp < stack_page || esp > top_esp+stack_page)
  22.705 -		return 0;
  22.706 -	/* include/asm-i386/system.h:switch_to() pushes ebp last. */
  22.707 -	ebp = *(unsigned long *) esp;
  22.708 -	do {
  22.709 -		if (ebp < stack_page || ebp > top_ebp+stack_page)
  22.710 -			return 0;
  22.711 -		eip = *(unsigned long *) (ebp+4);
  22.712 -		if (!in_sched_functions(eip))
  22.713 -			return eip;
  22.714 -		ebp = *(unsigned long *) ebp;
  22.715 -	} while (count++ < 16);
  22.716 -	return 0;
  22.717 -}
  22.718 -
  22.719 -/*
  22.720 - * sys_alloc_thread_area: get a yet unused TLS descriptor index.
  22.721 - */
  22.722 -static int get_free_idx(void)
  22.723 -{
  22.724 -	struct thread_struct *t = &current->thread;
  22.725 -	int idx;
  22.726 -
  22.727 -	for (idx = 0; idx < GDT_ENTRY_TLS_ENTRIES; idx++)
  22.728 -		if (desc_empty(t->tls_array + idx))
  22.729 -			return idx + GDT_ENTRY_TLS_MIN;
  22.730 -	return -ESRCH;
  22.731 -}
  22.732 -
  22.733 -/*
  22.734 - * Set a given TLS descriptor:
  22.735 - */
  22.736 -asmlinkage int sys_set_thread_area(struct user_desc __user *u_info)
  22.737 -{
  22.738 -	struct thread_struct *t = &current->thread;
  22.739 -	struct user_desc info;
  22.740 -	struct desc_struct *desc;
  22.741 -	int cpu, idx;
  22.742 -
  22.743 -	if (copy_from_user(&info, u_info, sizeof(info)))
  22.744 -		return -EFAULT;
  22.745 -	idx = info.entry_number;
  22.746 -
  22.747 -	/*
  22.748 -	 * index -1 means the kernel should try to find and
  22.749 -	 * allocate an empty descriptor:
  22.750 -	 */
  22.751 -	if (idx == -1) {
  22.752 -		idx = get_free_idx();
  22.753 -		if (idx < 0)
  22.754 -			return idx;
  22.755 -		if (put_user(idx, &u_info->entry_number))
  22.756 -			return -EFAULT;
  22.757 -	}
  22.758 -
  22.759 -	if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
  22.760 -		return -EINVAL;
  22.761 -
  22.762 -	desc = t->tls_array + idx - GDT_ENTRY_TLS_MIN;
  22.763 -
  22.764 -	/*
  22.765 -	 * We must not get preempted while modifying the TLS.
  22.766 -	 */
  22.767 -	cpu = get_cpu();
  22.768 -
  22.769 -	if (LDT_empty(&info)) {
  22.770 -		desc->a = 0;
  22.771 -		desc->b = 0;
  22.772 -	} else {
  22.773 -		desc->a = LDT_entry_a(&info);
  22.774 -		desc->b = LDT_entry_b(&info);
  22.775 -	}
  22.776 -	load_TLS(t, cpu);
  22.777 -
  22.778 -	put_cpu();
  22.779 -
  22.780 -	return 0;
  22.781 -}
  22.782 -
  22.783 -/*
  22.784 - * Get the current Thread-Local Storage area:
  22.785 - */
  22.786 -
  22.787 -#define GET_BASE(desc) ( \
  22.788 -	(((desc)->a >> 16) & 0x0000ffff) | \
  22.789 -	(((desc)->b << 16) & 0x00ff0000) | \
  22.790 -	( (desc)->b        & 0xff000000)   )
  22.791 -
  22.792 -#define GET_LIMIT(desc) ( \
  22.793 -	((desc)->a & 0x0ffff) | \
  22.794 -	 ((desc)->b & 0xf0000) )
  22.795 -	
  22.796 -#define GET_32BIT(desc)		(((desc)->b >> 22) & 1)
  22.797 -#define GET_CONTENTS(desc)	(((desc)->b >> 10) & 3)
  22.798 -#define GET_WRITABLE(desc)	(((desc)->b >>  9) & 1)
  22.799 -#define GET_LIMIT_PAGES(desc)	(((desc)->b >> 23) & 1)
  22.800 -#define GET_PRESENT(desc)	(((desc)->b >> 15) & 1)
  22.801 -#define GET_USEABLE(desc)	(((desc)->b >> 20) & 1)
  22.802 -
  22.803 -asmlinkage int sys_get_thread_area(struct user_desc __user *u_info)
  22.804 -{
  22.805 -	struct user_desc info;
  22.806 -	struct desc_struct *desc;
  22.807 -	int idx;
  22.808 -
  22.809 -	if (get_user(idx, &u_info->entry_number))
  22.810 -		return -EFAULT;
  22.811 -	if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
  22.812 -		return -EINVAL;
  22.813 -
  22.814 -	desc = current->thread.tls_array + idx - GDT_ENTRY_TLS_MIN;
  22.815 -
  22.816 -	info.entry_number = idx;
  22.817 -	info.base_addr = GET_BASE(desc);
  22.818 -	info.limit = GET_LIMIT(desc);
  22.819 -	info.seg_32bit = GET_32BIT(desc);
  22.820 -	info.contents = GET_CONTENTS(desc);
  22.821 -	info.read_exec_only = !GET_WRITABLE(desc);
  22.822 -	info.limit_in_pages = GET_LIMIT_PAGES(desc);
  22.823 -	info.seg_not_present = !GET_PRESENT(desc);
  22.824 -	info.useable = GET_USEABLE(desc);
  22.825 -
  22.826 -	if (copy_to_user(u_info, &info, sizeof(info)))
  22.827 -		return -EFAULT;
  22.828 -	return 0;
  22.829 -}
  22.830 -
    23.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/setup.c	Mon Oct 25 12:45:34 2004 +0000
    23.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.3 @@ -1,1471 +0,0 @@
    23.4 -/*
    23.5 - *  linux/arch/i386/kernel/setup.c
    23.6 - *
    23.7 - *  Copyright (C) 1995  Linus Torvalds
    23.8 - *
    23.9 - *  Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
   23.10 - *
   23.11 - *  Memory region support
   23.12 - *	David Parsons <orc@pell.chi.il.us>, July-August 1999
   23.13 - *
   23.14 - *  Added E820 sanitization routine (removes overlapping memory regions);
   23.15 - *  Brian Moyle <bmoyle@mvista.com>, February 2001
   23.16 - *
   23.17 - * Moved CPU detection code to cpu/${cpu}.c
   23.18 - *    Patrick Mochel <mochel@osdl.org>, March 2002
   23.19 - *
   23.20 - *  Provisions for empty E820 memory regions (reported by certain BIOSes).
   23.21 - *  Alex Achenbach <xela@slit.de>, December 2002.
   23.22 - *
   23.23 - */
   23.24 -
   23.25 -/*
   23.26 - * This file handles the architecture-dependent parts of initialization
   23.27 - */
   23.28 -
   23.29 -#include <linux/sched.h>
   23.30 -#include <linux/mm.h>
   23.31 -#include <linux/tty.h>
   23.32 -#include <linux/ioport.h>
   23.33 -#include <linux/acpi.h>
   23.34 -#include <linux/apm_bios.h>
   23.35 -#include <linux/initrd.h>
   23.36 -#include <linux/bootmem.h>
   23.37 -#include <linux/seq_file.h>
   23.38 -#include <linux/console.h>
   23.39 -#include <linux/root_dev.h>
   23.40 -#include <linux/highmem.h>
   23.41 -#include <linux/module.h>
   23.42 -#include <linux/efi.h>
   23.43 -#include <linux/init.h>
   23.44 -#include <linux/edd.h>
   23.45 -#include <video/edid.h>
   23.46 -#include <asm/e820.h>
   23.47 -#include <asm/mpspec.h>
   23.48 -#include <asm/setup.h>
   23.49 -#include <asm/arch_hooks.h>
   23.50 -#include <asm/sections.h>
   23.51 -#include <asm/io_apic.h>
   23.52 -#include <asm/ist.h>
   23.53 -#include <asm/io.h>
   23.54 -#include <asm-xen/hypervisor.h>
   23.55 -#include "setup_arch_pre.h"
   23.56 -
   23.57 -int disable_pse __initdata = 0;
   23.58 -
   23.59 -/*
   23.60 - * Machine setup..
   23.61 - */
   23.62 -
   23.63 -#ifdef CONFIG_EFI
   23.64 -int efi_enabled = 0;
   23.65 -EXPORT_SYMBOL(efi_enabled);
   23.66 -#endif
   23.67 -
   23.68 -/* cpu data as detected by the assembly code in head.S */
   23.69 -struct cpuinfo_x86 new_cpu_data __initdata = { 0, 0, 0, 0, -1, 0, 1, 0, -1 };
   23.70 -/* common cpu data for all cpus */
   23.71 -struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1, 0, 1, 0, -1 };
   23.72 -
   23.73 -unsigned long mmu_cr4_features;
   23.74 -EXPORT_SYMBOL_GPL(mmu_cr4_features);
   23.75 -
   23.76 -#ifdef	CONFIG_ACPI_INTERPRETER
   23.77 -	int acpi_disabled = 0;
   23.78 -#else
   23.79 -	int acpi_disabled = 1;
   23.80 -#endif
   23.81 -EXPORT_SYMBOL(acpi_disabled);
   23.82 -
   23.83 -#ifdef	CONFIG_ACPI_BOOT
   23.84 -int __initdata acpi_force = 0;
   23.85 -extern acpi_interrupt_flags	acpi_sci_flags;
   23.86 -#endif
   23.87 -
   23.88 -int MCA_bus;
   23.89 -/* for MCA, but anyone else can use it if they want */
   23.90 -unsigned int machine_id;
   23.91 -unsigned int machine_submodel_id;
   23.92 -unsigned int BIOS_revision;
   23.93 -unsigned int mca_pentium_flag;
   23.94 -
   23.95 -/* For PCI or other memory-mapped resources */
   23.96 -unsigned long pci_mem_start = 0x10000000;
   23.97 -
   23.98 -/* user-defined highmem size */
   23.99 -static unsigned int highmem_pages = -1;
  23.100 -
  23.101 -/*
  23.102 - * Setup options
  23.103 - */
  23.104 -struct drive_info_struct { char dummy[32]; } drive_info;
  23.105 -struct screen_info screen_info;
  23.106 -struct apm_info apm_info;
  23.107 -struct sys_desc_table_struct {
  23.108 -	unsigned short length;
  23.109 -	unsigned char table[0];
  23.110 -};
  23.111 -struct edid_info edid_info;
  23.112 -struct ist_info ist_info;
  23.113 -struct e820map e820;
  23.114 -
  23.115 -unsigned char aux_device_present;
  23.116 -
  23.117 -extern void early_cpu_init(void);
  23.118 -extern void dmi_scan_machine(void);
  23.119 -extern void generic_apic_probe(char *);
  23.120 -extern int root_mountflags;
  23.121 -
  23.122 -unsigned long saved_videomode;
  23.123 -
  23.124 -#define RAMDISK_IMAGE_START_MASK  	0x07FF
  23.125 -#define RAMDISK_PROMPT_FLAG		0x8000
  23.126 -#define RAMDISK_LOAD_FLAG		0x4000	
  23.127 -
  23.128 -static char command_line[COMMAND_LINE_SIZE];
  23.129 -
  23.130 -unsigned char __initdata boot_params[PARAM_SIZE];
  23.131 -
  23.132 -static struct resource data_resource = {
  23.133 -	.name	= "Kernel data",
  23.134 -	.start	= 0,
  23.135 -	.end	= 0,
  23.136 -	.flags	= IORESOURCE_BUSY | IORESOURCE_MEM
  23.137 -};
  23.138 -
  23.139 -static struct resource code_resource = {
  23.140 -	.name	= "Kernel code",
  23.141 -	.start	= 0,
  23.142 -	.end	= 0,
  23.143 -	.flags	= IORESOURCE_BUSY | IORESOURCE_MEM
  23.144 -};
  23.145 -
  23.146 -#ifdef CONFIG_XEN_PRIVILEGED_GUEST
  23.147 -static struct resource system_rom_resource = {
  23.148 -	.name	= "System ROM",
  23.149 -	.start	= 0xf0000,
  23.150 -	.end	= 0xfffff,
  23.151 -	.flags	= IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
  23.152 -};
  23.153 -
  23.154 -static struct resource extension_rom_resource = {
  23.155 -	.name	= "Extension ROM",
  23.156 -	.start	= 0xe0000,
  23.157 -	.end	= 0xeffff,
  23.158 -	.flags	= IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
  23.159 -};
  23.160 -
  23.161 -static struct resource adapter_rom_resources[] = { {
  23.162 -	.name 	= "Adapter ROM",
  23.163 -	.start	= 0xc8000,
  23.164 -	.end	= 0,
  23.165 -	.flags	= IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
  23.166 -}, {
  23.167 -	.name 	= "Adapter ROM",
  23.168 -	.start	= 0,
  23.169 -	.end	= 0,
  23.170 -	.flags	= IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
  23.171 -}, {
  23.172 -	.name 	= "Adapter ROM",
  23.173 -	.start	= 0,
  23.174 -	.end	= 0,
  23.175 -	.flags	= IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
  23.176 -}, {
  23.177 -	.name 	= "Adapter ROM",
  23.178 -	.start	= 0,
  23.179 -	.end	= 0,
  23.180 -	.flags	= IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
  23.181 -}, {
  23.182 -	.name 	= "Adapter ROM",
  23.183 -	.start	= 0,
  23.184 -	.end	= 0,
  23.185 -	.flags	= IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
  23.186 -}, {
  23.187 -	.name 	= "Adapter ROM",
  23.188 -	.start	= 0,
  23.189 -	.end	= 0,
  23.190 -	.flags	= IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
  23.191 -} };
  23.192 -
  23.193 -#define ADAPTER_ROM_RESOURCES \
  23.194 -	(sizeof adapter_rom_resources / sizeof adapter_rom_resources[0])
  23.195 -
  23.196 -static struct resource video_rom_resource = {
  23.197 -	.name 	= "Video ROM",
  23.198 -	.start	= 0xc0000,
  23.199 -	.end	= 0xc7fff,
  23.200 -	.flags	= IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
  23.201 -};
  23.202 -#endif
  23.203 -
  23.204 -static struct resource video_ram_resource = {
  23.205 -	.name	= "Video RAM area",
  23.206 -	.start	= 0xa0000,
  23.207 -	.end	= 0xbffff,
  23.208 -	.flags	= IORESOURCE_BUSY | IORESOURCE_MEM
  23.209 -};
  23.210 -
  23.211 -static struct resource standard_io_resources[] = { {
  23.212 -	.name	= "dma1",
  23.213 -	.start	= 0x0000,
  23.214 -	.end	= 0x001f,
  23.215 -	.flags	= IORESOURCE_BUSY | IORESOURCE_IO
  23.216 -}, {
  23.217 -	.name	= "pic1",
  23.218 -	.start	= 0x0020,
  23.219 -	.end	= 0x0021,
  23.220 -	.flags	= IORESOURCE_BUSY | IORESOURCE_IO
  23.221 -}, {
  23.222 -	.name	= "timer",
  23.223 -	.start	= 0x0040,
  23.224 -	.end	= 0x005f,
  23.225 -	.flags	= IORESOURCE_BUSY | IORESOURCE_IO
  23.226 -}, {
  23.227 -	.name	= "keyboard",
  23.228 -	.start	= 0x0060,
  23.229 -	.end	= 0x006f,
  23.230 -	.flags	= IORESOURCE_BUSY | IORESOURCE_IO
  23.231 -}, {
  23.232 -	.name	= "dma page reg",
  23.233 -	.start	= 0x0080,
  23.234 -	.end	= 0x008f,
  23.235 -	.flags	= IORESOURCE_BUSY | IORESOURCE_IO
  23.236 -}, {
  23.237 -	.name	= "pic2",
  23.238 -	.start	= 0x00a0,
  23.239 -	.end	= 0x00a1,
  23.240 -	.flags	= IORESOURCE_BUSY | IORESOURCE_IO
  23.241 -}, {
  23.242 -	.name	= "dma2",
  23.243 -	.start	= 0x00c0,
  23.244 -	.end	= 0x00df,
  23.245 -	.flags	= IORESOURCE_BUSY | IORESOURCE_IO
  23.246 -}, {
  23.247 -	.name	= "fpu",
  23.248 -	.start	= 0x00f0,
  23.249 -	.end	= 0x00ff,
  23.250 -	.flags	= IORESOURCE_BUSY | IORESOURCE_IO
  23.251 -} };
  23.252 -
  23.253 -#define STANDARD_IO_RESOURCES \
  23.254 -	(sizeof standard_io_resources / sizeof standard_io_resources[0])
  23.255 -
  23.256 -#ifdef CONFIG_XEN_PRIVILEGED_GUEST
  23.257 -#define romsignature(x) (*(unsigned short *)(x) == 0xaa55)
  23.258 -
  23.259 -static int __init romchecksum(unsigned char *rom, unsigned long length)
  23.260 -{
  23.261 -	unsigned char *p, sum = 0;
  23.262 -
  23.263 -	for (p = rom; p < rom + length; p++)
  23.264 -		sum += *p;
  23.265 -	return sum == 0;
  23.266 -}
  23.267 -
  23.268 -static void __init probe_roms(void)
  23.269 -{
  23.270 -	unsigned long start, length, upper;
  23.271 -	unsigned char *rom;
  23.272 -	int	      i;
  23.273 -
  23.274 -	/* video rom */
  23.275 -	upper = adapter_rom_resources[0].start;
  23.276 -	for (start = video_rom_resource.start; start < upper; start += 2048) {
  23.277 -		rom = isa_bus_to_virt(start);
  23.278 -		if (!romsignature(rom))
  23.279 -			continue;
  23.280 -
  23.281 -		video_rom_resource.start = start;
  23.282 -
  23.283 -		/* 0 < length <= 0x7f * 512, historically */
  23.284 -		length = rom[2] * 512;
  23.285 -
  23.286 -		/* if checksum okay, trust length byte */
  23.287 -		if (length && romchecksum(rom, length))
  23.288 -			video_rom_resource.end = start + length - 1;
  23.289 -
  23.290 -		request_resource(&iomem_resource, &video_rom_resource);
  23.291 -		break;
  23.292 -	}
  23.293 -
  23.294 -	start = (video_rom_resource.end + 1 + 2047) & ~2047UL;
  23.295 -	if (start < upper)
  23.296 -		start = upper;
  23.297 -
  23.298 -	/* system rom */
  23.299 -	request_resource(&iomem_resource, &system_rom_resource);
  23.300 -	upper = system_rom_resource.start;
  23.301 -
  23.302 -	/* check for extension rom (ignore length byte!) */
  23.303 -	rom = isa_bus_to_virt(extension_rom_resource.start);
  23.304 -	if (romsignature(rom)) {
  23.305 -		length = extension_rom_resource.end - extension_rom_resource.start + 1;
  23.306 -		if (romchecksum(rom, length)) {
  23.307 -			request_resource(&iomem_resource, &extension_rom_resource);
  23.308 -			upper = extension_rom_resource.start;
  23.309 -		}
  23.310 -	}
  23.311 -
  23.312 -	/* check for adapter roms on 2k boundaries */
  23.313 -	for (i = 0; i < ADAPTER_ROM_RESOURCES && start < upper; start += 2048) {
  23.314 -		rom = isa_bus_to_virt(start);
  23.315 -		if (!romsignature(rom))
  23.316 -			continue;
  23.317 -
  23.318 -		/* 0 < length <= 0x7f * 512, historically */
  23.319 -		length = rom[2] * 512;
  23.320 -
  23.321 -		/* but accept any length that fits if checksum okay */
  23.322 -		if (!length || start + length > upper || !romchecksum(rom, length))
  23.323 -			continue;
  23.324 -
  23.325 -		adapter_rom_resources[i].start = start;
  23.326 -		adapter_rom_resources[i].end = start + length - 1;
  23.327 -		request_resource(&iomem_resource, &adapter_rom_resources[i]);
  23.328 -
  23.329 -		start = adapter_rom_resources[i++].end & ~2047UL;
  23.330 -	}
  23.331 -}
  23.332 -#endif
  23.333 -
  23.334 -/*
  23.335 - * Point at the empty zero page to start with. We map the real shared_info
  23.336 - * page as soon as fixmap is up and running.
  23.337 - */
  23.338 -shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
  23.339 -EXPORT_SYMBOL(HYPERVISOR_shared_info);
  23.340 -
  23.341 -unsigned long *phys_to_machine_mapping, *pfn_to_mfn_frame_list;
  23.342 -EXPORT_SYMBOL(phys_to_machine_mapping);
  23.343 -
  23.344 -multicall_entry_t multicall_list[8];
  23.345 -int nr_multicall_ents = 0;
  23.346 -
  23.347 -/* Raw start-of-day parameters from the hypervisor. */
  23.348 -union xen_start_info_union xen_start_info_union;
  23.349 -
  23.350 -extern void (*pm_idle)(void);
  23.351 -
  23.352 -static void __init limit_regions(unsigned long long size)
  23.353 -{
  23.354 -	unsigned long long current_addr = 0;
  23.355 -	int i;
  23.356 -
  23.357 -	if (efi_enabled) {
  23.358 -		for (i = 0; i < memmap.nr_map; i++) {
  23.359 -			current_addr = memmap.map[i].phys_addr +
  23.360 -				       (memmap.map[i].num_pages << 12);
  23.361 -			if (memmap.map[i].type == EFI_CONVENTIONAL_MEMORY) {
  23.362 -				if (current_addr >= size) {
  23.363 -					memmap.map[i].num_pages -=
  23.364 -						(((current_addr-size) + PAGE_SIZE-1) >> PAGE_SHIFT);
  23.365 -					memmap.nr_map = i + 1;
  23.366 -					return;
  23.367 -				}
  23.368 -			}
  23.369 -		}
  23.370 -	}
  23.371 -	for (i = 0; i < e820.nr_map; i++) {
  23.372 -		if (e820.map[i].type == E820_RAM) {
  23.373 -			current_addr = e820.map[i].addr + e820.map[i].size;
  23.374 -			if (current_addr >= size) {
  23.375 -				e820.map[i].size -= current_addr-size;
  23.376 -				e820.nr_map = i + 1;
  23.377 -				return;
  23.378 -			}
  23.379 -		}
  23.380 -	}
  23.381 -}
  23.382 -
  23.383 -static void __init add_memory_region(unsigned long long start,
  23.384 -                                  unsigned long long size, int type)
  23.385 -{
  23.386 -	int x;
  23.387 -
  23.388 -	if (!efi_enabled) {
  23.389 -       		x = e820.nr_map;
  23.390 -
  23.391 -		if (x == E820MAX) {
  23.392 -		    printk(KERN_ERR "Ooops! Too many entries in the memory map!\n");
  23.393 -		    return;
  23.394 -		}
  23.395 -
  23.396 -		e820.map[x].addr = start;
  23.397 -		e820.map[x].size = size;
  23.398 -		e820.map[x].type = type;
  23.399 -		e820.nr_map++;
  23.400 -	}
  23.401 -} /* add_memory_region */
  23.402 -
  23.403 -#define E820_DEBUG	1
  23.404 -
  23.405 -static void __init print_memory_map(char *who)
  23.406 -{
  23.407 -	int i;
  23.408 -
  23.409 -	for (i = 0; i < e820.nr_map; i++) {
  23.410 -		printk(" %s: %016Lx - %016Lx ", who,
  23.411 -			e820.map[i].addr,
  23.412 -			e820.map[i].addr + e820.map[i].size);
  23.413 -		switch (e820.map[i].type) {
  23.414 -		case E820_RAM:	printk("(usable)\n");
  23.415 -				break;
  23.416 -		case E820_RESERVED:
  23.417 -				printk("(reserved)\n");
  23.418 -				break;
  23.419 -		case E820_ACPI:
  23.420 -				printk("(ACPI data)\n");
  23.421 -				break;
  23.422 -		case E820_NVS:
  23.423 -				printk("(ACPI NVS)\n");
  23.424 -				break;
  23.425 -		default:	printk("type %lu\n", e820.map[i].type);
  23.426 -				break;
  23.427 -		}
  23.428 -	}
  23.429 -}
  23.430 -
  23.431 -#if 0
  23.432 -/*
  23.433 - * Sanitize the BIOS e820 map.
  23.434 - *
  23.435 - * Some e820 responses include overlapping entries.  The following 
  23.436 - * replaces the original e820 map with a new one, removing overlaps.
  23.437 - *
  23.438 - */
  23.439 -struct change_member {
  23.440 -	struct e820entry *pbios; /* pointer to original bios entry */
  23.441 -	unsigned long long addr; /* address for this change point */
  23.442 -};
  23.443 -struct change_member change_point_list[2*E820MAX] __initdata;
  23.444 -struct change_member *change_point[2*E820MAX] __initdata;
  23.445 -struct e820entry *overlap_list[E820MAX] __initdata;
  23.446 -struct e820entry new_bios[E820MAX] __initdata;
  23.447 -
  23.448 -static int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map)
  23.449 -{
  23.450 -	struct change_member *change_tmp;
  23.451 -	unsigned long current_type, last_type;
  23.452 -	unsigned long long last_addr;
  23.453 -	int chgidx, still_changing;
  23.454 -	int overlap_entries;
  23.455 -	int new_bios_entry;
  23.456 -	int old_nr, new_nr, chg_nr;
  23.457 -	int i;
  23.458 -
  23.459 -	/*
  23.460 -		Visually we're performing the following (1,2,3,4 = memory types)...
  23.461 -
  23.462 -		Sample memory map (w/overlaps):
  23.463 -		   ____22__________________
  23.464 -		   ______________________4_
  23.465 -		   ____1111________________
  23.466 -		   _44_____________________
  23.467 -		   11111111________________
  23.468 -		   ____________________33__
  23.469 -		   ___________44___________
  23.470 -		   __________33333_________
  23.471 -		   ______________22________
  23.472 -		   ___________________2222_
  23.473 -		   _________111111111______
  23.474 -		   _____________________11_
  23.475 -		   _________________4______
  23.476 -
  23.477 -		Sanitized equivalent (no overlap):
  23.478 -		   1_______________________
  23.479 -		   _44_____________________
  23.480 -		   ___1____________________
  23.481 -		   ____22__________________
  23.482 -		   ______11________________
  23.483 -		   _________1______________
  23.484 -		   __________3_____________
  23.485 -		   ___________44___________
  23.486 -		   _____________33_________
  23.487 -		   _______________2________
  23.488 -		   ________________1_______
  23.489 -		   _________________4______
  23.490 -		   ___________________2____
  23.491 -		   ____________________33__
  23.492 -		   ______________________4_
  23.493 -	*/
  23.494 -
  23.495 -	/* if there's only one memory region, don't bother */
  23.496 -	if (*pnr_map < 2)
  23.497 -		return -1;
  23.498 -
  23.499 -	old_nr = *pnr_map;
  23.500 -
  23.501 -	/* bail out if we find any unreasonable addresses in bios map */
  23.502 -	for (i=0; i<old_nr; i++)
  23.503 -		if (biosmap[i].addr + biosmap[i].size < biosmap[i].addr)
  23.504 -			return -1;
  23.505 -
  23.506 -	/* create pointers for initial change-point information (for sorting) */
  23.507 -	for (i=0; i < 2*old_nr; i++)
  23.508 -		change_point[i] = &change_point_list[i];
  23.509 -
  23.510 -	/* record all known change-points (starting and ending addresses),
  23.511 -	   omitting those that are for empty memory regions */
  23.512 -	chgidx = 0;
  23.513 -	for (i=0; i < old_nr; i++)	{
  23.514 -		if (biosmap[i].size != 0) {
  23.515 -			change_point[chgidx]->addr = biosmap[i].addr;
  23.516 -			change_point[chgidx++]->pbios = &biosmap[i];
  23.517 -			change_point[chgidx]->addr = biosmap[i].addr + biosmap[i].size;
  23.518 -			change_point[chgidx++]->pbios = &biosmap[i];
  23.519 -		}
  23.520 -	}
  23.521 -	chg_nr = chgidx;    	/* true number of change-points */
  23.522 -
  23.523 -	/* sort change-point list by memory addresses (low -> high) */
  23.524 -	still_changing = 1;
  23.525 -	while (still_changing)	{
  23.526 -		still_changing = 0;
  23.527 -		for (i=1; i < chg_nr; i++)  {
  23.528 -			/* if <current_addr> > <last_addr>, swap */
  23.529 -			/* or, if current=<start_addr> & last=<end_addr>, swap */
  23.530 -			if ((change_point[i]->addr < change_point[i-1]->addr) ||
  23.531 -				((change_point[i]->addr == change_point[i-1]->addr) &&
  23.532 -				 (change_point[i]->addr == change_point[i]->pbios->addr) &&
  23.533 -				 (change_point[i-1]->addr != change_point[i-1]->pbios->addr))
  23.534 -			   )
  23.535 -			{
  23.536 -				change_tmp = change_point[i];
  23.537 -				change_point[i] = change_point[i-1];
  23.538 -				change_point[i-1] = change_tmp;
  23.539 -				still_changing=1;
  23.540 -			}
  23.541 -		}
  23.542 -	}
  23.543 -
  23.544 -	/* create a new bios memory map, removing overlaps */
  23.545 -	overlap_entries=0;	 /* number of entries in the overlap table */
  23.546 -	new_bios_entry=0;	 /* index for creating new bios map entries */
  23.547 -	last_type = 0;		 /* start with undefined memory type */
  23.548 -	last_addr = 0;		 /* start with 0 as last starting address */
  23.549 -	/* loop through change-points, determining affect on the new bios map */
  23.550 -	for (chgidx=0; chgidx < chg_nr; chgidx++)
  23.551 -	{
  23.552 -		/* keep track of all overlapping bios entries */
  23.553 -		if (change_point[chgidx]->addr == change_point[chgidx]->pbios->addr)
  23.554 -		{
  23.555 -			/* add map entry to overlap list (> 1 entry implies an overlap) */
  23.556 -			overlap_list[overlap_entries++]=change_point[chgidx]->pbios;
  23.557 -		}
  23.558 -		else
  23.559 -		{
  23.560 -			/* remove entry from list (order independent, so swap with last) */
  23.561 -			for (i=0; i<overlap_entries; i++)
  23.562 -			{
  23.563 -				if (overlap_list[i] == change_point[chgidx]->pbios)
  23.564 -					overlap_list[i] = overlap_list[overlap_entries-1];
  23.565 -			}
  23.566 -			overlap_entries--;
  23.567 -		}
  23.568 -		/* if there are overlapping entries, decide which "type" to use */
  23.569 -		/* (larger value takes precedence -- 1=usable, 2,3,4,4+=unusable) */
  23.570 -		current_type = 0;
  23.571 -		for (i=0; i<overlap_entries; i++)
  23.572 -			if (overlap_list[i]->type > current_type)
  23.573 -				current_type = overlap_list[i]->type;
  23.574 -		/* continue building up new bios map based on this information */
  23.575 -		if (current_type != last_type)	{
  23.576 -			if (last_type != 0)	 {
  23.577 -				new_bios[new_bios_entry].size =
  23.578 -					change_point[chgidx]->addr - last_addr;
  23.579 -				/* move forward only if the new size was non-zero */
  23.580 -				if (new_bios[new_bios_entry].size != 0)
  23.581 -					if (++new_bios_entry >= E820MAX)
  23.582 -						break; 	/* no more space left for new bios entries */
  23.583 -			}
  23.584 -			if (current_type != 0)	{
  23.585 -				new_bios[new_bios_entry].addr = change_point[chgidx]->addr;
  23.586 -				new_bios[new_bios_entry].type = current_type;
  23.587 -				last_addr=change_point[chgidx]->addr;
  23.588 -			}
  23.589 -			last_type = current_type;
  23.590 -		}
  23.591 -	}
  23.592 -	new_nr = new_bios_entry;   /* retain count for new bios entries */
  23.593 -
  23.594 -	/* copy new bios mapping into original location */
  23.595 -	memcpy(biosmap, new_bios, new_nr*sizeof(struct e820entry));
  23.596 -	*pnr_map = new_nr;
  23.597 -
  23.598 -	return 0;
  23.599 -}
  23.600 -
  23.601 -/*
  23.602 - * Copy the BIOS e820 map into a safe place.
  23.603 - *
  23.604 - * Sanity-check it while we're at it..
  23.605 - *
  23.606 - * If we're lucky and live on a modern system, the setup code
  23.607 - * will have given us a memory map that we can use to properly
  23.608 - * set up memory.  If we aren't, we'll fake a memory map.
  23.609 - *
  23.610 - * We check to see that the memory map contains at least 2 elements
  23.611 - * before we'll use it, because the detection code in setup.S may
  23.612 - * not be perfect and most every PC known to man has two memory
  23.613 - * regions: one from 0 to 640k, and one from 1mb up.  (The IBM
  23.614 - * thinkpad 560x, for example, does not cooperate with the memory
  23.615 - * detection code.)
  23.616 - */
  23.617 -static int __init copy_e820_map(struct e820entry * biosmap, int nr_map)
  23.618 -{
  23.619 -	/* Only one memory region (or negative)? Ignore it */
  23.620 -	if (nr_map < 2)
  23.621 -		return -1;
  23.622 -
  23.623 -	do {
  23.624 -		unsigned long long start = biosmap->addr;
  23.625 -		unsigned long long size = biosmap->size;
  23.626 -		unsigned long long end = start + size;
  23.627 -		unsigned long type = biosmap->type;
  23.628 -
  23.629 -		/* Overflow in 64 bits? Ignore the memory map. */
  23.630 -		if (start > end)
  23.631 -			return -1;
  23.632 -
  23.633 -		/*
  23.634 -		 * Some BIOSes claim RAM in the 640k - 1M region.
  23.635 -		 * Not right. Fix it up.
  23.636 -		 */
  23.637 -		if (type == E820_RAM) {
  23.638 -			if (start < 0x100000ULL && end > 0xA0000ULL) {
  23.639 -				if (start < 0xA0000ULL)
  23.640 -					add_memory_region(start, 0xA0000ULL-start, type);
  23.641 -				if (end <= 0x100000ULL)
  23.642 -					continue;
  23.643 -				start = 0x100000ULL;
  23.644 -				size = end - start;
  23.645 -			}
  23.646 -		}
  23.647 -		add_memory_region(start, size, type);
  23.648 -	} while (biosmap++,--nr_map);
  23.649 -	return 0;
  23.650 -}
  23.651 -#endif
  23.652 -
  23.653 -#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
  23.654 -struct edd edd;
  23.655 -#ifdef CONFIG_EDD_MODULE
  23.656 -EXPORT_SYMBOL(edd);
  23.657 -#endif
  23.658 -/**
  23.659 - * copy_edd() - Copy the BIOS EDD information
  23.660 - *              from boot_params into a safe place.
  23.661 - *
  23.662 - */
  23.663 -static inline void copy_edd(void)
  23.664 -{
  23.665 -     memcpy(edd.mbr_signature, EDD_MBR_SIGNATURE, sizeof(edd.mbr_signature));
  23.666 -     memcpy(edd.edd_info, EDD_BUF, sizeof(edd.edd_info));
  23.667 -     edd.mbr_signature_nr = EDD_MBR_SIG_NR;
  23.668 -     edd.edd_info_nr = EDD_NR;
  23.669 -}
  23.670 -#else
  23.671 -static inline void copy_edd(void)
  23.672 -{
  23.673 -}
  23.674 -#endif
  23.675 -
  23.676 -/*
  23.677 - * Do NOT EVER look at the BIOS memory size location.
  23.678 - * It does not work on many machines.
  23.679 - */
  23.680 -#define LOWMEMSIZE()	(0x9f000)
  23.681 -
  23.682 -static void __init parse_cmdline_early (char ** cmdline_p)
  23.683 -{
  23.684 -	char c = ' ', *to = command_line, *from = saved_command_line;
  23.685 -	int len = 0;
  23.686 -	int userdef = 0;
  23.687 -
  23.688 -        memcpy(saved_command_line, xen_start_info.cmd_line, MAX_CMDLINE);
  23.689 -	/* Save unparsed command line copy for /proc/cmdline */
  23.690 -	saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
  23.691 -
  23.692 -	for (;;) {
  23.693 -		/*
  23.694 -		 * "mem=nopentium" disables the 4MB page tables.
  23.695 -		 * "mem=XXX[kKmM]" defines a memory region from HIGH_MEM
  23.696 -		 * to <mem>, overriding the bios size.
  23.697 -		 * "memmap=XXX[KkmM]@XXX[KkmM]" defines a memory region from
  23.698 -		 * <start> to <start>+<mem>, overriding the bios size.
  23.699 -		 *
  23.700 -		 * HPA tells me bootloaders need to parse mem=, so no new
  23.701 -		 * option should be mem=  [also see Documentation/i386/boot.txt]
  23.702 -		 */
  23.703 -		if (c == ' ' && !memcmp(from, "mem=", 4)) {
  23.704 -			if (to != command_line)
  23.705 -				to--;
  23.706 -			if (!memcmp(from+4, "nopentium", 9)) {
  23.707 -				from += 9+4;
  23.708 -				clear_bit(X86_FEATURE_PSE, boot_cpu_data.x86_capability);
  23.709 -				disable_pse = 1;
  23.710 -			} else {
  23.711 -				/* If the user specifies memory size, we
  23.712 -				 * limit the BIOS-provided memory map to
  23.713 -				 * that size. exactmap can be used to specify
  23.714 -				 * the exact map. mem=number can be used to
  23.715 -				 * trim the existing memory map.
  23.716 -				 */
  23.717 -				unsigned long long mem_size;
  23.718 - 
  23.719 -				mem_size = memparse(from+4, &from);
  23.720 -				limit_regions(mem_size);
  23.721 -				userdef=1;
  23.722 -			}
  23.723 -		}
  23.724 -
  23.725 -		if (c == ' ' && !memcmp(from, "memmap=", 7)) {
  23.726 -			if (to != command_line)
  23.727 -				to--;
  23.728 -			if (!memcmp(from+7, "exactmap", 8)) {
  23.729 -				from += 8+7;
  23.730 -				e820.nr_map = 0;
  23.731 -				userdef = 1;
  23.732 -			} else {
  23.733 -				/* If the user specifies memory size, we
  23.734 -				 * limit the BIOS-provided memory map to
  23.735 -				 * that size. exactmap can be used to specify
  23.736 -				 * the exact map. mem=number can be used to
  23.737 -				 * trim the existing memory map.
  23.738 -				 */
  23.739 -				unsigned long long start_at, mem_size;
  23.740 - 
  23.741 -				mem_size = memparse(from+7, &from);
  23.742 -				if (*from == '@') {
  23.743 -					start_at = memparse(from+1, &from);
  23.744 -					add_memory_region(start_at, mem_size, E820_RAM);
  23.745 -				} else if (*from == '#') {
  23.746 -					start_at = memparse(from+1, &from);
  23.747 -					add_memory_region(start_at, mem_size, E820_ACPI);
  23.748 -				} else if (*from == '$') {
  23.749 -					start_at = memparse(from+1, &from);
  23.750 -					add_memory_region(start_at, mem_size, E820_RESERVED);
  23.751 -				} else {
  23.752 -					limit_regions(mem_size);
  23.753 -					userdef=1;
  23.754 -				}
  23.755 -			}
  23.756 -		}
  23.757 -
  23.758 -#ifdef  CONFIG_X86_SMP
  23.759 -		/*
  23.760 -		 * If the BIOS enumerates physical processors before logical,
  23.761 -		 * maxcpus=N at enumeration-time can be used to disable HT.
  23.762 -		 */
  23.763 -		else if (!memcmp(from, "maxcpus=", 8)) {
  23.764 -			extern unsigned int maxcpus;
  23.765 -
  23.766 -			maxcpus = simple_strtoul(from + 8, NULL, 0);
  23.767 -		}
  23.768 -#endif
  23.769 -
  23.770 -#ifdef CONFIG_ACPI_BOOT
  23.771 -		/* "acpi=off" disables both ACPI table parsing and interpreter */
  23.772 -		else if (!memcmp(from, "acpi=off", 8)) {
  23.773 -			disable_acpi();
  23.774 -		}
  23.775 -
  23.776 -		/* acpi=force to over-ride black-list */
  23.777 -		else if (!memcmp(from, "acpi=force", 10)) {
  23.778 -			acpi_force = 1;
  23.779 -			acpi_ht = 1;
  23.780 -			acpi_disabled = 0;
  23.781 -		}
  23.782 -
  23.783 -		/* acpi=strict disables out-of-spec workarounds */
  23.784 -		else if (!memcmp(from, "acpi=strict", 11)) {
  23.785 -			acpi_strict = 1;
  23.786 -		}
  23.787 -
  23.788 -		/* Limit ACPI just to boot-time to enable HT */
  23.789 -		else if (!memcmp(from, "acpi=ht", 7)) {
  23.790 -			if (!acpi_force)
  23.791 -				disable_acpi();
  23.792 -			acpi_ht = 1;
  23.793 -		}
  23.794 -		
  23.795 -		/* "pci=noacpi" disable ACPI IRQ routing and PCI scan */
  23.796 -		else if (!memcmp(from, "pci=noacpi", 10)) {
  23.797 -			acpi_disable_pci();
  23.798 -		}
  23.799 -		/* "acpi=noirq" disables ACPI interrupt routing */
  23.800 -		else if (!memcmp(from, "acpi=noirq", 10)) {
  23.801 -			acpi_noirq_set();
  23.802 -		}
  23.803 -
  23.804 -		else if (!memcmp(from, "acpi_sci=edge", 13))
  23.805 -			acpi_sci_flags.trigger =  1;
  23.806 -
  23.807 -		else if (!memcmp(from, "acpi_sci=level", 14))
  23.808 -			acpi_sci_flags.trigger = 3;
  23.809 -
  23.810 -		else if (!memcmp(from, "acpi_sci=high", 13))
  23.811 -			acpi_sci_flags.polarity = 1;
  23.812 -
  23.813 -		else if (!memcmp(from, "acpi_sci=low", 12))
  23.814 -			acpi_sci_flags.polarity = 3;
  23.815 -
  23.816 -#ifdef CONFIG_X86_IO_APIC
  23.817 -		else if (!memcmp(from, "acpi_skip_timer_override", 24))
  23.818 -			acpi_skip_timer_override = 1;
  23.819 -#endif
  23.820 -
  23.821 -#ifdef CONFIG_X86_LOCAL_APIC
  23.822 -		/* disable IO-APIC */
  23.823 -		else if (!memcmp(from, "noapic", 6))
  23.824 -			disable_ioapic_setup();
  23.825 -#endif /* CONFIG_X86_LOCAL_APIC */
  23.826 -#endif /* CONFIG_ACPI_BOOT */
  23.827 -
  23.828 -		/*
  23.829 -		 * highmem=size forces highmem to be exactly 'size' bytes.
  23.830 -		 * This works even on boxes that have no highmem otherwise.
  23.831 -		 * This also works to reduce highmem size on bigger boxes.
  23.832 -		 */
  23.833 -		if (c == ' ' && !memcmp(from, "highmem=", 8))
  23.834 -			highmem_pages = memparse(from+8, &from) >> PAGE_SHIFT;
  23.835 -	
  23.836 -		c = *(from++);
  23.837 -		if (!c)
  23.838 -			break;
  23.839 -		if (COMMAND_LINE_SIZE <= ++len)
  23.840 -			break;
  23.841 -		*(to++) = c;
  23.842 -	}
  23.843 -	*to = '\0';
  23.844 -	*cmdline_p = command_line;
  23.845 -	if (userdef) {
  23.846 -		printk(KERN_INFO "user-defined physical RAM map:\n");
  23.847 -		print_memory_map("user");
  23.848 -	}
  23.849 -}
  23.850 -
  23.851 -/*
  23.852 - * Callback for efi_memory_walk.
  23.853 - */
  23.854 -static int __init
  23.855 -efi_find_max_pfn(unsigned long start, unsigned long end, void *arg)
  23.856 -{
  23.857 -	unsigned long *max_pfn = arg, pfn;
  23.858 -
  23.859 -	if (start < end) {
  23.860 -		pfn = PFN_UP(end -1);
  23.861 -		if (pfn > *max_pfn)
  23.862 -			*max_pfn = pfn;
  23.863 -	}
  23.864 -	return 0;
  23.865 -}
  23.866 -
  23.867 -
  23.868 -/*
  23.869 - * Find the highest page frame number we have available
  23.870 - */
  23.871 -void __init find_max_pfn(void)
  23.872 -{
  23.873 -	int i;
  23.874 -
  23.875 -	max_pfn = 0;
  23.876 -	if (efi_enabled) {
  23.877 -		efi_memmap_walk(efi_find_max_pfn, &max_pfn);
  23.878 -		return;
  23.879 -	}
  23.880 -
  23.881 -	for (i = 0; i < e820.nr_map; i++) {
  23.882 -		unsigned long start, end;
  23.883 -		/* RAM? */
  23.884 -		if (e820.map[i].type != E820_RAM)
  23.885 -			continue;
  23.886 -		start = PFN_UP(e820.map[i].addr);
  23.887 -		end = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
  23.888 -		if (start >= end)
  23.889 -			continue;
  23.890 -		if (end > max_pfn)
  23.891 -			max_pfn = end;
  23.892 -	}
  23.893 -}
  23.894 -
  23.895 -/*
  23.896 - * Determine low and high memory ranges:
  23.897 - */
  23.898 -unsigned long __init find_max_low_pfn(void)
  23.899 -{
  23.900 -	unsigned long max_low_pfn;
  23.901 -
  23.902 -	max_low_pfn = max_pfn;
  23.903 -	if (max_low_pfn > MAXMEM_PFN) {
  23.904 -		if (highmem_pages == -1)
  23.905 -			highmem_pages = max_pfn - MAXMEM_PFN;
  23.906 -		if (highmem_pages + MAXMEM_PFN < max_pfn)
  23.907 -			max_pfn = MAXMEM_PFN + highmem_pages;
  23.908 -		if (highmem_pages + MAXMEM_PFN > max_pfn) {
  23.909 -			printk("only %luMB highmem pages available, ignoring highmem size of %uMB.\n", pages_to_mb(max_pfn - MAXMEM_PFN), pages_to_mb(highmem_pages));
  23.910 -			highmem_pages = 0;
  23.911 -		}
  23.912 -		max_low_pfn = MAXMEM_PFN;
  23.913 -#ifndef CONFIG_HIGHMEM
  23.914 -		/* Maximum memory usable is what is directly addressable */
  23.915 -		printk(KERN_WARNING "Warning only %ldMB will be used.\n",
  23.916 -					MAXMEM>>20);
  23.917 -		if (max_pfn > MAX_NONPAE_PFN)
  23.918 -			printk(KERN_WARNING "Use a PAE enabled kernel.\n");
  23.919 -		else
  23.920 -			printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n");
  23.921 -		max_pfn = MAXMEM_PFN;
  23.922 -#else /* !CONFIG_HIGHMEM */
  23.923 -#ifndef CONFIG_X86_PAE
  23.924 -		if (max_pfn > MAX_NONPAE_PFN) {
  23.925 -			max_pfn = MAX_NONPAE_PFN;
  23.926 -			printk(KERN_WARNING "Warning only 4GB will be used.\n");
  23.927 -			printk(KERN_WARNING "Use a PAE enabled kernel.\n");
  23.928 -		}
  23.929 -#endif /* !CONFIG_X86_PAE */
  23.930 -#endif /* !CONFIG_HIGHMEM */
  23.931 -	} else {
  23.932 -		if (highmem_pages == -1)
  23.933 -			highmem_pages = 0;
  23.934 -#ifdef CONFIG_HIGHMEM
  23.935 -		if (highmem_pages >= max_pfn) {
  23.936 -			printk(KERN_ERR "highmem size specified (%uMB) is bigger than pages available (%luMB)!.\n", pages_to_mb(highmem_pages), pages_to_mb(max_pfn));
  23.937 -			highmem_pages = 0;
  23.938 -		}
  23.939 -		if (highmem_pages) {
  23.940 -			if (max_low_pfn-highmem_pages < 64*1024*1024/PAGE_SIZE){
  23.941 -				printk(KERN_ERR "highmem size %uMB results in smaller than 64MB lowmem, ignoring it.\n", pages_to_mb(highmem_pages));
  23.942 -				highmem_pages = 0;
  23.943 -			}
  23.944 -			max_low_pfn -= highmem_pages;
  23.945 -		}
  23.946 -#else
  23.947 -		if (highmem_pages)
  23.948 -			printk(KERN_ERR "ignoring highmem size on non-highmem kernel!\n");
  23.949 -#endif
  23.950 -	}
  23.951 -	return max_low_pfn;
  23.952 -}
  23.953 -
  23.954 -#ifndef CONFIG_DISCONTIGMEM
  23.955 -
  23.956 -/*
  23.957 - * Free all available memory for boot time allocation.  Used
  23.958 - * as a callback function by efi_memory_walk()
  23.959 - */
  23.960 -
  23.961 -static int __init
  23.962 -free_available_memory(unsigned long start, unsigned long end, void *arg)
  23.963 -{
  23.964 -	/* check max_low_pfn */
  23.965 -	if (start >= ((max_low_pfn + 1) << PAGE_SHIFT))
  23.966 -		return 0;
  23.967 -	if (end >= ((max_low_pfn + 1) << PAGE_SHIFT))
  23.968 -		end = (max_low_pfn + 1) << PAGE_SHIFT;
  23.969 -	if (start < end)
  23.970 -		free_bootmem(start, end - start);
  23.971 -
  23.972 -	return 0;
  23.973 -}
  23.974 -/*
  23.975 - * Register fully available low RAM pages with the bootmem allocator.
  23.976 - */
  23.977 -static void __init register_bootmem_low_pages(unsigned long max_low_pfn)
  23.978 -{
  23.979 -	int i;
  23.980 -
  23.981 -	if (efi_enabled) {
  23.982 -		efi_memmap_walk(free_available_memory, NULL);
  23.983 -		return;
  23.984 -	}
  23.985 -	for (i = 0; i < e820.nr_map; i++) {
  23.986 -		unsigned long curr_pfn, last_pfn, size;
  23.987 -		/*
  23.988 -		 * Reserve usable low memory
  23.989 -		 */
  23.990 -		if (e820.map[i].type != E820_RAM)
  23.991 -			continue;
  23.992 -		/*
  23.993 -		 * We are rounding up the start address of usable memory:
  23.994 -		 */
  23.995 -		curr_pfn = PFN_UP(e820.map[i].addr);
  23.996 -		if (curr_pfn >= max_low_pfn)
  23.997 -			continue;
  23.998 -		/*
  23.999 -		 * ... and at the end of the usable range downwards:
 23.1000 -		 */
 23.1001 -		last_pfn = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
 23.1002 -
 23.1003 -		if (last_pfn > max_low_pfn)
 23.1004 -			last_pfn = max_low_pfn;
 23.1005 -
 23.1006 -		/*
 23.1007 -		 * .. finally, did all the rounding and playing
 23.1008 -		 * around just make the area go away?
 23.1009 -		 */
 23.1010 -		if (last_pfn <= curr_pfn)
 23.1011 -			continue;
 23.1012 -
 23.1013 -		size = last_pfn - curr_pfn;
 23.1014 -		free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size));
 23.1015 -	}
 23.1016 -}
 23.1017 -
 23.1018 -static unsigned long __init setup_memory(void)
 23.1019 -{
 23.1020 -	unsigned long bootmap_size, start_pfn, max_low_pfn;
 23.1021 -
 23.1022 -	/*
 23.1023 -	 * partially used pages are not usable - thus
 23.1024 -	 * we are rounding upwards:
 23.1025 -	 */
 23.1026 -	start_pfn = PFN_UP(__pa(xen_start_info.pt_base)) + xen_start_info.nr_pt_frames;
 23.1027 -
 23.1028 -	find_max_pfn();
 23.1029 -
 23.1030 -	max_low_pfn = find_max_low_pfn();
 23.1031 -
 23.1032 -#ifdef CONFIG_HIGHMEM
 23.1033 -	highstart_pfn = highend_pfn = max_pfn;
 23.1034 -	if (max_pfn > max_low_pfn) {
 23.1035 -		highstart_pfn = max_low_pfn;
 23.1036 -	}
 23.1037 -	printk(KERN_NOTICE "%ldMB HIGHMEM available.\n",
 23.1038 -		pages_to_mb(highend_pfn - highstart_pfn));
 23.1039 -#endif
 23.1040 -	printk(KERN_NOTICE "%ldMB LOWMEM available.\n",
 23.1041 -			pages_to_mb(max_low_pfn));
 23.1042 -	/*
 23.1043 -	 * Initialize the boot-time allocator (with low memory only):
 23.1044 -	 */
 23.1045 -	bootmap_size = init_bootmem(start_pfn, max_low_pfn);
 23.1046 -
 23.1047 -	register_bootmem_low_pages(max_low_pfn);
 23.1048 -
 23.1049 -	/*
 23.1050 -	 * Reserve the bootmem bitmap itself as well. We do this in two
 23.1051 -	 * steps (first step was init_bootmem()) because this catches
 23.1052 -	 * the (very unlikely) case of us accidentally initializing the
 23.1053 -	 * bootmem allocator with an invalid RAM area.
 23.1054 -	 */
 23.1055 -	reserve_bootmem(HIGH_MEMORY, (PFN_PHYS(start_pfn) +
 23.1056 -			 bootmap_size + PAGE_SIZE-1) - (HIGH_MEMORY));
 23.1057 -
 23.1058 -    /* could be an AMD 768MPX chipset. Reserve a page  before VGA to prevent
 23.1059 -       PCI prefetch into it (errata #56). Usually the page is reserved anyways,
 23.1060 -       unless you have no PS/2 mouse plugged in. */
 23.1061 -	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
 23.1062 -	    boot_cpu_data.x86 == 6)
 23.1063 -	     reserve_bootmem(0xa0000 - 4096, 4096);
 23.1064 -
 23.1065 -#ifdef CONFIG_SMP
 23.1066 -	/*
 23.1067 -	 * But first pinch a few for the stack/trampoline stuff
 23.1068 -	 * FIXME: Don't need the extra page at 4K, but need to fix
 23.1069 -	 * trampoline before removing it. (see the GDT stuff)
 23.1070 -	 */
 23.1071 -	reserve_bootmem(PAGE_SIZE, PAGE_SIZE);
 23.1072 -#endif
 23.1073 -#ifdef CONFIG_ACPI_SLEEP
 23.1074 -	/*
 23.1075 -	 * Reserve low memory region for sleep support.
 23.1076 -	 */
 23.1077 -	acpi_reserve_bootmem();
 23.1078 -#endif
 23.1079 -#ifdef CONFIG_X86_FIND_SMP_CONFIG
 23.1080 -	/*
 23.1081 -	 * Find and reserve possible boot-time SMP configuration:
 23.1082 -	 */
 23.1083 -	find_smp_config();
 23.1084 -#endif
 23.1085 -
 23.1086 -#ifdef CONFIG_BLK_DEV_INITRD
 23.1087 -	if (xen_start_info.mod_start) {
 23.1088 -		if (INITRD_START + INITRD_SIZE <= (max_low_pfn << PAGE_SHIFT)) {
 23.1089 -			/*reserve_bootmem(INITRD_START, INITRD_SIZE);*/
 23.1090 -			initrd_start = INITRD_START + PAGE_OFFSET;
 23.1091 -			initrd_end = initrd_start+INITRD_SIZE;
 23.1092 -			initrd_below_start_ok = 1;
 23.1093 -		}
 23.1094 -		else {
 23.1095 -			printk(KERN_ERR "initrd extends beyond end of memory "
 23.1096 -			    "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
 23.1097 -			    INITRD_START + INITRD_SIZE,
 23.1098 -			    max_low_pfn << PAGE_SHIFT);
 23.1099 -			initrd_start = 0;
 23.1100 -		}
 23.1101 -	}
 23.1102 -#endif
 23.1103 -
 23.1104 -	phys_to_machine_mapping = (unsigned long *)xen_start_info.mfn_list;
 23.1105 -
 23.1106 -	return max_low_pfn;
 23.1107 -}
 23.1108 -#else
 23.1109 -extern unsigned long setup_memory(void);
 23.1110 -#endif /* !CONFIG_DISCONTIGMEM */
 23.1111 -
 23.1112 -/*
 23.1113 - * Request address space for all standard RAM and ROM resources
 23.1114 - * and also for regions reported as reserved by the e820.
 23.1115 - */
 23.1116 -static void __init
 23.1117 -legacy_init_iomem_resources(struct resource *code_resource, struct resource *data_resource)
 23.1118 -{
 23.1119 -	int i;
 23.1120 -
 23.1121 -#ifdef CONFIG_XEN_PRIVILEGED_GUEST
 23.1122 -	probe_roms();
 23.1123 -#endif
 23.1124 -	for (i = 0; i < e820.nr_map; i++) {
 23.1125 -		struct resource *res;
 23.1126 -		if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL)
 23.1127 -			continue;
 23.1128 -		res = alloc_bootmem_low(sizeof(struct resource));
 23.1129 -		switch (e820.map[i].type) {
 23.1130 -		case E820_RAM:	res->name = "System RAM"; break;
 23.1131 -		case E820_ACPI:	res->name = "ACPI Tables"; break;
 23.1132 -		case E820_NVS:	res->name = "ACPI Non-volatile Storage"; break;
 23.1133 -		default:	res->name = "reserved";
 23.1134 -		}
 23.1135 -		res->start = e820.map[i].addr;
 23.1136 -		res->end = res->start + e820.map[i].size - 1;
 23.1137 -		res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
 23.1138 -		request_resource(&iomem_resource, res);
 23.1139 -		if (e820.map[i].type == E820_RAM) {
 23.1140 -			/*
 23.1141 -			 *  We don't know which RAM region contains kernel data,
 23.1142 -			 *  so we try it repeatedly and let the resource manager
 23.1143 -			 *  test it.
 23.1144 -			 */
 23.1145 -			request_resource(res, code_resource);
 23.1146 -			request_resource(res, data_resource);
 23.1147 -		}
 23.1148 -	}
 23.1149 -}
 23.1150 -
 23.1151 -/*
 23.1152 - * Request address space for all standard resources
 23.1153 - */
 23.1154 -static void __init register_memory(unsigned long max_low_pfn)
 23.1155 -{
 23.1156 -	unsigned long low_mem_size;
 23.1157 -	int	      i;
 23.1158 -
 23.1159 -	if (efi_enabled)
 23.1160 -		efi_initialize_iomem_resources(&code_resource, &data_resource);
 23.1161 -	else
 23.1162 -		legacy_init_iomem_resources(&code_resource, &data_resource);
 23.1163 -
 23.1164 -	/* EFI systems may still have VGA */
 23.1165 -	request_resource(&iomem_resource, &video_ram_resource);
 23.1166 -
 23.1167 -	/* request I/O space for devices used on all i[345]86 PCs */
 23.1168 -	for (i = 0; i < STANDARD_IO_RESOURCES; i++)
 23.1169 -		request_resource(&ioport_resource, &standard_io_resources[i]);
 23.1170 -
 23.1171 -	/* Tell the PCI layer not to allocate too close to the RAM area.. */
 23.1172 -	low_mem_size = ((max_low_pfn << PAGE_SHIFT) + 0xfffff) & ~0xfffff;
 23.1173 -	if (low_mem_size > pci_mem_start)
 23.1174 -		pci_mem_start = low_mem_size;
 23.1175 -}
 23.1176 -
 23.1177 -/* Use inline assembly to define this because the nops are defined 
 23.1178 -   as inline assembly strings in the include files and we cannot 
 23.1179 -   get them easily into strings. */
 23.1180 -asm("\t.data\nintelnops: " 
 23.1181 -    GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6
 23.1182 -    GENERIC_NOP7 GENERIC_NOP8); 
 23.1183 -asm("\t.data\nk8nops: " 
 23.1184 -    K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6
 23.1185 -    K8_NOP7 K8_NOP8); 
 23.1186 -asm("\t.data\nk7nops: " 
 23.1187 -    K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6
 23.1188 -    K7_NOP7 K7_NOP8); 
 23.1189 -    
 23.1190 -extern unsigned char intelnops[], k8nops[], k7nops[];
 23.1191 -static unsigned char *intel_nops[ASM_NOP_MAX+1] = { 
 23.1192 -     NULL,
 23.1193 -     intelnops,
 23.1194 -     intelnops + 1,
 23.1195 -     intelnops + 1 + 2,
 23.1196 -     intelnops + 1 + 2 + 3,
 23.1197 -     intelnops + 1 + 2 + 3 + 4,
 23.1198 -     intelnops + 1 + 2 + 3 + 4 + 5,
 23.1199 -     intelnops + 1 + 2 + 3 + 4 + 5 + 6,
 23.1200 -     intelnops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
 23.1201 -}; 
 23.1202 -static unsigned char *k8_nops[ASM_NOP_MAX+1] = { 
 23.1203 -     NULL,
 23.1204 -     k8nops,
 23.1205 -     k8nops + 1,
 23.1206 -     k8nops + 1 + 2,
 23.1207 -     k8nops + 1 + 2 + 3,
 23.1208 -     k8nops + 1 + 2 + 3 + 4,
 23.1209 -     k8nops + 1 + 2 + 3 + 4 + 5,
 23.1210 -     k8nops + 1 + 2 + 3 + 4 + 5 + 6,
 23.1211 -     k8nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
 23.1212 -}; 
 23.1213 -static unsigned char *k7_nops[ASM_NOP_MAX+1] = { 
 23.1214 -     NULL,
 23.1215 -     k7nops,
 23.1216 -     k7nops + 1,
 23.1217 -     k7nops + 1 + 2,
 23.1218 -     k7nops + 1 + 2 + 3,
 23.1219 -     k7nops + 1 + 2 + 3 + 4,
 23.1220 -     k7nops + 1 + 2 + 3 + 4 + 5,
 23.1221 -     k7nops + 1 + 2 + 3 + 4 + 5 + 6,
 23.1222 -     k7nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
 23.1223 -}; 
 23.1224 -static struct nop { 
 23.1225 -     int cpuid; 
 23.1226 -     unsigned char **noptable; 
 23.1227 -} noptypes[] = { 
 23.1228 -     { X86_FEATURE_K8, k8_nops }, 
 23.1229 -     { X86_FEATURE_K7, k7_nops }, 
 23.1230 -     { -1, NULL }
 23.1231 -}; 
 23.1232 -
 23.1233 -/* Replace instructions with better alternatives for this CPU type.
 23.1234 -
 23.1235 -   This runs before SMP is initialized to avoid SMP problems with
 23.1236 -   self modifying code. This implies that assymetric systems where
 23.1237 -   APs have less capabilities than the boot processor are not handled. 
 23.1238 -   In this case boot with "noreplacement". */ 
 23.1239 -void apply_alternatives(void *start, void *end) 
 23.1240 -{ 
 23.1241 -	struct alt_instr *a; 
 23.1242 -	int diff, i, k;
 23.1243 -        unsigned char **noptable = intel_nops; 
 23.1244 -	for (i = 0; noptypes[i].cpuid >= 0; i++) { 
 23.1245 -		if (boot_cpu_has(noptypes[i].cpuid)) { 
 23.1246 -			noptable = noptypes[i].noptable;
 23.1247 -			break;
 23.1248 -		}
 23.1249 -	} 
 23.1250 -	for (a = start; (void *)a < end; a++) { 
 23.1251 -		if (!boot_cpu_has(a->cpuid))
 23.1252 -			continue;
 23.1253 -		BUG_ON(a->replacementlen > a->instrlen); 
 23.1254 -		memcpy(a->instr, a->replacement, a->replacementlen); 
 23.1255 -		diff = a->instrlen - a->replacementlen; 
 23.1256 -		/* Pad the rest with nops */
 23.1257 -		for (i = a->replacementlen; diff > 0; diff -= k, i += k) {
 23.1258 -			k = diff;
 23.1259 -			if (k > ASM_NOP_MAX)
 23.1260 -				k = ASM_NOP_MAX;
 23.1261 -			memcpy(a->instr + i, noptable[k], k); 
 23.1262 -		} 
 23.1263 -	}
 23.1264 -} 
 23.1265 -
 23.1266 -static int no_replacement __initdata = 0; 
 23.1267 - 
 23.1268 -void __init alternative_instructions(void)
 23.1269 -{
 23.1270 -	extern struct alt_instr __alt_instructions[], __alt_instructions_end[];
 23.1271 -	if (no_replacement) 
 23.1272 -		return;
 23.1273 -	apply_alternatives(__alt_instructions, __alt_instructions_end);
 23.1274 -}
 23.1275 -
 23.1276 -static int __init noreplacement_setup(char *s)
 23.1277 -{ 
 23.1278 -     no_replacement = 1; 
 23.1279 -     return 0; 
 23.1280 -} 
 23.1281 -
 23.1282 -__setup("noreplacement", noreplacement_setup); 
 23.1283 -
 23.1284 -static char * __init machine_specific_memory_setup(void);
 23.1285 -
 23.1286 -/*
 23.1287 - * Determine if we were loaded by an EFI loader.  If so, then we have also been
 23.1288 - * passed the efi memmap, systab, etc., so we should use these data structures
 23.1289 - * for initialization.  Note, the efi init code path is determined by the
 23.1290 - * global efi_enabled. This allows the same kernel image to be used on existing
 23.1291 - * systems (with a traditional BIOS) as well as on EFI systems.
 23.1292 - */
 23.1293 -void __init setup_arch(char **cmdline_p)
 23.1294 -{
 23.1295 -        int i,j;
 23.1296 -
 23.1297 -        unsigned long max_low_pfn;
 23.1298 -
 23.1299 -	HYPERVISOR_vm_assist(VMASST_CMD_enable,
 23.1300 -			     VMASST_TYPE_4gb_segments);
 23.1301 -
 23.1302 -	pm_idle = xen_cpu_idle;
 23.1303 -
 23.1304 -	memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data));
 23.1305 -	early_cpu_init();
 23.1306 -
 23.1307 -	/*
 23.1308 -	 * FIXME: This isn't an official loader_type right
 23.1309 -	 * now but does currently work with elilo.
 23.1310 -	 * If we were configured as an EFI kernel, check to make
 23.1311 -	 * sure that we were loaded correctly from elilo and that
 23.1312 -	 * the system table is valid.  If not, then initialize normally.
 23.1313 -	 */
 23.1314 -#ifdef CONFIG_EFI
 23.1315 -	if ((LOADER_TYPE == 0x50) && EFI_SYSTAB)
 23.1316 -		efi_enabled = 1;
 23.1317 -#endif
 23.1318 -
 23.1319 - 	ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); /*old_decode_dev(ORIG_ROOT_DEV);*/
 23.1320 - 	drive_info = DRIVE_INFO;
 23.1321 - 	screen_info = SCREEN_INFO;
 23.1322 -	edid_info = EDID_INFO;
 23.1323 -	apm_info.bios = APM_BIOS_INFO;
 23.1324 -	ist_info = IST_INFO;
 23.1325 -	saved_videomode = VIDEO_MODE;
 23.1326 -	if( SYS_DESC_TABLE.length != 0 ) {
 23.1327 -		MCA_bus = SYS_DESC_TABLE.table[3] &0x2;
 23.1328 -		machine_id = SYS_DESC_TABLE.table[0];
 23.1329 -		machine_submodel_id = SYS_DESC_TABLE.table[1];
 23.1330 -		BIOS_revision = SYS_DESC_TABLE.table[2];
 23.1331 -	}
 23.1332 -	aux_device_present = AUX_DEVICE_INFO;
 23.1333 -
 23.1334 -#ifdef CONFIG_XEN_PHYSDEV_ACCESS
 23.1335 -	/* This is drawn from a dump from vgacon:startup in standard Linux. */
 23.1336 -	screen_info.orig_video_mode = 3; 
 23.1337 -	screen_info.orig_video_isVGA = 1;
 23.1338 -	screen_info.orig_video_lines = 25;
 23.1339 -	screen_info.orig_video_cols = 80;
 23.1340 -	screen_info.orig_video_ega_bx = 3;
 23.1341 -	screen_info.orig_video_points = 16;
 23.1342 -#endif
 23.1343 -
 23.1344 -#ifdef CONFIG_BLK_DEV_RAM
 23.1345 -	rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK;
 23.1346 -	rd_prompt = ((RAMDISK_FLAGS & RAMDISK_PROMPT_FLAG) != 0);
 23.1347 -	rd_doload = ((RAMDISK_FLAGS & RAMDISK_LOAD_FLAG) != 0);
 23.1348 -#endif
 23.1349 -	ARCH_SETUP
 23.1350 -	if (efi_enabled)
 23.1351 -		efi_init();
 23.1352 -	else {
 23.1353 -		printk(KERN_INFO "BIOS-provided physical RAM map:\n");
 23.1354 -		print_memory_map(machine_specific_memory_setup());
 23.1355 -	}
 23.1356 -
 23.1357 -	copy_edd();
 23.1358 -
 23.1359 -	if (!MOUNT_ROOT_RDONLY)
 23.1360 -		root_mountflags &= ~MS_RDONLY;
 23.1361 -	init_mm.start_code = (unsigned long) _text;
 23.1362 -	init_mm.end_code = (unsigned long) _etext;
 23.1363 -	init_mm.end_data = (unsigned long) _edata;
 23.1364 -	init_mm.brk = (PFN_UP(__pa(xen_start_info.pt_base)) + xen_start_info.nr_pt_frames) << PAGE_SHIFT;
 23.1365 -
 23.1366 -	code_resource.start = virt_to_phys(_text);
 23.1367 -	code_resource.end = virt_to_phys(_etext)-1;
 23.1368 -	data_resource.start = virt_to_phys(_etext);
 23.1369 -	data_resource.end = virt_to_phys(_edata)-1;
 23.1370 -
 23.1371 -	parse_cmdline_early(cmdline_p);
 23.1372 -
 23.1373 -	max_low_pfn = setup_memory();
 23.1374 -
 23.1375 -	/*
 23.1376 -	 * NOTE: before this point _nobody_ is allowed to allocate
 23.1377 -	 * any memory using the bootmem allocator.
 23.1378 -	 */
 23.1379 -
 23.1380 -#ifdef CONFIG_SMP
 23.1381 -	smp_alloc_memory(); /* AP processor realmode stacks in low memory*/
 23.1382 -#endif
 23.1383 -	paging_init();
 23.1384 -
 23.1385 -	pfn_to_mfn_frame_list = alloc_bootmem_low_pages(PAGE_SIZE);
 23.1386 -	for ( i=0, j=0; i < max_pfn; i+=(PAGE_SIZE/sizeof(unsigned long)), j++ )
 23.1387 -	{	
 23.1388 -	     pfn_to_mfn_frame_list[j] = 
 23.1389 -		  virt_to_machine(&phys_to_machine_mapping[i]) >> PAGE_SHIFT;
 23.1390 -	}
 23.1391 -	HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list =
 23.1392 -	     virt_to_machine(pfn_to_mfn_frame_list) >> PAGE_SHIFT;
 23.1393 -
 23.1394 -
 23.1395 -#ifdef CONFIG_EARLY_PRINTK
 23.1396 -	{
 23.1397 -		char *s = strstr(*cmdline_p, "earlyprintk=");
 23.1398 -		if (s) {
 23.1399 -			extern void setup_early_printk(char *);
 23.1400 -
 23.1401 -			setup_early_printk(s);
 23.1402 -			printk("early console enabled\n");
 23.1403 -		}
 23.1404 -	}
 23.1405 -#endif
 23.1406 -
 23.1407 -
 23.1408 -	dmi_scan_machine();
 23.1409 -
 23.1410 -#ifdef CONFIG_X86_GENERICARCH
 23.1411 -	generic_apic_probe(*cmdline_p);
 23.1412 -#endif	
 23.1413 -	if (efi_enabled)
 23.1414 -		efi_map_memmap();
 23.1415 -
 23.1416 -	/*
 23.1417 -	 * Parse the ACPI tables for possible boot-time SMP configuration.
 23.1418 -	 */
 23.1419 -	acpi_boot_init();
 23.1420 -
 23.1421 -#ifdef CONFIG_X86_LOCAL_APIC
 23.1422 -	if (smp_found_config)
 23.1423 -		get_smp_config();
 23.1424 -#endif
 23.1425 -
 23.1426 -	register_memory(max_low_pfn);
 23.1427 -
 23.1428 -	/* If we are a privileged guest OS then we should request IO privs. */
 23.1429 -	if (xen_start_info.flags & SIF_PRIVILEGED) {
 23.1430 -		dom0_op_t op;
 23.1431 -		op.cmd           = DOM0_IOPL;
 23.1432 -		op.u.iopl.domain = DOMID_SELF;
 23.1433 -		op.u.iopl.iopl   = 1;
 23.1434 -		if (HYPERVISOR_dom0_op(&op) != 0)
 23.1435 -			panic("Unable to obtain IOPL, despite SIF_PRIVILEGED");
 23.1436 -		current->thread.io_pl = 1;
 23.1437 -	}
 23.1438 -
 23.1439 -	if (xen_start_info.flags & SIF_INITDOMAIN) {
 23.1440 -		if (!(xen_start_info.flags & SIF_PRIVILEGED))
 23.1441 -			panic("Xen granted us console access "
 23.1442 -			      "but not privileged status");
 23.1443 -
 23.1444 -#ifdef CONFIG_VT
 23.1445 -#if defined(CONFIG_VGA_CONSOLE)
 23.1446 -		if (!efi_enabled ||
 23.1447 -		    (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY))
 23.1448 -			conswitchp = &vga_con;
 23.1449 -#elif defined(CONFIG_DUMMY_CONSOLE)
 23.1450 -		conswitchp = &dummy_con;
 23.1451 -#endif
 23.1452 -#endif
 23.1453 -	} else {
 23.1454 -#ifdef CONFIG_XEN_PRIVILEGED_GUEST
 23.1455 -		extern const struct consw xennull_con;
 23.1456 -		extern int console_use_vt;
 23.1457 -#if defined(CONFIG_VGA_CONSOLE)
 23.1458 -		/* disable VGA driver */
 23.1459 -		ORIG_VIDEO_ISVGA = VIDEO_TYPE_VLFB;
 23.1460 -#endif
 23.1461 -		conswitchp = &xennull_con;
 23.1462 -		console_use_vt = 0;
 23.1463 -#endif
 23.1464 -	}
 23.1465 -}
 23.1466 -
 23.1467 -#include "setup_arch_post.h"
 23.1468 -/*
 23.1469 - * Local Variables:
 23.1470 - * mode:c
 23.1471 - * c-file-style:"k&r"
 23.1472 - * c-basic-offset:8
 23.1473 - * End:
 23.1474 - */
    24.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/signal.c	Mon Oct 25 12:45:34 2004 +0000
    24.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.3 @@ -1,628 +0,0 @@
    24.4 -/*
    24.5 - *  linux/arch/i386/kernel/signal.c
    24.6 - *
    24.7 - *  Copyright (C) 1991, 1992  Linus Torvalds
    24.8 - *
    24.9 - *  1997-11-28  Modified for POSIX.1b signals by Richard Henderson
   24.10 - *  2000-06-20  Pentium III FXSR, SSE support by Gareth Hughes
   24.11 - */
   24.12 -
   24.13 -#include <linux/sched.h>
   24.14 -#include <linux/mm.h>
   24.15 -#include <linux/smp.h>
   24.16 -#include <linux/smp_lock.h>
   24.17 -#include <linux/kernel.h>
   24.18 -#include <linux/signal.h>
   24.19 -#include <linux/errno.h>
   24.20 -#include <linux/wait.h>
   24.21 -#include <linux/unistd.h>
   24.22 -#include <linux/stddef.h>
   24.23 -#include <linux/personality.h>
   24.24 -#include <linux/suspend.h>
   24.25 -#include <linux/elf.h>
   24.26 -#include <asm/processor.h>
   24.27 -#include <asm/ucontext.h>
   24.28 -#include <asm/uaccess.h>
   24.29 -#include <asm/i387.h>
   24.30 -#include "sigframe.h"
   24.31 -
   24.32 -#define DEBUG_SIG 0
   24.33 -
   24.34 -#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
   24.35 -
   24.36 -/*
   24.37 - * Atomically swap in the new signal mask, and wait for a signal.
   24.38 - */
   24.39 -asmlinkage int
   24.40 -sys_sigsuspend(int history0, int history1, old_sigset_t mask)
   24.41 -{
   24.42 -	struct pt_regs * regs = (struct pt_regs *) &history0;
   24.43 -	sigset_t saveset;
   24.44 -
   24.45 -	mask &= _BLOCKABLE;
   24.46 -	spin_lock_irq(&current->sighand->siglock);
   24.47 -	saveset = current->blocked;
   24.48 -	siginitset(&current->blocked, mask);
   24.49 -	recalc_sigpending();
   24.50 -	spin_unlock_irq(&current->sighand->siglock);
   24.51 -
   24.52 -	regs->eax = -EINTR;
   24.53 -	while (1) {
   24.54 -		current->state = TASK_INTERRUPTIBLE;
   24.55 -		schedule();
   24.56 -		if (do_signal(regs, &saveset))
   24.57 <