ia64/xen-unstable

changeset 3484:610068179f96

bitkeeper revision 1.1159.212.24 (41f26e32I9xLcTR7BS9n8xcvRPkmCQ)

Merge ssh://srg//auto/groups/xeno/BK/xeno.bk
into equilibrium.research:/home/irchomes/mwilli2/src/xen-3.0-devel.bk
author mwilli2@equilibrium.research
date Sat Jan 22 15:16:02 2005 +0000 (2005-01-22)
parents 3ced9b0f4dab 910d464ee588
children 4e64b8deb0d4
files .rootkeys docs/src/user.tex linux-2.4.28-xen-sparse/Makefile linux-2.4.28-xen-sparse/arch/xen/Makefile linux-2.4.28-xen-sparse/arch/xen/boot/Makefile linux-2.4.28-xen-sparse/arch/xen/config.in linux-2.4.28-xen-sparse/arch/xen/defconfig-xen0 linux-2.4.28-xen-sparse/arch/xen/defconfig-xenU linux-2.4.28-xen-sparse/arch/xen/drivers/balloon/Makefile linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/Makefile linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/backend/Makefile linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/frontend/Makefile linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/frontend/common.h linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/frontend/vbd.c linux-2.4.28-xen-sparse/arch/xen/drivers/console/Makefile linux-2.4.28-xen-sparse/arch/xen/drivers/dom0/Makefile linux-2.4.28-xen-sparse/arch/xen/drivers/evtchn/Makefile linux-2.4.28-xen-sparse/arch/xen/drivers/netif/Makefile linux-2.4.28-xen-sparse/arch/xen/drivers/netif/backend/Makefile linux-2.4.28-xen-sparse/arch/xen/drivers/netif/frontend/Makefile linux-2.4.28-xen-sparse/arch/xen/kernel/Makefile linux-2.4.28-xen-sparse/arch/xen/kernel/entry.S linux-2.4.28-xen-sparse/arch/xen/kernel/head.S linux-2.4.28-xen-sparse/arch/xen/kernel/i386_ksyms.c linux-2.4.28-xen-sparse/arch/xen/kernel/irq.c linux-2.4.28-xen-sparse/arch/xen/kernel/ldt.c linux-2.4.28-xen-sparse/arch/xen/kernel/pci-pc.c linux-2.4.28-xen-sparse/arch/xen/kernel/process.c linux-2.4.28-xen-sparse/arch/xen/kernel/setup.c linux-2.4.28-xen-sparse/arch/xen/kernel/signal.c linux-2.4.28-xen-sparse/arch/xen/kernel/time.c linux-2.4.28-xen-sparse/arch/xen/kernel/traps.c linux-2.4.28-xen-sparse/arch/xen/lib/Makefile linux-2.4.28-xen-sparse/arch/xen/lib/delay.c linux-2.4.28-xen-sparse/arch/xen/mm/Makefile linux-2.4.28-xen-sparse/arch/xen/mm/fault.c linux-2.4.28-xen-sparse/arch/xen/mm/init.c linux-2.4.28-xen-sparse/arch/xen/mm/ioremap.c linux-2.4.28-xen-sparse/arch/xen/vmlinux.lds linux-2.4.28-xen-sparse/drivers/block/ll_rw_blk.c linux-2.4.28-xen-sparse/drivers/char/Makefile linux-2.4.28-xen-sparse/drivers/char/mem.c linux-2.4.28-xen-sparse/drivers/char/tty_io.c linux-2.4.28-xen-sparse/drivers/scsi/aic7xxx/Makefile linux-2.4.28-xen-sparse/fs/exec.c linux-2.4.28-xen-sparse/include/asm-xen/bugs.h linux-2.4.28-xen-sparse/include/asm-xen/desc.h linux-2.4.28-xen-sparse/include/asm-xen/fixmap.h linux-2.4.28-xen-sparse/include/asm-xen/highmem.h linux-2.4.28-xen-sparse/include/asm-xen/hw_irq.h linux-2.4.28-xen-sparse/include/asm-xen/io.h linux-2.4.28-xen-sparse/include/asm-xen/irq.h linux-2.4.28-xen-sparse/include/asm-xen/keyboard.h linux-2.4.28-xen-sparse/include/asm-xen/mmu_context.h linux-2.4.28-xen-sparse/include/asm-xen/module.h linux-2.4.28-xen-sparse/include/asm-xen/page.h linux-2.4.28-xen-sparse/include/asm-xen/pci.h linux-2.4.28-xen-sparse/include/asm-xen/pgalloc.h linux-2.4.28-xen-sparse/include/asm-xen/pgtable-2level.h linux-2.4.28-xen-sparse/include/asm-xen/pgtable.h linux-2.4.28-xen-sparse/include/asm-xen/processor.h linux-2.4.28-xen-sparse/include/asm-xen/queues.h linux-2.4.28-xen-sparse/include/asm-xen/segment.h linux-2.4.28-xen-sparse/include/asm-xen/smp.h linux-2.4.28-xen-sparse/include/asm-xen/synch_bitops.h linux-2.4.28-xen-sparse/include/asm-xen/system.h linux-2.4.28-xen-sparse/include/asm-xen/vga.h linux-2.4.28-xen-sparse/include/asm-xen/xor.h linux-2.4.28-xen-sparse/include/linux/blk.h linux-2.4.28-xen-sparse/include/linux/irq.h linux-2.4.28-xen-sparse/include/linux/mm.h linux-2.4.28-xen-sparse/include/linux/sched.h linux-2.4.28-xen-sparse/include/linux/skbuff.h linux-2.4.28-xen-sparse/include/linux/timer.h linux-2.4.28-xen-sparse/kernel/time.c linux-2.4.28-xen-sparse/kernel/timer.c linux-2.4.28-xen-sparse/mkbuildtree linux-2.4.28-xen-sparse/mm/highmem.c linux-2.4.28-xen-sparse/mm/memory.c linux-2.4.28-xen-sparse/mm/mprotect.c linux-2.4.28-xen-sparse/mm/mremap.c linux-2.4.28-xen-sparse/mm/page_alloc.c linux-2.4.28-xen-sparse/mm/swapfile.c linux-2.4.28-xen-sparse/mm/vmalloc.c linux-2.4.28-xen-sparse/net/core/skbuff.c linux-2.4.29-xen-sparse/Makefile linux-2.4.29-xen-sparse/arch/xen/Makefile linux-2.4.29-xen-sparse/arch/xen/boot/Makefile linux-2.4.29-xen-sparse/arch/xen/config.in linux-2.4.29-xen-sparse/arch/xen/defconfig-xen0 linux-2.4.29-xen-sparse/arch/xen/defconfig-xenU linux-2.4.29-xen-sparse/arch/xen/drivers/balloon/Makefile linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/Makefile linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/backend/Makefile linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/frontend/Makefile linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/frontend/common.h linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/frontend/vbd.c linux-2.4.29-xen-sparse/arch/xen/drivers/console/Makefile linux-2.4.29-xen-sparse/arch/xen/drivers/dom0/Makefile linux-2.4.29-xen-sparse/arch/xen/drivers/evtchn/Makefile linux-2.4.29-xen-sparse/arch/xen/drivers/netif/Makefile linux-2.4.29-xen-sparse/arch/xen/drivers/netif/backend/Makefile linux-2.4.29-xen-sparse/arch/xen/drivers/netif/frontend/Makefile linux-2.4.29-xen-sparse/arch/xen/kernel/Makefile linux-2.4.29-xen-sparse/arch/xen/kernel/entry.S linux-2.4.29-xen-sparse/arch/xen/kernel/head.S linux-2.4.29-xen-sparse/arch/xen/kernel/i386_ksyms.c linux-2.4.29-xen-sparse/arch/xen/kernel/irq.c linux-2.4.29-xen-sparse/arch/xen/kernel/ldt.c linux-2.4.29-xen-sparse/arch/xen/kernel/pci-pc.c linux-2.4.29-xen-sparse/arch/xen/kernel/process.c linux-2.4.29-xen-sparse/arch/xen/kernel/setup.c linux-2.4.29-xen-sparse/arch/xen/kernel/signal.c linux-2.4.29-xen-sparse/arch/xen/kernel/time.c linux-2.4.29-xen-sparse/arch/xen/kernel/traps.c linux-2.4.29-xen-sparse/arch/xen/lib/Makefile linux-2.4.29-xen-sparse/arch/xen/lib/delay.c linux-2.4.29-xen-sparse/arch/xen/mm/Makefile linux-2.4.29-xen-sparse/arch/xen/mm/fault.c linux-2.4.29-xen-sparse/arch/xen/mm/init.c linux-2.4.29-xen-sparse/arch/xen/mm/ioremap.c linux-2.4.29-xen-sparse/arch/xen/vmlinux.lds linux-2.4.29-xen-sparse/drivers/block/ll_rw_blk.c linux-2.4.29-xen-sparse/drivers/char/Makefile linux-2.4.29-xen-sparse/drivers/char/mem.c linux-2.4.29-xen-sparse/drivers/char/tty_io.c linux-2.4.29-xen-sparse/drivers/scsi/aic7xxx/Makefile linux-2.4.29-xen-sparse/fs/exec.c linux-2.4.29-xen-sparse/include/asm-xen/bugs.h linux-2.4.29-xen-sparse/include/asm-xen/desc.h linux-2.4.29-xen-sparse/include/asm-xen/fixmap.h linux-2.4.29-xen-sparse/include/asm-xen/highmem.h linux-2.4.29-xen-sparse/include/asm-xen/hw_irq.h linux-2.4.29-xen-sparse/include/asm-xen/io.h linux-2.4.29-xen-sparse/include/asm-xen/irq.h linux-2.4.29-xen-sparse/include/asm-xen/keyboard.h linux-2.4.29-xen-sparse/include/asm-xen/mmu_context.h linux-2.4.29-xen-sparse/include/asm-xen/module.h linux-2.4.29-xen-sparse/include/asm-xen/page.h linux-2.4.29-xen-sparse/include/asm-xen/pci.h linux-2.4.29-xen-sparse/include/asm-xen/pgalloc.h linux-2.4.29-xen-sparse/include/asm-xen/pgtable-2level.h linux-2.4.29-xen-sparse/include/asm-xen/pgtable.h linux-2.4.29-xen-sparse/include/asm-xen/processor.h linux-2.4.29-xen-sparse/include/asm-xen/queues.h linux-2.4.29-xen-sparse/include/asm-xen/segment.h linux-2.4.29-xen-sparse/include/asm-xen/smp.h linux-2.4.29-xen-sparse/include/asm-xen/synch_bitops.h linux-2.4.29-xen-sparse/include/asm-xen/system.h linux-2.4.29-xen-sparse/include/asm-xen/vga.h linux-2.4.29-xen-sparse/include/asm-xen/xor.h linux-2.4.29-xen-sparse/include/linux/blk.h linux-2.4.29-xen-sparse/include/linux/irq.h linux-2.4.29-xen-sparse/include/linux/mm.h linux-2.4.29-xen-sparse/include/linux/sched.h linux-2.4.29-xen-sparse/include/linux/skbuff.h linux-2.4.29-xen-sparse/include/linux/timer.h linux-2.4.29-xen-sparse/kernel/time.c linux-2.4.29-xen-sparse/kernel/timer.c linux-2.4.29-xen-sparse/mkbuildtree linux-2.4.29-xen-sparse/mm/highmem.c linux-2.4.29-xen-sparse/mm/memory.c linux-2.4.29-xen-sparse/mm/mprotect.c linux-2.4.29-xen-sparse/mm/mremap.c linux-2.4.29-xen-sparse/mm/page_alloc.c linux-2.4.29-xen-sparse/mm/swapfile.c linux-2.4.29-xen-sparse/mm/vmalloc.c linux-2.4.29-xen-sparse/net/core/skbuff.c linux-2.6.10-xen-sparse/arch/xen/i386/kernel/time.c linux-2.6.10-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c linux-2.6.10-xen-sparse/drivers/xen/console/console.c tools/xcs/xcs.c xen/arch/x86/dom0_ops.c xen/arch/x86/domain.c xen/arch/x86/e820.c xen/arch/x86/memory.c xen/common/Makefile xen/common/dom0_ops.c xen/common/domain.c xen/common/elf.c xen/common/keyhandler.c xen/common/schedule.c xen/common/softirq.c xen/drivers/char/console.c xen/drivers/char/serial.c xen/include/asm-x86/mm.h xen/include/public/arch-x86_32.h xen/include/public/arch-x86_64.h xen/include/public/xen.h xen/include/xen/domain.h xen/include/xen/grant_table.h xen/include/xen/slab.h
line diff
     1.1 --- a/.rootkeys	Wed Jan 19 13:20:15 2005 +0000
     1.2 +++ b/.rootkeys	Sat Jan 22 15:16:02 2005 +0000
     1.3 @@ -45,24 +45,6 @@ 3f815145CB8XdPUqsmhAjSDFuwOoqA extras/mi
     1.4  3f815145vGYx1WY79voKkZB9yKwJKQ extras/mini-os/time.c
     1.5  3f815145xlKBAQmal9oces3G_Mvxqw extras/mini-os/traps.c
     1.6  4187ca95_eQN62ugV1zliQcfzXrHnw install.sh
     1.7 -3e5a4e6589G-U42lFKs43plskXoFxQ linux-2.4.28-xen-sparse/Makefile
     1.8 -3e5a4e65IEPjnWPZ5w3TxS5scV8Ewg linux-2.4.28-xen-sparse/arch/xen/Makefile
     1.9 -3e5a4e65n-KhsEAs-A4ULiStBp-r6w linux-2.4.28-xen-sparse/arch/xen/boot/Makefile
    1.10 -3e5a4e65OV_j_DBtjzt5vej771AJsA linux-2.4.28-xen-sparse/arch/xen/config.in
    1.11 -40648526SxcA4lGIHB_k7ID8VlRSzw linux-2.4.28-xen-sparse/arch/xen/defconfig-xen0
    1.12 -40c73c77QesbL7eIvG-fJGAtVwhGRg linux-2.4.28-xen-sparse/arch/xen/defconfig-xenU
    1.13 -3e6377f5xwPfYZkPHPrDbEq1PRN7uQ linux-2.4.28-xen-sparse/arch/xen/drivers/balloon/Makefile
    1.14 -4083dc16z0jvZEH4PiVDbDRreaNp6w linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/Makefile
    1.15 -4083dc16KQus88a4U3uCV6qVCA6_8Q linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/backend/Makefile
    1.16 -4075806dI5kfeMD5RV-DA0PYoThx_w linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/frontend/Makefile
    1.17 -4075806d4-j7vN0Mn0bklI1cRUX1vQ linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/frontend/common.h
    1.18 -4075806dibjCcfuXv6CINMhxWTw3jQ linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/frontend/vbd.c
    1.19 -3e5a4e65G3e2s0ghPMgiJ-gBTUJ0uQ linux-2.4.28-xen-sparse/arch/xen/drivers/console/Makefile
    1.20 -3e5a4e656nfFISThfbyXQOA6HN6YHw linux-2.4.28-xen-sparse/arch/xen/drivers/dom0/Makefile
    1.21 -40420a6ebRqDjufoN1WSJvolEW2Wjw linux-2.4.28-xen-sparse/arch/xen/drivers/evtchn/Makefile
    1.22 -4083dc16-Kd5y9psK_yk161sme5j5Q linux-2.4.28-xen-sparse/arch/xen/drivers/netif/Makefile
    1.23 -4083dc16UmHXxS9g_UFVnkUpN-oP2Q linux-2.4.28-xen-sparse/arch/xen/drivers/netif/backend/Makefile
    1.24 -405853f2wg7JXZJNltspMwOZJklxgw linux-2.4.28-xen-sparse/arch/xen/drivers/netif/frontend/Makefile
    1.25  41ee5e8b_2rt-qHzbDXtIoBzOli0EA linux-2.4.28-xen-sparse/arch/xen/drivers/usbif/Makefile
    1.26  41ee5e8bUhF4tH7OoJaVbUxdXqneVw linux-2.4.28-xen-sparse/arch/xen/drivers/usbif/backend/Makefile
    1.27  41ee5e8bYDQkjRVKnFn5uFyy0KreCw linux-2.4.28-xen-sparse/arch/xen/drivers/usbif/backend/common.h
    1.28 @@ -73,72 +55,90 @@ 41ee5e8bSPpxzhGO6TrY20TegW3cZg linux-2.4
    1.29  41ee5e8ckZ9xVNvu9NHIZDK7JqApmQ linux-2.4.28-xen-sparse/arch/xen/drivers/usbif/frontend/main.c
    1.30  41ee5e8ck9scpGirfqEZRARbGDyTXA linux-2.4.28-xen-sparse/arch/xen/drivers/usbif/frontend/xhci.h
    1.31  41ee5e8c6mLxIx82KPsbpt_uts_vSA linux-2.4.28-xen-sparse/arch/xen/drivers/usbif/usbif.h
    1.32 -3e5a4e65lWzkiPXsZdzPt2RNnJGG1g linux-2.4.28-xen-sparse/arch/xen/kernel/Makefile
    1.33 -3e5a4e65_hqfuxtGG8IUy6wRM86Ecg linux-2.4.28-xen-sparse/arch/xen/kernel/entry.S
    1.34 -3e5a4e65Hy_1iUvMTPsNqGNXd9uFpg linux-2.4.28-xen-sparse/arch/xen/kernel/head.S
    1.35 -3e5a4e65RMGcuA-HCn3-wNx3fFQwdg linux-2.4.28-xen-sparse/arch/xen/kernel/i386_ksyms.c
    1.36 -3e5a4e653U6cELGv528IxOLHvCq8iA linux-2.4.28-xen-sparse/arch/xen/kernel/irq.c
    1.37 -3e5a4e65muT6SU3ck47IP87Q7Ti5hA linux-2.4.28-xen-sparse/arch/xen/kernel/ldt.c
    1.38 -4051db95N9N99FjsRwi49YKUNHWI8A linux-2.4.28-xen-sparse/arch/xen/kernel/pci-pc.c
    1.39 -3e5a4e65IGt3WwQDNiL4h-gYWgNTWQ linux-2.4.28-xen-sparse/arch/xen/kernel/process.c
    1.40 -3e5a4e66tR-qJMLj3MppcKqmvuI2XQ linux-2.4.28-xen-sparse/arch/xen/kernel/setup.c
    1.41 -3e5a4e66fWSTagLGU2P8BGFGRjhDiw linux-2.4.28-xen-sparse/arch/xen/kernel/signal.c
    1.42 -3e5a4e66N__lUXNwzQ-eADRzK9LXuQ linux-2.4.28-xen-sparse/arch/xen/kernel/time.c
    1.43 -3e5a4e66aHCbQ_F5QZ8VeyikLmuRZQ linux-2.4.28-xen-sparse/arch/xen/kernel/traps.c
    1.44 -3e5a4e66-9_NczrVMbuQkoSLyXckIw linux-2.4.28-xen-sparse/arch/xen/lib/Makefile
    1.45 -3e5a4e6637ZDk0BvFEC-aFQs599-ng linux-2.4.28-xen-sparse/arch/xen/lib/delay.c
    1.46 -3e5a4e66croVgpcJyJuF2ycQw0HuJw linux-2.4.28-xen-sparse/arch/xen/mm/Makefile
    1.47 -3e5a4e66l8Q5Tv-6B3lQIRmaVbFPzg linux-2.4.28-xen-sparse/arch/xen/mm/fault.c
    1.48 -3e5a4e661gLzzff25pJooKIIWe7IWg linux-2.4.28-xen-sparse/arch/xen/mm/init.c
    1.49 -3f0bed43UUdQichXAiVNrjV-y2Kzcg linux-2.4.28-xen-sparse/arch/xen/mm/ioremap.c
    1.50 -3e5a4e66qRlSTcjafidMB6ulECADvg linux-2.4.28-xen-sparse/arch/xen/vmlinux.lds
    1.51 -3e5a4e66mrtlmV75L1tjKDg8RaM5gA linux-2.4.28-xen-sparse/drivers/block/ll_rw_blk.c
    1.52 -40d70c24-Dy2HUMrwSZagfXvAPnI4w linux-2.4.28-xen-sparse/drivers/char/Makefile
    1.53 -3f108aeaLcGDgQdFAANLTUEid0a05w linux-2.4.28-xen-sparse/drivers/char/mem.c
    1.54 -3e5a4e66rw65CxyolW9PKz4GG42RcA linux-2.4.28-xen-sparse/drivers/char/tty_io.c
    1.55 -40c9c0c1pPwYE3-4i-oI3ubUu7UgvQ linux-2.4.28-xen-sparse/drivers/scsi/aic7xxx/Makefile
    1.56  41ee5e8c__abdO50ZtQjPeSa5VN2dg linux-2.4.28-xen-sparse/drivers/usb/hcd.c
    1.57 -3e5a4e669uzIE54VwucPYtGwXLAbzA linux-2.4.28-xen-sparse/fs/exec.c
    1.58 -3e5a4e66wbeCpsJgVf_U8Jde-CNcsA linux-2.4.28-xen-sparse/include/asm-xen/bugs.h
    1.59 -3e5a4e66HdSkvIV6SJ1evG_xmTmXHA linux-2.4.28-xen-sparse/include/asm-xen/desc.h
    1.60 -3e5a4e66SYp_UpAVcF8Lc1wa3Qtgzw linux-2.4.28-xen-sparse/include/asm-xen/fixmap.h
    1.61 -406aeeaaQvl4RNtmd9hDEugBURbFpQ linux-2.4.28-xen-sparse/include/asm-xen/highmem.h
    1.62 -3e5a4e67YtcyDLQsShhCfQwPSELfvA linux-2.4.28-xen-sparse/include/asm-xen/hw_irq.h
    1.63 -4060044fVx7-tokvNLKBf_6qBB4lqQ linux-2.4.28-xen-sparse/include/asm-xen/io.h
    1.64 -3e5a4e673p7PEOyHFm3nHkYX6HQYBg linux-2.4.28-xen-sparse/include/asm-xen/irq.h
    1.65 -40d70c240tW7TWArl1VUgIFH2nVO1A linux-2.4.28-xen-sparse/include/asm-xen/keyboard.h
    1.66 -3e5a4e678ddsQOpbSiRdy1GRcDc9WA linux-2.4.28-xen-sparse/include/asm-xen/mmu_context.h
    1.67 -40d06e5b2YWInUX1Xv9amVANwd_2Xg linux-2.4.28-xen-sparse/include/asm-xen/module.h
    1.68 -3e5a4e67mnQfh-R8KcQCaVo2Oho6yg linux-2.4.28-xen-sparse/include/asm-xen/page.h
    1.69 -409ba2e7ZfV5hqTvIzxLtpClnxtIzg linux-2.4.28-xen-sparse/include/asm-xen/pci.h
    1.70 -3e5a4e67uTYU5oEnIDjxuaez8njjqg linux-2.4.28-xen-sparse/include/asm-xen/pgalloc.h
    1.71 -3e5a4e67X7JyupgdYkgDX19Huj2sAw linux-2.4.28-xen-sparse/include/asm-xen/pgtable-2level.h
    1.72 -3e5a4e67gr4NLGtQ5CvSLimMYZlkOA linux-2.4.28-xen-sparse/include/asm-xen/pgtable.h
    1.73 -3e5a4e676uK4xErTBDH6XJREn9LSyg linux-2.4.28-xen-sparse/include/asm-xen/processor.h
    1.74 -41224663YBCUMX1kVo_HRUtgaHTi7w linux-2.4.28-xen-sparse/include/asm-xen/queues.h
    1.75 -3e5a4e68uJz-xI0IBVMD7xRLQKJDFg linux-2.4.28-xen-sparse/include/asm-xen/segment.h
    1.76 -3e5a4e68Nfdh6QcOKUTGCaYkf2LmYA linux-2.4.28-xen-sparse/include/asm-xen/smp.h
    1.77 -4062f7e2PzFOUGT0PaE7A0VprTU3JQ linux-2.4.28-xen-sparse/include/asm-xen/synch_bitops.h
    1.78 -3e5a4e68mTr0zcp9SXDbnd-XLrrfxw linux-2.4.28-xen-sparse/include/asm-xen/system.h
    1.79 -3f1056a9L_kqHcFheV00KbKBzv9j5w linux-2.4.28-xen-sparse/include/asm-xen/vga.h
    1.80 -40659defgWA92arexpMGn8X3QMDj3w linux-2.4.28-xen-sparse/include/asm-xen/xor.h
    1.81 -3f056927gMHl7mWB89rb73JahbhQIA linux-2.4.28-xen-sparse/include/linux/blk.h
    1.82 -419e0488SBzS3mdUhwgsES5a5e3abA linux-2.4.28-xen-sparse/include/linux/irq.h
    1.83 -4124f66fPHG6yvB_vXmesjvzrJ3yMg linux-2.4.28-xen-sparse/include/linux/mm.h
    1.84 -401c0590D_kwJDU59X8NyvqSv_Cl2A linux-2.4.28-xen-sparse/include/linux/sched.h
    1.85 -40a248afgI0_JKthdYAe8beVfXSTpQ linux-2.4.28-xen-sparse/include/linux/skbuff.h
    1.86 -401c0592pLrp_aCbQRo9GXiYQQaVVA linux-2.4.28-xen-sparse/include/linux/timer.h
    1.87 -3f9d4b44247udoqWEgFkaHiWv6Uvyg linux-2.4.28-xen-sparse/kernel/time.c
    1.88 -401c059bjLBFYHRD4Py2uM3eA1D4zQ linux-2.4.28-xen-sparse/kernel/timer.c
    1.89 -3e6e7c1efbQe93xCvOpOVCnXTMmQ5w linux-2.4.28-xen-sparse/mkbuildtree
    1.90 -406aeeafkrnCuIVWLFv3kfn4uAD5Eg linux-2.4.28-xen-sparse/mm/highmem.c
    1.91 -3e5a4e68GxCIaFH4sy01v1wjapetaA linux-2.4.28-xen-sparse/mm/memory.c
    1.92 -3f108af5VxPkLv13tXpXgoRKALQtXQ linux-2.4.28-xen-sparse/mm/mprotect.c
    1.93 -3e5a4e681xMPdF9xCMwpyfuYMySU5g linux-2.4.28-xen-sparse/mm/mremap.c
    1.94 -409ba2e7akOFqQUg6Qyg2s28xcXiMg linux-2.4.28-xen-sparse/mm/page_alloc.c
    1.95 -3e5a4e683HKVU-sxtagrDasRB8eBVw linux-2.4.28-xen-sparse/mm/swapfile.c
    1.96 -41180721bNns9Na7w1nJ0ZVt8bhUNA linux-2.4.28-xen-sparse/mm/vmalloc.c
    1.97 -41505c57WAd5l1rlfCLNSCpx9J13vA linux-2.4.28-xen-sparse/net/core/skbuff.c
    1.98 +3e5a4e6589G-U42lFKs43plskXoFxQ linux-2.4.29-xen-sparse/Makefile
    1.99 +3e5a4e65IEPjnWPZ5w3TxS5scV8Ewg linux-2.4.29-xen-sparse/arch/xen/Makefile
   1.100 +3e5a4e65n-KhsEAs-A4ULiStBp-r6w linux-2.4.29-xen-sparse/arch/xen/boot/Makefile
   1.101 +3e5a4e65OV_j_DBtjzt5vej771AJsA linux-2.4.29-xen-sparse/arch/xen/config.in
   1.102 +40648526SxcA4lGIHB_k7ID8VlRSzw linux-2.4.29-xen-sparse/arch/xen/defconfig-xen0
   1.103 +40c73c77QesbL7eIvG-fJGAtVwhGRg linux-2.4.29-xen-sparse/arch/xen/defconfig-xenU
   1.104 +3e6377f5xwPfYZkPHPrDbEq1PRN7uQ linux-2.4.29-xen-sparse/arch/xen/drivers/balloon/Makefile
   1.105 +4083dc16z0jvZEH4PiVDbDRreaNp6w linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/Makefile
   1.106 +4083dc16KQus88a4U3uCV6qVCA6_8Q linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/backend/Makefile
   1.107 +4075806dI5kfeMD5RV-DA0PYoThx_w linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/frontend/Makefile
   1.108 +4075806d4-j7vN0Mn0bklI1cRUX1vQ linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/frontend/common.h
   1.109 +4075806dibjCcfuXv6CINMhxWTw3jQ linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/frontend/vbd.c
   1.110 +3e5a4e65G3e2s0ghPMgiJ-gBTUJ0uQ linux-2.4.29-xen-sparse/arch/xen/drivers/console/Makefile
   1.111 +3e5a4e656nfFISThfbyXQOA6HN6YHw linux-2.4.29-xen-sparse/arch/xen/drivers/dom0/Makefile
   1.112 +40420a6ebRqDjufoN1WSJvolEW2Wjw linux-2.4.29-xen-sparse/arch/xen/drivers/evtchn/Makefile
   1.113 +4083dc16-Kd5y9psK_yk161sme5j5Q linux-2.4.29-xen-sparse/arch/xen/drivers/netif/Makefile
   1.114 +4083dc16UmHXxS9g_UFVnkUpN-oP2Q linux-2.4.29-xen-sparse/arch/xen/drivers/netif/backend/Makefile
   1.115 +405853f2wg7JXZJNltspMwOZJklxgw linux-2.4.29-xen-sparse/arch/xen/drivers/netif/frontend/Makefile
   1.116 +3e5a4e65lWzkiPXsZdzPt2RNnJGG1g linux-2.4.29-xen-sparse/arch/xen/kernel/Makefile
   1.117 +3e5a4e65_hqfuxtGG8IUy6wRM86Ecg linux-2.4.29-xen-sparse/arch/xen/kernel/entry.S
   1.118 +3e5a4e65Hy_1iUvMTPsNqGNXd9uFpg linux-2.4.29-xen-sparse/arch/xen/kernel/head.S
   1.119 +3e5a4e65RMGcuA-HCn3-wNx3fFQwdg linux-2.4.29-xen-sparse/arch/xen/kernel/i386_ksyms.c
   1.120 +3e5a4e653U6cELGv528IxOLHvCq8iA linux-2.4.29-xen-sparse/arch/xen/kernel/irq.c
   1.121 +3e5a4e65muT6SU3ck47IP87Q7Ti5hA linux-2.4.29-xen-sparse/arch/xen/kernel/ldt.c
   1.122 +4051db95N9N99FjsRwi49YKUNHWI8A linux-2.4.29-xen-sparse/arch/xen/kernel/pci-pc.c
   1.123 +3e5a4e65IGt3WwQDNiL4h-gYWgNTWQ linux-2.4.29-xen-sparse/arch/xen/kernel/process.c
   1.124 +3e5a4e66tR-qJMLj3MppcKqmvuI2XQ linux-2.4.29-xen-sparse/arch/xen/kernel/setup.c
   1.125 +3e5a4e66fWSTagLGU2P8BGFGRjhDiw linux-2.4.29-xen-sparse/arch/xen/kernel/signal.c
   1.126 +3e5a4e66N__lUXNwzQ-eADRzK9LXuQ linux-2.4.29-xen-sparse/arch/xen/kernel/time.c
   1.127 +3e5a4e66aHCbQ_F5QZ8VeyikLmuRZQ linux-2.4.29-xen-sparse/arch/xen/kernel/traps.c
   1.128 +3e5a4e66-9_NczrVMbuQkoSLyXckIw linux-2.4.29-xen-sparse/arch/xen/lib/Makefile
   1.129 +3e5a4e6637ZDk0BvFEC-aFQs599-ng linux-2.4.29-xen-sparse/arch/xen/lib/delay.c
   1.130 +3e5a4e66croVgpcJyJuF2ycQw0HuJw linux-2.4.29-xen-sparse/arch/xen/mm/Makefile
   1.131 +3e5a4e66l8Q5Tv-6B3lQIRmaVbFPzg linux-2.4.29-xen-sparse/arch/xen/mm/fault.c
   1.132 +3e5a4e661gLzzff25pJooKIIWe7IWg linux-2.4.29-xen-sparse/arch/xen/mm/init.c
   1.133 +3f0bed43UUdQichXAiVNrjV-y2Kzcg linux-2.4.29-xen-sparse/arch/xen/mm/ioremap.c
   1.134 +3e5a4e66qRlSTcjafidMB6ulECADvg linux-2.4.29-xen-sparse/arch/xen/vmlinux.lds
   1.135 +3e5a4e66mrtlmV75L1tjKDg8RaM5gA linux-2.4.29-xen-sparse/drivers/block/ll_rw_blk.c
   1.136 +40d70c24-Dy2HUMrwSZagfXvAPnI4w linux-2.4.29-xen-sparse/drivers/char/Makefile
   1.137 +3f108aeaLcGDgQdFAANLTUEid0a05w linux-2.4.29-xen-sparse/drivers/char/mem.c
   1.138 +3e5a4e66rw65CxyolW9PKz4GG42RcA linux-2.4.29-xen-sparse/drivers/char/tty_io.c
   1.139 +40c9c0c1pPwYE3-4i-oI3ubUu7UgvQ linux-2.4.29-xen-sparse/drivers/scsi/aic7xxx/Makefile
   1.140 +3e5a4e669uzIE54VwucPYtGwXLAbzA linux-2.4.29-xen-sparse/fs/exec.c
   1.141 +3e5a4e66wbeCpsJgVf_U8Jde-CNcsA linux-2.4.29-xen-sparse/include/asm-xen/bugs.h
   1.142 +3e5a4e66HdSkvIV6SJ1evG_xmTmXHA linux-2.4.29-xen-sparse/include/asm-xen/desc.h
   1.143 +3e5a4e66SYp_UpAVcF8Lc1wa3Qtgzw linux-2.4.29-xen-sparse/include/asm-xen/fixmap.h
   1.144 +406aeeaaQvl4RNtmd9hDEugBURbFpQ linux-2.4.29-xen-sparse/include/asm-xen/highmem.h
   1.145 +3e5a4e67YtcyDLQsShhCfQwPSELfvA linux-2.4.29-xen-sparse/include/asm-xen/hw_irq.h
   1.146 +4060044fVx7-tokvNLKBf_6qBB4lqQ linux-2.4.29-xen-sparse/include/asm-xen/io.h
   1.147 +3e5a4e673p7PEOyHFm3nHkYX6HQYBg linux-2.4.29-xen-sparse/include/asm-xen/irq.h
   1.148 +40d70c240tW7TWArl1VUgIFH2nVO1A linux-2.4.29-xen-sparse/include/asm-xen/keyboard.h
   1.149 +3e5a4e678ddsQOpbSiRdy1GRcDc9WA linux-2.4.29-xen-sparse/include/asm-xen/mmu_context.h
   1.150 +40d06e5b2YWInUX1Xv9amVANwd_2Xg linux-2.4.29-xen-sparse/include/asm-xen/module.h
   1.151 +3e5a4e67mnQfh-R8KcQCaVo2Oho6yg linux-2.4.29-xen-sparse/include/asm-xen/page.h
   1.152 +409ba2e7ZfV5hqTvIzxLtpClnxtIzg linux-2.4.29-xen-sparse/include/asm-xen/pci.h
   1.153 +3e5a4e67uTYU5oEnIDjxuaez8njjqg linux-2.4.29-xen-sparse/include/asm-xen/pgalloc.h
   1.154 +3e5a4e67X7JyupgdYkgDX19Huj2sAw linux-2.4.29-xen-sparse/include/asm-xen/pgtable-2level.h
   1.155 +3e5a4e67gr4NLGtQ5CvSLimMYZlkOA linux-2.4.29-xen-sparse/include/asm-xen/pgtable.h
   1.156 +3e5a4e676uK4xErTBDH6XJREn9LSyg linux-2.4.29-xen-sparse/include/asm-xen/processor.h
   1.157 +41224663YBCUMX1kVo_HRUtgaHTi7w linux-2.4.29-xen-sparse/include/asm-xen/queues.h
   1.158 +3e5a4e68uJz-xI0IBVMD7xRLQKJDFg linux-2.4.29-xen-sparse/include/asm-xen/segment.h
   1.159 +3e5a4e68Nfdh6QcOKUTGCaYkf2LmYA linux-2.4.29-xen-sparse/include/asm-xen/smp.h
   1.160 +4062f7e2PzFOUGT0PaE7A0VprTU3JQ linux-2.4.29-xen-sparse/include/asm-xen/synch_bitops.h
   1.161 +3e5a4e68mTr0zcp9SXDbnd-XLrrfxw linux-2.4.29-xen-sparse/include/asm-xen/system.h
   1.162 +3f1056a9L_kqHcFheV00KbKBzv9j5w linux-2.4.29-xen-sparse/include/asm-xen/vga.h
   1.163 +40659defgWA92arexpMGn8X3QMDj3w linux-2.4.29-xen-sparse/include/asm-xen/xor.h
   1.164 +3f056927gMHl7mWB89rb73JahbhQIA linux-2.4.29-xen-sparse/include/linux/blk.h
   1.165 +419e0488SBzS3mdUhwgsES5a5e3abA linux-2.4.29-xen-sparse/include/linux/irq.h
   1.166 +4124f66fPHG6yvB_vXmesjvzrJ3yMg linux-2.4.29-xen-sparse/include/linux/mm.h
   1.167 +401c0590D_kwJDU59X8NyvqSv_Cl2A linux-2.4.29-xen-sparse/include/linux/sched.h
   1.168 +40a248afgI0_JKthdYAe8beVfXSTpQ linux-2.4.29-xen-sparse/include/linux/skbuff.h
   1.169 +401c0592pLrp_aCbQRo9GXiYQQaVVA linux-2.4.29-xen-sparse/include/linux/timer.h
   1.170 +3f9d4b44247udoqWEgFkaHiWv6Uvyg linux-2.4.29-xen-sparse/kernel/time.c
   1.171 +401c059bjLBFYHRD4Py2uM3eA1D4zQ linux-2.4.29-xen-sparse/kernel/timer.c
   1.172 +3e6e7c1efbQe93xCvOpOVCnXTMmQ5w linux-2.4.29-xen-sparse/mkbuildtree
   1.173 +406aeeafkrnCuIVWLFv3kfn4uAD5Eg linux-2.4.29-xen-sparse/mm/highmem.c
   1.174 +3e5a4e68GxCIaFH4sy01v1wjapetaA linux-2.4.29-xen-sparse/mm/memory.c
   1.175 +3f108af5VxPkLv13tXpXgoRKALQtXQ linux-2.4.29-xen-sparse/mm/mprotect.c
   1.176 +3e5a4e681xMPdF9xCMwpyfuYMySU5g linux-2.4.29-xen-sparse/mm/mremap.c
   1.177 +409ba2e7akOFqQUg6Qyg2s28xcXiMg linux-2.4.29-xen-sparse/mm/page_alloc.c
   1.178 +3e5a4e683HKVU-sxtagrDasRB8eBVw linux-2.4.29-xen-sparse/mm/swapfile.c
   1.179 +41180721bNns9Na7w1nJ0ZVt8bhUNA linux-2.4.29-xen-sparse/mm/vmalloc.c
   1.180 +41505c57WAd5l1rlfCLNSCpx9J13vA linux-2.4.29-xen-sparse/net/core/skbuff.c
   1.181  40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.10-xen-sparse/arch/xen/Kconfig
   1.182  40f56237utH41NPukqHksuNf29IC9A linux-2.6.10-xen-sparse/arch/xen/Kconfig.drivers
   1.183  40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.10-xen-sparse/arch/xen/Makefile
     2.1 --- a/docs/src/user.tex	Wed Jan 19 13:20:15 2005 +0000
     2.2 +++ b/docs/src/user.tex	Sat Jan 22 15:16:02 2005 +0000
     2.3 @@ -1770,7 +1770,7 @@ editing \path{grub.conf}.
     2.4   possibilities are `bvt' (default), `atropos' and `rrobin'. 
     2.5   For more information see Section~\ref{s:sched}. 
     2.6  
     2.7 -\item [pci\_dom0\_hide=(xx.xx.x)(yy.yy.y)\ldots ] 
     2.8 +\item [physdev\_dom0\_hide=(xx:xx.x)(yy:yy.y)\ldots ]
     2.9  Hide selected PCI devices from domain 0 (for instance, to stop it
    2.10  taking ownership of them so that they can be driven by another
    2.11  domain).  Device IDs should be given in hex format.  Bridge devices do
     3.1 --- a/linux-2.4.28-xen-sparse/Makefile	Wed Jan 19 13:20:15 2005 +0000
     3.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.3 @@ -1,592 +0,0 @@
     3.4 -VERSION = 2
     3.5 -PATCHLEVEL = 4
     3.6 -SUBLEVEL = 28
     3.7 -EXTRAVERSION =
     3.8 -
     3.9 -KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
    3.10 -
    3.11 -# SUBARCH always tells us the underlying machine architecture.
    3.12 -# Unless overridden, by default ARCH is equivalent to SUBARCH.
    3.13 -# This will be overriden for Xen and UML builds.
    3.14 -SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
    3.15 -ARCH ?= $(SUBARCH)
    3.16 -
    3.17 -## XXX The following hack can be discarded after users have adjusted to the
    3.18 -## architectural name change 'xeno' -> 'xen'.
    3.19 -ifeq ($(ARCH),xeno)
    3.20 -  ARCH := xen
    3.21 -endif
    3.22 -
    3.23 -KERNELPATH=kernel-$(shell echo $(KERNELRELEASE) | sed -e "s/-//g")
    3.24 -
    3.25 -CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
    3.26 -	  else if [ -x /bin/bash ]; then echo /bin/bash; \
    3.27 -	  else echo sh; fi ; fi)
    3.28 -TOPDIR	:= $(shell /bin/pwd)
    3.29 -
    3.30 -HPATH   	= $(TOPDIR)/include
    3.31 -FINDHPATH	= $(HPATH)/asm $(HPATH)/linux $(HPATH)/scsi $(HPATH)/net $(HPATH)/math-emu
    3.32 -
    3.33 -HOSTCC  	= gcc
    3.34 -HOSTCFLAGS	= -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
    3.35 -
    3.36 -CROSS_COMPILE 	=
    3.37 -
    3.38 -#
    3.39 -# Include the make variables (CC, etc...)
    3.40 -#
    3.41 -
    3.42 -AS		= $(CROSS_COMPILE)as
    3.43 -LD		= $(CROSS_COMPILE)ld
    3.44 -CC		= $(CROSS_COMPILE)gcc
    3.45 -CPP		= $(CC) -E
    3.46 -AR		= $(CROSS_COMPILE)ar
    3.47 -NM		= $(CROSS_COMPILE)nm
    3.48 -STRIP		= $(CROSS_COMPILE)strip
    3.49 -OBJCOPY		= $(CROSS_COMPILE)objcopy
    3.50 -OBJDUMP		= $(CROSS_COMPILE)objdump
    3.51 -MAKEFILES	= $(TOPDIR)/.config
    3.52 -GENKSYMS	= /sbin/genksyms
    3.53 -DEPMOD		= /sbin/depmod
    3.54 -MODFLAGS	= -DMODULE
    3.55 -CFLAGS_KERNEL	=
    3.56 -PERL		= perl
    3.57 -AWK		= awk
    3.58 -RPM 		:= $(shell if [ -x "/usr/bin/rpmbuild" ]; then echo rpmbuild; \
    3.59 -		    	else echo rpm; fi)
    3.60 -
    3.61 -export	VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION KERNELRELEASE ARCH \
    3.62 -	CONFIG_SHELL TOPDIR HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
    3.63 -	CPP AR NM STRIP OBJCOPY OBJDUMP MAKE MAKEFILES GENKSYMS MODFLAGS PERL AWK
    3.64 -
    3.65 -all:	do-it-all
    3.66 -
    3.67 -#
    3.68 -# Make "config" the default target if there is no configuration file or
    3.69 -# "depend" the target if there is no top-level dependency information.
    3.70 -#
    3.71 -
    3.72 -ifeq (.config,$(wildcard .config))
    3.73 -include .config
    3.74 -ifeq (.depend,$(wildcard .depend))
    3.75 -include .depend
    3.76 -do-it-all:	Version vmlinux
    3.77 -else
    3.78 -CONFIGURATION = depend
    3.79 -do-it-all:	depend
    3.80 -endif
    3.81 -else
    3.82 -CONFIGURATION = config
    3.83 -do-it-all:	config
    3.84 -endif
    3.85 -
    3.86 -#
    3.87 -# INSTALL_PATH specifies where to place the updated kernel and system map
    3.88 -# images.  Uncomment if you want to place them anywhere other than root.
    3.89 -#
    3.90 -
    3.91 -#export	INSTALL_PATH=/boot
    3.92 -
    3.93 -#
    3.94 -# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
    3.95 -# relocations required by build roots.  This is not defined in the
    3.96 -# makefile but the arguement can be passed to make if needed.
    3.97 -#
    3.98 -
    3.99 -MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
   3.100 -export MODLIB
   3.101 -
   3.102 -#
   3.103 -# standard CFLAGS
   3.104 -#
   3.105 -
   3.106 -CPPFLAGS := -D__KERNEL__ -I$(HPATH)
   3.107 -
   3.108 -CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
   3.109 -	  -fno-strict-aliasing -fno-common
   3.110 -ifndef CONFIG_FRAME_POINTER
   3.111 -CFLAGS += -fomit-frame-pointer
   3.112 -endif
   3.113 -AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS)
   3.114 -
   3.115 -#
   3.116 -# ROOT_DEV specifies the default root-device when making the image.
   3.117 -# This can be either FLOPPY, CURRENT, /dev/xxxx or empty, in which case
   3.118 -# the default of FLOPPY is used by 'build'.
   3.119 -# This is i386 specific.
   3.120 -#
   3.121 -
   3.122 -export ROOT_DEV = CURRENT
   3.123 -
   3.124 -#
   3.125 -# If you want to preset the SVGA mode, uncomment the next line and
   3.126 -# set SVGA_MODE to whatever number you want.
   3.127 -# Set it to -DSVGA_MODE=NORMAL_VGA if you just want the EGA/VGA mode.
   3.128 -# The number is the same as you would ordinarily press at bootup.
   3.129 -# This is i386 specific.
   3.130 -#
   3.131 -
   3.132 -export SVGA_MODE = -DSVGA_MODE=NORMAL_VGA
   3.133 -
   3.134 -#
   3.135 -# If you want the RAM disk device, define this to be the size in blocks.
   3.136 -# This is i386 specific.
   3.137 -#
   3.138 -
   3.139 -#export RAMDISK = -DRAMDISK=512
   3.140 -
   3.141 -CORE_FILES	=kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o
   3.142 -NETWORKS	=net/network.o
   3.143 -
   3.144 -LIBS		=$(TOPDIR)/lib/lib.a
   3.145 -SUBDIRS		=kernel drivers mm fs net ipc lib crypto
   3.146 -
   3.147 -DRIVERS-n :=
   3.148 -DRIVERS-y :=
   3.149 -DRIVERS-m :=
   3.150 -DRIVERS-  :=
   3.151 -
   3.152 -DRIVERS-$(CONFIG_ACPI_BOOT) += drivers/acpi/acpi.o
   3.153 -DRIVERS-$(CONFIG_PARPORT) += drivers/parport/driver.o
   3.154 -DRIVERS-y += drivers/char/char.o \
   3.155 -	drivers/block/block.o \
   3.156 -	drivers/misc/misc.o \
   3.157 -	drivers/net/net.o
   3.158 -DRIVERS-$(CONFIG_AGP) += drivers/char/agp/agp.o
   3.159 -DRIVERS-$(CONFIG_DRM_NEW) += drivers/char/drm/drm.o
   3.160 -DRIVERS-$(CONFIG_DRM_OLD) += drivers/char/drm-4.0/drm.o
   3.161 -DRIVERS-$(CONFIG_NUBUS) += drivers/nubus/nubus.a
   3.162 -DRIVERS-$(CONFIG_NET_FC) += drivers/net/fc/fc.o
   3.163 -DRIVERS-$(CONFIG_DEV_APPLETALK) += drivers/net/appletalk/appletalk.o
   3.164 -DRIVERS-$(CONFIG_TR) += drivers/net/tokenring/tr.o
   3.165 -DRIVERS-$(CONFIG_WAN) += drivers/net/wan/wan.o
   3.166 -DRIVERS-$(CONFIG_ARCNET) += drivers/net/arcnet/arcnetdrv.o
   3.167 -DRIVERS-$(CONFIG_ATM) += drivers/atm/atm.o
   3.168 -DRIVERS-$(CONFIG_IDE) += drivers/ide/idedriver.o
   3.169 -DRIVERS-$(CONFIG_FC4) += drivers/fc4/fc4.a
   3.170 -DRIVERS-$(CONFIG_SCSI) += drivers/scsi/scsidrv.o
   3.171 -DRIVERS-$(CONFIG_FUSION_BOOT) += drivers/message/fusion/fusion.o
   3.172 -DRIVERS-$(CONFIG_IEEE1394) += drivers/ieee1394/ieee1394drv.o
   3.173 -
   3.174 -ifneq ($(CONFIG_CD_NO_IDESCSI)$(CONFIG_BLK_DEV_IDECD)$(CONFIG_BLK_DEV_SR)$(CONFIG_PARIDE_PCD),)
   3.175 -DRIVERS-y += drivers/cdrom/driver.o
   3.176 -endif
   3.177 -
   3.178 -DRIVERS-$(CONFIG_SOUND) += drivers/sound/sounddrivers.o
   3.179 -DRIVERS-$(CONFIG_PCI) += drivers/pci/driver.o
   3.180 -DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtdlink.o
   3.181 -DRIVERS-$(CONFIG_PCMCIA) += drivers/pcmcia/pcmcia.o
   3.182 -DRIVERS-$(CONFIG_NET_PCMCIA) += drivers/net/pcmcia/pcmcia_net.o
   3.183 -DRIVERS-$(CONFIG_NET_WIRELESS) += drivers/net/wireless/wireless_net.o
   3.184 -DRIVERS-$(CONFIG_PCMCIA_CHRDEV) += drivers/char/pcmcia/pcmcia_char.o
   3.185 -DRIVERS-$(CONFIG_DIO) += drivers/dio/dio.a
   3.186 -DRIVERS-$(CONFIG_SBUS) += drivers/sbus/sbus_all.o
   3.187 -DRIVERS-$(CONFIG_ZORRO) += drivers/zorro/driver.o
   3.188 -DRIVERS-$(CONFIG_FC4) += drivers/fc4/fc4.a
   3.189 -DRIVERS-$(CONFIG_PPC32) += drivers/macintosh/macintosh.o
   3.190 -DRIVERS-$(CONFIG_MAC) += drivers/macintosh/macintosh.o
   3.191 -DRIVERS-$(CONFIG_ISAPNP) += drivers/pnp/pnp.o
   3.192 -DRIVERS-$(CONFIG_I2C) += drivers/i2c/i2c.o
   3.193 -DRIVERS-$(CONFIG_VT) += drivers/video/video.o
   3.194 -DRIVERS-$(CONFIG_PARIDE) += drivers/block/paride/paride.a
   3.195 -DRIVERS-$(CONFIG_HAMRADIO) += drivers/net/hamradio/hamradio.o
   3.196 -DRIVERS-$(CONFIG_TC) += drivers/tc/tc.a
   3.197 -DRIVERS-$(CONFIG_USB) += drivers/usb/usbdrv.o
   3.198 -DRIVERS-$(CONFIG_USB_GADGET) += drivers/usb/gadget/built-in.o
   3.199 -DRIVERS-y +=drivers/media/media.o
   3.200 -DRIVERS-$(CONFIG_INPUT) += drivers/input/inputdrv.o
   3.201 -DRIVERS-$(CONFIG_HIL) += drivers/hil/hil.o
   3.202 -DRIVERS-$(CONFIG_I2O) += drivers/message/i2o/i2o.o
   3.203 -DRIVERS-$(CONFIG_IRDA) += drivers/net/irda/irda.o
   3.204 -DRIVERS-$(CONFIG_PHONE) += drivers/telephony/telephony.o
   3.205 -DRIVERS-$(CONFIG_MD) += drivers/md/mddev.o
   3.206 -DRIVERS-$(CONFIG_GSC) += drivers/gsc/gscbus.o
   3.207 -DRIVERS-$(CONFIG_BLUEZ) += drivers/bluetooth/bluetooth.o
   3.208 -DRIVERS-$(CONFIG_HOTPLUG_PCI) += drivers/hotplug/vmlinux-obj.o
   3.209 -DRIVERS-$(CONFIG_ISDN_BOOL) += drivers/isdn/vmlinux-obj.o
   3.210 -DRIVERS-$(CONFIG_CRYPTO) += crypto/crypto.o
   3.211 -
   3.212 -DRIVERS := $(DRIVERS-y)
   3.213 -
   3.214 -
   3.215 -# files removed with 'make clean'
   3.216 -CLEAN_FILES = \
   3.217 -	kernel/ksyms.lst include/linux/compile.h \
   3.218 -	vmlinux System.map \
   3.219 -	.tmp* \
   3.220 -	drivers/char/consolemap_deftbl.c drivers/video/promcon_tbl.c \
   3.221 -	drivers/char/conmakehash \
   3.222 -	drivers/char/drm/*-mod.c \
   3.223 -	drivers/pci/devlist.h drivers/pci/classlist.h drivers/pci/gen-devlist \
   3.224 -	drivers/zorro/devlist.h drivers/zorro/gen-devlist \
   3.225 -	drivers/sound/bin2hex drivers/sound/hex2hex \
   3.226 -	drivers/atm/fore200e_mkfirm drivers/atm/{pca,sba}*{.bin,.bin1,.bin2} \
   3.227 -	drivers/scsi/aic7xxx/aicasm/aicasm \
   3.228 -	drivers/scsi/aic7xxx/aicasm/aicasm_gram.c \
   3.229 -	drivers/scsi/aic7xxx/aicasm/aicasm_gram.h \
   3.230 -	drivers/scsi/aic7xxx/aicasm/aicasm_macro_gram.c \
   3.231 -	drivers/scsi/aic7xxx/aicasm/aicasm_macro_gram.h \
   3.232 -	drivers/scsi/aic7xxx/aicasm/aicasm_macro_scan.c \
   3.233 -	drivers/scsi/aic7xxx/aicasm/aicasm_scan.c \
   3.234 -	drivers/scsi/aic7xxx/aicasm/aicdb.h \
   3.235 -	drivers/scsi/aic7xxx/aicasm/y.tab.h \
   3.236 -	drivers/scsi/53c700_d.h \
   3.237 -	drivers/tc/lk201-map.c \
   3.238 -	net/khttpd/make_times_h \
   3.239 -	net/khttpd/times.h \
   3.240 -	submenu* \
   3.241 -	drivers/ieee1394/oui.c
   3.242 -# directories removed with 'make clean'
   3.243 -CLEAN_DIRS = \
   3.244 -	modules
   3.245 -
   3.246 -# files removed with 'make mrproper'
   3.247 -MRPROPER_FILES = \
   3.248 -	include/linux/autoconf.h include/linux/version.h \
   3.249 -	lib/crc32table.h lib/gen_crc32table \
   3.250 -	drivers/net/hamradio/soundmodem/sm_tbl_{afsk1200,afsk2666,fsk9600}.h \
   3.251 -	drivers/net/hamradio/soundmodem/sm_tbl_{hapn4800,psk4800}.h \
   3.252 -	drivers/net/hamradio/soundmodem/sm_tbl_{afsk2400_7,afsk2400_8}.h \
   3.253 -	drivers/net/hamradio/soundmodem/gentbl \
   3.254 -	drivers/sound/*_boot.h drivers/sound/.*.boot \
   3.255 -	drivers/sound/msndinit.c \
   3.256 -	drivers/sound/msndperm.c \
   3.257 -	drivers/sound/pndsperm.c \
   3.258 -	drivers/sound/pndspini.c \
   3.259 -	drivers/atm/fore200e_*_fw.c drivers/atm/.fore200e_*.fw \
   3.260 -	.version .config* config.in config.old \
   3.261 -	scripts/tkparse scripts/kconfig.tk scripts/kconfig.tmp \
   3.262 -	scripts/lxdialog/*.o scripts/lxdialog/lxdialog \
   3.263 -	.menuconfig.log \
   3.264 -	include/asm \
   3.265 -	.hdepend scripts/mkdep scripts/split-include scripts/docproc \
   3.266 -	$(TOPDIR)/include/linux/modversions.h \
   3.267 -	kernel.spec
   3.268 -
   3.269 -# directories removed with 'make mrproper'
   3.270 -MRPROPER_DIRS = \
   3.271 -	include/config \
   3.272 -	$(TOPDIR)/include/linux/modules
   3.273 -
   3.274 -
   3.275 -include arch/$(ARCH)/Makefile
   3.276 -
   3.277 -# Extra cflags for kbuild 2.4.  The default is to forbid includes by kernel code
   3.278 -# from user space headers.  Some UML code requires user space headers, in the
   3.279 -# UML Makefiles add 'kbuild_2_4_nostdinc :=' before include Rules.make.  No
   3.280 -# other kernel code should include user space headers, if you need
   3.281 -# 'kbuild_2_4_nostdinc :=' or -I/usr/include for kernel code and you are not UML
   3.282 -# then your code is broken!  KAO.
   3.283 -
   3.284 -kbuild_2_4_nostdinc	:= -nostdinc -iwithprefix include
   3.285 -export kbuild_2_4_nostdinc
   3.286 -
   3.287 -export	CPPFLAGS CFLAGS CFLAGS_KERNEL AFLAGS AFLAGS_KERNEL
   3.288 -
   3.289 -export	NETWORKS DRIVERS LIBS HEAD LDFLAGS LINKFLAGS MAKEBOOT ASFLAGS
   3.290 -
   3.291 -.S.s:
   3.292 -	$(CPP) $(AFLAGS) $(AFLAGS_KERNEL) -traditional -o $*.s $<
   3.293 -.S.o:
   3.294 -	$(CC) $(AFLAGS) $(AFLAGS_KERNEL) -traditional -c -o $*.o $<
   3.295 -
   3.296 -Version: dummy
   3.297 -	@rm -f include/linux/compile.h
   3.298 -
   3.299 -boot: vmlinux
   3.300 -	@$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" -C arch/$(ARCH)/boot
   3.301 -
   3.302 -vmlinux: include/linux/version.h $(CONFIGURATION) init/main.o init/version.o init/do_mounts.o linuxsubdirs
   3.303 -	$(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o init/do_mounts.o \
   3.304 -		--start-group \
   3.305 -		$(CORE_FILES) \
   3.306 -		$(DRIVERS) \
   3.307 -		$(NETWORKS) \
   3.308 -		$(LIBS) \
   3.309 -		--end-group \
   3.310 -		-o vmlinux
   3.311 -	$(NM) vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map
   3.312 -
   3.313 -symlinks:
   3.314 -	rm -f include/asm
   3.315 -	( cd include ; ln -sf asm-$(ARCH) asm)
   3.316 -	@if [ ! -d include/linux/modules ]; then \
   3.317 -		mkdir include/linux/modules; \
   3.318 -	fi
   3.319 -
   3.320 -oldconfig: symlinks
   3.321 -	$(CONFIG_SHELL) scripts/Configure -d arch/$(ARCH)/config.in
   3.322 -
   3.323 -xconfig: symlinks
   3.324 -	$(MAKE) -C scripts kconfig.tk
   3.325 -	wish -f scripts/kconfig.tk
   3.326 -
   3.327 -menuconfig: include/linux/version.h symlinks
   3.328 -	$(MAKE) -C scripts/lxdialog all
   3.329 -	$(CONFIG_SHELL) scripts/Menuconfig arch/$(ARCH)/config.in
   3.330 -
   3.331 -config: symlinks
   3.332 -	$(CONFIG_SHELL) scripts/Configure arch/$(ARCH)/config.in
   3.333 -
   3.334 -include/config/MARKER: scripts/split-include include/linux/autoconf.h
   3.335 -	scripts/split-include include/linux/autoconf.h include/config
   3.336 -	@ touch include/config/MARKER
   3.337 -
   3.338 -linuxsubdirs: $(patsubst %, _dir_%, $(SUBDIRS))
   3.339 -
   3.340 -$(patsubst %, _dir_%, $(SUBDIRS)) : dummy include/linux/version.h include/config/MARKER
   3.341 -	$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" -C $(patsubst _dir_%, %, $@)
   3.342 -
   3.343 -$(TOPDIR)/include/linux/version.h: include/linux/version.h
   3.344 -$(TOPDIR)/include/linux/compile.h: include/linux/compile.h
   3.345 -
   3.346 -newversion:
   3.347 -	. scripts/mkversion > .tmpversion
   3.348 -	@mv -f .tmpversion .version
   3.349 -
   3.350 -uts_len		:= 64
   3.351 -uts_truncate	:= sed -e 's/\(.\{1,$(uts_len)\}\).*/\1/'
   3.352 -
   3.353 -include/linux/compile.h: $(CONFIGURATION) include/linux/version.h newversion
   3.354 -	@echo -n \#`cat .version` > .ver1
   3.355 -	@if [ -n "$(CONFIG_SMP)" ] ; then echo -n " SMP" >> .ver1; fi
   3.356 -	@if [ -f .name ]; then  echo -n \-`cat .name` >> .ver1; fi
   3.357 -	@LANG=C echo ' '`date` >> .ver1
   3.358 -	@echo \#define UTS_VERSION \"`cat .ver1 | $(uts_truncate)`\" > .ver
   3.359 -	@LANG=C echo \#define LINUX_COMPILE_TIME \"`date +%T`\" >> .ver
   3.360 -	@echo \#define LINUX_COMPILE_BY \"`whoami`\" >> .ver
   3.361 -	@echo \#define LINUX_COMPILE_HOST \"`hostname | $(uts_truncate)`\" >> .ver
   3.362 -	@([ -x /bin/dnsdomainname ] && /bin/dnsdomainname > .ver1) || \
   3.363 -	 ([ -x /bin/domainname ] && /bin/domainname > .ver1) || \
   3.364 -	 echo > .ver1
   3.365 -	@echo \#define LINUX_COMPILE_DOMAIN \"`cat .ver1 | $(uts_truncate)`\" >> .ver
   3.366 -	@echo \#define LINUX_COMPILER \"`$(CC) $(CFLAGS) -v 2>&1 | tail -n 1`\" >> .ver
   3.367 -	@mv -f .ver $@
   3.368 -	@rm -f .ver1
   3.369 -
   3.370 -include/linux/version.h: ./Makefile
   3.371 -	@expr length "$(KERNELRELEASE)" \<= $(uts_len) > /dev/null || \
   3.372 -	  (echo KERNELRELEASE \"$(KERNELRELEASE)\" exceeds $(uts_len) characters >&2; false)
   3.373 -	@echo \#define UTS_RELEASE \"$(KERNELRELEASE)\" > .ver
   3.374 -	@echo \#define LINUX_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)` >> .ver
   3.375 -	@echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))' >>.ver
   3.376 -	@mv -f .ver $@
   3.377 -
   3.378 -comma	:= ,
   3.379 -
   3.380 -init/version.o: init/version.c include/linux/compile.h include/config/MARKER
   3.381 -	$(CC) $(CFLAGS) $(CFLAGS_KERNEL) -DUTS_MACHINE='"$(SUBARCH)"' -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) -c -o init/version.o init/version.c
   3.382 -
   3.383 -init/main.o: init/main.c include/config/MARKER
   3.384 -	$(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) -c -o $@ $<
   3.385 -
   3.386 -init/do_mounts.o: init/do_mounts.c include/config/MARKER
   3.387 -	$(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) -c -o $@ $<
   3.388 -
   3.389 -fs lib mm ipc kernel drivers net: dummy
   3.390 -	$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" $(subst $@, _dir_$@, $@)
   3.391 -
   3.392 -TAGS: dummy
   3.393 -	{ find include/asm-${ARCH} -name '*.h' -print ; \
   3.394 -	find include -type d \( -name "asm-*" -o -name config \) -prune -o -name '*.h' -print ; \
   3.395 -	find $(SUBDIRS) init arch/${ARCH} -name '*.[chS]' ; } | grep -v SCCS | grep -v '\.svn' | etags -
   3.396 -
   3.397 -# Exuberant ctags works better with -I
   3.398 -tags: dummy
   3.399 -	CTAGSF=`ctags --version | grep -i exuberant >/dev/null && echo "-I __initdata,__exitdata,EXPORT_SYMBOL,EXPORT_SYMBOL_NOVERS"`; \
   3.400 -	ctags $$CTAGSF `find include/asm-$(ARCH) -name '*.h'` && \
   3.401 -	find include -type d \( -name "asm-*" -o -name config \) -prune -o -name '*.h' -print | xargs ctags $$CTAGSF -a && \
   3.402 -	find $(SUBDIRS) init -name '*.[ch]' | xargs ctags $$CTAGSF -a
   3.403 -
   3.404 -ifdef CONFIG_MODULES
   3.405 -ifdef CONFIG_MODVERSIONS
   3.406 -MODFLAGS += -DMODVERSIONS -include $(HPATH)/linux/modversions.h
   3.407 -endif
   3.408 -
   3.409 -.PHONY: modules
   3.410 -modules: $(patsubst %, _mod_%, $(SUBDIRS))
   3.411 -
   3.412 -.PHONY: $(patsubst %, _mod_%, $(SUBDIRS))
   3.413 -$(patsubst %, _mod_%, $(SUBDIRS)) : include/linux/version.h include/config/MARKER
   3.414 -	$(MAKE) -C $(patsubst _mod_%, %, $@) CFLAGS="$(CFLAGS) $(MODFLAGS)" MAKING_MODULES=1 modules
   3.415 -
   3.416 -.PHONY: modules_install
   3.417 -modules_install: _modinst_ $(patsubst %, _modinst_%, $(SUBDIRS)) _modinst_post
   3.418 -
   3.419 -.PHONY: _modinst_
   3.420 -_modinst_:
   3.421 -	@rm -rf $(MODLIB)/kernel
   3.422 -	@rm -f $(MODLIB)/build
   3.423 -	@mkdir -p $(MODLIB)/kernel
   3.424 -	@ln -s $(TOPDIR) $(MODLIB)/build
   3.425 -
   3.426 -# If System.map exists, run depmod.  This deliberately does not have a
   3.427 -# dependency on System.map since that would run the dependency tree on
   3.428 -# vmlinux.  This depmod is only for convenience to give the initial
   3.429 -# boot a modules.dep even before / is mounted read-write.  However the
   3.430 -# boot script depmod is the master version.
   3.431 -ifeq "$(strip $(INSTALL_MOD_PATH))" ""
   3.432 -depmod_opts	:=
   3.433 -else
   3.434 -depmod_opts	:= -b $(INSTALL_MOD_PATH) -r
   3.435 -endif
   3.436 -.PHONY: _modinst_post
   3.437 -_modinst_post: _modinst_post_pcmcia
   3.438 -	if [ -r System.map ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi
   3.439 -
   3.440 -# Backwards compatibilty symlinks for people still using old versions
   3.441 -# of pcmcia-cs with hard coded pathnames on insmod.  Remove
   3.442 -# _modinst_post_pcmcia for kernel 2.4.1.
   3.443 -.PHONY: _modinst_post_pcmcia
   3.444 -_modinst_post_pcmcia:
   3.445 -	cd $(MODLIB); \
   3.446 -	mkdir -p pcmcia; \
   3.447 -	find kernel -path '*/pcmcia/*' -name '*.o' | xargs -i -r ln -sf ../{} pcmcia
   3.448 -
   3.449 -.PHONY: $(patsubst %, _modinst_%, $(SUBDIRS))
   3.450 -$(patsubst %, _modinst_%, $(SUBDIRS)) :
   3.451 -	$(MAKE) -C $(patsubst _modinst_%, %, $@) modules_install
   3.452 -
   3.453 -# modules disabled....
   3.454 -
   3.455 -else
   3.456 -modules modules_install: dummy
   3.457 -	@echo
   3.458 -	@echo "The present kernel configuration has modules disabled."
   3.459 -	@echo "Type 'make config' and enable loadable module support."
   3.460 -	@echo "Then build a kernel with module support enabled."
   3.461 -	@echo
   3.462 -	@exit 1
   3.463 -endif
   3.464 -
   3.465 -clean:	archclean
   3.466 -	find . \( -name '*.[oas]' -o -name core -o -name '.*.flags' \) -type f -print \
   3.467 -		| grep -v lxdialog/ | xargs rm -f
   3.468 -	rm -f $(CLEAN_FILES)
   3.469 -	rm -rf $(CLEAN_DIRS)
   3.470 -	$(MAKE) -C Documentation/DocBook clean
   3.471 -
   3.472 -mrproper: clean archmrproper
   3.473 -	find . \( -size 0 -o -name .depend \) -type f -print | xargs rm -f
   3.474 -	rm -f $(MRPROPER_FILES)
   3.475 -	rm -rf $(MRPROPER_DIRS)
   3.476 -	$(MAKE) -C Documentation/DocBook mrproper
   3.477 -
   3.478 -distclean: mrproper
   3.479 -	rm -f core `find . \( -not -type d \) -and \
   3.480 -		\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
   3.481 -		-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
   3.482 -		-o -name '.*.rej' -o -name '.SUMS' -o -size 0 \) -type f -print` TAGS tags
   3.483 -
   3.484 -backup: mrproper
   3.485 -	cd .. && tar cf - linux/ | gzip -9 > backup.gz
   3.486 -	sync
   3.487 -
   3.488 -sgmldocs: 
   3.489 -	chmod 755 $(TOPDIR)/scripts/docgen
   3.490 -	chmod 755 $(TOPDIR)/scripts/gen-all-syms
   3.491 -	chmod 755 $(TOPDIR)/scripts/kernel-doc
   3.492 -	$(MAKE) -C $(TOPDIR)/Documentation/DocBook books
   3.493 -
   3.494 -psdocs: sgmldocs
   3.495 -	$(MAKE) -C Documentation/DocBook ps
   3.496 -
   3.497 -pdfdocs: sgmldocs
   3.498 -	$(MAKE) -C Documentation/DocBook pdf
   3.499 -
   3.500 -htmldocs: sgmldocs
   3.501 -	$(MAKE) -C Documentation/DocBook html
   3.502 -
   3.503 -mandocs:
   3.504 -	chmod 755 $(TOPDIR)/scripts/kernel-doc
   3.505 -	chmod 755 $(TOPDIR)/scripts/split-man
   3.506 -	$(MAKE) -C Documentation/DocBook man
   3.507 -
   3.508 -sums:
   3.509 -	find . -type f -print | sort | xargs sum > .SUMS
   3.510 -
   3.511 -dep-files: scripts/mkdep archdep include/linux/version.h
   3.512 -	rm -f .depend .hdepend
   3.513 -	$(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS)) _FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)"
   3.514 -ifdef CONFIG_MODVERSIONS
   3.515 -	$(MAKE) update-modverfile
   3.516 -endif
   3.517 -	scripts/mkdep -- `find $(FINDHPATH) \( -name SCCS -o -name .svn \) -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend
   3.518 -	scripts/mkdep -- init/*.c > .depend
   3.519 -
   3.520 -ifdef CONFIG_MODVERSIONS
   3.521 -MODVERFILE := $(TOPDIR)/include/linux/modversions.h
   3.522 -else
   3.523 -MODVERFILE :=
   3.524 -endif
   3.525 -export	MODVERFILE
   3.526 -
   3.527 -depend dep: dep-files
   3.528 -
   3.529 -checkconfig:
   3.530 -	find * -name '*.[hcS]' -type f -print | sort | xargs $(PERL) -w scripts/checkconfig.pl
   3.531 -
   3.532 -checkhelp:
   3.533 -	find * -name [cC]onfig.in -print | sort | xargs $(PERL) -w scripts/checkhelp.pl
   3.534 -
   3.535 -checkincludes:
   3.536 -	find * -name '*.[hcS]' -type f -print | sort | xargs $(PERL) -w scripts/checkincludes.pl
   3.537 -
   3.538 -ifdef CONFIGURATION
   3.539 -..$(CONFIGURATION):
   3.540 -	@echo
   3.541 -	@echo "You have a bad or nonexistent" .$(CONFIGURATION) ": running 'make" $(CONFIGURATION)"'"
   3.542 -	@echo
   3.543 -	$(MAKE) $(CONFIGURATION)
   3.544 -	@echo
   3.545 -	@echo "Successful. Try re-making (ignore the error that follows)"
   3.546 -	@echo
   3.547 -	exit 1
   3.548 -
   3.549 -#dummy: ..$(CONFIGURATION)
   3.550 -dummy:
   3.551 -
   3.552 -else
   3.553 -
   3.554 -dummy:
   3.555 -
   3.556 -endif
   3.557 -
   3.558 -include Rules.make
   3.559 -
   3.560 -#
   3.561 -# This generates dependencies for the .h files.
   3.562 -#
   3.563 -
   3.564 -scripts/mkdep: scripts/mkdep.c
   3.565 -	$(HOSTCC) $(HOSTCFLAGS) -o scripts/mkdep scripts/mkdep.c
   3.566 -
   3.567 -scripts/split-include: scripts/split-include.c
   3.568 -	$(HOSTCC) $(HOSTCFLAGS) -o scripts/split-include scripts/split-include.c
   3.569 -
   3.570 -#
   3.571 -# RPM target
   3.572 -#
   3.573 -#	If you do a make spec before packing the tarball you can rpm -ta it
   3.574 -#
   3.575 -spec:
   3.576 -	. scripts/mkspec >kernel.spec
   3.577 -
   3.578 -#
   3.579 -#	Build a tar ball, generate an rpm from it and pack the result
   3.580 -#	There arw two bits of magic here
   3.581 -#	1) The use of /. to avoid tar packing just the symlink
   3.582 -#	2) Removing the .dep files as they have source paths in them that
   3.583 -#	   will become invalid
   3.584 -#
   3.585 -rpm:	clean spec
   3.586 -	find . \( -size 0 -o -name .depend -o -name .hdepend \) -type f -print | xargs rm -f
   3.587 -	set -e; \
   3.588 -	cd $(TOPDIR)/.. ; \
   3.589 -	ln -sf $(TOPDIR) $(KERNELPATH) ; \
   3.590 -	tar -cvz --exclude CVS -f $(KERNELPATH).tar.gz $(KERNELPATH)/. ; \
   3.591 -	rm $(KERNELPATH) ; \
   3.592 -	cd $(TOPDIR) ; \
   3.593 -	. scripts/mkversion > .version ; \
   3.594 -	$(RPM) -ta $(TOPDIR)/../$(KERNELPATH).tar.gz ; \
   3.595 -	rm $(TOPDIR)/../$(KERNELPATH).tar.gz
     4.1 --- a/linux-2.4.28-xen-sparse/arch/xen/Makefile	Wed Jan 19 13:20:15 2005 +0000
     4.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.3 @@ -1,139 +0,0 @@
     4.4 -#
     4.5 -# xen/Makefile
     4.6 -#
     4.7 -# This file is included by the global makefile so that you can add your own
     4.8 -# architecture-specific flags and dependencies. Remember to do have actions
     4.9 -# for "archclean" and "archdep" for cleaning up and making dependencies for
    4.10 -# this architecture
    4.11 -#
    4.12 -# This file is subject to the terms and conditions of the GNU General Public
    4.13 -# License.  See the file "COPYING" in the main directory of this archive
    4.14 -# for more details.
    4.15 -#
    4.16 -# Copyright (C) 1994 by Linus Torvalds
    4.17 -#
    4.18 -# 19990713  Artur Skawina <skawina@geocities.com>
    4.19 -#           Added '-march' and '-mpreferred-stack-boundary' support
    4.20 -#
    4.21 -
    4.22 -# If no .config file exists then use the appropriate defconfig-* file
    4.23 -ifneq (.config,$(wildcard .config))
    4.24 -DUMMYX:=$(shell cp $(TOPDIR)/arch/xen/defconfig$(EXTRAVERSION) $(TOPDIR)/.config)
    4.25 --include $(TOPDIR)/.config
    4.26 -endif
    4.27 -
    4.28 -LD=$(CROSS_COMPILE)ld -m elf_i386
    4.29 -OBJCOPY=$(CROSS_COMPILE)objcopy -R .note -R .comment -S
    4.30 -LDFLAGS=-e stext
    4.31 -LINKFLAGS =-T $(TOPDIR)/arch/xen/vmlinux.lds $(LDFLAGS)
    4.32 -
    4.33 -CFLAGS += -pipe
    4.34 -
    4.35 -check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi)
    4.36 -
    4.37 -# prevent gcc from keeping the stack 16 byte aligned
    4.38 -CFLAGS += $(call check_gcc,-mpreferred-stack-boundary=2,)
    4.39 -
    4.40 -ifdef CONFIG_M686
    4.41 -CFLAGS += -march=i686
    4.42 -endif
    4.43 -
    4.44 -ifdef CONFIG_MPENTIUMIII
    4.45 -CFLAGS += -march=i686
    4.46 -endif
    4.47 -
    4.48 -ifdef CONFIG_MPENTIUM4
    4.49 -CFLAGS += -march=i686
    4.50 -endif
    4.51 -
    4.52 -ifdef CONFIG_MK7
    4.53 -CFLAGS += $(call check_gcc,-march=athlon,-march=i686 -malign-functions=4)
    4.54 -endif
    4.55 -
    4.56 -# Disable unit-at-a-time mode, it makes gcc use a lot more stack
    4.57 -# due to the lack of sharing of stacklots.
    4.58 -CFLAGS += $(call check_gcc,-fno-unit-at-a-time,)
    4.59 -
    4.60 -HEAD := arch/xen/kernel/head.o arch/xen/kernel/init_task.o
    4.61 -
    4.62 -SUBDIRS += arch/xen/kernel arch/xen/mm arch/xen/lib
    4.63 -SUBDIRS += arch/xen/drivers/console 
    4.64 -SUBDIRS += arch/xen/drivers/evtchn
    4.65 -SUBDIRS += arch/xen/drivers/blkif
    4.66 -SUBDIRS += arch/xen/drivers/netif
    4.67 -SUBDIRS += arch/xen/drivers/usbif
    4.68 -SUBDIRS += arch/xen/drivers/balloon
    4.69 -ifdef CONFIG_XEN_PRIVILEGED_GUEST
    4.70 -SUBDIRS += arch/xen/drivers/dom0 
    4.71 -endif
    4.72 -
    4.73 -CORE_FILES += arch/xen/kernel/kernel.o arch/xen/mm/mm.o
    4.74 -CORE_FILES += arch/xen/drivers/evtchn/drv.o
    4.75 -CORE_FILES += arch/xen/drivers/console/drv.o
    4.76 -DRIVERS += arch/xen/drivers/blkif/drv.o
    4.77 -DRIVERS += arch/xen/drivers/netif/drv.o
    4.78 -DRIVERS += arch/xen/drivers/usbif/drv.o
    4.79 -ifdef CONFIG_XEN_PRIVILEGED_GUEST
    4.80 -CORE_FILES += arch/xen/drivers/dom0/drv.o
    4.81 -endif
    4.82 -CORE_FILES += arch/xen/drivers/balloon/drv.o
    4.83 -LIBS := $(TOPDIR)/arch/xen/lib/lib.a $(LIBS) $(TOPDIR)/arch/xen/lib/lib.a
    4.84 -
    4.85 -arch/xen/kernel: dummy
    4.86 -	$(MAKE) linuxsubdirs SUBDIRS=arch/xen/kernel
    4.87 -
    4.88 -arch/xen/mm: dummy
    4.89 -	$(MAKE) linuxsubdirs SUBDIRS=arch/xen/mm
    4.90 -
    4.91 -arch/xen/drivers/console: dummy
    4.92 -	$(MAKE) linuxsubdirs SUBDIRS=arch/xen/drivers/console
    4.93 -
    4.94 -arch/xen/drivers/network: dummy
    4.95 -	$(MAKE) linuxsubdirs SUBDIRS=arch/xen/drivers/network
    4.96 -
    4.97 -arch/xen/drivers/block: dummy
    4.98 -	$(MAKE) linuxsubdirs SUBDIRS=arch/xen/drivers/block
    4.99 -
   4.100 -arch/xen/drivers/dom0: dummy
   4.101 -	$(MAKE) linuxsubdirs SUBDIRS=arch/xen/drivers/dom0
   4.102 -
   4.103 -arch/xen/drivers/balloon: dummy
   4.104 -	$(MAKE) linuxsubdirs SUBDIRS=arch/xen/drivers/balloon
   4.105 -
   4.106 -MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot
   4.107 -
   4.108 -vmlinux: arch/xen/vmlinux.lds
   4.109 -
   4.110 -FORCE: ;
   4.111 -
   4.112 -.PHONY: bzImage compressed clean archclean archmrproper archdep
   4.113 -
   4.114 -
   4.115 -bzImage: vmlinux
   4.116 -	@$(MAKEBOOT) bzImage
   4.117 -
   4.118 -INSTALL_NAME ?= $(KERNELRELEASE)
   4.119 -install: bzImage
   4.120 -	mkdir -p $(INSTALL_PATH)/boot
   4.121 -	install -m0644 arch/$(ARCH)/boot/bzImage $(INSTALL_PATH)/boot/vmlinuz-$(INSTALL_NAME)$(INSTALL_SUFFIX)
   4.122 -	install -m0644 vmlinux $(INSTALL_PATH)/boot/vmlinux-syms-$(INSTALL_NAME)$(INSTALL_SUFFIX)
   4.123 -	install -m0664 .config $(INSTALL_PATH)/boot/config-$(INSTALL_NAME)$(INSTALL_SUFFIX)
   4.124 -	install -m0664 System.map $(INSTALL_PATH)/boot/System.map-$(INSTALL_NAME)$(INSTALL_SUFFIX)
   4.125 -
   4.126 -dist: 
   4.127 -	$(MAKE) INSTALL_PATH=../dist/install install
   4.128 -
   4.129 -%_config: arch/xen/defconfig-%
   4.130 -	rm -f .config arch/xen/defconfig
   4.131 -	cp -f arch/xen/defconfig-$(@:_config=) arch/xen/defconfig
   4.132 -	cp -f arch/xen/defconfig-$(@:_config=) .config
   4.133 -
   4.134 -
   4.135 -archclean:
   4.136 -	@$(MAKEBOOT) clean
   4.137 -
   4.138 -archmrproper:
   4.139 -	rm -f include/asm-xen/xen-public/arch
   4.140 -
   4.141 -archdep:
   4.142 -	@$(MAKEBOOT) dep
     5.1 --- a/linux-2.4.28-xen-sparse/arch/xen/boot/Makefile	Wed Jan 19 13:20:15 2005 +0000
     5.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.3 @@ -1,13 +0,0 @@
     5.4 -#
     5.5 -# arch/xen/boot/Makefile
     5.6 -#
     5.7 -
     5.8 -bzImage: $(TOPDIR)/vmlinux
     5.9 -	$(OBJCOPY) $< Image
    5.10 -	gzip -f -9 < Image > $@
    5.11 -	rm -f Image
    5.12 -
    5.13 -dep:
    5.14 -
    5.15 -clean:
    5.16 -	rm -f bzImage Image
     6.1 --- a/linux-2.4.28-xen-sparse/arch/xen/config.in	Wed Jan 19 13:20:15 2005 +0000
     6.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.3 @@ -1,336 +0,0 @@
     6.4 -#
     6.5 -# For a description of the syntax of this configuration file,
     6.6 -# see Documentation/kbuild/config-language.txt.
     6.7 -#
     6.8 -mainmenu_name "Linux Kernel Configuration"
     6.9 -
    6.10 -define_bool CONFIG_XEN y
    6.11 -
    6.12 -define_bool CONFIG_X86 y
    6.13 -define_bool CONFIG_ISA y
    6.14 -define_bool CONFIG_SBUS n
    6.15 -
    6.16 -define_bool CONFIG_UID16 y
    6.17 -
    6.18 -mainmenu_option next_comment
    6.19 -comment 'Xen'
    6.20 -bool 'Support for privileged operations (domain 0)' CONFIG_XEN_PRIVILEGED_GUEST
    6.21 -bool 'Device-driver domain (physical device access)' CONFIG_XEN_PHYSDEV_ACCESS
    6.22 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
    6.23 -    bool 'USB-device backend driver' CONFIG_XEN_USB_BACKEND
    6.24 -fi
    6.25 -bool 'Scrub memory before freeing it to Xen' CONFIG_XEN_SCRUB_PAGES
    6.26 -bool 'Network-device frontend driver' CONFIG_XEN_NETDEV_FRONTEND
    6.27 -bool 'Block-device frontend driver' CONFIG_XEN_BLKDEV_FRONTEND
    6.28 -bool 'USB-device frontend driver' CONFIG_XEN_USB_FRONTEND
    6.29 -endmenu
    6.30 -# The IBM S/390 patch needs this.
    6.31 -define_bool CONFIG_NO_IDLE_HZ y
    6.32 -
    6.33 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
    6.34 -   define_bool CONFIG_FOREIGN_PAGES y
    6.35 -else
    6.36 -   define_bool CONFIG_FOREIGN_PAGES n
    6.37 -   define_bool CONFIG_NETDEVICES y
    6.38 -   define_bool CONFIG_VT n
    6.39 -fi
    6.40 -
    6.41 -mainmenu_option next_comment
    6.42 -comment 'Code maturity level options'
    6.43 -bool 'Prompt for development and/or incomplete code/drivers' CONFIG_EXPERIMENTAL
    6.44 -endmenu
    6.45 -
    6.46 -mainmenu_option next_comment
    6.47 -comment 'Loadable module support'
    6.48 -bool 'Enable loadable module support' CONFIG_MODULES
    6.49 -if [ "$CONFIG_MODULES" = "y" ]; then
    6.50 -   bool '  Set version information on all module symbols' CONFIG_MODVERSIONS
    6.51 -   bool '  Kernel module loader' CONFIG_KMOD
    6.52 -fi
    6.53 -endmenu
    6.54 -
    6.55 -mainmenu_option next_comment
    6.56 -comment 'Processor type and features'
    6.57 -choice 'Processor family' \
    6.58 -	"Pentium-Pro/Celeron/Pentium-II		CONFIG_M686 \
    6.59 -	 Pentium-III/Celeron(Coppermine)	CONFIG_MPENTIUMIII \
    6.60 -	 Pentium-4				CONFIG_MPENTIUM4 \
    6.61 -	 Athlon/Duron/K7			CONFIG_MK7 \
    6.62 -	 Opteron/Athlon64/Hammer/K8             CONFIG_MK8 \
    6.63 -	 VIA-C3-2                               CONFIG_MVIAC3_2" Pentium-Pro
    6.64 -
    6.65 -   define_bool CONFIG_X86_WP_WORKS_OK y
    6.66 -   define_bool CONFIG_X86_INVLPG y
    6.67 -   define_bool CONFIG_X86_CMPXCHG y
    6.68 -   define_bool CONFIG_X86_XADD y
    6.69 -   define_bool CONFIG_X86_BSWAP y
    6.70 -   define_bool CONFIG_X86_POPAD_OK y
    6.71 -   define_bool CONFIG_RWSEM_GENERIC_SPINLOCK n
    6.72 -   define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM y
    6.73 -
    6.74 -   define_bool CONFIG_X86_GOOD_APIC y
    6.75 -   define_bool CONFIG_X86_PGE y
    6.76 -   define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
    6.77 -   define_bool CONFIG_X86_TSC y
    6.78 -
    6.79 -if [ "$CONFIG_M686" = "y" ]; then
    6.80 -   define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    6.81 -fi
    6.82 -if [ "$CONFIG_MPENTIUMIII" = "y" ]; then
    6.83 -   define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    6.84 -fi
    6.85 -if [ "$CONFIG_MPENTIUM4" = "y" ]; then
    6.86 -   define_int  CONFIG_X86_L1_CACHE_SHIFT 7
    6.87 -fi
    6.88 -if [ "$CONFIG_MK8" = "y" ]; then
    6.89 -   define_bool CONFIG_MK7 y
    6.90 -fi
    6.91 -if [ "$CONFIG_MK7" = "y" ]; then
    6.92 -   define_int  CONFIG_X86_L1_CACHE_SHIFT 6
    6.93 -   define_bool CONFIG_X86_USE_3DNOW y
    6.94 -fi
    6.95 -if [ "$CONFIG_MVIAC3_2" = "y" ]; then
    6.96 -   define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    6.97 -fi
    6.98 -
    6.99 -#if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
   6.100 -#   tristate 'BIOS Enhanced Disk Drive calls determine boot disk (EXPERIMENTAL)' CONFIG_EDD
   6.101 -#fi
   6.102 -
   6.103 -choice 'High Memory Support' \
   6.104 -	"off    CONFIG_NOHIGHMEM \
   6.105 -	 4GB    CONFIG_HIGHMEM4G" off
   6.106 -#	 64GB   CONFIG_HIGHMEM64G" off
   6.107 -if [ "$CONFIG_HIGHMEM4G" = "y" ]; then
   6.108 -   define_bool CONFIG_HIGHMEM y
   6.109 -fi
   6.110 -if [ "$CONFIG_HIGHMEM64G" = "y" ]; then
   6.111 -   define_bool CONFIG_HIGHMEM y
   6.112 -   define_bool CONFIG_X86_PAE y
   6.113 -fi
   6.114 -
   6.115 -if [ "$CONFIG_HIGHMEM" = "y" ]; then
   6.116 -   bool 'HIGHMEM I/O support' CONFIG_HIGHIO
   6.117 -fi
   6.118 -
   6.119 -define_int CONFIG_FORCE_MAX_ZONEORDER 11
   6.120 -
   6.121 -#bool 'Symmetric multi-processing support' CONFIG_SMP
   6.122 -#if [ "$CONFIG_SMP" = "y" -a "$CONFIG_X86_CMPXCHG" = "y" ]; then
   6.123 -#   define_bool CONFIG_HAVE_DEC_LOCK y
   6.124 -#fi
   6.125 -endmenu
   6.126 -
   6.127 -mainmenu_option next_comment
   6.128 -comment 'General setup'
   6.129 -
   6.130 -bool 'Networking support' CONFIG_NET
   6.131 -
   6.132 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
   6.133 -   bool 'PCI support' CONFIG_PCI
   6.134 -   source drivers/pci/Config.in
   6.135 -
   6.136 -   bool 'Support for hot-pluggable devices' CONFIG_HOTPLUG
   6.137 -
   6.138 -   if [ "$CONFIG_HOTPLUG" = "y" ] ; then
   6.139 -      source drivers/pcmcia/Config.in
   6.140 -      source drivers/hotplug/Config.in
   6.141 -   else
   6.142 -      define_bool CONFIG_PCMCIA n
   6.143 -      define_bool CONFIG_HOTPLUG_PCI n
   6.144 -   fi
   6.145 -fi
   6.146 -
   6.147 -bool 'System V IPC' CONFIG_SYSVIPC
   6.148 -bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
   6.149 -bool 'Sysctl support' CONFIG_SYSCTL
   6.150 -if [ "$CONFIG_PROC_FS" = "y" ]; then
   6.151 -   choice 'Kernel core (/proc/kcore) format' \
   6.152 -	"ELF		CONFIG_KCORE_ELF	\
   6.153 -	 A.OUT		CONFIG_KCORE_AOUT" ELF
   6.154 -fi
   6.155 -tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
   6.156 -bool 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
   6.157 -tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
   6.158 -bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
   6.159 -
   6.160 -endmenu
   6.161 -
   6.162 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
   6.163 -   source drivers/mtd/Config.in
   6.164 -
   6.165 -   source drivers/parport/Config.in
   6.166 -
   6.167 -   source drivers/pnp/Config.in
   6.168 -
   6.169 -   source drivers/block/Config.in
   6.170 -
   6.171 -   source drivers/md/Config.in
   6.172 -fi
   6.173 -
   6.174 -if [ "$CONFIG_NET" = "y" ]; then
   6.175 -   source net/Config.in
   6.176 -fi
   6.177 -
   6.178 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
   6.179 -   mainmenu_option next_comment
   6.180 -   comment 'ATA/IDE/MFM/RLL support'
   6.181 -
   6.182 -   tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
   6.183 -
   6.184 -   if [ "$CONFIG_IDE" != "n" ]; then
   6.185 -      source drivers/ide/Config.in
   6.186 -   else
   6.187 -      define_bool CONFIG_BLK_DEV_HD n
   6.188 -   fi
   6.189 -   endmenu
   6.190 -fi
   6.191 -
   6.192 -mainmenu_option next_comment
   6.193 -comment 'SCSI support'
   6.194 -
   6.195 -tristate 'SCSI support' CONFIG_SCSI
   6.196 -
   6.197 -if [ "$CONFIG_SCSI" != "n" ]; then
   6.198 -   source drivers/scsi/Config.in
   6.199 -fi
   6.200 -endmenu
   6.201 -
   6.202 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
   6.203 -   source drivers/message/fusion/Config.in
   6.204 -
   6.205 -   source drivers/ieee1394/Config.in
   6.206 -
   6.207 -   source drivers/message/i2o/Config.in
   6.208 -
   6.209 -   if [ "$CONFIG_NET" = "y" ]; then
   6.210 -      mainmenu_option next_comment
   6.211 -      comment 'Network device support'
   6.212 -
   6.213 -      bool 'Network device support' CONFIG_NETDEVICES
   6.214 -      if [ "$CONFIG_NETDEVICES" = "y" ]; then
   6.215 -         source drivers/net/Config.in
   6.216 -         if [ "$CONFIG_ATM" = "y" -o "$CONFIG_ATM" = "m" ]; then
   6.217 -            source drivers/atm/Config.in
   6.218 -         fi
   6.219 -      fi
   6.220 -      endmenu
   6.221 -   fi
   6.222 -
   6.223 -   source net/ax25/Config.in
   6.224 -
   6.225 -   source net/irda/Config.in
   6.226 -
   6.227 -   mainmenu_option next_comment
   6.228 -   comment 'ISDN subsystem'
   6.229 -   if [ "$CONFIG_NET" != "n" ]; then
   6.230 -      tristate 'ISDN support' CONFIG_ISDN
   6.231 -      if [ "$CONFIG_ISDN" != "n" ]; then
   6.232 -         source drivers/isdn/Config.in
   6.233 -      fi
   6.234 -   fi
   6.235 -   endmenu
   6.236 -
   6.237 -   if [ "$CONFIG_ISA" = "y" ]; then
   6.238 -       mainmenu_option next_comment
   6.239 -       comment 'Old CD-ROM drivers (not SCSI, not IDE)'
   6.240 -   
   6.241 -       bool 'Support non-SCSI/IDE/ATAPI CDROM drives' CONFIG_CD_NO_IDESCSI
   6.242 -       if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
   6.243 -          source drivers/cdrom/Config.in
   6.244 -       fi
   6.245 -       endmenu
   6.246 -   fi
   6.247 -
   6.248 -   #
   6.249 -   # input before char - char/joystick depends on it. As does USB.
   6.250 -   #
   6.251 -   source drivers/input/Config.in
   6.252 -else
   6.253 -   #
   6.254 -   # Block device driver configuration
   6.255 -   #
   6.256 -   mainmenu_option next_comment
   6.257 -   comment 'Block devices'
   6.258 -   tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP
   6.259 -   dep_tristate 'Network block device support' CONFIG_BLK_DEV_NBD $CONFIG_NET
   6.260 -   tristate 'RAM disk support' CONFIG_BLK_DEV_RAM
   6.261 -   if [ "$CONFIG_BLK_DEV_RAM" = "y" -o "$CONFIG_BLK_DEV_RAM" = "m" ]; then
   6.262 -      int '  Default RAM disk size' CONFIG_BLK_DEV_RAM_SIZE 4096
   6.263 -   fi
   6.264 -   dep_bool '  Initial RAM disk (initrd) support' CONFIG_BLK_DEV_INITRD $CONFIG_BLK_DEV_RAM
   6.265 -   bool 'Per partition statistics in /proc/partitions' CONFIG_BLK_STATS
   6.266 -   define_bool CONFIG_BLK_DEV_HD n
   6.267 -   endmenu
   6.268 -fi
   6.269 -
   6.270 -source drivers/char/Config.in
   6.271 -
   6.272 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" -o "$CONFIG_XEN_USB_FRONTEND" = "y" ]; then
   6.273 -   source drivers/media/Config.in
   6.274 -fi
   6.275 -
   6.276 -source fs/Config.in
   6.277 -
   6.278 -mainmenu_option next_comment
   6.279 -comment 'Console drivers'
   6.280 -
   6.281 -define_bool CONFIG_XEN_CONSOLE y
   6.282 -
   6.283 -if [ "$CONFIG_VT" = "y" ]; then
   6.284 -   bool 'VGA text console' CONFIG_VGA_CONSOLE
   6.285 -   bool 'Dummy console' CONFIG_DUMMY_CONSOLE 
   6.286 -   if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
   6.287 -      bool 'Video mode selection support' CONFIG_VIDEO_SELECT
   6.288 -      if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
   6.289 -         tristate 'MDA text console (dual-headed) (EXPERIMENTAL)' CONFIG_MDA_CONSOLE
   6.290 -         source drivers/video/Config.in
   6.291 -      fi
   6.292 -   fi
   6.293 -fi
   6.294 -endmenu
   6.295 -
   6.296 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
   6.297 -   mainmenu_option next_comment
   6.298 -   comment 'Sound'
   6.299 -
   6.300 -   tristate 'Sound card support' CONFIG_SOUND
   6.301 -   if [ "$CONFIG_SOUND" != "n" ]; then
   6.302 -      source drivers/sound/Config.in
   6.303 -   fi
   6.304 -   endmenu
   6.305 -fi
   6.306 -
   6.307 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" -o "$CONFIG_XEN_USB_FRONTEND" = "y" ]; then
   6.308 -   if [ "$CONFIG_XEN_USB_FRONTEND" = "y" -o "$CONFIG_XEN_USB_BACKEND" = "y" ]; then
   6.309 -       define_bool CONFIG_USB y
   6.310 -   fi
   6.311 -   source drivers/usb/Config.in
   6.312 -fi
   6.313 -
   6.314 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
   6.315 -   source net/bluetooth/Config.in
   6.316 -fi
   6.317 -
   6.318 -mainmenu_option next_comment
   6.319 -comment 'Kernel hacking'
   6.320 -
   6.321 -bool 'Kernel debugging' CONFIG_DEBUG_KERNEL
   6.322 -if [ "$CONFIG_DEBUG_KERNEL" != "n" ]; then
   6.323 -   bool '  Check for stack overflows' CONFIG_DEBUG_STACKOVERFLOW
   6.324 -   bool '  Debug high memory support' CONFIG_DEBUG_HIGHMEM
   6.325 -   bool '  Debug memory allocations' CONFIG_DEBUG_SLAB
   6.326 -   bool '  Memory mapped I/O debugging' CONFIG_DEBUG_IOVIRT
   6.327 -   bool '  Magic SysRq key' CONFIG_MAGIC_SYSRQ
   6.328 -   bool '  Spinlock debugging' CONFIG_DEBUG_SPINLOCK
   6.329 -   bool '  Verbose BUG() reporting (adds 70K)' CONFIG_DEBUG_BUGVERBOSE
   6.330 -   bool '  Load all symbols for debugging' CONFIG_KALLSYMS
   6.331 -   bool '  Compile the kernel with frame pointers' CONFIG_FRAME_POINTER
   6.332 -fi
   6.333 -
   6.334 -int 'Kernel messages buffer length shift (0 = default)' CONFIG_LOG_BUF_SHIFT 0
   6.335 -
   6.336 -endmenu
   6.337 -
   6.338 -source crypto/Config.in
   6.339 -source lib/Config.in
     7.1 --- a/linux-2.4.28-xen-sparse/arch/xen/defconfig-xen0	Wed Jan 19 13:20:15 2005 +0000
     7.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.3 @@ -1,962 +0,0 @@
     7.4 -#
     7.5 -# Automatically generated make config: don't edit
     7.6 -#
     7.7 -CONFIG_XEN=y
     7.8 -CONFIG_X86=y
     7.9 -CONFIG_ISA=y
    7.10 -# CONFIG_SBUS is not set
    7.11 -CONFIG_UID16=y
    7.12 -
    7.13 -#
    7.14 -# Xen
    7.15 -#
    7.16 -CONFIG_XEN_PRIVILEGED_GUEST=y
    7.17 -CONFIG_XEN_PHYSDEV_ACCESS=y
    7.18 -# CONFIG_XEN_USB_BACKEND is not set
    7.19 -CONFIG_XEN_SCRUB_PAGES=y
    7.20 -CONFIG_XEN_NETDEV_FRONTEND=y
    7.21 -CONFIG_XEN_BLKDEV_FRONTEND=y
    7.22 -# CONFIG_XEN_USB_FRONTEND is not set
    7.23 -CONFIG_NO_IDLE_HZ=y
    7.24 -CONFIG_FOREIGN_PAGES=y
    7.25 -
    7.26 -#
    7.27 -# Code maturity level options
    7.28 -#
    7.29 -CONFIG_EXPERIMENTAL=y
    7.30 -
    7.31 -#
    7.32 -# Loadable module support
    7.33 -#
    7.34 -CONFIG_MODULES=y
    7.35 -CONFIG_MODVERSIONS=y
    7.36 -CONFIG_KMOD=y
    7.37 -
    7.38 -#
    7.39 -# Processor type and features
    7.40 -#
    7.41 -CONFIG_M686=y
    7.42 -# CONFIG_MPENTIUMIII is not set
    7.43 -# CONFIG_MPENTIUM4 is not set
    7.44 -# CONFIG_MK7 is not set
    7.45 -# CONFIG_MK8 is not set
    7.46 -# CONFIG_MVIAC3_2 is not set
    7.47 -CONFIG_X86_WP_WORKS_OK=y
    7.48 -CONFIG_X86_INVLPG=y
    7.49 -CONFIG_X86_CMPXCHG=y
    7.50 -CONFIG_X86_XADD=y
    7.51 -CONFIG_X86_BSWAP=y
    7.52 -CONFIG_X86_POPAD_OK=y
    7.53 -# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
    7.54 -CONFIG_RWSEM_XCHGADD_ALGORITHM=y
    7.55 -CONFIG_X86_GOOD_APIC=y
    7.56 -CONFIG_X86_PGE=y
    7.57 -CONFIG_X86_USE_PPRO_CHECKSUM=y
    7.58 -CONFIG_X86_TSC=y
    7.59 -CONFIG_X86_L1_CACHE_SHIFT=5
    7.60 -CONFIG_NOHIGHMEM=y
    7.61 -# CONFIG_HIGHMEM4G is not set
    7.62 -CONFIG_FORCE_MAX_ZONEORDER=11
    7.63 -
    7.64 -#
    7.65 -# General setup
    7.66 -#
    7.67 -CONFIG_NET=y
    7.68 -CONFIG_PCI=y
    7.69 -CONFIG_PCI_NAMES=y
    7.70 -CONFIG_HOTPLUG=y
    7.71 -
    7.72 -#
    7.73 -# PCMCIA/CardBus support
    7.74 -#
    7.75 -# CONFIG_PCMCIA is not set
    7.76 -
    7.77 -#
    7.78 -# PCI Hotplug Support
    7.79 -#
    7.80 -# CONFIG_HOTPLUG_PCI is not set
    7.81 -# CONFIG_HOTPLUG_PCI_COMPAQ is not set
    7.82 -# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
    7.83 -# CONFIG_HOTPLUG_PCI_SHPC is not set
    7.84 -# CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE is not set
    7.85 -# CONFIG_HOTPLUG_PCI_PCIE is not set
    7.86 -# CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE is not set
    7.87 -CONFIG_SYSVIPC=y
    7.88 -# CONFIG_BSD_PROCESS_ACCT is not set
    7.89 -CONFIG_SYSCTL=y
    7.90 -CONFIG_KCORE_ELF=y
    7.91 -# CONFIG_KCORE_AOUT is not set
    7.92 -CONFIG_BINFMT_AOUT=y
    7.93 -CONFIG_BINFMT_ELF=y
    7.94 -# CONFIG_BINFMT_MISC is not set
    7.95 -# CONFIG_OOM_KILLER is not set
    7.96 -
    7.97 -#
    7.98 -# Memory Technology Devices (MTD)
    7.99 -#
   7.100 -# CONFIG_MTD is not set
   7.101 -
   7.102 -#
   7.103 -# Parallel port support
   7.104 -#
   7.105 -# CONFIG_PARPORT is not set
   7.106 -
   7.107 -#
   7.108 -# Plug and Play configuration
   7.109 -#
   7.110 -CONFIG_PNP=y
   7.111 -# CONFIG_ISAPNP is not set
   7.112 -
   7.113 -#
   7.114 -# Block devices
   7.115 -#
   7.116 -# CONFIG_BLK_DEV_FD is not set
   7.117 -# CONFIG_BLK_DEV_XD is not set
   7.118 -# CONFIG_PARIDE is not set
   7.119 -# CONFIG_BLK_CPQ_DA is not set
   7.120 -# CONFIG_BLK_CPQ_CISS_DA is not set
   7.121 -# CONFIG_CISS_SCSI_TAPE is not set
   7.122 -# CONFIG_CISS_MONITOR_THREAD is not set
   7.123 -# CONFIG_BLK_DEV_DAC960 is not set
   7.124 -# CONFIG_BLK_DEV_UMEM is not set
   7.125 -# CONFIG_BLK_DEV_SX8 is not set
   7.126 -CONFIG_BLK_DEV_LOOP=y
   7.127 -CONFIG_BLK_DEV_NBD=y
   7.128 -CONFIG_BLK_DEV_RAM=y
   7.129 -CONFIG_BLK_DEV_RAM_SIZE=4096
   7.130 -CONFIG_BLK_DEV_INITRD=y
   7.131 -# CONFIG_BLK_STATS is not set
   7.132 -
   7.133 -#
   7.134 -# Multi-device support (RAID and LVM)
   7.135 -#
   7.136 -# CONFIG_MD is not set
   7.137 -# CONFIG_BLK_DEV_MD is not set
   7.138 -# CONFIG_MD_LINEAR is not set
   7.139 -# CONFIG_MD_RAID0 is not set
   7.140 -# CONFIG_MD_RAID1 is not set
   7.141 -# CONFIG_MD_RAID5 is not set
   7.142 -# CONFIG_MD_MULTIPATH is not set
   7.143 -# CONFIG_BLK_DEV_LVM is not set
   7.144 -
   7.145 -#
   7.146 -# Networking options
   7.147 -#
   7.148 -CONFIG_PACKET=y
   7.149 -CONFIG_PACKET_MMAP=y
   7.150 -# CONFIG_NETLINK_DEV is not set
   7.151 -CONFIG_NETFILTER=y
   7.152 -# CONFIG_NETFILTER_DEBUG is not set
   7.153 -CONFIG_FILTER=y
   7.154 -CONFIG_UNIX=y
   7.155 -CONFIG_INET=y
   7.156 -# CONFIG_IP_MULTICAST is not set
   7.157 -# CONFIG_IP_ADVANCED_ROUTER is not set
   7.158 -CONFIG_IP_PNP=y
   7.159 -CONFIG_IP_PNP_DHCP=y
   7.160 -# CONFIG_IP_PNP_BOOTP is not set
   7.161 -# CONFIG_IP_PNP_RARP is not set
   7.162 -# CONFIG_NET_IPIP is not set
   7.163 -# CONFIG_NET_IPGRE is not set
   7.164 -# CONFIG_ARPD is not set
   7.165 -# CONFIG_INET_ECN is not set
   7.166 -# CONFIG_SYN_COOKIES is not set
   7.167 -
   7.168 -#
   7.169 -#   IP: Netfilter Configuration
   7.170 -#
   7.171 -CONFIG_IP_NF_CONNTRACK=m
   7.172 -CONFIG_IP_NF_FTP=m
   7.173 -# CONFIG_IP_NF_AMANDA is not set
   7.174 -CONFIG_IP_NF_TFTP=m
   7.175 -CONFIG_IP_NF_IRC=m
   7.176 -# CONFIG_IP_NF_QUEUE is not set
   7.177 -CONFIG_IP_NF_IPTABLES=y
   7.178 -# CONFIG_IP_NF_MATCH_LIMIT is not set
   7.179 -# CONFIG_IP_NF_MATCH_MAC is not set
   7.180 -# CONFIG_IP_NF_MATCH_PKTTYPE is not set
   7.181 -# CONFIG_IP_NF_MATCH_MARK is not set
   7.182 -# CONFIG_IP_NF_MATCH_MULTIPORT is not set
   7.183 -# CONFIG_IP_NF_MATCH_TOS is not set
   7.184 -# CONFIG_IP_NF_MATCH_RECENT is not set
   7.185 -# CONFIG_IP_NF_MATCH_ECN is not set
   7.186 -# CONFIG_IP_NF_MATCH_DSCP is not set
   7.187 -# CONFIG_IP_NF_MATCH_AH_ESP is not set
   7.188 -# CONFIG_IP_NF_MATCH_LENGTH is not set
   7.189 -# CONFIG_IP_NF_MATCH_TTL is not set
   7.190 -# CONFIG_IP_NF_MATCH_TCPMSS is not set
   7.191 -# CONFIG_IP_NF_MATCH_HELPER is not set
   7.192 -CONFIG_IP_NF_MATCH_STATE=m
   7.193 -CONFIG_IP_NF_MATCH_CONNTRACK=m
   7.194 -# CONFIG_IP_NF_MATCH_UNCLEAN is not set
   7.195 -# CONFIG_IP_NF_MATCH_OWNER is not set
   7.196 -CONFIG_IP_NF_MATCH_PHYSDEV=y
   7.197 -CONFIG_IP_NF_FILTER=y
   7.198 -CONFIG_IP_NF_TARGET_REJECT=y
   7.199 -# CONFIG_IP_NF_TARGET_MIRROR is not set
   7.200 -CONFIG_IP_NF_NAT=m
   7.201 -CONFIG_IP_NF_NAT_NEEDED=y
   7.202 -CONFIG_IP_NF_TARGET_MASQUERADE=m
   7.203 -CONFIG_IP_NF_TARGET_REDIRECT=m
   7.204 -# CONFIG_IP_NF_NAT_LOCAL is not set
   7.205 -# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
   7.206 -CONFIG_IP_NF_NAT_IRC=m
   7.207 -CONFIG_IP_NF_NAT_FTP=m
   7.208 -CONFIG_IP_NF_NAT_TFTP=m
   7.209 -# CONFIG_IP_NF_MANGLE is not set
   7.210 -CONFIG_IP_NF_TARGET_LOG=y
   7.211 -CONFIG_IP_NF_TARGET_ULOG=y
   7.212 -# CONFIG_IP_NF_TARGET_TCPMSS is not set
   7.213 -# CONFIG_IP_NF_ARPTABLES is not set
   7.214 -
   7.215 -#
   7.216 -#   IP: Virtual Server Configuration
   7.217 -#
   7.218 -# CONFIG_IP_VS is not set
   7.219 -# CONFIG_IPV6 is not set
   7.220 -# CONFIG_KHTTPD is not set
   7.221 -
   7.222 -#
   7.223 -#    SCTP Configuration (EXPERIMENTAL)
   7.224 -#
   7.225 -# CONFIG_IP_SCTP is not set
   7.226 -# CONFIG_ATM is not set
   7.227 -CONFIG_VLAN_8021Q=y
   7.228 -
   7.229 -#
   7.230 -#  
   7.231 -#
   7.232 -# CONFIG_IPX is not set
   7.233 -# CONFIG_ATALK is not set
   7.234 -
   7.235 -#
   7.236 -# Appletalk devices
   7.237 -#
   7.238 -# CONFIG_DEV_APPLETALK is not set
   7.239 -# CONFIG_DECNET is not set
   7.240 -CONFIG_BRIDGE=y
   7.241 -CONFIG_BRIDGE_NF_EBTABLES=m
   7.242 -CONFIG_BRIDGE_EBT_T_FILTER=m
   7.243 -CONFIG_BRIDGE_EBT_T_NAT=m
   7.244 -CONFIG_BRIDGE_EBT_BROUTE=m
   7.245 -CONFIG_BRIDGE_EBT_LOG=m
   7.246 -CONFIG_BRIDGE_EBT_IPF=m
   7.247 -CONFIG_BRIDGE_EBT_ARPF=m
   7.248 -CONFIG_BRIDGE_EBT_AMONG=m
   7.249 -CONFIG_BRIDGE_EBT_LIMIT=m
   7.250 -CONFIG_BRIDGE_EBT_VLANF=m
   7.251 -CONFIG_BRIDGE_EBT_802_3=m
   7.252 -CONFIG_BRIDGE_EBT_PKTTYPE=m
   7.253 -CONFIG_BRIDGE_EBT_STP=m
   7.254 -CONFIG_BRIDGE_EBT_MARKF=m
   7.255 -CONFIG_BRIDGE_EBT_ARPREPLY=m
   7.256 -CONFIG_BRIDGE_EBT_SNAT=m
   7.257 -CONFIG_BRIDGE_EBT_DNAT=m
   7.258 -CONFIG_BRIDGE_EBT_REDIRECT=m
   7.259 -CONFIG_BRIDGE_EBT_MARK_T=m
   7.260 -# CONFIG_X25 is not set
   7.261 -# CONFIG_LAPB is not set
   7.262 -# CONFIG_LLC is not set
   7.263 -# CONFIG_NET_DIVERT is not set
   7.264 -# CONFIG_ECONET is not set
   7.265 -# CONFIG_WAN_ROUTER is not set
   7.266 -# CONFIG_NET_FASTROUTE is not set
   7.267 -# CONFIG_NET_HW_FLOWCONTROL is not set
   7.268 -
   7.269 -#
   7.270 -# QoS and/or fair queueing
   7.271 -#
   7.272 -# CONFIG_NET_SCHED is not set
   7.273 -
   7.274 -#
   7.275 -# Network testing
   7.276 -#
   7.277 -# CONFIG_NET_PKTGEN is not set
   7.278 -
   7.279 -#
   7.280 -# ATA/IDE/MFM/RLL support
   7.281 -#
   7.282 -CONFIG_IDE=y
   7.283 -
   7.284 -#
   7.285 -# IDE, ATA and ATAPI Block devices
   7.286 -#
   7.287 -CONFIG_BLK_DEV_IDE=y
   7.288 -
   7.289 -#
   7.290 -# Please see Documentation/ide.txt for help/info on IDE drives
   7.291 -#
   7.292 -# CONFIG_BLK_DEV_HD_IDE is not set
   7.293 -# CONFIG_BLK_DEV_HD is not set
   7.294 -# CONFIG_BLK_DEV_IDE_SATA is not set
   7.295 -CONFIG_BLK_DEV_IDEDISK=y
   7.296 -CONFIG_IDEDISK_MULTI_MODE=y
   7.297 -CONFIG_IDEDISK_STROKE=y
   7.298 -# CONFIG_BLK_DEV_IDECS is not set
   7.299 -# CONFIG_BLK_DEV_DELKIN is not set
   7.300 -CONFIG_BLK_DEV_IDECD=y
   7.301 -CONFIG_BLK_DEV_IDETAPE=y
   7.302 -CONFIG_BLK_DEV_IDEFLOPPY=y
   7.303 -CONFIG_BLK_DEV_IDESCSI=y
   7.304 -CONFIG_IDE_TASK_IOCTL=y
   7.305 -
   7.306 -#
   7.307 -# IDE chipset support/bugfixes
   7.308 -#
   7.309 -CONFIG_BLK_DEV_CMD640=y
   7.310 -CONFIG_BLK_DEV_CMD640_ENHANCED=y
   7.311 -# CONFIG_BLK_DEV_ISAPNP is not set
   7.312 -CONFIG_BLK_DEV_IDEPCI=y
   7.313 -CONFIG_BLK_DEV_GENERIC=y
   7.314 -CONFIG_IDEPCI_SHARE_IRQ=y
   7.315 -CONFIG_BLK_DEV_IDEDMA_PCI=y
   7.316 -CONFIG_BLK_DEV_OFFBOARD=y
   7.317 -# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
   7.318 -CONFIG_IDEDMA_PCI_AUTO=y
   7.319 -# CONFIG_IDEDMA_ONLYDISK is not set
   7.320 -CONFIG_BLK_DEV_IDEDMA=y
   7.321 -# CONFIG_IDEDMA_PCI_WIP is not set
   7.322 -CONFIG_BLK_DEV_ADMA100=y
   7.323 -CONFIG_BLK_DEV_AEC62XX=y
   7.324 -CONFIG_BLK_DEV_ALI15X3=y
   7.325 -CONFIG_WDC_ALI15X3=y
   7.326 -CONFIG_BLK_DEV_AMD74XX=y
   7.327 -CONFIG_AMD74XX_OVERRIDE=y
   7.328 -# CONFIG_BLK_DEV_ATIIXP is not set
   7.329 -CONFIG_BLK_DEV_CMD64X=y
   7.330 -CONFIG_BLK_DEV_TRIFLEX=y
   7.331 -CONFIG_BLK_DEV_CY82C693=y
   7.332 -CONFIG_BLK_DEV_CS5530=y
   7.333 -CONFIG_BLK_DEV_HPT34X=y
   7.334 -# CONFIG_HPT34X_AUTODMA is not set
   7.335 -CONFIG_BLK_DEV_HPT366=y
   7.336 -CONFIG_BLK_DEV_PIIX=y
   7.337 -CONFIG_BLK_DEV_NS87415=y
   7.338 -# CONFIG_BLK_DEV_OPTI621 is not set
   7.339 -CONFIG_BLK_DEV_PDC202XX_OLD=y
   7.340 -CONFIG_PDC202XX_BURST=y
   7.341 -CONFIG_BLK_DEV_PDC202XX_NEW=y
   7.342 -CONFIG_PDC202XX_FORCE=y
   7.343 -CONFIG_BLK_DEV_RZ1000=y
   7.344 -CONFIG_BLK_DEV_SC1200=y
   7.345 -CONFIG_BLK_DEV_SVWKS=y
   7.346 -CONFIG_BLK_DEV_SIIMAGE=y
   7.347 -CONFIG_BLK_DEV_SIS5513=y
   7.348 -CONFIG_BLK_DEV_SLC90E66=y
   7.349 -CONFIG_BLK_DEV_TRM290=y
   7.350 -CONFIG_BLK_DEV_VIA82CXXX=y
   7.351 -CONFIG_IDE_CHIPSETS=y
   7.352 -
   7.353 -#
   7.354 -# Note: most of these also require special kernel boot parameters
   7.355 -#
   7.356 -# CONFIG_BLK_DEV_4DRIVES is not set
   7.357 -# CONFIG_BLK_DEV_ALI14XX is not set
   7.358 -# CONFIG_BLK_DEV_DTC2278 is not set
   7.359 -# CONFIG_BLK_DEV_HT6560B is not set
   7.360 -# CONFIG_BLK_DEV_PDC4030 is not set
   7.361 -# CONFIG_BLK_DEV_QD65XX is not set
   7.362 -# CONFIG_BLK_DEV_UMC8672 is not set
   7.363 -CONFIG_IDEDMA_AUTO=y
   7.364 -# CONFIG_IDEDMA_IVB is not set
   7.365 -# CONFIG_DMA_NONPCI is not set
   7.366 -CONFIG_BLK_DEV_PDC202XX=y
   7.367 -# CONFIG_BLK_DEV_ATARAID is not set
   7.368 -# CONFIG_BLK_DEV_ATARAID_PDC is not set
   7.369 -# CONFIG_BLK_DEV_ATARAID_HPT is not set
   7.370 -# CONFIG_BLK_DEV_ATARAID_MEDLEY is not set
   7.371 -# CONFIG_BLK_DEV_ATARAID_SII is not set
   7.372 -
   7.373 -#
   7.374 -# SCSI support
   7.375 -#
   7.376 -CONFIG_SCSI=y
   7.377 -
   7.378 -#
   7.379 -# SCSI support type (disk, tape, CD-ROM)
   7.380 -#
   7.381 -CONFIG_BLK_DEV_SD=y
   7.382 -CONFIG_SD_EXTRA_DEVS=40
   7.383 -# CONFIG_CHR_DEV_ST is not set
   7.384 -# CONFIG_CHR_DEV_OSST is not set
   7.385 -# CONFIG_BLK_DEV_SR is not set
   7.386 -CONFIG_CHR_DEV_SG=y
   7.387 -
   7.388 -#
   7.389 -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
   7.390 -#
   7.391 -# CONFIG_SCSI_DEBUG_QUEUES is not set
   7.392 -# CONFIG_SCSI_MULTI_LUN is not set
   7.393 -# CONFIG_SCSI_CONSTANTS is not set
   7.394 -# CONFIG_SCSI_LOGGING is not set
   7.395 -
   7.396 -#
   7.397 -# SCSI low-level drivers
   7.398 -#
   7.399 -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
   7.400 -# CONFIG_SCSI_7000FASST is not set
   7.401 -# CONFIG_SCSI_ACARD is not set
   7.402 -# CONFIG_SCSI_AHA152X is not set
   7.403 -# CONFIG_SCSI_AHA1542 is not set
   7.404 -# CONFIG_SCSI_AHA1740 is not set
   7.405 -CONFIG_SCSI_AACRAID=y
   7.406 -CONFIG_SCSI_AIC7XXX=y
   7.407 -CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
   7.408 -CONFIG_AIC7XXX_RESET_DELAY_MS=15000
   7.409 -# CONFIG_AIC7XXX_PROBE_EISA_VL is not set
   7.410 -# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set
   7.411 -# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
   7.412 -CONFIG_AIC7XXX_DEBUG_MASK=0
   7.413 -# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
   7.414 -CONFIG_SCSI_AIC79XX=y
   7.415 -CONFIG_AIC79XX_CMDS_PER_DEVICE=32
   7.416 -CONFIG_AIC79XX_RESET_DELAY_MS=15000
   7.417 -# CONFIG_AIC79XX_BUILD_FIRMWARE is not set
   7.418 -# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
   7.419 -# CONFIG_AIC79XX_DEBUG_ENABLE is not set
   7.420 -CONFIG_AIC79XX_DEBUG_MASK=0
   7.421 -# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set
   7.422 -# CONFIG_SCSI_DPT_I2O is not set
   7.423 -# CONFIG_SCSI_ADVANSYS is not set
   7.424 -# CONFIG_SCSI_IN2000 is not set
   7.425 -# CONFIG_SCSI_AM53C974 is not set
   7.426 -CONFIG_SCSI_MEGARAID=y
   7.427 -# CONFIG_SCSI_MEGARAID2 is not set
   7.428 -CONFIG_SCSI_SATA=y
   7.429 -# CONFIG_SCSI_SATA_SVW is not set
   7.430 -CONFIG_SCSI_ATA_PIIX=y
   7.431 -# CONFIG_SCSI_SATA_NV is not set
   7.432 -CONFIG_SCSI_SATA_PROMISE=y
   7.433 -CONFIG_SCSI_SATA_SX4=y
   7.434 -CONFIG_SCSI_SATA_SIL=y
   7.435 -CONFIG_SCSI_SATA_SIS=y
   7.436 -# CONFIG_SCSI_SATA_ULI is not set
   7.437 -CONFIG_SCSI_SATA_VIA=y
   7.438 -CONFIG_SCSI_SATA_VITESSE=y
   7.439 -CONFIG_SCSI_BUSLOGIC=y
   7.440 -# CONFIG_SCSI_OMIT_FLASHPOINT is not set
   7.441 -# CONFIG_SCSI_CPQFCTS is not set
   7.442 -# CONFIG_SCSI_DMX3191D is not set
   7.443 -# CONFIG_SCSI_DTC3280 is not set
   7.444 -# CONFIG_SCSI_EATA is not set
   7.445 -# CONFIG_SCSI_EATA_DMA is not set
   7.446 -# CONFIG_SCSI_EATA_PIO is not set
   7.447 -# CONFIG_SCSI_FUTURE_DOMAIN is not set
   7.448 -# CONFIG_SCSI_GDTH is not set
   7.449 -# CONFIG_SCSI_GENERIC_NCR5380 is not set
   7.450 -# CONFIG_SCSI_IPS is not set
   7.451 -# CONFIG_SCSI_INITIO is not set
   7.452 -# CONFIG_SCSI_INIA100 is not set
   7.453 -# CONFIG_SCSI_NCR53C406A is not set
   7.454 -# CONFIG_SCSI_NCR53C7xx is not set
   7.455 -CONFIG_SCSI_SYM53C8XX_2=y
   7.456 -CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
   7.457 -CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
   7.458 -CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
   7.459 -# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
   7.460 -# CONFIG_SCSI_PAS16 is not set
   7.461 -# CONFIG_SCSI_PCI2000 is not set
   7.462 -# CONFIG_SCSI_PCI2220I is not set
   7.463 -# CONFIG_SCSI_PSI240I is not set
   7.464 -# CONFIG_SCSI_QLOGIC_FAS is not set
   7.465 -# CONFIG_SCSI_QLOGIC_ISP is not set
   7.466 -# CONFIG_SCSI_QLOGIC_FC is not set
   7.467 -# CONFIG_SCSI_QLOGIC_1280 is not set
   7.468 -# CONFIG_SCSI_SEAGATE is not set
   7.469 -# CONFIG_SCSI_SIM710 is not set
   7.470 -# CONFIG_SCSI_SYM53C416 is not set
   7.471 -# CONFIG_SCSI_DC390T is not set
   7.472 -# CONFIG_SCSI_T128 is not set
   7.473 -# CONFIG_SCSI_U14_34F is not set
   7.474 -# CONFIG_SCSI_ULTRASTOR is not set
   7.475 -# CONFIG_SCSI_NSP32 is not set
   7.476 -# CONFIG_SCSI_DEBUG is not set
   7.477 -
   7.478 -#
   7.479 -# Fusion MPT device support
   7.480 -#
   7.481 -# CONFIG_FUSION is not set
   7.482 -# CONFIG_FUSION_BOOT is not set
   7.483 -# CONFIG_FUSION_ISENSE is not set
   7.484 -# CONFIG_FUSION_CTL is not set
   7.485 -# CONFIG_FUSION_LAN is not set
   7.486 -
   7.487 -#
   7.488 -# IEEE 1394 (FireWire) support (EXPERIMENTAL)
   7.489 -#
   7.490 -# CONFIG_IEEE1394 is not set
   7.491 -
   7.492 -#
   7.493 -# I2O device support
   7.494 -#
   7.495 -# CONFIG_I2O is not set
   7.496 -# CONFIG_I2O_PCI is not set
   7.497 -# CONFIG_I2O_BLOCK is not set
   7.498 -# CONFIG_I2O_LAN is not set
   7.499 -# CONFIG_I2O_SCSI is not set
   7.500 -# CONFIG_I2O_PROC is not set
   7.501 -
   7.502 -#
   7.503 -# Network device support
   7.504 -#
   7.505 -CONFIG_NETDEVICES=y
   7.506 -
   7.507 -#
   7.508 -# ARCnet devices
   7.509 -#
   7.510 -# CONFIG_ARCNET is not set
   7.511 -# CONFIG_DUMMY is not set
   7.512 -# CONFIG_BONDING is not set
   7.513 -# CONFIG_EQUALIZER is not set
   7.514 -# CONFIG_TUN is not set
   7.515 -# CONFIG_ETHERTAP is not set
   7.516 -
   7.517 -#
   7.518 -# Ethernet (10 or 100Mbit)
   7.519 -#
   7.520 -CONFIG_NET_ETHERNET=y
   7.521 -# CONFIG_SUNLANCE is not set
   7.522 -# CONFIG_HAPPYMEAL is not set
   7.523 -# CONFIG_SUNBMAC is not set
   7.524 -# CONFIG_SUNQE is not set
   7.525 -# CONFIG_SUNGEM is not set
   7.526 -CONFIG_NET_VENDOR_3COM=y
   7.527 -# CONFIG_EL1 is not set
   7.528 -# CONFIG_EL2 is not set
   7.529 -# CONFIG_ELPLUS is not set
   7.530 -# CONFIG_EL16 is not set
   7.531 -# CONFIG_EL3 is not set
   7.532 -# CONFIG_3C515 is not set
   7.533 -# CONFIG_ELMC is not set
   7.534 -# CONFIG_ELMC_II is not set
   7.535 -CONFIG_VORTEX=y
   7.536 -# CONFIG_TYPHOON is not set
   7.537 -# CONFIG_LANCE is not set
   7.538 -# CONFIG_NET_VENDOR_SMC is not set
   7.539 -# CONFIG_NET_VENDOR_RACAL is not set
   7.540 -# CONFIG_AT1700 is not set
   7.541 -# CONFIG_DEPCA is not set
   7.542 -# CONFIG_HP100 is not set
   7.543 -# CONFIG_NET_ISA is not set
   7.544 -CONFIG_NET_PCI=y
   7.545 -CONFIG_PCNET32=y
   7.546 -# CONFIG_AMD8111_ETH is not set
   7.547 -# CONFIG_ADAPTEC_STARFIRE is not set
   7.548 -# CONFIG_AC3200 is not set
   7.549 -# CONFIG_APRICOT is not set
   7.550 -# CONFIG_B44 is not set
   7.551 -# CONFIG_CS89x0 is not set
   7.552 -# CONFIG_TULIP is not set
   7.553 -# CONFIG_DE4X5 is not set
   7.554 -# CONFIG_DGRS is not set
   7.555 -# CONFIG_DM9102 is not set
   7.556 -# CONFIG_EEPRO100 is not set
   7.557 -# CONFIG_EEPRO100_PIO is not set
   7.558 -CONFIG_E100=y
   7.559 -# CONFIG_LNE390 is not set
   7.560 -# CONFIG_FEALNX is not set
   7.561 -# CONFIG_NATSEMI is not set
   7.562 -CONFIG_NE2K_PCI=y
   7.563 -# CONFIG_FORCEDETH is not set
   7.564 -# CONFIG_NE3210 is not set
   7.565 -# CONFIG_ES3210 is not set
   7.566 -# CONFIG_8139CP is not set
   7.567 -# CONFIG_8139TOO is not set
   7.568 -# CONFIG_8139TOO_PIO is not set
   7.569 -# CONFIG_8139TOO_TUNE_TWISTER is not set
   7.570 -# CONFIG_8139TOO_8129 is not set
   7.571 -# CONFIG_8139_OLD_RX_RESET is not set
   7.572 -# CONFIG_SIS900 is not set
   7.573 -# CONFIG_EPIC100 is not set
   7.574 -# CONFIG_SUNDANCE is not set
   7.575 -# CONFIG_SUNDANCE_MMIO is not set
   7.576 -# CONFIG_TLAN is not set
   7.577 -# CONFIG_VIA_RHINE is not set
   7.578 -# CONFIG_VIA_RHINE_MMIO is not set
   7.579 -# CONFIG_WINBOND_840 is not set
   7.580 -# CONFIG_NET_POCKET is not set
   7.581 -
   7.582 -#
   7.583 -# Ethernet (1000 Mbit)
   7.584 -#
   7.585 -# CONFIG_ACENIC is not set
   7.586 -# CONFIG_DL2K is not set
   7.587 -CONFIG_E1000=y
   7.588 -# CONFIG_E1000_NAPI is not set
   7.589 -# CONFIG_MYRI_SBUS is not set
   7.590 -# CONFIG_NS83820 is not set
   7.591 -# CONFIG_HAMACHI is not set
   7.592 -# CONFIG_YELLOWFIN is not set
   7.593 -# CONFIG_R8169 is not set
   7.594 -# CONFIG_SK98LIN is not set
   7.595 -CONFIG_TIGON3=y
   7.596 -# CONFIG_FDDI is not set
   7.597 -# CONFIG_HIPPI is not set
   7.598 -# CONFIG_PLIP is not set
   7.599 -# CONFIG_PPP is not set
   7.600 -# CONFIG_SLIP is not set
   7.601 -
   7.602 -#
   7.603 -# Wireless LAN (non-hamradio)
   7.604 -#
   7.605 -# CONFIG_NET_RADIO is not set
   7.606 -
   7.607 -#
   7.608 -# Token Ring devices
   7.609 -#
   7.610 -# CONFIG_TR is not set
   7.611 -# CONFIG_NET_FC is not set
   7.612 -# CONFIG_RCPCI is not set
   7.613 -# CONFIG_SHAPER is not set
   7.614 -
   7.615 -#
   7.616 -# Wan interfaces
   7.617 -#
   7.618 -# CONFIG_WAN is not set
   7.619 -
   7.620 -#
   7.621 -# Amateur Radio support
   7.622 -#
   7.623 -# CONFIG_HAMRADIO is not set
   7.624 -
   7.625 -#
   7.626 -# IrDA (infrared) support
   7.627 -#
   7.628 -# CONFIG_IRDA is not set
   7.629 -
   7.630 -#
   7.631 -# ISDN subsystem
   7.632 -#
   7.633 -# CONFIG_ISDN is not set
   7.634 -
   7.635 -#
   7.636 -# Old CD-ROM drivers (not SCSI, not IDE)
   7.637 -#
   7.638 -# CONFIG_CD_NO_IDESCSI is not set
   7.639 -
   7.640 -#
   7.641 -# Input core support
   7.642 -#
   7.643 -# CONFIG_INPUT is not set
   7.644 -# CONFIG_INPUT_KEYBDEV is not set
   7.645 -# CONFIG_INPUT_MOUSEDEV is not set
   7.646 -# CONFIG_INPUT_JOYDEV is not set
   7.647 -# CONFIG_INPUT_EVDEV is not set
   7.648 -# CONFIG_INPUT_UINPUT is not set
   7.649 -
   7.650 -#
   7.651 -# Character devices
   7.652 -#
   7.653 -CONFIG_VT=y
   7.654 -CONFIG_VT_CONSOLE=y
   7.655 -# CONFIG_SERIAL is not set
   7.656 -# CONFIG_SERIAL_EXTENDED is not set
   7.657 -# CONFIG_SERIAL_NONSTANDARD is not set
   7.658 -CONFIG_UNIX98_PTYS=y
   7.659 -CONFIG_UNIX98_PTY_COUNT=256
   7.660 -
   7.661 -#
   7.662 -# I2C support
   7.663 -#
   7.664 -# CONFIG_I2C is not set
   7.665 -
   7.666 -#
   7.667 -# Mice
   7.668 -#
   7.669 -# CONFIG_BUSMOUSE is not set
   7.670 -CONFIG_MOUSE=y
   7.671 -CONFIG_PSMOUSE=y
   7.672 -# CONFIG_82C710_MOUSE is not set
   7.673 -# CONFIG_PC110_PAD is not set
   7.674 -# CONFIG_MK712_MOUSE is not set
   7.675 -
   7.676 -#
   7.677 -# Joysticks
   7.678 -#
   7.679 -# CONFIG_INPUT_GAMEPORT is not set
   7.680 -
   7.681 -#
   7.682 -# Input core support is needed for gameports
   7.683 -#
   7.684 -
   7.685 -#
   7.686 -# Input core support is needed for joysticks
   7.687 -#
   7.688 -# CONFIG_QIC02_TAPE is not set
   7.689 -# CONFIG_IPMI_HANDLER is not set
   7.690 -# CONFIG_IPMI_PANIC_EVENT is not set
   7.691 -# CONFIG_IPMI_DEVICE_INTERFACE is not set
   7.692 -# CONFIG_IPMI_KCS is not set
   7.693 -# CONFIG_IPMI_WATCHDOG is not set
   7.694 -
   7.695 -#
   7.696 -# Watchdog Cards
   7.697 -#
   7.698 -# CONFIG_WATCHDOG is not set
   7.699 -# CONFIG_SCx200 is not set
   7.700 -# CONFIG_SCx200_GPIO is not set
   7.701 -# CONFIG_AMD_RNG is not set
   7.702 -# CONFIG_INTEL_RNG is not set
   7.703 -# CONFIG_HW_RANDOM is not set
   7.704 -# CONFIG_AMD_PM768 is not set
   7.705 -# CONFIG_NVRAM is not set
   7.706 -# CONFIG_RTC is not set
   7.707 -# CONFIG_DTLK is not set
   7.708 -# CONFIG_R3964 is not set
   7.709 -# CONFIG_APPLICOM is not set
   7.710 -# CONFIG_SONYPI is not set
   7.711 -
   7.712 -#
   7.713 -# Ftape, the floppy tape device driver
   7.714 -#
   7.715 -# CONFIG_FTAPE is not set
   7.716 -# CONFIG_AGP is not set
   7.717 -
   7.718 -#
   7.719 -# Direct Rendering Manager (XFree86 DRI support)
   7.720 -#
   7.721 -# CONFIG_DRM is not set
   7.722 -# CONFIG_MWAVE is not set
   7.723 -# CONFIG_OBMOUSE is not set
   7.724 -
   7.725 -#
   7.726 -# Multimedia devices
   7.727 -#
   7.728 -# CONFIG_VIDEO_DEV is not set
   7.729 -
   7.730 -#
   7.731 -# File systems
   7.732 -#
   7.733 -# CONFIG_QUOTA is not set
   7.734 -# CONFIG_QFMT_V2 is not set
   7.735 -CONFIG_AUTOFS_FS=y
   7.736 -CONFIG_AUTOFS4_FS=y
   7.737 -# CONFIG_REISERFS_FS is not set
   7.738 -# CONFIG_REISERFS_CHECK is not set
   7.739 -# CONFIG_REISERFS_PROC_INFO is not set
   7.740 -# CONFIG_ADFS_FS is not set
   7.741 -# CONFIG_ADFS_FS_RW is not set
   7.742 -# CONFIG_AFFS_FS is not set
   7.743 -# CONFIG_HFS_FS is not set
   7.744 -# CONFIG_HFSPLUS_FS is not set
   7.745 -# CONFIG_BEFS_FS is not set
   7.746 -# CONFIG_BEFS_DEBUG is not set
   7.747 -# CONFIG_BFS_FS is not set
   7.748 -CONFIG_EXT3_FS=y
   7.749 -CONFIG_JBD=y
   7.750 -# CONFIG_JBD_DEBUG is not set
   7.751 -CONFIG_FAT_FS=y
   7.752 -CONFIG_MSDOS_FS=y
   7.753 -CONFIG_UMSDOS_FS=y
   7.754 -CONFIG_VFAT_FS=y
   7.755 -# CONFIG_EFS_FS is not set
   7.756 -# CONFIG_JFFS_FS is not set
   7.757 -# CONFIG_JFFS2_FS is not set
   7.758 -# CONFIG_CRAMFS is not set
   7.759 -CONFIG_TMPFS=y
   7.760 -CONFIG_RAMFS=y
   7.761 -CONFIG_ISO9660_FS=y
   7.762 -CONFIG_JOLIET=y
   7.763 -CONFIG_ZISOFS=y
   7.764 -# CONFIG_JFS_FS is not set
   7.765 -# CONFIG_JFS_DEBUG is not set
   7.766 -# CONFIG_JFS_STATISTICS is not set
   7.767 -# CONFIG_MINIX_FS is not set
   7.768 -# CONFIG_VXFS_FS is not set
   7.769 -# CONFIG_NTFS_FS is not set
   7.770 -# CONFIG_NTFS_RW is not set
   7.771 -# CONFIG_HPFS_FS is not set
   7.772 -CONFIG_PROC_FS=y
   7.773 -# CONFIG_DEVFS_FS is not set
   7.774 -# CONFIG_DEVFS_MOUNT is not set
   7.775 -# CONFIG_DEVFS_DEBUG is not set
   7.776 -CONFIG_DEVPTS_FS=y
   7.777 -# CONFIG_QNX4FS_FS is not set
   7.778 -# CONFIG_QNX4FS_RW is not set
   7.779 -# CONFIG_ROMFS_FS is not set
   7.780 -CONFIG_EXT2_FS=y
   7.781 -# CONFIG_SYSV_FS is not set
   7.782 -# CONFIG_UDF_FS is not set
   7.783 -# CONFIG_UDF_RW is not set
   7.784 -# CONFIG_UFS_FS is not set
   7.785 -# CONFIG_UFS_FS_WRITE is not set
   7.786 -# CONFIG_XFS_FS is not set
   7.787 -# CONFIG_XFS_QUOTA is not set
   7.788 -# CONFIG_XFS_RT is not set
   7.789 -# CONFIG_XFS_TRACE is not set
   7.790 -# CONFIG_XFS_DEBUG is not set
   7.791 -
   7.792 -#
   7.793 -# Network File Systems
   7.794 -#
   7.795 -# CONFIG_CODA_FS is not set
   7.796 -# CONFIG_INTERMEZZO_FS is not set
   7.797 -CONFIG_NFS_FS=y
   7.798 -CONFIG_NFS_V3=y
   7.799 -# CONFIG_NFS_DIRECTIO is not set
   7.800 -CONFIG_ROOT_NFS=y
   7.801 -CONFIG_NFSD=y
   7.802 -CONFIG_NFSD_V3=y
   7.803 -# CONFIG_NFSD_TCP is not set
   7.804 -CONFIG_SUNRPC=y
   7.805 -CONFIG_LOCKD=y
   7.806 -CONFIG_LOCKD_V4=y
   7.807 -# CONFIG_SMB_FS is not set
   7.808 -# CONFIG_NCP_FS is not set
   7.809 -# CONFIG_NCPFS_PACKET_SIGNING is not set
   7.810 -# CONFIG_NCPFS_IOCTL_LOCKING is not set
   7.811 -# CONFIG_NCPFS_STRONG is not set
   7.812 -# CONFIG_NCPFS_NFS_NS is not set
   7.813 -# CONFIG_NCPFS_OS2_NS is not set
   7.814 -# CONFIG_NCPFS_SMALLDOS is not set
   7.815 -# CONFIG_NCPFS_NLS is not set
   7.816 -# CONFIG_NCPFS_EXTRAS is not set
   7.817 -CONFIG_ZISOFS_FS=y
   7.818 -
   7.819 -#
   7.820 -# Partition Types
   7.821 -#
   7.822 -CONFIG_PARTITION_ADVANCED=y
   7.823 -# CONFIG_ACORN_PARTITION is not set
   7.824 -# CONFIG_OSF_PARTITION is not set
   7.825 -# CONFIG_AMIGA_PARTITION is not set
   7.826 -# CONFIG_ATARI_PARTITION is not set
   7.827 -# CONFIG_MAC_PARTITION is not set
   7.828 -CONFIG_MSDOS_PARTITION=y
   7.829 -# CONFIG_BSD_DISKLABEL is not set
   7.830 -# CONFIG_MINIX_SUBPARTITION is not set
   7.831 -# CONFIG_SOLARIS_X86_PARTITION is not set
   7.832 -# CONFIG_UNIXWARE_DISKLABEL is not set
   7.833 -# CONFIG_LDM_PARTITION is not set
   7.834 -# CONFIG_SGI_PARTITION is not set
   7.835 -# CONFIG_ULTRIX_PARTITION is not set
   7.836 -# CONFIG_SUN_PARTITION is not set
   7.837 -# CONFIG_EFI_PARTITION is not set
   7.838 -# CONFIG_SMB_NLS is not set
   7.839 -CONFIG_NLS=y
   7.840 -
   7.841 -#
   7.842 -# Native Language Support
   7.843 -#
   7.844 -CONFIG_NLS_DEFAULT="iso8559-1"
   7.845 -# CONFIG_NLS_CODEPAGE_437 is not set
   7.846 -# CONFIG_NLS_CODEPAGE_737 is not set
   7.847 -# CONFIG_NLS_CODEPAGE_775 is not set
   7.848 -# CONFIG_NLS_CODEPAGE_850 is not set
   7.849 -# CONFIG_NLS_CODEPAGE_852 is not set
   7.850 -# CONFIG_NLS_CODEPAGE_855 is not set
   7.851 -# CONFIG_NLS_CODEPAGE_857 is not set
   7.852 -# CONFIG_NLS_CODEPAGE_860 is not set
   7.853 -# CONFIG_NLS_CODEPAGE_861 is not set
   7.854 -# CONFIG_NLS_CODEPAGE_862 is not set
   7.855 -# CONFIG_NLS_CODEPAGE_863 is not set
   7.856 -# CONFIG_NLS_CODEPAGE_864 is not set
   7.857 -# CONFIG_NLS_CODEPAGE_865 is not set
   7.858 -# CONFIG_NLS_CODEPAGE_866 is not set
   7.859 -# CONFIG_NLS_CODEPAGE_869 is not set
   7.860 -# CONFIG_NLS_CODEPAGE_936 is not set
   7.861 -# CONFIG_NLS_CODEPAGE_950 is not set
   7.862 -# CONFIG_NLS_CODEPAGE_932 is not set
   7.863 -# CONFIG_NLS_CODEPAGE_949 is not set
   7.864 -# CONFIG_NLS_CODEPAGE_874 is not set
   7.865 -# CONFIG_NLS_ISO8859_8 is not set
   7.866 -# CONFIG_NLS_CODEPAGE_1250 is not set
   7.867 -# CONFIG_NLS_CODEPAGE_1251 is not set
   7.868 -CONFIG_NLS_ISO8859_1=y
   7.869 -# CONFIG_NLS_ISO8859_2 is not set
   7.870 -# CONFIG_NLS_ISO8859_3 is not set
   7.871 -# CONFIG_NLS_ISO8859_4 is not set
   7.872 -# CONFIG_NLS_ISO8859_5 is not set
   7.873 -# CONFIG_NLS_ISO8859_6 is not set
   7.874 -# CONFIG_NLS_ISO8859_7 is not set
   7.875 -# CONFIG_NLS_ISO8859_9 is not set
   7.876 -# CONFIG_NLS_ISO8859_13 is not set
   7.877 -# CONFIG_NLS_ISO8859_14 is not set
   7.878 -# CONFIG_NLS_ISO8859_15 is not set
   7.879 -# CONFIG_NLS_KOI8_R is not set
   7.880 -# CONFIG_NLS_KOI8_U is not set
   7.881 -# CONFIG_NLS_UTF8 is not set
   7.882 -
   7.883 -#
   7.884 -# Console drivers
   7.885 -#
   7.886 -CONFIG_XEN_CONSOLE=y
   7.887 -CONFIG_VGA_CONSOLE=y
   7.888 -CONFIG_DUMMY_CONSOLE=y
   7.889 -# CONFIG_VIDEO_SELECT is not set
   7.890 -# CONFIG_MDA_CONSOLE is not set
   7.891 -
   7.892 -#
   7.893 -# Frame-buffer support
   7.894 -#
   7.895 -# CONFIG_FB is not set
   7.896 -
   7.897 -#
   7.898 -# Sound
   7.899 -#
   7.900 -# CONFIG_SOUND is not set
   7.901 -
   7.902 -#
   7.903 -# USB support
   7.904 -#
   7.905 -# CONFIG_USB is not set
   7.906 -
   7.907 -#
   7.908 -# Support for USB gadgets
   7.909 -#
   7.910 -# CONFIG_USB_GADGET is not set
   7.911 -
   7.912 -#
   7.913 -# Bluetooth support
   7.914 -#
   7.915 -# CONFIG_BLUEZ is not set
   7.916 -
   7.917 -#
   7.918 -# Kernel hacking
   7.919 -#
   7.920 -CONFIG_DEBUG_KERNEL=y
   7.921 -# CONFIG_DEBUG_STACKOVERFLOW is not set
   7.922 -# CONFIG_DEBUG_HIGHMEM is not set
   7.923 -# CONFIG_DEBUG_SLAB is not set
   7.924 -# CONFIG_DEBUG_IOVIRT is not set
   7.925 -# CONFIG_MAGIC_SYSRQ is not set
   7.926 -# CONFIG_DEBUG_SPINLOCK is not set
   7.927 -# CONFIG_DEBUG_BUGVERBOSE is not set
   7.928 -CONFIG_KALLSYMS=y
   7.929 -# CONFIG_FRAME_POINTER is not set
   7.930 -CONFIG_LOG_BUF_SHIFT=0
   7.931 -
   7.932 -#
   7.933 -# Cryptographic options
   7.934 -#
   7.935 -CONFIG_CRYPTO=y
   7.936 -CONFIG_CRYPTO_HMAC=y
   7.937 -CONFIG_CRYPTO_NULL=m
   7.938 -CONFIG_CRYPTO_MD4=m
   7.939 -CONFIG_CRYPTO_MD5=m
   7.940 -CONFIG_CRYPTO_SHA1=m
   7.941 -CONFIG_CRYPTO_SHA256=m
   7.942 -CONFIG_CRYPTO_SHA512=m
   7.943 -# CONFIG_CRYPTO_WP512 is not set
   7.944 -CONFIG_CRYPTO_DES=m
   7.945 -CONFIG_CRYPTO_BLOWFISH=m
   7.946 -CONFIG_CRYPTO_TWOFISH=m
   7.947 -CONFIG_CRYPTO_SERPENT=m
   7.948 -CONFIG_CRYPTO_AES=m
   7.949 -CONFIG_CRYPTO_CAST5=m
   7.950 -CONFIG_CRYPTO_CAST6=m
   7.951 -# CONFIG_CRYPTO_TEA is not set
   7.952 -# CONFIG_CRYPTO_KHAZAD is not set
   7.953 -# CONFIG_CRYPTO_ANUBIS is not set
   7.954 -CONFIG_CRYPTO_ARC4=m
   7.955 -CONFIG_CRYPTO_DEFLATE=m
   7.956 -# CONFIG_CRYPTO_MICHAEL_MIC is not set
   7.957 -# CONFIG_CRYPTO_TEST is not set
   7.958 -
   7.959 -#
   7.960 -# Library routines
   7.961 -#
   7.962 -# CONFIG_CRC32 is not set
   7.963 -CONFIG_ZLIB_INFLATE=y
   7.964 -CONFIG_ZLIB_DEFLATE=m
   7.965 -# CONFIG_FW_LOADER is not set
     8.1 --- a/linux-2.4.28-xen-sparse/arch/xen/defconfig-xenU	Wed Jan 19 13:20:15 2005 +0000
     8.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.3 @@ -1,565 +0,0 @@
     8.4 -#
     8.5 -# Automatically generated make config: don't edit
     8.6 -#
     8.7 -CONFIG_XEN=y
     8.8 -CONFIG_X86=y
     8.9 -CONFIG_ISA=y
    8.10 -# CONFIG_SBUS is not set
    8.11 -CONFIG_UID16=y
    8.12 -
    8.13 -#
    8.14 -# Xen
    8.15 -#
    8.16 -# CONFIG_XEN_PRIVILEGED_GUEST is not set
    8.17 -# CONFIG_XEN_PHYSDEV_ACCESS is not set
    8.18 -CONFIG_XEN_SCRUB_PAGES=y
    8.19 -CONFIG_XEN_NETDEV_FRONTEND=y
    8.20 -CONFIG_XEN_BLKDEV_FRONTEND=y
    8.21 -# CONFIG_XEN_USB_FRONTEND is not set
    8.22 -CONFIG_NO_IDLE_HZ=y
    8.23 -# CONFIG_FOREIGN_PAGES is not set
    8.24 -CONFIG_NETDEVICES=y
    8.25 -# CONFIG_VT is not set
    8.26 -
    8.27 -#
    8.28 -# Code maturity level options
    8.29 -#
    8.30 -CONFIG_EXPERIMENTAL=y
    8.31 -
    8.32 -#
    8.33 -# Loadable module support
    8.34 -#
    8.35 -CONFIG_MODULES=y
    8.36 -CONFIG_MODVERSIONS=y
    8.37 -CONFIG_KMOD=y
    8.38 -
    8.39 -#
    8.40 -# Processor type and features
    8.41 -#
    8.42 -CONFIG_M686=y
    8.43 -# CONFIG_MPENTIUMIII is not set
    8.44 -# CONFIG_MPENTIUM4 is not set
    8.45 -# CONFIG_MK7 is not set
    8.46 -# CONFIG_MK8 is not set
    8.47 -# CONFIG_MVIAC3_2 is not set
    8.48 -CONFIG_X86_WP_WORKS_OK=y
    8.49 -CONFIG_X86_INVLPG=y
    8.50 -CONFIG_X86_CMPXCHG=y
    8.51 -CONFIG_X86_XADD=y
    8.52 -CONFIG_X86_BSWAP=y
    8.53 -CONFIG_X86_POPAD_OK=y
    8.54 -# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
    8.55 -CONFIG_RWSEM_XCHGADD_ALGORITHM=y
    8.56 -CONFIG_X86_GOOD_APIC=y
    8.57 -CONFIG_X86_PGE=y
    8.58 -CONFIG_X86_USE_PPRO_CHECKSUM=y
    8.59 -CONFIG_X86_TSC=y
    8.60 -CONFIG_X86_L1_CACHE_SHIFT=5
    8.61 -CONFIG_NOHIGHMEM=y
    8.62 -# CONFIG_HIGHMEM4G is not set
    8.63 -CONFIG_FORCE_MAX_ZONEORDER=11
    8.64 -
    8.65 -#
    8.66 -# General setup
    8.67 -#
    8.68 -CONFIG_NET=y
    8.69 -CONFIG_SYSVIPC=y
    8.70 -# CONFIG_BSD_PROCESS_ACCT is not set
    8.71 -CONFIG_SYSCTL=y
    8.72 -CONFIG_KCORE_ELF=y
    8.73 -# CONFIG_KCORE_AOUT is not set
    8.74 -CONFIG_BINFMT_AOUT=y
    8.75 -CONFIG_BINFMT_ELF=y
    8.76 -# CONFIG_BINFMT_MISC is not set
    8.77 -# CONFIG_OOM_KILLER is not set
    8.78 -
    8.79 -#
    8.80 -# Networking options
    8.81 -#
    8.82 -CONFIG_PACKET=y
    8.83 -CONFIG_PACKET_MMAP=y
    8.84 -# CONFIG_NETLINK_DEV is not set
    8.85 -CONFIG_NETFILTER=y
    8.86 -# CONFIG_NETFILTER_DEBUG is not set
    8.87 -CONFIG_FILTER=y
    8.88 -CONFIG_UNIX=y
    8.89 -CONFIG_INET=y
    8.90 -# CONFIG_IP_MULTICAST is not set
    8.91 -# CONFIG_IP_ADVANCED_ROUTER is not set
    8.92 -CONFIG_IP_PNP=y
    8.93 -CONFIG_IP_PNP_DHCP=y
    8.94 -# CONFIG_IP_PNP_BOOTP is not set
    8.95 -# CONFIG_IP_PNP_RARP is not set
    8.96 -# CONFIG_NET_IPIP is not set
    8.97 -# CONFIG_NET_IPGRE is not set
    8.98 -# CONFIG_ARPD is not set
    8.99 -# CONFIG_INET_ECN is not set
   8.100 -# CONFIG_SYN_COOKIES is not set
   8.101 -
   8.102 -#
   8.103 -#   IP: Netfilter Configuration
   8.104 -#
   8.105 -CONFIG_IP_NF_CONNTRACK=y
   8.106 -CONFIG_IP_NF_FTP=y
   8.107 -# CONFIG_IP_NF_AMANDA is not set
   8.108 -CONFIG_IP_NF_TFTP=y
   8.109 -CONFIG_IP_NF_IRC=y
   8.110 -# CONFIG_IP_NF_QUEUE is not set
   8.111 -CONFIG_IP_NF_IPTABLES=y
   8.112 -# CONFIG_IP_NF_MATCH_LIMIT is not set
   8.113 -# CONFIG_IP_NF_MATCH_MAC is not set
   8.114 -# CONFIG_IP_NF_MATCH_PKTTYPE is not set
   8.115 -# CONFIG_IP_NF_MATCH_MARK is not set
   8.116 -# CONFIG_IP_NF_MATCH_MULTIPORT is not set
   8.117 -# CONFIG_IP_NF_MATCH_TOS is not set
   8.118 -# CONFIG_IP_NF_MATCH_RECENT is not set
   8.119 -# CONFIG_IP_NF_MATCH_ECN is not set
   8.120 -# CONFIG_IP_NF_MATCH_DSCP is not set
   8.121 -# CONFIG_IP_NF_MATCH_AH_ESP is not set
   8.122 -# CONFIG_IP_NF_MATCH_LENGTH is not set
   8.123 -# CONFIG_IP_NF_MATCH_TTL is not set
   8.124 -# CONFIG_IP_NF_MATCH_TCPMSS is not set
   8.125 -# CONFIG_IP_NF_MATCH_HELPER is not set
   8.126 -CONFIG_IP_NF_MATCH_STATE=y
   8.127 -CONFIG_IP_NF_MATCH_CONNTRACK=y
   8.128 -# CONFIG_IP_NF_MATCH_UNCLEAN is not set
   8.129 -# CONFIG_IP_NF_MATCH_OWNER is not set
   8.130 -CONFIG_IP_NF_FILTER=y
   8.131 -CONFIG_IP_NF_TARGET_REJECT=y
   8.132 -# CONFIG_IP_NF_TARGET_MIRROR is not set
   8.133 -CONFIG_IP_NF_NAT=y
   8.134 -CONFIG_IP_NF_NAT_NEEDED=y
   8.135 -CONFIG_IP_NF_TARGET_MASQUERADE=y
   8.136 -CONFIG_IP_NF_TARGET_REDIRECT=y
   8.137 -# CONFIG_IP_NF_NAT_LOCAL is not set
   8.138 -# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
   8.139 -CONFIG_IP_NF_NAT_IRC=y
   8.140 -CONFIG_IP_NF_NAT_FTP=y
   8.141 -CONFIG_IP_NF_NAT_TFTP=y
   8.142 -# CONFIG_IP_NF_MANGLE is not set
   8.143 -CONFIG_IP_NF_TARGET_LOG=y
   8.144 -CONFIG_IP_NF_TARGET_ULOG=y
   8.145 -# CONFIG_IP_NF_TARGET_TCPMSS is not set
   8.146 -# CONFIG_IP_NF_ARPTABLES is not set
   8.147 -
   8.148 -#
   8.149 -#   IP: Virtual Server Configuration
   8.150 -#
   8.151 -# CONFIG_IP_VS is not set
   8.152 -# CONFIG_IPV6 is not set
   8.153 -# CONFIG_KHTTPD is not set
   8.154 -
   8.155 -#
   8.156 -#    SCTP Configuration (EXPERIMENTAL)
   8.157 -#
   8.158 -# CONFIG_IP_SCTP is not set
   8.159 -# CONFIG_ATM is not set
   8.160 -CONFIG_VLAN_8021Q=y
   8.161 -
   8.162 -#
   8.163 -#  
   8.164 -#
   8.165 -# CONFIG_IPX is not set
   8.166 -# CONFIG_ATALK is not set
   8.167 -
   8.168 -#
   8.169 -# Appletalk devices
   8.170 -#
   8.171 -# CONFIG_DEV_APPLETALK is not set
   8.172 -# CONFIG_DECNET is not set
   8.173 -# CONFIG_BRIDGE is not set
   8.174 -# CONFIG_X25 is not set
   8.175 -# CONFIG_LAPB is not set
   8.176 -# CONFIG_LLC is not set
   8.177 -# CONFIG_NET_DIVERT is not set
   8.178 -# CONFIG_ECONET is not set
   8.179 -# CONFIG_WAN_ROUTER is not set
   8.180 -# CONFIG_NET_FASTROUTE is not set
   8.181 -# CONFIG_NET_HW_FLOWCONTROL is not set
   8.182 -
   8.183 -#
   8.184 -# QoS and/or fair queueing
   8.185 -#
   8.186 -# CONFIG_NET_SCHED is not set
   8.187 -
   8.188 -#
   8.189 -# Network testing
   8.190 -#
   8.191 -# CONFIG_NET_PKTGEN is not set
   8.192 -
   8.193 -#
   8.194 -# SCSI support
   8.195 -#
   8.196 -CONFIG_SCSI=y
   8.197 -
   8.198 -#
   8.199 -# SCSI support type (disk, tape, CD-ROM)
   8.200 -#
   8.201 -CONFIG_BLK_DEV_SD=y
   8.202 -CONFIG_SD_EXTRA_DEVS=40
   8.203 -# CONFIG_CHR_DEV_ST is not set
   8.204 -# CONFIG_CHR_DEV_OSST is not set
   8.205 -# CONFIG_BLK_DEV_SR is not set
   8.206 -CONFIG_CHR_DEV_SG=y
   8.207 -
   8.208 -#
   8.209 -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
   8.210 -#
   8.211 -# CONFIG_SCSI_DEBUG_QUEUES is not set
   8.212 -# CONFIG_SCSI_MULTI_LUN is not set
   8.213 -# CONFIG_SCSI_CONSTANTS is not set
   8.214 -# CONFIG_SCSI_LOGGING is not set
   8.215 -
   8.216 -#
   8.217 -# SCSI low-level drivers
   8.218 -#
   8.219 -# CONFIG_SCSI_7000FASST is not set
   8.220 -# CONFIG_SCSI_ACARD is not set
   8.221 -# CONFIG_SCSI_AHA152X is not set
   8.222 -# CONFIG_SCSI_AHA1542 is not set
   8.223 -# CONFIG_SCSI_AHA1740 is not set
   8.224 -# CONFIG_SCSI_AACRAID is not set
   8.225 -# CONFIG_SCSI_AIC7XXX is not set
   8.226 -# CONFIG_SCSI_AIC79XX is not set
   8.227 -# CONFIG_SCSI_AIC7XXX_OLD is not set
   8.228 -# CONFIG_SCSI_DPT_I2O is not set
   8.229 -# CONFIG_SCSI_ADVANSYS is not set
   8.230 -# CONFIG_SCSI_IN2000 is not set
   8.231 -# CONFIG_SCSI_AM53C974 is not set
   8.232 -# CONFIG_SCSI_MEGARAID is not set
   8.233 -# CONFIG_SCSI_MEGARAID2 is not set
   8.234 -# CONFIG_SCSI_SATA is not set
   8.235 -# CONFIG_SCSI_SATA_SVW is not set
   8.236 -# CONFIG_SCSI_ATA_PIIX is not set
   8.237 -# CONFIG_SCSI_SATA_NV is not set
   8.238 -# CONFIG_SCSI_SATA_PROMISE is not set
   8.239 -# CONFIG_SCSI_SATA_SX4 is not set
   8.240 -# CONFIG_SCSI_SATA_SIL is not set
   8.241 -# CONFIG_SCSI_SATA_SIS is not set
   8.242 -# CONFIG_SCSI_SATA_ULI is not set
   8.243 -# CONFIG_SCSI_SATA_VIA is not set
   8.244 -# CONFIG_SCSI_SATA_VITESSE is not set
   8.245 -# CONFIG_SCSI_BUSLOGIC is not set
   8.246 -# CONFIG_SCSI_DMX3191D is not set
   8.247 -# CONFIG_SCSI_DTC3280 is not set
   8.248 -# CONFIG_SCSI_EATA is not set
   8.249 -# CONFIG_SCSI_EATA_DMA is not set
   8.250 -# CONFIG_SCSI_EATA_PIO is not set
   8.251 -# CONFIG_SCSI_FUTURE_DOMAIN is not set
   8.252 -# CONFIG_SCSI_GDTH is not set
   8.253 -# CONFIG_SCSI_GENERIC_NCR5380 is not set
   8.254 -# CONFIG_SCSI_IPS is not set
   8.255 -# CONFIG_SCSI_INITIO is not set
   8.256 -# CONFIG_SCSI_INIA100 is not set
   8.257 -# CONFIG_SCSI_PPA is not set
   8.258 -# CONFIG_SCSI_IMM is not set
   8.259 -# CONFIG_SCSI_NCR53C406A is not set
   8.260 -# CONFIG_SCSI_NCR53C7xx is not set
   8.261 -# CONFIG_SCSI_PAS16 is not set
   8.262 -# CONFIG_SCSI_PCI2000 is not set
   8.263 -# CONFIG_SCSI_PCI2220I is not set
   8.264 -# CONFIG_SCSI_PSI240I is not set
   8.265 -# CONFIG_SCSI_QLOGIC_FAS is not set
   8.266 -# CONFIG_SCSI_SEAGATE is not set
   8.267 -# CONFIG_SCSI_SIM710 is not set
   8.268 -# CONFIG_SCSI_SYM53C416 is not set
   8.269 -# CONFIG_SCSI_T128 is not set
   8.270 -# CONFIG_SCSI_U14_34F is not set
   8.271 -# CONFIG_SCSI_ULTRASTOR is not set
   8.272 -# CONFIG_SCSI_NSP32 is not set
   8.273 -# CONFIG_SCSI_DEBUG is not set
   8.274 -
   8.275 -#
   8.276 -# Block devices
   8.277 -#
   8.278 -CONFIG_BLK_DEV_LOOP=y
   8.279 -CONFIG_BLK_DEV_NBD=y
   8.280 -CONFIG_BLK_DEV_RAM=y
   8.281 -CONFIG_BLK_DEV_RAM_SIZE=4096
   8.282 -CONFIG_BLK_DEV_INITRD=y
   8.283 -# CONFIG_BLK_STATS is not set
   8.284 -# CONFIG_BLK_DEV_HD is not set
   8.285 -
   8.286 -#
   8.287 -# Character devices
   8.288 -#
   8.289 -# CONFIG_VT is not set
   8.290 -# CONFIG_SERIAL is not set
   8.291 -# CONFIG_SERIAL_EXTENDED is not set
   8.292 -# CONFIG_SERIAL_NONSTANDARD is not set
   8.293 -CONFIG_UNIX98_PTYS=y
   8.294 -CONFIG_UNIX98_PTY_COUNT=256
   8.295 -# CONFIG_PRINTER is not set
   8.296 -# CONFIG_PPDEV is not set
   8.297 -# CONFIG_TIPAR is not set
   8.298 -
   8.299 -#
   8.300 -# I2C support
   8.301 -#
   8.302 -# CONFIG_I2C is not set
   8.303 -
   8.304 -#
   8.305 -# Mice
   8.306 -#
   8.307 -# CONFIG_BUSMOUSE is not set
   8.308 -CONFIG_MOUSE=y
   8.309 -CONFIG_PSMOUSE=y
   8.310 -# CONFIG_82C710_MOUSE is not set
   8.311 -# CONFIG_PC110_PAD is not set
   8.312 -# CONFIG_MK712_MOUSE is not set
   8.313 -
   8.314 -#
   8.315 -# Joysticks
   8.316 -#
   8.317 -# CONFIG_INPUT_GAMEPORT is not set
   8.318 -# CONFIG_INPUT_NS558 is not set
   8.319 -# CONFIG_INPUT_LIGHTNING is not set
   8.320 -# CONFIG_INPUT_PCIGAME is not set
   8.321 -# CONFIG_INPUT_CS461X is not set
   8.322 -# CONFIG_INPUT_EMU10K1 is not set
   8.323 -# CONFIG_INPUT_SERIO is not set
   8.324 -# CONFIG_INPUT_SERPORT is not set
   8.325 -
   8.326 -#
   8.327 -# Joysticks
   8.328 -#
   8.329 -# CONFIG_INPUT_ANALOG is not set
   8.330 -# CONFIG_INPUT_A3D is not set
   8.331 -# CONFIG_INPUT_ADI is not set
   8.332 -# CONFIG_INPUT_COBRA is not set
   8.333 -# CONFIG_INPUT_GF2K is not set
   8.334 -# CONFIG_INPUT_GRIP is not set
   8.335 -# CONFIG_INPUT_INTERACT is not set
   8.336 -# CONFIG_INPUT_TMDC is not set
   8.337 -# CONFIG_INPUT_SIDEWINDER is not set
   8.338 -# CONFIG_INPUT_IFORCE_USB is not set
   8.339 -# CONFIG_INPUT_IFORCE_232 is not set
   8.340 -# CONFIG_INPUT_WARRIOR is not set
   8.341 -# CONFIG_INPUT_MAGELLAN is not set
   8.342 -# CONFIG_INPUT_SPACEORB is not set
   8.343 -# CONFIG_INPUT_SPACEBALL is not set
   8.344 -# CONFIG_INPUT_STINGER is not set
   8.345 -# CONFIG_INPUT_DB9 is not set
   8.346 -# CONFIG_INPUT_GAMECON is not set
   8.347 -# CONFIG_INPUT_TURBOGRAFX is not set
   8.348 -# CONFIG_QIC02_TAPE is not set
   8.349 -# CONFIG_IPMI_HANDLER is not set
   8.350 -# CONFIG_IPMI_PANIC_EVENT is not set
   8.351 -# CONFIG_IPMI_DEVICE_INTERFACE is not set
   8.352 -# CONFIG_IPMI_KCS is not set
   8.353 -# CONFIG_IPMI_WATCHDOG is not set
   8.354 -
   8.355 -#
   8.356 -# Watchdog Cards
   8.357 -#
   8.358 -# CONFIG_WATCHDOG is not set
   8.359 -# CONFIG_SCx200 is not set
   8.360 -# CONFIG_SCx200_GPIO is not set
   8.361 -# CONFIG_AMD_RNG is not set
   8.362 -# CONFIG_INTEL_RNG is not set
   8.363 -# CONFIG_HW_RANDOM is not set
   8.364 -# CONFIG_AMD_PM768 is not set
   8.365 -# CONFIG_NVRAM is not set
   8.366 -# CONFIG_RTC is not set
   8.367 -# CONFIG_DTLK is not set
   8.368 -# CONFIG_R3964 is not set
   8.369 -# CONFIG_APPLICOM is not set
   8.370 -# CONFIG_SONYPI is not set
   8.371 -
   8.372 -#
   8.373 -# Ftape, the floppy tape device driver
   8.374 -#
   8.375 -# CONFIG_FTAPE is not set
   8.376 -# CONFIG_AGP is not set
   8.377 -
   8.378 -#
   8.379 -# Direct Rendering Manager (XFree86 DRI support)
   8.380 -#
   8.381 -# CONFIG_DRM is not set
   8.382 -# CONFIG_MWAVE is not set
   8.383 -# CONFIG_OBMOUSE is not set
   8.384 -
   8.385 -#
   8.386 -# File systems
   8.387 -#
   8.388 -# CONFIG_QUOTA is not set
   8.389 -# CONFIG_QFMT_V2 is not set
   8.390 -CONFIG_AUTOFS_FS=y
   8.391 -CONFIG_AUTOFS4_FS=y
   8.392 -# CONFIG_REISERFS_FS is not set
   8.393 -# CONFIG_REISERFS_CHECK is not set
   8.394 -# CONFIG_REISERFS_PROC_INFO is not set
   8.395 -# CONFIG_ADFS_FS is not set
   8.396 -# CONFIG_ADFS_FS_RW is not set
   8.397 -# CONFIG_AFFS_FS is not set
   8.398 -# CONFIG_HFS_FS is not set
   8.399 -# CONFIG_HFSPLUS_FS is not set
   8.400 -# CONFIG_BEFS_FS is not set
   8.401 -# CONFIG_BEFS_DEBUG is not set
   8.402 -# CONFIG_BFS_FS is not set
   8.403 -CONFIG_EXT3_FS=y
   8.404 -CONFIG_JBD=y
   8.405 -# CONFIG_JBD_DEBUG is not set
   8.406 -CONFIG_FAT_FS=y
   8.407 -CONFIG_MSDOS_FS=y
   8.408 -CONFIG_UMSDOS_FS=y
   8.409 -CONFIG_VFAT_FS=y
   8.410 -# CONFIG_EFS_FS is not set
   8.411 -# CONFIG_JFFS_FS is not set
   8.412 -# CONFIG_JFFS2_FS is not set
   8.413 -# CONFIG_CRAMFS is not set
   8.414 -CONFIG_TMPFS=y
   8.415 -CONFIG_RAMFS=y
   8.416 -CONFIG_ISO9660_FS=y
   8.417 -CONFIG_JOLIET=y
   8.418 -CONFIG_ZISOFS=y
   8.419 -# CONFIG_JFS_FS is not set
   8.420 -# CONFIG_JFS_DEBUG is not set
   8.421 -# CONFIG_JFS_STATISTICS is not set
   8.422 -# CONFIG_MINIX_FS is not set
   8.423 -# CONFIG_VXFS_FS is not set
   8.424 -# CONFIG_NTFS_FS is not set
   8.425 -# CONFIG_NTFS_RW is not set
   8.426 -# CONFIG_HPFS_FS is not set
   8.427 -CONFIG_PROC_FS=y
   8.428 -# CONFIG_DEVFS_FS is not set
   8.429 -# CONFIG_DEVFS_MOUNT is not set
   8.430 -# CONFIG_DEVFS_DEBUG is not set
   8.431 -CONFIG_DEVPTS_FS=y
   8.432 -# CONFIG_QNX4FS_FS is not set
   8.433 -# CONFIG_QNX4FS_RW is not set
   8.434 -# CONFIG_ROMFS_FS is not set
   8.435 -CONFIG_EXT2_FS=y
   8.436 -# CONFIG_SYSV_FS is not set
   8.437 -# CONFIG_UDF_FS is not set
   8.438 -# CONFIG_UDF_RW is not set
   8.439 -# CONFIG_UFS_FS is not set
   8.440 -# CONFIG_UFS_FS_WRITE is not set
   8.441 -# CONFIG_XFS_FS is not set
   8.442 -# CONFIG_XFS_QUOTA is not set
   8.443 -# CONFIG_XFS_RT is not set
   8.444 -# CONFIG_XFS_TRACE is not set
   8.445 -# CONFIG_XFS_DEBUG is not set
   8.446 -
   8.447 -#
   8.448 -# Network File Systems
   8.449 -#
   8.450 -# CONFIG_CODA_FS is not set
   8.451 -# CONFIG_INTERMEZZO_FS is not set
   8.452 -CONFIG_NFS_FS=y
   8.453 -CONFIG_NFS_V3=y
   8.454 -# CONFIG_NFS_DIRECTIO is not set
   8.455 -CONFIG_ROOT_NFS=y
   8.456 -CONFIG_NFSD=y
   8.457 -CONFIG_NFSD_V3=y
   8.458 -# CONFIG_NFSD_TCP is not set
   8.459 -CONFIG_SUNRPC=y
   8.460 -CONFIG_LOCKD=y
   8.461 -CONFIG_LOCKD_V4=y
   8.462 -# CONFIG_SMB_FS is not set
   8.463 -# CONFIG_NCP_FS is not set
   8.464 -# CONFIG_NCPFS_PACKET_SIGNING is not set
   8.465 -# CONFIG_NCPFS_IOCTL_LOCKING is not set
   8.466 -# CONFIG_NCPFS_STRONG is not set
   8.467 -# CONFIG_NCPFS_NFS_NS is not set
   8.468 -# CONFIG_NCPFS_OS2_NS is not set
   8.469 -# CONFIG_NCPFS_SMALLDOS is not set
   8.470 -# CONFIG_NCPFS_NLS is not set
   8.471 -# CONFIG_NCPFS_EXTRAS is not set
   8.472 -CONFIG_ZISOFS_FS=y
   8.473 -
   8.474 -#
   8.475 -# Partition Types
   8.476 -#
   8.477 -CONFIG_PARTITION_ADVANCED=y
   8.478 -# CONFIG_ACORN_PARTITION is not set
   8.479 -# CONFIG_OSF_PARTITION is not set
   8.480 -# CONFIG_AMIGA_PARTITION is not set
   8.481 -# CONFIG_ATARI_PARTITION is not set
   8.482 -# CONFIG_MAC_PARTITION is not set
   8.483 -CONFIG_MSDOS_PARTITION=y
   8.484 -# CONFIG_BSD_DISKLABEL is not set
   8.485 -# CONFIG_MINIX_SUBPARTITION is not set
   8.486 -# CONFIG_SOLARIS_X86_PARTITION is not set
   8.487 -# CONFIG_UNIXWARE_DISKLABEL is not set
   8.488 -# CONFIG_LDM_PARTITION is not set
   8.489 -# CONFIG_SGI_PARTITION is not set
   8.490 -# CONFIG_ULTRIX_PARTITION is not set
   8.491 -# CONFIG_SUN_PARTITION is not set
   8.492 -# CONFIG_EFI_PARTITION is not set
   8.493 -# CONFIG_SMB_NLS is not set
   8.494 -CONFIG_NLS=y
   8.495 -
   8.496 -#
   8.497 -# Native Language Support
   8.498 -#
   8.499 -CONFIG_NLS_DEFAULT="iso8559-1"
   8.500 -# CONFIG_NLS_CODEPAGE_437 is not set
   8.501 -# CONFIG_NLS_CODEPAGE_737 is not set
   8.502 -# CONFIG_NLS_CODEPAGE_775 is not set
   8.503 -# CONFIG_NLS_CODEPAGE_850 is not set
   8.504 -# CONFIG_NLS_CODEPAGE_852 is not set
   8.505 -# CONFIG_NLS_CODEPAGE_855 is not set
   8.506 -# CONFIG_NLS_CODEPAGE_857 is not set
   8.507 -# CONFIG_NLS_CODEPAGE_860 is not set
   8.508 -# CONFIG_NLS_CODEPAGE_861 is not set
   8.509 -# CONFIG_NLS_CODEPAGE_862 is not set
   8.510 -# CONFIG_NLS_CODEPAGE_863 is not set
   8.511 -# CONFIG_NLS_CODEPAGE_864 is not set
   8.512 -# CONFIG_NLS_CODEPAGE_865 is not set
   8.513 -# CONFIG_NLS_CODEPAGE_866 is not set
   8.514 -# CONFIG_NLS_CODEPAGE_869 is not set
   8.515 -# CONFIG_NLS_CODEPAGE_936 is not set
   8.516 -# CONFIG_NLS_CODEPAGE_950 is not set
   8.517 -# CONFIG_NLS_CODEPAGE_932 is not set
   8.518 -# CONFIG_NLS_CODEPAGE_949 is not set
   8.519 -# CONFIG_NLS_CODEPAGE_874 is not set
   8.520 -# CONFIG_NLS_ISO8859_8 is not set
   8.521 -# CONFIG_NLS_CODEPAGE_1250 is not set
   8.522 -# CONFIG_NLS_CODEPAGE_1251 is not set
   8.523 -CONFIG_NLS_ISO8859_1=y
   8.524 -# CONFIG_NLS_ISO8859_2 is not set
   8.525 -# CONFIG_NLS_ISO8859_3 is not set
   8.526 -# CONFIG_NLS_ISO8859_4 is not set
   8.527 -# CONFIG_NLS_ISO8859_5 is not set
   8.528 -# CONFIG_NLS_ISO8859_6 is not set
   8.529 -# CONFIG_NLS_ISO8859_7 is not set
   8.530 -# CONFIG_NLS_ISO8859_9 is not set
   8.531 -# CONFIG_NLS_ISO8859_13 is not set
   8.532 -# CONFIG_NLS_ISO8859_14 is not set
   8.533 -# CONFIG_NLS_ISO8859_15 is not set
   8.534 -# CONFIG_NLS_KOI8_R is not set
   8.535 -# CONFIG_NLS_KOI8_U is not set
   8.536 -# CONFIG_NLS_UTF8 is not set
   8.537 -
   8.538 -#
   8.539 -# Console drivers
   8.540 -#
   8.541 -CONFIG_XEN_CONSOLE=y
   8.542 -
   8.543 -#
   8.544 -# Kernel hacking
   8.545 -#
   8.546 -CONFIG_DEBUG_KERNEL=y
   8.547 -# CONFIG_DEBUG_STACKOVERFLOW is not set
   8.548 -# CONFIG_DEBUG_HIGHMEM is not set
   8.549 -# CONFIG_DEBUG_SLAB is not set
   8.550 -# CONFIG_DEBUG_IOVIRT is not set
   8.551 -# CONFIG_MAGIC_SYSRQ is not set
   8.552 -# CONFIG_DEBUG_SPINLOCK is not set
   8.553 -# CONFIG_DEBUG_BUGVERBOSE is not set
   8.554 -CONFIG_KALLSYMS=y
   8.555 -# CONFIG_FRAME_POINTER is not set
   8.556 -CONFIG_LOG_BUF_SHIFT=0
   8.557 -
   8.558 -#
   8.559 -# Cryptographic options
   8.560 -#
   8.561 -# CONFIG_CRYPTO is not set
   8.562 -
   8.563 -#
   8.564 -# Library routines
   8.565 -#
   8.566 -# CONFIG_CRC32 is not set
   8.567 -CONFIG_ZLIB_INFLATE=y
   8.568 -# CONFIG_ZLIB_DEFLATE is not set
     9.1 --- a/linux-2.4.28-xen-sparse/arch/xen/drivers/balloon/Makefile	Wed Jan 19 13:20:15 2005 +0000
     9.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.3 @@ -1,4 +0,0 @@
     9.4 -O_TARGET := drv.o
     9.5 -export-objs := balloon.o
     9.6 -obj-y := balloon.o
     9.7 -include $(TOPDIR)/Rules.make
    10.1 --- a/linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/Makefile	Wed Jan 19 13:20:15 2005 +0000
    10.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.3 @@ -1,10 +0,0 @@
    10.4 -
    10.5 -O_TARGET := drv.o
    10.6 -
    10.7 -subdir-$(CONFIG_XEN_BLKDEV_FRONTEND) += frontend
    10.8 -obj-$(CONFIG_XEN_BLKDEV_FRONTEND)    += frontend/drv.o
    10.9 -
   10.10 -subdir-$(CONFIG_XEN_PHYSDEV_ACCESS) += backend
   10.11 -obj-$(CONFIG_XEN_PHYSDEV_ACCESS)    += backend/drv.o
   10.12 -
   10.13 -include $(TOPDIR)/Rules.make
    11.1 --- a/linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/backend/Makefile	Wed Jan 19 13:20:15 2005 +0000
    11.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.3 @@ -1,3 +0,0 @@
    11.4 -O_TARGET := drv.o
    11.5 -obj-y := main.o control.o interface.o vbd.o
    11.6 -include $(TOPDIR)/Rules.make
    12.1 --- a/linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/frontend/Makefile	Wed Jan 19 13:20:15 2005 +0000
    12.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.3 @@ -1,3 +0,0 @@
    12.4 -O_TARGET := drv.o
    12.5 -obj-y := blkfront.o vbd.o
    12.6 -include $(TOPDIR)/Rules.make
    13.1 --- a/linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/frontend/common.h	Wed Jan 19 13:20:15 2005 +0000
    13.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.3 @@ -1,79 +0,0 @@
    13.4 -/******************************************************************************
    13.5 - * arch/xen/drivers/blkif/frontend/common.h
    13.6 - * 
    13.7 - * Shared definitions between all levels of XenoLinux Virtual block devices.
    13.8 - */
    13.9 -
   13.10 -#ifndef __XEN_DRIVERS_COMMON_H__
   13.11 -#define __XEN_DRIVERS_COMMON_H__
   13.12 -
   13.13 -#include <linux/config.h>
   13.14 -#include <linux/module.h>
   13.15 -#include <linux/kernel.h>
   13.16 -#include <linux/sched.h>
   13.17 -#include <linux/slab.h>
   13.18 -#include <linux/string.h>
   13.19 -#include <linux/errno.h>
   13.20 -#include <linux/fs.h>
   13.21 -#include <linux/hdreg.h>
   13.22 -#include <linux/blkdev.h>
   13.23 -#include <linux/major.h>
   13.24 -#include <asm-xen/xen-public/xen.h>
   13.25 -#include <asm/io.h>
   13.26 -#include <asm/atomic.h>
   13.27 -#include <asm/uaccess.h>
   13.28 -#include <asm-xen/xen-public/io/blkif.h>
   13.29 -
   13.30 -#if 0
   13.31 -#define DPRINTK(_f, _a...) printk ( KERN_ALERT _f , ## _a )
   13.32 -#else
   13.33 -#define DPRINTK(_f, _a...) ((void)0)
   13.34 -#endif
   13.35 -
   13.36 -#if 0
   13.37 -#define DPRINTK_IOCTL(_f, _a...) printk ( KERN_ALERT _f , ## _a )
   13.38 -#else
   13.39 -#define DPRINTK_IOCTL(_f, _a...) ((void)0)
   13.40 -#endif
   13.41 -
   13.42 -/* Private gendisk->flags[] values. */
   13.43 -#define GENHD_FL_XEN        2 /* Is unit a Xen block device?  */
   13.44 -#define GENHD_FL_VIRT_PARTNS 4 /* Are unit partitions virtual? */
   13.45 -
   13.46 -/*
   13.47 - * We have one of these per vbd, whether ide, scsi or 'other'.
   13.48 - * They hang in an array off the gendisk structure. We may end up putting
   13.49 - * all kinds of interesting stuff here :-)
   13.50 - */
   13.51 -typedef struct xl_disk {
   13.52 -    int usage;
   13.53 -} xl_disk_t;
   13.54 -
   13.55 -extern int blkif_open(struct inode *inode, struct file *filep);
   13.56 -extern int blkif_release(struct inode *inode, struct file *filep);
   13.57 -extern int blkif_ioctl(struct inode *inode, struct file *filep,
   13.58 -                                 unsigned command, unsigned long argument);
   13.59 -extern int blkif_check(kdev_t dev);
   13.60 -extern int blkif_revalidate(kdev_t dev);
   13.61 -extern void blkif_control_send(blkif_request_t *req, blkif_response_t *rsp);
   13.62 -extern void do_blkif_request (request_queue_t *rq); 
   13.63 -
   13.64 -extern void xlvbd_update_vbds(void);
   13.65 -
   13.66 -static inline xl_disk_t *xldev_to_xldisk(kdev_t xldev)
   13.67 -{
   13.68 -    struct gendisk *gd = get_gendisk(xldev);
   13.69 -    
   13.70 -    if ( gd == NULL ) 
   13.71 -        return NULL;
   13.72 -    
   13.73 -    return (xl_disk_t *)gd->real_devices + 
   13.74 -        (MINOR(xldev) >> gd->minor_shift);
   13.75 -}
   13.76 -
   13.77 -
   13.78 -/* Virtual block-device subsystem. */
   13.79 -extern int  xlvbd_init(void);
   13.80 -extern void xlvbd_cleanup(void); 
   13.81 -
   13.82 -#endif /* __XEN_DRIVERS_COMMON_H__ */
    14.1 --- a/linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/frontend/vbd.c	Wed Jan 19 13:20:15 2005 +0000
    14.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.3 @@ -1,561 +0,0 @@
    14.4 -/******************************************************************************
    14.5 - * arch/xen/drivers/blkif/frontend/vbd.c
    14.6 - * 
    14.7 - * Xenolinux virtual block-device driver.
    14.8 - * 
    14.9 - * Copyright (c) 2003-2004, Keir Fraser & Steve Hand
   14.10 - * Modifications by Mark A. Williamson are (c) Intel Research Cambridge
   14.11 - */
   14.12 -
   14.13 -#include "common.h"
   14.14 -#include <linux/blk.h>
   14.15 -
   14.16 -/*
   14.17 - * For convenience we distinguish between ide, scsi and 'other' (i.e.
   14.18 - * potentially combinations of the two) in the naming scheme and in a few 
   14.19 - * other places (like default readahead, etc).
   14.20 - */
   14.21 -#define XLIDE_MAJOR_NAME  "hd"
   14.22 -#define XLSCSI_MAJOR_NAME "sd"
   14.23 -#define XLVBD_MAJOR_NAME "xvd"
   14.24 -
   14.25 -#define XLIDE_DEVS_PER_MAJOR   2
   14.26 -#define XLSCSI_DEVS_PER_MAJOR 16
   14.27 -#define XLVBD_DEVS_PER_MAJOR  16
   14.28 -
   14.29 -#define XLIDE_PARTN_SHIFT  6    /* amount to shift minor to get 'real' minor */
   14.30 -#define XLIDE_MAX_PART    (1 << XLIDE_PARTN_SHIFT)     /* minors per ide vbd */
   14.31 -
   14.32 -#define XLSCSI_PARTN_SHIFT 4    /* amount to shift minor to get 'real' minor */
   14.33 -#define XLSCSI_MAX_PART   (1 << XLSCSI_PARTN_SHIFT)   /* minors per scsi vbd */
   14.34 -
   14.35 -#define XLVBD_PARTN_SHIFT  4    /* amount to shift minor to get 'real' minor */
   14.36 -#define XLVBD_MAX_PART    (1 << XLVBD_PARTN_SHIFT) /* minors per 'other' vbd */
   14.37 -
   14.38 -/* The below are for the generic drivers/block/ll_rw_block.c code. */
   14.39 -static int xlide_blksize_size[256];
   14.40 -static int xlide_hardsect_size[256];
   14.41 -static int xlide_max_sectors[256];
   14.42 -static int xlscsi_blksize_size[256];
   14.43 -static int xlscsi_hardsect_size[256];
   14.44 -static int xlscsi_max_sectors[256];
   14.45 -static int xlvbd_blksize_size[256];
   14.46 -static int xlvbd_hardsect_size[256];
   14.47 -static int xlvbd_max_sectors[256];
   14.48 -
   14.49 -/* Information about our VBDs. */
   14.50 -#define MAX_VBDS 64
   14.51 -static int nr_vbds;
   14.52 -static vdisk_t *vbd_info;
   14.53 -
   14.54 -static struct block_device_operations xlvbd_block_fops = 
   14.55 -{
   14.56 -    open:               blkif_open,
   14.57 -    release:            blkif_release,
   14.58 -    ioctl:              blkif_ioctl,
   14.59 -    check_media_change: blkif_check,
   14.60 -    revalidate:         blkif_revalidate,
   14.61 -};
   14.62 -
   14.63 -static int xlvbd_get_vbd_info(vdisk_t *disk_info)
   14.64 -{
   14.65 -    vdisk_t         *buf = (vdisk_t *)__get_free_page(GFP_KERNEL);
   14.66 -    blkif_request_t  req;
   14.67 -    blkif_response_t rsp;
   14.68 -    int              nr;
   14.69 -
   14.70 -    memset(&req, 0, sizeof(req));
   14.71 -    req.operation   = BLKIF_OP_PROBE;
   14.72 -    req.nr_segments = 1;
   14.73 -    req.frame_and_sects[0] = virt_to_machine(buf) | 7;
   14.74 -
   14.75 -    blkif_control_send(&req, &rsp);
   14.76 -
   14.77 -    if ( rsp.status <= 0 )
   14.78 -    {
   14.79 -        printk(KERN_ALERT "Could not probe disks (%d)\n", rsp.status);
   14.80 -        return -1;
   14.81 -    }
   14.82 -
   14.83 -    if ( (nr = rsp.status) > MAX_VBDS )
   14.84 -         nr = MAX_VBDS;
   14.85 -    memcpy(disk_info, buf, nr * sizeof(vdisk_t));
   14.86 -
   14.87 -    return nr;
   14.88 -}
   14.89 -
   14.90 -/*
   14.91 - * xlvbd_init_device - initialise a VBD device
   14.92 - * @disk:              a vdisk_t describing the VBD
   14.93 - *
   14.94 - * Takes a vdisk_t * that describes a VBD the domain has access to.
   14.95 - * Performs appropriate initialisation and registration of the device.
   14.96 - *
   14.97 - * Care needs to be taken when making re-entrant calls to ensure that
   14.98 - * corruption does not occur.  Also, devices that are in use should not have
   14.99 - * their details updated.  This is the caller's responsibility.
  14.100 - */
  14.101 -static int xlvbd_init_device(vdisk_t *xd)
  14.102 -{
  14.103 -    int device = xd->device;
  14.104 -    int major  = MAJOR(device); 
  14.105 -    int minor  = MINOR(device);
  14.106 -    int is_ide = IDE_DISK_MAJOR(major);  /* is this an ide device? */
  14.107 -    int is_scsi= SCSI_BLK_MAJOR(major);  /* is this a scsi device? */
  14.108 -    char *major_name;
  14.109 -    struct gendisk *gd;
  14.110 -    struct block_device *bd;
  14.111 -    xl_disk_t *disk;
  14.112 -    int i, rc = 0, max_part, partno;
  14.113 -    unsigned long capacity;
  14.114 -
  14.115 -    unsigned char buf[64];
  14.116 -
  14.117 -    if ( (bd = bdget(device)) == NULL )
  14.118 -        return -1;
  14.119 -
  14.120 -    /*
  14.121 -     * Update of partition info, and check of usage count, is protected
  14.122 -     * by the per-block-device semaphore.
  14.123 -     */
  14.124 -    down(&bd->bd_sem);
  14.125 -
  14.126 -    if ( ((disk = xldev_to_xldisk(device)) != NULL) && (disk->usage != 0) )
  14.127 -    {
  14.128 -        printk(KERN_ALERT "VBD update failed - in use [dev=%x]\n", device);
  14.129 -        rc = -1;
  14.130 -        goto out;
  14.131 -    }
  14.132 -
  14.133 -    if ( is_ide ) {
  14.134 -
  14.135 -	major_name = XLIDE_MAJOR_NAME; 
  14.136 -	max_part   = XLIDE_MAX_PART;
  14.137 -
  14.138 -    } else if ( is_scsi ) {
  14.139 -
  14.140 -	major_name = XLSCSI_MAJOR_NAME;
  14.141 -	max_part   = XLSCSI_MAX_PART;
  14.142 -
  14.143 -    } else if (VDISK_VIRTUAL(xd->info)) {
  14.144 -
  14.145 -	major_name = XLVBD_MAJOR_NAME;
  14.146 -	max_part   = XLVBD_MAX_PART;
  14.147 -
  14.148 -    } else { 
  14.149 -
  14.150 -        /* SMH: hmm - probably a CCISS driver or sim; assume CCISS for now */
  14.151 -	printk(KERN_ALERT "Assuming device %02x:%02x is CCISS/SCSI\n", 
  14.152 -	       major, minor);
  14.153 -	is_scsi    = 1; 
  14.154 -	major_name = "cciss"; 
  14.155 -	max_part   = XLSCSI_MAX_PART;
  14.156 -
  14.157 -    }
  14.158 -    
  14.159 -    partno = minor & (max_part - 1); 
  14.160 -    
  14.161 -    if ( (gd = get_gendisk(device)) == NULL )
  14.162 -    {
  14.163 -        rc = register_blkdev(major, major_name, &xlvbd_block_fops);
  14.164 -        if ( rc < 0 )
  14.165 -        {
  14.166 -            printk(KERN_ALERT "XL VBD: can't get major %d\n", major);
  14.167 -            goto out;
  14.168 -        }
  14.169 -
  14.170 -        if ( is_ide )
  14.171 -        { 
  14.172 -            blksize_size[major]  = xlide_blksize_size;
  14.173 -            hardsect_size[major] = xlide_hardsect_size;
  14.174 -            max_sectors[major]   = xlide_max_sectors;
  14.175 -            read_ahead[major]    = 8; /* from drivers/ide/ide-probe.c */
  14.176 -        } 
  14.177 -        else if ( is_scsi )
  14.178 -        { 
  14.179 -            blksize_size[major]  = xlscsi_blksize_size;
  14.180 -            hardsect_size[major] = xlscsi_hardsect_size;
  14.181 -            max_sectors[major]   = xlscsi_max_sectors;
  14.182 -            read_ahead[major]    = 0; /* XXX 8; -- guessing */
  14.183 -        }
  14.184 -        else
  14.185 -        { 
  14.186 -            blksize_size[major]  = xlvbd_blksize_size;
  14.187 -            hardsect_size[major] = xlvbd_hardsect_size;
  14.188 -            max_sectors[major]   = xlvbd_max_sectors;
  14.189 -            read_ahead[major]    = 8;
  14.190 -        }
  14.191 -
  14.192 -        blk_init_queue(BLK_DEFAULT_QUEUE(major), do_blkif_request);
  14.193 -
  14.194 -        /*
  14.195 -         * Turn off barking 'headactive' mode. We dequeue buffer heads as
  14.196 -         * soon as we pass them to the back-end driver.
  14.197 -         */
  14.198 -        blk_queue_headactive(BLK_DEFAULT_QUEUE(major), 0);
  14.199 -
  14.200 -        /* Construct an appropriate gendisk structure. */
  14.201 -        gd             = kmalloc(sizeof(struct gendisk), GFP_KERNEL);
  14.202 -        gd->major      = major;
  14.203 -        gd->major_name = major_name; 
  14.204 -    
  14.205 -        gd->max_p      = max_part; 
  14.206 -        if ( is_ide )
  14.207 -        { 
  14.208 -            gd->minor_shift  = XLIDE_PARTN_SHIFT; 
  14.209 -            gd->nr_real      = XLIDE_DEVS_PER_MAJOR; 
  14.210 -        } 
  14.211 -        else if ( is_scsi )
  14.212 -        { 
  14.213 -            gd->minor_shift  = XLSCSI_PARTN_SHIFT; 
  14.214 -            gd->nr_real      = XLSCSI_DEVS_PER_MAJOR; 
  14.215 -        }
  14.216 -        else
  14.217 -        { 
  14.218 -            gd->minor_shift  = XLVBD_PARTN_SHIFT; 
  14.219 -            gd->nr_real      = XLVBD_DEVS_PER_MAJOR; 
  14.220 -        }
  14.221 -
  14.222 -        /* 
  14.223 -        ** The sizes[] and part[] arrays hold the sizes and other 
  14.224 -        ** information about every partition with this 'major' (i.e. 
  14.225 -        ** every disk sharing the 8 bit prefix * max partns per disk) 
  14.226 -        */
  14.227 -        gd->sizes = kmalloc(max_part*gd->nr_real*sizeof(int), GFP_KERNEL);
  14.228 -        gd->part  = kmalloc(max_part*gd->nr_real*sizeof(struct hd_struct), 
  14.229 -                            GFP_KERNEL);
  14.230 -        memset(gd->sizes, 0, max_part * gd->nr_real * sizeof(int));
  14.231 -        memset(gd->part,  0, max_part * gd->nr_real 
  14.232 -               * sizeof(struct hd_struct));
  14.233 -
  14.234 -
  14.235 -        gd->real_devices = kmalloc(gd->nr_real * sizeof(xl_disk_t), 
  14.236 -                                   GFP_KERNEL);
  14.237 -        memset(gd->real_devices, 0, gd->nr_real * sizeof(xl_disk_t));
  14.238 -
  14.239 -        gd->next   = NULL;            
  14.240 -        gd->fops   = &xlvbd_block_fops;
  14.241 -
  14.242 -        gd->de_arr = kmalloc(gd->nr_real * sizeof(*gd->de_arr), 
  14.243 -                             GFP_KERNEL);
  14.244 -        gd->flags  = kmalloc(gd->nr_real * sizeof(*gd->flags), GFP_KERNEL);
  14.245 -    
  14.246 -        memset(gd->de_arr, 0, gd->nr_real * sizeof(*gd->de_arr));
  14.247 -        memset(gd->flags, 0, gd->nr_real *  sizeof(*gd->flags));
  14.248 -
  14.249 -        add_gendisk(gd);
  14.250 -
  14.251 -        blk_size[major] = gd->sizes;
  14.252 -    }
  14.253 -
  14.254 -    if ( VDISK_READONLY(xd->info) )
  14.255 -        set_device_ro(device, 1); 
  14.256 -
  14.257 -    gd->flags[minor >> gd->minor_shift] |= GENHD_FL_XEN;
  14.258 -
  14.259 -    /* NB. Linux 2.4 only handles 32-bit sector offsets and capacities. */
  14.260 -    capacity = (unsigned long)xd->capacity;
  14.261 -
  14.262 -    if ( partno != 0 )
  14.263 -    {
  14.264 -        /*
  14.265 -         * If this was previously set up as a real disc we will have set 
  14.266 -         * up partition-table information. Virtual partitions override 
  14.267 -         * 'real' partitions, and the two cannot coexist on a device.
  14.268 -         */
  14.269 -        if ( !(gd->flags[minor >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS) &&
  14.270 -             (gd->sizes[minor & ~(max_part-1)] != 0) )
  14.271 -        {
  14.272 -            /*
  14.273 -             * Any non-zero sub-partition entries must be cleaned out before
  14.274 -             * installing 'virtual' partition entries. The two types cannot
  14.275 -             * coexist, and virtual partitions are favoured.
  14.276 -             */
  14.277 -            kdev_t dev = device & ~(max_part-1);
  14.278 -            for ( i = max_part - 1; i > 0; i-- )
  14.279 -            {
  14.280 -                invalidate_device(dev+i, 1);
  14.281 -                gd->part[MINOR(dev+i)].start_sect = 0;
  14.282 -                gd->part[MINOR(dev+i)].nr_sects   = 0;
  14.283 -                gd->sizes[MINOR(dev+i)]           = 0;
  14.284 -            }
  14.285 -            printk(KERN_ALERT
  14.286 -                   "Virtual partitions found for /dev/%s - ignoring any "
  14.287 -                   "real partition information we may have found.\n",
  14.288 -                   disk_name(gd, MINOR(device), buf));
  14.289 -        }
  14.290 -
  14.291 -        /* Need to skankily setup 'partition' information */
  14.292 -        gd->part[minor].start_sect = 0; 
  14.293 -        gd->part[minor].nr_sects   = capacity; 
  14.294 -        gd->sizes[minor]           = capacity; 
  14.295 -
  14.296 -        gd->flags[minor >> gd->minor_shift] |= GENHD_FL_VIRT_PARTNS;
  14.297 -    }
  14.298 -    else
  14.299 -    {
  14.300 -        gd->part[minor].nr_sects = capacity;
  14.301 -        gd->sizes[minor] = capacity>>(BLOCK_SIZE_BITS-9);
  14.302 -        
  14.303 -        /* Some final fix-ups depending on the device type */
  14.304 -        switch ( VDISK_TYPE(xd->info) )
  14.305 -        { 
  14.306 -        case VDISK_TYPE_CDROM:
  14.307 -        case VDISK_TYPE_FLOPPY: 
  14.308 -        case VDISK_TYPE_TAPE:
  14.309 -            gd->flags[minor >> gd->minor_shift] |= GENHD_FL_REMOVABLE; 
  14.310 -            printk(KERN_ALERT 
  14.311 -                   "Skipping partition check on %s /dev/%s\n", 
  14.312 -                   VDISK_TYPE(xd->info)==VDISK_TYPE_CDROM ? "cdrom" : 
  14.313 -                   (VDISK_TYPE(xd->info)==VDISK_TYPE_TAPE ? "tape" : 
  14.314 -                    "floppy"), disk_name(gd, MINOR(device), buf)); 
  14.315 -            break; 
  14.316 -
  14.317 -        case VDISK_TYPE_DISK:
  14.318 -            /* Only check partitions on real discs (not virtual!). */
  14.319 -            if ( gd->flags[minor>>gd->minor_shift] & GENHD_FL_VIRT_PARTNS )
  14.320 -            {
  14.321 -                printk(KERN_ALERT
  14.322 -                       "Skipping partition check on virtual /dev/%s\n",
  14.323 -                       disk_name(gd, MINOR(device), buf));
  14.324 -                break;
  14.325 -            }
  14.326 -            register_disk(gd, device, gd->max_p, &xlvbd_block_fops, capacity);
  14.327 -            break; 
  14.328 -
  14.329 -        default:
  14.330 -            printk(KERN_ALERT "XenoLinux: unknown device type %d\n", 
  14.331 -                   VDISK_TYPE(xd->info)); 
  14.332 -            break; 
  14.333 -        }
  14.334 -    }
  14.335 -
  14.336 - out:
  14.337 -    up(&bd->bd_sem);
  14.338 -    bdput(bd);    
  14.339 -    return rc;
  14.340 -}
  14.341 -
  14.342 -
  14.343 -/*
  14.344 - * xlvbd_remove_device - remove a device node if possible
  14.345 - * @device:       numeric device ID
  14.346 - *
  14.347 - * Updates the gendisk structure and invalidates devices.
  14.348 - *
  14.349 - * This is OK for now but in future, should perhaps consider where this should
  14.350 - * deallocate gendisks / unregister devices.
  14.351 - */
  14.352 -static int xlvbd_remove_device(int device)
  14.353 -{
  14.354 -    int i, rc = 0, minor = MINOR(device);
  14.355 -    struct gendisk *gd;
  14.356 -    struct block_device *bd;
  14.357 -    xl_disk_t *disk = NULL;
  14.358 -
  14.359 -    if ( (bd = bdget(device)) == NULL )
  14.360 -        return -1;
  14.361 -
  14.362 -    /*
  14.363 -     * Update of partition info, and check of usage count, is protected
  14.364 -     * by the per-block-device semaphore.
  14.365 -     */
  14.366 -    down(&bd->bd_sem);
  14.367 -
  14.368 -    if ( ((gd = get_gendisk(device)) == NULL) ||
  14.369 -         ((disk = xldev_to_xldisk(device)) == NULL) )
  14.370 -        BUG();
  14.371 -
  14.372 -    if ( disk->usage != 0 )
  14.373 -    {
  14.374 -        printk(KERN_ALERT "VBD removal failed - in use [dev=%x]\n", device);
  14.375 -        rc = -1;
  14.376 -        goto out;
  14.377 -    }
  14.378 - 
  14.379 -    if ( (minor & (gd->max_p-1)) != 0 )
  14.380 -    {
  14.381 -        /* 1: The VBD is mapped to a partition rather than a whole unit. */
  14.382 -        invalidate_device(device, 1);
  14.383 -	gd->part[minor].start_sect = 0;
  14.384 -        gd->part[minor].nr_sects   = 0;
  14.385 -        gd->sizes[minor]           = 0;
  14.386 -
  14.387 -        /* Clear the consists-of-virtual-partitions flag if possible. */
  14.388 -        gd->flags[minor >> gd->minor_shift] &= ~GENHD_FL_VIRT_PARTNS;
  14.389 -        for ( i = 1; i < gd->max_p; i++ )
  14.390 -            if ( gd->sizes[(minor & ~(gd->max_p-1)) + i] != 0 )
  14.391 -                gd->flags[minor >> gd->minor_shift] |= GENHD_FL_VIRT_PARTNS;
  14.392 -
  14.393 -        /*
  14.394 -         * If all virtual partitions are now gone, and a 'whole unit' VBD is
  14.395 -         * present, then we can try to grok the unit's real partition table.
  14.396 -         */
  14.397 -        if ( !(gd->flags[minor >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS) &&
  14.398 -             (gd->sizes[minor & ~(gd->max_p-1)] != 0) &&
  14.399 -             !(gd->flags[minor >> gd->minor_shift] & GENHD_FL_REMOVABLE) )
  14.400 -        {
  14.401 -            register_disk(gd,
  14.402 -                          device&~(gd->max_p-1), 
  14.403 -                          gd->max_p, 
  14.404 -                          &xlvbd_block_fops,
  14.405 -                          gd->part[minor&~(gd->max_p-1)].nr_sects);
  14.406 -        }
  14.407 -    }
  14.408 -    else
  14.409 -    {
  14.410 -        /*
  14.411 -         * 2: The VBD is mapped to an entire 'unit'. Clear all partitions.
  14.412 -         * NB. The partition entries are only cleared if there are no VBDs
  14.413 -         * mapped to individual partitions on this unit.
  14.414 -         */
  14.415 -        i = gd->max_p - 1; /* Default: clear subpartitions as well. */
  14.416 -        if ( gd->flags[minor >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS )
  14.417 -            i = 0; /* 'Virtual' mode: only clear the 'whole unit' entry. */
  14.418 -        while ( i >= 0 )
  14.419 -        {
  14.420 -            invalidate_device(device+i, 1);
  14.421 -            gd->part[minor+i].start_sect = 0;
  14.422 -            gd->part[minor+i].nr_sects   = 0;
  14.423 -            gd->sizes[minor+i]           = 0;
  14.424 -            i--;
  14.425 -        }
  14.426 -    }
  14.427 -
  14.428 - out:
  14.429 -    up(&bd->bd_sem);
  14.430 -    bdput(bd);
  14.431 -    return rc;
  14.432 -}
  14.433 -
  14.434 -/*
  14.435 - * xlvbd_update_vbds - reprobes the VBD status and performs updates driver
  14.436 - * state. The VBDs need to be updated in this way when the domain is
  14.437 - * initialised and also each time we receive an XLBLK_UPDATE event.
  14.438 - */
  14.439 -void xlvbd_update_vbds(void)
  14.440 -{
  14.441 -    int i, j, k, old_nr, new_nr;
  14.442 -    vdisk_t *old_info, *new_info, *merged_info;
  14.443 -
  14.444 -    old_info = vbd_info;
  14.445 -    old_nr   = nr_vbds;
  14.446 -
  14.447 -    new_info = kmalloc(MAX_VBDS * sizeof(vdisk_t), GFP_KERNEL);
  14.448 -    if ( unlikely(new_nr = xlvbd_get_vbd_info(new_info)) < 0 )
  14.449 -    {
  14.450 -        kfree(new_info);
  14.451 -        return;
  14.452 -    }
  14.453 -
  14.454 -    /*
  14.455 -     * Final list maximum size is old list + new list. This occurs only when
  14.456 -     * old list and new list do not overlap at all, and we cannot yet destroy
  14.457 -     * VBDs in the old list because the usage counts are busy.
  14.458 -     */
  14.459 -    merged_info = kmalloc((old_nr + new_nr) * sizeof(vdisk_t), GFP_KERNEL);
  14.460 -
  14.461 -    /* @i tracks old list; @j tracks new list; @k tracks merged list. */
  14.462 -    i = j = k = 0;
  14.463 -
  14.464 -    while ( (i < old_nr) && (j < new_nr) )
  14.465 -    {
  14.466 -        if ( old_info[i].device < new_info[j].device )
  14.467 -        {
  14.468 -            if ( xlvbd_remove_device(old_info[i].device) != 0 )
  14.469 -                memcpy(&merged_info[k++], &old_info[i], sizeof(vdisk_t));
  14.470 -            i++;
  14.471 -        }
  14.472 -        else if ( old_info[i].device > new_info[j].device )
  14.473 -        {
  14.474 -            if ( xlvbd_init_device(&new_info[j]) == 0 )
  14.475 -                memcpy(&merged_info[k++], &new_info[j], sizeof(vdisk_t));
  14.476 -            j++;
  14.477 -        }
  14.478 -        else
  14.479 -        {
  14.480 -            if ( ((old_info[i].capacity == new_info[j].capacity) &&
  14.481 -                  (old_info[i].info == new_info[j].info)) ||
  14.482 -                 (xlvbd_remove_device(old_info[i].device) != 0) )
  14.483 -                memcpy(&merged_info[k++], &old_info[i], sizeof(vdisk_t));
  14.484 -            else if ( xlvbd_init_device(&new_info[j]) == 0 )
  14.485 -                memcpy(&merged_info[k++], &new_info[j], sizeof(vdisk_t));
  14.486 -            i++; j++;
  14.487 -        }
  14.488 -    }
  14.489 -
  14.490 -    for ( ; i < old_nr; i++ )
  14.491 -    {
  14.492 -        if ( xlvbd_remove_device(old_info[i].device) != 0 )
  14.493 -            memcpy(&merged_info[k++], &old_info[i], sizeof(vdisk_t));
  14.494 -    }
  14.495 -
  14.496 -    for ( ; j < new_nr; j++ )
  14.497 -    {
  14.498 -        if ( xlvbd_init_device(&new_info[j]) == 0 )
  14.499 -            memcpy(&merged_info[k++], &new_info[j], sizeof(vdisk_t));
  14.500 -    }
  14.501 -
  14.502 -    vbd_info = merged_info;
  14.503 -    nr_vbds  = k;
  14.504 -
  14.505 -    kfree(old_info);
  14.506 -    kfree(new_info);
  14.507 -}
  14.508 -
  14.509 -
  14.510 -/*
  14.511 - * Set up all the linux device goop for the virtual block devices (vbd's) that
  14.512 - * we know about. Note that although from the backend driver's p.o.v. VBDs are
  14.513 - * addressed simply an opaque 16-bit device number, the domain creation tools 
  14.514 - * conventionally allocate these numbers to correspond to those used by 'real' 
  14.515 - * linux -- this is just for convenience as it means e.g. that the same 
  14.516 - * /etc/fstab can be used when booting with or without Xen.
  14.517 - */
  14.518 -int xlvbd_init(void)
  14.519 -{
  14.520 -    int i;
  14.521 -    
  14.522 -    /*
  14.523 -     * If compiled as a module, we don't support unloading yet. We therefore 
  14.524 -     * permanently increment the reference count to disallow it.
  14.525 -     */
  14.526 -    SET_MODULE_OWNER(&xlvbd_block_fops);
  14.527 -    MOD_INC_USE_COUNT;
  14.528 -
  14.529 -    /* Initialize the global arrays. */
  14.530 -    for ( i = 0; i < 256; i++ ) 
  14.531 -    {
  14.532 -        /* from the generic ide code (drivers/ide/ide-probe.c, etc) */
  14.533 -        xlide_blksize_size[i]  = 1024;
  14.534 -        xlide_hardsect_size[i] = 512;
  14.535 -        xlide_max_sectors[i]   = 128;  /* 'hwif->rqsize' if we knew it */
  14.536 -
  14.537 -        /* from the generic scsi disk code (drivers/scsi/sd.c) */
  14.538 -        xlscsi_blksize_size[i]  = 1024; /* XXX 512; */
  14.539 -        xlscsi_hardsect_size[i] = 512;
  14.540 -        xlscsi_max_sectors[i]   = 128*8; /* XXX 128; */
  14.541 -
  14.542 -        /* we don't really know what to set these too since it depends */
  14.543 -        xlvbd_blksize_size[i]  = 512;
  14.544 -        xlvbd_hardsect_size[i] = 512;
  14.545 -        xlvbd_max_sectors[i]   = 128;
  14.546 -    }
  14.547 -
  14.548 -    vbd_info = kmalloc(MAX_VBDS * sizeof(vdisk_t), GFP_KERNEL);
  14.549 -    nr_vbds  = xlvbd_get_vbd_info(vbd_info);
  14.550 -
  14.551 -    if ( nr_vbds < 0 )
  14.552 -    {
  14.553 -        kfree(vbd_info);
  14.554 -        vbd_info = NULL;
  14.555 -        nr_vbds  = 0;
  14.556 -    }
  14.557 -    else
  14.558 -    {
  14.559 -        for ( i = 0; i < nr_vbds; i++ )
  14.560 -            xlvbd_init_device(&vbd_info[i]);
  14.561 -    }
  14.562 -
  14.563 -    return 0;
  14.564 -}
    15.1 --- a/linux-2.4.28-xen-sparse/arch/xen/drivers/console/Makefile	Wed Jan 19 13:20:15 2005 +0000
    15.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.3 @@ -1,3 +0,0 @@
    15.4 -O_TARGET := drv.o
    15.5 -obj-$(CONFIG_XEN_CONSOLE) := console.o
    15.6 -include $(TOPDIR)/Rules.make
    16.1 --- a/linux-2.4.28-xen-sparse/arch/xen/drivers/dom0/Makefile	Wed Jan 19 13:20:15 2005 +0000
    16.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.3 @@ -1,3 +0,0 @@
    16.4 -O_TARGET := drv.o
    16.5 -obj-y := core.o
    16.6 -include $(TOPDIR)/Rules.make
    17.1 --- a/linux-2.4.28-xen-sparse/arch/xen/drivers/evtchn/Makefile	Wed Jan 19 13:20:15 2005 +0000
    17.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.3 @@ -1,3 +0,0 @@
    17.4 -O_TARGET := drv.o
    17.5 -obj-y := evtchn.o
    17.6 -include $(TOPDIR)/Rules.make
    18.1 --- a/linux-2.4.28-xen-sparse/arch/xen/drivers/netif/Makefile	Wed Jan 19 13:20:15 2005 +0000
    18.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.3 @@ -1,10 +0,0 @@
    18.4 -
    18.5 -O_TARGET := drv.o
    18.6 -
    18.7 -subdir-$(CONFIG_XEN_NETDEV_FRONTEND) += frontend
    18.8 -obj-$(CONFIG_XEN_NETDEV_FRONTEND)    += frontend/drv.o
    18.9 -
   18.10 -subdir-$(CONFIG_XEN_PHYSDEV_ACCESS) += backend
   18.11 -obj-$(CONFIG_XEN_PHYSDEV_ACCESS)    += backend/drv.o
   18.12 -
   18.13 -include $(TOPDIR)/Rules.make
    19.1 --- a/linux-2.4.28-xen-sparse/arch/xen/drivers/netif/backend/Makefile	Wed Jan 19 13:20:15 2005 +0000
    19.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.3 @@ -1,4 +0,0 @@
    19.4 -O_TARGET := drv.o
    19.5 -export-objs := interface.o
    19.6 -obj-y := main.o control.o interface.o
    19.7 -include $(TOPDIR)/Rules.make
    20.1 --- a/linux-2.4.28-xen-sparse/arch/xen/drivers/netif/frontend/Makefile	Wed Jan 19 13:20:15 2005 +0000
    20.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.3 @@ -1,3 +0,0 @@
    20.4 -O_TARGET := drv.o
    20.5 -obj-y := main.o
    20.6 -include $(TOPDIR)/Rules.make
    21.1 --- a/linux-2.4.28-xen-sparse/arch/xen/kernel/Makefile	Wed Jan 19 13:20:15 2005 +0000
    21.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.3 @@ -1,20 +0,0 @@
    21.4 -
    21.5 -.S.o:
    21.6 -	$(CC) $(AFLAGS) -traditional -c $< -o $*.o
    21.7 -
    21.8 -all: kernel.o head.o init_task.o
    21.9 -
   21.10 -O_TARGET := kernel.o
   21.11 -
   21.12 -export-objs     := i386_ksyms.o gnttab.o skbuff.o ctrl_if.o
   21.13 -
   21.14 -obj-y	:= process.o semaphore.o signal.o entry.o traps.o irq.o  \
   21.15 -		ptrace.o ioport.o ldt.o setup.o time.o sys_i386.o \
   21.16 -		i386_ksyms.o i387.o evtchn.o ctrl_if.o pci-dma.o \
   21.17 -		reboot.o fixup.o gnttab.o skbuff.o
   21.18 -
   21.19 -ifdef CONFIG_PCI
   21.20 -obj-y	+= pci-i386.o pci-pc.o
   21.21 -endif
   21.22 -
   21.23 -include $(TOPDIR)/Rules.make
    22.1 --- a/linux-2.4.28-xen-sparse/arch/xen/kernel/entry.S	Wed Jan 19 13:20:15 2005 +0000
    22.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.3 @@ -1,779 +0,0 @@
    22.4 -/*
    22.5 - *  linux/arch/i386/entry.S
    22.6 - *
    22.7 - *  Copyright (C) 1991, 1992  Linus Torvalds
    22.8 - */
    22.9 -
   22.10 -/*
   22.11 - * entry.S contains the system-call and fault low-level handling routines.
   22.12 - * This also contains the timer-interrupt handler, as well as all interrupts
   22.13 - * and faults that can result in a task-switch.
   22.14 - *
   22.15 - * NOTE: This code handles signal-recognition, which happens every time
   22.16 - * after a timer-interrupt and after each system call.
   22.17 - *
   22.18 - * I changed all the .align's to 4 (16 byte alignment), as that's faster
   22.19 - * on a 486.
   22.20 - *
   22.21 - * Stack layout in 'ret_to_user':
   22.22 - * 	ptrace needs to have all regs on the stack.
   22.23 - *	if the order here is changed, it needs to be
   22.24 - *	updated in fork.c:copy_process, signal.c:do_signal,
   22.25 - *	ptrace.c and ptrace.h
   22.26 - *
   22.27 - *	 0(%esp) - %ebx
   22.28 - *	 4(%esp) - %ecx
   22.29 - *	 8(%esp) - %edx
   22.30 - *       C(%esp) - %esi
   22.31 - *	10(%esp) - %edi
   22.32 - *	14(%esp) - %ebp
   22.33 - *	18(%esp) - %eax
   22.34 - *	1C(%esp) - %ds
   22.35 - *	20(%esp) - %es
   22.36 - *	24(%esp) - orig_eax
   22.37 - *	28(%esp) - %eip
   22.38 - *	2C(%esp) - %cs
   22.39 - *	30(%esp) - %eflags
   22.40 - *	34(%esp) - %oldesp
   22.41 - *	38(%esp) - %oldss
   22.42 - *
   22.43 - * "current" is in register %ebx during any slow entries.
   22.44 - */
   22.45 -
   22.46 -#include <linux/config.h>
   22.47 -#include <linux/sys.h>
   22.48 -#include <linux/linkage.h>
   22.49 -#include <asm/segment.h>
   22.50 -#include <asm/smp.h>
   22.51 -
   22.52 -EBX		= 0x00
   22.53 -ECX		= 0x04
   22.54 -EDX		= 0x08
   22.55 -ESI		= 0x0C
   22.56 -EDI		= 0x10
   22.57 -EBP		= 0x14
   22.58 -EAX		= 0x18
   22.59 -DS		= 0x1C
   22.60 -ES		= 0x20
   22.61 -ORIG_EAX	= 0x24
   22.62 -EIP		= 0x28
   22.63 -CS		= 0x2C
   22.64 -EFLAGS		= 0x30
   22.65 -OLDESP		= 0x34
   22.66 -OLDSS		= 0x38
   22.67 -
   22.68 -CF_MASK		= 0x00000001
   22.69 -TF_MASK		= 0x00000100
   22.70 -IF_MASK		= 0x00000200
   22.71 -DF_MASK		= 0x00000400
   22.72 -NT_MASK		= 0x00004000
   22.73 -
   22.74 -/* Offsets into task_struct. */
   22.75 -state		=  0
   22.76 -flags		=  4
   22.77 -sigpending	=  8
   22.78 -addr_limit	= 12
   22.79 -exec_domain	= 16
   22.80 -need_resched	= 20
   22.81 -tsk_ptrace	= 24
   22.82 -processor	= 52
   22.83 -
   22.84 -/* Offsets into shared_info_t. */
   22.85 -#define evtchn_upcall_pending /* 0 */
   22.86 -#define evtchn_upcall_mask       1
   22.87 -
   22.88 -ENOSYS = 38
   22.89 -
   22.90 -
   22.91 -#define SAVE_ALL \
   22.92 -	cld; \
   22.93 -	pushl %es; \
   22.94 -	pushl %ds; \
   22.95 -	pushl %eax; \
   22.96 -	pushl %ebp; \
   22.97 -	pushl %edi; \
   22.98 -	pushl %esi; \
   22.99 -	pushl %edx; \
  22.100 -	pushl %ecx; \
  22.101 -	pushl %ebx; \
  22.102 -	movl $(__KERNEL_DS),%edx; \
  22.103 -	movl %edx,%ds; \
  22.104 -	movl %edx,%es;
  22.105 -
  22.106 -#define RESTORE_ALL	\
  22.107 -	popl %ebx;	\
  22.108 -	popl %ecx;	\
  22.109 -	popl %edx;	\
  22.110 -	popl %esi;	\
  22.111 -	popl %edi;	\
  22.112 -	popl %ebp;	\
  22.113 -	popl %eax;	\
  22.114 -1:	popl %ds;	\
  22.115 -2:	popl %es;	\
  22.116 -	addl $4,%esp;	\
  22.117 -3:	iret;		\
  22.118 -.section .fixup,"ax";	\
  22.119 -4:	movl $0,(%esp);	\
  22.120 -	jmp 1b;		\
  22.121 -5:	movl $0,(%esp);	\
  22.122 -	jmp 2b;		\
  22.123 -6:	pushl %ss;	\
  22.124 -	popl %ds;	\
  22.125 -	pushl %ss;	\
  22.126 -	popl %es;	\
  22.127 -	pushl $11;	\
  22.128 -	call do_exit;	\
  22.129 -.previous;		\
  22.130 -.section __ex_table,"a";\
  22.131 -	.align 4;	\
  22.132 -	.long 1b,4b;	\
  22.133 -	.long 2b,5b;	\
  22.134 -	.long 3b,6b;	\
  22.135 -.previous
  22.136 -
  22.137 -#define GET_CURRENT(reg) \
  22.138 -	movl $-8192, reg; \
  22.139 -	andl %esp, reg
  22.140 -
  22.141 -ENTRY(lcall7)
  22.142 -	pushfl			# We get a different stack layout with call
  22.143 -	pushl %eax		# gates, which has to be cleaned up later..
  22.144 -	SAVE_ALL
  22.145 -	movl EIP(%esp),%eax	# due to call gates, this is eflags, not eip..
  22.146 -	movl CS(%esp),%edx	# this is eip..
  22.147 -	movl EFLAGS(%esp),%ecx	# and this is cs..
  22.148 -	movl %eax,EFLAGS(%esp)	#
  22.149 -	andl $~(NT_MASK|TF_MASK|DF_MASK), %eax
  22.150 -	pushl %eax
  22.151 -	popfl
  22.152 -	movl %edx,EIP(%esp)	# Now we move them to their "normal" places
  22.153 -	movl %ecx,CS(%esp)	#
  22.154 -	movl %esp,%ebx
  22.155 -	pushl %ebx
  22.156 -	andl $-8192,%ebx	# GET_CURRENT
  22.157 -	movl exec_domain(%ebx),%edx	# Get the execution domain
  22.158 -	movl 4(%edx),%edx	# Get the lcall7 handler for the domain
  22.159 -	pushl $0x7
  22.160 -	call *%edx
  22.161 -	addl $4, %esp
  22.162 -	popl %eax
  22.163 -	jmp ret_to_user
  22.164 -
  22.165 -ENTRY(lcall27)
  22.166 -	pushfl			# We get a different stack layout with call
  22.167 -	pushl %eax		# gates, which has to be cleaned up later..
  22.168 -	SAVE_ALL
  22.169 -	movl EIP(%esp),%eax	# due to call gates, this is eflags, not eip..
  22.170 -	movl CS(%esp),%edx	# this is eip..
  22.171 -	movl EFLAGS(%esp),%ecx	# and this is cs..
  22.172 -	movl %eax,EFLAGS(%esp)	#
  22.173 -	andl $~(NT_MASK|TF_MASK|DF_MASK), %eax
  22.174 -	pushl %eax
  22.175 -	popfl
  22.176 -	movl %edx,EIP(%esp)	# Now we move them to their "normal" places
  22.177 -	movl %ecx,CS(%esp)	#
  22.178 -	movl %esp,%ebx
  22.179 -	pushl %ebx
  22.180 -	andl $-8192,%ebx	# GET_CURRENT
  22.181 -	movl exec_domain(%ebx),%edx	# Get the execution domain
  22.182 -	movl 4(%edx),%edx	# Get the lcall7 handler for the domain
  22.183 -	pushl $0x27
  22.184 -	call *%edx
  22.185 -	addl $4, %esp
  22.186 -	popl %eax
  22.187 -	jmp ret_to_user
  22.188 -
  22.189 -ENTRY(ret_from_fork)
  22.190 -	pushl %ebx
  22.191 -	call SYMBOL_NAME(schedule_tail)
  22.192 -	addl $4, %esp
  22.193 -	GET_CURRENT(%ebx)
  22.194 -	testb $0x02,tsk_ptrace(%ebx)	# PT_TRACESYS
  22.195 -	jne tracesys_exit
  22.196 -	jmp ret_to_user
  22.197 -
  22.198 -/*
  22.199 - * Return to user mode is not as complex as all this looks,
  22.200 - * but we want the default path for a system call return to
  22.201 - * go as quickly as possible which is why some of this is
  22.202 - * less clear than it otherwise should be.
  22.203 - */
  22.204 -ENTRY(system_call)
  22.205 -	pushl %eax			# save orig_eax
  22.206 -	SAVE_ALL
  22.207 -	GET_CURRENT(%ebx)
  22.208 -	testb $0x02,tsk_ptrace(%ebx)	# PT_TRACESYS
  22.209 -	jne tracesys
  22.210 -	cmpl $(NR_syscalls),%eax
  22.211 -	jae badsys
  22.212 -	call *SYMBOL_NAME(sys_call_table)(,%eax,4)
  22.213 -	movl %eax,EAX(%esp)		# save the return value
  22.214 -ret_to_user:
  22.215 -        movl SYMBOL_NAME(HYPERVISOR_shared_info),%esi
  22.216 -        movb $1,evtchn_upcall_mask(%esi) # make tests atomic
  22.217 -ret_to_user_nocli:
  22.218 -	cmpl $0,need_resched(%ebx)
  22.219 -	jne  reschedule
  22.220 -	cmpl $0,sigpending(%ebx)
  22.221 -	je   safesti                    # ensure need_resched updates are seen
  22.222 -/*signal_return:*/
  22.223 -	movb $0,evtchn_upcall_mask(%esi) # reenable event callbacks
  22.224 -	movl %esp,%eax
  22.225 -	xorl %edx,%edx
  22.226 -	call SYMBOL_NAME(do_signal)
  22.227 -	jmp  safesti
  22.228 -
  22.229 -	ALIGN
  22.230 -restore_all:
  22.231 -	RESTORE_ALL
  22.232 -
  22.233 -	ALIGN
  22.234 -tracesys:
  22.235 -	movl $-ENOSYS,EAX(%esp)
  22.236 -	call SYMBOL_NAME(syscall_trace)
  22.237 -	movl ORIG_EAX(%esp),%eax
  22.238 -	cmpl $(NR_syscalls),%eax
  22.239 -	jae tracesys_exit
  22.240 -	call *SYMBOL_NAME(sys_call_table)(,%eax,4)
  22.241 -	movl %eax,EAX(%esp)		# save the return value
  22.242 -tracesys_exit:
  22.243 -	call SYMBOL_NAME(syscall_trace)
  22.244 -	jmp ret_to_user
  22.245 -badsys:
  22.246 -	movl $-ENOSYS,EAX(%esp)
  22.247 -	jmp ret_to_user
  22.248 -
  22.249 -	ALIGN
  22.250 -ENTRY(ret_from_intr)
  22.251 -	GET_CURRENT(%ebx)
  22.252 -ret_from_exception:
  22.253 -	movb CS(%esp),%al
  22.254 -	testl $2,%eax
  22.255 -	jne ret_to_user
  22.256 -	jmp restore_all
  22.257 -
  22.258 -	ALIGN
  22.259 -reschedule:
  22.260 -        movb $0,evtchn_upcall_mask(%esi)  # reenable event callbacks
  22.261 -	call SYMBOL_NAME(schedule)        # test
  22.262 -	jmp  ret_to_user
  22.263 -
  22.264 -ENTRY(divide_error)
  22.265 -	pushl $0		# no error code
  22.266 -	pushl $ SYMBOL_NAME(do_divide_error)
  22.267 -	ALIGN
  22.268 -error_code:
  22.269 -	pushl %ds
  22.270 -	pushl %eax
  22.271 -	xorl %eax,%eax
  22.272 -	pushl %ebp
  22.273 -	pushl %edi
  22.274 -	pushl %esi
  22.275 -	pushl %edx
  22.276 -	decl %eax			# eax = -1
  22.277 -	pushl %ecx
  22.278 -	pushl %ebx
  22.279 -	GET_CURRENT(%ebx)
  22.280 -	cld
  22.281 -	movl %es,%ecx
  22.282 -	movl ORIG_EAX(%esp), %esi	# get the error code
  22.283 -	movl ES(%esp), %edi		# get the function address
  22.284 -	movl %eax, ORIG_EAX(%esp)
  22.285 -	movl %ecx, ES(%esp)
  22.286 -	movl %esp,%edx
  22.287 -	pushl %esi			# push the error code
  22.288 -	pushl %edx			# push the pt_regs pointer
  22.289 -	movl $(__KERNEL_DS),%edx
  22.290 -	movl %edx,%ds
  22.291 -	movl %edx,%es
  22.292 -	call *%edi
  22.293 -	addl $8,%esp
  22.294 -	jmp ret_from_exception
  22.295 -
  22.296 -# A note on the "critical region" in our callback handler.
  22.297 -# We want to avoid stacking callback handlers due to events occurring
  22.298 -# during handling of the last event. To do this, we keep events disabled
  22.299 -# until we've done all processing. HOWEVER, we must enable events before
  22.300 -# popping the stack frame (can't be done atomically) and so it would still
  22.301 -# be possible to get enough handler activations to overflow the stack.
  22.302 -# Although unlikely, bugs of that kind are hard to track down, so we'd
  22.303 -# like to avoid the possibility.
  22.304 -# So, on entry to the handler we detect whether we interrupted an
  22.305 -# existing activation in its critical region -- if so, we pop the current
  22.306 -# activation and restart the handler using the previous one.
  22.307 -ENTRY(hypervisor_callback)
  22.308 -        pushl %eax
  22.309 -        SAVE_ALL
  22.310 -        GET_CURRENT(%ebx)
  22.311 -        movl EIP(%esp),%eax
  22.312 -        cmpl $scrit,%eax
  22.313 -        jb   11f
  22.314 -        cmpl $ecrit,%eax
  22.315 -        jb   critical_region_fixup
  22.316 -11:     push %esp
  22.317 -        call evtchn_do_upcall
  22.318 -        add  $4,%esp
  22.319 -        movl SYMBOL_NAME(HYPERVISOR_shared_info),%esi
  22.320 -        movb CS(%esp),%cl
  22.321 -	test $2,%cl          # slow return to ring 2 or 3
  22.322 -	jne  ret_to_user_nocli
  22.323 -safesti:movb $0,evtchn_upcall_mask(%esi) # reenable event callbacks
  22.324 -scrit:  /**** START OF CRITICAL REGION ****/
  22.325 -        testb $0xFF,evtchn_upcall_pending(%esi)
  22.326 -        jnz  14f              # process more events if necessary...
  22.327 -        RESTORE_ALL
  22.328 -14:     movb $1,evtchn_upcall_mask(%esi)
  22.329 -        jmp  11b
  22.330 -ecrit:  /**** END OF CRITICAL REGION ****/
  22.331 -# [How we do the fixup]. We want to merge the current stack frame with the
  22.332 -# just-interrupted frame. How we do this depends on where in the critical
  22.333 -# region the interrupted handler was executing, and so how many saved
  22.334 -# registers are in each frame. We do this quickly using the lookup table
  22.335 -# 'critical_fixup_table'. For each byte offset in the critical region, it
  22.336 -# provides the number of bytes which have already been popped from the
  22.337 -# interrupted stack frame. 
  22.338 -critical_region_fixup:
  22.339 -        addl $critical_fixup_table-scrit,%eax
  22.340 -        movzbl (%eax),%eax    # %eax contains num bytes popped
  22.341 -        mov  %esp,%esi
  22.342 -        add  %eax,%esi        # %esi points at end of src region
  22.343 -        mov  %esp,%edi
  22.344 -        add  $0x34,%edi       # %edi points at end of dst region
  22.345 -        mov  %eax,%ecx
  22.346 -        shr  $2,%ecx          # convert words to bytes
  22.347 -        je   16f              # skip loop if nothing to copy
  22.348 -15:     subl $4,%esi          # pre-decrementing copy loop
  22.349 -        subl $4,%edi
  22.350 -        movl (%esi),%eax
  22.351 -        movl %eax,(%edi)
  22.352 -        loop 15b
  22.353 -16:     movl %edi,%esp        # final %edi is top of merged stack
  22.354 -        jmp  11b
  22.355 -        
  22.356 -critical_fixup_table:        
  22.357 -        .byte 0x00,0x00,0x00                  # testb $0xFF,(%esi)
  22.358 -        .byte 0x00,0x00                       # jnz  14f
  22.359 -        .byte 0x00                            # pop  %ebx
  22.360 -        .byte 0x04                            # pop  %ecx
  22.361 -        .byte 0x08                            # pop  %edx
  22.362 -        .byte 0x0c                            # pop  %esi
  22.363 -        .byte 0x10                            # pop  %edi
  22.364 -        .byte 0x14                            # pop  %ebp
  22.365 -        .byte 0x18                            # pop  %eax
  22.366 -        .byte 0x1c                            # pop  %ds
  22.367 -        .byte 0x20                            # pop  %es
  22.368 -        .byte 0x24,0x24,0x24                  # add  $4,%esp
  22.369 -        .byte 0x28                            # iret
  22.370 -        .byte 0x00,0x00,0x00,0x00             # movb $1,4(%esi)
  22.371 -        .byte 0x00,0x00                       # jmp  11b
  22.372 -
  22.373 -# Hypervisor uses this for application faults while it executes.
  22.374 -ENTRY(failsafe_callback)
  22.375 -1:      popl %ds
  22.376 -2:      popl %es
  22.377 -3:      popl %fs
  22.378 -4:      popl %gs
  22.379 -5:      iret
  22.380 -.section .fixup,"ax";	\
  22.381 -6:	movl $0,(%esp);	\
  22.382 -	jmp 1b;		\
  22.383 -7:	movl $0,(%esp);	\
  22.384 -	jmp 2b;		\
  22.385 -8:	movl $0,(%esp);	\
  22.386 -	jmp 3b;		\
  22.387 -9:	movl $0,(%esp);	\
  22.388 -	jmp 4b;		\
  22.389 -10:	pushl %ss;	\
  22.390 -	popl %ds;	\
  22.391 -	pushl %ss;	\
  22.392 -	popl %es;	\
  22.393 -	pushl $11;	\
  22.394 -	call do_exit;	\
  22.395 -.previous;		\
  22.396 -.section __ex_table,"a";\
  22.397 -	.align 4;	\
  22.398 -	.long 1b,6b;	\
  22.399 -	.long 2b,7b;	\
  22.400 -	.long 3b,8b;	\
  22.401 -	.long 4b,9b;	\
  22.402 -	.long 5b,10b;	\
  22.403 -.previous
  22.404 -        
  22.405 -ENTRY(coprocessor_error)
  22.406 -	pushl $0
  22.407 -	pushl $ SYMBOL_NAME(do_coprocessor_error)
  22.408 -	jmp error_code
  22.409 -
  22.410 -ENTRY(simd_coprocessor_error)
  22.411 -	pushl $0
  22.412 -	pushl $ SYMBOL_NAME(do_simd_coprocessor_error)
  22.413 -	jmp error_code
  22.414 -
  22.415 -ENTRY(device_not_available)
  22.416 -	pushl $-1		# mark this as an int
  22.417 -	SAVE_ALL
  22.418 -	GET_CURRENT(%ebx)
  22.419 -	call SYMBOL_NAME(math_state_restore)
  22.420 -	jmp ret_from_exception
  22.421 -
  22.422 -ENTRY(debug)
  22.423 -	pushl $0
  22.424 -	pushl $ SYMBOL_NAME(do_debug)
  22.425 -	jmp error_code
  22.426 -
  22.427 -ENTRY(int3)
  22.428 -	pushl $0
  22.429 -	pushl $ SYMBOL_NAME(do_int3)
  22.430 -	jmp error_code
  22.431 -
  22.432 -ENTRY(overflow)
  22.433 -	pushl $0
  22.434 -	pushl $ SYMBOL_NAME(do_overflow)
  22.435 -	jmp error_code
  22.436 -
  22.437 -ENTRY(bounds)
  22.438 -	pushl $0
  22.439 -	pushl $ SYMBOL_NAME(do_bounds)
  22.440 -	jmp error_code
  22.441 -
  22.442 -ENTRY(invalid_op)
  22.443 -	pushl $0
  22.444 -	pushl $ SYMBOL_NAME(do_invalid_op)
  22.445 -	jmp error_code
  22.446 -
  22.447 -ENTRY(coprocessor_segment_overrun)
  22.448 -	pushl $0
  22.449 -	pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun)
  22.450 -	jmp error_code
  22.451 -
  22.452 -ENTRY(double_fault)
  22.453 -	pushl $ SYMBOL_NAME(do_double_fault)
  22.454 -	jmp error_code
  22.455 -
  22.456 -ENTRY(invalid_TSS)
  22.457 -	pushl $ SYMBOL_NAME(do_invalid_TSS)
  22.458 -	jmp error_code
  22.459 -
  22.460 -ENTRY(segment_not_present)
  22.461 -	pushl $ SYMBOL_NAME(do_segment_not_present)
  22.462 -	jmp error_code
  22.463 -
  22.464 -ENTRY(stack_segment)
  22.465 -	pushl $ SYMBOL_NAME(do_stack_segment)
  22.466 -	jmp error_code
  22.467 -
  22.468 -ENTRY(general_protection)
  22.469 -	pushl $ SYMBOL_NAME(do_general_protection)
  22.470 -	jmp error_code
  22.471 -
  22.472 -ENTRY(alignment_check)
  22.473 -	pushl $ SYMBOL_NAME(do_alignment_check)
  22.474 -	jmp error_code
  22.475 -
  22.476 -# This handler is special, because it gets an extra value on its stack,
  22.477 -# which is the linear faulting address.
  22.478 -#define PAGE_FAULT_STUB(_name1, _name2)                                  \
  22.479 -ENTRY(_name1)                                                            \
  22.480 -	pushl %ds                                                      ; \
  22.481 -	pushl %eax                                                     ; \
  22.482 -	xorl %eax,%eax                                                 ; \
  22.483 -	pushl %ebp                                                     ; \
  22.484 -	pushl %edi                                                     ; \
  22.485 -	pushl %esi                                                     ; \
  22.486 -	pushl %edx                                                     ; \
  22.487 -	decl %eax                      /* eax = -1 */                  ; \
  22.488 -	pushl %ecx                                                     ; \
  22.489 -	pushl %ebx                                                     ; \
  22.490 -	GET_CURRENT(%ebx)                                              ; \
  22.491 -	cld                                                            ; \
  22.492 -	movl %es,%ecx                                                  ; \
  22.493 -	movl ORIG_EAX(%esp), %esi      /* get the error code */        ; \
  22.494 -	movl ES(%esp), %edi            /* get the faulting address */  ; \
  22.495 -	movl %eax, ORIG_EAX(%esp)                                      ; \
  22.496 -	movl %ecx, ES(%esp)                                            ; \
  22.497 -	movl %esp,%edx                                                 ; \
  22.498 -        pushl %edi                     /* push the faulting address */ ; \
  22.499 -	pushl %esi                     /* push the error code */       ; \
  22.500 -	pushl %edx                     /* push the pt_regs pointer */  ; \
  22.501 -	movl $(__KERNEL_DS),%edx                                       ; \
  22.502 -	movl %edx,%ds                                                  ; \
  22.503 -	movl %edx,%es                                                  ; \
  22.504 -	call SYMBOL_NAME(_name2)                                       ; \
  22.505 -	addl $12,%esp                                                  ; \
  22.506 -	jmp ret_from_exception                                         ;
  22.507 -PAGE_FAULT_STUB(page_fault, do_page_fault)
  22.508 -
  22.509 -ENTRY(machine_check)
  22.510 -	pushl $0
  22.511 -	pushl $ SYMBOL_NAME(do_machine_check)
  22.512 -	jmp error_code
  22.513 -
  22.514 -ENTRY(fixup_4gb_segment)
  22.515 -	pushl $ SYMBOL_NAME(do_fixup_4gb_segment)
  22.516 -	jmp error_code
  22.517 -
  22.518 -.data
  22.519 -ENTRY(sys_call_table)
  22.520 -	.long SYMBOL_NAME(sys_ni_syscall)	/* 0  -  old "setup()" system call*/
  22.521 -	.long SYMBOL_NAME(sys_exit)
  22.522 -	.long SYMBOL_NAME(sys_fork)
  22.523 -	.long SYMBOL_NAME(sys_read)
  22.524 -	.long SYMBOL_NAME(sys_write)
  22.525 -	.long SYMBOL_NAME(sys_open)		/* 5 */
  22.526 -	.long SYMBOL_NAME(sys_close)
  22.527 -	.long SYMBOL_NAME(sys_waitpid)
  22.528 -	.long SYMBOL_NAME(sys_creat)
  22.529 -	.long SYMBOL_NAME(sys_link)
  22.530 -	.long SYMBOL_NAME(sys_unlink)		/* 10 */
  22.531 -	.long SYMBOL_NAME(sys_execve)
  22.532 -	.long SYMBOL_NAME(sys_chdir)
  22.533 -	.long SYMBOL_NAME(sys_time)
  22.534 -	.long SYMBOL_NAME(sys_mknod)
  22.535 -	.long SYMBOL_NAME(sys_chmod)		/* 15 */
  22.536 -	.long SYMBOL_NAME(sys_lchown16)
  22.537 -	.long SYMBOL_NAME(sys_ni_syscall)				/* old break syscall holder */
  22.538 -	.long SYMBOL_NAME(sys_stat)
  22.539 -	.long SYMBOL_NAME(sys_lseek)
  22.540 -	.long SYMBOL_NAME(sys_getpid)		/* 20 */
  22.541 -	.long SYMBOL_NAME(sys_mount)
  22.542 -	.long SYMBOL_NAME(sys_oldumount)
  22.543 -	.long SYMBOL_NAME(sys_setuid16)
  22.544 -	.long SYMBOL_NAME(sys_getuid16)
  22.545 -	.long SYMBOL_NAME(sys_stime)		/* 25 */
  22.546 -	.long SYMBOL_NAME(sys_ptrace)
  22.547 -	.long SYMBOL_NAME(sys_alarm)
  22.548 -	.long SYMBOL_NAME(sys_fstat)
  22.549 -	.long SYMBOL_NAME(sys_pause)
  22.550 -	.long SYMBOL_NAME(sys_utime)		/* 30 */
  22.551 -	.long SYMBOL_NAME(sys_ni_syscall)				/* old stty syscall holder */
  22.552 -	.long SYMBOL_NAME(sys_ni_syscall)				/* old gtty syscall holder */
  22.553 -	.long SYMBOL_NAME(sys_access)
  22.554 -	.long SYMBOL_NAME(sys_nice)
  22.555 -	.long SYMBOL_NAME(sys_ni_syscall)	/* 35 */		/* old ftime syscall holder */
  22.556 -	.long SYMBOL_NAME(sys_sync)
  22.557 -	.long SYMBOL_NAME(sys_kill)
  22.558 -	.long SYMBOL_NAME(sys_rename)
  22.559 -	.long SYMBOL_NAME(sys_mkdir)
  22.560 -	.long SYMBOL_NAME(sys_rmdir)		/* 40 */
  22.561 -	.long SYMBOL_NAME(sys_dup)
  22.562 -	.long SYMBOL_NAME(sys_pipe)
  22.563 -	.long SYMBOL_NAME(sys_times)
  22.564 -	.long SYMBOL_NAME(sys_ni_syscall)				/* old prof syscall holder */
  22.565 -	.long SYMBOL_NAME(sys_brk)		/* 45 */
  22.566 -	.long SYMBOL_NAME(sys_setgid16)
  22.567 -	.long SYMBOL_NAME(sys_getgid16)
  22.568 -	.long SYMBOL_NAME(sys_signal)
  22.569 -	.long SYMBOL_NAME(sys_geteuid16)
  22.570 -	.long SYMBOL_NAME(sys_getegid16)	/* 50 */
  22.571 -	.long SYMBOL_NAME(sys_acct)
  22.572 -	.long SYMBOL_NAME(sys_umount)					/* recycled never used phys() */
  22.573 -	.long SYMBOL_NAME(sys_ni_syscall)				/* old lock syscall holder */
  22.574 -	.long SYMBOL_NAME(sys_ioctl)
  22.575 -	.long SYMBOL_NAME(sys_fcntl)		/* 55 */
  22.576 -	.long SYMBOL_NAME(sys_ni_syscall)				/* old mpx syscall holder */
  22.577 -	.long SYMBOL_NAME(sys_setpgid)
  22.578 -	.long SYMBOL_NAME(sys_ni_syscall)				/* old ulimit syscall holder */
  22.579 -	.long SYMBOL_NAME(sys_olduname)
  22.580 -	.long SYMBOL_NAME(sys_umask)		/* 60 */
  22.581 -	.long SYMBOL_NAME(sys_chroot)
  22.582 -	.long SYMBOL_NAME(sys_ustat)
  22.583 -	.long SYMBOL_NAME(sys_dup2)
  22.584 -	.long SYMBOL_NAME(sys_getppid)
  22.585 -	.long SYMBOL_NAME(sys_getpgrp)		/* 65 */
  22.586 -	.long SYMBOL_NAME(sys_setsid)
  22.587 -	.long SYMBOL_NAME(sys_sigaction)
  22.588 -	.long SYMBOL_NAME(sys_sgetmask)
  22.589 -	.long SYMBOL_NAME(sys_ssetmask)
  22.590 -	.long SYMBOL_NAME(sys_setreuid16)	/* 70 */
  22.591 -	.long SYMBOL_NAME(sys_setregid16)
  22.592 -	.long SYMBOL_NAME(sys_sigsuspend)
  22.593 -	.long SYMBOL_NAME(sys_sigpending)
  22.594 -	.long SYMBOL_NAME(sys_sethostname)
  22.595 -	.long SYMBOL_NAME(sys_setrlimit)	/* 75 */
  22.596 -	.long SYMBOL_NAME(sys_old_getrlimit)
  22.597 -	.long SYMBOL_NAME(sys_getrusage)
  22.598 -	.long SYMBOL_NAME(sys_gettimeofday)
  22.599 -	.long SYMBOL_NAME(sys_settimeofday)
  22.600 -	.long SYMBOL_NAME(sys_getgroups16)	/* 80 */
  22.601 -	.long SYMBOL_NAME(sys_setgroups16)
  22.602 -	.long SYMBOL_NAME(old_select)
  22.603 -	.long SYMBOL_NAME(sys_symlink)
  22.604 -	.long SYMBOL_NAME(sys_lstat)
  22.605 -	.long SYMBOL_NAME(sys_readlink)		/* 85 */
  22.606 -	.long SYMBOL_NAME(sys_uselib)
  22.607 -	.long SYMBOL_NAME(sys_swapon)
  22.608 -	.long SYMBOL_NAME(sys_reboot)
  22.609 -	.long SYMBOL_NAME(old_readdir)
  22.610 -	.long SYMBOL_NAME(old_mmap)		/* 90 */
  22.611 -	.long SYMBOL_NAME(sys_munmap)
  22.612 -	.long SYMBOL_NAME(sys_truncate)
  22.613 -	.long SYMBOL_NAME(sys_ftruncate)
  22.614 -	.long SYMBOL_NAME(sys_fchmod)
  22.615 -	.long SYMBOL_NAME(sys_fchown16)		/* 95 */
  22.616 -	.long SYMBOL_NAME(sys_getpriority)
  22.617 -	.long SYMBOL_NAME(sys_setpriority)
  22.618 -	.long SYMBOL_NAME(sys_ni_syscall)				/* old profil syscall holder */
  22.619 -	.long SYMBOL_NAME(sys_statfs)
  22.620 -	.long SYMBOL_NAME(sys_fstatfs)		/* 100 */
  22.621 -	.long SYMBOL_NAME(sys_ioperm)
  22.622 -	.long SYMBOL_NAME(sys_socketcall)
  22.623 -	.long SYMBOL_NAME(sys_syslog)
  22.624 -	.long SYMBOL_NAME(sys_setitimer)
  22.625 -	.long SYMBOL_NAME(sys_getitimer)	/* 105 */
  22.626 -	.long SYMBOL_NAME(sys_newstat)
  22.627 -	.long SYMBOL_NAME(sys_newlstat)
  22.628 -	.long SYMBOL_NAME(sys_newfstat)
  22.629 -	.long SYMBOL_NAME(sys_uname)
  22.630 -	.long SYMBOL_NAME(sys_iopl)		/* 110 */
  22.631 -	.long SYMBOL_NAME(sys_vhangup)
  22.632 -	.long SYMBOL_NAME(sys_ni_syscall)	/* old "idle" system call */
  22.633 -	.long SYMBOL_NAME(sys_ni_syscall) /* was VM86 */
  22.634 -	.long SYMBOL_NAME(sys_wait4)
  22.635 -	.long SYMBOL_NAME(sys_swapoff)		/* 115 */
  22.636 -	.long SYMBOL_NAME(sys_sysinfo)
  22.637 -	.long SYMBOL_NAME(sys_ipc)
  22.638 -	.long SYMBOL_NAME(sys_fsync)
  22.639 -	.long SYMBOL_NAME(sys_sigreturn)
  22.640 -	.long SYMBOL_NAME(sys_clone)		/* 120 */
  22.641 -	.long SYMBOL_NAME(sys_setdomainname)
  22.642 -	.long SYMBOL_NAME(sys_newuname)
  22.643 -	.long SYMBOL_NAME(sys_modify_ldt)
  22.644 -	.long SYMBOL_NAME(sys_adjtimex)
  22.645 -	.long SYMBOL_NAME(sys_mprotect)		/* 125 */
  22.646 -	.long SYMBOL_NAME(sys_sigprocmask)
  22.647 -	.long SYMBOL_NAME(sys_create_module)
  22.648 -	.long SYMBOL_NAME(sys_init_module)
  22.649 -	.long SYMBOL_NAME(sys_delete_module)
  22.650 -	.long SYMBOL_NAME(sys_get_kernel_syms)	/* 130 */
  22.651 -	.long SYMBOL_NAME(sys_quotactl)
  22.652 -	.long SYMBOL_NAME(sys_getpgid)
  22.653 -	.long SYMBOL_NAME(sys_fchdir)
  22.654 -	.long SYMBOL_NAME(sys_bdflush)
  22.655 -	.long SYMBOL_NAME(sys_sysfs)		/* 135 */
  22.656 -	.long SYMBOL_NAME(sys_personality)
  22.657 -	.long SYMBOL_NAME(sys_ni_syscall)	/* for afs_syscall */
  22.658 -	.long SYMBOL_NAME(sys_setfsuid16)
  22.659 -	.long SYMBOL_NAME(sys_setfsgid16)
  22.660 -	.long SYMBOL_NAME(sys_llseek)		/* 140 */
  22.661 -	.long SYMBOL_NAME(sys_getdents)
  22.662 -	.long SYMBOL_NAME(sys_select)
  22.663 -	.long SYMBOL_NAME(sys_flock)
  22.664 -	.long SYMBOL_NAME(sys_msync)
  22.665 -	.long SYMBOL_NAME(sys_readv)		/* 145 */
  22.666 -	.long SYMBOL_NAME(sys_writev)
  22.667 -	.long SYMBOL_NAME(sys_getsid)
  22.668 -	.long SYMBOL_NAME(sys_fdatasync)
  22.669 -	.long SYMBOL_NAME(sys_sysctl)
  22.670 -	.long SYMBOL_NAME(sys_mlock)		/* 150 */
  22.671 -	.long SYMBOL_NAME(sys_munlock)
  22.672 -	.long SYMBOL_NAME(sys_mlockall)
  22.673 -	.long SYMBOL_NAME(sys_munlockall)
  22.674 -	.long SYMBOL_NAME(sys_sched_setparam)
  22.675 -	.long SYMBOL_NAME(sys_sched_getparam)   /* 155 */
  22.676 -	.long SYMBOL_NAME(sys_sched_setscheduler)
  22.677 -	.long SYMBOL_NAME(sys_sched_getscheduler)
  22.678 -	.long SYMBOL_NAME(sys_sched_yield)
  22.679 -	.long SYMBOL_NAME(sys_sched_get_priority_max)
  22.680 -	.long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */
  22.681 -	.long SYMBOL_NAME(sys_sched_rr_get_interval)
  22.682 -	.long SYMBOL_NAME(sys_nanosleep)
  22.683 -	.long SYMBOL_NAME(sys_mremap)
  22.684 -	.long SYMBOL_NAME(sys_setresuid16)
  22.685 -	.long SYMBOL_NAME(sys_getresuid16)	/* 165 */
  22.686 -	.long SYMBOL_NAME(sys_ni_syscall) /* was VM86 */
  22.687 -	.long SYMBOL_NAME(sys_query_module)
  22.688 -	.long SYMBOL_NAME(sys_poll)
  22.689 -	.long SYMBOL_NAME(sys_nfsservctl)
  22.690 -	.long SYMBOL_NAME(sys_setresgid16)	/* 170 */
  22.691 -	.long SYMBOL_NAME(sys_getresgid16)
  22.692 -	.long SYMBOL_NAME(sys_prctl)
  22.693 -	.long SYMBOL_NAME(sys_rt_sigreturn)
  22.694 -	.long SYMBOL_NAME(sys_rt_sigaction)
  22.695 -	.long SYMBOL_NAME(sys_rt_sigprocmask)	/* 175 */
  22.696 -	.long SYMBOL_NAME(sys_rt_sigpending)
  22.697 -	.long SYMBOL_NAME(sys_rt_sigtimedwait)
  22.698 -	.long SYMBOL_NAME(sys_rt_sigqueueinfo)
  22.699 -	.long SYMBOL_NAME(sys_rt_sigsuspend)
  22.700 -	.long SYMBOL_NAME(sys_pread)		/* 180 */
  22.701 -	.long SYMBOL_NAME(sys_pwrite)
  22.702 -	.long SYMBOL_NAME(sys_chown16)
  22.703 -	.long SYMBOL_NAME(sys_getcwd)
  22.704 -	.long SYMBOL_NAME(sys_capget)
  22.705 -	.long SYMBOL_NAME(sys_capset)           /* 185 */
  22.706 -	.long SYMBOL_NAME(sys_sigaltstack)
  22.707 -	.long SYMBOL_NAME(sys_sendfile)
  22.708 -	.long SYMBOL_NAME(sys_ni_syscall)		/* streams1 */
  22.709 -	.long SYMBOL_NAME(sys_ni_syscall)		/* streams2 */
  22.710 -	.long SYMBOL_NAME(sys_vfork)            /* 190 */
  22.711 -	.long SYMBOL_NAME(sys_getrlimit)
  22.712 -	.long SYMBOL_NAME(sys_mmap2)
  22.713 -	.long SYMBOL_NAME(sys_truncate64)
  22.714 -	.long SYMBOL_NAME(sys_ftruncate64)
  22.715 -	.long SYMBOL_NAME(sys_stat64)		/* 195 */
  22.716 -	.long SYMBOL_NAME(sys_lstat64)
  22.717 -	.long SYMBOL_NAME(sys_fstat64)
  22.718 -	.long SYMBOL_NAME(sys_lchown)
  22.719 -	.long SYMBOL_NAME(sys_getuid)
  22.720 -	.long SYMBOL_NAME(sys_getgid)		/* 200 */
  22.721 -	.long SYMBOL_NAME(sys_geteuid)
  22.722 -	.long SYMBOL_NAME(sys_getegid)
  22.723 -	.long SYMBOL_NAME(sys_setreuid)
  22.724 -	.long SYMBOL_NAME(sys_setregid)
  22.725 -	.long SYMBOL_NAME(sys_getgroups)	/* 205 */
  22.726 -	.long SYMBOL_NAME(sys_setgroups)
  22.727 -	.long SYMBOL_NAME(sys_fchown)
  22.728 -	.long SYMBOL_NAME(sys_setresuid)
  22.729 -	.long SYMBOL_NAME(sys_getresuid)
  22.730 -	.long SYMBOL_NAME(sys_setresgid)	/* 210 */
  22.731 -	.long SYMBOL_NAME(sys_getresgid)
  22.732 -	.long SYMBOL_NAME(sys_chown)
  22.733 -	.long SYMBOL_NAME(sys_setuid)
  22.734 -	.long SYMBOL_NAME(sys_setgid)
  22.735 -	.long SYMBOL_NAME(sys_setfsuid)		/* 215 */
  22.736 -	.long SYMBOL_NAME(sys_setfsgid)
  22.737 -	.long SYMBOL_NAME(sys_pivot_root)
  22.738 -	.long SYMBOL_NAME(sys_mincore)
  22.739 -	.long SYMBOL_NAME(sys_madvise)
  22.740 -	.long SYMBOL_NAME(sys_getdents64)	/* 220 */
  22.741 -	.long SYMBOL_NAME(sys_fcntl64)
  22.742 -	.long SYMBOL_NAME(sys_ni_syscall)	/* reserved for TUX */
  22.743 -	.long SYMBOL_NAME(sys_ni_syscall)	/* Reserved for Security */
  22.744 -	.long SYMBOL_NAME(sys_gettid)
  22.745 -	.long SYMBOL_NAME(sys_readahead)	/* 225 */
  22.746 -	.long SYMBOL_NAME(sys_setxattr)
  22.747 -	.long SYMBOL_NAME(sys_lsetxattr)
  22.748 -	.long SYMBOL_NAME(sys_fsetxattr)
  22.749 -	.long SYMBOL_NAME(sys_getxattr)
  22.750 -	.long SYMBOL_NAME(sys_lgetxattr)	/* 230 */
  22.751 -	.long SYMBOL_NAME(sys_fgetxattr)
  22.752 -	.long SYMBOL_NAME(sys_listxattr)
  22.753 -	.long SYMBOL_NAME(sys_llistxattr)
  22.754 -	.long SYMBOL_NAME(sys_flistxattr)
  22.755 -	.long SYMBOL_NAME(sys_removexattr)	/* 235 */
  22.756 -	.long SYMBOL_NAME(sys_lremovexattr)
  22.757 -	.long SYMBOL_NAME(sys_fremovexattr)
  22.758 - 	.long SYMBOL_NAME(sys_tkill)
  22.759 -	.long SYMBOL_NAME(sys_sendfile64)
  22.760 -	.long SYMBOL_NAME(sys_ni_syscall)	/* 240 reserved for futex */
  22.761 -	.long SYMBOL_NAME(sys_ni_syscall)	/* reserved for sched_setaffinity */
  22.762 -	.long SYMBOL_NAME(sys_ni_syscall)	/* reserved for sched_getaffinity */
  22.763 -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_set_thread_area */
  22.764 -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_get_thread_area */
  22.765 -	.long SYMBOL_NAME(sys_ni_syscall)	/* 245 sys_io_setup */
  22.766 -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_io_destroy */
  22.767 -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_io_getevents */
  22.768 -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_io_submit */
  22.769 -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_io_cancel */
  22.770 -	.long SYMBOL_NAME(sys_ni_syscall)	/* 250 sys_alloc_hugepages */
  22.771 -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_free_hugepages */
  22.772 -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_exit_group */
  22.773 -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_lookup_dcookie */
  22.774 -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_epoll_create */
  22.775 -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_epoll_ctl 255 */
  22.776 -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_epoll_wait */
  22.777 - 	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_remap_file_pages */
  22.778 - 	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_set_tid_address */
  22.779 -
  22.780 -	.rept NR_syscalls-(.-sys_call_table)/4
  22.781 -		.long SYMBOL_NAME(sys_ni_syscall)
  22.782 -	.endr
    23.1 --- a/linux-2.4.28-xen-sparse/arch/xen/kernel/head.S	Wed Jan 19 13:20:15 2005 +0000
    23.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.3 @@ -1,39 +0,0 @@
    23.4 -
    23.5 -.section __xen_guest
    23.6 -    .asciz "GUEST_OS=linux,GUEST_VER=2.4,XEN_VER=2.0,VIRT_BASE=0xC0000000"
    23.7 -
    23.8 -.text
    23.9 -#include <linux/config.h>
   23.10 -#include <linux/threads.h>
   23.11 -#include <linux/linkage.h>
   23.12 -#include <asm/segment.h>
   23.13 -#include <asm/page.h>
   23.14 -#include <asm/pgtable.h>
   23.15 -#include <asm/desc.h>
   23.16 -
   23.17 -ENTRY(stext)
   23.18 -ENTRY(_stext)
   23.19 -        cld
   23.20 -        lss stack_start,%esp
   23.21 -        /* Copy the necessary stuff from xen_start_info structure. */
   23.22 -        mov $SYMBOL_NAME(xen_start_info_union),%edi
   23.23 -        mov $128,%ecx
   23.24 -        rep movsl
   23.25 -        jmp SYMBOL_NAME(start_kernel)
   23.26 -
   23.27 -ENTRY(stack_start)
   23.28 -	.long SYMBOL_NAME(init_task_union)+8192, __KERNEL_DS
   23.29 -
   23.30 -.org 0x1000
   23.31 -ENTRY(empty_zero_page)
   23.32 -
   23.33 -.org 0x2000
   23.34 -ENTRY(default_ldt)
   23.35 -
   23.36 -.org 0x3000
   23.37 -ENTRY(cpu0_pte_quicklist)
   23.38 -
   23.39 -.org 0x3400
   23.40 -ENTRY(cpu0_pgd_quicklist)
   23.41 -        
   23.42 -.org 0x3800
    24.1 --- a/linux-2.4.28-xen-sparse/arch/xen/kernel/i386_ksyms.c	Wed Jan 19 13:20:15 2005 +0000
    24.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.3 @@ -1,180 +0,0 @@
    24.4 -#include <linux/config.h>
    24.5 -#include <linux/module.h>
    24.6 -#include <linux/smp.h>
    24.7 -#include <linux/user.h>
    24.8 -#include <linux/elfcore.h>
    24.9 -#include <linux/mca.h>
   24.10 -#include <linux/sched.h>
   24.11 -#include <linux/in6.h>
   24.12 -#include <linux/interrupt.h>
   24.13 -#include <linux/smp_lock.h>
   24.14 -#include <linux/pm.h>
   24.15 -#include <linux/pci.h>
   24.16 -#include <linux/apm_bios.h>
   24.17 -#include <linux/kernel.h>
   24.18 -#include <linux/string.h>
   24.19 -#include <linux/tty.h>
   24.20 -
   24.21 -#include <asm/semaphore.h>
   24.22 -#include <asm/processor.h>
   24.23 -#include <asm/i387.h>
   24.24 -#include <asm/uaccess.h>
   24.25 -#include <asm/checksum.h>
   24.26 -#include <asm/io.h>
   24.27 -#include <asm/hardirq.h>
   24.28 -#include <asm/delay.h>
   24.29 -#include <asm/irq.h>
   24.30 -#include <asm/mmx.h>
   24.31 -#include <asm/desc.h>
   24.32 -#include <asm/pgtable.h>
   24.33 -#include <asm/pgalloc.h>
   24.34 -
   24.35 -extern void dump_thread(struct pt_regs *, struct user *);
   24.36 -extern spinlock_t rtc_lock;
   24.37 -
   24.38 -#if defined(CONFIG_APMXXX) || defined(CONFIG_APM_MODULEXXX)
   24.39 -extern void machine_real_restart(unsigned char *, int);
   24.40 -EXPORT_SYMBOL(machine_real_restart);
   24.41 -extern void default_idle(void);
   24.42 -EXPORT_SYMBOL(default_idle);
   24.43 -#endif
   24.44 -
   24.45 -#ifdef CONFIG_SMP
   24.46 -extern void FASTCALL( __write_lock_failed(rwlock_t *rw));
   24.47 -extern void FASTCALL( __read_lock_failed(rwlock_t *rw));
   24.48 -#endif
   24.49 -
   24.50 -#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE)
   24.51 -extern struct drive_info_struct drive_info;
   24.52 -EXPORT_SYMBOL(drive_info);
   24.53 -#endif
   24.54 -
   24.55 -// XXX extern unsigned long get_cmos_time(void);
   24.56 -
   24.57 -/* platform dependent support */
   24.58 -EXPORT_SYMBOL(boot_cpu_data);
   24.59 -EXPORT_SYMBOL(dump_thread);
   24.60 -EXPORT_SYMBOL(dump_fpu);
   24.61 -EXPORT_SYMBOL(dump_extended_fpu);
   24.62 -EXPORT_SYMBOL(__ioremap);
   24.63 -EXPORT_SYMBOL(iounmap);
   24.64 -EXPORT_SYMBOL(enable_irq);
   24.65 -EXPORT_SYMBOL(disable_irq);
   24.66 -EXPORT_SYMBOL(disable_irq_nosync);
   24.67 -EXPORT_SYMBOL(probe_irq_mask);
   24.68 -EXPORT_SYMBOL(kernel_thread);
   24.69 -EXPORT_SYMBOL(pm_idle);
   24.70 -EXPORT_SYMBOL(pm_power_off);
   24.71 -EXPORT_SYMBOL(apm_info);
   24.72 -//EXPORT_SYMBOL(gdt);
   24.73 -EXPORT_SYMBOL(empty_zero_page);
   24.74 -EXPORT_SYMBOL(phys_to_machine_mapping);
   24.75 -
   24.76 -
   24.77 -#ifdef CONFIG_DEBUG_IOVIRT
   24.78 -EXPORT_SYMBOL(__io_virt_debug);
   24.79 -#endif
   24.80 -
   24.81 -EXPORT_SYMBOL_NOVERS(__down_failed);
   24.82 -EXPORT_SYMBOL_NOVERS(__down_failed_interruptible);
   24.83 -EXPORT_SYMBOL_NOVERS(__down_failed_trylock);
   24.84 -EXPORT_SYMBOL_NOVERS(__up_wakeup);
   24.85 -/* Networking helper routines. */
   24.86 -EXPORT_SYMBOL(csum_partial_copy_generic);
   24.87 -/* Delay loops */
   24.88 -EXPORT_SYMBOL(__ndelay);
   24.89 -EXPORT_SYMBOL(__udelay);
   24.90 -EXPORT_SYMBOL(__delay);
   24.91 -EXPORT_SYMBOL(__const_udelay);
   24.92 -
   24.93 -EXPORT_SYMBOL_NOVERS(__get_user_1);
   24.94 -EXPORT_SYMBOL_NOVERS(__get_user_2);
   24.95 -EXPORT_SYMBOL_NOVERS(__get_user_4);
   24.96 -
   24.97 -EXPORT_SYMBOL(strtok);
   24.98 -EXPORT_SYMBOL(strpbrk);
   24.99 -EXPORT_SYMBOL(strstr);
  24.100 -
  24.101 -EXPORT_SYMBOL(strncpy_from_user);
  24.102 -EXPORT_SYMBOL(__strncpy_from_user);
  24.103 -EXPORT_SYMBOL(clear_user);
  24.104 -EXPORT_SYMBOL(__clear_user);
  24.105 -EXPORT_SYMBOL(__generic_copy_from_user);
  24.106 -EXPORT_SYMBOL(__generic_copy_to_user);
  24.107 -EXPORT_SYMBOL(strnlen_user);
  24.108 -
  24.109 -
  24.110 -EXPORT_SYMBOL(pci_alloc_consistent);
  24.111 -EXPORT_SYMBOL(pci_free_consistent);
  24.112 -
  24.113 -#ifdef CONFIG_PCI
  24.114 -EXPORT_SYMBOL(pcibios_penalize_isa_irq);
  24.115 -EXPORT_SYMBOL(pci_mem_start);
  24.116 -#endif
  24.117 -
  24.118 -
  24.119 -#ifdef CONFIG_X86_USE_3DNOW
  24.120 -EXPORT_SYMBOL(_mmx_memcpy);
  24.121 -EXPORT_SYMBOL(mmx_clear_page);
  24.122 -EXPORT_SYMBOL(mmx_copy_page);
  24.123 -#endif
  24.124 -
  24.125 -#ifdef CONFIG_SMP
  24.126 -EXPORT_SYMBOL(cpu_data);
  24.127 -EXPORT_SYMBOL(kernel_flag_cacheline);
  24.128 -EXPORT_SYMBOL(smp_num_cpus);
  24.129 -EXPORT_SYMBOL(cpu_online_map);
  24.130 -EXPORT_SYMBOL_NOVERS(__write_lock_failed);
  24.131 -EXPORT_SYMBOL_NOVERS(__read_lock_failed);
  24.132 -
  24.133 -/* Global SMP irq stuff */
  24.134 -EXPORT_SYMBOL(synchronize_irq);
  24.135 -EXPORT_SYMBOL(global_irq_holder);
  24.136 -EXPORT_SYMBOL(__global_cli);
  24.137 -EXPORT_SYMBOL(__global_sti);
  24.138 -EXPORT_SYMBOL(__global_save_flags);
  24.139 -EXPORT_SYMBOL(__global_restore_flags);
  24.140 -EXPORT_SYMBOL(smp_call_function);
  24.141 -
  24.142 -/* TLB flushing */
  24.143 -EXPORT_SYMBOL(flush_tlb_page);
  24.144 -
  24.145 -/* HT support */
  24.146 -EXPORT_SYMBOL(smp_num_siblings);
  24.147 -EXPORT_SYMBOL(cpu_sibling_map);
  24.148 -#endif
  24.149 -
  24.150 -#ifdef CONFIG_X86_IO_APIC
  24.151 -EXPORT_SYMBOL(IO_APIC_get_PCI_irq_vector);
  24.152 -#endif
  24.153 -
  24.154 -#ifdef CONFIG_VT
  24.155 -EXPORT_SYMBOL(screen_info);
  24.156 -#endif
  24.157 -
  24.158 -EXPORT_SYMBOL(get_wchan);
  24.159 -
  24.160 -EXPORT_SYMBOL(rtc_lock);
  24.161 -
  24.162 -#undef memcpy
  24.163 -#undef memset
  24.164 -extern void * memset(void *,int,__kernel_size_t);
  24.165 -extern void * memcpy(void *,const void *,__kernel_size_t);
  24.166 -EXPORT_SYMBOL_NOVERS(memcpy);
  24.167 -EXPORT_SYMBOL_NOVERS(memset);
  24.168 -
  24.169 -#ifdef CONFIG_HAVE_DEC_LOCK
  24.170 -EXPORT_SYMBOL(atomic_dec_and_lock);
  24.171 -#endif
  24.172 -
  24.173 -#ifdef CONFIG_MULTIQUAD
  24.174 -EXPORT_SYMBOL(xquad_portio);
  24.175 -#endif
  24.176 -
  24.177 -#include <asm/xen_proc.h>
  24.178 -EXPORT_SYMBOL(create_xen_proc_entry);
  24.179 -EXPORT_SYMBOL(remove_xen_proc_entry);
  24.180 -
  24.181 -EXPORT_SYMBOL(evtchn_do_upcall);
  24.182 -EXPORT_SYMBOL(force_evtchn_callback);
  24.183 -EXPORT_SYMBOL(HYPERVISOR_shared_info);
    25.1 --- a/linux-2.4.28-xen-sparse/arch/xen/kernel/irq.c	Wed Jan 19 13:20:15 2005 +0000
    25.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.3 @@ -1,1242 +0,0 @@
    25.4 -/*
    25.5 - *	linux/arch/i386/kernel/irq.c
    25.6 - *
    25.7 - *	Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
    25.8 - *
    25.9 - * This file contains the code used by various IRQ handling routines:
   25.10 - * asking for different IRQ's should be done through these routines
   25.11 - * instead of just grabbing them. Thus setups with different IRQ numbers
   25.12 - * shouldn't result in any weird surprises, and installing new handlers
   25.13 - * should be easier.
   25.14 - */
   25.15 -
   25.16 -/*
   25.17 - * (mostly architecture independent, will move to kernel/irq.c in 2.5.)
   25.18 - *
   25.19 - * IRQs are in fact implemented a bit like signal handlers for the kernel.
   25.20 - * Naturally it's not a 1:1 relation, but there are similarities.
   25.21 - */
   25.22 -
   25.23 -#include <linux/config.h>
   25.24 -#include <linux/ptrace.h>
   25.25 -#include <linux/errno.h>
   25.26 -#include <linux/signal.h>
   25.27 -#include <linux/sched.h>
   25.28 -#include <linux/ioport.h>
   25.29 -#include <linux/interrupt.h>
   25.30 -#include <linux/timex.h>
   25.31 -#include <linux/slab.h>
   25.32 -#include <linux/random.h>
   25.33 -#include <linux/smp_lock.h>
   25.34 -#include <linux/init.h>
   25.35 -#include <linux/kernel_stat.h>
   25.36 -#include <linux/irq.h>
   25.37 -#include <linux/proc_fs.h>
   25.38 -#include <linux/seq_file.h>
   25.39 -
   25.40 -#include <asm/atomic.h>
   25.41 -#include <asm/io.h>
   25.42 -#include <asm/smp.h>
   25.43 -#include <asm/system.h>
   25.44 -#include <asm/bitops.h>
   25.45 -#include <asm/uaccess.h>
   25.46 -#include <asm/pgalloc.h>
   25.47 -#include <asm/delay.h>
   25.48 -#include <asm/desc.h>
   25.49 -#include <asm/irq.h>
   25.50 -
   25.51 -
   25.52 -
   25.53 -/*
   25.54 - * Linux has a controller-independent x86 interrupt architecture.
   25.55 - * every controller has a 'controller-template', that is used
   25.56 - * by the main code to do the right thing. Each driver-visible
   25.57 - * interrupt source is transparently wired to the apropriate
   25.58 - * controller. Thus drivers need not be aware of the
   25.59 - * interrupt-controller.
   25.60 - *
   25.61 - * Various interrupt controllers we handle: 8259 PIC, SMP IO-APIC,
   25.62 - * PIIX4's internal 8259 PIC and SGI's Visual Workstation Cobalt (IO-)APIC.
   25.63 - * (IO-APICs assumed to be messaging to Pentium local-APICs)
   25.64 - *
   25.65 - * the code is designed to be easily extended with new/different
   25.66 - * interrupt controllers, without having to do assembly magic.
   25.67 - */
   25.68 -
   25.69 -/*
   25.70 - * Controller mappings for all interrupt sources:
   25.71 - */
   25.72 -irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned =
   25.73 -	{ [0 ... NR_IRQS-1] = { 0, &no_irq_type, NULL, 0, SPIN_LOCK_UNLOCKED}};
   25.74 -
   25.75 -static void register_irq_proc (unsigned int irq);
   25.76 -
   25.77 -/*
   25.78 - * Special irq handlers.
   25.79 - */
   25.80 -
   25.81 -void no_action(int cpl, void *dev_id, struct pt_regs *regs) { }
   25.82 -
   25.83 -/*
   25.84 - * Generic no controller code
   25.85 - */
   25.86 -
   25.87 -static void enable_none(unsigned int irq) { }
   25.88 -static unsigned int startup_none(unsigned int irq) { return 0; }
   25.89 -static void disable_none(unsigned int irq) { }
   25.90 -static void ack_none(unsigned int irq)
   25.91 -{
   25.92 -/*
   25.93 - * 'what should we do if we get a hw irq event on an illegal vector'.
   25.94 - * each architecture has to answer this themselves, it doesnt deserve
   25.95 - * a generic callback i think.
   25.96 - */
   25.97 -#if CONFIG_X86
   25.98 -	printk("unexpected IRQ trap at vector %02x\n", irq);
   25.99 -#ifdef CONFIG_X86_LOCAL_APIC
  25.100 -	/*
  25.101 -	 * Currently unexpected vectors happen only on SMP and APIC.
  25.102 -	 * We _must_ ack these because every local APIC has only N
  25.103 -	 * irq slots per priority level, and a 'hanging, unacked' IRQ
  25.104 -	 * holds up an irq slot - in excessive cases (when multiple
  25.105 -	 * unexpected vectors occur) that might lock up the APIC
  25.106 -	 * completely.
  25.107 -	 */
  25.108 -	ack_APIC_irq();
  25.109 -#endif
  25.110 -#endif
  25.111 -}
  25.112 -
  25.113 -/* startup is the same as "enable", shutdown is same as "disable" */
  25.114 -#define shutdown_none	disable_none
  25.115 -#define end_none	enable_none
  25.116 -
  25.117 -struct hw_interrupt_type no_irq_type = {
  25.118 -	"none",
  25.119 -	startup_none,
  25.120 -	shutdown_none,
  25.121 -	enable_none,
  25.122 -	disable_none,
  25.123 -	ack_none,
  25.124 -	end_none
  25.125 -};
  25.126 -
  25.127 -atomic_t irq_err_count;
  25.128 -#ifdef CONFIG_X86_IO_APIC
  25.129 -#ifdef APIC_MISMATCH_DEBUG
  25.130 -atomic_t irq_mis_count;
  25.131 -#endif
  25.132 -#endif
  25.133 -
  25.134 -/*
  25.135 - * Generic, controller-independent functions:
  25.136 - */
  25.137 -
  25.138 -int show_interrupts(struct seq_file *p, void *v)
  25.139 -{
  25.140 -	int i, j;
  25.141 -	struct irqaction * action;
  25.142 -
  25.143 -	seq_printf(p, "           ");
  25.144 -	for (j=0; j<smp_num_cpus; j++)
  25.145 -		seq_printf(p, "CPU%d       ",j);
  25.146 -	seq_putc(p,'\n');
  25.147 -
  25.148 -	for (i = 0 ; i < NR_IRQS ; i++) {
  25.149 -		action = irq_desc[i].action;
  25.150 -		if (!action) 
  25.151 -			continue;
  25.152 -		seq_printf(p, "%3d: ",i);
  25.153 -#ifndef CONFIG_SMP
  25.154 -		seq_printf(p, "%10u ", kstat_irqs(i));
  25.155 -#else
  25.156 -		for (j = 0; j < smp_num_cpus; j++)
  25.157 -			seq_printf(p, "%10u ",
  25.158 -				kstat.irqs[cpu_logical_map(j)][i]);
  25.159 -#endif
  25.160 -		seq_printf(p, " %14s", irq_desc[i].handler->typename);
  25.161 -		seq_printf(p, "  %s", action->name);
  25.162 -
  25.163 -		for (action=action->next; action; action = action->next)
  25.164 -			seq_printf(p, ", %s", action->name);
  25.165 -		seq_putc(p,'\n');
  25.166 -	}
  25.167 -	seq_printf(p, "NMI: ");
  25.168 -	for (j = 0; j < smp_num_cpus; j++)
  25.169 -		seq_printf(p, "%10u ",
  25.170 -			nmi_count(cpu_logical_map(j)));
  25.171 -	seq_printf(p, "\n");
  25.172 -#if CONFIG_X86_LOCAL_APIC
  25.173 -	seq_printf(p, "LOC: ");
  25.174 -	for (j = 0; j < smp_num_cpus; j++)
  25.175 -		seq_printf(p, "%10u ",
  25.176 -			apic_timer_irqs[cpu_logical_map(j)]);
  25.177 -	seq_printf(p, "\n");
  25.178 -#endif
  25.179 -	seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
  25.180 -#ifdef CONFIG_X86_IO_APIC
  25.181 -#ifdef APIC_MISMATCH_DEBUG
  25.182 -	seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count));
  25.183 -#endif
  25.184 -#endif
  25.185 -
  25.186 -	return 0;
  25.187 -}
  25.188 -
  25.189 -
  25.190 -/*
  25.191 - * Global interrupt locks for SMP. Allow interrupts to come in on any
  25.192 - * CPU, yet make cli/sti act globally to protect critical regions..
  25.193 - */
  25.194 -
  25.195 -#ifdef CONFIG_SMP
  25.196 -unsigned char global_irq_holder = NO_PROC_ID;
  25.197 -unsigned volatile long global_irq_lock; /* pendantic: long for set_bit --RR */
  25.198 -
  25.199 -extern void show_stack(unsigned long* esp);
  25.200 -
  25.201 -static void show(char * str)
  25.202 -{
  25.203 -	int i;
  25.204 -	int cpu = smp_processor_id();
  25.205 -
  25.206 -	printk("\n%s, CPU %d:\n", str, cpu);
  25.207 -	printk("irq:  %d [",irqs_running());
  25.208 -	for(i=0;i < smp_num_cpus;i++)
  25.209 -		printk(" %d",local_irq_count(i));
  25.210 -	printk(" ]\nbh:   %d [",spin_is_locked(&global_bh_lock) ? 1 : 0);
  25.211 -	for(i=0;i < smp_num_cpus;i++)
  25.212 -		printk(" %d",local_bh_count(i));
  25.213 -
  25.214 -	printk(" ]\nStack dumps:");
  25.215 -	for(i = 0; i < smp_num_cpus; i++) {
  25.216 -		unsigned long esp;
  25.217 -		if (i == cpu)
  25.218 -			continue;
  25.219 -		printk("\nCPU %d:",i);
  25.220 -		esp = init_tss[i].esp0;
  25.221 -		if (!esp) {
  25.222 -			/* tss->esp0 is set to NULL in cpu_init(),
  25.223 -			 * it's initialized when the cpu returns to user
  25.224 -			 * space. -- manfreds
  25.225 -			 */
  25.226 -			printk(" <unknown> ");
  25.227 -			continue;
  25.228 -		}
  25.229 -		esp &= ~(THREAD_SIZE-1);
  25.230 -		esp += sizeof(struct task_struct);
  25.231 -		show_stack((void*)esp);
  25.232 - 	}
  25.233 -	printk("\nCPU %d:",cpu);
  25.234 -	show_stack(NULL);
  25.235 -	printk("\n");
  25.236 -}
  25.237 -	
  25.238 -#define MAXCOUNT 100000000
  25.239 -
  25.240 -/*
  25.241 - * I had a lockup scenario where a tight loop doing
  25.242 - * spin_unlock()/spin_lock() on CPU#1 was racing with
  25.243 - * spin_lock() on CPU#0. CPU#0 should have noticed spin_unlock(), but
  25.244 - * apparently the spin_unlock() information did not make it
  25.245 - * through to CPU#0 ... nasty, is this by design, do we have to limit
  25.246 - * 'memory update oscillation frequency' artificially like here?
  25.247 - *
  25.248 - * Such 'high frequency update' races can be avoided by careful design, but
  25.249 - * some of our major constructs like spinlocks use similar techniques,
  25.250 - * it would be nice to clarify this issue. Set this define to 0 if you
  25.251 - * want to check whether your system freezes.  I suspect the delay done
  25.252 - * by SYNC_OTHER_CORES() is in correlation with 'snooping latency', but
  25.253 - * i thought that such things are guaranteed by design, since we use
  25.254 - * the 'LOCK' prefix.
  25.255 - */
  25.256 -#define SUSPECTED_CPU_OR_CHIPSET_BUG_WORKAROUND 0
  25.257 -
  25.258 -#if SUSPECTED_CPU_OR_CHIPSET_BUG_WORKAROUND
  25.259 -# define SYNC_OTHER_CORES(x) udelay(x+1)
  25.260 -#else
  25.261 -/*
  25.262 - * We have to allow irqs to arrive between __sti and __cli
  25.263 - */
  25.264 -# define SYNC_OTHER_CORES(x) __asm__ __volatile__ ("nop")
  25.265 -#endif
  25.266 -
  25.267 -static inline void wait_on_irq(int cpu)
  25.268 -{
  25.269 -	int count = MAXCOUNT;
  25.270 -
  25.271 -	for (;;) {
  25.272 -
  25.273 -		/*
  25.274 -		 * Wait until all interrupts are gone. Wait
  25.275 -		 * for bottom half handlers unless we're
  25.276 -		 * already executing in one..
  25.277 -		 */
  25.278 -		if (!irqs_running())
  25.279 -			if (local_bh_count(cpu) || !spin_is_locked(&global_bh_lock))
  25.280 -				break;
  25.281 -
  25.282 -		/* Duh, we have to loop. Release the lock to avoid deadlocks */
  25.283 -		clear_bit(0,&global_irq_lock);
  25.284 -
  25.285 -		for (;;) {
  25.286 -			if (!--count) {
  25.287 -				show("wait_on_irq");
  25.288 -				count = ~0;
  25.289 -			}
  25.290 -			__sti();
  25.291 -			SYNC_OTHER_CORES(cpu);
  25.292 -			__cli();
  25.293 -			if (irqs_running())
  25.294 -				continue;
  25.295 -			if (global_irq_lock)
  25.296 -				continue;
  25.297 -			if (!local_bh_count(cpu) && spin_is_locked(&global_bh_lock))
  25.298 -				continue;
  25.299 -			if (!test_and_set_bit(0,&global_irq_lock))
  25.300 -				break;
  25.301 -		}
  25.302 -	}
  25.303 -}
  25.304 -
  25.305 -/*
  25.306 - * This is called when we want to synchronize with
  25.307 - * interrupts. We may for example tell a device to
  25.308 - * stop sending interrupts: but to make sure there
  25.309 - * are no interrupts that are executing on another
  25.310 - * CPU we need to call this function.
  25.311 - */
  25.312 -void synchronize_irq(void)
  25.313 -{
  25.314 -	if (irqs_running()) {
  25.315 -		/* Stupid approach */
  25.316 -		cli();
  25.317 -		sti();
  25.318 -	}
  25.319 -}
  25.320 -
  25.321 -static inline void get_irqlock(int cpu)
  25.322 -{
  25.323 -	if (test_and_set_bit(0,&global_irq_lock)) {
  25.324 -		/* do we already hold the lock? */
  25.325 -		if ((unsigned char) cpu == global_irq_holder)
  25.326 -			return;
  25.327 -		/* Uhhuh.. Somebody else got it. Wait.. */
  25.328 -		do {
  25.329 -			do {
  25.330 -				rep_nop();
  25.331 -			} while (test_bit(0,&global_irq_lock));
  25.332 -		} while (test_and_set_bit(0,&global_irq_lock));		
  25.333 -	}
  25.334 -	/* 
  25.335 -	 * We also to make sure that nobody else is running
  25.336 -	 * in an interrupt context. 
  25.337 -	 */
  25.338 -	wait_on_irq(cpu);
  25.339 -
  25.340 -	/*
  25.341 -	 * Ok, finally..
  25.342 -	 */
  25.343 -	global_irq_holder = cpu;
  25.344 -}
  25.345 -
  25.346 -/*
  25.347 - * A global "cli()" while in an interrupt context
  25.348 - * turns into just a local cli(). Interrupts
  25.349 - * should use spinlocks for the (very unlikely)
  25.350 - * case that they ever want to protect against
  25.351 - * each other.
  25.352 - *
  25.353 - * If we already have local interrupts disabled,
  25.354 - * this will not turn a local disable into a
  25.355 - * global one (problems with spinlocks: this makes
  25.356 - * save_flags+cli+sti usable inside a spinlock).
  25.357 - */
  25.358 -void __global_cli(void)
  25.359 -{
  25.360 -	unsigned int flags;
  25.361 -
  25.362 -	__save_flags(flags);
  25.363 -	if (!flags) {
  25.364 -		int cpu = smp_processor_id();
  25.365 -		__cli();
  25.366 -		if (!local_irq_count(cpu))
  25.367 -			get_irqlock(cpu);
  25.368 -	}
  25.369 -}
  25.370 -
  25.371 -void __global_sti(void)
  25.372 -{
  25.373 -	int cpu = smp_processor_id();
  25.374 -
  25.375 -	if (!local_irq_count(cpu))
  25.376 -		release_irqlock(cpu);
  25.377 -	__sti();
  25.378 -}
  25.379 -
  25.380 -/*
  25.381 - * SMP flags value to restore to:
  25.382 - * 0 - global cli
  25.383 - * 1 - global sti
  25.384 - * 2 - local cli
  25.385 - * 3 - local sti
  25.386 - */
  25.387 -unsigned long __global_save_flags(void)
  25.388 -{
  25.389 -	int retval;
  25.390 -	int local_enabled;
  25.391 -	unsigned long flags;
  25.392 -	int cpu = smp_processor_id();
  25.393 -
  25.394 -	__save_flags(flags);
  25.395 -	local_enabled = !flags;
  25.396 -	/* default to local */
  25.397 -	retval = 2 + local_enabled;
  25.398 -
  25.399 -	/* check for global flags if we're not in an interrupt */
  25.400 -	if (!local_irq_count(cpu)) {
  25.401 -		if (local_enabled)
  25.402 -			retval = 1;
  25.403 -		if (global_irq_holder == cpu)
  25.404 -			retval = 0;
  25.405 -	}
  25.406 -	return retval;
  25.407 -}
  25.408 -
  25.409 -void __global_restore_flags(unsigned long flags)
  25.410 -{
  25.411 -	switch (flags) {
  25.412 -	case 0:
  25.413 -		__global_cli();
  25.414 -		break;
  25.415 -	case 1:
  25.416 -		__global_sti();
  25.417 -		break;
  25.418 -	case 2:
  25.419 -		__cli();
  25.420 -		break;
  25.421 -	case 3:
  25.422 -		__sti();
  25.423 -		break;
  25.424 -	default:
  25.425 -		printk("global_restore_flags: %08lx (%08lx)\n",
  25.426 -			flags, (&flags)[-1]);
  25.427 -	}
  25.428 -}
  25.429 -
  25.430 -#endif
  25.431 -
  25.432 -/*
  25.433 - * This should really return information about whether
  25.434 - * we should do bottom half handling etc. Right now we
  25.435 - * end up _always_ checking the bottom half, which is a
  25.436 - * waste of time and is not what some drivers would
  25.437 - * prefer.
  25.438 - */
  25.439 -int handle_IRQ_event(unsigned int irq, struct pt_regs * regs, struct irqaction * action)
  25.440 -{
  25.441 -	int status;
  25.442 -	int cpu = smp_processor_id();
  25.443 -
  25.444 -	irq_enter(cpu, irq);
  25.445 -
  25.446 -	status = 1;	/* Force the "do bottom halves" bit */
  25.447 -
  25.448 -	if (!(action->flags & SA_INTERRUPT))
  25.449 -		__sti();
  25.450 -
  25.451 -	do {
  25.452 -		status |= action->flags;
  25.453 -		action->handler(irq, action->dev_id, regs);
  25.454 -		action = action->next;
  25.455 -	} while (action);
  25.456 -	if (status & SA_SAMPLE_RANDOM)
  25.457 -		add_interrupt_randomness(irq);
  25.458 -	__cli();
  25.459 -
  25.460 -	irq_exit(cpu, irq);
  25.461 -
  25.462 -	return status;
  25.463 -}
  25.464 -
  25.465 -/*
  25.466 - * Generic enable/disable code: this just calls
  25.467 - * down into the PIC-specific version for the actual
  25.468 - * hardware disable after having gotten the irq
  25.469 - * controller lock. 
  25.470 - */
  25.471 - 
  25.472 -/**
  25.473 - *	disable_irq_nosync - disable an irq without waiting
  25.474 - *	@irq: Interrupt to disable
  25.475 - *
  25.476 - *	Disable the selected interrupt line.  Disables and Enables are
  25.477 - *	nested.
  25.478 - *	Unlike disable_irq(), this function does not ensure existing
  25.479 - *	instances of the IRQ handler have completed before returning.
  25.480 - *
  25.481 - *	This function may be called from IRQ context.
  25.482 - */
  25.483 - 
  25.484 -inline void disable_irq_nosync(unsigned int irq)
  25.485 -{
  25.486 -	irq_desc_t *desc = irq_desc + irq;
  25.487 -	unsigned long flags;
  25.488 -
  25.489 -	spin_lock_irqsave(&desc->lock, flags);
  25.490 -	if (!desc->depth++) {
  25.491 -		desc->status |= IRQ_DISABLED;
  25.492 -		desc->handler->disable(irq);
  25.493 -	}
  25.494 -	spin_unlock_irqrestore(&desc->lock, flags);
  25.495 -}
  25.496 -
  25.497 -/**
  25.498 - *	disable_irq - disable an irq and wait for completion
  25.499 - *	@irq: Interrupt to disable
  25.500 - *
  25.501 - *	Disable the selected interrupt line.  Enables and Disables are
  25.502 - *	nested.
  25.503 - *	This function waits for any pending IRQ handlers for this interrupt
  25.504 - *	to complete before returning. If you use this function while
  25.505 - *	holding a resource the IRQ handler may need you will deadlock.
  25.506 - *
  25.507 - *	This function may be called - with care - from IRQ context.
  25.508 - */
  25.509 - 
  25.510 -void disable_irq(unsigned int irq)
  25.511 -{
  25.512 -	disable_irq_nosync(irq);
  25.513 -
  25.514 -	if (!local_irq_count(smp_processor_id())) {
  25.515 -		do {
  25.516 -			barrier();
  25.517 -			cpu_relax();
  25.518 -		} while (irq_desc[irq].status & IRQ_INPROGRESS);
  25.519 -	}
  25.520 -}
  25.521 -
  25.522 -/**
  25.523 - *	enable_irq - enable handling of an irq
  25.524 - *	@irq: Interrupt to enable
  25.525 - *
  25.526 - *	Undoes the effect of one call to disable_irq().  If this
  25.527 - *	matches the last disable, processing of interrupts on this
  25.528 - *	IRQ line is re-enabled.
  25.529 - *
  25.530 - *	This function may be called from IRQ context.
  25.531 - */
  25.532 - 
  25.533 -void enable_irq(unsigned int irq)
  25.534 -{
  25.535 -	irq_desc_t *desc = irq_desc + irq;
  25.536 -	unsigned long flags;
  25.537 -
  25.538 -	spin_lock_irqsave(&desc->lock, flags);
  25.539 -	switch (desc->depth) {
  25.540 -	case 1: {
  25.541 -		unsigned int status = desc->status & ~IRQ_DISABLED;
  25.542 -		desc->status = status;
  25.543 -		if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
  25.544 -			desc->status = status | IRQ_REPLAY;
  25.545 -			hw_resend_irq(desc->handler,irq);
  25.546 -		}
  25.547 -		desc->handler->enable(irq);
  25.548 -		/* fall-through */
  25.549 -	}
  25.550 -	default:
  25.551 -		desc->depth--;
  25.552 -		break;
  25.553 -	case 0:
  25.554 -		printk("enable_irq(%u) unbalanced from %p\n", irq,
  25.555 -		       __builtin_return_address(0));
  25.556 -	}
  25.557 -	spin_unlock_irqrestore(&desc->lock, flags);
  25.558 -}
  25.559 -
  25.560 -/*
  25.561 - * do_IRQ handles all normal device IRQ's (the special
  25.562 - * SMP cross-CPU interrupts have their own specific
  25.563 - * handlers).
  25.564 - */
  25.565 -asmlinkage unsigned int do_IRQ(struct pt_regs *regs)
  25.566 -{	
  25.567 -	/* 
  25.568 -	 * We ack quickly, we don't want the irq controller
  25.569 -	 * thinking we're snobs just because some other CPU has
  25.570 -	 * disabled global interrupts (we have already done the
  25.571 -	 * INT_ACK cycles, it's too late to try to pretend to the
  25.572 -	 * controller that we aren't taking the interrupt).
  25.573 -	 *
  25.574 -	 * 0 return value means that this irq is already being
  25.575 -	 * handled by some other CPU. (or is disabled)
  25.576 -	 */
  25.577 -	int irq = regs->orig_eax & 0xff; /* high bits used in ret_from_ code */
  25.578 -	int cpu = smp_processor_id();
  25.579 -	irq_desc_t *desc = irq_desc + irq;
  25.580 -	struct irqaction * action;
  25.581 -	unsigned int status;
  25.582 -#ifdef CONFIG_DEBUG_STACKOVERFLOW
  25.583 -	long esp;
  25.584 -
  25.585 -	/* Debugging check for stack overflow: is there less than 1KB free? */
  25.586 -	__asm__ __volatile__("andl %%esp,%0" : "=r" (esp) : "0" (8191));
  25.587 -	if (unlikely(esp < (sizeof(struct task_struct) + 1024))) {
  25.588 -		extern void show_stack(unsigned long *);
  25.589 -
  25.590 -		printk("do_IRQ: stack overflow: %ld\n",
  25.591 -			esp - sizeof(struct task_struct));
  25.592 -		__asm__ __volatile__("movl %%esp,%0" : "=r" (esp));
  25.593 -		show_stack((void *)esp);
  25.594 -	}
  25.595 -#endif
  25.596 -
  25.597 -	kstat.irqs[cpu][irq]++;
  25.598 -	spin_lock(&desc->lock);
  25.599 -	desc->handler->ack(irq);
  25.600 -	/*
  25.601 -	   REPLAY is when Linux resends an IRQ that was dropped earlier
  25.602 -	   WAITING is used by probe to mark irqs that are being tested
  25.603 -	   */
  25.604 -	status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING);
  25.605 -	status |= IRQ_PENDING; /* we _want_ to handle it */
  25.606 -
  25.607 -	/*
  25.608 -	 * If the IRQ is disabled for whatever reason, we cannot
  25.609 -	 * use the action we have.
  25.610 -	 */
  25.611 -	action = NULL;
  25.612 -	if (!(status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
  25.613 -		action = desc->action;
  25.614 -		status &= ~IRQ_PENDING; /* we commit to handling */
  25.615 -		status |= IRQ_INPROGRESS; /* we are handling it */
  25.616 -	}
  25.617 -	desc->status = status;
  25.618 -
  25.619 -	/*
  25.620 -	 * If there is no IRQ handler or it was disabled, exit early.
  25.621 -	   Since we set PENDING, if another processor is handling
  25.622 -	   a different instance of this same irq, the other processor
  25.623 -	   will take care of it.
  25.624 -	 */
  25.625 -	if (!action)
  25.626 -		goto out;
  25.627 -
  25.628 -	/*
  25.629 -	 * Edge triggered interrupts need to remember
  25.630 -	 * pending events.
  25.631 -	 * This applies to any hw interrupts that allow a second
  25.632 -	 * instance of the same irq to arrive while we are in do_IRQ
  25.633 -	 * or in the handler. But the code here only handles the _second_
  25.634 -	 * instance of the irq, not the third or fourth. So it is mostly
  25.635 -	 * useful for irq hardware that does not mask cleanly in an
  25.636 -	 * SMP environment.
  25.637 -	 */
  25.638 -	for (;;) {
  25.639 -		spin_unlock(&desc->lock);
  25.640 -		handle_IRQ_event(irq, regs, action);
  25.641 -		spin_lock(&desc->lock);
  25.642 -		
  25.643 -		if (!(desc->status & IRQ_PENDING))
  25.644 -			break;
  25.645 -		desc->status &= ~IRQ_PENDING;
  25.646 -	}
  25.647 -	desc->status &= ~IRQ_INPROGRESS;
  25.648 -out:
  25.649 -	/*
  25.650 -	 * The ->end() handler has to deal with interrupts which got
  25.651 -	 * disabled while the handler was running.
  25.652 -	 */
  25.653 -	desc->handler->end(irq);
  25.654 -	spin_unlock(&desc->lock);
  25.655 -
  25.656 -	if (softirq_pending(cpu))
  25.657 -		do_softirq();
  25.658 -	return 1;
  25.659 -}
  25.660 -
  25.661 -/**
  25.662 - *	request_irq - allocate an interrupt line
  25.663 - *	@irq: Interrupt line to allocate
  25.664 - *	@handler: Function to be called when the IRQ occurs
  25.665 - *	@irqflags: Interrupt type flags
  25.666 - *	@devname: An ascii name for the claiming device
  25.667 - *	@dev_id: A cookie passed back to the handler function
  25.668 - *
  25.669 - *	This call allocates interrupt resources and enables the
  25.670 - *	interrupt line and IRQ handling. From the point this
  25.671 - *	call is made your handler function may be invoked. Since
  25.672 - *	your handler function must clear any interrupt the board 
  25.673 - *	raises, you must take care both to initialise your hardware
  25.674 - *	and to set up the interrupt handler in the right order.
  25.675 - *
  25.676 - *	Dev_id must be globally unique. Normally the address of the
  25.677 - *	device data structure is used as the cookie. Since the handler
  25.678 - *	receives this value it makes sense to use it.
  25.679 - *
  25.680 - *	If your interrupt is shared you must pass a non NULL dev_id
  25.681 - *	as this is required when freeing the interrupt.
  25.682 - *
  25.683 - *	Flags:
  25.684 - *
  25.685 - *	SA_SHIRQ		Interrupt is shared
  25.686 - *
  25.687 - *	SA_INTERRUPT		Disable local interrupts while processing
  25.688 - *
  25.689 - *	SA_SAMPLE_RANDOM	The interrupt can be used for entropy
  25.690 - *
  25.691 - */
  25.692 - 
  25.693 -int request_irq(unsigned int irq, 
  25.694 -		void (*handler)(int, void *, struct pt_regs *),
  25.695 -		unsigned long irqflags, 
  25.696 -		const char * devname,
  25.697 -		void *dev_id)
  25.698 -{
  25.699 -	int retval;
  25.700 -	struct irqaction * action;
  25.701 -
  25.702 -#if 1
  25.703 -	/*
  25.704 -	 * Sanity-check: shared interrupts should REALLY pass in
  25.705 -	 * a real dev-ID, otherwise we'll have trouble later trying
  25.706 -	 * to figure out which interrupt is which (messes up the
  25.707 -	 * interrupt freeing logic etc).
  25.708 -	 */
  25.709 -	if (irqflags & SA_SHIRQ) {
  25.710 -		if (!dev_id)
  25.711 -			printk("Bad boy: %s (at 0x%x) called us without a dev_id!\n", devname, (&irq)[-1]);
  25.712 -	}
  25.713 -#endif
  25.714 -
  25.715 -	if (irq >= NR_IRQS)
  25.716 -		return -EINVAL;
  25.717 -	if (!handler)
  25.718 -		return -EINVAL;
  25.719 -
  25.720 -	action = (struct irqaction *)
  25.721 -			kmalloc(sizeof(struct irqaction), GFP_KERNEL);
  25.722 -	if (!action)
  25.723 -		return -ENOMEM;
  25.724 -
  25.725 -	action->handler = handler;
  25.726 -	action->flags = irqflags;
  25.727 -	action->mask = 0;
  25.728 -	action->name = devname;
  25.729 -	action->next = NULL;
  25.730 -	action->dev_id = dev_id;
  25.731 -
  25.732 -	retval = setup_irq(irq, action);
  25.733 -	if (retval)
  25.734 -		kfree(action);
  25.735 -	return retval;
  25.736 -}
  25.737 -
  25.738 -/*
  25.739 - * Internal function to unregister an irqaction - typically used to
  25.740 - * deallocate special interrupts that are part of the architecture.
  25.741 - */
  25.742 -int teardown_irq(unsigned int irq, struct irqaction * old)
  25.743 -{
  25.744 -	irq_desc_t *desc;
  25.745 -	struct irqaction **p;
  25.746 -	unsigned long flags;
  25.747 -
  25.748 -	if (irq >= NR_IRQS)
  25.749 -		return -ENOENT;
  25.750 -
  25.751 -	desc = irq_desc + irq;
  25.752 -	spin_lock_irqsave(&desc->lock,flags);
  25.753 -	p = &desc->action;
  25.754 -	for (;;) {
  25.755 -		struct irqaction * action = *p;
  25.756 -		if (action) {
  25.757 -			struct irqaction **pp = p;
  25.758 -			p = &action->next;
  25.759 -			if (action != old)
  25.760 -				continue;
  25.761 -
  25.762 -			/* Found it - now remove it from the list of entries */
  25.763 -			*pp = action->next;
  25.764 -			if (!desc->action) {
  25.765 -				desc->status |= IRQ_DISABLED;
  25.766 -				desc->handler->shutdown(irq);
  25.767 -			}
  25.768 -			spin_unlock_irqrestore(&desc->lock,flags);
  25.769 -
  25.770 -#ifdef CONFIG_SMP
  25.771 -			/* Wait to make sure it's not being used on another CPU */
  25.772 -			while (desc->status & IRQ_INPROGRESS) {
  25.773 -				barrier();
  25.774 -				cpu_relax();
  25.775 -			}
  25.776 -#endif
  25.777 -			return 0;
  25.778 -		}
  25.779 -		printk("Trying to free free IRQ%d\n",irq);
  25.780 -		spin_unlock_irqrestore(&desc->lock,flags);
  25.781 -		return -ENOENT;
  25.782 -	}
  25.783 -}
  25.784 -
  25.785 -/**
  25.786 - *	free_irq - free an interrupt
  25.787 - *	@irq: Interrupt line to free
  25.788 - *	@dev_id: Device identity to free
  25.789 - *
  25.790 - *	Remove an interrupt handler. The handler is removed and if the
  25.791 - *	interrupt line is no longer in use by any driver it is disabled.
  25.792 - *	On a shared IRQ the caller must ensure the interrupt is disabled
  25.793 - *	on the card it drives before calling this function. The function
  25.794 - *	does not return until any executing interrupts for this IRQ
  25.795 - *	have completed.
  25.796 - *
  25.797 - *	This function may be called from interrupt context. 
  25.798 - *
  25.799 - *	Bugs: Attempting to free an irq in a handler for the same irq hangs
  25.800 - *	      the machine.
  25.801 - */
  25.802 - 
  25.803 -void free_irq(unsigned int irq, void *dev_id)
  25.804 -{
  25.805 -	irq_desc_t *desc;
  25.806 -	struct irqaction *action;
  25.807 -	unsigned long flags;
  25.808 -
  25.809 -	if (irq >= NR_IRQS)
  25.810 -		return;
  25.811 -
  25.812 -	desc = irq_desc + irq;
  25.813 -	spin_lock_irqsave(&desc->lock,flags);
  25.814 -	for (action = desc->action; action != NULL; action = action->next) {
  25.815 -		if (action->dev_id != dev_id)
  25.816 -			continue;
  25.817 -
  25.818 -		spin_unlock_irqrestore(&desc->lock,flags);
  25.819 -
  25.820 -		if (teardown_irq(irq, action) == 0)
  25.821 -			kfree(action);
  25.822 -		return;
  25.823 -	}
  25.824 -	printk("Trying to free free IRQ%d\n",irq);
  25.825 -	spin_unlock_irqrestore(&desc->lock,flags);
  25.826 -	return;
  25.827 -}
  25.828 -
  25.829 -/*
  25.830 - * IRQ autodetection code..
  25.831 - *
  25.832 - * This depends on the fact that any interrupt that
  25.833 - * comes in on to an unassigned handler will get stuck
  25.834 - * with "IRQ_WAITING" cleared and the interrupt
  25.835 - * disabled.
  25.836 - */
  25.837 -
  25.838 -static DECLARE_MUTEX(probe_sem);
  25.839 -
  25.840 -/**
  25.841 - *	probe_irq_on	- begin an interrupt autodetect
  25.842 - *
  25.843 - *	Commence probing for an interrupt. The interrupts are scanned
  25.844 - *	and a mask of potential interrupt lines is returned.
  25.845 - *
  25.846 - */
  25.847 - 
  25.848 -unsigned long probe_irq_on(void)
  25.849 -{
  25.850 -	unsigned int i;
  25.851 -	irq_desc_t *desc;
  25.852 -	unsigned long val;
  25.853 -	unsigned long delay;
  25.854 -
  25.855 -	down(&probe_sem);
  25.856 -	/* 
  25.857 -	 * something may have generated an irq long ago and we want to
  25.858 -	 * flush such a longstanding irq before considering it as spurious. 
  25.859 -	 */
  25.860 -	for (i = NR_PIRQS-1; i > 0; i--)  {
  25.861 -		desc = irq_desc + i;
  25.862 -
  25.863 -		spin_lock_irq(&desc->lock);
  25.864 -		if (!irq_desc[i].action) 
  25.865 -			irq_desc[i].handler->startup(i);
  25.866 -		spin_unlock_irq(&desc->lock);
  25.867 -	}
  25.868 -
  25.869 -	/* Wait for longstanding interrupts to trigger. */
  25.870 -	for (delay = jiffies + HZ/50; time_after(delay, jiffies); )
  25.871 -		/* about 20ms delay */ synchronize_irq();
  25.872 -
  25.873 -	/*
  25.874 -	 * enable any unassigned irqs
  25.875 -	 * (we must startup again here because if a longstanding irq
  25.876 -	 * happened in the previous stage, it may have masked itself)
  25.877 -	 */
  25.878 -	for (i = NR_PIRQS-1; i > 0; i--) {
  25.879 -		desc = irq_desc + i;
  25.880 -
  25.881 -		spin_lock_irq(&desc->lock);
  25.882 -		if (!desc->action) {
  25.883 -			desc->status |= IRQ_AUTODETECT | IRQ_WAITING;
  25.884 -			if (desc->handler->startup(i))
  25.885 -				desc->status |= IRQ_PENDING;
  25.886 -		}
  25.887 -		spin_unlock_irq(&desc->lock);
  25.888 -	}
  25.889 -
  25.890 -	/*
  25.891 -	 * Wait for spurious interrupts to trigger
  25.892 -	 */
  25.893 -	for (delay = jiffies + HZ/10; time_after(delay, jiffies); )
  25.894 -		/* about 100ms delay */ synchronize_irq();
  25.895 -
  25.896 -	/*
  25.897 -	 * Now filter out any obviously spurious interrupts
  25.898 -	 */
  25.899 -	val = 0;
  25.900 -	for (i = 0; i < NR_PIRQS; i++) {
  25.901 -		irq_desc_t *desc = irq_desc + i;
  25.902 -		unsigned int status;
  25.903 -
  25.904 -		spin_lock_irq(&desc->lock);
  25.905 -		status = desc->status;
  25.906 -
  25.907 -		if (status & IRQ_AUTODETECT) {
  25.908 -			/* It triggered already - consider it spurious. */
  25.909 -			if (!(status & IRQ_WAITING)) {
  25.910 -				desc->status = status & ~IRQ_AUTODETECT;
  25.911 -				desc->handler->shutdown(i);
  25.912 -			} else
  25.913 -				if (i < 32)
  25.914 -					val |= 1 << i;
  25.915 -		}
  25.916 -		spin_unlock_irq(&desc->lock);
  25.917 -	}
  25.918 -
  25.919 -	return val;
  25.920 -}
  25.921 -
  25.922 -/*
  25.923 - * Return a mask of triggered interrupts (this
  25.924 - * can handle only legacy ISA interrupts).
  25.925 - */
  25.926 - 
  25.927 -/**
  25.928 - *	probe_irq_mask - scan a bitmap of interrupt lines
  25.929 - *	@val:	mask of interrupts to consider
  25.930 - *
  25.931 - *	Scan the ISA bus interrupt lines and return a bitmap of
  25.932 - *	active interrupts. The interrupt probe logic state is then
  25.933 - *	returned to its previous value.
  25.934 - *
  25.935 - *	Note: we need to scan all the irq's even though we will
  25.936 - *	only return ISA irq numbers - just so that we reset them
  25.937 - *	all to a known state.
  25.938 - */
  25.939 -unsigned int probe_irq_mask(unsigned long val)
  25.940 -{
  25.941 -	int i;
  25.942 -	unsigned int mask;
  25.943 -
  25.944 -	mask = 0;
  25.945 -	for (i = 0; i < NR_PIRQS; i++) {
  25.946 -		irq_desc_t *desc = irq_desc + i;
  25.947 -		unsigned int status;
  25.948 -
  25.949 -		spin_lock_irq(&desc->lock);
  25.950 -		status = desc->status;
  25.951 -
  25.952 -		if (status & IRQ_AUTODETECT) {
  25.953 -			if (i < 16 && !(status & IRQ_WAITING))
  25.954 -				mask |= 1 << i;
  25.955 -
  25.956 -			desc->status = status & ~IRQ_AUTODETECT;
  25.957 -			desc->handler->shutdown(i);
  25.958 -		}
  25.959 -		spin_unlock_irq(&desc->lock);
  25.960 -	}
  25.961 -	up(&probe_sem);
  25.962 -
  25.963 -	return mask & val;
  25.964 -}
  25.965 -
  25.966 -/*
  25.967 - * Return the one interrupt that triggered (this can
  25.968 - * handle any interrupt source).
  25.969 - */
  25.970 -
  25.971 -/**
  25.972 - *	probe_irq_off	- end an interrupt autodetect
  25.973 - *	@val: mask of potential interrupts (unused)
  25.974 - *
  25.975 - *	Scans the unused interrupt lines and returns the line which
  25.976 - *	appears to have triggered the interrupt. If no interrupt was
  25.977 - *	found then zero is returned. If more than one interrupt is
  25.978 - *	found then minus the first candidate is returned to indicate
  25.979 - *	their is doubt.
  25.980 - *
  25.981 - *	The interrupt probe logic state is returned to its previous
  25.982 - *	value.
  25.983 - *
  25.984 - *	BUGS: When used in a module (which arguably shouldnt happen)
  25.985 - *	nothing prevents two IRQ probe callers from overlapping. The
  25.986 - *	results of this are non-optimal.
  25.987 - */
  25.988 - 
  25.989 -int probe_irq_off(unsigned long val)
  25.990 -{
  25.991 -	int i, irq_found, nr_irqs;
  25.992 -
  25.993 -	nr_irqs = 0;
  25.994 -	irq_found = 0;
  25.995 -	for (i = 0; i < NR_PIRQS; i++) {
  25.996 -		irq_desc_t *desc = irq_desc + i;
  25.997 -		unsigned int status;
  25.998 -
  25.999 -		spin_lock_irq(&desc->lock);
 25.1000 -		status = desc->status;
 25.1001 -
 25.1002 -		if (status & IRQ_AUTODETECT) {
 25.1003 -			if (!(status & IRQ_WAITING)) {
 25.1004 -				if (!nr_irqs)
 25.1005 -					irq_found = i;
 25.1006 -				nr_irqs++;
 25.1007 -			}
 25.1008 -			desc->status = status & ~IRQ_AUTODETECT;
 25.1009 -			desc->handler->shutdown(i);
 25.1010 -		}
 25.1011 -		spin_unlock_irq(&desc->lock);
 25.1012 -	}
 25.1013 -	up(&probe_sem);
 25.1014 -
 25.1015 -	if (nr_irqs > 1)
 25.1016 -		irq_found = -irq_found;
 25.1017 -	return irq_found;
 25.1018 -}
 25.1019 -
 25.1020 -/* this was setup_x86_irq but it seems pretty generic */
 25.1021 -int setup_irq(unsigned int irq, struct irqaction * new)
 25.1022 -{
 25.1023 -	int shared = 0;
 25.1024 -	unsigned long flags;
 25.1025 -	struct irqaction *old, **p;
 25.1026 -	irq_desc_t *desc = irq_desc + irq;
 25.1027 -
 25.1028 -	/*
 25.1029 -	 * Some drivers like serial.c use request_irq() heavily,
 25.1030 -	 * so we have to be careful not to interfere with a
 25.1031 -	 * running system.
 25.1032 -	 */
 25.1033 -	if (new->flags & SA_SAMPLE_RANDOM) {
 25.1034 -		/*
 25.1035 -		 * This function might sleep, we want to call it first,
 25.1036 -		 * outside of the atomic block.
 25.1037 -		 * Yes, this might clear the entropy pool if the wrong
 25.1038 -		 * driver is attempted to be loaded, without actually
 25.1039 -		 * installing a new handler, but is this really a problem,
 25.1040 -		 * only the sysadmin is able to do this.
 25.1041 -		 */
 25.1042 -		rand_initialize_irq(irq);
 25.1043 -	}
 25.1044 -
 25.1045 -	/*
 25.1046 -	 * The following block of code has to be executed atomically
 25.1047 -	 */
 25.1048 -	spin_lock_irqsave(&desc->lock,flags);
 25.1049 -	p = &desc->action;
 25.1050 -	if ((old = *p) != NULL) {
 25.1051 -		/* Can't share interrupts unless both agree to */
 25.1052 -		if (!(old->flags & new->flags & SA_SHIRQ)) {
 25.1053 -			spin_unlock_irqrestore(&desc->lock,flags);
 25.1054 -			return -EBUSY;
 25.1055 -		}
 25.1056 -
 25.1057 -		/* add new interrupt at end of irq queue */
 25.1058 -		do {
 25.1059 -			p = &old->next;
 25.1060 -			old = *p;
 25.1061 -		} while (old);
 25.1062 -		shared = 1;
 25.1063 -	}
 25.1064 -
 25.1065 -	*p = new;
 25.1066 -
 25.1067 -	if (!shared) {
 25.1068 -		desc->depth = 0;
 25.1069 -		desc->status &= ~(IRQ_DISABLED | IRQ_AUTODETECT | IRQ_WAITING | IRQ_INPROGRESS);
 25.1070 -		desc->handler->startup(irq);
 25.1071 -	}
 25.1072 -	spin_unlock_irqrestore(&desc->lock,flags);
 25.1073 -
 25.1074 -	register_irq_proc(irq);
 25.1075 -	return 0;
 25.1076 -}
 25.1077 -
 25.1078 -static struct proc_dir_entry * root_irq_dir;
 25.1079 -static struct proc_dir_entry * irq_dir [NR_IRQS];
 25.1080 -
 25.1081 -#define HEX_DIGITS 8
 25.1082 -
 25.1083 -static unsigned int parse_hex_value (const char *buffer,
 25.1084 -		unsigned long count, unsigned long *ret)
 25.1085 -{
 25.1086 -	unsigned char hexnum [HEX_DIGITS];
 25.1087 -	unsigned long value;
 25.1088 -	int i;
 25.1089 -
 25.1090 -	if (!count)
 25.1091 -		return -EINVAL;
 25.1092 -	if (count > HEX_DIGITS)
 25.1093 -		count = HEX_DIGITS;
 25.1094 -	if (copy_from_user(hexnum, buffer, count))
 25.1095 -		return -EFAULT;
 25.1096 -
 25.1097 -	/*
 25.1098 -	 * Parse the first 8 characters as a hex string, any non-hex char
 25.1099 -	 * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
 25.1100 -	 */
 25.1101 -	value = 0;
 25.1102 -
 25.1103 -	for (i = 0; i < count; i++) {
 25.1104 -		unsigned int c = hexnum[i];
 25.1105 -
 25.1106 -		switch (c) {
 25.1107 -			case '0' ... '9': c -= '0'; break;
 25.1108 -			case 'a' ... 'f': c -= 'a'-10; break;
 25.1109 -			case 'A' ... 'F': c -= 'A'-10; break;
 25.1110 -		default:
 25.1111 -			goto out;
 25.1112 -		}
 25.1113 -		value = (value << 4) | c;
 25.1114 -	}
 25.1115 -out:
 25.1116 -	*ret = value;
 25.1117 -	return 0;
 25.1118 -}
 25.1119 -
 25.1120 -#if CONFIG_SMP
 25.1121 -
 25.1122 -static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
 25.1123 -
 25.1124 -static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
 25.1125 -static int irq_affinity_read_proc (char *page, char **start, off_t off,
 25.1126 -			int count, int *eof, void *data)
 25.1127 -{
 25.1128 -	if (count < HEX_DIGITS+1)
 25.1129 -		return -EINVAL;
 25.1130 -	return sprintf (page, "%08lx\n", irq_affinity[(long)data]);
 25.1131 -}
 25.1132 -
 25.1133 -static int irq_affinity_write_proc (struct file *file, const char *buffer,
 25.1134 -					unsigned long count, void *data)
 25.1135 -{
 25.1136 -	int irq = (long) data, full_count = count, err;
 25.1137 -	unsigned long new_value;
 25.1138 -
 25.1139 -	if (!irq_desc[irq].handler->set_affinity)
 25.1140 -		return -EIO;
 25.1141 -
 25.1142 -	err = parse_hex_value(buffer, count, &new_value);
 25.1143 -
 25.1144 -	/*
 25.1145 -	 * Do not allow disabling IRQs completely - it's a too easy
 25.1146 -	 * way to make the system unusable accidentally :-) At least
 25.1147 -	 * one online CPU still has to be targeted.
 25.1148 -	 */
 25.1149 -	if (!(new_value & cpu_online_map))
 25.1150 -		return -EINVAL;
 25.1151 -
 25.1152 -	irq_affinity[irq] = new_value;
 25.1153 -	irq_desc[irq].handler->set_affinity(irq, new_value);
 25.1154 -
 25.1155 -	return full_count;
 25.1156 -}
 25.1157 -
 25.1158 -#endif
 25.1159 -
 25.1160 -static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
 25.1161 -			int count, int *eof, void *data)
 25.1162 -{
 25.1163 -	unsigned long *mask = (unsigned long *) data;
 25.1164 -	if (count < HEX_DIGITS+1)
 25.1165 -		return -EINVAL;
 25.1166 -	return sprintf (page, "%08lx\n", *mask);
 25.1167 -}
 25.1168 -
 25.1169 -static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
 25.1170 -					unsigned long count, void *data)
 25.1171 -{
 25.1172 -	unsigned long *mask = (unsigned long *) data, full_count = count, err;
 25.1173 -	unsigned long new_value;
 25.1174 -
 25.1175 -	err = parse_hex_value(buffer, count, &new_value);
 25.1176 -	if (err)
 25.1177 -		return err;
 25.1178 -
 25.1179 -	*mask = new_value;
 25.1180 -	return full_count;
 25.1181 -}
 25.1182 -
 25.1183 -#define MAX_NAMELEN 10
 25.1184 -
 25.1185 -static void register_irq_proc (unsigned int irq)
 25.1186 -{
 25.1187 -	char name [MAX_NAMELEN];
 25.1188 -
 25.1189 -	if (!root_irq_dir || (irq_desc[irq].handler == &no_irq_type) ||
 25.1190 -			irq_dir[irq])
 25.1191 -		return;
 25.1192 -
 25.1193 -	memset(name, 0, MAX_NAMELEN);
 25.1194 -	sprintf(name, "%d", irq);
 25.1195 -
 25.1196 -	/* create /proc/irq/1234 */
 25.1197 -	irq_dir[irq] = proc_mkdir(name, root_irq_dir);
 25.1198 -
 25.1199 -#if CONFIG_SMP
 25.1200 -	{
 25.1201 -		struct proc_dir_entry *entry;
 25.1202 -
 25.1203 -		/* create /proc/irq/1234/smp_affinity */
 25.1204 -		entry = create_proc_entry("smp_affinity", 0600, irq_dir[irq]);
 25.1205 -
 25.1206 -		if (entry) {
 25.1207 -			entry->nlink = 1;
 25.1208 -			entry->data = (void *)(long)irq;
 25.1209 -			entry->read_proc = irq_affinity_read_proc;
 25.1210 -			entry->write_proc = irq_affinity_write_proc;
 25.1211 -		}
 25.1212 -
 25.1213 -		smp_affinity_entry[irq] = entry;
 25.1214 -	}
 25.1215 -#endif
 25.1216 -}
 25.1217 -
 25.1218 -unsigned long prof_cpu_mask = -1;
 25.1219 -
 25.1220 -void init_irq_proc (void)
 25.1221 -{
 25.1222 -	struct proc_dir_entry *entry;
 25.1223 -	int i;
 25.1224 -
 25.1225 -	/* create /proc/irq */
 25.1226 -	root_irq_dir = proc_mkdir("irq", 0);
 25.1227 -
 25.1228 -	/* create /proc/irq/prof_cpu_mask */
 25.1229 -	entry = create_proc_entry("prof_cpu_mask", 0600, root_irq_dir);
 25.1230 -
 25.1231 -	if (!entry)
 25.1232 -	    return;
 25.1233 -
 25.1234 -	entry->nlink = 1;
 25.1235 -	entry->data = (void *)&prof_cpu_mask;
 25.1236 -	entry->read_proc = prof_cpu_mask_read_proc;
 25.1237 -	entry->write_proc = prof_cpu_mask_write_proc;
 25.1238 -
 25.1239 -	/*
 25.1240 -	 * Create entries for all existing IRQs.
 25.1241 -	 */
 25.1242 -	for (i = 0; i < NR_IRQS; i++)
 25.1243 -		register_irq_proc(i);
 25.1244 -}
 25.1245 -
    26.1 --- a/linux-2.4.28-xen-sparse/arch/xen/kernel/ldt.c	Wed Jan 19 13:20:15 2005 +0000
    26.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.3 @@ -1,271 +0,0 @@
    26.4 -/*
    26.5 - * linux/kernel/ldt.c
    26.6 - *
    26.7 - * Copyright (C) 1992 Krishna Balasubramanian and Linus Torvalds
    26.8 - * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com>
    26.9 - */
   26.10 -
   26.11 -#include <linux/errno.h>
   26.12 -#include <linux/sched.h>
   26.13 -#include <linux/string.h>
   26.14 -#include <linux/mm.h>
   26.15 -#include <linux/smp.h>
   26.16 -#include <linux/smp_lock.h>
   26.17 -#include <linux/vmalloc.h>
   26.18 -#include <linux/slab.h>
   26.19 -
   26.20 -#include <asm/uaccess.h>
   26.21 -#include <asm/system.h>
   26.22 -#include <asm/ldt.h>
   26.23 -#include <asm/desc.h>
   26.24 -
   26.25 -#ifdef CONFIG_SMP /* avoids "defined but not used" warnig */
   26.26 -static void flush_ldt(void *mm)
   26.27 -{
   26.28 -	if (current->active_mm)
   26.29 -		load_LDT(&current->active_mm->context);
   26.30 -}
   26.31 -#endif
   26.32 -
   26.33 -static int alloc_ldt(mm_context_t *pc, int mincount, int reload)
   26.34 -{
   26.35 -	void *oldldt;
   26.36 -	void *newldt;
   26.37 -	int oldsize;
   26.38 -
   26.39 -	if (mincount <= pc->size)
   26.40 -		return 0;
   26.41 -	oldsize = pc->size;
   26.42 -	mincount = (mincount+511)&(~511);
   26.43 -	if (mincount*LDT_ENTRY_SIZE > PAGE_SIZE)
   26.44 -		newldt = vmalloc(mincount*LDT_ENTRY_SIZE);
   26.45 -	else
   26.46 -		newldt = kmalloc(mincount*LDT_ENTRY_SIZE, GFP_KERNEL);
   26.47 -
   26.48 -	if (!newldt)
   26.49 -		return -ENOMEM;
   26.50 -
   26.51 -	if (oldsize)
   26.52 -		memcpy(newldt, pc->ldt, oldsize*LDT_ENTRY_SIZE);
   26.53 -
   26.54 -	oldldt = pc->ldt;
   26.55 -	memset(newldt+oldsize*LDT_ENTRY_SIZE, 0, (mincount-oldsize)*LDT_ENTRY_SIZE);
   26.56 -	wmb();
   26.57 -	pc->ldt = newldt;
   26.58 -	pc->size = mincount;
   26.59 -	if (reload) {
   26.60 -		make_pages_readonly(
   26.61 -			pc->ldt,
   26.62 -			(pc->size*LDT_ENTRY_SIZE)/PAGE_SIZE);
   26.63 -		load_LDT(pc);
   26.64 -		flush_page_update_queue();
   26.65 -#ifdef CONFIG_SMP
   26.66 -		if (current->mm->cpu_vm_mask != (1<<smp_processor_id()))
   26.67 -			smp_call_function(flush_ldt, 0, 1, 1);
   26.68 -#endif
   26.69 -	}
   26.70 -	wmb();
   26.71 -	if (oldsize) {
   26.72 -		if (oldsize*LDT_ENTRY_SIZE > PAGE_SIZE)
   26.73 -			vfree(oldldt);
   26.74 -		else
   26.75 -			kfree(oldldt);
   26.76 -	}
   26.77 -	return 0;
   26.78 -}
   26.79 -
   26.80 -static inline int copy_ldt(mm_context_t *new, mm_context_t *old)
   26.81 -{
   26.82 -	int err = alloc_ldt(new, old->size, 0);
   26.83 -	if (err < 0) {
   26.84 -		printk(KERN_WARNING "ldt allocation failed\n");
   26.85 -		new->size = 0;
   26.86 -		return err;
   26.87 -	}
   26.88 -	memcpy(new->ldt, old->ldt, old->size*LDT_ENTRY_SIZE);
   26.89 -	make_pages_readonly(new->ldt, (new->size*LDT_ENTRY_SIZE)/PAGE_SIZE);
   26.90 -	return 0;
   26.91 -}
   26.92 -
   26.93 -/*
   26.94 - * we do not have to muck with descriptors here, that is
   26.95 - * done in switch_mm() as needed.
   26.96 - */
   26.97 -int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
   26.98 -{
   26.99 -	struct mm_struct * old_mm;
  26.100 -	int retval = 0;
  26.101 -
  26.102 -	init_MUTEX(&mm->context.sem);
  26.103 -	mm->context.size = 0;
  26.104 -	old_mm = current->mm;
  26.105 -	if (old_mm && old_mm->context.size > 0) {
  26.106 -		down(&old_mm->context.sem);
  26.107 -		retval = copy_ldt(&mm->context, &old_mm->context);
  26.108 -		up(&old_mm->context.sem);
  26.109 -	}
  26.110 -	return retval;
  26.111 -}
  26.112 -
  26.113 -/*
  26.114 - * No need to lock the MM as we are the last user
  26.115 - * Do not touch the ldt register, we are already
  26.116 - * in the next thread.
  26.117 - */
  26.118 -void destroy_context(struct mm_struct *mm)
  26.119 -{
  26.120 -	if (mm->context.size) {
  26.121 -		make_pages_writable(
  26.122 -			mm->context.ldt, 
  26.123 -			(mm->context.size*LDT_ENTRY_SIZE)/PAGE_SIZE);
  26.124 -		flush_page_update_queue();
  26.125 -		if (mm->context.size*LDT_ENTRY_SIZE > PAGE_SIZE)
  26.126 -			vfree(mm->context.ldt);
  26.127 -		else
  26.128 -			kfree(mm->context.ldt);
  26.129 -		mm->context.size = 0;
  26.130 -	}
  26.131 -}
  26.132 -
  26.133 -static int read_ldt(void * ptr, unsigned long bytecount)
  26.134 -{
  26.135 -	int err;
  26.136 -	unsigned long size;
  26.137 -	struct mm_struct * mm = current->mm;
  26.138 -
  26.139 -	if (!mm->context.size)
  26.140 -		return 0;
  26.141 -	if (bytecount > LDT_ENTRY_SIZE*LDT_ENTRIES)
  26.142 -		bytecount = LDT_ENTRY_SIZE*LDT_ENTRIES;
  26.143 -
  26.144 -	down(&mm->context.sem);
  26.145 -	size = mm->context.size*LDT_ENTRY_SIZE;
  26.146 -	if (size > bytecount)
  26.147 -		size = bytecount;
  26.148 -
  26.149 -	err = 0;
  26.150 -	if (copy_to_user(ptr, mm->context.ldt, size))
  26.151 -		err = -EFAULT;
  26.152 -	up(&mm->context.sem);
  26.153 -	if (err < 0)
  26.154 -		return err;
  26.155 -	if (size != bytecount) {
  26.156 -		/* zero-fill the rest */
  26.157 -		clear_user(ptr+size, bytecount-size);
  26.158 -	}
  26.159 -	return bytecount;
  26.160 -}
  26.161 -
  26.162 -static int read_default_ldt(void * ptr, unsigned long bytecount)
  26.163 -{
  26.164 -	int err;
  26.165 -	unsigned long size;
  26.166 -	void *address;
  26.167 -
  26.168 -	err = 0;
  26.169 -	address = &default_ldt[0];
  26.170 -	size = 5*sizeof(struct desc_struct);
  26.171 -	if (size > bytecount)
  26.172 -		size = bytecount;
  26.173 -
  26.174 -	err = size;
  26.175 -	if (copy_to_user(ptr, address, size))
  26.176 -		err = -EFAULT;
  26.177 -
  26.178 -	return err;
  26.179 -}
  26.180 -
  26.181 -static int write_ldt(void * ptr, unsigned long bytecount, int oldmode)
  26.182 -{
  26.183 -	struct mm_struct * mm = current->mm;
  26.184 -	__u32 entry_1, entry_2, *lp;
  26.185 -	unsigned long mach_lp;
  26.186 -	int error;
  26.187 -	struct modify_ldt_ldt_s ldt_info;
  26.188 -
  26.189 -	error = -EINVAL;
  26.190 -	if (bytecount != sizeof(ldt_info))
  26.191 -		goto out;
  26.192 -	error = -EFAULT; 	
  26.193 -	if (copy_from_user(&ldt_info, ptr, sizeof(ldt_info)))
  26.194 -		goto out;
  26.195 -
  26.196 -	error = -EINVAL;
  26.197 -	if (ldt_info.entry_number >= LDT_ENTRIES)
  26.198 -		goto out;
  26.199 -	if (ldt_info.contents == 3) {
  26.200 -		if (oldmode)
  26.201 -			goto out;
  26.202 -		if (ldt_info.seg_not_present == 0)
  26.203 -			goto out;
  26.204 -	}
  26.205 -
  26.206 -	down(&mm->context.sem);
  26.207 -	if (ldt_info.entry_number >= mm->context.size) {
  26.208 -		error = alloc_ldt(&current->mm->context, ldt_info.entry_number+1, 1);
  26.209 -		if (error < 0)
  26.210 -			goto out_unlock;
  26.211 -	}
  26.212 -
  26.213 -	lp = (__u32 *) ((ldt_info.entry_number << 3) + (char *) mm->context.ldt);
  26.214 -	mach_lp = arbitrary_virt_to_machine(lp);
  26.215 -
  26.216 -   	/* Allow LDTs to be cleared by the user. */
  26.217 -   	if (ldt_info.base_addr == 0 && ldt_info.limit == 0) {
  26.218 -		if (oldmode ||
  26.219 -		    (ldt_info.contents == 0		&&
  26.220 -		     ldt_info.read_exec_only == 1	&&
  26.221 -		     ldt_info.seg_32bit == 0		&&
  26.222 -		     ldt_info.limit_in_pages == 0	&&
  26.223 -		     ldt_info.seg_not_present == 1	&&
  26.224 -		     ldt_info.useable == 0 )) {
  26.225 -			entry_1 = 0;
  26.226 -			entry_2 = 0;
  26.227 -			goto install;
  26.228 -		}
  26.229 -	}
  26.230 -
  26.231 -	entry_1 = ((ldt_info.base_addr & 0x0000ffff) << 16) |
  26.232 -		  (ldt_info.limit & 0x0ffff);
  26.233 -	entry_2 = (ldt_info.base_addr & 0xff000000) |
  26.234 -		  ((ldt_info.base_addr & 0x00ff0000) >> 16) |
  26.235 -		  (ldt_info.limit & 0xf0000) |
  26.236 -		  ((ldt_info.read_exec_only ^ 1) << 9) |
  26.237 -		  (ldt_info.contents << 10) |
  26.238 -		  ((ldt_info.seg_not_present ^ 1) << 15) |
  26.239 -		  (ldt_info.seg_32bit << 22) |
  26.240 -		  (ldt_info.limit_in_pages << 23) |
  26.241 -		  0x7000;
  26.242 -	if (!oldmode)
  26.243 -		entry_2 |= (ldt_info.useable << 20);
  26.244 -
  26.245 -	/* Install the new entry ...  */
  26.246 -install:
  26.247 -	error = HYPERVISOR_update_descriptor(mach_lp, entry_1, entry_2);
  26.248 -
  26.249 -out_unlock:
  26.250 -	up(&mm->context.sem);
  26.251 -out:
  26.252 -	return error;
  26.253 -}
  26.254 -
  26.255 -asmlinkage int sys_modify_ldt(int func, void *ptr, unsigned long bytecount)
  26.256 -{
  26.257 -	int ret = -ENOSYS;
  26.258 -
  26.259 -	switch (func) {
  26.260 -	case 0:
  26.261 -		ret = read_ldt(ptr, bytecount);
  26.262 -		break;
  26.263 -	case 1:
  26.264 -		ret = write_ldt(ptr, bytecount, 1);
  26.265 -		break;
  26.266 -	case 2:
  26.267 -		ret = read_default_ldt(ptr, bytecount);
  26.268 -		break;
  26.269 -	case 0x11:
  26.270 -		ret = write_ldt(ptr, bytecount, 0);
  26.271 -		break;
  26.272 -	}
  26.273 -	return ret;
  26.274 -}
    27.1 --- a/linux-2.4.28-xen-sparse/arch/xen/kernel/pci-pc.c	Wed Jan 19 13:20:15 2005 +0000
    27.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.3 @@ -1,260 +0,0 @@
    27.4 -/*
    27.5 - *	Low-Level PCI Support for PC
    27.6 - *
    27.7 - *	(c) 1999--2000 Martin Mares <mj@ucw.cz>
    27.8 - *
    27.9 - * Adjusted to use Xen's interface by Rolf Neugebauer, Intel Research Cambridge
   27.10 - * Further modifications by Keir Fraser, University of Cambridge
   27.11 - */
   27.12 -
   27.13 -#include <linux/config.h>
   27.14 -#include <linux/types.h>
   27.15 -#include <linux/kernel.h>
   27.16 -#include <linux/sched.h>
   27.17 -#include <linux/pci.h>
   27.18 -#include <linux/init.h>
   27.19 -#include <linux/ioport.h>
   27.20 -
   27.21 -#include <asm/segment.h>
   27.22 -#include <asm/io.h>
   27.23 -
   27.24 -#include <asm-xen/xen-public/xen.h>
   27.25 -#include <asm-xen/xen-public/physdev.h>
   27.26 -
   27.27 -#include "pci-i386.h"
   27.28 -
   27.29 -/*
   27.30 - * NB. The following interface functions are not included here:
   27.31 - *  1. void eisa_set_level_irq(unsigned int irq)
   27.32 - *  2. irq_routing_table * __devinit pcibios_get_irq_routing_table(void)
   27.33 - *  3. int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq)
   27.34 - * All are used by the ACPI driver. This should be ported to Xen if it is
   27.35 - * ever required -- Xen is the ultimate source for IRQ-routing knowledge.
   27.36 - */
   27.37 -
   27.38 -struct pci_ops *pci_root_ops = NULL;
   27.39 -
   27.40 -int (*pci_config_read)(int seg, int bus, int dev, int fn, 
   27.41 -                       int reg, int len, u32 *value) = NULL;
   27.42 -int (*pci_config_write)(int seg, int bus, int dev, int fn,
   27.43 -                        int reg, int len, u32 value) = NULL;
   27.44 -
   27.45 -unsigned int pci_probe = PCI_PROBE_BIOS;
   27.46 -
   27.47 -struct pci_fixup pcibios_fixups[] = { { 0 } };
   27.48 -
   27.49 -static int pci_confx_read(int seg, int bus, int dev, int fn, int reg, 
   27.50 -                          int len, u32 *value)
   27.51 -{
   27.52 -    int ret;
   27.53 -    physdev_op_t op;
   27.54 -
   27.55 -    if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
   27.56 -        return -EINVAL;
   27.57 -
   27.58 -    op.cmd = PHYSDEVOP_PCI_CFGREG_READ;
   27.59 -    op.u.pci_cfgreg_read.bus  = bus;
   27.60 -    op.u.pci_cfgreg_read.dev  = dev;
   27.61 -    op.u.pci_cfgreg_read.func = fn;
   27.62 -    op.u.pci_cfgreg_read.reg  = reg;
   27.63 -    op.u.pci_cfgreg_read.len  = len;
   27.64 -
   27.65 -    if ( (ret = HYPERVISOR_physdev_op(&op)) != 0 )
   27.66 -        return ret;
   27.67 -
   27.68 -    *value = op.u.pci_cfgreg_read.value;
   27.69 -
   27.70 -    return 0;
   27.71 -}
   27.72 -
   27.73 -static int pci_confx_write(int seg, int bus, int dev, int fn, int reg, 
   27.74 -                           int len, u32 value)
   27.75 -{
   27.76 -    int ret;
   27.77 -    physdev_op_t op;
   27.78 -
   27.79 -    if ((bus > 255 || dev > 31 || fn > 7 || reg > 255)) 
   27.80 -        return -EINVAL;
   27.81 -
   27.82 -    op.cmd = PHYSDEVOP_PCI_CFGREG_WRITE;
   27.83 -    op.u.pci_cfgreg_write.bus   = bus;
   27.84 -    op.u.pci_cfgreg_write.dev   = dev;
   27.85 -    op.u.pci_cfgreg_write.func  = fn;
   27.86 -    op.u.pci_cfgreg_write.reg   = reg;
   27.87 -    op.u.pci_cfgreg_write.len   = len;
   27.88 -    op.u.pci_cfgreg_write.value = value;
   27.89 -
   27.90 -    if ( (ret = HYPERVISOR_physdev_op(&op)) != 0 )
   27.91 -        return ret;
   27.92 -    return 0;
   27.93 -}
   27.94 -
   27.95 -
   27.96 -static int pci_confx_read_config_byte(struct pci_dev *dev, 
   27.97 -                                      int where, u8 *value)
   27.98 -{
   27.99 -    int result; 
  27.100 -    u32 data;
  27.101 -
  27.102 -    result = pci_confx_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  27.103 -                            PCI_FUNC(dev->devfn), where, 1, &data);
  27.104 -
  27.105 -    *value = (u8)data;
  27.106 -
  27.107 -    return result;
  27.108 -}
  27.109 -
  27.110 -static int pci_confx_read_config_word(struct pci_dev *dev, 
  27.111 -                                      int where, u16 *value)
  27.112 -{
  27.113 -    int result; 
  27.114 -    u32 data;
  27.115 -
  27.116 -    result = pci_confx_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  27.117 -                            PCI_FUNC(dev->devfn), where, 2, &data);
  27.118 -
  27.119 -    *value = (u16)data;
  27.120 -
  27.121 -    return result;
  27.122 -}
  27.123 -
  27.124 -static int pci_confx_read_config_dword(struct pci_dev *dev, 
  27.125 -                                       int where, u32 *value)
  27.126 -{
  27.127 -    return pci_confx_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  27.128 -                          PCI_FUNC(dev->devfn), where, 4, value);
  27.129 -}
  27.130 -
  27.131 -static int pci_confx_write_config_byte(struct pci_dev *dev, 
  27.132 -                                       int where, u8 value)
  27.133 -{
  27.134 -    return pci_confx_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  27.135 -                           PCI_FUNC(dev->devfn), where, 1, value);
  27.136 -}
  27.137 -
  27.138 -static int pci_confx_write_config_word(struct pci_dev *dev, 
  27.139 -                                       int where, u16 value)
  27.140 -{
  27.141 -    return pci_confx_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  27.142 -                           PCI_FUNC(dev->devfn), where, 2, value);
  27.143 -}
  27.144 -
  27.145 -static int pci_confx_write_config_dword(struct pci_dev *dev, 
  27.146 -                                        int where, u32 value)
  27.147 -{
  27.148 -    return pci_confx_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  27.149 -                           PCI_FUNC(dev->devfn), where, 4, value);
  27.150 -}
  27.151 -
  27.152 -static struct pci_ops pci_conf_xen = {
  27.153 -    pci_confx_read_config_byte,
  27.154 -    pci_confx_read_config_word,
  27.155 -    pci_confx_read_config_dword,
  27.156 -    pci_confx_write_config_byte,
  27.157 -    pci_confx_write_config_word,
  27.158 -    pci_confx_write_config_dword
  27.159 -};
  27.160 -
  27.161 -void pcibios_penalize_isa_irq(int irq)
  27.162 -{ 
  27.163 -    /* nothing */
  27.164 -}
  27.165 -
  27.166 -void __devinit pcibios_fixup_bus(struct pci_bus *b)
  27.167 -{
  27.168 -    pci_read_bridge_bases(b);
  27.169 -}
  27.170 -
  27.171 -struct pci_bus * __devinit pcibios_scan_root(int busnum)
  27.172 -{
  27.173 -    struct list_head *list;
  27.174 -    struct pci_bus *bus;
  27.175 -
  27.176 -    list_for_each ( list, &pci_root_buses )
  27.177 -    {
  27.178 -        bus = pci_bus_b(list);
  27.179 -        if ( bus->number == busnum )
  27.180 -            return bus;
  27.181 -    }
  27.182 -
  27.183 -    printk("PCI: Probing PCI hardware (bus %02x)\n", busnum);
  27.184 -    return pci_scan_bus(busnum, pci_root_ops, NULL);
  27.185 -}
  27.186 -
  27.187 -void __init pcibios_init(void)
  27.188 -{
  27.189 -    int bus;
  27.190 -    physdev_op_t op;
  27.191 -
  27.192 -    if ( !pci_probe )
  27.193 -        return;
  27.194 -
  27.195 -    pci_root_ops     = &pci_conf_xen;
  27.196 -    pci_config_read  = pci_confx_read;
  27.197 -    pci_config_write = pci_confx_write;
  27.198 -
  27.199 -    pcibios_set_cacheline_size();
  27.200 -
  27.201 -    op.cmd = PHYSDEVOP_PCI_PROBE_ROOT_BUSES;
  27.202 -    if ( HYPERVISOR_physdev_op(&op) != 0 )
  27.203 -    {
  27.204 -        printk(KERN_WARNING "PCI: System does not support PCI\n");
  27.205 -        return;
  27.206 -    }
  27.207 -
  27.208 -    printk(KERN_INFO "PCI: Probing PCI hardware\n");
  27.209 -    for ( bus = 0; bus < 256; bus++ )
  27.210 -        if ( test_bit(bus, &op.u.pci_probe_root_buses.busmask[0]) )
  27.211 -            (void)pcibios_scan_root(bus);
  27.212 -
  27.213 -    pcibios_resource_survey();
  27.214 -}
  27.215 -
  27.216 -char * __devinit pcibios_setup(char *str)
  27.217 -{
  27.218 -    if ( !strcmp(str, "off") )
  27.219 -        pci_probe = 0;
  27.220 -    return NULL;
  27.221 -}
  27.222 -
  27.223 -unsigned int pcibios_assign_all_busses(void)
  27.224 -{
  27.225 -    return 0;
  27.226 -}
  27.227 -
  27.228 -int pcibios_enable_device(struct pci_dev *dev, int mask)
  27.229 -{
  27.230 -    int err;
  27.231 -    u8  pin;
  27.232 -    physdev_op_t op;
  27.233 -
  27.234 -    /* Inform Xen that we are going to use this device. */
  27.235 -    op.cmd = PHYSDEVOP_PCI_INITIALISE_DEVICE;
  27.236 -    op.u.pci_initialise_device.bus  = dev->bus->number;
  27.237 -    op.u.pci_initialise_device.dev  = PCI_SLOT(dev->devfn);
  27.238 -    op.u.pci_initialise_device.func = PCI_FUNC(dev->devfn);
  27.239 -    if ( (err = HYPERVISOR_physdev_op(&op)) != 0 )
  27.240 -        return err;
  27.241 -
  27.242 -    /* Now we can bind to the very final IRQ line. */
  27.243 -    pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &pin);
  27.244 -    dev->irq = pin;
  27.245 -
  27.246 -    /* Turn on device I/O and memory access as necessary. */
  27.247 -    if ( (err = pcibios_enable_resources(dev, mask)) < 0 )
  27.248 -        return err;
  27.249 -
  27.250 -    /* Sanity-check that an interrupt-producing device is routed to an IRQ. */
  27.251 -    pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
  27.252 -    if ( pin != 0 )
  27.253 -    {
  27.254 -        if ( dev->irq != 0 )
  27.255 -            printk(KERN_INFO "PCI: Obtained IRQ %d for device %s\n",
  27.256 -                   dev->irq, dev->slot_name);
  27.257 -        else
  27.258 -            printk(KERN_WARNING "PCI: No IRQ known for interrupt pin %c of "
  27.259 -                   "device %s.\n", 'A' + pin - 1, dev->slot_name);
  27.260 -    }
  27.261 -
  27.262 -    return 0;
  27.263 -}
    28.1 --- a/linux-2.4.28-xen-sparse/arch/xen/kernel/process.c	Wed Jan 19 13:20:15 2005 +0000
    28.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.3 @@ -1,460 +0,0 @@
    28.4 -/*
    28.5 - *  linux/arch/i386/kernel/process.c
    28.6 - *
    28.7 - *  Copyright (C) 1995  Linus Torvalds
    28.8 - *
    28.9 - *  Pentium III FXSR, SSE support
   28.10 - *	Gareth Hughes <gareth@valinux.com>, May 2000
   28.11 - */
   28.12 -
   28.13 -/*
   28.14 - * This file handles the architecture-dependent parts of process handling..
   28.15 - */
   28.16 -
   28.17 -#define __KERNEL_SYSCALLS__
   28.18 -#include <stdarg.h>
   28.19 -
   28.20 -#include <linux/errno.h>
   28.21 -#include <linux/sched.h>
   28.22 -#include <linux/kernel.h>
   28.23 -#include <linux/mm.h>
   28.24 -#include <linux/smp.h>
   28.25 -#include <linux/smp_lock.h>
   28.26 -#include <linux/stddef.h>
   28.27 -#include <linux/unistd.h>
   28.28 -#include <linux/ptrace.h>
   28.29 -#include <linux/slab.h>
   28.30 -#include <linux/vmalloc.h>
   28.31 -#include <linux/user.h>
   28.32 -#include <linux/a.out.h>
   28.33 -#include <linux/interrupt.h>
   28.34 -#include <linux/config.h>
   28.35 -#include <linux/delay.h>
   28.36 -#include <linux/reboot.h>
   28.37 -#include <linux/init.h>
   28.38 -#include <linux/mc146818rtc.h>
   28.39 -
   28.40 -#include <asm/uaccess.h>
   28.41 -#include <asm/pgtable.h>
   28.42 -#include <asm/system.h>
   28.43 -#include <asm/io.h>
   28.44 -#include <asm/ldt.h>
   28.45 -#include <asm/processor.h>
   28.46 -#include <asm/i387.h>
   28.47 -#include <asm/desc.h>
   28.48 -#include <asm/mmu_context.h>
   28.49 -#include <asm/multicall.h>
   28.50 -#include <asm-xen/xen-public/dom0_ops.h>
   28.51 -
   28.52 -#include <linux/irq.h>
   28.53 -
   28.54 -asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
   28.55 -
   28.56 -int hlt_counter;
   28.57 -
   28.58 -/*
   28.59 - * Powermanagement idle function, if any..
   28.60 - */
   28.61 -void (*pm_idle)(void);
   28.62 -
   28.63 -/*
   28.64 - * Power off function, if any
   28.65 - */
   28.66 -void (*pm_power_off)(void);
   28.67 -
   28.68 -void disable_hlt(void)
   28.69 -{
   28.70 -    hlt_counter++;
   28.71 -}
   28.72 -
   28.73 -void enable_hlt(void)
   28.74 -{
   28.75 -    hlt_counter--;
   28.76 -}
   28.77 -
   28.78 -/*
   28.79 - * The idle thread. There's no useful work to be
   28.80 - * done, so just try to conserve power and have a
   28.81 - * low exit latency (ie sit in a loop waiting for
   28.82 - * somebody to say that they'd like to reschedule)
   28.83 - */
   28.84 -void cpu_idle (void)
   28.85 -{
   28.86 -    extern int set_timeout_timer(void);
   28.87 -
   28.88 -    /* Endless idle loop with no priority at all. */
   28.89 -    init_idle();
   28.90 -    current->nice = 20;
   28.91 -    current->counter = -100;
   28.92 -
   28.93 -    for ( ; ; )
   28.94 -    {
   28.95 -        while ( !current->need_resched )
   28.96 -        {
   28.97 -            __cli();
   28.98 -            if ( current->need_resched )
   28.99 -            {
  28.100 -                /* The race-free check for events failed. */
  28.101 -                __sti();
  28.102 -                break;
  28.103 -            }
  28.104 -            else if ( set_timeout_timer() == 0 )
  28.105 -            {
  28.106 -                /* NB. Blocking reenable events in a race-free manner. */
  28.107 -                HYPERVISOR_block();
  28.108 -            }
  28.109 -            else
  28.110 -            {
  28.111 -                /* No race here: yielding will get us the CPU again anyway. */
  28.112 -                __sti();
  28.113 -                HYPERVISOR_yield();
  28.114 -            }
  28.115 -        }
  28.116 -        schedule();
  28.117 -        check_pgt_cache();
  28.118 -    }
  28.119 -}
  28.120 -
  28.121 -extern void show_trace(unsigned long* esp);
  28.122 -
  28.123 -void show_regs(struct pt_regs * regs)
  28.124 -{
  28.125 -    printk("\n");
  28.126 -    printk("Pid: %d, comm: %20s\n", current->pid, current->comm);
  28.127 -    printk("EIP: %04x:[<%08lx>] CPU: %d",0xffff & regs->xcs,regs->eip, smp_processor_id());
  28.128 -    if (regs->xcs & 2)
  28.129 -        printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
  28.130 -    printk(" EFLAGS: %08lx    %s\n",regs->eflags, print_tainted());
  28.131 -    printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
  28.132 -           regs->eax,regs->ebx,regs->ecx,regs->edx);
  28.133 -    printk("ESI: %08lx EDI: %08lx EBP: %08lx",
  28.134 -           regs->esi, regs->edi, regs->ebp);
  28.135 -    printk(" DS: %04x ES: %04x\n",
  28.136 -           0xffff & regs->xds,0xffff & regs->xes);
  28.137 -
  28.138 -    show_trace(&regs->esp);
  28.139 -}
  28.140 -
  28.141 -
  28.142 -/*
  28.143 - * Create a kernel thread
  28.144 - */
  28.145 -int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
  28.146 -{
  28.147 -    long retval, d0;
  28.148 -
  28.149 -    __asm__ __volatile__(
  28.150 -        "movl %%esp,%%esi\n\t"
  28.151 -        "int $0x80\n\t"		/* Linux/i386 system call */
  28.152 -        "cmpl %%esp,%%esi\n\t"	/* child or parent? */
  28.153 -        "je 1f\n\t"		/* parent - jump */
  28.154 -        /* Load the argument into eax, and push it.  That way, it does
  28.155 -         * not matter whether the called function is compiled with
  28.156 -         * -mregparm or not.  */
  28.157 -        "movl %4,%%eax\n\t"
  28.158 -        "pushl %%eax\n\t"		
  28.159 -        "call *%5\n\t"		/* call fn */
  28.160 -        "movl %3,%0\n\t"	/* exit */
  28.161 -        "int $0x80\n"
  28.162 -        "1:\t"
  28.163 -        :"=&a" (retval), "=&S" (d0)
  28.164 -        :"0" (__NR_clone), "i" (__NR_exit),
  28.165 -        "r" (arg), "r" (fn),
  28.166 -        "b" (flags | CLONE_VM)
  28.167 -        : "memory");
  28.168 -
  28.169 -    return retval;
  28.170 -}
  28.171 -
  28.172 -/*
  28.173 - * Free current thread data structures etc..
  28.174 - */
  28.175 -void exit_thread(void)
  28.176 -{
  28.177 -    /* nothing to do ... */
  28.178 -}
  28.179 -
  28.180 -void flush_thread(void)
  28.181 -{
  28.182 -    struct task_struct *tsk = current;
  28.183 -
  28.184 -    memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8);
  28.185 -
  28.186 -    /*
  28.187 -     * Forget coprocessor state..
  28.188 -     */
  28.189 -    clear_fpu(tsk);
  28.190 -    tsk->used_math = 0;
  28.191 -}
  28.192 -
  28.193 -void release_thread(struct task_struct *dead_task)
  28.194 -{
  28.195 -    if (dead_task->mm) {
  28.196 -        // temporary debugging check
  28.197 -        if (dead_task->mm->context.size) {
  28.198 -            printk("WARNING: dead process %8s still has LDT? <%p/%08x>\n",
  28.199 -                   dead_task->comm, 
  28.200 -		   dead_task->mm->context.ldt,
  28.201 -		   dead_task->mm->context.size);
  28.202 -            BUG();
  28.203 -        }
  28.204 -    }
  28.205 -    //release_x86_irqs(dead_task);
  28.206 -}
  28.207 -
  28.208 -
  28.209 -/*
  28.210 - * Save a segment.
  28.211 - */
  28.212 -#define savesegment(seg,value) \
  28.213 -	asm volatile("movl %%" #seg ",%0":"=m" (*(int *)&(value)))
  28.214 -
  28.215 -int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
  28.216 -                unsigned long unused,
  28.217 -                struct task_struct * p, struct pt_regs * regs)
  28.218 -{
  28.219 -    struct pt_regs * childregs;
  28.220 -    unsigned long eflags;
  28.221 -
  28.222 -    childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p)) - 1;
  28.223 -    struct_cpy(childregs, regs);
  28.224 -    childregs->eax = 0;
  28.225 -    childregs->esp = esp;
  28.226 -
  28.227 -    p->thread.esp = (unsigned long) childregs;
  28.228 -    p->thread.esp0 = (unsigned long) (childregs+1);
  28.229 -
  28.230 -    p->thread.eip = (unsigned long) ret_from_fork;
  28.231 -
  28.232 -    savesegment(fs,p->thread.fs);
  28.233 -    savesegment(gs,p->thread.gs);
  28.234 -
  28.235 -    unlazy_fpu(current);
  28.236 -    struct_cpy(&p->thread.i387, &current->thread.i387);
  28.237 -
  28.238 -
  28.239 -    __asm__ __volatile__ ( "pushfl; popl %0" : "=r" (eflags) : );
  28.240 -    p->thread.io_pl = (eflags >> 12) & 3;
  28.241 -
  28.242 -    return 0;
  28.243 -}
  28.244 -
  28.245 -/*
  28.246 - * fill in the user structure for a core dump..
  28.247 - */
  28.248 -void dump_thread(struct pt_regs * regs, struct user * dump)
  28.249 -{
  28.250 -    int i;
  28.251 -
  28.252 -/* changed the size calculations - should hopefully work better. lbt */
  28.253 -    dump->magic = CMAGIC;
  28.254 -    dump->start_code = 0;
  28.255 -    dump->start_stack = regs->esp & ~(PAGE_SIZE - 1);
  28.256 -    dump->u_tsize = ((unsigned long) current->mm->end_code) >> PAGE_SHIFT;
  28.257 -    dump->u_dsize = ((unsigned long) (current->mm->brk + (PAGE_SIZE-1))) >> PAGE_SHIFT;
  28.258 -    dump->u_dsize -= dump->u_tsize;
  28.259 -    dump->u_ssize = 0;
  28.260 -    for (i = 0; i < 8; i++)
  28.261 -        dump->u_debugreg[i] = current->thread.debugreg[i];  
  28.262 -
  28.263 -    if (dump->start_stack < TASK_SIZE)
  28.264 -        dump->u_ssize = ((unsigned long) (TASK_SIZE - dump->start_stack)) >> PAGE_SHIFT;
  28.265 -
  28.266 -    dump->regs.ebx = regs->ebx;
  28.267 -    dump->regs.ecx = regs->ecx;
  28.268 -    dump->regs.edx = regs->edx;
  28.269 -    dump->regs.esi = regs->esi;
  28.270 -    dump->regs.edi = regs->edi;
  28.271 -    dump->regs.ebp = regs->ebp;
  28.272 -    dump->regs.eax = regs->eax;
  28.273 -    dump->regs.ds = regs->xds;
  28.274 -    dump->regs.es = regs->xes;
  28.275 -    savesegment(fs,dump->regs.fs);
  28.276 -    savesegment(gs,dump->regs.gs);
  28.277 -    dump->regs.orig_eax = regs->orig_eax;
  28.278 -    dump->regs.eip = regs->eip;
  28.279 -    dump->regs.cs = regs->xcs;
  28.280 -    dump->regs.eflags = regs->eflags;
  28.281 -    dump->regs.esp = regs->esp;
  28.282 -    dump->regs.ss = regs->xss;
  28.283 -
  28.284 -    dump->u_fpvalid = dump_fpu (regs, &dump->i387);
  28.285 -}
  28.286 -
  28.287 -/*
  28.288 - *	switch_to(x,yn) should switch tasks from x to y.
  28.289 - *
  28.290 - * We fsave/fwait so that an exception goes off at the right time
  28.291 - * (as a call from the fsave or fwait in effect) rather than to
  28.292 - * the wrong process. Lazy FP saving no longer makes any sense
  28.293 - * with modern CPU's, and this simplifies a lot of things (SMP
  28.294 - * and UP become the same).
  28.295 - *
  28.296 - * NOTE! We used to use the x86 hardware context switching. The
  28.297 - * reason for not using it any more becomes apparent when you
  28.298 - * try to recover gracefully from saved state that is no longer
  28.299 - * valid (stale segment register values in particular). With the
  28.300 - * hardware task-switch, there is no way to fix up bad state in
  28.301 - * a reasonable manner.
  28.302 - *
  28.303 - * The fact that Intel documents the hardware task-switching to
  28.304 - * be slow is a fairly red herring - this code is not noticeably
  28.305 - * faster. However, there _is_ some room for improvement here,
  28.306 - * so the performance issues may eventually be a valid point.
  28.307 - * More important, however, is the fact that this allows us much
  28.308 - * more flexibility.
  28.309 - */
  28.310 -void fastcall __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
  28.311 -{
  28.312 -    struct thread_struct *next = &next_p->thread;
  28.313 -
  28.314 -    __cli();
  28.315 -
  28.316 -    /*
  28.317 -     * We clobber FS and GS here so that we avoid a GPF when restoring previous
  28.318 -     * task's FS/GS values in Xen when the LDT is switched. If we don't do this
  28.319 -     * then we can end up erroneously re-flushing the page-update queue when
  28.320 -     * we 'execute_multicall_list'.
  28.321 -     */
  28.322 -    __asm__ __volatile__ ( 
  28.323 -        "xorl %%eax,%%eax; movl %%eax,%%fs; movl %%eax,%%gs" : : : "eax" );
  28.324 -
  28.325 -    MULTICALL_flush_page_update_queue();
  28.326 -
  28.327 -    /*
  28.328 -     * This is basically 'unlazy_fpu', except that we queue a multicall to 
  28.329 -     * indicate FPU task switch, rather than synchronously trapping to Xen.
  28.330 -     */
  28.331 -    if ( prev_p->flags & PF_USEDFPU )
  28.332 -    {
  28.333 -	if ( cpu_has_fxsr )
  28.334 -            asm volatile( "fxsave %0 ; fnclex"
  28.335 -                          : "=m" (prev_p->thread.i387.fxsave) );
  28.336 -	else
  28.337 -            asm volatile( "fnsave %0 ; fwait"
  28.338 -                          : "=m" (prev_p->thread.i387.fsave) );
  28.339 -	prev_p->flags &= ~PF_USEDFPU;
  28.340 -        queue_multicall0(__HYPERVISOR_fpu_taskswitch);
  28.341 -    }
  28.342 -
  28.343 -    queue_multicall2(__HYPERVISOR_stack_switch, __KERNEL_DS, next->esp0);
  28.344 -    if ( xen_start_info.flags & SIF_PRIVILEGED ) 
  28.345 -    {
  28.346 -        dom0_op_t op;
  28.347 -        op.cmd           = DOM0_IOPL;
  28.348 -        op.u.iopl.domain = DOMID_SELF;
  28.349 -        op.u.iopl.iopl   = next->io_pl;
  28.350 -        op.interface_version = DOM0_INTERFACE_VERSION;
  28.351 -        queue_multicall1(__HYPERVISOR_dom0_op, (unsigned long)&op);
  28.352 -    }
  28.353 -
  28.354 -    /* EXECUTE ALL TASK SWITCH XEN SYSCALLS AT THIS POINT. */
  28.355 -    execute_multicall_list();
  28.356 -    __sti();
  28.357 -
  28.358 -    /*
  28.359 -     * Restore %fs and %gs.
  28.360 -     */
  28.361 -    loadsegment(fs, next->fs);
  28.362 -    loadsegment(gs, next->gs);
  28.363 -
  28.364 -    /*
  28.365 -     * Now maybe reload the debug registers
  28.366 -     */
  28.367 -    if ( next->debugreg[7] != 0 )
  28.368 -    {
  28.369 -        HYPERVISOR_set_debugreg(0, next->debugreg[0]);
  28.370 -        HYPERVISOR_set_debugreg(1, next->debugreg[1]);
  28.371 -        HYPERVISOR_set_debugreg(2, next->debugreg[2]);
  28.372 -        HYPERVISOR_set_debugreg(3, next->debugreg[3]);
  28.373 -        /* no 4 and 5 */
  28.374 -        HYPERVISOR_set_debugreg(6, next->debugreg[6]);
  28.375 -        HYPERVISOR_set_debugreg(7, next->debugreg[7]);
  28.376 -    }
  28.377 -}
  28.378 -
  28.379 -asmlinkage int sys_fork(struct pt_regs regs)
  28.380 -{
  28.381 -    return do_fork(SIGCHLD, regs.esp, &regs, 0);
  28.382 -}
  28.383 -
  28.384 -asmlinkage int sys_clone(struct pt_regs regs)
  28.385 -{
  28.386 -    unsigned long clone_flags;
  28.387 -    unsigned long newsp;
  28.388 -
  28.389 -    clone_flags = regs.ebx;
  28.390 -    newsp = regs.ecx;
  28.391 -    if (!newsp)
  28.392 -        newsp = regs.esp;
  28.393 -    return do_fork(clone_flags, newsp, &regs, 0);
  28.394 -}
  28.395 -
  28.396 -/*
  28.397 - * This is trivial, and on the face of it looks like it
  28.398 - * could equally well be done in user mode.
  28.399 - *
  28.400 - * Not so, for quite unobvious reasons - register pressure.
  28.401 - * In user mode vfork() cannot have a stack frame, and if
  28.402 - * done by calling the "clone()" system call directly, you
  28.403 - * do not have enough call-clobbered registers to hold all
  28.404 - * the information you need.
  28.405 - */
  28.406 -asmlinkage int sys_vfork(struct pt_regs regs)
  28.407 -{
  28.408 -    return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs.esp, &regs, 0);
  28.409 -}
  28.410 -
  28.411 -/*
  28.412 - * sys_execve() executes a new program.
  28.413 - */
  28.414 -asmlinkage int sys_execve(struct pt_regs regs)
  28.415 -{
  28.416 -    int error;
  28.417 -    char * filename;
  28.418 -
  28.419 -    filename = getname((char *) regs.ebx);
  28.420 -    error = PTR_ERR(filename);
  28.421 -    if (IS_ERR(filename))
  28.422 -        goto out;
  28.423 -    error = do_execve(filename, (char **) regs.ecx, (char **) regs.edx, &regs);
  28.424 -    if (error == 0)
  28.425 -        current->ptrace &= ~PT_DTRACE;
  28.426 -    putname(filename);
  28.427 - out:
  28.428 -    return error;
  28.429 -}
  28.430 -
  28.431 -/*
  28.432 - * These bracket the sleeping functions..
  28.433 - */
  28.434 -extern void scheduling_functions_start_here(void);
  28.435 -extern void scheduling_functions_end_here(void);
  28.436 -#define first_sched	((unsigned long) scheduling_functions_start_here)
  28.437 -#define last_sched	((unsigned long) scheduling_functions_end_here)
  28.438 -
  28.439 -unsigned long get_wchan(struct task_struct *p)
  28.440 -{
  28.441 -    unsigned long ebp, esp, eip;
  28.442 -    unsigned long stack_page;
  28.443 -    int count = 0;
  28.444 -    if (!p || p == current || p->state == TASK_RUNNING)
  28.445 -        return 0;
  28.446 -    stack_page = (unsigned long)p;
  28.447 -    esp = p->thread.esp;
  28.448 -    if (!stack_page || esp < stack_page || esp > 8188+stack_page)
  28.449 -        return 0;
  28.450 -    /* include/asm-i386/system.h:switch_to() pushes ebp last. */
  28.451 -    ebp = *(unsigned long *) esp;
  28.452 -    do {
  28.453 -        if (ebp < stack_page || ebp > 8184+stack_page)
  28.454 -            return 0;
  28.455 -        eip = *(unsigned long *) (ebp+4);
  28.456 -        if (eip < first_sched || eip >= last_sched)
  28.457 -            return eip;
  28.458 -        ebp = *(unsigned long *) ebp;
  28.459 -    } while (count++ < 16);
  28.460 -    return 0;
  28.461 -}
  28.462 -#undef last_sched
  28.463 -#undef first_sched
    29.1 --- a/linux-2.4.28-xen-sparse/arch/xen/kernel/setup.c	Wed Jan 19 13:20:15 2005 +0000
    29.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.3 @@ -1,1204 +0,0 @@
    29.4 -/*
    29.5 - *  linux/arch/i386/kernel/setup.c
    29.6 - *
    29.7 - *  Copyright (C) 1995  Linus Torvalds
    29.8 - */
    29.9 -
   29.10 -/*
   29.11 - * This file handles the architecture-dependent parts of initialization
   29.12 - */
   29.13 -
   29.14 -#define __KERNEL_SYSCALLS__
   29.15 -static int errno;
   29.16 -#include <linux/errno.h>
   29.17 -#include <linux/sched.h>
   29.18 -#include <linux/kernel.h>
   29.19 -#include <linux/mm.h>
   29.20 -#include <linux/stddef.h>
   29.21 -#include <linux/unistd.h>
   29.22 -#include <linux/ptrace.h>
   29.23 -#include <linux/slab.h>
   29.24 -#include <linux/user.h>
   29.25 -#include <linux/a.out.h>
   29.26 -#include <linux/tty.h>
   29.27 -#include <linux/ioport.h>
   29.28 -#include <linux/delay.h>
   29.29 -#include <linux/config.h>
   29.30 -#include <linux/init.h>
   29.31 -#include <linux/apm_bios.h>
   29.32 -#ifdef CONFIG_BLK_DEV_RAM
   29.33 -#include <linux/blk.h>
   29.34 -#endif
   29.35 -#include <linux/highmem.h>
   29.36 -#include <linux/bootmem.h>
   29.37 -#include <linux/seq_file.h>
   29.38 -#include <linux/reboot.h>
   29.39 -#include <asm/processor.h>
   29.40 -#include <linux/console.h>
   29.41 -#include <linux/module.h>
   29.42 -#include <asm/mtrr.h>
   29.43 -#include <asm/uaccess.h>
   29.44 -#include <asm/system.h>
   29.45 -#include <asm/io.h>
   29.46 -#include <asm/smp.h>
   29.47 -#include <asm/msr.h>
   29.48 -#include <asm/desc.h>
   29.49 -#include <asm/dma.h>
   29.50 -#include <asm/mpspec.h>
   29.51 -#include <asm/mmu_context.h>
   29.52 -#include <asm/ctrl_if.h>
   29.53 -#include <asm/hypervisor.h>
   29.54 -#include <asm-xen/xen-public/dom0_ops.h>
   29.55 -#include <linux/netdevice.h>
   29.56 -#include <linux/rtnetlink.h>
   29.57 -#include <linux/tqueue.h>
   29.58 -#include <net/pkt_sched.h> /* dev_(de)activate */
   29.59 -
   29.60 -/*
   29.61 - * Point at the empty zero page to start with. We map the real shared_info
   29.62 - * page as soon as fixmap is up and running.
   29.63 - */
   29.64 -shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
   29.65 -
   29.66 -unsigned long *phys_to_machine_mapping, *pfn_to_mfn_frame_list;
   29.67 -
   29.68 -DEFINE_PER_CPU(multicall_entry_t, multicall_list[8]);
   29.69 -DEFINE_PER_CPU(int, nr_multicall_ents);
   29.70 -
   29.71 -/*
   29.72 - * Machine setup..
   29.73 - */
   29.74 -
   29.75 -char ignore_irq13;		/* set if exception 16 works */
   29.76 -struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
   29.77 -
   29.78 -unsigned long mmu_cr4_features;
   29.79 -
   29.80 -unsigned char * vgacon_mmap;
   29.81 -
   29.82 -/*
   29.83 - * Bus types ..
   29.84 - */
   29.85 -#ifdef CONFIG_EISA
   29.86 -int EISA_bus;
   29.87 -#endif
   29.88 -int MCA_bus;
   29.89 -
   29.90 -/* for MCA, but anyone else can use it if they want */
   29.91 -unsigned int machine_id;
   29.92 -unsigned int machine_submodel_id;
   29.93 -unsigned int BIOS_revision;
   29.94 -unsigned int mca_pentium_flag;
   29.95 -
   29.96 -/* For PCI or other memory-mapped resources */
   29.97 -unsigned long pci_mem_start = 0x10000000;
   29.98 -
   29.99 -/*
  29.100 - * Setup options
  29.101 - */
  29.102 -struct drive_info_struct { char dummy[32]; } drive_info;
  29.103 -struct screen_info screen_info;
  29.104 -struct apm_info apm_info;
  29.105 -struct sys_desc_table_struct {
  29.106 -    unsigned short length;
  29.107 -    unsigned char table[0];
  29.108 -};
  29.109 -
  29.110 -unsigned char aux_device_present;
  29.111 -
  29.112 -extern int root_mountflags;
  29.113 -extern char _text, _etext, _edata, _end;
  29.114 -
  29.115 -extern int blk_nohighio;
  29.116 -
  29.117 -int enable_acpi_smp_table;
  29.118 -
  29.119 -/* Raw start-of-day parameters from the hypervisor. */
  29.120 -union xen_start_info_union xen_start_info_union;
  29.121 -
  29.122 -#define COMMAND_LINE_SIZE 256
  29.123 -static char command_line[COMMAND_LINE_SIZE];
  29.124 -char saved_command_line[COMMAND_LINE_SIZE];
  29.125 -
  29.126 -/* parse_mem_cmdline()
  29.127 - * returns the value of the mem= boot param converted to pages or 0
  29.128 - */ 
  29.129 -static int __init parse_mem_cmdline (char ** cmdline_p)
  29.130 -{
  29.131 -    char c = ' ', *to = command_line, *from = saved_command_line;
  29.132 -    int len = 0;
  29.133 -    unsigned long long bytes;
  29.134 -    int mem_param = 0;
  29.135 -
  29.136 -    /* Save unparsed command line copy for /proc/cmdline */
  29.137 -    memcpy(saved_command_line, xen_start_info.cmd_line, COMMAND_LINE_SIZE);
  29.138 -    saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
  29.139 -
  29.140 -    for (;;) {
  29.141 -        /*
  29.142 -         * "mem=nopentium" disables the 4MB page tables.
  29.143 -         * "mem=XXX[kKmM]" defines a memory region from HIGH_MEM
  29.144 -         * to <mem>, overriding the bios size.
  29.145 -         * "mem=XXX[KkmM]@XXX[KkmM]" defines a memory region from
  29.146 -         * <start> to <start>+<mem>, overriding the bios size.
  29.147 -         */
  29.148 -        if (c == ' ' && !memcmp(from, "mem=", 4)) {
  29.149 -            if (to != command_line)
  29.150 -                to--;
  29.151 -            if (!memcmp(from+4, "nopentium", 9)) {
  29.152 -                from += 9+4;
  29.153 -            } else if (!memcmp(from+4, "exactmap", 8)) {
  29.154 -                from += 8+4;
  29.155 -            } else {
  29.156 -                bytes = memparse(from+4, &from);
  29.157 -                mem_param = bytes>>PAGE_SHIFT;
  29.158 -		if (*from == '@')
  29.159 -                    (void)memparse(from+1, &from);
  29.160 -            }
  29.161 -        }
  29.162 -
  29.163 -        c = *(from++);
  29.164 -        if (!c)
  29.165 -            break;
  29.166 -        if (COMMAND_LINE_SIZE <= ++len)
  29.167 -            break;
  29.168 -        *(to++) = c;
  29.169 -    }
  29.170 -    *to = '\0';
  29.171 -    *cmdline_p = command_line;
  29.172 -
  29.173 -    return mem_param;
  29.174 -}
  29.175 -
  29.176 -/*
  29.177 - * Every exception-fixup table is sorted (i.e., kernel main table, and every
  29.178 - * module table. Some elements may be out of order if they reference text.init,
  29.179 - * for example. 
  29.180 - */
  29.181 -static void sort_exception_table(struct exception_table_entry *start,
  29.182 -                                 struct exception_table_entry *end)
  29.183 -{
  29.184 -    struct exception_table_entry *p, *q, tmp;
  29.185 -
  29.186 -    for ( p = start; p < end; p++ )
  29.187 -    {
  29.188 -        for ( q = p-1; q > start; q-- )
  29.189 -            if ( p->insn > q->insn )
  29.190 -                break;
  29.191 -        if ( ++q != p )
  29.192 -        {
  29.193 -            tmp = *p;
  29.194 -            memmove(q+1, q, (p-q)*sizeof(*p));
  29.195 -            *q = tmp;
  29.196 -        }
  29.197 -    }
  29.198 -}
  29.199 -
  29.200 -int xen_module_init(struct module *mod)
  29.201 -{
  29.202 -    sort_exception_table(mod->ex_table_start, mod->ex_table_end);
  29.203 -    return 0;
  29.204 -}
  29.205 -
  29.206 -void __init setup_arch(char **cmdline_p)
  29.207 -{
  29.208 -    int i,j;
  29.209 -    unsigned long bootmap_size, start_pfn, lmax_low_pfn;
  29.210 -    int mem_param;  /* user specified memory size in pages */
  29.211 -    int boot_pfn;   /* low pages available for bootmem */
  29.212 -
  29.213 -    extern void hypervisor_callback(void);
  29.214 -    extern void failsafe_callback(void);
  29.215 -
  29.216 -    extern unsigned long cpu0_pte_quicklist[];
  29.217 -    extern unsigned long cpu0_pgd_quicklist[];
  29.218 -
  29.219 -    extern const struct exception_table_entry __start___ex_table[];
  29.220 -    extern const struct exception_table_entry __stop___ex_table[];
  29.221 -
  29.222 -    extern char _stext;
  29.223 -
  29.224 -    /* Force a quick death if the kernel panics. */
  29.225 -    extern int panic_timeout;
  29.226 -    if ( panic_timeout == 0 )
  29.227 -        panic_timeout = 1;
  29.228 -
  29.229 -    /* Ensure that the kernel exception-fixup table is sorted. */
  29.230 -    sort_exception_table(__start___ex_table, __stop___ex_table);
  29.231 -
  29.232 -#ifndef CONFIG_HIGHIO
  29.233 -    blk_nohighio = 1;
  29.234 -#endif
  29.235 -
  29.236 -    HYPERVISOR_vm_assist(VMASST_CMD_enable,
  29.237 -                         VMASST_TYPE_4gb_segments);
  29.238 -        
  29.239 -    HYPERVISOR_set_callbacks(
  29.240 -        __KERNEL_CS, (unsigned long)hypervisor_callback,
  29.241 -        __KERNEL_CS, (unsigned long)failsafe_callback);
  29.242 -
  29.243 -    boot_cpu_data.pgd_quick = cpu0_pgd_quicklist;
  29.244 -    boot_cpu_data.pte_quick = cpu0_pte_quicklist;
  29.245 -
  29.246 -    ROOT_DEV = MKDEV(RAMDISK_MAJOR,0);
  29.247 -    memset(&drive_info, 0, sizeof(drive_info));
  29.248 -    memset(&screen_info, 0, sizeof(screen_info));
  29.249 -    
  29.250 -    /* This is drawn from a dump from vgacon:startup in standard Linux. */
  29.251 -    screen_info.orig_video_mode = 3; 
  29.252 -    screen_info.orig_video_isVGA = 1;
  29.253 -    screen_info.orig_video_lines = 25;
  29.254 -    screen_info.orig_video_cols = 80;
  29.255 -    screen_info.orig_video_ega_bx = 3;
  29.256 -    screen_info.orig_video_points = 16;
  29.257 -
  29.258 -    memset(&apm_info.bios, 0, sizeof(apm_info.bios));
  29.259 -    aux_device_present = 0; 
  29.260 -#ifdef CONFIG_BLK_DEV_RAM
  29.261 -    rd_image_start = 0;
  29.262 -    rd_prompt = 0;
  29.263 -    rd_doload = 0;
  29.264 -#endif
  29.265 -
  29.266 -    root_mountflags &= ~MS_RDONLY;
  29.267 -    init_mm.start_code = (unsigned long) &_text;
  29.268 -    init_mm.end_code = (unsigned long) &_etext;
  29.269 -    init_mm.end_data = (unsigned long) &_edata;
  29.270 -    init_mm.brk = (unsigned long) &_end;
  29.271 -
  29.272 -    /* The mem= kernel command line param overrides the detected amount
  29.273 -     * of memory.   For xenolinux, if this override is larger than detected
  29.274 -     * memory, then boot using only detected memory and make provisions to
  29.275 -     * use all of the override value.   The hypervisor can give this
  29.276 -     * domain more memory later on and it will be added to the free
  29.277 -     * lists at that time.   See claim_new_pages() in
  29.278 -     * arch/xen/drivers/balloon/balloon.c
  29.279 -     */
  29.280 -    mem_param = parse_mem_cmdline(cmdline_p);
  29.281 -    if (mem_param < xen_start_info.nr_pages)
  29.282 -        mem_param = xen_start_info.nr_pages;
  29.283 -
  29.284 -#define PFN_UP(x)	(((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
  29.285 -#define PFN_DOWN(x)	((x) >> PAGE_SHIFT)
  29.286 -#define PFN_PHYS(x)	((x) << PAGE_SHIFT)
  29.287 -
  29.288 -/*
  29.289 - * 128MB for vmalloc(), iomap(), kmap(), and fixaddr mappings.
  29.290 - */
  29.291 -#define VMALLOC_RESERVE	(unsigned long)(128 << 20)
  29.292 -#define MAXMEM		(unsigned long)(HYPERVISOR_VIRT_START-PAGE_OFFSET-VMALLOC_RESERVE)
  29.293 -#define MAXMEM_PFN	PFN_DOWN(MAXMEM)
  29.294 -#define MAX_NONPAE_PFN	(1 << 20)
  29.295 -
  29.296 -    /*
  29.297 -     * Determine low and high memory ranges:
  29.298 -     */
  29.299 -    lmax_low_pfn = max_pfn = mem_param;
  29.300 -    if (lmax_low_pfn > MAXMEM_PFN) {
  29.301 -        lmax_low_pfn = MAXMEM_PFN;
  29.302 -#ifndef CONFIG_HIGHMEM
  29.303 -        /* Maximum memory usable is what is directly addressable */
  29.304 -        printk(KERN_WARNING "Warning only %ldMB will be used.\n",
  29.305 -               MAXMEM>>20);
  29.306 -        if (max_pfn > MAX_NONPAE_PFN)
  29.307 -            printk(KERN_WARNING "Use a PAE enabled kernel.\n");
  29.308 -        else
  29.309 -            printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n");
  29.310 -        max_pfn = lmax_low_pfn;
  29.311 -#else /* !CONFIG_HIGHMEM */
  29.312 -#ifndef CONFIG_X86_PAE
  29.313 -        if (max_pfn > MAX_NONPAE_PFN) {
  29.314 -            max_pfn = MAX_NONPAE_PFN;
  29.315 -            printk(KERN_WARNING "Warning only 4GB will be used.\n");
  29.316 -            printk(KERN_WARNING "Use a PAE enabled kernel.\n");
  29.317 -        }
  29.318 -#endif /* !CONFIG_X86_PAE */
  29.319 -#endif /* !CONFIG_HIGHMEM */
  29.320 -    }
  29.321 -
  29.322 -#ifdef CONFIG_HIGHMEM
  29.323 -    highstart_pfn = highend_pfn = max_pfn;
  29.324 -    if (max_pfn > MAXMEM_PFN) {
  29.325 -        highstart_pfn = MAXMEM_PFN;
  29.326 -        printk(KERN_NOTICE "%ldMB HIGHMEM available.\n",
  29.327 -               pages_to_mb(highend_pfn - highstart_pfn));
  29.328 -    }
  29.329 -#endif
  29.330 -
  29.331 -    phys_to_machine_mapping = (unsigned long *)xen_start_info.mfn_list;
  29.332 -    cur_pgd = init_mm.pgd = (pgd_t *)xen_start_info.pt_base;
  29.333 -
  29.334 -    start_pfn = (__pa(xen_start_info.pt_base) >> PAGE_SHIFT) + 
  29.335 -        xen_start_info.nr_pt_frames;
  29.336 -
  29.337 -    /*
  29.338 -     * Initialize the boot-time allocator, and free up all RAM. Then reserve 
  29.339 -     * space for OS image, initrd, phys->machine table, bootstrap page table,
  29.340 -     * and the bootmem bitmap. 
  29.341 -     * NB. There is definitely enough room for the bootmem bitmap in the
  29.342 -     * bootstrap page table. We are guaranteed to get >=512kB unused 'padding'
  29.343 -     * for our own use after all bootstrap elements 
  29.344 -     * (see asm-xen/xen-public/xen.h).
  29.345 -     */
  29.346 -    boot_pfn = min((int)xen_start_info.nr_pages,lmax_low_pfn);
  29.347 -    bootmap_size = init_bootmem(start_pfn,boot_pfn);
  29.348 -    free_bootmem(0, PFN_PHYS(boot_pfn));
  29.349 -    reserve_bootmem(__pa(&_stext), 
  29.350 -                    PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE-1 - 
  29.351 -                    __pa(&_stext));
  29.352 -
  29.353 -    /* init_bootmem() set the global max_low_pfn to boot_pfn.  Now max_low_pfn 
  29.354 -     * can be set to the override value.
  29.355 -     */
  29.356 -    max_low_pfn = lmax_low_pfn;
  29.357 -
  29.358 -#ifdef CONFIG_BLK_DEV_INITRD
  29.359 -    if ( xen_start_info.mod_start != 0 )
  29.360 -    {
  29.361 -        if ( (__pa(xen_start_info.mod_start) + xen_start_info.mod_len) <= 
  29.362 -             (max_low_pfn << PAGE_SHIFT) )
  29.363 -        {
  29.364 -            initrd_start = xen_start_info.mod_start;
  29.365 -            initrd_end   = initrd_start + xen_start_info.mod_len;
  29.366 -            initrd_below_start_ok = 1;
  29.367 -        }
  29.368 -        else
  29.369 -        {
  29.370 -            printk(KERN_ERR "initrd extends beyond end of memory "
  29.371 -                   "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
  29.372 -                   __pa(xen_start_info.mod_start) + xen_start_info.mod_len,
  29.373 -                   max_low_pfn << PAGE_SHIFT);
  29.374 -            initrd_start = 0;
  29.375 -        }
  29.376 -    }
  29.377 -#endif
  29.378 -
  29.379 -    paging_init();
  29.380 -
  29.381 -    /* Make sure we have a large enough P->M table. */
  29.382 -    if ( max_pfn > xen_start_info.nr_pages )
  29.383 -    {
  29.384 -        phys_to_machine_mapping = alloc_bootmem_low_pages(
  29.385 -            max_pfn * sizeof(unsigned long));
  29.386 -        memset(phys_to_machine_mapping, ~0, max_pfn * sizeof(unsigned long));
  29.387 -        memcpy(phys_to_machine_mapping,
  29.388 -               (unsigned long *)xen_start_info.mfn_list,
  29.389 -               xen_start_info.nr_pages * sizeof(unsigned long));
  29.390 -        free_bootmem(__pa(xen_start_info.mfn_list), 
  29.391 -                     PFN_PHYS(PFN_UP(xen_start_info.nr_pages *
  29.392 -                                     sizeof(unsigned long))));
  29.393 -    }
  29.394 -
  29.395 -    pfn_to_mfn_frame_list = alloc_bootmem_low_pages(PAGE_SIZE);
  29.396 -    for ( i=0, j=0; i < max_pfn; i+=(PAGE_SIZE/sizeof(unsigned long)), j++ )
  29.397 -    {	
  29.398 -        pfn_to_mfn_frame_list[j] = 
  29.399 -            virt_to_machine(&phys_to_machine_mapping[i]) >> PAGE_SHIFT;
  29.400 -    }
  29.401 -    HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list =
  29.402 -	virt_to_machine(pfn_to_mfn_frame_list) >> PAGE_SHIFT;
  29.403 -
  29.404 -    /* If we are a privileged guest OS then we should request IO privileges. */
  29.405 -    if ( xen_start_info.flags & SIF_PRIVILEGED ) 
  29.406 -    {
  29.407 -        dom0_op_t op;
  29.408 -        op.cmd           = DOM0_IOPL;
  29.409 -        op.u.iopl.domain = DOMID_SELF;
  29.410 -        op.u.iopl.iopl   = 1;
  29.411 -        if( HYPERVISOR_dom0_op(&op) != 0 )
  29.412 -            panic("Unable to obtain IOPL, despite being SIF_PRIVILEGED");
  29.413 -        current->thread.io_pl = 1;
  29.414 -    }
  29.415 -
  29.416 -    if (xen_start_info.flags & SIF_INITDOMAIN )
  29.417 -    {
  29.418 -        if( !(xen_start_info.flags & SIF_PRIVILEGED) )
  29.419 -            panic("Xen granted us console access but not privileged status");
  29.420 -
  29.421 -#if defined(CONFIG_VT)
  29.422 -#if defined(CONFIG_VGA_CONSOLE)
  29.423 -        conswitchp = &vga_con;
  29.424 -#elif defined(CONFIG_DUMMY_CONSOLE)
  29.425 -        conswitchp = &dummy_con;
  29.426 -#endif
  29.427 -#endif
  29.428 -    }
  29.429 -}
  29.430 -
  29.431 -static int cachesize_override __initdata = -1;
  29.432 -static int __init cachesize_setup(char *str)
  29.433 -{
  29.434 -    get_option (&str, &cachesize_override);
  29.435 -    return 1;
  29.436 -}
  29.437 -__setup("cachesize=", cachesize_setup);
  29.438 -
  29.439 -static int __init highio_setup(char *str)
  29.440 -{
  29.441 -    printk("i386: disabling HIGHMEM block I/O\n");
  29.442 -    blk_nohighio = 1;
  29.443 -    return 1;
  29.444 -}
  29.445 -__setup("nohighio", highio_setup);
  29.446 -
  29.447 -static int __init get_model_name(struct cpuinfo_x86 *c)
  29.448 -{
  29.449 -    unsigned int *v;
  29.450 -    char *p, *q;
  29.451 -
  29.452 -    if (cpuid_eax(0x80000000) < 0x80000004)
  29.453 -        return 0;
  29.454 -
  29.455 -    v = (unsigned int *) c->x86_model_id;
  29.456 -    cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]);
  29.457 -    cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]);
  29.458 -    cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]);
  29.459 -    c->x86_model_id[48] = 0;
  29.460 -
  29.461 -    /* Intel chips right-justify this string for some dumb reason;
  29.462 -       undo that brain damage */
  29.463 -    p = q = &c->x86_model_id[0];
  29.464 -    while ( *p == ' ' )
  29.465 -        p++;
  29.466 -    if ( p != q ) {
  29.467 -        while ( *p )
  29.468 -            *q++ = *p++;
  29.469 -        while ( q <= &c->x86_model_id[48] )
  29.470 -            *q++ = '\0';	/* Zero-pad the rest */
  29.471 -    }
  29.472 -
  29.473 -    return 1;
  29.474 -}
  29.475 -
  29.476 -
  29.477 -static void __init display_cacheinfo(struct cpuinfo_x86 *c)
  29.478 -{
  29.479 -    unsigned int n, dummy, ecx, edx, l2size;
  29.480 -
  29.481 -    n = cpuid_eax(0x80000000);
  29.482 -
  29.483 -    if (n >= 0x80000005) {
  29.484 -        cpuid(0x80000005, &dummy, &dummy, &ecx, &edx);
  29.485 -        printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d bytes/line)\n",
  29.486 -               edx>>24, edx&0xFF, ecx>>24, ecx&0xFF);
  29.487 -        c->x86_cache_size=(ecx>>24)+(edx>>24);	
  29.488 -    }
  29.489 -
  29.490 -    if (n < 0x80000006)	/* Some chips just has a large L1. */
  29.491 -        return;
  29.492 -
  29.493 -    ecx = cpuid_ecx(0x80000006);
  29.494 -    l2size = ecx >> 16;
  29.495 -
  29.496 -    /* AMD errata T13 (order #21922) */
  29.497 -    if ((c->x86_vendor == X86_VENDOR_AMD) && (c->x86 == 6)) {
  29.498 -        if (c->x86_model == 3 && c->x86_mask == 0)	/* Duron Rev A0 */
  29.499 -            l2size = 64;
  29.500 -        if (c->x86_model == 4 &&
  29.501 -            (c->x86_mask==0 || c->x86_mask==1))	/* Tbird rev A1/A2 */
  29.502 -            l2size = 256;
  29.503 -    }
  29.504 -
  29.505 -    /* Intel PIII Tualatin. This comes in two flavours.
  29.506 -     * One has 256kb of cache, the other 512. We have no way
  29.507 -     * to determine which, so we use a boottime override
  29.508 -     * for the 512kb model, and assume 256 otherwise.
  29.509 -     */
  29.510 -    if ((c->x86_vendor == X86_VENDOR_INTEL) && (c->x86 == 6) &&
  29.511 -        (c->x86_model == 11) && (l2size == 0))
  29.512 -        l2size = 256;
  29.513 -
  29.514 -    if (c->x86_vendor == X86_VENDOR_CENTAUR) {
  29.515 -	/* VIA C3 CPUs (670-68F) need further shifting. */
  29.516 -	if ((c->x86 == 6) &&
  29.517 -	    ((c->x86_model == 7) || (c->x86_model == 8))) {
  29.518 -		l2size >>= 8;
  29.519 -	}
  29.520 -
  29.521 -	/* VIA also screwed up Nehemiah stepping 1, and made
  29.522 -	   it return '65KB' instead of '64KB'
  29.523 -	   - Note, it seems this may only be in engineering samples. */
  29.524 -	if ((c->x86==6) && (c->x86_model==9) &&
  29.525 -	    (c->x86_mask==1) && (l2size==65))
  29.526 -		l2size -= 1;
  29.527 -    }
  29.528 -
  29.529 -    /* Allow user to override all this if necessary. */
  29.530 -    if (cachesize_override != -1)
  29.531 -        l2size = cachesize_override;
  29.532 -
  29.533 -    if ( l2size == 0 )
  29.534 -        return;		/* Again, no L2 cache is possible */
  29.535 -
  29.536 -    c->x86_cache_size = l2size;
  29.537 -
  29.538 -    printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n",
  29.539 -           l2size, ecx & 0xFF);
  29.540 -}
  29.541 -
  29.542 -static void __init init_c3(struct cpuinfo_x86 *c)
  29.543 -{
  29.544 -    /* Test for Centaur Extended Feature Flags presence */
  29.545 -    if (cpuid_eax(0xC0000000) >= 0xC0000001) {
  29.546 -        /* store Centaur Extended Feature Flags as
  29.547 -         * word 5 of the CPU capability bit array
  29.548 -         */
  29.549 -        c->x86_capability[5] = cpuid_edx(0xC0000001);
  29.550 -    }
  29.551 -   
  29.552 -    switch (c->x86_model) {
  29.553 -    case 9:	/* Nehemiah */
  29.554 -    default:
  29.555 -        get_model_name(c);
  29.556 -        display_cacheinfo(c);
  29.557 -        break;
  29.558 -    }
  29.559 -}
  29.560 -
  29.561 -static void __init init_centaur(struct cpuinfo_x86 *c)
  29.562 -{
  29.563 -    /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
  29.564 -       3DNow is IDd by bit 31 in extended CPUID (1*3231) anyway */
  29.565 -    clear_bit(0*32+31, &c->x86_capability);
  29.566 -  
  29.567 -    switch (c->x86) {
  29.568 -    case 6:
  29.569 -        init_c3(c);
  29.570 -        break;
  29.571 -    default:
  29.572 -        panic("Unsupported Centaur CPU (%i)\n", c->x86);
  29.573 -    }
  29.574 -}
  29.575 -
  29.576 -static int __init init_amd(struct cpuinfo_x86 *c)
  29.577 -{
  29.578 -    int r;
  29.579 -
  29.580 -    /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
  29.581 -       3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */
  29.582 -    clear_bit(0*32+31, &c->x86_capability);
  29.583 -	
  29.584 -    r = get_model_name(c);
  29.585 -
  29.586 -    switch(c->x86)
  29.587 -    {
  29.588 -    case 5: /* We don't like AMD K6 */
  29.589 -        panic("Unsupported AMD processor\n");
  29.590 -    case 6:	/* An Athlon/Duron. We can trust the BIOS probably */
  29.591 -        break;
  29.592 -    }
  29.593 -
  29.594 -    display_cacheinfo(c);
  29.595 -    return r;
  29.596 -}
  29.597 -
  29.598 -
  29.599 -static void __init init_intel(struct cpuinfo_x86 *c)
  29.600 -{
  29.601 -    char *p = NULL;
  29.602 -    unsigned int l1i = 0, l1d = 0, l2 = 0, l3 = 0; /* Cache sizes */
  29.603 -
  29.604 -    if (c->cpuid_level > 1) {
  29.605 -        /* supports eax=2  call */
  29.606 -        int i, j, n;
  29.607 -        int regs[4];
  29.608 -        unsigned char *dp = (unsigned char *)regs;
  29.609 -
  29.610 -        /* Number of times to iterate */
  29.611 -        n = cpuid_eax(2) & 0xFF;
  29.612 -
  29.613 -        for ( i = 0 ; i < n ; i++ ) {
  29.614 -            cpuid(2, &regs[0], &regs[1], &regs[2], &regs[3]);
  29.615 -			
  29.616 -            /* If bit 31 is set, this is an unknown format */
  29.617 -            for ( j = 0 ; j < 3 ; j++ ) {
  29.618 -                if ( regs[j] < 0 ) regs[j] = 0;
  29.619 -            }
  29.620 -
  29.621 -            /* Byte 0 is level count, not a descriptor */
  29.622 -            for ( j = 1 ; j < 16 ; j++ ) {
  29.623 -                unsigned char des = dp[j];
  29.624 -                unsigned char dl, dh;
  29.625 -                unsigned int cs;
  29.626 -
  29.627 -                dh = des >> 4;
  29.628 -                dl = des & 0x0F;
  29.629 -
  29.630 -				/* Black magic... */
  29.631 -
  29.632 -                switch ( dh )
  29.633 -                {
  29.634 -                case 0:
  29.635 -                    switch ( dl ) {
  29.636 -                    case 6:
  29.637 -                        /* L1 I cache */
  29.638 -                        l1i += 8;
  29.639 -                        break;
  29.640 -                    case 8:
  29.641 -                        /* L1 I cache */
  29.642 -                        l1i += 16;
  29.643 -                        break;
  29.644 -                    case 10:
  29.645 -                        /* L1 D cache */
  29.646 -                        l1d += 8;
  29.647 -                        break;
  29.648 -                    case 12:
  29.649 -                        /* L1 D cache */
  29.650 -                        l1d += 16;
  29.651 -                        break;
  29.652 -                    default:;
  29.653 -                        /* TLB, or unknown */
  29.654 -                    }
  29.655 -                    break;
  29.656 -                case 2:
  29.657 -                    if ( dl ) {
  29.658 -                        /* L3 cache */
  29.659 -                        cs = (dl-1) << 9;
  29.660 -                        l3 += cs;
  29.661 -                    }
  29.662 -                    break;
  29.663 -                case 4:
  29.664 -                    if ( c->x86 > 6 && dl ) {
  29.665 -                        /* P4 family */
  29.666 -                        /* L3 cache */
  29.667 -                        cs = 128 << (dl-1);
  29.668 -                        l3 += cs;
  29.669 -                        break;
  29.670 -                    }
  29.671 -                    /* else same as 8 - fall through */
  29.672 -                case 8:
  29.673 -                    if ( dl ) {
  29.674 -                        /* L2 cache */
  29.675 -                        cs = 128 << (dl-1);
  29.676 -                        l2 += cs;
  29.677 -                    }
  29.678 -                    break;
  29.679 -                case 6:
  29.680 -                    if (dl > 5) {
  29.681 -                        /* L1 D cache */
  29.682 -                        cs = 8<<(dl-6);
  29.683 -                        l1d += cs;
  29.684 -                    }
  29.685 -                    break;
  29.686 -                case 7:
  29.687 -                    if ( dl >= 8 ) 
  29.688 -                    {
  29.689 -                        /* L2 cache */
  29.690 -                        cs = 64<<(dl-8);
  29.691 -                        l2 += cs;
  29.692 -                    } else {
  29.693 -                        /* L0 I cache, count as L1 */
  29.694 -                        cs = dl ? (16 << (dl-1)) : 12;
  29.695 -                        l1i += cs;
  29.696 -                    }
  29.697 -                    break;
  29.698 -                default:
  29.699 -                    /* TLB, or something else we don't know about */
  29.700 -                    break;
  29.701 -                }
  29.702 -            }
  29.703 -        }
  29.704 -        if ( l1i || l1d )
  29.705 -            printk(KERN_INFO "CPU: L1 I cache: %dK, L1 D cache: %dK\n",
  29.706 -                   l1i, l1d);
  29.707 -        if ( l2 )
  29.708 -            printk(KERN_INFO "CPU: L2 cache: %dK\n", l2);
  29.709 -        if ( l3 )
  29.710 -            printk(KERN_INFO "CPU: L3 cache: %dK\n", l3);
  29.711 -
  29.712 -        /*
  29.713 -         * This assumes the L3 cache is shared; it typically lives in
  29.714 -         * the northbridge.  The L1 caches are included by the L2
  29.715 -         * cache, and so should not be included for the purpose of
  29.716 -         * SMP switching weights.
  29.717 -         */
  29.718 -        c->x86_cache_size = l2 ? l2 : (l1i+l1d);
  29.719 -    }
  29.720 -
  29.721 -    /* SEP CPUID bug: Pentium Pro reports SEP but doesn't have it */
  29.722 -    if ( c->x86 == 6 && c->x86_model < 3 && c->x86_mask < 3 )
  29.723 -        clear_bit(X86_FEATURE_SEP, &c->x86_capability);
  29.724 -	
  29.725 -    /* Names for the Pentium II/Celeron processors 
  29.726 -       detectable only by also checking the cache size.
  29.727 -       Dixon is NOT a Celeron. */
  29.728 -    if (c->x86 == 6) {
  29.729 -        switch (c->x86_model) {
  29.730 -        case 5:
  29.731 -            if (l2 == 0)
  29.732 -                p = "Celeron (Covington)";
  29.733 -            if (l2 == 256)
  29.734 -                p = "Mobile Pentium II (Dixon)";
  29.735 -            break;
  29.736 -			
  29.737 -        case 6:
  29.738 -            if (l2 == 128)
  29.739 -                p = "Celeron (Mendocino)";
  29.740 -            break;
  29.741 -			
  29.742 -        case 8:
  29.743 -            if (l2 == 128)
  29.744 -                p = "Celeron (Coppermine)";
  29.745 -            break;
  29.746 -        }
  29.747 -    }
  29.748 -
  29.749 -    if ( p )
  29.750 -        strcpy(c->x86_model_id, p);
  29.751 -}
  29.752 -
  29.753 -void __init get_cpu_vendor(struct cpuinfo_x86 *c)
  29.754 -{
  29.755 -    char *v = c->x86_vendor_id;
  29.756 -
  29.757 -    if (!strcmp(v, "GenuineIntel"))
  29.758 -        c->x86_vendor = X86_VENDOR_INTEL;
  29.759 -    else if (!strcmp(v, "AuthenticAMD"))
  29.760 -        c->x86_vendor = X86_VENDOR_AMD;
  29.761 -    else if (!strcmp(v, "CentaurHauls"))
  29.762 -        c->x86_vendor = X86_VENDOR_CENTAUR;
  29.763 -    else
  29.764 -        c->x86_vendor = X86_VENDOR_UNKNOWN;
  29.765 -}
  29.766 -
  29.767 -struct cpu_model_info {
  29.768 -    int vendor;
  29.769 -    int family;
  29.770 -    char *model_names[16];
  29.771 -};
  29.772 -
  29.773 -/* Naming convention should be: <Name> [(<Codename>)] */
  29.774 -/* This table only is used unless init_<vendor>() below doesn't set it; */
  29.775 -/* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used */
  29.776 -static struct cpu_model_info cpu_models[] __initdata = {
  29.777 -    { X86_VENDOR_INTEL,	6,
  29.778 -      { "Pentium Pro A-step", "Pentium Pro", NULL, "Pentium II (Klamath)", 
  29.779 -        NULL, "Pentium II (Deschutes)", "Mobile Pentium II",
  29.780 -        "Pentium III (Katmai)", "Pentium III (Coppermine)", NULL,
  29.781 -        "Pentium III (Cascades)", NULL, NULL, NULL, NULL }},
  29.782 -    { X86_VENDOR_AMD,	6, /* Is this this really necessary?? */
  29.783 -      { "Athlon", "Athlon",
  29.784 -        "Athlon", NULL, "Athlon", NULL,
  29.785 -        NULL, NULL, NULL,
  29.786 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL }}
  29.787 -};
  29.788 -
  29.789 -/* Look up CPU names by table lookup. */
  29.790 -static char __init *table_lookup_model(struct cpuinfo_x86 *c)
  29.791 -{
  29.792 -    struct cpu_model_info *info = cpu_models;
  29.793 -    int i;
  29.794 -
  29.795 -    if ( c->x86_model >= 16 )
  29.796 -        return NULL;	/* Range check */
  29.797 -
  29.798 -    for ( i = 0 ; i < sizeof(cpu_models)/sizeof(struct cpu_model_info) ; i++ ) {
  29.799 -        if ( info->vendor == c->x86_vendor &&
  29.800 -             info->family == c->x86 ) {
  29.801 -            return info->model_names[c->x86_model];
  29.802 -        }
  29.803 -        info++;
  29.804 -    }
  29.805 -    return NULL;		/* Not found */
  29.806 -}
  29.807 -
  29.808 -
  29.809 -
  29.810 -/* Standard macro to see if a specific flag is changeable */
  29.811 -static inline int flag_is_changeable_p(u32 flag)
  29.812 -{
  29.813 -    u32 f1, f2;
  29.814 -
  29.815 -    asm("pushfl\n\t"
  29.816 -        "pushfl\n\t"
  29.817 -        "popl %0\n\t"
  29.818 -        "movl %0,%1\n\t"
  29.819 -        "xorl %2,%0\n\t"
  29.820 -        "pushl %0\n\t"
  29.821 -        "popfl\n\t"
  29.822 -        "pushfl\n\t"
  29.823 -        "popl %0\n\t"
  29.824 -        "popfl\n\t"
  29.825 -        : "=&r" (f1), "=&r" (f2)
  29.826 -        : "ir" (flag));
  29.827 -
  29.828 -    return ((f1^f2) & flag) != 0;
  29.829 -}
  29.830 -
  29.831 -
  29.832 -/* Probe for the CPUID instruction */
  29.833 -static int __init have_cpuid_p(void)
  29.834 -{
  29.835 -    return flag_is_changeable_p(X86_EFLAGS_ID);
  29.836 -}
  29.837 -
  29.838 -
  29.839 -
  29.840 -#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
  29.841 -unsigned char eddnr;
  29.842 -struct edd_info edd[EDDMAXNR];
  29.843 -unsigned int edd_disk80_sig;
  29.844 -/**
  29.845 - * copy_edd() - Copy the BIOS EDD information
  29.846 - *              from empty_zero_page into a safe place.
  29.847 - *
  29.848 - */
  29.849 -static inline void copy_edd(void)
  29.850 -{
  29.851 -     eddnr = EDD_NR;
  29.852 -     memcpy(edd, EDD_BUF, sizeof(edd));
  29.853 -     edd_disk80_sig = DISK80_SIGNATURE_BUFFER;
  29.854 -}
  29.855 -#else
  29.856 -static inline void copy_edd(void) {}
  29.857 -#endif
  29.858 -
  29.859 -/*
  29.860 - * This does the hard work of actually picking apart the CPU stuff...
  29.861 - */
  29.862 -void __init identify_cpu(struct cpuinfo_x86 *c)
  29.863 -{
  29.864 -    int junk, i;
  29.865 -    u32 xlvl, tfms;
  29.866 -
  29.867 -    c->loops_per_jiffy = loops_per_jiffy;
  29.868 -    c->x86_cache_size = -1;
  29.869 -    c->x86_vendor = X86_VENDOR_UNKNOWN;
  29.870 -    c->cpuid_level = -1;	/* CPUID not detected */
  29.871 -    c->x86_model = c->x86_mask = 0;	/* So far unknown... */
  29.872 -    c->x86_vendor_id[0] = '\0'; /* Unset */
  29.873 -    c->x86_model_id[0] = '\0';  /* Unset */
  29.874 -    memset(&c->x86_capability, 0, sizeof c->x86_capability);
  29.875 -    c->hard_math = 1;
  29.876 -
  29.877 -    if ( !have_cpuid_p() ) {
  29.878 -        panic("Processor must support CPUID\n");
  29.879 -    } else {
  29.880 -        /* CPU does have CPUID */
  29.881 -
  29.882 -        /* Get vendor name */
  29.883 -        cpuid(0x00000000, &c->cpuid_level,
  29.884 -              (int *)&c->x86_vendor_id[0],
  29.885 -              (int *)&c->x86_vendor_id[8],
  29.886 -              (int *)&c->x86_vendor_id[4]);
  29.887 -		
  29.888 -        get_cpu_vendor(c);
  29.889 -        /* Initialize the standard set of capabilities */
  29.890 -        /* Note that the vendor-specific code below might override */
  29.891 -
  29.892 -        /* Intel-defined flags: level 0x00000001 */
  29.893 -        if ( c->cpuid_level >= 0x00000001 ) {
  29.894 -                        u32 capability, excap;
  29.895 -                        cpuid(0x00000001, &tfms, &junk, &excap, &capability);
  29.896 -                        c->x86_capability[0] = capability;
  29.897 -                        c->x86_capability[4] = excap;
  29.898 -                        c->x86 = (tfms >> 8) & 15;
  29.899 -                        c->x86_model = (tfms >> 4) & 15;
  29.900 -                        if (c->x86 == 0xf) {
  29.901 -                                c->x86 += (tfms >> 20) & 0xff;
  29.902 -                                c->x86_model += ((tfms >> 16) & 0xF) << 4;
  29.903 -                        }
  29.904 -                        c->x86_mask = tfms & 15;
  29.905 -        } else {
  29.906 -            /* Have CPUID level 0 only - unheard of */
  29.907 -            c->x86 = 4;
  29.908 -        }
  29.909 -
  29.910 -        /* AMD-defined flags: level 0x80000001 */
  29.911 -        xlvl = cpuid_eax(0x80000000);
  29.912 -        if ( (xlvl & 0xffff0000) == 0x80000000 ) {
  29.913 -            if ( xlvl >= 0x80000001 )
  29.914 -                c->x86_capability[1] = cpuid_edx(0x80000001);
  29.915 -            if ( xlvl >= 0x80000004 )
  29.916 -                get_model_name(c); /* Default name */
  29.917 -        }
  29.918 -
  29.919 -        /* Transmeta-defined flags: level 0x80860001 */
  29.920 -        xlvl = cpuid_eax(0x80860000);
  29.921 -        if ( (xlvl & 0xffff0000) == 0x80860000 ) {
  29.922 -            if (  xlvl >= 0x80860001 )
  29.923 -                c->x86_capability[2] = cpuid_edx(0x80860001);
  29.924 -        }
  29.925 -    }
  29.926 -
  29.927 -    printk(KERN_DEBUG "CPU: Before vendor init, caps: %08x %08x %08x, vendor = %d\n",
  29.928 -           c->x86_capability[0],
  29.929 -           c->x86_capability[1],
  29.930 -           c->x86_capability[2],
  29.931 -           c->x86_vendor);
  29.932 -
  29.933 -    /*
  29.934 -     * Vendor-specific initialization.  In this section we
  29.935 -     * canonicalize the feature flags, meaning if there are
  29.936 -     * features a certain CPU supports which CPUID doesn't
  29.937 -     * tell us, CPUID claiming incorrect flags, or other bugs,
  29.938 -     * we handle them here.
  29.939 -     *
  29.940 -     * At the end of this section, c->x86_capability better
  29.941 -     * indicate the features this CPU genuinely supports!
  29.942 -     */
  29.943 -    switch ( c->x86_vendor ) {
  29.944 -    case X86_VENDOR_AMD:
  29.945 -        init_amd(c);
  29.946 -        break;
  29.947 -
  29.948 -    case X86_VENDOR_INTEL:
  29.949 -        init_intel(c);
  29.950 -        break;
  29.951 -
  29.952 -    case X86_VENDOR_CENTAUR:
  29.953 -        init_centaur(c);
  29.954 -        break;
  29.955 -        
  29.956 -    default:
  29.957 -        printk("Unsupported CPU vendor (%d) -- please report!\n",
  29.958 -               c->x86_vendor);
  29.959 -    }
  29.960 -	
  29.961 -    printk(KERN_DEBUG "CPU: After vendor init, caps: %08x %08x %08x %08x\n",
  29.962 -           c->x86_capability[0],
  29.963 -           c->x86_capability[1],
  29.964 -           c->x86_capability[2],
  29.965 -           c->x86_capability[3]);
  29.966 -
  29.967 -
  29.968 -    /* If the model name is still unset, do table lookup. */
  29.969 -    if ( !c->x86_model_id[0] ) {
  29.970 -        char *p;
  29.971 -        p = table_lookup_model(c);
  29.972 -        if ( p )
  29.973 -            strcpy(c->x86_model_id, p);
  29.974 -        else
  29.975 -            /* Last resort... */
  29.976 -            sprintf(c->x86_model_id, "%02x/%02x",
  29.977 -                    c->x86_vendor, c->x86_model);
  29.978 -    }
  29.979 -
  29.980 -    /* Now the feature flags better reflect actual CPU features! */
  29.981 -
  29.982 -    printk(KERN_DEBUG "CPU:     After generic, caps: %08x %08x %08x %08x\n",
  29.983 -           c->x86_capability[0],
  29.984 -           c->x86_capability[1],
  29.985 -           c->x86_capability[2],
  29.986 -           c->x86_capability[3]);
  29.987 -
  29.988 -    /*
  29.989 -     * On SMP, boot_cpu_data holds the common feature set between
  29.990 -     * all CPUs; so make sure that we indicate which features are
  29.991 -     * common between the CPUs.  The first time this routine gets
  29.992 -     * executed, c == &boot_cpu_data.
  29.993 -     */
  29.994 -    if ( c != &boot_cpu_data ) {
  29.995 -        /* AND the already accumulated flags with these */
  29.996 -        for ( i = 0 ; i < NCAPINTS ; i++ )
  29.997 -            boot_cpu_data.x86_capability[i] &= c->x86_capability[i];
  29.998 -    }
  29.999 -
 29.1000 -    printk(KERN_DEBUG "CPU:             Common caps: %08x %08x %08x %08x\n",
 29.1001 -           boot_cpu_data.x86_capability[0],
 29.1002 -           boot_cpu_data.x86_capability[1],
 29.1003 -           boot_cpu_data.x86_capability[2],
 29.1004 -           boot_cpu_data.x86_capability[3]);
 29.1005 -}
 29.1006 -
 29.1007 -
 29.1008 -/* These need to match <asm/processor.h> */
 29.1009 -static char *cpu_vendor_names[] __initdata = {
 29.1010 -    "Intel", "Cyrix", "AMD", "UMC", "NexGen", "Centaur", "Rise", "Transmeta" };
 29.1011 -
 29.1012 -
 29.1013 -void __init print_cpu_info(struct cpuinfo_x86 *c)
 29.1014 -{
 29.1015 -    char *vendor = NULL;
 29.1016 -
 29.1017 -    if (c->x86_vendor < sizeof(cpu_vendor_names)/sizeof(char *))
 29.1018 -        vendor = cpu_vendor_names[c->x86_vendor];
 29.1019 -    else if (c->cpuid_level >= 0)
 29.1020 -        vendor = c->x86_vendor_id;
 29.1021 -
 29.1022 -    if (vendor && strncmp(c->x86_model_id, vendor, strlen(vendor)))
 29.1023 -        printk("%s ", vendor);
 29.1024 -
 29.1025 -    if (!c->x86_model_id[0])
 29.1026 -        printk("%d86", c->x86);
 29.1027 -    else
 29.1028 -        printk("%s", c->x86_model_id);
 29.1029 -
 29.1030 -    if (c->x86_mask || c->cpuid_level >= 0) 
 29.1031 -        printk(" stepping %02x\n", c->x86_mask);
 29.1032 -    else
 29.1033 -        printk("\n");
 29.1034 -}
 29.1035 -
 29.1036 -/*
 29.1037 - *	Get CPU information for use by the procfs.
 29.1038 - */
 29.1039 -static int show_cpuinfo(struct seq_file *m, void *v)
 29.1040 -{
 29.1041 -    /* 
 29.1042 -     * These flag bits must match the definitions in <asm/cpufeature.h>.
 29.1043 -     * NULL means this bit is undefined or reserved; either way it doesn't
 29.1044 -     * have meaning as far as Linux is concerned.  Note that it's important
 29.1045 -     * to realize there is a difference between this table and CPUID -- if
 29.1046 -     * applications want to get the raw CPUID data, they should access
 29.1047 -     * /dev/cpu/<cpu_nr>/cpuid instead.
 29.1048 -	 */
 29.1049 -    static char *x86_cap_flags[] = {
 29.1050 -        /* Intel-defined */
 29.1051 -        "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce",
 29.1052 -        "cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov",
 29.1053 -        "pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx",
 29.1054 -        "fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", "pbe",
 29.1055 -
 29.1056 -        /* AMD-defined */
 29.1057 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 29.1058 -        NULL, NULL, NULL, "syscall", NULL, NULL, NULL, NULL,
 29.1059 -        NULL, NULL, NULL, "mp", NULL, NULL, "mmxext", NULL,
 29.1060 -        NULL, NULL, NULL, NULL, NULL, "lm", "3dnowext", "3dnow",
 29.1061 -
 29.1062 -        /* Transmeta-defined */
 29.1063 -        "recovery", "longrun", NULL, "lrti", NULL, NULL, NULL, NULL,
 29.1064 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 29.1065 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 29.1066 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 29.1067 -
 29.1068 -        /* Other (Linux-defined) */
 29.1069 -        "cxmmx", "k6_mtrr", "cyrix_arr", "centaur_mcr", 
 29.1070 -	NULL, NULL, NULL, NULL,
 29.1071 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 29.1072 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 29.1073 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 29.1074 -
 29.1075 -        /* Intel-defined (#2) */
 29.1076 -        "pni", NULL, NULL, "monitor", "ds_cpl", NULL, NULL, "tm2",
 29.1077 -        "est", NULL, "cid", NULL, NULL, NULL, NULL, NULL,
 29.1078 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 29.1079 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 29.1080 -
 29.1081 -        /* VIA/Cyrix/Centaur-defined */
 29.1082 -        NULL, NULL, "xstore", NULL, NULL, NULL, NULL, NULL,
 29.1083 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 29.1084 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 29.1085 -        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 29.1086 -
 29.1087 -    };
 29.1088 -    struct cpuinfo_x86 *c = v;
 29.1089 -    int i, n = c - cpu_data;
 29.1090 -    int fpu_exception;
 29.1091 -
 29.1092 -#ifdef CONFIG_SMP
 29.1093 -    if (!(cpu_online_map & (1<<n)))
 29.1094 -        return 0;
 29.1095 -#endif
 29.1096 -    seq_printf(m, "processor\t: %d\n"
 29.1097 -               "vendor_id\t: %s\n"
 29.1098 -               "cpu family\t: %d\n"
 29.1099 -               "model\t\t: %d\n"
 29.1100 -               "model name\t: %s\n",
 29.1101 -               n,
 29.1102 -               c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown",
 29.1103 -               c->x86,
 29.1104 -               c->x86_model,
 29.1105 -               c->x86_model_id[0] ? c->x86_model_id : "unknown");
 29.1106 -
 29.1107 -    if (c->x86_mask || c->cpuid_level >= 0)
 29.1108 -        seq_printf(m, "stepping\t: %d\n", c->x86_mask);
 29.1109 -    else
 29.1110 -        seq_printf(m, "stepping\t: unknown\n");
 29.1111 -
 29.1112 -    if ( test_bit(X86_FEATURE_TSC, &c->x86_capability) ) {
 29.1113 -        seq_printf(m, "cpu MHz\t\t: %lu.%03lu\n",
 29.1114 -                   cpu_khz / 1000, (cpu_khz % 1000));
 29.1115 -    }
 29.1116 -
 29.1117 -    /* Cache size */
 29.1118 -    if (c->x86_cache_size >= 0)
 29.1119 -        seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size);
 29.1120 -	
 29.1121 -	/* We use exception 16 if we have hardware math and we've either seen it or the CPU claims it is internal */
 29.1122 -    fpu_exception = c->hard_math && (ignore_irq13 || cpu_has_fpu);
 29.1123 -    seq_printf(m, "fdiv_bug\t: %s\n"
 29.1124 -               "hlt_bug\t\t: %s\n"
 29.1125 -               "f00f_bug\t: %s\n"
 29.1126 -               "coma_bug\t: %s\n"
 29.1127 -               "fpu\t\t: %s\n"
 29.1128 -               "fpu_exception\t: %s\n"
 29.1129 -               "cpuid level\t: %d\n"
 29.1130 -               "wp\t\t: %s\n"
 29.1131 -               "flags\t\t:",
 29.1132 -               c->fdiv_bug ? "yes" : "no",
 29.1133 -               c->hlt_works_ok ? "no" : "yes",
 29.1134 -               c->f00f_bug ? "yes" : "no",
 29.1135 -               c->coma_bug ? "yes" : "no",
 29.1136 -               c->hard_math ? "yes" : "no",
 29.1137 -               fpu_exception ? "yes" : "no",
 29.1138 -               c->cpuid_level,
 29.1139 -               c->wp_works_ok ? "yes" : "no");
 29.1140 -
 29.1141 -    for ( i = 0 ; i < 32*NCAPINTS ; i++ )
 29.1142 -        if ( test_bit(i, &c->x86_capability) &&
 29.1143 -             x86_cap_flags[i] != NULL )
 29.1144 -            seq_printf(m, " %s", x86_cap_flags[i]);
 29.1145 -
 29.1146 -    seq_printf(m, "\nbogomips\t: %lu.%02lu\n\n",
 29.1147 -               c->loops_per_jiffy/(500000/HZ),
 29.1148 -               (c->loops_per_jiffy/(5000/HZ)) % 100);
 29.1149 -    return 0;
 29.1150 -}
 29.1151 -
 29.1152 -static void *c_start(struct seq_file *m, loff_t *pos)
 29.1153 -{
 29.1154 -    return *pos < NR_CPUS ? cpu_data + *pos : NULL;
 29.1155 -}
 29.1156 -static void *c_next(struct seq_file *m, void *v, loff_t *pos)
 29.1157 -{
 29.1158 -    ++*pos;
 29.1159 -    return c_start(m, pos);
 29.1160 -}
 29.1161 -static void c_stop(struct seq_file *m, void *v)
 29.1162 -{
 29.1163 -}
 29.1164 -struct seq_operations cpuinfo_op = {
 29.1165 -    start:	c_start,
 29.1166 -    next:	c_next,
 29.1167 -    stop:	c_stop,
 29.1168 -    show:	show_cpuinfo,
 29.1169 -};
 29.1170 -
 29.1171 -unsigned long cpu_initialized __initdata = 0;
 29.1172 -
 29.1173 -/*
 29.1174 - * cpu_init() initializes state that is per-CPU. Some data is already
 29.1175 - * initialized (naturally) in the bootstrap process, such as the GDT
 29.1176 - * and IDT. We reload them nevertheless, this function acts as a
 29.1177 - * 'CPU state barrier', nothing should get across.
 29.1178 - */
 29.1179 -void __init cpu_init (void)
 29.1180 -{
 29.1181 -    int nr = smp_processor_id();
 29.1182 -
 29.1183 -    if (test_and_set_bit(nr, &cpu_initialized)) {
 29.1184 -        printk(KERN_WARNING "CPU#%d already initialized!\n", nr);
 29.1185 -        for (;;) __sti();
 29.1186 -    }
 29.1187 -    printk(KERN_INFO "Initializing CPU#%d\n", nr);
 29.1188 -
 29.1189 -    /*
 29.1190 -     * set up and load the per-CPU TSS and LDT
 29.1191 -     */
 29.1192 -    atomic_inc(&init_mm.mm_count);
 29.1193 -    current->active_mm = &init_mm;
 29.1194 -    if(current->mm)
 29.1195 -        BUG();
 29.1196 -    enter_lazy_tlb(&init_mm, current, nr);
 29.1197 -
 29.1198 -    HYPERVISOR_stack_switch(__KERNEL_DS, current->thread.esp0);
 29.1199 -
 29.1200 -    load_LDT(&init_mm.context);
 29.1201 -    flush_page_update_queue();
 29.1202 -
 29.1203 -    /* Force FPU initialization. */
 29.1204 -    current->flags &= ~PF_USEDFPU;
 29.1205 -    current->used_math = 0;
 29.1206 -    stts();
 29.1207 -}
    30.1 --- a/linux-2.4.28-xen-sparse/arch/xen/kernel/signal.c	Wed Jan 19 13:20:15 2005 +0000
    30.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.3 @@ -1,717 +0,0 @@
    30.4 -/*
    30.5 - *  linux/arch/i386/kernel/signal.c
    30.6 - *
    30.7 - *  Copyright (C) 1991, 1992  Linus Torvalds
    30.8 - *
    30.9 - *  1997-11-28  Modified for POSIX.1b signals by Richard Henderson
   30.10 - *  2000-06-20  Pentium III FXSR, SSE support by Gareth Hughes
   30.11 - */
   30.12 -
   30.13 -#include <linux/sched.h>
   30.14 -#include <linux/mm.h>
   30.15 -#include <linux/smp.h>
   30.16 -#include <linux/smp_lock.h>
   30.17 -#include <linux/kernel.h>
   30.18 -#include <linux/signal.h>
   30.19 -#include <linux/errno.h>
   30.20 -#include <linux/wait.h>
   30.21 -#include <linux/ptrace.h>
   30.22 -#include <linux/unistd.h>
   30.23 -#include <linux/stddef.h>
   30.24 -#include <linux/tty.h>
   30.25 -#include <linux/personality.h>
   30.26 -#include <asm/ucontext.h>
   30.27 -#include <asm/uaccess.h>
   30.28 -#include <asm/i387.h>
   30.29 -
   30.30 -#define DEBUG_SIG 0
   30.31 -
   30.32 -#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
   30.33 -
   30.34 -int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));
   30.35 -
   30.36 -int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from)
   30.37 -{
   30.38 -	if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t)))
   30.39 -		return -EFAULT;
   30.40 -	if (from->si_code < 0)
   30.41 -		return __copy_to_user(to, from, sizeof(siginfo_t));
   30.42 -	else {
   30.43 -		int err;
   30.44 -
   30.45 -		/* If you change siginfo_t structure, please be sure
   30.46 -		   this code is fixed accordingly.
   30.47 -		   It should never copy any pad contained in the structure
   30.48 -		   to avoid security leaks, but must copy the generic
   30.49 -		   3 ints plus the relevant union member.  */
   30.50 -		err = __put_user(from->si_signo, &to->si_signo);
   30.51 -		err |= __put_user(from->si_errno, &to->si_errno);
   30.52 -		err |= __put_user((short)from->si_code, &to->si_code);
   30.53 -		/* First 32bits of unions are always present.  */
   30.54 -		err |= __put_user(from->si_pid, &to->si_pid);
   30.55 -		switch (from->si_code >> 16) {
   30.56 -		case __SI_FAULT >> 16:
   30.57 -			break;
   30.58 -		case __SI_CHLD >> 16:
   30.59 -			err |= __put_user(from->si_utime, &to->si_utime);
   30.60 -			err |= __put_user(from->si_stime, &to->si_stime);
   30.61 -			err |= __put_user(from->si_status, &to->si_status);
   30.62 -		default:
   30.63 -			err |= __put_user(from->si_uid, &to->si_uid);
   30.64 -			break;
   30.65 -		/* case __SI_RT: This is not generated by the kernel as of now.  */
   30.66 -		}
   30.67 -		return err;
   30.68 -	}
   30.69 -}
   30.70 -
   30.71 -/*
   30.72 - * Atomically swap in the new signal mask, and wait for a signal.
   30.73 - */
   30.74 -asmlinkage int
   30.75 -sys_sigsuspend(int history0, int history1, old_sigset_t mask)
   30.76 -{
   30.77 -	struct pt_regs * regs = (struct pt_regs *) &history0;
   30.78 -	sigset_t saveset;
   30.79 -
   30.80 -	mask &= _BLOCKABLE;
   30.81 -	spin_lock_irq(&current->sigmask_lock);
   30.82 -	saveset = current->blocked;
   30.83 -	siginitset(&current->blocked, mask);
   30.84 -	recalc_sigpending(current);
   30.85 -	spin_unlock_irq(&current->sigmask_lock);
   30.86 -
   30.87 -	regs->eax = -EINTR;
   30.88 -	while (1) {
   30.89 -		current->state = TASK_INTERRUPTIBLE;
   30.90 -		schedule();
   30.91 -		if (do_signal(regs, &saveset))
   30.92 -			return -EINTR;
   30.93 -	}
   30.94 -}
   30.95 -
   30.96 -asmlinkage int
   30.97 -sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize)
   30.98 -{
   30.99 -	struct pt_regs * regs = (struct pt_regs *) &unewset;
  30.100 -	sigset_t saveset, newset;
  30.101 -
  30.102 -	/* XXX: Don't preclude handling different sized sigset_t's.  */
  30.103 -	if (sigsetsize != sizeof(sigset_t))
  30.104 -		return -EINVAL;
  30.105 -
  30.106 -	if (copy_from_user(&newset, unewset, sizeof(newset)))
  30.107 -		return -EFAULT;
  30.108 -	sigdelsetmask(&newset, ~_BLOCKABLE);
  30.109 -
  30.110 -	spin_lock_irq(&current->sigmask_lock);
  30.111 -	saveset = current->blocked;
  30.112 -	current->blocked = newset;
  30.113 -	recalc_sigpending(current);
  30.114 -	spin_unlock_irq(&current->sigmask_lock);
  30.115 -
  30.116 -	regs->eax = -EINTR;
  30.117 -	while (1) {
  30.118 -		current->state = TASK_INTERRUPTIBLE;
  30.119 -		schedule();
  30.120 -		if (do_signal(regs, &saveset))
  30.121 -			return -EINTR;
  30.122 -	}
  30.123 -}
  30.124 -
  30.125 -asmlinkage int 
  30.126 -sys_sigaction(int sig, const struct old_sigaction *act,
  30.127 -	      struct old_sigaction *oact)
  30.128 -{
  30.129 -	struct k_sigaction new_ka, old_ka;
  30.130 -	int ret;
  30.131 -
  30.132 -	if (act) {
  30.133 -		old_sigset_t mask;
  30.134 -		if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
  30.135 -		    __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
  30.136 -		    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
  30.137 -			return -EFAULT;
  30.138 -		__get_user(new_ka.sa.sa_flags, &act->sa_flags);
  30.139 -		__get_user(mask, &act->sa_mask);
  30.140 -		siginitset(&new_ka.sa.sa_mask, mask);
  30.141 -	}
  30.142 -
  30.143 -	ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
  30.144 -
  30.145 -	if (!ret && oact) {
  30.146 -		if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
  30.147 -		    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
  30.148 -		    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
  30.149 -			return -EFAULT;
  30.150 -		__put_user(old_ka.sa.sa_flags, &oact->sa_flags);
  30.151 -		__put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask);
  30.152 -	}
  30.153 -
  30.154 -	return ret;
  30.155 -}
  30.156 -
  30.157 -asmlinkage int
  30.158 -sys_sigaltstack(const stack_t *uss, stack_t *uoss)
  30.159 -{
  30.160 -	struct pt_regs *regs = (struct pt_regs *) &uss;
  30.161 -	return do_sigaltstack(uss, uoss, regs->esp);
  30.162 -}
  30.163 -
  30.164 -
  30.165 -/*
  30.166 - * Do a signal return; undo the signal stack.
  30.167 - */
  30.168 -
  30.169 -struct sigframe
  30.170 -{
  30.171 -	char *pretcode;
  30.172 -	int sig;
  30.173 -	struct sigcontext sc;
  30.174 -	struct _fpstate fpstate;
  30.175 -	unsigned long extramask[_NSIG_WORDS-1];
  30.176 -	char retcode[8];
  30.177 -};
  30.178 -
  30.179 -struct rt_sigframe
  30.180 -{
  30.181 -	char *pretcode;
  30.182 -	int sig;
  30.183 -	struct siginfo *pinfo;
  30.184 -	void *puc;
  30.185 -	struct siginfo info;
  30.186 -	struct ucontext uc;
  30.187 -	struct _fpstate fpstate;
  30.188 -	char retcode[8];
  30.189 -};
  30.190 -
  30.191 -static int
  30.192 -restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc, int *peax)
  30.193 -{
  30.194 -	unsigned int err = 0;
  30.195 -
  30.196 -#define COPY(x)		err |= __get_user(regs->x, &sc->x)
  30.197 -
  30.198 -#define COPY_SEG(seg)							\
  30.199 -	{ unsigned short tmp;						\
  30.200 -	  err |= __get_user(tmp, &sc->seg);				\
  30.201 -	  regs->x##seg = tmp; }
  30.202 -
  30.203 -#define COPY_SEG_STRICT(seg)						\
  30.204 -	{ unsigned short tmp;						\
  30.205 -	  err |= __get_user(tmp, &sc->seg);				\
  30.206 -	  regs->x##seg = tmp|3; }
  30.207 -
  30.208 -#define GET_SEG(seg)							\
  30.209 -	{ unsigned short tmp;						\
  30.210 -	  err |= __get_user(tmp, &sc->seg);				\
  30.211 -	  loadsegment(seg,tmp); }
  30.212 -
  30.213 -	GET_SEG(gs);
  30.214 -	GET_SEG(fs);
  30.215 -	COPY_SEG(es);
  30.216 -	COPY_SEG(ds);
  30.217 -	COPY(edi);
  30.218 -	COPY(esi);
  30.219 -	COPY(ebp);
  30.220 -	COPY(esp);
  30.221 -	COPY(ebx);
  30.222 -	COPY(edx);
  30.223 -	COPY(ecx);
  30.224 -	COPY(eip);
  30.225 -	COPY_SEG_STRICT(cs);
  30.226 -	COPY_SEG_STRICT(ss);
  30.227 -	
  30.228 -	{
  30.229 -		unsigned int tmpflags;
  30.230 -		err |= __get_user(tmpflags, &sc->eflags);
  30.231 -		regs->eflags = (regs->eflags & ~0x40DD5) | (tmpflags & 0x40DD5);
  30.232 -		regs->orig_eax = -1;		/* disable syscall checks */
  30.233 -	}
  30.234 -
  30.235 -	{
  30.236 -		struct _fpstate * buf;
  30.237 -		err |= __get_user(buf, &sc->fpstate);
  30.238 -		if (buf) {
  30.239 -			if (verify_area(VERIFY_READ, buf, sizeof(*buf)))
  30.240 -				goto badframe;
  30.241 -			err |= restore_i387(buf);
  30.242 -		}
  30.243 -	}
  30.244 -
  30.245 -	err |= __get_user(*peax, &sc->eax);
  30.246 -	return err;
  30.247 -
  30.248 -badframe:
  30.249 -	return 1;
  30.250 -}
  30.251 -
  30.252 -asmlinkage int sys_sigreturn(unsigned long __unused)
  30.253 -{
  30.254 -	struct pt_regs *regs = (struct pt_regs *) &__unused;
  30.255 -	struct sigframe *frame = (struct sigframe *)(regs->esp - 8);
  30.256 -	sigset_t set;
  30.257 -	int eax;
  30.258 -
  30.259 -	if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
  30.260 -		goto badframe;
  30.261 -	if (__get_user(set.sig[0], &frame->sc.oldmask)
  30.262 -	    || (_NSIG_WORDS > 1
  30.263 -		&& __copy_from_user(&set.sig[1], &frame->extramask,
  30.264 -				    sizeof(frame->extramask))))
  30.265 -		goto badframe;
  30.266 -
  30.267 -	sigdelsetmask(&set, ~_BLOCKABLE);
  30.268 -	spin_lock_irq(&current->sigmask_lock);
  30.269 -	current->blocked = set;
  30.270 -	recalc_sigpending(current);
  30.271 -	spin_unlock_irq(&current->sigmask_lock);
  30.272 -	
  30.273 -	if (restore_sigcontext(regs, &frame->sc, &eax))
  30.274 -		goto badframe;
  30.275 -	return eax;
  30.276 -
  30.277 -badframe:
  30.278 -	force_sig(SIGSEGV, current);
  30.279 -	return 0;
  30.280 -}	
  30.281 -
  30.282 -asmlinkage int sys_rt_sigreturn(unsigned long __unused)
  30.283 -{
  30.284 -	struct pt_regs *regs = (struct pt_regs *) &__unused;
  30.285 -	struct rt_sigframe *frame = (struct rt_sigframe *)(regs->esp - 4);
  30.286 -	sigset_t set;
  30.287 -	stack_t st;
  30.288 -	int eax;
  30.289 -
  30.290 -	if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
  30.291 -		goto badframe;
  30.292 -	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
  30.293 -		goto badframe;
  30.294 -
  30.295 -	sigdelsetmask(&set, ~_BLOCKABLE);
  30.296 -	spin_lock_irq(&current->sigmask_lock);
  30.297 -	current->blocked = set;
  30.298 -	recalc_sigpending(current);
  30.299 -	spin_unlock_irq(&current->sigmask_lock);
  30.300 -	
  30.301 -	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &eax))
  30.302 -		goto badframe;
  30.303 -
  30.304 -	if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st)))
  30.305 -		goto badframe;
  30.306 -	/* It is more difficult to avoid calling this function than to
  30.307 -	   call it and ignore errors.  */
  30.308 -	do_sigaltstack(&st, NULL, regs->esp);
  30.309 -
  30.310 -	return eax;
  30.311 -
  30.312 -badframe:
  30.313 -	force_sig(SIGSEGV, current);
  30.314 -	return 0;
  30.315 -}	
  30.316 -
  30.317 -/*
  30.318 - * Set up a signal frame.
  30.319 - */
  30.320 -
  30.321 -static int
  30.322 -setup_sigcontext(struct sigcontext *sc, struct _fpstate *fpstate,
  30.323 -		 struct pt_regs *regs, unsigned long mask)
  30.324 -{
  30.325 -	int tmp, err = 0;
  30.326 -
  30.327 -	tmp = 0;
  30.328 -	__asm__("movl %%gs,%0" : "=r"(tmp): "0"(tmp));
  30.329 -	err |= __put_user(tmp, (unsigned int *)&sc->gs);
  30.330 -	__asm__("movl %%fs,%0" : "=r"(tmp): "0"(tmp));
  30.331 -	err |= __put_user(tmp, (unsigned int *)&sc->fs);
  30.332 -
  30.333 -	err |= __put_user(regs->xes, (unsigned int *)&sc->es);
  30.334 -	err |= __put_user(regs->xds, (unsigned int *)&sc->ds);
  30.335 -	err |= __put_user(regs->edi, &sc->edi);
  30.336 -	err |= __put_user(regs->esi, &sc->esi);
  30.337 -	err |= __put_user(regs->ebp, &sc->ebp);
  30.338 -	err |= __put_user(regs->esp, &sc->esp);
  30.339 -	err |= __put_user(regs->ebx, &sc->ebx);
  30.340 -	err |= __put_user(regs->edx, &sc->edx);
  30.341 -	err |= __put_user(regs->ecx, &sc->ecx);
  30.342 -	err |= __put_user(regs->eax, &sc->eax);
  30.343 -	err |= __put_user(current->thread.trap_no, &sc->trapno);
  30.344 -	err |= __put_user(current->thread.error_code, &sc->err);
  30.345 -	err |= __put_user(regs->eip, &sc->eip);
  30.346 -	err |= __put_user(regs->xcs, (unsigned int *)&sc->cs);
  30.347 -	err |= __put_user(regs->eflags, &sc->eflags);
  30.348 -	err |= __put_user(regs->esp, &sc->esp_at_signal);
  30.349 -	err |= __put_user(regs->xss, (unsigned int *)&sc->ss);
  30.350 -
  30.351 -	tmp = save_i387(fpstate);
  30.352 -	if (tmp < 0)
  30.353 -	  err = 1;
  30.354 -	else
  30.355 -	  err |= __put_user(tmp ? fpstate : NULL, &sc->fpstate);
  30.356 -
  30.357 -	/* non-iBCS2 extensions.. */
  30.358 -	err |= __put_user(mask, &sc->oldmask);
  30.359 -	err |= __put_user(current->thread.cr2, &sc->cr2);
  30.360 -
  30.361 -	return err;
  30.362 -}
  30.363 -
  30.364 -/*
  30.365 - * Determine which stack to use..
  30.366 - */
  30.367 -static inline void *
  30.368 -get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size)
  30.369 -{
  30.370 -	unsigned long esp;
  30.371 -
  30.372 -	/* Default to using normal stack */
  30.373 -	esp = regs->esp;
  30.374 -
  30.375 -	/* This is the X/Open sanctioned signal stack switching.  */
  30.376 -	if (ka->sa.sa_flags & SA_ONSTACK) {
  30.377 -		if (sas_ss_flags(esp) == 0)
  30.378 -			esp = current->sas_ss_sp + current->sas_ss_size;
  30.379 -	}
  30.380 -
  30.381 -	/* This is the legacy signal stack switching. */
  30.382 -	else if ((regs->xss & 0xffff) != __USER_DS &&
  30.383 -		 !(ka->sa.sa_flags & SA_RESTORER) &&
  30.384 -		 ka->sa.sa_restorer) {
  30.385 -		esp = (unsigned long) ka->sa.sa_restorer;
  30.386 -	}
  30.387 -
  30.388 -	return (void *)((esp - frame_size) & -8ul);
  30.389 -}
  30.390 -
  30.391 -static void setup_frame(int sig, struct k_sigaction *ka,
  30.392 -			sigset_t *set, struct pt_regs * regs)
  30.393 -{
  30.394 -	struct sigframe *frame;
  30.395 -	int err = 0;
  30.396 -
  30.397 -	frame = get_sigframe(ka, regs, sizeof(*frame));
  30.398 -
  30.399 -	if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
  30.400 -		goto give_sigsegv;
  30.401 -
  30.402 -	err |= __put_user((current->exec_domain
  30.403 -		           && current->exec_domain->signal_invmap
  30.404 -		           && sig < 32
  30.405 -		           ? current->exec_domain->signal_invmap[sig]
  30.406 -		           : sig),
  30.407 -		          &frame->sig);
  30.408 -	if (err)
  30.409 -		goto give_sigsegv;
  30.410 -
  30.411 -	err |= setup_sigcontext(&frame->sc, &frame->fpstate, regs, set->sig[0]);
  30.412 -	if (err)
  30.413 -		goto give_sigsegv;
  30.414 -
  30.415 -	if (_NSIG_WORDS > 1) {
  30.416 -		err |= __copy_to_user(frame->extramask, &set->sig[1],
  30.417 -				      sizeof(frame->extramask));
  30.418 -	}
  30.419 -	if (err)
  30.420 -		goto give_sigsegv;
  30.421 -
  30.422 -	/* Set up to return from userspace.  If provided, use a stub
  30.423 -	   already in userspace.  */
  30.424 -	if (ka->sa.sa_flags & SA_RESTORER) {
  30.425 -		err |= __put_user(ka->sa.sa_restorer, &frame->pretcode);
  30.426 -	} else {
  30.427 -		err |= __put_user(frame->retcode, &frame->pretcode);
  30.428 -		/* This is popl %eax ; movl $,%eax ; int $0x80 */
  30.429 -		err |= __put_user(0xb858, (short *)(frame->retcode+0));
  30.430 -		err |= __put_user(__NR_sigreturn, (int *)(frame->retcode+2));
  30.431 -		err |= __put_user(0x80cd, (short *)(frame->retcode+6));
  30.432 -	}
  30.433 -
  30.434 -	if (err)
  30.435 -		goto give_sigsegv;
  30.436 -
  30.437 -	/* Set up registers for signal handler */
  30.438 -	regs->esp = (unsigned long) frame;
  30.439 -	regs->eip = (unsigned long) ka->sa.sa_handler;
  30.440 -
  30.441 -	set_fs(USER_DS);
  30.442 -	regs->xds = __USER_DS;
  30.443 -	regs->xes = __USER_DS;
  30.444 -	regs->xss = __USER_DS;
  30.445 -	regs->xcs = __USER_CS;
  30.446 -	regs->eflags &= ~TF_MASK;
  30.447 -
  30.448 -#if DEBUG_SIG
  30.449 -	printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
  30.450 -		current->comm, current->pid, frame, regs->eip, frame->pretcode);
  30.451 -#endif
  30.452 -
  30.453 -	return;
  30.454 -
  30.455 -give_sigsegv:
  30.456 -	if (sig == SIGSEGV)
  30.457 -		ka->sa.sa_handler = SIG_DFL;
  30.458 -	force_sig(SIGSEGV, current);
  30.459 -}
  30.460 -
  30.461 -static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
  30.462 -			   sigset_t *set, struct pt_regs * regs)
  30.463 -{
  30.464 -	struct rt_sigframe *frame;
  30.465 -	int err = 0;
  30.466 -
  30.467 -	frame = get_sigframe(ka, regs, sizeof(*frame));
  30.468 -
  30.469 -	if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
  30.470 -		goto give_sigsegv;
  30.471 -
  30.472 -	err |= __put_user((current->exec_domain
  30.473 -		    	   && current->exec_domain->signal_invmap
  30.474 -		    	   && sig < 32
  30.475 -		    	   ? current->exec_domain->signal_invmap[sig]
  30.476 -			   : sig),
  30.477 -			  &frame->sig);
  30.478 -	err |= __put_user(&frame->info, &frame->pinfo);
  30.479 -	err |= __put_user(&frame->uc, &frame->puc);
  30.480 -	err |= copy_siginfo_to_user(&frame->info, info);
  30.481 -	if (err)
  30.482 -		goto give_sigsegv;
  30.483 -
  30.484 -	/* Create the ucontext.  */
  30.485 -	err |= __put_user(0, &frame->uc.uc_flags);
  30.486 -	err |= __put_user(0, &frame->uc.uc_link);
  30.487 -	err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
  30.488 -	err |= __put_user(sas_ss_flags(regs->esp),
  30.489 -			  &frame->uc.uc_stack.ss_flags);
  30.490 -	err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
  30.491 -	err |= setup_sigcontext(&frame->uc.uc_mcontext, &frame->fpstate,
  30.492 -			        regs, set->sig[0]);
  30.493 -	err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
  30.494 -	if (err)
  30.495 -		goto give_sigsegv;
  30.496 -
  30.497 -	/* Set up to return from userspace.  If provided, use a stub
  30.498 -	   already in userspace.  */
  30.499 -	if (ka->sa.sa_flags & SA_RESTORER) {
  30.500 -		err |= __put_user(ka->sa.sa_restorer, &frame->pretcode);
  30.501 -	} else {
  30.502 -		err |= __put_user(frame->retcode, &frame->pretcode);
  30.503 -		/* This is movl $,%eax ; int $0x80 */
  30.504 -		err |= __put_user(0xb8, (char *)(frame->retcode+0));
  30.505 -		err |= __put_user(__NR_rt_sigreturn, (int *)(frame->retcode+1));
  30.506 -		err |= __put_user(0x80cd, (short *)(frame->retcode+5));
  30.507 -	}
  30.508 -
  30.509 -	if (err)
  30.510 -		goto give_sigsegv;
  30.511 -
  30.512 -	/* Set up registers for signal handler */
  30.513 -	regs->esp = (unsigned long) frame;
  30.514 -	regs->eip = (unsigned long) ka->sa.sa_handler;
  30.515 -
  30.516 -	set_fs(USER_DS);
  30.517 -	regs->xds = __USER_DS;
  30.518 -	regs->xes = __USER_DS;
  30.519 -	regs->xss = __USER_DS;
  30.520 -	regs->xcs = __USER_CS;
  30.521 -	regs->eflags &= ~TF_MASK;
  30.522 -
  30.523 -#if DEBUG_SIG
  30.524 -	printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
  30.525 -		current->comm, current->pid, frame, regs->eip, frame->pretcode);
  30.526 -#endif
  30.527 -
  30.528 -	return;
  30.529 -
  30.530 -give_sigsegv:
  30.531 -	if (sig == SIGSEGV)
  30.532 -		ka->sa.sa_handler = SIG_DFL;
  30.533 -	force_sig(SIGSEGV, current);
  30.534 -}
  30.535 -
  30.536 -/*
  30.537 - * OK, we're invoking a handler
  30.538 - */	
  30.539 -
  30.540 -static void
  30.541 -handle_signal(unsigned long sig, struct k_sigaction *ka,
  30.542 -	      siginfo_t *info, sigset_t *oldset, struct pt_regs * regs)
  30.543 -{
  30.544 -	/* Are we from a system call? */
  30.545 -	if (regs->orig_eax >= 0) {
  30.546 -		/* If so, check system call restarting.. */
  30.547 -		switch (regs->eax) {
  30.548 -			case -ERESTARTNOHAND:
  30.549 -				regs->eax = -EINTR;
  30.550 -				break;
  30.551 -
  30.552 -			case -ERESTARTSYS:
  30.553 -				if (!(ka->sa.sa_flags & SA_RESTART)) {
  30.554 -					regs->eax = -EINTR;
  30.555 -					break;
  30.556 -				}
  30.557 -			/* fallthrough */
  30.558 -			case -ERESTARTNOINTR:
  30.559 -				regs->eax = regs->orig_eax;
  30.560 -				regs->eip -= 2;
  30.561 -		}
  30.562 -	}
  30.563 -
  30.564 -	/* Set up the stack frame */
  30.565 -	if (ka->sa.sa_flags & SA_SIGINFO)
  30.566 -		setup_rt_frame(sig, ka, info, oldset, regs);
  30.567 -	else
  30.568 -		setup_frame(sig, ka, oldset, regs);
  30.569 -
  30.570 -	if (ka->sa.sa_flags & SA_ONESHOT)
  30.571 -		ka->sa.sa_handler = SIG_DFL;
  30.572 -
  30.573 -	if (!(ka->sa.sa_flags & SA_NODEFER)) {
  30.574 -		spin_lock_irq(&current->sigmask_lock);
  30.575 -		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
  30.576 -		sigaddset(&current->blocked,sig);
  30.577 -		recalc_sigpending(current);
  30.578 -		spin_unlock_irq(&current->sigmask_lock);
  30.579 -	}
  30.580 -}
  30.581 -
  30.582 -/*
  30.583 - * Note that 'init' is a special process: it doesn't get signals it doesn't
  30.584 - * want to handle. Thus you cannot kill init even with a SIGKILL even by
  30.585 - * mistake.
  30.586 - */
  30.587 -int fastcall do_signal(struct pt_regs *regs, sigset_t *oldset)
  30.588 -{
  30.589 -	siginfo_t info;
  30.590 -	struct k_sigaction *ka;
  30.591 -
  30.592 -	/*
  30.593 -	 * We want the common case to go fast, which
  30.594 -	 * is why we may in certain cases get here from
  30.595 -	 * kernel mode. Just return without doing anything
  30.596 -	 * if so.
  30.597 -	 */
  30.598 -	if ((regs->xcs & 2) != 2)
  30.599 -		return 1;
  30.600 -
  30.601 -	if (!oldset)
  30.602 -		oldset = &current->blocked;
  30.603 -
  30.604 -	for (;;) {
  30.605 -		unsigned long signr;
  30.606 -
  30.607 -		spin_lock_irq(&current->sigmask_lock);
  30.608 -		signr = dequeue_signal(&current->blocked, &info);
  30.609 -		spin_unlock_irq(&current->sigmask_lock);
  30.610 -
  30.611 -		if (!signr)
  30.612 -			break;
  30.613 -
  30.614 -		if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) {
  30.615 -			/* Let the debugger run.  */
  30.616 -			current->exit_code = signr;
  30.617 -			current->state = TASK_STOPPED;
  30.618 -			notify_parent(current, SIGCHLD);
  30.619 -			schedule();
  30.620 -
  30.621 -			/* We're back.  Did the debugger cancel the sig?  */
  30.622 -			if (!(signr = current->exit_code))
  30.623 -				continue;
  30.624 -			current->exit_code = 0;
  30.625 -
  30.626 -			/* The debugger continued.  Ignore SIGSTOP.  */
  30.627 -			if (signr == SIGSTOP)
  30.628 -				continue;
  30.629 -
  30.630 -			/* Update the siginfo structure.  Is this good?  */
  30.631 -			if (signr != info.si_signo) {
  30.632 -				info.si_signo = signr;
  30.633 -				info.si_errno = 0;
  30.634 -				info.si_code = SI_USER;
  30.635 -				info.si_pid = current->p_pptr->pid;
  30.636 -				info.si_uid = current->p_pptr->uid;
  30.637 -			}
  30.638 -
  30.639 -			/* If the (new) signal is now blocked, requeue it.  */
  30.640 -			if (sigismember(&current->blocked, signr)) {
  30.641 -				send_sig_info(signr, &info, current);
  30.642 -				continue;
  30.643 -			}
  30.644 -		}
  30.645 -
  30.646 -		ka = &current->sig->action[signr-1];
  30.647 -		if (ka->sa.sa_handler == SIG_IGN) {
  30.648 -			if (signr != SIGCHLD)
  30.649 -				continue;
  30.650 -			/* Check for SIGCHLD: it's special.  */
  30.651 -			while (sys_wait4(-1, NULL, WNOHANG, NULL) > 0)
  30.652 -				/* nothing */;
  30.653 -			continue;
  30.654 -		}
  30.655 -
  30.656 -		if (ka->sa.sa_handler == SIG_DFL) {
  30.657 -			int exit_code = signr;
  30.658 -
  30.659 -			/* Init gets no signals it doesn't want.  */
  30.660 -			if (current->pid == 1)
  30.661 -				continue;
  30.662 -
  30.663 -			switch (signr) {
  30.664 -			case SIGCONT: case SIGCHLD: case SIGWINCH: case SIGURG:
  30.665 -				continue;
  30.666 -
  30.667 -			case SIGTSTP: case SIGTTIN: case SIGTTOU:
  30.668 -				if (is_orphaned_pgrp(current->pgrp))
  30.669 -					continue;
  30.670 -				/* FALLTHRU */
  30.671 -
  30.672 -			case SIGSTOP: {
  30.673 -				struct signal_struct *sig;
  30.674 -				current->state = TASK_STOPPED;
  30.675 -				current->exit_code = signr;
  30.676 -				sig = current->p_pptr->sig;
  30.677 -				if (sig && !(sig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
  30.678 -					notify_parent(current, SIGCHLD);
  30.679 -				schedule();
  30.680 -				continue;
  30.681 -			}
  30.682 -
  30.683 -			case SIGQUIT: case SIGILL: case SIGTRAP:
  30.684 -			case SIGABRT: case SIGFPE: case SIGSEGV:
  30.685 -			case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
  30.686 -				if (do_coredump(signr, regs))
  30.687 -					exit_code |= 0x80;
  30.688 -				/* FALLTHRU */
  30.689 -
  30.690 -			default:
  30.691 -				sig_exit(signr, exit_code, &info);
  30.692 -				/* NOTREACHED */
  30.693 -			}
  30.694 -		}
  30.695 -
  30.696 -		/* Reenable any watchpoints before delivering the
  30.697 -		 * signal to user space. The processor register will
  30.698 -		 * have been cleared if the watchpoint triggered
  30.699 -		 * inside the kernel.
  30.700 -		 */
  30.701 -                if ( current->thread.debugreg[7] != 0 )
  30.702 -                    HYPERVISOR_set_debugreg(7, current->thread.debugreg[7]);
  30.703 -
  30.704 -		/* Whee!  Actually deliver the signal.  */
  30.705 -		handle_signal(signr, ka, &info, oldset, regs);
  30.706 -		return 1;
  30.707 -	}
  30.708 -
  30.709 -	/* Did we come from a system call? */
  30.710 -	if (regs->orig_eax >= 0) {
  30.711 -		/* Restart the system call - no handlers present */
  30.712 -		if (regs->eax == -ERESTARTNOHAND ||
  30.713 -		    regs->eax == -ERESTARTSYS ||
  30.714 -		    regs->eax == -ERESTARTNOINTR) {
  30.715 -			regs->eax = regs->orig_eax;
  30.716 -			regs->eip -= 2;
  30.717 -		}
  30.718 -	}
  30.719 -	return 0;
  30.720 -}
    31.1 --- a/linux-2.4.28-xen-sparse/arch/xen/kernel/time.c	Wed Jan 19 13:20:15 2005 +0000
    31.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.3 @@ -1,721 +0,0 @@
    31.4 -/* -*-  Mode:C; c-basic-offset:4; tab-width:4 -*-
    31.5 - ****************************************************************************
    31.6 - * (C) 2002-2003 - Rolf Neugebauer - Intel Research Cambridge
    31.7 - * (C) 2002-2003 - Keir Fraser - University of Cambridge
    31.8 - ****************************************************************************
    31.9 - *
   31.10 - *        File: arch/xen/kernel/time.c
   31.11 - *      Author: Rolf Neugebauer and Keir Fraser
   31.12 - * 
   31.13 - * Description: Interface with Xen to get correct notion of time
   31.14 - */
   31.15 -
   31.16 -/*
   31.17 - *  linux/arch/i386/kernel/time.c
   31.18 - *
   31.19 - *  Copyright (C) 1991, 1992, 1995  Linus Torvalds
   31.20 - *
   31.21 - * This file contains the PC-specific time handling details:
   31.22 - * reading the RTC at bootup, etc..
   31.23 - * 1994-07-02    Alan Modra
   31.24 - * fixed set_rtc_mmss, fixed time.year for >= 2000, new mktime
   31.25 - * 1995-03-26    Markus Kuhn
   31.26 - *      fixed 500 ms bug at call to set_rtc_mmss, fixed DS12887
   31.27 - *      precision CMOS clock update
   31.28 - * 1996-05-03    Ingo Molnar
   31.29 - *      fixed time warps in do_[slow|fast]_gettimeoffset()
   31.30 - * 1997-09-10 Updated NTP code according to technical memorandum Jan '96
   31.31 - *  "A Kernel Model for Precision Timekeeping" by Dave Mills
   31.32 - * 1998-09-05    (Various)
   31.33 - * More robust do_fast_gettimeoffset() algorithm implemented
   31.34 - * (works with APM, Cyrix 6x86MX and Centaur C6),
   31.35 - * monotonic gettimeofday() with fast_get_timeoffset(),
   31.36 - * drift-proof precision TSC calibration on boot
   31.37 - * (C. Scott Ananian <cananian@alumni.princeton.edu>, Andrew D.
   31.38 - * Balsa <andrebalsa@altern.org>, Philip Gladstone <philip@raptor.com>;
   31.39 - * ported from 2.0.35 Jumbo-9 by Michael Krause <m.krause@tu-harburg.de>).
   31.40 - * 1998-12-16    Andrea Arcangeli
   31.41 - * Fixed Jumbo-9 code in 2.1.131: do_gettimeofday was missing 1 jiffy
   31.42 - * because was not accounting lost_ticks.
   31.43 - * 1998-12-24 Copyright (C) 1998  Andrea Arcangeli
   31.44 - * Fixed a xtime SMP race (we need the xtime_lock rw spinlock to
   31.45 - * serialize accesses to xtime/lost_ticks).
   31.46 - */
   31.47 -
   31.48 -#include <asm/smp.h>
   31.49 -#include <asm/irq.h>
   31.50 -#include <asm/msr.h>
   31.51 -#include <asm/delay.h>
   31.52 -#include <asm/mpspec.h>
   31.53 -#include <asm/uaccess.h>
   31.54 -#include <asm/processor.h>
   31.55 -
   31.56 -#include <asm/div64.h>
   31.57 -#include <asm/hypervisor.h>
   31.58 -#include <asm-xen/xen-public/dom0_ops.h>
   31.59 -
   31.60 -#include <linux/mc146818rtc.h>
   31.61 -#include <linux/kernel.h>
   31.62 -#include <linux/interrupt.h>
   31.63 -#include <linux/time.h>
   31.64 -#include <linux/init.h>
   31.65 -#include <linux/smp.h>
   31.66 -#include <linux/irq.h>
   31.67 -#include <linux/sysctl.h>
   31.68 -#include <linux/sysrq.h>
   31.69 -
   31.70 -spinlock_t rtc_lock = SPIN_LOCK_UNLOCKED;
   31.71 -extern rwlock_t xtime_lock;
   31.72 -extern unsigned long wall_jiffies;
   31.73 -
   31.74 -unsigned long cpu_khz; /* get this from Xen, used elsewhere */
   31.75 -
   31.76 -static unsigned int rdtsc_bitshift;
   31.77 -static u32 st_scale_f; /* convert ticks -> usecs */
   31.78 -static u32 st_scale_i; /* convert ticks -> usecs */
   31.79 -
   31.80 -/* These are peridically updated in shared_info, and then copied here. */
   31.81 -static u32 shadow_tsc_stamp;
   31.82 -static u64 shadow_system_time;
   31.83 -static u32 shadow_time_version;
   31.84 -static struct timeval shadow_tv;
   31.85 -
   31.86 -/*
   31.87 - * We use this to ensure that gettimeofday() is monotonically increasing. We
   31.88 - * only break this guarantee if the wall clock jumps backwards "a long way".
   31.89 - */
   31.90 -static struct timeval last_seen_tv = {0,0};
   31.91 -
   31.92 -#ifdef CONFIG_XEN_PRIVILEGED_GUEST
   31.93 -/* Periodically propagate synchronised time base to the RTC and to Xen. */
   31.94 -static long last_update_to_rtc, last_update_to_xen;
   31.95 -#endif
   31.96 -
   31.97 -/* Periodically take synchronised time base from Xen, if we need it. */
   31.98 -static long last_update_from_xen;   /* UTC seconds when last read Xen clock. */
   31.99 -
  31.100 -/* Keep track of last time we did processing/updating of jiffies and xtime. */
  31.101 -static u64 processed_system_time;   /* System time (ns) at last processing. */
  31.102 -
  31.103 -#define NS_PER_TICK (1000000000ULL/HZ)
  31.104 -
  31.105 -#ifndef NSEC_PER_SEC
  31.106 -#define NSEC_PER_SEC (1000000000L)
  31.107 -#endif
  31.108 -
  31.109 -#define HANDLE_USEC_UNDERFLOW(_tv)         \
  31.110 -    do {                                   \
  31.111 -        while ( (_tv).tv_usec < 0 )        \
  31.112 -        {                                  \
  31.113 -            (_tv).tv_usec += 1000000;      \
  31.114 -            (_tv).tv_sec--;                \
  31.115 -        }                                  \
  31.116 -    } while ( 0 )
  31.117 -#define HANDLE_USEC_OVERFLOW(_tv)          \
  31.118 -    do {                                   \
  31.119 -        while ( (_tv).tv_usec >= 1000000 ) \
  31.120 -        {                                  \
  31.121 -            (_tv).tv_usec -= 1000000;      \
  31.122 -            (_tv).tv_sec++;                \
  31.123 -        }                                  \
  31.124 -    } while ( 0 )
  31.125 -static inline void __normalize_time(time_t *sec, s64 *nsec)
  31.126 -{
  31.127 -	while (*nsec >= NSEC_PER_SEC) {
  31.128 -		(*nsec) -= NSEC_PER_SEC;
  31.129 -		(*sec)++;
  31.130 -	}
  31.131 -	while (*nsec < 0) {
  31.132 -		(*nsec) += NSEC_PER_SEC;
  31.133 -		(*sec)--;
  31.134 -	}
  31.135 -}
  31.136 -
  31.137 -/* Dynamically-mapped IRQs. */
  31.138 -static int time_irq, debug_irq;
  31.139 -
  31.140 -/* Does this guest OS track Xen time, or set its wall clock independently? */
  31.141 -static int independent_wallclock = 0;
  31.142 -static int __init __independent_wallclock(char *str)
  31.143 -{
  31.144 -    independent_wallclock = 1;
  31.145 -    return 1;
  31.146 -}
  31.147 -__setup("independent_wallclock", __independent_wallclock);
  31.148 -#define INDEPENDENT_WALLCLOCK() \
  31.149 -    (independent_wallclock || (xen_start_info.flags & SIF_INITDOMAIN))
  31.150 -
  31.151 -#ifdef CONFIG_XEN_PRIVILEGED_GUEST
  31.152 -/*
  31.153 - * In order to set the CMOS clock precisely, set_rtc_mmss has to be
  31.154 - * called 500 ms after the second nowtime has started, because when
  31.155 - * nowtime is written into the registers of the CMOS clock, it will
  31.156 - * jump to the next second precisely 500 ms later. Check the Motorola
  31.157 - * MC146818A or Dallas DS12887 data sheet for details.
  31.158 - *
  31.159 - * BUG: This routine does not handle hour overflow properly; it just
  31.160 - *      sets the minutes. Usually you'll only notice that after reboot!
  31.161 - */
  31.162 -static int set_rtc_mmss(unsigned long nowtime)
  31.163 -{
  31.164 -    int retval = 0;
  31.165 -    int real_seconds, real_minutes, cmos_minutes;
  31.166 -    unsigned char save_control, save_freq_select;
  31.167 -
  31.168 -    /* gets recalled with irq locally disabled */
  31.169 -    spin_lock(&rtc_lock);
  31.170 -    save_control = CMOS_READ(RTC_CONTROL);
  31.171 -    CMOS_WRITE((save_control|RTC_SET), RTC_CONTROL);
  31.172 -
  31.173 -    save_freq_select = CMOS_READ(RTC_FREQ_SELECT);
  31.174 -    CMOS_WRITE((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT);
  31.175 -
  31.176 -    cmos_minutes = CMOS_READ(RTC_MINUTES);
  31.177 -    if ( !(save_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD )
  31.178 -        BCD_TO_BIN(cmos_minutes);
  31.179 -
  31.180 -    /*
  31.181 -     * since we're only adjusting minutes and seconds, don't interfere with
  31.182 -     * hour overflow. This avoids messing with unknown time zones but requires
  31.183 -     * your RTC not to be off by more than 15 minutes
  31.184 -     */
  31.185 -    real_seconds = nowtime % 60;
  31.186 -    real_minutes = nowtime / 60;
  31.187 -    if ( ((abs(real_minutes - cmos_minutes) + 15)/30) & 1 )
  31.188 -        real_minutes += 30;  /* correct for half hour time zone */
  31.189 -    real_minutes %= 60;
  31.190 -
  31.191 -    if ( abs(real_minutes - cmos_minutes) < 30 )
  31.192 -    {
  31.193 -        if ( !(save_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD )
  31.194 -        {
  31.195 -            BIN_TO_BCD(real_seconds);
  31.196 -            BIN_TO_BCD(real_minutes);
  31.197 -        }
  31.198 -        CMOS_WRITE(real_seconds,RTC_SECONDS);
  31.199 -        CMOS_WRITE(real_minutes,RTC_MINUTES);
  31.200 -    }
  31.201 -    else 
  31.202 -    {
  31.203 -        printk(KERN_WARNING
  31.204 -               "set_rtc_mmss: can't update from %d to %d\n",
  31.205 -               cmos_minutes, real_minutes);
  31.206 -        retval = -1;
  31.207 -    }
  31.208 -
  31.209 -    /* The following flags have to be released exactly in this order,
  31.210 -     * otherwise the DS12887 (popular MC146818A clone with integrated
  31.211 -     * battery and quartz) will not reset the oscillator and will not
  31.212 -     * update precisely 500 ms later. You won't find this mentioned in
  31.213 -     * the Dallas Semiconductor data sheets, but who believes data
  31.214 -     * sheets anyway ...                           -- Markus Kuhn
  31.215 -     */
  31.216 -    CMOS_WRITE(save_control, RTC_CONTROL);
  31.217 -    CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT);
  31.218 -    spin_unlock(&rtc_lock);
  31.219 -
  31.220 -    return retval;
  31.221 -}
  31.222 -#endif
  31.223 -
  31.224 -
  31.225 -/*
  31.226 - * Reads a consistent set of time-base values from Xen, into a shadow data
  31.227 - * area. Must be called with the xtime_lock held for writing.
  31.228 - */
  31.229 -static void __get_time_values_from_xen(void)
  31.230 -{
  31.231 -    do {
  31.232 -        shadow_time_version = HYPERVISOR_shared_info->time_version2;
  31.233 -        rmb();
  31.234 -        shadow_tv.tv_sec    = HYPERVISOR_shared_info->wc_sec;
  31.235 -        shadow_tv.tv_usec   = HYPERVISOR_shared_info->wc_usec;
  31.236 -        shadow_tsc_stamp    = 
  31.237 -            (u32)(HYPERVISOR_shared_info->tsc_timestamp >> rdtsc_bitshift);
  31.238 -        shadow_system_time  = HYPERVISOR_shared_info->system_time;
  31.239 -        rmb();
  31.240 -    }
  31.241 -    while ( shadow_time_version != HYPERVISOR_shared_info->time_version1 );
  31.242 -}
  31.243 -
  31.244 -#define TIME_VALUES_UP_TO_DATE \
  31.245 - ({ rmb(); (shadow_time_version == HYPERVISOR_shared_info->time_version2); })
  31.246 -
  31.247 -
  31.248 -/*
  31.249 - * Returns the system time elapsed, in ns, since the current shadow_timestamp
  31.250 - * was calculated. Must be called with the xtime_lock held for reading.
  31.251 - */
  31.252 -static inline unsigned long __get_time_delta_usecs(void)
  31.253 -{
  31.254 -    s32      delta_tsc;
  31.255 -    u32      low;
  31.256 -    u64      delta, tsc;
  31.257 -
  31.258 -    rdtscll(tsc);
  31.259 -    low = (u32)(tsc >> rdtsc_bitshift);
  31.260 -    delta_tsc = (s32)(low - shadow_tsc_stamp);
  31.261 -    if ( unlikely(delta_tsc < 0) ) delta_tsc = 0;
  31.262 -    delta = ((u64)delta_tsc * st_scale_f);
  31.263 -    delta >>= 32;
  31.264 -    delta += ((u64)delta_tsc * st_scale_i);
  31.265 -
  31.266 -    return (unsigned long)delta;
  31.267 -}
  31.268 -
  31.269 -
  31.270 -/*
  31.271 - * Returns the current time-of-day in UTC timeval format.
  31.272 - */
  31.273 -void do_gettimeofday(struct timeval *tv)
  31.274 -{
  31.275 -    unsigned long flags, lost;
  31.276 -    struct timeval _tv;
  31.277 -    s64 nsec;
  31.278 -
  31.279 - again:
  31.280 -    read_lock_irqsave(&xtime_lock, flags);
  31.281 -
  31.282 -    _tv.tv_usec = __get_time_delta_usecs();
  31.283 -    if ( (lost = (jiffies - wall_jiffies)) != 0 )
  31.284 -        _tv.tv_usec += lost * (1000000 / HZ);
  31.285 -    _tv.tv_sec   = xtime.tv_sec;
  31.286 -    _tv.tv_usec += xtime.tv_usec;
  31.287 -
  31.288 -    nsec = shadow_system_time - processed_system_time;
  31.289 -    __normalize_time(&_tv.tv_sec, &nsec);
  31.290 -    _tv.tv_usec += (long)nsec / 1000L;
  31.291 -
  31.292 -    if ( unlikely(!TIME_VALUES_UP_TO_DATE) )
  31.293 -    {
  31.294 -        /*
  31.295 -         * We may have blocked for a long time, rendering our calculations
  31.296 -         * invalid (e.g. the time delta may have overflowed). Detect that
  31.297 -         * and recalculate with fresh values.
  31.298 -         */
  31.299 -        read_unlock_irqrestore(&xtime_lock, flags);
  31.300 -        write_lock_irqsave(&xtime_lock, flags);
  31.301 -        __get_time_values_from_xen();
  31.302 -        write_unlock_irqrestore(&xtime_lock, flags);
  31.303 -        goto again;
  31.304 -    }
  31.305 -
  31.306 -    HANDLE_USEC_OVERFLOW(_tv);
  31.307 -
  31.308 -    /* Ensure that time-of-day is monotonically increasing. */
  31.309 -    if ( (_tv.tv_sec < last_seen_tv.tv_sec) ||
  31.310 -         ((_tv.tv_sec == last_seen_tv.tv_sec) &&
  31.311 -          (_tv.tv_usec < last_seen_tv.tv_usec)) )
  31.312 -        _tv = last_seen_tv;
  31.313 -    last_seen_tv = _tv;
  31.314 -
  31.315 -    read_unlock_irqrestore(&xtime_lock, flags);
  31.316 -
  31.317 -    *tv = _tv;
  31.318 -}
  31.319 -
  31.320 -
  31.321 -/*
  31.322 - * Sets the current time-of-day based on passed-in UTC timeval parameter.
  31.323 - */
  31.324 -void do_settimeofday(struct timeval *tv)
  31.325 -{
  31.326 -    struct timeval newtv;
  31.327 -    s64            nsec;
  31.328 -    suseconds_t    usec;
  31.329 -    
  31.330 -    if ( !INDEPENDENT_WALLCLOCK() )
  31.331 -        return;
  31.332 -    
  31.333 -    write_lock_irq(&xtime_lock);
  31.334 -    
  31.335 -    /*
  31.336 -     * Ensure we don't get blocked for a long time so that our time delta
  31.337 -     * overflows. If that were to happen then our shadow time values would
  31.338 -     * be stale, so we can retry with fresh ones.
  31.339 -     */
  31.340 - again:
  31.341 -    usec = tv->tv_usec - __get_time_delta_usecs();
  31.342 -
  31.343 -    nsec = shadow_system_time - processed_system_time;
  31.344 -    __normalize_time(&tv->tv_sec, &nsec);
  31.345 -    usec -= (long)nsec / 1000L;
  31.346 -
  31.347 -    if ( unlikely(!TIME_VALUES_UP_TO_DATE) )
  31.348 -    {
  31.349 -        __get_time_values_from_xen();
  31.350 -        goto again;
  31.351 -    }
  31.352 -    tv->tv_usec = usec;
  31.353 -    
  31.354 -    HANDLE_USEC_UNDERFLOW(*tv);
  31.355 -    
  31.356 -    newtv = *tv;
  31.357 -    
  31.358 -    tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ);
  31.359 -    HANDLE_USEC_UNDERFLOW(*tv);
  31.360 -
  31.361 -    xtime = *tv;
  31.362 -    time_adjust = 0;  /* stop active adjtime() */
  31.363 -    time_status |= STA_UNSYNC;
  31.364 -    time_maxerror = NTP_PHASE_LIMIT;
  31.365 -    time_esterror = NTP_PHASE_LIMIT;
  31.366 -
  31.367 -    /* Reset all our running time counts. They make no sense now. */
  31.368 -    last_seen_tv.tv_sec = 0;
  31.369 -    last_update_from_xen = 0;
  31.370 -
  31.371 -#ifdef CONFIG_XEN_PRIVILEGED_GUEST
  31.372 -    if ( xen_start_info.flags & SIF_INITDOMAIN )
  31.373 -    {
  31.374 -        dom0_op_t op;
  31.375 -        last_update_to_rtc = last_update_to_xen = 0;
  31.376 -        op.cmd = DOM0_SETTIME;
  31.377 -        op.u.settime.secs        = newtv.tv_sec;
  31.378 -        op.u.settime.usecs       = newtv.tv_usec;
  31.379 -        op.u.settime.system_time = shadow_system_time;
  31.380 -        write_unlock_irq(&xtime_lock);
  31.381 -        HYPERVISOR_dom0_op(&op);
  31.382 -    }
  31.383 -    else
  31.384 -#endif
  31.385 -    {
  31.386 -        write_unlock_irq(&xtime_lock);
  31.387 -    }
  31.388 -}
  31.389 -
  31.390 -
  31.391 -asmlinkage long sys_stime(int *tptr)
  31.392 -{
  31.393 -    int value;
  31.394 -    struct timeval tv;
  31.395 -
  31.396 -    if ( !capable(CAP_SYS_TIME) )
  31.397 -        return -EPERM;
  31.398 -
  31.399 -    if ( get_user(value, tptr) )
  31.400 -        return -EFAULT;
  31.401 -
  31.402 -    tv.tv_sec  = value;
  31.403 -    tv.tv_usec = 0;
  31.404 -
  31.405 -    do_settimeofday(&tv);
  31.406 -
  31.407 -    return 0;
  31.408 -}
  31.409 -
  31.410 -
  31.411 -/* Convert jiffies to system time. Call with xtime_lock held for reading. */
  31.412 -static inline u64 __jiffies_to_st(unsigned long j) 
  31.413 -{
  31.414 -    return processed_system_time + ((j - jiffies) * NS_PER_TICK);
  31.415 -}
  31.416 -
  31.417 -
  31.418 -static inline void do_timer_interrupt(int irq, void *dev_id,
  31.419 -                                      struct pt_regs *regs)
  31.420 -{
  31.421 -    s64 delta;
  31.422 -    unsigned long ticks = 0;
  31.423 -    long sec_diff;
  31.424 -
  31.425 -    do {
  31.426 -        __get_time_values_from_xen();
  31.427 -        
  31.428 -        delta = (s64)(shadow_system_time + 
  31.429 -                      ((s64)__get_time_delta_usecs() * 1000LL) -
  31.430 -                      processed_system_time);
  31.431 -    }
  31.432 -    while ( !TIME_VALUES_UP_TO_DATE );
  31.433 -
  31.434 -    if ( unlikely(delta < 0) )
  31.435 -    {
  31.436 -        printk("Timer ISR: Time went backwards: %lld\n", delta);
  31.437 -        return;
  31.438 -    }
  31.439 -
  31.440 -    /* Process elapsed jiffies since last call. */
  31.441 -    while ( delta >= NS_PER_TICK )
  31.442 -    {
  31.443 -        ticks++;
  31.444 -        delta -= NS_PER_TICK;
  31.445 -        processed_system_time += NS_PER_TICK;
  31.446 -    }
  31.447 -
  31.448 -    if ( ticks != 0 )
  31.449 -    {
  31.450 -        do_timer_ticks(ticks);
  31.451 -
  31.452 -        if ( user_mode(regs) )
  31.453 -            update_process_times_us(ticks, 0);
  31.454 -        else
  31.455 -            update_process_times_us(0, ticks);
  31.456 -    }
  31.457 -
  31.458 -    /*
  31.459 -     * Take synchronised time from Xen once a minute if we're not
  31.460 -     * synchronised ourselves, and we haven't chosen to keep an independent
  31.461 -     * time base.
  31.462 -     */
  31.463 -    if ( !INDEPENDENT_WALLCLOCK() &&
  31.464 -         ((time_status & STA_UNSYNC) != 0) &&
  31.465 -         (xtime.tv_sec > (last_update_from_xen + 60)) )
  31.466 -    {
  31.467 -        /* Adjust shadow timeval for jiffies that haven't updated xtime yet. */
  31.468 -        shadow_tv.tv_usec -= (jiffies - wall_jiffies) * (1000000/HZ);
  31.469 -        HANDLE_USEC_UNDERFLOW(shadow_tv);
  31.470 -
  31.471 -        /*
  31.472 -         * Reset our running time counts if they are invalidated by a warp
  31.473 -         * backwards of more than 500ms.
  31.474 -         */
  31.475 -        sec_diff = xtime.tv_sec - shadow_tv.tv_sec;
  31.476 -        if ( unlikely(abs(sec_diff) > 1) ||
  31.477 -             unlikely(((sec_diff * 1000000) + 
  31.478 -                       xtime.tv_usec - shadow_tv.tv_usec) > 500000) )
  31.479 -        {
  31.480 -#ifdef CONFIG_XEN_PRIVILEGED_GUEST
  31.481 -            last_update_to_rtc = last_update_to_xen = 0;
  31.482 -#endif
  31.483 -            last_seen_tv.tv_sec = 0;
  31.484 -        }
  31.485 -
  31.486 -        /* Update our unsynchronised xtime appropriately. */
  31.487 -        xtime = shadow_tv;
  31.488 -
  31.489 -        last_update_from_xen = xtime.tv_sec;
  31.490 -    }
  31.491 -
  31.492 -#ifdef CONFIG_XEN_PRIVILEGED_GUEST
  31.493 -    if ( (xen_start_info.flags & SIF_INITDOMAIN) &&
  31.494 -         ((time_status & STA_UNSYNC) == 0) )
  31.495 -    {
  31.496 -        /* Send synchronised time to Xen approximately every minute. */
  31.497 -        if ( xtime.tv_sec > (last_update_to_xen + 60) )
  31.498 -        {
  31.499 -            dom0_op_t op;
  31.500 -            struct timeval tv = xtime;
  31.501 -
  31.502 -            tv.tv_usec += (jiffies - wall_jiffies) * (1000000/HZ);
  31.503 -            HANDLE_USEC_OVERFLOW(tv);
  31.504 -
  31.505 -            op.cmd = DOM0_SETTIME;
  31.506 -            op.u.settime.secs        = tv.tv_sec;
  31.507 -            op.u.settime.usecs       = tv.tv_usec;
  31.508 -            op.u.settime.system_time = shadow_system_time;
  31.509 -            HYPERVISOR_dom0_op(&op);
  31.510 -
  31.511 -            last_update_to_xen = xtime.tv_sec;
  31.512 -        }
  31.513 -
  31.514 -        /*
  31.515 -         * If we have an externally synchronized Linux clock, then update CMOS
  31.516 -         * clock accordingly every ~11 minutes. Set_rtc_mmss() has to be called
  31.517 -         * as close as possible to 500 ms before the new second starts.
  31.518 -         */
  31.519 -        if ( (xtime.tv_sec > (last_update_to_rtc + 660)) &&
  31.520 -             (xtime.tv_usec >= (500000 - ((unsigned) tick) / 2)) &&
  31.521 -             (xtime.tv_usec <= (500000 + ((unsigned) tick) / 2)) )
  31.522 -        {
  31.523 -            if ( set_rtc_mmss(xtime.tv_sec) == 0 )
  31.524 -                last_update_to_rtc = xtime.tv_sec;
  31.525 -            else
  31.526 -                last_update_to_rtc = xtime.tv_sec - 600;
  31.527 -        }
  31.528 -    }
  31.529 -#endif
  31.530 -}
  31.531 -
  31.532 -
  31.533 -static void timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  31.534 -{
  31.535 -    write_lock(&xtime_lock);
  31.536 -    do_timer_interrupt(irq, NULL, regs);
  31.537 -    write_unlock(&xtime_lock);
  31.538 -}
  31.539 -
  31.540 -static struct irqaction irq_timer = {
  31.541 -    timer_interrupt, 
  31.542 -    SA_INTERRUPT, 
  31.543 -    0, 
  31.544 -    "timer", 
  31.545 -    NULL, 
  31.546 -    NULL
  31.547 -};
  31.548 -
  31.549 -
  31.550 -/*
  31.551 - * This function works out when the the next timer function has to be
  31.552 - * executed (by looking at the timer list) and sets the Xen one-shot
  31.553 - * domain timer to the appropriate value. This is typically called in
  31.554 - * cpu_idle() before the domain blocks.
  31.555 - * 
  31.556 - * The function returns a non-0 value on error conditions.
  31.557 - * 
  31.558 - * It must be called with interrupts disabled.
  31.559 - */
  31.560 -extern spinlock_t timerlist_lock;
  31.561 -int set_timeout_timer(void)
  31.562 -{
  31.563 -    struct timer_list *timer;
  31.564 -    u64 alarm = 0;
  31.565 -    int ret = 0;
  31.566 -
  31.567 -    spin_lock(&timerlist_lock);
  31.568 -
  31.569 -    /*
  31.570 -     * This is safe against long blocking (since calculations are not based on 
  31.571 -     * TSC deltas). It is also safe against warped system time since
  31.572 -     * suspend-resume is cooperative and we would first get locked out. It is 
  31.573 -     * safe against normal updates of jiffies since interrupts are off.
  31.574 -     */
  31.575 -    if ( (timer = next_timer_event()) != NULL )
  31.576 -        alarm = __jiffies_to_st(timer->expires);
  31.577 -
  31.578 -    /* Tasks on the timer task queue expect to be executed on the next tick. */
  31.579 -    if ( TQ_ACTIVE(tq_timer) )
  31.580 -        alarm = __jiffies_to_st(jiffies + 1);
  31.581 -
  31.582 -    /* Failure is pretty bad, but we'd best soldier on. */
  31.583 -    if ( HYPERVISOR_set_timer_op(alarm) != 0 )
  31.584 -        ret = -1;
  31.585 -    
  31.586 -    spin_unlock(&timerlist_lock);
  31.587 -
  31.588 -    return ret;
  31.589 -}
  31.590 -
  31.591 -
  31.592 -/* Time debugging. */
  31.593 -static void dbg_time_int(int irq, void *dev_id, struct pt_regs *ptregs)
  31.594 -{
  31.595 -    unsigned long flags, j;
  31.596 -    u64 s_now, j_st;
  31.597 -    struct timeval s_tv, tv;
  31.598 -
  31.599 -    struct timer_list *timer;
  31.600 -    u64 t_st;
  31.601 -
  31.602 -    read_lock_irqsave(&xtime_lock, flags);
  31.603 -    s_tv.tv_sec  = shadow_tv.tv_sec;
  31.604 -    s_tv.tv_usec = shadow_tv.tv_usec;
  31.605 -    s_now        = shadow_system_time;
  31.606 -    read_unlock_irqrestore(&xtime_lock, flags);
  31.607 -
  31.608 -    do_gettimeofday(&tv);
  31.609 -
  31.610 -    j = jiffies;
  31.611 -    j_st = __jiffies_to_st(j);
  31.612 -
  31.613 -    timer = next_timer_event();
  31.614 -    t_st = __jiffies_to_st(timer->expires);
  31.615 -
  31.616 -    printk(KERN_ALERT "time: shadow_st=0x%X:%08X\n",
  31.617 -           (u32)(s_now>>32), (u32)s_now);
  31.618 -    printk(KERN_ALERT "time: wct=%lds %ldus shadow_wct=%lds %ldus\n",
  31.619 -           tv.tv_sec, tv.tv_usec, s_tv.tv_sec, s_tv.tv_usec);
  31.620 -    printk(KERN_ALERT "time: jiffies=%lu(0x%X:%08X) timeout=%lu(0x%X:%08X)\n",
  31.621 -           jiffies,(u32)(j_st>>32), (u32)j_st,
  31.622 -           timer->expires,(u32)(t_st>>32), (u32)t_st);
  31.623 -    printk(KERN_ALERT "time: processed_system_time=0x%X:%08X\n",
  31.624 -           (u32)(processed_system_time>>32), (u32)processed_system_time);
  31.625 -
  31.626 -#ifdef CONFIG_MAGIC_SYSRQ
  31.627 -    handle_sysrq('t',NULL,NULL,NULL);
  31.628 -#endif
  31.629 -}
  31.630 -
  31.631 -static struct irqaction dbg_time = {
  31.632 -    dbg_time_int, 
  31.633 -    SA_SHIRQ, 
  31.634 -    0, 
  31.635 -    "timer_dbg", 
  31.636 -    &dbg_time_int,
  31.637 -    NULL
  31.638 -};
  31.639 -
  31.640 -void __init time_init(void)
  31.641 -{
  31.642 -    unsigned long long alarm;
  31.643 -    u64 __cpu_khz, __cpu_ghz, cpu_freq, scale, scale2;
  31.644 -    unsigned int cpu_ghz;
  31.645 -
  31.646 -    __cpu_khz = __cpu_ghz = cpu_freq = HYPERVISOR_shared_info->cpu_freq;
  31.647 -    do_div(__cpu_khz, 1000UL);
  31.648 -    cpu_khz = (u32)__cpu_khz;
  31.649 -    do_div(__cpu_ghz, 1000000000UL);
  31.650 -    cpu_ghz = (unsigned int)__cpu_ghz;
  31.651 -
  31.652 -    printk("Xen reported: %lu.%03lu MHz processor.\n", 
  31.653 -           cpu_khz / 1000, cpu_khz % 1000);
  31.654 -
  31.655 -    xtime.tv_sec = HYPERVISOR_shared_info->wc_sec;
  31.656 -    xtime.tv_usec = HYPERVISOR_shared_info->wc_usec;
  31.657 -    processed_system_time = shadow_system_time;
  31.658 -
  31.659 -    for ( rdtsc_bitshift = 0; cpu_ghz != 0; rdtsc_bitshift++, cpu_ghz >>= 1 )
  31.660 -        continue;
  31.661 -
  31.662 -    scale = 1000000LL << (32 + rdtsc_bitshift);
  31.663 -    do_div(scale, (u32)cpu_freq);
  31.664 -
  31.665 -    if ( (cpu_freq >> 32) != 0 )
  31.666 -    {
  31.667 -        scale2 = 1000000LL << rdtsc_bitshift;
  31.668 -        do_div(scale2, (u32)(cpu_freq>>32));
  31.669 -        scale += scale2;
  31.670 -    }
  31.671 -
  31.672 -    st_scale_f = scale & 0xffffffff;
  31.673 -    st_scale_i = scale >> 32;
  31.674 -
  31.675 -    __get_time_values_from_xen();
  31.676 -    processed_system_time = shadow_system_time;
  31.677 -
  31.678 -    time_irq  = bind_virq_to_irq(VIRQ_TIMER);
  31.679 -    debug_irq = bind_virq_to_irq(VIRQ_DEBUG);
  31.680 -
  31.681 -    (void)setup_irq(time_irq, &irq_timer);
  31.682 -    (void)setup_irq(debug_irq, &dbg_time);
  31.683 -
  31.684 -    rdtscll(alarm);
  31.685 -}
  31.686 -
  31.687 -void time_suspend(void)
  31.688 -{
  31.689 -}
  31.690 -
  31.691 -void time_resume(void)
  31.692 -{
  31.693 -    unsigned long flags;
  31.694 -    write_lock_irqsave(&xtime_lock, flags);
  31.695 -    /* Get timebases for new environment. */ 
  31.696 -    __get_time_values_from_xen();
  31.697 -    /* Reset our own concept of passage of system time. */
  31.698 -    processed_system_time = shadow_system_time;
  31.699 -    /* Accept a warp in UTC (wall-clock) time. */
  31.700 -    last_seen_tv.tv_sec = 0;
  31.701 -    /* Make sure we resync UTC time with Xen on next timer interrupt. */
  31.702 -    last_update_from_xen = 0;
  31.703 -    write_unlock_irqrestore(&xtime_lock, flags);
  31.704 -}
  31.705 -
  31.706 -/*
  31.707 - * /proc/sys/xen: This really belongs in another file. It can stay here for
  31.708 - * now however.
  31.709 - */
  31.710 -static ctl_table xen_subtable[] = {
  31.711 -    {1, "independent_wallclock", &independent_wallclock,
  31.712 -     sizeof(independent_wallclock), 0644, NULL, proc_dointvec},
  31.713 -    {0}
  31.714 -};
  31.715 -static ctl_table xen_table[] = {
  31.716 -    {123, "xen", NULL, 0, 0555, xen_subtable},
  31.717 -    {0}
  31.718 -};
  31.719 -static int __init xen_sysctl_init(void)
  31.720 -{
  31.721 -    (void)register_sysctl_table(xen_table, 0);
  31.722 -    return 0;
  31.723 -}
  31.724 -__initcall(xen_sysctl_init);
    32.1 --- a/linux-2.4.28-xen-sparse/arch/xen/kernel/traps.c	Wed Jan 19 13:20:15 2005 +0000
    32.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.3 @@ -1,628 +0,0 @@
    32.4 -/*
    32.5 - *  linux/arch/i386/traps.c
    32.6 - *
    32.7 - *  Copyright (C) 1991, 1992  Linus Torvalds
    32.8 - *
    32.9 - *  Pentium III FXSR, SSE support
   32.10 - *	Gareth Hughes <gareth@valinux.com>, May 2000
   32.11 - */
   32.12 -
   32.13 -/*
   32.14 - * 'Traps.c' handles hardware traps and faults after we have saved some
   32.15 - * state in 'asm.s'.
   32.16 - */
   32.17 -#include <linux/config.h>
   32.18 -#include <linux/sched.h>
   32.19 -#include <linux/kernel.h>
   32.20 -#include <linux/string.h>
   32.21 -#include <linux/errno.h>
   32.22 -#include <linux/ptrace.h>
   32.23 -#include <linux/timer.h>
   32.24 -#include <linux/mm.h>
   32.25 -#include <linux/init.h>
   32.26 -#include <linux/delay.h>
   32.27 -#include <linux/spinlock.h>
   32.28 -#include <linux/interrupt.h>
   32.29 -#include <linux/highmem.h>
   32.30 -
   32.31 -#include <asm/system.h>
   32.32 -#include <asm/uaccess.h>
   32.33 -#include <asm/io.h>
   32.34 -#include <asm/atomic.h>
   32.35 -#include <asm/debugreg.h>
   32.36 -#include <asm/desc.h>
   32.37 -#include <asm/i387.h>
   32.38 -
   32.39 -#include <asm/smp.h>
   32.40 -#include <asm/pgalloc.h>
   32.41 -
   32.42 -#include <asm/hypervisor.h>
   32.43 -
   32.44 -#include <linux/irq.h>
   32.45 -#include <linux/module.h>
   32.46 -
   32.47 -asmlinkage int system_call(void);
   32.48 -asmlinkage void lcall7(void);
   32.49 -asmlinkage void lcall27(void);
   32.50 -
   32.51 -asmlinkage void divide_error(void);
   32.52 -asmlinkage void debug(void);
   32.53 -asmlinkage void int3(void);
   32.54 -asmlinkage void overflow(void);
   32.55 -asmlinkage void bounds(void);
   32.56 -asmlinkage void invalid_op(void);
   32.57 -asmlinkage void device_not_available(void);
   32.58 -asmlinkage void double_fault(void);
   32.59 -asmlinkage void coprocessor_segment_overrun(void);
   32.60 -asmlinkage void invalid_TSS(void);
   32.61 -asmlinkage void segment_not_present(void);
   32.62 -asmlinkage void stack_segment(void);
   32.63 -asmlinkage void general_protection(void);
   32.64 -asmlinkage void page_fault(void);
   32.65 -asmlinkage void coprocessor_error(void);
   32.66 -asmlinkage void simd_coprocessor_error(void);
   32.67 -asmlinkage void alignment_check(void);
   32.68 -asmlinkage void fixup_4gb_segment(void);
   32.69 -asmlinkage void machine_check(void);
   32.70 -
   32.71 -int kstack_depth_to_print = 24;
   32.72 -
   32.73 -
   32.74 -/*
   32.75 - * If the address is either in the .text section of the
   32.76 - * kernel, or in the vmalloc'ed module regions, it *may* 
   32.77 - * be the address of a calling routine
   32.78 - */
   32.79 -
   32.80 -#ifdef CONFIG_MODULES
   32.81 -
   32.82 -extern struct module *module_list;
   32.83 -extern struct module kernel_module;
   32.84 -
   32.85 -static inline int kernel_text_address(unsigned long addr)
   32.86 -{
   32.87 -	int retval = 0;
   32.88 -	struct module *mod;
   32.89 -
   32.90 -	if (addr >= (unsigned long) &_stext &&
   32.91 -	    addr <= (unsigned long) &_etext)
   32.92 -		return 1;
   32.93 -
   32.94 -	for (mod = module_list; mod != &kernel_module; mod = mod->next) {
   32.95 -		/* mod_bound tests for addr being inside the vmalloc'ed
   32.96 -		 * module area. Of course it'd be better to test only
   32.97 -		 * for the .text subset... */
   32.98 -		if (mod_bound(addr, 0, mod)) {
   32.99 -			retval = 1;
  32.100 -			break;
  32.101 -		}
  32.102 -	}
  32.103 -
  32.104 -	return retval;
  32.105 -}
  32.106 -
  32.107 -#else
  32.108 -
  32.109 -static inline int kernel_text_address(unsigned long addr)
  32.110 -{
  32.111 -	return (addr >= (unsigned long) &_stext &&
  32.112 -		addr <= (unsigned long) &_etext);
  32.113 -}
  32.114 -
  32.115 -#endif
  32.116 -
  32.117 -void show_trace(unsigned long * stack)
  32.118 -{
  32.119 -	int i;
  32.120 -	unsigned long addr;
  32.121 -
  32.122 -	if (!stack)
  32.123 -		stack = (unsigned long*)&stack;
  32.124 -
  32.125 -	printk("Call Trace: ");
  32.126 -	i = 1;
  32.127 -	while (((long) stack & (THREAD_SIZE-1)) != 0) {
  32.128 -		addr = *stack++;
  32.129 -		if (kernel_text_address(addr)) {
  32.130 -			if (i && ((i % 6) == 0))
  32.131 -				printk("\n   ");
  32.132 -			printk("[<%08lx>] ", addr);
  32.133 -			i++;
  32.134 -		}
  32.135 -	}
  32.136 -	printk("\n");
  32.137 -}
  32.138 -
  32.139 -void show_trace_task(struct task_struct *tsk)
  32.140 -{
  32.141 -	unsigned long esp = tsk->thread.esp;
  32.142 -
  32.143 -	/* User space on another CPU? */
  32.144 -	if ((esp ^ (unsigned long)tsk) & (PAGE_MASK<<1))
  32.145 -		return;
  32.146 -	show_trace((unsigned long *)esp);
  32.147 -}
  32.148 -
  32.149 -void show_stack(unsigned long * esp)
  32.150 -{
  32.151 -	unsigned long *stack;
  32.152 -	int i;
  32.153 -
  32.154 -	// debugging aid: "show_stack(NULL);" prints the
  32.155 -	// back trace for this cpu.
  32.156 -
  32.157 -	if(esp==NULL)
  32.158 -		esp=(unsigned long*)&esp;
  32.159 -
  32.160 -	stack = esp;
  32.161 -	for(i=0; i < kstack_depth_to_print; i++) {
  32.162 -		if (((long) stack & (THREAD_SIZE-1)) == 0)
  32.163 -			break;
  32.164 -		if (i && ((i % 8) == 0))
  32.165 -			printk("\n       ");
  32.166 -		printk("%08lx ", *stack++);
  32.167 -	}
  32.168 -	printk("\n");
  32.169 -	show_trace(esp);
  32.170 -}
  32.171 -
  32.172 -void show_registers(struct pt_regs *regs)
  32.173 -{
  32.174 -	int in_kernel = 1;
  32.175 -	unsigned long esp;
  32.176 -	unsigned short ss;
  32.177 -
  32.178 -	esp = (unsigned long) (&regs->esp);
  32.179 -	ss = __KERNEL_DS;
  32.180 -	if (regs->xcs & 2) {
  32.181 -		in_kernel = 0;
  32.182 -		esp = regs->esp;
  32.183 -		ss = regs->xss & 0xffff;
  32.184 -	}
  32.185 -	printk(KERN_ALERT "CPU:    %d\n", smp_processor_id() );
  32.186 -	printk(KERN_ALERT "EIP:    %04x:[<%08lx>]    %s\n",
  32.187 -	       0xffff & regs->xcs, regs->eip, print_tainted());
  32.188 -	printk(KERN_ALERT "EFLAGS: %08lx\n",regs->eflags);
  32.189 -	printk(KERN_ALERT "eax: %08lx   ebx: %08lx   ecx: %08lx   edx: %08lx\n",
  32.190 -		regs->eax, regs->ebx, regs->ecx, regs->edx);
  32.191 -	printk(KERN_ALERT "esi: %08lx   edi: %08lx   ebp: %08lx   esp: %08lx\n",
  32.192 -		regs->esi, regs->edi, regs->ebp, esp);
  32.193 -	printk(KERN_ALERT "ds: %04x   es: %04x   ss: %04x\n",
  32.194 -		regs->xds & 0xffff, regs->xes & 0xffff, ss);
  32.195 -	printk(KERN_ALERT "Process %s (pid: %d, stackpage=%08lx)",
  32.196 -		current->comm, current->pid, 4096+(unsigned long)current);
  32.197 -	/*
  32.198 -	 * When in-kernel, we also print out the stack and code at the
  32.199 -	 * time of the fault..
  32.200 -	 */
  32.201 -	if (in_kernel) {
  32.202 -
  32.203 -		printk(KERN_ALERT "\nStack: ");
  32.204 -		show_stack((unsigned long*)esp);
  32.205 -
  32.206 -#if 0
  32.207 -                {
  32.208 -                        int i;
  32.209 -			printk(KERN_ALERT "\nCode: "