ia64/xen-unstable
changeset 5058:85fcf3b1b7a5
bitkeeper revision 1.1493 (428e623eLixPFfNTxCYBeRcapHg86g)
Merge freefall.cl.cam.ac.uk:/auto/groups/xeno-xenod/BK/xen-2.0-testing.bk
into freefall.cl.cam.ac.uk:/auto/groups/xeno-xenod/BK/xen-unstable.bk
Merge freefall.cl.cam.ac.uk:/auto/groups/xeno-xenod/BK/xen-2.0-testing.bk
into freefall.cl.cam.ac.uk:/auto/groups/xeno-xenod/BK/xen-unstable.bk
author | iap10@freefall.cl.cam.ac.uk |
---|---|
date | Fri May 20 22:18:38 2005 +0000 (2005-05-20) |
parents | 8397cf88a855 ee056b35ccc9 |
children | 569173be116f |
files | .rootkeys freebsd-5.3-xen-sparse/i386-xen/compile/.cvsignore 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/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/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/highmem.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/net/core/skbuff.c linux-2.4.30-xen-sparse/Makefile linux-2.4.30-xen-sparse/arch/xen/Makefile linux-2.4.30-xen-sparse/arch/xen/boot/Makefile linux-2.4.30-xen-sparse/arch/xen/config.in linux-2.4.30-xen-sparse/arch/xen/defconfig-xen0 linux-2.4.30-xen-sparse/arch/xen/defconfig-xenU linux-2.4.30-xen-sparse/arch/xen/drivers/balloon/Makefile linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/Makefile linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/backend/Makefile linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/frontend/Makefile linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/frontend/common.h linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/frontend/vbd.c linux-2.4.30-xen-sparse/arch/xen/drivers/console/Makefile linux-2.4.30-xen-sparse/arch/xen/drivers/dom0/Makefile linux-2.4.30-xen-sparse/arch/xen/drivers/evtchn/Makefile linux-2.4.30-xen-sparse/arch/xen/drivers/netif/Makefile linux-2.4.30-xen-sparse/arch/xen/drivers/netif/backend/Makefile linux-2.4.30-xen-sparse/arch/xen/drivers/netif/frontend/Makefile linux-2.4.30-xen-sparse/arch/xen/kernel/Makefile linux-2.4.30-xen-sparse/arch/xen/kernel/entry.S linux-2.4.30-xen-sparse/arch/xen/kernel/head.S linux-2.4.30-xen-sparse/arch/xen/kernel/i386_ksyms.c linux-2.4.30-xen-sparse/arch/xen/kernel/irq.c linux-2.4.30-xen-sparse/arch/xen/kernel/ldt.c linux-2.4.30-xen-sparse/arch/xen/kernel/pci-pc.c linux-2.4.30-xen-sparse/arch/xen/kernel/process.c linux-2.4.30-xen-sparse/arch/xen/kernel/setup.c linux-2.4.30-xen-sparse/arch/xen/kernel/signal.c linux-2.4.30-xen-sparse/arch/xen/kernel/time.c linux-2.4.30-xen-sparse/arch/xen/kernel/traps.c linux-2.4.30-xen-sparse/arch/xen/lib/Makefile linux-2.4.30-xen-sparse/arch/xen/lib/delay.c linux-2.4.30-xen-sparse/arch/xen/mm/Makefile linux-2.4.30-xen-sparse/arch/xen/mm/fault.c linux-2.4.30-xen-sparse/arch/xen/mm/init.c linux-2.4.30-xen-sparse/arch/xen/mm/ioremap.c linux-2.4.30-xen-sparse/arch/xen/vmlinux.lds linux-2.4.30-xen-sparse/drivers/block/ll_rw_blk.c linux-2.4.30-xen-sparse/drivers/char/Makefile linux-2.4.30-xen-sparse/drivers/char/mem.c linux-2.4.30-xen-sparse/drivers/char/tty_io.c linux-2.4.30-xen-sparse/drivers/scsi/aic7xxx/Makefile linux-2.4.30-xen-sparse/include/asm-xen/bugs.h linux-2.4.30-xen-sparse/include/asm-xen/desc.h linux-2.4.30-xen-sparse/include/asm-xen/fixmap.h linux-2.4.30-xen-sparse/include/asm-xen/highmem.h linux-2.4.30-xen-sparse/include/asm-xen/hw_irq.h linux-2.4.30-xen-sparse/include/asm-xen/io.h linux-2.4.30-xen-sparse/include/asm-xen/irq.h linux-2.4.30-xen-sparse/include/asm-xen/keyboard.h linux-2.4.30-xen-sparse/include/asm-xen/mmu_context.h linux-2.4.30-xen-sparse/include/asm-xen/module.h linux-2.4.30-xen-sparse/include/asm-xen/page.h linux-2.4.30-xen-sparse/include/asm-xen/pci.h linux-2.4.30-xen-sparse/include/asm-xen/pgalloc.h linux-2.4.30-xen-sparse/include/asm-xen/pgtable-2level.h linux-2.4.30-xen-sparse/include/asm-xen/pgtable.h linux-2.4.30-xen-sparse/include/asm-xen/processor.h linux-2.4.30-xen-sparse/include/asm-xen/queues.h linux-2.4.30-xen-sparse/include/asm-xen/segment.h linux-2.4.30-xen-sparse/include/asm-xen/smp.h linux-2.4.30-xen-sparse/include/asm-xen/system.h linux-2.4.30-xen-sparse/include/asm-xen/vga.h linux-2.4.30-xen-sparse/include/asm-xen/xor.h linux-2.4.30-xen-sparse/include/linux/blk.h linux-2.4.30-xen-sparse/include/linux/highmem.h linux-2.4.30-xen-sparse/include/linux/irq.h linux-2.4.30-xen-sparse/include/linux/mm.h linux-2.4.30-xen-sparse/include/linux/sched.h linux-2.4.30-xen-sparse/include/linux/skbuff.h linux-2.4.30-xen-sparse/include/linux/timer.h linux-2.4.30-xen-sparse/kernel/time.c linux-2.4.30-xen-sparse/kernel/timer.c linux-2.4.30-xen-sparse/mkbuildtree linux-2.4.30-xen-sparse/mm/highmem.c linux-2.4.30-xen-sparse/mm/memory.c linux-2.4.30-xen-sparse/mm/mprotect.c linux-2.4.30-xen-sparse/mm/mremap.c linux-2.4.30-xen-sparse/mm/page_alloc.c linux-2.4.30-xen-sparse/net/core/skbuff.c linux-2.6.11-xen-sparse/drivers/xen/blkfront/block.h |
line diff
1.1 --- a/.rootkeys Fri May 20 19:34:47 2005 +0000 1.2 +++ b/.rootkeys Fri May 20 22:18:38 2005 +0000 1.3 @@ -56,7 +56,6 @@ 423e7e86m-vV5fQ_32CjcFMEr77Fyg freebsd-5 1.4 423e7e86Fo2PxRS_37IwkpH-x5t5xQ freebsd-5.3-xen-sparse/conf/options.i386-xen 1.5 423e7e868Yt0iZuEeccnczyToPPvow freebsd-5.3-xen-sparse/fbsdxensetup 1.6 423e7e87szZMt1H0xhO5vzyXR6d7iQ freebsd-5.3-xen-sparse/i386-xen/Makefile 1.7 -423e7e8785O6DIEVghIvXD6tcNKonQ freebsd-5.3-xen-sparse/i386-xen/compile/.cvsignore 1.8 423e7e87zkFCb_Z4sHQpbec6jk3MdA freebsd-5.3-xen-sparse/i386-xen/conf/GENERIC 1.9 423e7e876sW2cYvlk0qy8YnBbPlklQ freebsd-5.3-xen-sparse/i386-xen/conf/GENERIC.hints 1.10 423e7e87DGOWxuyrh3sr9TmUwddFuQ freebsd-5.3-xen-sparse/i386-xen/conf/Makefile 1.11 @@ -124,92 +123,92 @@ 427346bfHJQldVgD-acDy_2toKMhTA freebsd-5 1.12 423e7e8dVDL1WLfbmQWuXMbetYk4jA freebsd-5.3-xen-sparse/mkbuildtree 1.13 423e7e8dBrOrAbydK6h49bY0VvDgPw freebsd-5.3-xen-sparse/xenfbsd_kernel_build 1.14 4187ca95_eQN62ugV1zliQcfzXrHnw install.sh 1.15 -3e5a4e6589G-U42lFKs43plskXoFxQ linux-2.4.29-xen-sparse/Makefile 1.16 -3e5a4e65IEPjnWPZ5w3TxS5scV8Ewg linux-2.4.29-xen-sparse/arch/xen/Makefile 1.17 -3e5a4e65n-KhsEAs-A4ULiStBp-r6w linux-2.4.29-xen-sparse/arch/xen/boot/Makefile 1.18 -3e5a4e65OV_j_DBtjzt5vej771AJsA linux-2.4.29-xen-sparse/arch/xen/config.in 1.19 -40648526SxcA4lGIHB_k7ID8VlRSzw linux-2.4.29-xen-sparse/arch/xen/defconfig-xen0 1.20 -40c73c77QesbL7eIvG-fJGAtVwhGRg linux-2.4.29-xen-sparse/arch/xen/defconfig-xenU 1.21 -3e6377f5xwPfYZkPHPrDbEq1PRN7uQ linux-2.4.29-xen-sparse/arch/xen/drivers/balloon/Makefile 1.22 -4083dc16z0jvZEH4PiVDbDRreaNp6w linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/Makefile 1.23 -4083dc16KQus88a4U3uCV6qVCA6_8Q linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/backend/Makefile 1.24 -4075806dI5kfeMD5RV-DA0PYoThx_w linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/frontend/Makefile 1.25 -4075806d4-j7vN0Mn0bklI1cRUX1vQ linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/frontend/common.h 1.26 -4075806dibjCcfuXv6CINMhxWTw3jQ linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/frontend/vbd.c 1.27 -3e5a4e65G3e2s0ghPMgiJ-gBTUJ0uQ linux-2.4.29-xen-sparse/arch/xen/drivers/console/Makefile 1.28 -3e5a4e656nfFISThfbyXQOA6HN6YHw linux-2.4.29-xen-sparse/arch/xen/drivers/dom0/Makefile 1.29 -40420a6ebRqDjufoN1WSJvolEW2Wjw linux-2.4.29-xen-sparse/arch/xen/drivers/evtchn/Makefile 1.30 -4083dc16-Kd5y9psK_yk161sme5j5Q linux-2.4.29-xen-sparse/arch/xen/drivers/netif/Makefile 1.31 -4083dc16UmHXxS9g_UFVnkUpN-oP2Q linux-2.4.29-xen-sparse/arch/xen/drivers/netif/backend/Makefile 1.32 -405853f2wg7JXZJNltspMwOZJklxgw linux-2.4.29-xen-sparse/arch/xen/drivers/netif/frontend/Makefile 1.33 41ee5e8b_2rt-qHzbDXtIoBzOli0EA linux-2.4.29-xen-sparse/arch/xen/drivers/usbif/Makefile 1.34 41ee5e8bUhF4tH7OoJaVbUxdXqneVw linux-2.4.29-xen-sparse/arch/xen/drivers/usbif/backend/Makefile 1.35 41ee5e8bSPpxzhGO6TrY20TegW3cZg linux-2.4.29-xen-sparse/arch/xen/drivers/usbif/frontend/Makefile 1.36 -3e5a4e65lWzkiPXsZdzPt2RNnJGG1g linux-2.4.29-xen-sparse/arch/xen/kernel/Makefile 1.37 -3e5a4e65_hqfuxtGG8IUy6wRM86Ecg linux-2.4.29-xen-sparse/arch/xen/kernel/entry.S 1.38 -3e5a4e65Hy_1iUvMTPsNqGNXd9uFpg linux-2.4.29-xen-sparse/arch/xen/kernel/head.S 1.39 -3e5a4e65RMGcuA-HCn3-wNx3fFQwdg linux-2.4.29-xen-sparse/arch/xen/kernel/i386_ksyms.c 1.40 4241709bNBs1q4Ss32YW0CyFVOGhEg linux-2.4.29-xen-sparse/arch/xen/kernel/ioport.c 1.41 -3e5a4e653U6cELGv528IxOLHvCq8iA linux-2.4.29-xen-sparse/arch/xen/kernel/irq.c 1.42 -3e5a4e65muT6SU3ck47IP87Q7Ti5hA linux-2.4.29-xen-sparse/arch/xen/kernel/ldt.c 1.43 4270e964iKFC24KiVm6jC5Eo7MxV6w linux-2.4.29-xen-sparse/arch/xen/kernel/pci-dma.c 1.44 -4051db95N9N99FjsRwi49YKUNHWI8A linux-2.4.29-xen-sparse/arch/xen/kernel/pci-pc.c 1.45 -3e5a4e65IGt3WwQDNiL4h-gYWgNTWQ linux-2.4.29-xen-sparse/arch/xen/kernel/process.c 1.46 -3e5a4e66tR-qJMLj3MppcKqmvuI2XQ linux-2.4.29-xen-sparse/arch/xen/kernel/setup.c 1.47 -3e5a4e66fWSTagLGU2P8BGFGRjhDiw linux-2.4.29-xen-sparse/arch/xen/kernel/signal.c 1.48 -3e5a4e66N__lUXNwzQ-eADRzK9LXuQ linux-2.4.29-xen-sparse/arch/xen/kernel/time.c 1.49 -3e5a4e66aHCbQ_F5QZ8VeyikLmuRZQ linux-2.4.29-xen-sparse/arch/xen/kernel/traps.c 1.50 -3e5a4e66-9_NczrVMbuQkoSLyXckIw linux-2.4.29-xen-sparse/arch/xen/lib/Makefile 1.51 -3e5a4e6637ZDk0BvFEC-aFQs599-ng linux-2.4.29-xen-sparse/arch/xen/lib/delay.c 1.52 -3e5a4e66croVgpcJyJuF2ycQw0HuJw linux-2.4.29-xen-sparse/arch/xen/mm/Makefile 1.53 -3e5a4e66l8Q5Tv-6B3lQIRmaVbFPzg linux-2.4.29-xen-sparse/arch/xen/mm/fault.c 1.54 -3e5a4e661gLzzff25pJooKIIWe7IWg linux-2.4.29-xen-sparse/arch/xen/mm/init.c 1.55 -3f0bed43UUdQichXAiVNrjV-y2Kzcg linux-2.4.29-xen-sparse/arch/xen/mm/ioremap.c 1.56 -3e5a4e66qRlSTcjafidMB6ulECADvg linux-2.4.29-xen-sparse/arch/xen/vmlinux.lds 1.57 -3e5a4e66mrtlmV75L1tjKDg8RaM5gA linux-2.4.29-xen-sparse/drivers/block/ll_rw_blk.c 1.58 -40d70c24-Dy2HUMrwSZagfXvAPnI4w linux-2.4.29-xen-sparse/drivers/char/Makefile 1.59 -3f108aeaLcGDgQdFAANLTUEid0a05w linux-2.4.29-xen-sparse/drivers/char/mem.c 1.60 -3e5a4e66rw65CxyolW9PKz4GG42RcA linux-2.4.29-xen-sparse/drivers/char/tty_io.c 1.61 -40c9c0c1pPwYE3-4i-oI3ubUu7UgvQ linux-2.4.29-xen-sparse/drivers/scsi/aic7xxx/Makefile 1.62 41f97f64nW0wmgLxhwzPTzkF4E5ERA linux-2.4.29-xen-sparse/drivers/usb/hcd.c 1.63 -3e5a4e66wbeCpsJgVf_U8Jde-CNcsA linux-2.4.29-xen-sparse/include/asm-xen/bugs.h 1.64 -3e5a4e66HdSkvIV6SJ1evG_xmTmXHA linux-2.4.29-xen-sparse/include/asm-xen/desc.h 1.65 -3e5a4e66SYp_UpAVcF8Lc1wa3Qtgzw linux-2.4.29-xen-sparse/include/asm-xen/fixmap.h 1.66 -406aeeaaQvl4RNtmd9hDEugBURbFpQ linux-2.4.29-xen-sparse/include/asm-xen/highmem.h 1.67 -3e5a4e67YtcyDLQsShhCfQwPSELfvA linux-2.4.29-xen-sparse/include/asm-xen/hw_irq.h 1.68 -4060044fVx7-tokvNLKBf_6qBB4lqQ linux-2.4.29-xen-sparse/include/asm-xen/io.h 1.69 -3e5a4e673p7PEOyHFm3nHkYX6HQYBg linux-2.4.29-xen-sparse/include/asm-xen/irq.h 1.70 -40d70c240tW7TWArl1VUgIFH2nVO1A linux-2.4.29-xen-sparse/include/asm-xen/keyboard.h 1.71 -3e5a4e678ddsQOpbSiRdy1GRcDc9WA linux-2.4.29-xen-sparse/include/asm-xen/mmu_context.h 1.72 -40d06e5b2YWInUX1Xv9amVANwd_2Xg linux-2.4.29-xen-sparse/include/asm-xen/module.h 1.73 -3e5a4e67mnQfh-R8KcQCaVo2Oho6yg linux-2.4.29-xen-sparse/include/asm-xen/page.h 1.74 -409ba2e7ZfV5hqTvIzxLtpClnxtIzg linux-2.4.29-xen-sparse/include/asm-xen/pci.h 1.75 -3e5a4e67uTYU5oEnIDjxuaez8njjqg linux-2.4.29-xen-sparse/include/asm-xen/pgalloc.h 1.76 -3e5a4e67X7JyupgdYkgDX19Huj2sAw linux-2.4.29-xen-sparse/include/asm-xen/pgtable-2level.h 1.77 -3e5a4e67gr4NLGtQ5CvSLimMYZlkOA linux-2.4.29-xen-sparse/include/asm-xen/pgtable.h 1.78 -3e5a4e676uK4xErTBDH6XJREn9LSyg linux-2.4.29-xen-sparse/include/asm-xen/processor.h 1.79 -41224663YBCUMX1kVo_HRUtgaHTi7w linux-2.4.29-xen-sparse/include/asm-xen/queues.h 1.80 -3e5a4e68uJz-xI0IBVMD7xRLQKJDFg linux-2.4.29-xen-sparse/include/asm-xen/segment.h 1.81 -3e5a4e68Nfdh6QcOKUTGCaYkf2LmYA linux-2.4.29-xen-sparse/include/asm-xen/smp.h 1.82 -3e5a4e68mTr0zcp9SXDbnd-XLrrfxw linux-2.4.29-xen-sparse/include/asm-xen/system.h 1.83 -3f1056a9L_kqHcFheV00KbKBzv9j5w linux-2.4.29-xen-sparse/include/asm-xen/vga.h 1.84 -40659defgWA92arexpMGn8X3QMDj3w linux-2.4.29-xen-sparse/include/asm-xen/xor.h 1.85 -3f056927gMHl7mWB89rb73JahbhQIA linux-2.4.29-xen-sparse/include/linux/blk.h 1.86 -42305f54mFScQCttpj57EIm60BnxIg linux-2.4.29-xen-sparse/include/linux/highmem.h 1.87 -419e0488SBzS3mdUhwgsES5a5e3abA linux-2.4.29-xen-sparse/include/linux/irq.h 1.88 -4124f66fPHG6yvB_vXmesjvzrJ3yMg linux-2.4.29-xen-sparse/include/linux/mm.h 1.89 -401c0590D_kwJDU59X8NyvqSv_Cl2A linux-2.4.29-xen-sparse/include/linux/sched.h 1.90 -40a248afgI0_JKthdYAe8beVfXSTpQ linux-2.4.29-xen-sparse/include/linux/skbuff.h 1.91 -401c0592pLrp_aCbQRo9GXiYQQaVVA linux-2.4.29-xen-sparse/include/linux/timer.h 1.92 -3f9d4b44247udoqWEgFkaHiWv6Uvyg linux-2.4.29-xen-sparse/kernel/time.c 1.93 -401c059bjLBFYHRD4Py2uM3eA1D4zQ linux-2.4.29-xen-sparse/kernel/timer.c 1.94 -3e6e7c1efbQe93xCvOpOVCnXTMmQ5w linux-2.4.29-xen-sparse/mkbuildtree 1.95 -406aeeafkrnCuIVWLFv3kfn4uAD5Eg linux-2.4.29-xen-sparse/mm/highmem.c 1.96 -3e5a4e68GxCIaFH4sy01v1wjapetaA linux-2.4.29-xen-sparse/mm/memory.c 1.97 -3f108af5VxPkLv13tXpXgoRKALQtXQ linux-2.4.29-xen-sparse/mm/mprotect.c 1.98 -3e5a4e681xMPdF9xCMwpyfuYMySU5g linux-2.4.29-xen-sparse/mm/mremap.c 1.99 -409ba2e7akOFqQUg6Qyg2s28xcXiMg linux-2.4.29-xen-sparse/mm/page_alloc.c 1.100 -41505c57WAd5l1rlfCLNSCpx9J13vA linux-2.4.29-xen-sparse/net/core/skbuff.c 1.101 +3e5a4e6589G-U42lFKs43plskXoFxQ linux-2.4.30-xen-sparse/Makefile 1.102 +3e5a4e65IEPjnWPZ5w3TxS5scV8Ewg linux-2.4.30-xen-sparse/arch/xen/Makefile 1.103 +3e5a4e65n-KhsEAs-A4ULiStBp-r6w linux-2.4.30-xen-sparse/arch/xen/boot/Makefile 1.104 +3e5a4e65OV_j_DBtjzt5vej771AJsA linux-2.4.30-xen-sparse/arch/xen/config.in 1.105 +40648526SxcA4lGIHB_k7ID8VlRSzw linux-2.4.30-xen-sparse/arch/xen/defconfig-xen0 1.106 +40c73c77QesbL7eIvG-fJGAtVwhGRg linux-2.4.30-xen-sparse/arch/xen/defconfig-xenU 1.107 +3e6377f5xwPfYZkPHPrDbEq1PRN7uQ linux-2.4.30-xen-sparse/arch/xen/drivers/balloon/Makefile 1.108 +4083dc16z0jvZEH4PiVDbDRreaNp6w linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/Makefile 1.109 +4083dc16KQus88a4U3uCV6qVCA6_8Q linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/backend/Makefile 1.110 +4075806dI5kfeMD5RV-DA0PYoThx_w linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/frontend/Makefile 1.111 +4075806d4-j7vN0Mn0bklI1cRUX1vQ linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/frontend/common.h 1.112 +4075806dibjCcfuXv6CINMhxWTw3jQ linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/frontend/vbd.c 1.113 +3e5a4e65G3e2s0ghPMgiJ-gBTUJ0uQ linux-2.4.30-xen-sparse/arch/xen/drivers/console/Makefile 1.114 +3e5a4e656nfFISThfbyXQOA6HN6YHw linux-2.4.30-xen-sparse/arch/xen/drivers/dom0/Makefile 1.115 +40420a6ebRqDjufoN1WSJvolEW2Wjw linux-2.4.30-xen-sparse/arch/xen/drivers/evtchn/Makefile 1.116 +4083dc16-Kd5y9psK_yk161sme5j5Q linux-2.4.30-xen-sparse/arch/xen/drivers/netif/Makefile 1.117 +4083dc16UmHXxS9g_UFVnkUpN-oP2Q linux-2.4.30-xen-sparse/arch/xen/drivers/netif/backend/Makefile 1.118 +405853f2wg7JXZJNltspMwOZJklxgw linux-2.4.30-xen-sparse/arch/xen/drivers/netif/frontend/Makefile 1.119 +3e5a4e65lWzkiPXsZdzPt2RNnJGG1g linux-2.4.30-xen-sparse/arch/xen/kernel/Makefile 1.120 +3e5a4e65_hqfuxtGG8IUy6wRM86Ecg linux-2.4.30-xen-sparse/arch/xen/kernel/entry.S 1.121 +3e5a4e65Hy_1iUvMTPsNqGNXd9uFpg linux-2.4.30-xen-sparse/arch/xen/kernel/head.S 1.122 +3e5a4e65RMGcuA-HCn3-wNx3fFQwdg linux-2.4.30-xen-sparse/arch/xen/kernel/i386_ksyms.c 1.123 +3e5a4e653U6cELGv528IxOLHvCq8iA linux-2.4.30-xen-sparse/arch/xen/kernel/irq.c 1.124 +3e5a4e65muT6SU3ck47IP87Q7Ti5hA linux-2.4.30-xen-sparse/arch/xen/kernel/ldt.c 1.125 +4051db95N9N99FjsRwi49YKUNHWI8A linux-2.4.30-xen-sparse/arch/xen/kernel/pci-pc.c 1.126 +3e5a4e65IGt3WwQDNiL4h-gYWgNTWQ linux-2.4.30-xen-sparse/arch/xen/kernel/process.c 1.127 +3e5a4e66tR-qJMLj3MppcKqmvuI2XQ linux-2.4.30-xen-sparse/arch/xen/kernel/setup.c 1.128 +3e5a4e66fWSTagLGU2P8BGFGRjhDiw linux-2.4.30-xen-sparse/arch/xen/kernel/signal.c 1.129 +3e5a4e66N__lUXNwzQ-eADRzK9LXuQ linux-2.4.30-xen-sparse/arch/xen/kernel/time.c 1.130 +3e5a4e66aHCbQ_F5QZ8VeyikLmuRZQ linux-2.4.30-xen-sparse/arch/xen/kernel/traps.c 1.131 +3e5a4e66-9_NczrVMbuQkoSLyXckIw linux-2.4.30-xen-sparse/arch/xen/lib/Makefile 1.132 +3e5a4e6637ZDk0BvFEC-aFQs599-ng linux-2.4.30-xen-sparse/arch/xen/lib/delay.c 1.133 +3e5a4e66croVgpcJyJuF2ycQw0HuJw linux-2.4.30-xen-sparse/arch/xen/mm/Makefile 1.134 +3e5a4e66l8Q5Tv-6B3lQIRmaVbFPzg linux-2.4.30-xen-sparse/arch/xen/mm/fault.c 1.135 +3e5a4e661gLzzff25pJooKIIWe7IWg linux-2.4.30-xen-sparse/arch/xen/mm/init.c 1.136 +3f0bed43UUdQichXAiVNrjV-y2Kzcg linux-2.4.30-xen-sparse/arch/xen/mm/ioremap.c 1.137 +3e5a4e66qRlSTcjafidMB6ulECADvg linux-2.4.30-xen-sparse/arch/xen/vmlinux.lds 1.138 +3e5a4e66mrtlmV75L1tjKDg8RaM5gA linux-2.4.30-xen-sparse/drivers/block/ll_rw_blk.c 1.139 +40d70c24-Dy2HUMrwSZagfXvAPnI4w linux-2.4.30-xen-sparse/drivers/char/Makefile 1.140 +3f108aeaLcGDgQdFAANLTUEid0a05w linux-2.4.30-xen-sparse/drivers/char/mem.c 1.141 +3e5a4e66rw65CxyolW9PKz4GG42RcA linux-2.4.30-xen-sparse/drivers/char/tty_io.c 1.142 +40c9c0c1pPwYE3-4i-oI3ubUu7UgvQ linux-2.4.30-xen-sparse/drivers/scsi/aic7xxx/Makefile 1.143 +3e5a4e66wbeCpsJgVf_U8Jde-CNcsA linux-2.4.30-xen-sparse/include/asm-xen/bugs.h 1.144 +3e5a4e66HdSkvIV6SJ1evG_xmTmXHA linux-2.4.30-xen-sparse/include/asm-xen/desc.h 1.145 +3e5a4e66SYp_UpAVcF8Lc1wa3Qtgzw linux-2.4.30-xen-sparse/include/asm-xen/fixmap.h 1.146 +406aeeaaQvl4RNtmd9hDEugBURbFpQ linux-2.4.30-xen-sparse/include/asm-xen/highmem.h 1.147 +3e5a4e67YtcyDLQsShhCfQwPSELfvA linux-2.4.30-xen-sparse/include/asm-xen/hw_irq.h 1.148 +4060044fVx7-tokvNLKBf_6qBB4lqQ linux-2.4.30-xen-sparse/include/asm-xen/io.h 1.149 +3e5a4e673p7PEOyHFm3nHkYX6HQYBg linux-2.4.30-xen-sparse/include/asm-xen/irq.h 1.150 +40d70c240tW7TWArl1VUgIFH2nVO1A linux-2.4.30-xen-sparse/include/asm-xen/keyboard.h 1.151 +3e5a4e678ddsQOpbSiRdy1GRcDc9WA linux-2.4.30-xen-sparse/include/asm-xen/mmu_context.h 1.152 +40d06e5b2YWInUX1Xv9amVANwd_2Xg linux-2.4.30-xen-sparse/include/asm-xen/module.h 1.153 +3e5a4e67mnQfh-R8KcQCaVo2Oho6yg linux-2.4.30-xen-sparse/include/asm-xen/page.h 1.154 +409ba2e7ZfV5hqTvIzxLtpClnxtIzg linux-2.4.30-xen-sparse/include/asm-xen/pci.h 1.155 +3e5a4e67uTYU5oEnIDjxuaez8njjqg linux-2.4.30-xen-sparse/include/asm-xen/pgalloc.h 1.156 +3e5a4e67X7JyupgdYkgDX19Huj2sAw linux-2.4.30-xen-sparse/include/asm-xen/pgtable-2level.h 1.157 +3e5a4e67gr4NLGtQ5CvSLimMYZlkOA linux-2.4.30-xen-sparse/include/asm-xen/pgtable.h 1.158 +3e5a4e676uK4xErTBDH6XJREn9LSyg linux-2.4.30-xen-sparse/include/asm-xen/processor.h 1.159 +41224663YBCUMX1kVo_HRUtgaHTi7w linux-2.4.30-xen-sparse/include/asm-xen/queues.h 1.160 +3e5a4e68uJz-xI0IBVMD7xRLQKJDFg linux-2.4.30-xen-sparse/include/asm-xen/segment.h 1.161 +3e5a4e68Nfdh6QcOKUTGCaYkf2LmYA linux-2.4.30-xen-sparse/include/asm-xen/smp.h 1.162 +3e5a4e68mTr0zcp9SXDbnd-XLrrfxw linux-2.4.30-xen-sparse/include/asm-xen/system.h 1.163 +3f1056a9L_kqHcFheV00KbKBzv9j5w linux-2.4.30-xen-sparse/include/asm-xen/vga.h 1.164 +40659defgWA92arexpMGn8X3QMDj3w linux-2.4.30-xen-sparse/include/asm-xen/xor.h 1.165 +3f056927gMHl7mWB89rb73JahbhQIA linux-2.4.30-xen-sparse/include/linux/blk.h 1.166 +42305f54mFScQCttpj57EIm60BnxIg linux-2.4.30-xen-sparse/include/linux/highmem.h 1.167 +419e0488SBzS3mdUhwgsES5a5e3abA linux-2.4.30-xen-sparse/include/linux/irq.h 1.168 +4124f66fPHG6yvB_vXmesjvzrJ3yMg linux-2.4.30-xen-sparse/include/linux/mm.h 1.169 +401c0590D_kwJDU59X8NyvqSv_Cl2A linux-2.4.30-xen-sparse/include/linux/sched.h 1.170 +40a248afgI0_JKthdYAe8beVfXSTpQ linux-2.4.30-xen-sparse/include/linux/skbuff.h 1.171 +401c0592pLrp_aCbQRo9GXiYQQaVVA linux-2.4.30-xen-sparse/include/linux/timer.h 1.172 +3f9d4b44247udoqWEgFkaHiWv6Uvyg linux-2.4.30-xen-sparse/kernel/time.c 1.173 +401c059bjLBFYHRD4Py2uM3eA1D4zQ linux-2.4.30-xen-sparse/kernel/timer.c 1.174 +3e6e7c1efbQe93xCvOpOVCnXTMmQ5w linux-2.4.30-xen-sparse/mkbuildtree 1.175 +406aeeafkrnCuIVWLFv3kfn4uAD5Eg linux-2.4.30-xen-sparse/mm/highmem.c 1.176 +3e5a4e68GxCIaFH4sy01v1wjapetaA linux-2.4.30-xen-sparse/mm/memory.c 1.177 +3f108af5VxPkLv13tXpXgoRKALQtXQ linux-2.4.30-xen-sparse/mm/mprotect.c 1.178 +3e5a4e681xMPdF9xCMwpyfuYMySU5g linux-2.4.30-xen-sparse/mm/mremap.c 1.179 +409ba2e7akOFqQUg6Qyg2s28xcXiMg linux-2.4.30-xen-sparse/mm/page_alloc.c 1.180 +41505c57WAd5l1rlfCLNSCpx9J13vA linux-2.4.30-xen-sparse/net/core/skbuff.c 1.181 40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.11-xen-sparse/arch/xen/Kconfig 1.182 40f56237utH41NPukqHksuNf29IC9A linux-2.6.11-xen-sparse/arch/xen/Kconfig.drivers 1.183 40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.11-xen-sparse/arch/xen/Makefile
2.1 --- a/freebsd-5.3-xen-sparse/i386-xen/compile/.cvsignore Fri May 20 19:34:47 2005 +0000 2.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 2.3 @@ -1,1 +0,0 @@ 2.4 -[A-Za-z0-9]*
3.1 --- a/linux-2.4.29-xen-sparse/Makefile Fri May 20 19:34:47 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 = 29 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.29-xen-sparse/arch/xen/Makefile Fri May 20 19:34:47 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 - ln -f -s vmlinuz-$(INSTALL_NAME)$(INSTALL_SUFFIX) $(INSTALL_PATH)/boot/vmlinuz-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(XENGUEST)$(INSTALL_SUFFIX) 4.122 - rm -f $(INSTALL_PATH)/boot/vmlinuz-$(INSTALL_NAME)$(INSTALL_SUFFIX) 4.123 - install -m0644 arch/$(ARCH)/boot/bzImage $(INSTALL_PATH)/boot/vmlinuz-$(INSTALL_NAME)$(INSTALL_SUFFIX) 4.124 - install -m0644 vmlinux $(INSTALL_PATH)/boot/vmlinux-syms-$(INSTALL_NAME)$(INSTALL_SUFFIX) 4.125 - install -m0664 .config $(INSTALL_PATH)/boot/config-$(INSTALL_NAME)$(INSTALL_SUFFIX) 4.126 - install -m0664 System.map $(INSTALL_PATH)/boot/System.map-$(INSTALL_NAME)$(INSTALL_SUFFIX) 4.127 - ln -f -s vmlinuz-$(INSTALL_NAME)$(INSTALL_SUFFIX) $(INSTALL_PATH)/boot/vmlinuz-$(VERSION).$(PATCHLEVEL)$(XENGUEST)$(INSTALL_SUFFIX) 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.29-xen-sparse/arch/xen/boot/Makefile Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/config.in Fri May 20 19:34:47 2005 +0000 6.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 6.3 @@ -1,337 +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 'Block-device uses grant tables' CONFIG_XEN_BLKDEV_GRANT 6.29 -bool 'USB-device frontend driver' CONFIG_XEN_USB_FRONTEND 6.30 -endmenu 6.31 -# The IBM S/390 patch needs this. 6.32 -define_bool CONFIG_NO_IDLE_HZ y 6.33 - 6.34 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then 6.35 - define_bool CONFIG_FOREIGN_PAGES y 6.36 -else 6.37 - define_bool CONFIG_FOREIGN_PAGES n 6.38 - define_bool CONFIG_NETDEVICES y 6.39 - define_bool CONFIG_VT n 6.40 -fi 6.41 - 6.42 -mainmenu_option next_comment 6.43 -comment 'Code maturity level options' 6.44 -bool 'Prompt for development and/or incomplete code/drivers' CONFIG_EXPERIMENTAL 6.45 -endmenu 6.46 - 6.47 -mainmenu_option next_comment 6.48 -comment 'Loadable module support' 6.49 -bool 'Enable loadable module support' CONFIG_MODULES 6.50 -if [ "$CONFIG_MODULES" = "y" ]; then 6.51 - bool ' Set version information on all module symbols' CONFIG_MODVERSIONS 6.52 - bool ' Kernel module loader' CONFIG_KMOD 6.53 -fi 6.54 -endmenu 6.55 - 6.56 -mainmenu_option next_comment 6.57 -comment 'Processor type and features' 6.58 -choice 'Processor family' \ 6.59 - "Pentium-Pro/Celeron/Pentium-II CONFIG_M686 \ 6.60 - Pentium-III/Celeron(Coppermine) CONFIG_MPENTIUMIII \ 6.61 - Pentium-4 CONFIG_MPENTIUM4 \ 6.62 - Athlon/Duron/K7 CONFIG_MK7 \ 6.63 - Opteron/Athlon64/Hammer/K8 CONFIG_MK8 \ 6.64 - VIA-C3-2 CONFIG_MVIAC3_2" Pentium-Pro 6.65 - 6.66 - define_bool CONFIG_X86_WP_WORKS_OK y 6.67 - define_bool CONFIG_X86_INVLPG y 6.68 - define_bool CONFIG_X86_CMPXCHG y 6.69 - define_bool CONFIG_X86_XADD y 6.70 - define_bool CONFIG_X86_BSWAP y 6.71 - define_bool CONFIG_X86_POPAD_OK y 6.72 - define_bool CONFIG_RWSEM_GENERIC_SPINLOCK n 6.73 - define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM y 6.74 - 6.75 - define_bool CONFIG_X86_GOOD_APIC y 6.76 - define_bool CONFIG_X86_PGE y 6.77 - define_bool CONFIG_X86_USE_PPRO_CHECKSUM y 6.78 - define_bool CONFIG_X86_TSC y 6.79 - 6.80 -if [ "$CONFIG_M686" = "y" ]; then 6.81 - define_int CONFIG_X86_L1_CACHE_SHIFT 5 6.82 -fi 6.83 -if [ "$CONFIG_MPENTIUMIII" = "y" ]; then 6.84 - define_int CONFIG_X86_L1_CACHE_SHIFT 5 6.85 -fi 6.86 -if [ "$CONFIG_MPENTIUM4" = "y" ]; then 6.87 - define_int CONFIG_X86_L1_CACHE_SHIFT 7 6.88 -fi 6.89 -if [ "$CONFIG_MK8" = "y" ]; then 6.90 - define_bool CONFIG_MK7 y 6.91 -fi 6.92 -if [ "$CONFIG_MK7" = "y" ]; then 6.93 - define_int CONFIG_X86_L1_CACHE_SHIFT 6 6.94 - define_bool CONFIG_X86_USE_3DNOW y 6.95 -fi 6.96 -if [ "$CONFIG_MVIAC3_2" = "y" ]; then 6.97 - define_int CONFIG_X86_L1_CACHE_SHIFT 5 6.98 -fi 6.99 - 6.100 -#if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then 6.101 -# tristate 'BIOS Enhanced Disk Drive calls determine boot disk (EXPERIMENTAL)' CONFIG_EDD 6.102 -#fi 6.103 - 6.104 -choice 'High Memory Support' \ 6.105 - "off CONFIG_NOHIGHMEM \ 6.106 - 4GB CONFIG_HIGHMEM4G" off 6.107 -# 64GB CONFIG_HIGHMEM64G" off 6.108 -if [ "$CONFIG_HIGHMEM4G" = "y" ]; then 6.109 - define_bool CONFIG_HIGHMEM y 6.110 -fi 6.111 -if [ "$CONFIG_HIGHMEM64G" = "y" ]; then 6.112 - define_bool CONFIG_HIGHMEM y 6.113 - define_bool CONFIG_X86_PAE y 6.114 -fi 6.115 - 6.116 -if [ "$CONFIG_HIGHMEM" = "y" ]; then 6.117 - bool 'HIGHMEM I/O support' CONFIG_HIGHIO 6.118 -fi 6.119 - 6.120 -define_int CONFIG_FORCE_MAX_ZONEORDER 11 6.121 - 6.122 -#bool 'Symmetric multi-processing support' CONFIG_SMP 6.123 -#if [ "$CONFIG_SMP" = "y" -a "$CONFIG_X86_CMPXCHG" = "y" ]; then 6.124 -# define_bool CONFIG_HAVE_DEC_LOCK y 6.125 -#fi 6.126 -endmenu 6.127 - 6.128 -mainmenu_option next_comment 6.129 -comment 'General setup' 6.130 - 6.131 -bool 'Networking support' CONFIG_NET 6.132 - 6.133 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then 6.134 - bool 'PCI support' CONFIG_PCI 6.135 - source drivers/pci/Config.in 6.136 - 6.137 - bool 'Support for hot-pluggable devices' CONFIG_HOTPLUG 6.138 - 6.139 - if [ "$CONFIG_HOTPLUG" = "y" ] ; then 6.140 - source drivers/pcmcia/Config.in 6.141 - source drivers/hotplug/Config.in 6.142 - else 6.143 - define_bool CONFIG_PCMCIA n 6.144 - define_bool CONFIG_HOTPLUG_PCI n 6.145 - fi 6.146 -fi 6.147 - 6.148 -bool 'System V IPC' CONFIG_SYSVIPC 6.149 -bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT 6.150 -bool 'Sysctl support' CONFIG_SYSCTL 6.151 -if [ "$CONFIG_PROC_FS" = "y" ]; then 6.152 - choice 'Kernel core (/proc/kcore) format' \ 6.153 - "ELF CONFIG_KCORE_ELF \ 6.154 - A.OUT CONFIG_KCORE_AOUT" ELF 6.155 -fi 6.156 -tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT 6.157 -bool 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF 6.158 -tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC 6.159 -bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER 6.160 - 6.161 -endmenu 6.162 - 6.163 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then 6.164 - source drivers/mtd/Config.in 6.165 - 6.166 - source drivers/parport/Config.in 6.167 - 6.168 - source drivers/pnp/Config.in 6.169 - 6.170 - source drivers/block/Config.in 6.171 - 6.172 - source drivers/md/Config.in 6.173 -fi 6.174 - 6.175 -if [ "$CONFIG_NET" = "y" ]; then 6.176 - source net/Config.in 6.177 -fi 6.178 - 6.179 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then 6.180 - mainmenu_option next_comment 6.181 - comment 'ATA/IDE/MFM/RLL support' 6.182 - 6.183 - tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE 6.184 - 6.185 - if [ "$CONFIG_IDE" != "n" ]; then 6.186 - source drivers/ide/Config.in 6.187 - else 6.188 - define_bool CONFIG_BLK_DEV_HD n 6.189 - fi 6.190 - endmenu 6.191 -fi 6.192 - 6.193 -mainmenu_option next_comment 6.194 -comment 'SCSI support' 6.195 - 6.196 -tristate 'SCSI support' CONFIG_SCSI 6.197 - 6.198 -if [ "$CONFIG_SCSI" != "n" ]; then 6.199 - source drivers/scsi/Config.in 6.200 -fi 6.201 -endmenu 6.202 - 6.203 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then 6.204 - source drivers/message/fusion/Config.in 6.205 - 6.206 - source drivers/ieee1394/Config.in 6.207 - 6.208 - source drivers/message/i2o/Config.in 6.209 - 6.210 - if [ "$CONFIG_NET" = "y" ]; then 6.211 - mainmenu_option next_comment 6.212 - comment 'Network device support' 6.213 - 6.214 - bool 'Network device support' CONFIG_NETDEVICES 6.215 - if [ "$CONFIG_NETDEVICES" = "y" ]; then 6.216 - source drivers/net/Config.in 6.217 - if [ "$CONFIG_ATM" = "y" -o "$CONFIG_ATM" = "m" ]; then 6.218 - source drivers/atm/Config.in 6.219 - fi 6.220 - fi 6.221 - endmenu 6.222 - fi 6.223 - 6.224 - source net/ax25/Config.in 6.225 - 6.226 - source net/irda/Config.in 6.227 - 6.228 - mainmenu_option next_comment 6.229 - comment 'ISDN subsystem' 6.230 - if [ "$CONFIG_NET" != "n" ]; then 6.231 - tristate 'ISDN support' CONFIG_ISDN 6.232 - if [ "$CONFIG_ISDN" != "n" ]; then 6.233 - source drivers/isdn/Config.in 6.234 - fi 6.235 - fi 6.236 - endmenu 6.237 - 6.238 - if [ "$CONFIG_ISA" = "y" ]; then 6.239 - mainmenu_option next_comment 6.240 - comment 'Old CD-ROM drivers (not SCSI, not IDE)' 6.241 - 6.242 - bool 'Support non-SCSI/IDE/ATAPI CDROM drives' CONFIG_CD_NO_IDESCSI 6.243 - if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then 6.244 - source drivers/cdrom/Config.in 6.245 - fi 6.246 - endmenu 6.247 - fi 6.248 - 6.249 - # 6.250 - # input before char - char/joystick depends on it. As does USB. 6.251 - # 6.252 - source drivers/input/Config.in 6.253 -else 6.254 - # 6.255 - # Block device driver configuration 6.256 - # 6.257 - mainmenu_option next_comment 6.258 - comment 'Block devices' 6.259 - tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP 6.260 - dep_tristate 'Network block device support' CONFIG_BLK_DEV_NBD $CONFIG_NET 6.261 - tristate 'RAM disk support' CONFIG_BLK_DEV_RAM 6.262 - if [ "$CONFIG_BLK_DEV_RAM" = "y" -o "$CONFIG_BLK_DEV_RAM" = "m" ]; then 6.263 - int ' Default RAM disk size' CONFIG_BLK_DEV_RAM_SIZE 4096 6.264 - fi 6.265 - dep_bool ' Initial RAM disk (initrd) support' CONFIG_BLK_DEV_INITRD $CONFIG_BLK_DEV_RAM 6.266 - bool 'Per partition statistics in /proc/partitions' CONFIG_BLK_STATS 6.267 - define_bool CONFIG_BLK_DEV_HD n 6.268 - endmenu 6.269 -fi 6.270 - 6.271 -source drivers/char/Config.in 6.272 - 6.273 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" -o "$CONFIG_XEN_USB_FRONTEND" = "y" ]; then 6.274 - source drivers/media/Config.in 6.275 -fi 6.276 - 6.277 -source fs/Config.in 6.278 - 6.279 -mainmenu_option next_comment 6.280 -comment 'Console drivers' 6.281 - 6.282 -define_bool CONFIG_XEN_CONSOLE y 6.283 - 6.284 -if [ "$CONFIG_VT" = "y" ]; then 6.285 - bool 'VGA text console' CONFIG_VGA_CONSOLE 6.286 - bool 'Dummy console' CONFIG_DUMMY_CONSOLE 6.287 - if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then 6.288 - bool 'Video mode selection support' CONFIG_VIDEO_SELECT 6.289 - if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then 6.290 - tristate 'MDA text console (dual-headed) (EXPERIMENTAL)' CONFIG_MDA_CONSOLE 6.291 - source drivers/video/Config.in 6.292 - fi 6.293 - fi 6.294 -fi 6.295 -endmenu 6.296 - 6.297 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then 6.298 - mainmenu_option next_comment 6.299 - comment 'Sound' 6.300 - 6.301 - tristate 'Sound card support' CONFIG_SOUND 6.302 - if [ "$CONFIG_SOUND" != "n" ]; then 6.303 - source drivers/sound/Config.in 6.304 - fi 6.305 - endmenu 6.306 -fi 6.307 - 6.308 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" -o "$CONFIG_XEN_USB_FRONTEND" = "y" ]; then 6.309 - if [ "$CONFIG_XEN_USB_FRONTEND" = "y" -o "$CONFIG_XEN_USB_BACKEND" = "y" ]; then 6.310 - define_bool CONFIG_USB y 6.311 - fi 6.312 - source drivers/usb/Config.in 6.313 -fi 6.314 - 6.315 -if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then 6.316 - source net/bluetooth/Config.in 6.317 -fi 6.318 - 6.319 -mainmenu_option next_comment 6.320 -comment 'Kernel hacking' 6.321 - 6.322 -bool 'Kernel debugging' CONFIG_DEBUG_KERNEL 6.323 -if [ "$CONFIG_DEBUG_KERNEL" != "n" ]; then 6.324 - bool ' Check for stack overflows' CONFIG_DEBUG_STACKOVERFLOW 6.325 - bool ' Debug high memory support' CONFIG_DEBUG_HIGHMEM 6.326 - bool ' Debug memory allocations' CONFIG_DEBUG_SLAB 6.327 - bool ' Memory mapped I/O debugging' CONFIG_DEBUG_IOVIRT 6.328 - bool ' Magic SysRq key' CONFIG_MAGIC_SYSRQ 6.329 - bool ' Spinlock debugging' CONFIG_DEBUG_SPINLOCK 6.330 - bool ' Verbose BUG() reporting (adds 70K)' CONFIG_DEBUG_BUGVERBOSE 6.331 - bool ' Load all symbols for debugging' CONFIG_KALLSYMS 6.332 - bool ' Compile the kernel with frame pointers' CONFIG_FRAME_POINTER 6.333 -fi 6.334 - 6.335 -int 'Kernel messages buffer length shift (0 = default)' CONFIG_LOG_BUF_SHIFT 0 6.336 - 6.337 -endmenu 6.338 - 6.339 -source crypto/Config.in 6.340 -source lib/Config.in
7.1 --- a/linux-2.4.29-xen-sparse/arch/xen/defconfig-xen0 Fri May 20 19:34:47 2005 +0000 7.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 7.3 @@ -1,958 +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_BLKDEV_GRANT=y 7.23 -# CONFIG_XEN_USB_FRONTEND is not set 7.24 -CONFIG_NO_IDLE_HZ=y 7.25 -CONFIG_FOREIGN_PAGES=y 7.26 - 7.27 -# 7.28 -# Code maturity level options 7.29 -# 7.30 -CONFIG_EXPERIMENTAL=y 7.31 - 7.32 -# 7.33 -# Loadable module support 7.34 -# 7.35 -CONFIG_MODULES=y 7.36 -CONFIG_MODVERSIONS=y 7.37 -CONFIG_KMOD=y 7.38 - 7.39 -# 7.40 -# Processor type and features 7.41 -# 7.42 -CONFIG_M686=y 7.43 -# CONFIG_MPENTIUMIII is not set 7.44 -# CONFIG_MPENTIUM4 is not set 7.45 -# CONFIG_MK7 is not set 7.46 -# CONFIG_MK8 is not set 7.47 -# CONFIG_MVIAC3_2 is not set 7.48 -CONFIG_X86_WP_WORKS_OK=y 7.49 -CONFIG_X86_INVLPG=y 7.50 -CONFIG_X86_CMPXCHG=y 7.51 -CONFIG_X86_XADD=y 7.52 -CONFIG_X86_BSWAP=y 7.53 -CONFIG_X86_POPAD_OK=y 7.54 -# CONFIG_RWSEM_GENERIC_SPINLOCK is not set 7.55 -CONFIG_RWSEM_XCHGADD_ALGORITHM=y 7.56 -CONFIG_X86_GOOD_APIC=y 7.57 -CONFIG_X86_PGE=y 7.58 -CONFIG_X86_USE_PPRO_CHECKSUM=y 7.59 -CONFIG_X86_TSC=y 7.60 -CONFIG_X86_L1_CACHE_SHIFT=5 7.61 -CONFIG_NOHIGHMEM=y 7.62 -# CONFIG_HIGHMEM4G is not set 7.63 -CONFIG_FORCE_MAX_ZONEORDER=11 7.64 - 7.65 -# 7.66 -# General setup 7.67 -# 7.68 -CONFIG_NET=y 7.69 -CONFIG_PCI=y 7.70 -CONFIG_PCI_NAMES=y 7.71 -CONFIG_HOTPLUG=y 7.72 - 7.73 -# 7.74 -# PCMCIA/CardBus support 7.75 -# 7.76 -# CONFIG_PCMCIA is not set 7.77 - 7.78 -# 7.79 -# PCI Hotplug Support 7.80 -# 7.81 -# CONFIG_HOTPLUG_PCI is not set 7.82 -# CONFIG_HOTPLUG_PCI_COMPAQ is not set 7.83 -# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set 7.84 -# CONFIG_HOTPLUG_PCI_SHPC is not set 7.85 -# CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE is not set 7.86 -# CONFIG_HOTPLUG_PCI_PCIE is not set 7.87 -# CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE is not set 7.88 -CONFIG_SYSVIPC=y 7.89 -# CONFIG_BSD_PROCESS_ACCT is not set 7.90 -CONFIG_SYSCTL=y 7.91 -CONFIG_KCORE_ELF=y 7.92 -# CONFIG_KCORE_AOUT is not set 7.93 -CONFIG_BINFMT_AOUT=y 7.94 -CONFIG_BINFMT_ELF=y 7.95 -# CONFIG_BINFMT_MISC is not set 7.96 -# CONFIG_OOM_KILLER is not set 7.97 - 7.98 -# 7.99 -# Memory Technology Devices (MTD) 7.100 -# 7.101 -# CONFIG_MTD is not set 7.102 - 7.103 -# 7.104 -# Parallel port support 7.105 -# 7.106 -# CONFIG_PARPORT is not set 7.107 - 7.108 -# 7.109 -# Plug and Play configuration 7.110 -# 7.111 -CONFIG_PNP=y 7.112 -# CONFIG_ISAPNP is not set 7.113 - 7.114 -# 7.115 -# Block devices 7.116 -# 7.117 -# CONFIG_BLK_DEV_FD is not set 7.118 -# CONFIG_BLK_DEV_XD is not set 7.119 -# CONFIG_PARIDE is not set 7.120 -# CONFIG_BLK_CPQ_DA is not set 7.121 -# CONFIG_BLK_CPQ_CISS_DA is not set 7.122 -# CONFIG_CISS_SCSI_TAPE is not set 7.123 -# CONFIG_CISS_MONITOR_THREAD is not set 7.124 -# CONFIG_BLK_DEV_DAC960 is not set 7.125 -# CONFIG_BLK_DEV_UMEM is not set 7.126 -# CONFIG_BLK_DEV_SX8 is not set 7.127 -CONFIG_BLK_DEV_LOOP=y 7.128 -CONFIG_BLK_DEV_NBD=y 7.129 -CONFIG_BLK_DEV_RAM=y 7.130 -CONFIG_BLK_DEV_RAM_SIZE=4096 7.131 -CONFIG_BLK_DEV_INITRD=y 7.132 -# CONFIG_BLK_STATS is not set 7.133 - 7.134 -# 7.135 -# Multi-device support (RAID and LVM) 7.136 -# 7.137 -# CONFIG_MD is not set 7.138 -# CONFIG_BLK_DEV_MD is not set 7.139 -# CONFIG_MD_LINEAR is not set 7.140 -# CONFIG_MD_RAID0 is not set 7.141 -# CONFIG_MD_RAID1 is not set 7.142 -# CONFIG_MD_RAID5 is not set 7.143 -# CONFIG_MD_MULTIPATH is not set 7.144 -# CONFIG_BLK_DEV_LVM is not set 7.145 - 7.146 -# 7.147 -# Networking options 7.148 -# 7.149 -CONFIG_PACKET=y 7.150 -CONFIG_PACKET_MMAP=y 7.151 -# CONFIG_NETLINK_DEV is not set 7.152 -CONFIG_NETFILTER=y 7.153 -# CONFIG_NETFILTER_DEBUG is not set 7.154 -CONFIG_FILTER=y 7.155 -CONFIG_UNIX=y 7.156 -CONFIG_INET=y 7.157 -# CONFIG_IP_MULTICAST is not set 7.158 -# CONFIG_IP_ADVANCED_ROUTER is not set 7.159 -CONFIG_IP_PNP=y 7.160 -CONFIG_IP_PNP_DHCP=y 7.161 -# CONFIG_IP_PNP_BOOTP is not set 7.162 -# CONFIG_IP_PNP_RARP is not set 7.163 -# CONFIG_NET_IPIP is not set 7.164 -# CONFIG_NET_IPGRE is not set 7.165 -# CONFIG_ARPD is not set 7.166 -# CONFIG_INET_ECN is not set 7.167 -# CONFIG_SYN_COOKIES is not set 7.168 - 7.169 -# 7.170 -# IP: Netfilter Configuration 7.171 -# 7.172 -CONFIG_IP_NF_CONNTRACK=m 7.173 -CONFIG_IP_NF_FTP=m 7.174 -# CONFIG_IP_NF_AMANDA is not set 7.175 -CONFIG_IP_NF_TFTP=m 7.176 -CONFIG_IP_NF_IRC=m 7.177 -# CONFIG_IP_NF_QUEUE is not set 7.178 -CONFIG_IP_NF_IPTABLES=y 7.179 -# CONFIG_IP_NF_MATCH_LIMIT is not set 7.180 -# CONFIG_IP_NF_MATCH_MAC is not set 7.181 -# CONFIG_IP_NF_MATCH_PKTTYPE is not set 7.182 -# CONFIG_IP_NF_MATCH_MARK is not set 7.183 -# CONFIG_IP_NF_MATCH_MULTIPORT is not set 7.184 -# CONFIG_IP_NF_MATCH_TOS is not set 7.185 -# CONFIG_IP_NF_MATCH_RECENT is not set 7.186 -# CONFIG_IP_NF_MATCH_ECN is not set 7.187 -# CONFIG_IP_NF_MATCH_DSCP is not set 7.188 -# CONFIG_IP_NF_MATCH_AH_ESP is not set 7.189 -# CONFIG_IP_NF_MATCH_LENGTH is not set 7.190 -# CONFIG_IP_NF_MATCH_TTL is not set 7.191 -# CONFIG_IP_NF_MATCH_TCPMSS is not set 7.192 -# CONFIG_IP_NF_MATCH_HELPER is not set 7.193 -CONFIG_IP_NF_MATCH_STATE=m 7.194 -CONFIG_IP_NF_MATCH_CONNTRACK=m 7.195 -# CONFIG_IP_NF_MATCH_UNCLEAN is not set 7.196 -# CONFIG_IP_NF_MATCH_OWNER is not set 7.197 -CONFIG_IP_NF_MATCH_PHYSDEV=y 7.198 -CONFIG_IP_NF_FILTER=y 7.199 -CONFIG_IP_NF_TARGET_REJECT=y 7.200 -# CONFIG_IP_NF_TARGET_MIRROR is not set 7.201 -CONFIG_IP_NF_NAT=m 7.202 -CONFIG_IP_NF_NAT_NEEDED=y 7.203 -CONFIG_IP_NF_TARGET_MASQUERADE=m 7.204 -CONFIG_IP_NF_TARGET_REDIRECT=m 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 -# CONFIG_DECNET is not set 7.235 -CONFIG_BRIDGE=y 7.236 -CONFIG_BRIDGE_NF_EBTABLES=m 7.237 -CONFIG_BRIDGE_EBT_T_FILTER=m 7.238 -CONFIG_BRIDGE_EBT_T_NAT=m 7.239 -CONFIG_BRIDGE_EBT_BROUTE=m 7.240 -CONFIG_BRIDGE_EBT_LOG=m 7.241 -CONFIG_BRIDGE_EBT_IPF=m 7.242 -CONFIG_BRIDGE_EBT_ARPF=m 7.243 -CONFIG_BRIDGE_EBT_AMONG=m 7.244 -CONFIG_BRIDGE_EBT_LIMIT=m 7.245 -CONFIG_BRIDGE_EBT_VLANF=m 7.246 -CONFIG_BRIDGE_EBT_802_3=m 7.247 -CONFIG_BRIDGE_EBT_PKTTYPE=m 7.248 -CONFIG_BRIDGE_EBT_STP=m 7.249 -CONFIG_BRIDGE_EBT_MARKF=m 7.250 -CONFIG_BRIDGE_EBT_ARPREPLY=m 7.251 -CONFIG_BRIDGE_EBT_SNAT=m 7.252 -CONFIG_BRIDGE_EBT_DNAT=m 7.253 -CONFIG_BRIDGE_EBT_REDIRECT=m 7.254 -CONFIG_BRIDGE_EBT_MARK_T=m 7.255 -# CONFIG_X25 is not set 7.256 -# CONFIG_LAPB is not set 7.257 -# CONFIG_LLC is not set 7.258 -# CONFIG_NET_DIVERT is not set 7.259 -# CONFIG_ECONET is not set 7.260 -# CONFIG_WAN_ROUTER is not set 7.261 -# CONFIG_NET_FASTROUTE is not set 7.262 -# CONFIG_NET_HW_FLOWCONTROL is not set 7.263 - 7.264 -# 7.265 -# QoS and/or fair queueing 7.266 -# 7.267 -# CONFIG_NET_SCHED is not set 7.268 - 7.269 -# 7.270 -# Network testing 7.271 -# 7.272 -# CONFIG_NET_PKTGEN is not set 7.273 - 7.274 -# 7.275 -# ATA/IDE/MFM/RLL support 7.276 -# 7.277 -CONFIG_IDE=y 7.278 - 7.279 -# 7.280 -# IDE, ATA and ATAPI Block devices 7.281 -# 7.282 -CONFIG_BLK_DEV_IDE=y 7.283 - 7.284 -# 7.285 -# Please see Documentation/ide.txt for help/info on IDE drives 7.286 -# 7.287 -# CONFIG_BLK_DEV_HD_IDE is not set 7.288 -# CONFIG_BLK_DEV_HD is not set 7.289 -# CONFIG_BLK_DEV_IDE_SATA is not set 7.290 -CONFIG_BLK_DEV_IDEDISK=y 7.291 -CONFIG_IDEDISK_MULTI_MODE=y 7.292 -CONFIG_IDEDISK_STROKE=y 7.293 -# CONFIG_BLK_DEV_IDECS is not set 7.294 -# CONFIG_BLK_DEV_DELKIN is not set 7.295 -CONFIG_BLK_DEV_IDECD=y 7.296 -CONFIG_BLK_DEV_IDETAPE=y 7.297 -CONFIG_BLK_DEV_IDEFLOPPY=y 7.298 -CONFIG_BLK_DEV_IDESCSI=y 7.299 -CONFIG_IDE_TASK_IOCTL=y 7.300 - 7.301 -# 7.302 -# IDE chipset support/bugfixes 7.303 -# 7.304 -CONFIG_BLK_DEV_CMD640=y 7.305 -CONFIG_BLK_DEV_CMD640_ENHANCED=y 7.306 -# CONFIG_BLK_DEV_ISAPNP is not set 7.307 -CONFIG_BLK_DEV_IDEPCI=y 7.308 -CONFIG_BLK_DEV_GENERIC=y 7.309 -CONFIG_IDEPCI_SHARE_IRQ=y 7.310 -CONFIG_BLK_DEV_IDEDMA_PCI=y 7.311 -CONFIG_BLK_DEV_OFFBOARD=y 7.312 -# CONFIG_BLK_DEV_IDEDMA_FORCED is not set 7.313 -CONFIG_IDEDMA_PCI_AUTO=y 7.314 -# CONFIG_IDEDMA_ONLYDISK is not set 7.315 -CONFIG_BLK_DEV_IDEDMA=y 7.316 -# CONFIG_IDEDMA_PCI_WIP is not set 7.317 -CONFIG_BLK_DEV_ADMA100=y 7.318 -CONFIG_BLK_DEV_AEC62XX=y 7.319 -CONFIG_BLK_DEV_ALI15X3=y 7.320 -CONFIG_WDC_ALI15X3=y 7.321 -CONFIG_BLK_DEV_AMD74XX=y 7.322 -CONFIG_AMD74XX_OVERRIDE=y 7.323 -# CONFIG_BLK_DEV_ATIIXP is not set 7.324 -CONFIG_BLK_DEV_CMD64X=y 7.325 -CONFIG_BLK_DEV_TRIFLEX=y 7.326 -CONFIG_BLK_DEV_CY82C693=y 7.327 -CONFIG_BLK_DEV_CS5530=y 7.328 -CONFIG_BLK_DEV_HPT34X=y 7.329 -# CONFIG_HPT34X_AUTODMA is not set 7.330 -CONFIG_BLK_DEV_HPT366=y 7.331 -CONFIG_BLK_DEV_PIIX=y 7.332 -CONFIG_BLK_DEV_NS87415=y 7.333 -# CONFIG_BLK_DEV_OPTI621 is not set 7.334 -CONFIG_BLK_DEV_PDC202XX_OLD=y 7.335 -CONFIG_PDC202XX_BURST=y 7.336 -CONFIG_BLK_DEV_PDC202XX_NEW=y 7.337 -CONFIG_PDC202XX_FORCE=y 7.338 -CONFIG_BLK_DEV_RZ1000=y 7.339 -CONFIG_BLK_DEV_SC1200=y 7.340 -CONFIG_BLK_DEV_SVWKS=y 7.341 -CONFIG_BLK_DEV_SIIMAGE=y 7.342 -CONFIG_BLK_DEV_SIS5513=y 7.343 -CONFIG_BLK_DEV_SLC90E66=y 7.344 -CONFIG_BLK_DEV_TRM290=y 7.345 -CONFIG_BLK_DEV_VIA82CXXX=y 7.346 -CONFIG_IDE_CHIPSETS=y 7.347 - 7.348 -# 7.349 -# Note: most of these also require special kernel boot parameters 7.350 -# 7.351 -# CONFIG_BLK_DEV_4DRIVES is not set 7.352 -# CONFIG_BLK_DEV_ALI14XX is not set 7.353 -# CONFIG_BLK_DEV_DTC2278 is not set 7.354 -# CONFIG_BLK_DEV_HT6560B is not set 7.355 -# CONFIG_BLK_DEV_PDC4030 is not set 7.356 -# CONFIG_BLK_DEV_QD65XX is not set 7.357 -# CONFIG_BLK_DEV_UMC8672 is not set 7.358 -CONFIG_IDEDMA_AUTO=y 7.359 -# CONFIG_IDEDMA_IVB is not set 7.360 -# CONFIG_DMA_NONPCI is not set 7.361 -CONFIG_BLK_DEV_PDC202XX=y 7.362 -# CONFIG_BLK_DEV_ATARAID is not set 7.363 -# CONFIG_BLK_DEV_ATARAID_PDC is not set 7.364 -# CONFIG_BLK_DEV_ATARAID_HPT is not set 7.365 -# CONFIG_BLK_DEV_ATARAID_MEDLEY is not set 7.366 -# CONFIG_BLK_DEV_ATARAID_SII is not set 7.367 - 7.368 -# 7.369 -# SCSI support 7.370 -# 7.371 -CONFIG_SCSI=y 7.372 - 7.373 -# 7.374 -# SCSI support type (disk, tape, CD-ROM) 7.375 -# 7.376 -CONFIG_BLK_DEV_SD=y 7.377 -CONFIG_SD_EXTRA_DEVS=40 7.378 -# CONFIG_CHR_DEV_ST is not set 7.379 -# CONFIG_CHR_DEV_OSST is not set 7.380 -# CONFIG_BLK_DEV_SR is not set 7.381 -CONFIG_CHR_DEV_SG=y 7.382 - 7.383 -# 7.384 -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs 7.385 -# 7.386 -# CONFIG_SCSI_DEBUG_QUEUES is not set 7.387 -# CONFIG_SCSI_MULTI_LUN is not set 7.388 -# CONFIG_SCSI_CONSTANTS is not set 7.389 -# CONFIG_SCSI_LOGGING is not set 7.390 - 7.391 -# 7.392 -# SCSI low-level drivers 7.393 -# 7.394 -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 7.395 -# CONFIG_SCSI_7000FASST is not set 7.396 -# CONFIG_SCSI_ACARD is not set 7.397 -# CONFIG_SCSI_AHA152X is not set 7.398 -# CONFIG_SCSI_AHA1542 is not set 7.399 -# CONFIG_SCSI_AHA1740 is not set 7.400 -CONFIG_SCSI_AACRAID=y 7.401 -CONFIG_SCSI_AIC7XXX=y 7.402 -CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 7.403 -CONFIG_AIC7XXX_RESET_DELAY_MS=15000 7.404 -# CONFIG_AIC7XXX_PROBE_EISA_VL is not set 7.405 -# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set 7.406 -# CONFIG_AIC7XXX_DEBUG_ENABLE is not set 7.407 -CONFIG_AIC7XXX_DEBUG_MASK=0 7.408 -# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set 7.409 -CONFIG_SCSI_AIC79XX=y 7.410 -CONFIG_AIC79XX_CMDS_PER_DEVICE=32 7.411 -CONFIG_AIC79XX_RESET_DELAY_MS=15000 7.412 -# CONFIG_AIC79XX_BUILD_FIRMWARE is not set 7.413 -# CONFIG_AIC79XX_ENABLE_RD_STRM is not set 7.414 -# CONFIG_AIC79XX_DEBUG_ENABLE is not set 7.415 -CONFIG_AIC79XX_DEBUG_MASK=0 7.416 -# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set 7.417 -# CONFIG_SCSI_DPT_I2O is not set 7.418 -# CONFIG_SCSI_ADVANSYS is not set 7.419 -# CONFIG_SCSI_IN2000 is not set 7.420 -# CONFIG_SCSI_AM53C974 is not set 7.421 -CONFIG_SCSI_MEGARAID=y 7.422 -# CONFIG_SCSI_MEGARAID2 is not set 7.423 -CONFIG_SCSI_SATA=y 7.424 -# CONFIG_SCSI_SATA_AHCI is not set 7.425 -# CONFIG_SCSI_SATA_SVW is not set 7.426 -CONFIG_SCSI_ATA_PIIX=y 7.427 -# CONFIG_SCSI_SATA_NV is not set 7.428 -CONFIG_SCSI_SATA_PROMISE=y 7.429 -CONFIG_SCSI_SATA_SX4=y 7.430 -CONFIG_SCSI_SATA_SIL=y 7.431 -CONFIG_SCSI_SATA_SIS=y 7.432 -# CONFIG_SCSI_SATA_ULI is not set 7.433 -CONFIG_SCSI_SATA_VIA=y 7.434 -CONFIG_SCSI_SATA_VITESSE=y 7.435 -CONFIG_SCSI_BUSLOGIC=y 7.436 -# CONFIG_SCSI_OMIT_FLASHPOINT is not set 7.437 -# CONFIG_SCSI_CPQFCTS is not set 7.438 -# CONFIG_SCSI_DMX3191D is not set 7.439 -# CONFIG_SCSI_DTC3280 is not set 7.440 -# CONFIG_SCSI_EATA is not set 7.441 -# CONFIG_SCSI_EATA_DMA is not set 7.442 -# CONFIG_SCSI_EATA_PIO is not set 7.443 -# CONFIG_SCSI_FUTURE_DOMAIN is not set 7.444 -# CONFIG_SCSI_GDTH is not set 7.445 -# CONFIG_SCSI_GENERIC_NCR5380 is not set 7.446 -# CONFIG_SCSI_IPS is not set 7.447 -# CONFIG_SCSI_INITIO is not set 7.448 -# CONFIG_SCSI_INIA100 is not set 7.449 -# CONFIG_SCSI_NCR53C406A is not set 7.450 -# CONFIG_SCSI_NCR53C7xx is not set 7.451 -CONFIG_SCSI_SYM53C8XX_2=y 7.452 -CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 7.453 -CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 7.454 -CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 7.455 -# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set 7.456 -# CONFIG_SCSI_PAS16 is not set 7.457 -# CONFIG_SCSI_PCI2000 is not set 7.458 -# CONFIG_SCSI_PCI2220I is not set 7.459 -# CONFIG_SCSI_PSI240I is not set 7.460 -# CONFIG_SCSI_QLOGIC_FAS is not set 7.461 -# CONFIG_SCSI_QLOGIC_ISP is not set 7.462 -# CONFIG_SCSI_QLOGIC_FC is not set 7.463 -# CONFIG_SCSI_QLOGIC_1280 is not set 7.464 -# CONFIG_SCSI_SEAGATE is not set 7.465 -# CONFIG_SCSI_SIM710 is not set 7.466 -# CONFIG_SCSI_SYM53C416 is not set 7.467 -# CONFIG_SCSI_DC390T is not set 7.468 -# CONFIG_SCSI_T128 is not set 7.469 -# CONFIG_SCSI_U14_34F is not set 7.470 -# CONFIG_SCSI_ULTRASTOR is not set 7.471 -# CONFIG_SCSI_NSP32 is not set 7.472 -# CONFIG_SCSI_DEBUG is not set 7.473 - 7.474 -# 7.475 -# Fusion MPT device support 7.476 -# 7.477 -# CONFIG_FUSION is not set 7.478 -# CONFIG_FUSION_BOOT is not set 7.479 -# CONFIG_FUSION_ISENSE is not set 7.480 -# CONFIG_FUSION_CTL is not set 7.481 -# CONFIG_FUSION_LAN is not set 7.482 - 7.483 -# 7.484 -# IEEE 1394 (FireWire) support (EXPERIMENTAL) 7.485 -# 7.486 -# CONFIG_IEEE1394 is not set 7.487 - 7.488 -# 7.489 -# I2O device support 7.490 -# 7.491 -# CONFIG_I2O is not set 7.492 -# CONFIG_I2O_PCI is not set 7.493 -# CONFIG_I2O_BLOCK is not set 7.494 -# CONFIG_I2O_LAN is not set 7.495 -# CONFIG_I2O_SCSI is not set 7.496 -# CONFIG_I2O_PROC is not set 7.497 - 7.498 -# 7.499 -# Network device support 7.500 -# 7.501 -CONFIG_NETDEVICES=y 7.502 - 7.503 -# 7.504 -# ARCnet devices 7.505 -# 7.506 -# CONFIG_ARCNET is not set 7.507 -# CONFIG_DUMMY is not set 7.508 -# CONFIG_BONDING is not set 7.509 -# CONFIG_EQUALIZER is not set 7.510 -# CONFIG_TUN is not set 7.511 -# CONFIG_ETHERTAP is not set 7.512 - 7.513 -# 7.514 -# Ethernet (10 or 100Mbit) 7.515 -# 7.516 -CONFIG_NET_ETHERNET=y 7.517 -# CONFIG_SUNLANCE is not set 7.518 -# CONFIG_HAPPYMEAL is not set 7.519 -# CONFIG_SUNBMAC is not set 7.520 -# CONFIG_SUNQE is not set 7.521 -# CONFIG_SUNGEM is not set 7.522 -CONFIG_NET_VENDOR_3COM=y 7.523 -# CONFIG_EL1 is not set 7.524 -# CONFIG_EL2 is not set 7.525 -# CONFIG_ELPLUS is not set 7.526 -# CONFIG_EL16 is not set 7.527 -# CONFIG_EL3 is not set 7.528 -# CONFIG_3C515 is not set 7.529 -# CONFIG_ELMC is not set 7.530 -# CONFIG_ELMC_II is not set 7.531 -CONFIG_VORTEX=y 7.532 -# CONFIG_TYPHOON is not set 7.533 -# CONFIG_LANCE is not set 7.534 -# CONFIG_NET_VENDOR_SMC is not set 7.535 -# CONFIG_NET_VENDOR_RACAL is not set 7.536 -# CONFIG_AT1700 is not set 7.537 -# CONFIG_DEPCA is not set 7.538 -# CONFIG_HP100 is not set 7.539 -# CONFIG_NET_ISA is not set 7.540 -CONFIG_NET_PCI=y 7.541 -CONFIG_PCNET32=y 7.542 -# CONFIG_AMD8111_ETH is not set 7.543 -# CONFIG_ADAPTEC_STARFIRE is not set 7.544 -# CONFIG_AC3200 is not set 7.545 -# CONFIG_APRICOT is not set 7.546 -# CONFIG_B44 is not set 7.547 -# CONFIG_CS89x0 is not set 7.548 -# CONFIG_TULIP is not set 7.549 -# CONFIG_DE4X5 is not set 7.550 -# CONFIG_DGRS is not set 7.551 -# CONFIG_DM9102 is not set 7.552 -# CONFIG_EEPRO100 is not set 7.553 -# CONFIG_EEPRO100_PIO is not set 7.554 -CONFIG_E100=y 7.555 -# CONFIG_LNE390 is not set 7.556 -# CONFIG_FEALNX is not set 7.557 -# CONFIG_NATSEMI is not set 7.558 -CONFIG_NE2K_PCI=y 7.559 -# CONFIG_FORCEDETH is not set 7.560 -# CONFIG_NE3210 is not set 7.561 -# CONFIG_ES3210 is not set 7.562 -# CONFIG_8139CP is not set 7.563 -# CONFIG_8139TOO is not set 7.564 -# CONFIG_8139TOO_PIO is not set 7.565 -# CONFIG_8139TOO_TUNE_TWISTER is not set 7.566 -# CONFIG_8139TOO_8129 is not set 7.567 -# CONFIG_8139_OLD_RX_RESET is not set 7.568 -# CONFIG_SIS900 is not set 7.569 -# CONFIG_EPIC100 is not set 7.570 -# CONFIG_SUNDANCE is not set 7.571 -# CONFIG_SUNDANCE_MMIO is not set 7.572 -# CONFIG_TLAN is not set 7.573 -# CONFIG_VIA_RHINE is not set 7.574 -# CONFIG_VIA_RHINE_MMIO is not set 7.575 -# CONFIG_WINBOND_840 is not set 7.576 -# CONFIG_NET_POCKET is not set 7.577 - 7.578 -# 7.579 -# Ethernet (1000 Mbit) 7.580 -# 7.581 -# CONFIG_ACENIC is not set 7.582 -# CONFIG_DL2K is not set 7.583 -CONFIG_E1000=y 7.584 -# CONFIG_E1000_NAPI is not set 7.585 -# CONFIG_MYRI_SBUS is not set 7.586 -# CONFIG_NS83820 is not set 7.587 -# CONFIG_HAMACHI is not set 7.588 -# CONFIG_YELLOWFIN is not set 7.589 -# CONFIG_R8169 is not set 7.590 -# CONFIG_SK98LIN is not set 7.591 -CONFIG_TIGON3=y 7.592 -# CONFIG_FDDI is not set 7.593 -# CONFIG_HIPPI is not set 7.594 -# CONFIG_PLIP is not set 7.595 -# CONFIG_PPP is not set 7.596 -# CONFIG_SLIP is not set 7.597 - 7.598 -# 7.599 -# Wireless LAN (non-hamradio) 7.600 -# 7.601 -# CONFIG_NET_RADIO is not set 7.602 - 7.603 -# 7.604 -# Token Ring devices 7.605 -# 7.606 -# CONFIG_TR is not set 7.607 -# CONFIG_NET_FC is not set 7.608 -# CONFIG_RCPCI is not set 7.609 -# CONFIG_SHAPER is not set 7.610 - 7.611 -# 7.612 -# Wan interfaces 7.613 -# 7.614 -# CONFIG_WAN is not set 7.615 - 7.616 -# 7.617 -# Amateur Radio support 7.618 -# 7.619 -# CONFIG_HAMRADIO is not set 7.620 - 7.621 -# 7.622 -# IrDA (infrared) support 7.623 -# 7.624 -# CONFIG_IRDA is not set 7.625 - 7.626 -# 7.627 -# ISDN subsystem 7.628 -# 7.629 -# CONFIG_ISDN is not set 7.630 - 7.631 -# 7.632 -# Old CD-ROM drivers (not SCSI, not IDE) 7.633 -# 7.634 -# CONFIG_CD_NO_IDESCSI is not set 7.635 - 7.636 -# 7.637 -# Input core support 7.638 -# 7.639 -# CONFIG_INPUT is not set 7.640 -# CONFIG_INPUT_KEYBDEV is not set 7.641 -# CONFIG_INPUT_MOUSEDEV is not set 7.642 -# CONFIG_INPUT_JOYDEV is not set 7.643 -# CONFIG_INPUT_EVDEV is not set 7.644 -# CONFIG_INPUT_UINPUT is not set 7.645 - 7.646 -# 7.647 -# Character devices 7.648 -# 7.649 -CONFIG_VT=y 7.650 -CONFIG_VT_CONSOLE=y 7.651 -# CONFIG_SERIAL is not set 7.652 -# CONFIG_SERIAL_EXTENDED is not set 7.653 -# CONFIG_SERIAL_NONSTANDARD is not set 7.654 -CONFIG_UNIX98_PTYS=y 7.655 -CONFIG_UNIX98_PTY_COUNT=256 7.656 - 7.657 -# 7.658 -# I2C support 7.659 -# 7.660 -# CONFIG_I2C is not set 7.661 - 7.662 -# 7.663 -# Mice 7.664 -# 7.665 -# CONFIG_BUSMOUSE is not set 7.666 -CONFIG_MOUSE=y 7.667 -CONFIG_PSMOUSE=y 7.668 -# CONFIG_82C710_MOUSE is not set 7.669 -# CONFIG_PC110_PAD is not set 7.670 -# CONFIG_MK712_MOUSE is not set 7.671 - 7.672 -# 7.673 -# Joysticks 7.674 -# 7.675 -# CONFIG_INPUT_GAMEPORT is not set 7.676 - 7.677 -# 7.678 -# Input core support is needed for gameports 7.679 -# 7.680 - 7.681 -# 7.682 -# Input core support is needed for joysticks 7.683 -# 7.684 -# CONFIG_QIC02_TAPE is not set 7.685 -# CONFIG_IPMI_HANDLER is not set 7.686 -# CONFIG_IPMI_PANIC_EVENT is not set 7.687 -# CONFIG_IPMI_DEVICE_INTERFACE is not set 7.688 -# CONFIG_IPMI_KCS is not set 7.689 -# CONFIG_IPMI_WATCHDOG is not set 7.690 - 7.691 -# 7.692 -# Watchdog Cards 7.693 -# 7.694 -# CONFIG_WATCHDOG is not set 7.695 -# CONFIG_SCx200 is not set 7.696 -# CONFIG_SCx200_GPIO is not set 7.697 -# CONFIG_AMD_RNG is not set 7.698 -# CONFIG_INTEL_RNG is not set 7.699 -# CONFIG_HW_RANDOM is not set 7.700 -# CONFIG_AMD_PM768 is not set 7.701 -# CONFIG_NVRAM is not set 7.702 -# CONFIG_RTC is not set 7.703 -# CONFIG_DTLK is not set 7.704 -# CONFIG_R3964 is not set 7.705 -# CONFIG_APPLICOM is not set 7.706 -# CONFIG_SONYPI is not set 7.707 - 7.708 -# 7.709 -# Ftape, the floppy tape device driver 7.710 -# 7.711 -# CONFIG_FTAPE is not set 7.712 -# CONFIG_AGP is not set 7.713 - 7.714 -# 7.715 -# Direct Rendering Manager (XFree86 DRI support) 7.716 -# 7.717 -# CONFIG_DRM is not set 7.718 -# CONFIG_MWAVE is not set 7.719 -# CONFIG_OBMOUSE is not set 7.720 - 7.721 -# 7.722 -# Multimedia devices 7.723 -# 7.724 -# CONFIG_VIDEO_DEV is not set 7.725 - 7.726 -# 7.727 -# File systems 7.728 -# 7.729 -# CONFIG_QUOTA is not set 7.730 -# CONFIG_QFMT_V2 is not set 7.731 -CONFIG_AUTOFS_FS=y 7.732 -CONFIG_AUTOFS4_FS=y 7.733 -# CONFIG_REISERFS_FS is not set 7.734 -# CONFIG_REISERFS_CHECK is not set 7.735 -# CONFIG_REISERFS_PROC_INFO is not set 7.736 -# CONFIG_ADFS_FS is not set 7.737 -# CONFIG_ADFS_FS_RW is not set 7.738 -# CONFIG_AFFS_FS is not set 7.739 -# CONFIG_HFS_FS is not set 7.740 -# CONFIG_HFSPLUS_FS is not set 7.741 -# CONFIG_BEFS_FS is not set 7.742 -# CONFIG_BEFS_DEBUG is not set 7.743 -# CONFIG_BFS_FS is not set 7.744 -CONFIG_EXT3_FS=y 7.745 -CONFIG_JBD=y 7.746 -# CONFIG_JBD_DEBUG is not set 7.747 -CONFIG_FAT_FS=y 7.748 -CONFIG_MSDOS_FS=y 7.749 -CONFIG_UMSDOS_FS=y 7.750 -CONFIG_VFAT_FS=y 7.751 -# CONFIG_EFS_FS is not set 7.752 -# CONFIG_JFFS_FS is not set 7.753 -# CONFIG_JFFS2_FS is not set 7.754 -# CONFIG_CRAMFS is not set 7.755 -CONFIG_TMPFS=y 7.756 -CONFIG_RAMFS=y 7.757 -CONFIG_ISO9660_FS=y 7.758 -CONFIG_JOLIET=y 7.759 -CONFIG_ZISOFS=y 7.760 -# CONFIG_JFS_FS is not set 7.761 -# CONFIG_JFS_DEBUG is not set 7.762 -# CONFIG_JFS_STATISTICS is not set 7.763 -# CONFIG_MINIX_FS is not set 7.764 -# CONFIG_VXFS_FS is not set 7.765 -# CONFIG_NTFS_FS is not set 7.766 -# CONFIG_NTFS_RW is not set 7.767 -# CONFIG_HPFS_FS is not set 7.768 -CONFIG_PROC_FS=y 7.769 -# CONFIG_DEVFS_FS is not set 7.770 -# CONFIG_DEVFS_MOUNT is not set 7.771 -# CONFIG_DEVFS_DEBUG is not set 7.772 -CONFIG_DEVPTS_FS=y 7.773 -# CONFIG_QNX4FS_FS is not set 7.774 -# CONFIG_QNX4FS_RW is not set 7.775 -# CONFIG_ROMFS_FS is not set 7.776 -CONFIG_EXT2_FS=y 7.777 -# CONFIG_SYSV_FS is not set 7.778 -# CONFIG_UDF_FS is not set 7.779 -# CONFIG_UDF_RW is not set 7.780 -# CONFIG_UFS_FS is not set 7.781 -# CONFIG_UFS_FS_WRITE is not set 7.782 -# CONFIG_XFS_FS is not set 7.783 -# CONFIG_XFS_QUOTA is not set 7.784 -# CONFIG_XFS_RT is not set 7.785 -# CONFIG_XFS_TRACE is not set 7.786 -# CONFIG_XFS_DEBUG is not set 7.787 - 7.788 -# 7.789 -# Network File Systems 7.790 -# 7.791 -# CONFIG_CODA_FS is not set 7.792 -# CONFIG_INTERMEZZO_FS is not set 7.793 -CONFIG_NFS_FS=y 7.794 -CONFIG_NFS_V3=y 7.795 -# CONFIG_NFS_DIRECTIO is not set 7.796 -CONFIG_ROOT_NFS=y 7.797 -CONFIG_NFSD=y 7.798 -CONFIG_NFSD_V3=y 7.799 -# CONFIG_NFSD_TCP is not set 7.800 -CONFIG_SUNRPC=y 7.801 -CONFIG_LOCKD=y 7.802 -CONFIG_LOCKD_V4=y 7.803 -# CONFIG_SMB_FS is not set 7.804 -# CONFIG_NCP_FS is not set 7.805 -# CONFIG_NCPFS_PACKET_SIGNING is not set 7.806 -# CONFIG_NCPFS_IOCTL_LOCKING is not set 7.807 -# CONFIG_NCPFS_STRONG is not set 7.808 -# CONFIG_NCPFS_NFS_NS is not set 7.809 -# CONFIG_NCPFS_OS2_NS is not set 7.810 -# CONFIG_NCPFS_SMALLDOS is not set 7.811 -# CONFIG_NCPFS_NLS is not set 7.812 -# CONFIG_NCPFS_EXTRAS is not set 7.813 -CONFIG_ZISOFS_FS=y 7.814 - 7.815 -# 7.816 -# Partition Types 7.817 -# 7.818 -CONFIG_PARTITION_ADVANCED=y 7.819 -# CONFIG_ACORN_PARTITION is not set 7.820 -# CONFIG_OSF_PARTITION is not set 7.821 -# CONFIG_AMIGA_PARTITION is not set 7.822 -# CONFIG_ATARI_PARTITION is not set 7.823 -# CONFIG_MAC_PARTITION is not set 7.824 -CONFIG_MSDOS_PARTITION=y 7.825 -# CONFIG_BSD_DISKLABEL is not set 7.826 -# CONFIG_MINIX_SUBPARTITION is not set 7.827 -# CONFIG_SOLARIS_X86_PARTITION is not set 7.828 -# CONFIG_UNIXWARE_DISKLABEL is not set 7.829 -# CONFIG_LDM_PARTITION is not set 7.830 -# CONFIG_SGI_PARTITION is not set 7.831 -# CONFIG_ULTRIX_PARTITION is not set 7.832 -# CONFIG_SUN_PARTITION is not set 7.833 -# CONFIG_EFI_PARTITION is not set 7.834 -# CONFIG_SMB_NLS is not set 7.835 -CONFIG_NLS=y 7.836 - 7.837 -# 7.838 -# Native Language Support 7.839 -# 7.840 -CONFIG_NLS_DEFAULT="iso8559-1" 7.841 -# CONFIG_NLS_CODEPAGE_437 is not set 7.842 -# CONFIG_NLS_CODEPAGE_737 is not set 7.843 -# CONFIG_NLS_CODEPAGE_775 is not set 7.844 -# CONFIG_NLS_CODEPAGE_850 is not set 7.845 -# CONFIG_NLS_CODEPAGE_852 is not set 7.846 -# CONFIG_NLS_CODEPAGE_855 is not set 7.847 -# CONFIG_NLS_CODEPAGE_857 is not set 7.848 -# CONFIG_NLS_CODEPAGE_860 is not set 7.849 -# CONFIG_NLS_CODEPAGE_861 is not set 7.850 -# CONFIG_NLS_CODEPAGE_862 is not set 7.851 -# CONFIG_NLS_CODEPAGE_863 is not set 7.852 -# CONFIG_NLS_CODEPAGE_864 is not set 7.853 -# CONFIG_NLS_CODEPAGE_865 is not set 7.854 -# CONFIG_NLS_CODEPAGE_866 is not set 7.855 -# CONFIG_NLS_CODEPAGE_869 is not set 7.856 -# CONFIG_NLS_CODEPAGE_936 is not set 7.857 -# CONFIG_NLS_CODEPAGE_950 is not set 7.858 -# CONFIG_NLS_CODEPAGE_932 is not set 7.859 -# CONFIG_NLS_CODEPAGE_949 is not set 7.860 -# CONFIG_NLS_CODEPAGE_874 is not set 7.861 -# CONFIG_NLS_ISO8859_8 is not set 7.862 -# CONFIG_NLS_CODEPAGE_1250 is not set 7.863 -# CONFIG_NLS_CODEPAGE_1251 is not set 7.864 -CONFIG_NLS_ISO8859_1=y 7.865 -# CONFIG_NLS_ISO8859_2 is not set 7.866 -# CONFIG_NLS_ISO8859_3 is not set 7.867 -# CONFIG_NLS_ISO8859_4 is not set 7.868 -# CONFIG_NLS_ISO8859_5 is not set 7.869 -# CONFIG_NLS_ISO8859_6 is not set 7.870 -# CONFIG_NLS_ISO8859_7 is not set 7.871 -# CONFIG_NLS_ISO8859_9 is not set 7.872 -# CONFIG_NLS_ISO8859_13 is not set 7.873 -# CONFIG_NLS_ISO8859_14 is not set 7.874 -# CONFIG_NLS_ISO8859_15 is not set 7.875 -# CONFIG_NLS_KOI8_R is not set 7.876 -# CONFIG_NLS_KOI8_U is not set 7.877 -# CONFIG_NLS_UTF8 is not set 7.878 - 7.879 -# 7.880 -# Console drivers 7.881 -# 7.882 -CONFIG_XEN_CONSOLE=y 7.883 -CONFIG_VGA_CONSOLE=y 7.884 -CONFIG_DUMMY_CONSOLE=y 7.885 -# CONFIG_VIDEO_SELECT is not set 7.886 -# CONFIG_MDA_CONSOLE is not set 7.887 - 7.888 -# 7.889 -# Frame-buffer support 7.890 -# 7.891 -# CONFIG_FB is not set 7.892 - 7.893 -# 7.894 -# Sound 7.895 -# 7.896 -# CONFIG_SOUND is not set 7.897 - 7.898 -# 7.899 -# USB support 7.900 -# 7.901 -# CONFIG_USB is not set 7.902 - 7.903 -# 7.904 -# Support for USB gadgets 7.905 -# 7.906 -# CONFIG_USB_GADGET is not set 7.907 - 7.908 -# 7.909 -# Bluetooth support 7.910 -# 7.911 -# CONFIG_BLUEZ is not set 7.912 - 7.913 -# 7.914 -# Kernel hacking 7.915 -# 7.916 -CONFIG_DEBUG_KERNEL=y 7.917 -# CONFIG_DEBUG_STACKOVERFLOW is not set 7.918 -# CONFIG_DEBUG_HIGHMEM is not set 7.919 -# CONFIG_DEBUG_SLAB is not set 7.920 -# CONFIG_DEBUG_IOVIRT is not set 7.921 -# CONFIG_MAGIC_SYSRQ is not set 7.922 -# CONFIG_DEBUG_SPINLOCK is not set 7.923 -# CONFIG_DEBUG_BUGVERBOSE is not set 7.924 -CONFIG_KALLSYMS=y 7.925 -# CONFIG_FRAME_POINTER is not set 7.926 -CONFIG_LOG_BUF_SHIFT=0 7.927 - 7.928 -# 7.929 -# Cryptographic options 7.930 -# 7.931 -CONFIG_CRYPTO=y 7.932 -CONFIG_CRYPTO_HMAC=y 7.933 -CONFIG_CRYPTO_NULL=m 7.934 -CONFIG_CRYPTO_MD4=m 7.935 -CONFIG_CRYPTO_MD5=m 7.936 -CONFIG_CRYPTO_SHA1=m 7.937 -CONFIG_CRYPTO_SHA256=m 7.938 -CONFIG_CRYPTO_SHA512=m 7.939 -# CONFIG_CRYPTO_WP512 is not set 7.940 -CONFIG_CRYPTO_DES=m 7.941 -CONFIG_CRYPTO_BLOWFISH=m 7.942 -CONFIG_CRYPTO_TWOFISH=m 7.943 -CONFIG_CRYPTO_SERPENT=m 7.944 -CONFIG_CRYPTO_AES=m 7.945 -CONFIG_CRYPTO_CAST5=m 7.946 -CONFIG_CRYPTO_CAST6=m 7.947 -# CONFIG_CRYPTO_TEA is not set 7.948 -# CONFIG_CRYPTO_KHAZAD is not set 7.949 -# CONFIG_CRYPTO_ANUBIS is not set 7.950 -CONFIG_CRYPTO_ARC4=m 7.951 -CONFIG_CRYPTO_DEFLATE=m 7.952 -# CONFIG_CRYPTO_MICHAEL_MIC is not set 7.953 -# CONFIG_CRYPTO_TEST is not set 7.954 - 7.955 -# 7.956 -# Library routines 7.957 -# 7.958 -# CONFIG_CRC32 is not set 7.959 -CONFIG_ZLIB_INFLATE=y 7.960 -CONFIG_ZLIB_DEFLATE=m 7.961 -# CONFIG_FW_LOADER is not set
8.1 --- a/linux-2.4.29-xen-sparse/arch/xen/defconfig-xenU Fri May 20 19:34:47 2005 +0000 8.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 8.3 @@ -1,561 +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_BLKDEV_GRANT=y 8.22 -# CONFIG_XEN_USB_FRONTEND is not set 8.23 -CONFIG_NO_IDLE_HZ=y 8.24 -# CONFIG_FOREIGN_PAGES is not set 8.25 -CONFIG_NETDEVICES=y 8.26 -# CONFIG_VT is not set 8.27 - 8.28 -# 8.29 -# Code maturity level options 8.30 -# 8.31 -CONFIG_EXPERIMENTAL=y 8.32 - 8.33 -# 8.34 -# Loadable module support 8.35 -# 8.36 -CONFIG_MODULES=y 8.37 -CONFIG_MODVERSIONS=y 8.38 -CONFIG_KMOD=y 8.39 - 8.40 -# 8.41 -# Processor type and features 8.42 -# 8.43 -CONFIG_M686=y 8.44 -# CONFIG_MPENTIUMIII is not set 8.45 -# CONFIG_MPENTIUM4 is not set 8.46 -# CONFIG_MK7 is not set 8.47 -# CONFIG_MK8 is not set 8.48 -# CONFIG_MVIAC3_2 is not set 8.49 -CONFIG_X86_WP_WORKS_OK=y 8.50 -CONFIG_X86_INVLPG=y 8.51 -CONFIG_X86_CMPXCHG=y 8.52 -CONFIG_X86_XADD=y 8.53 -CONFIG_X86_BSWAP=y 8.54 -CONFIG_X86_POPAD_OK=y 8.55 -# CONFIG_RWSEM_GENERIC_SPINLOCK is not set 8.56 -CONFIG_RWSEM_XCHGADD_ALGORITHM=y 8.57 -CONFIG_X86_GOOD_APIC=y 8.58 -CONFIG_X86_PGE=y 8.59 -CONFIG_X86_USE_PPRO_CHECKSUM=y 8.60 -CONFIG_X86_TSC=y 8.61 -CONFIG_X86_L1_CACHE_SHIFT=5 8.62 -CONFIG_NOHIGHMEM=y 8.63 -# CONFIG_HIGHMEM4G is not set 8.64 -CONFIG_FORCE_MAX_ZONEORDER=11 8.65 - 8.66 -# 8.67 -# General setup 8.68 -# 8.69 -CONFIG_NET=y 8.70 -CONFIG_SYSVIPC=y 8.71 -# CONFIG_BSD_PROCESS_ACCT is not set 8.72 -CONFIG_SYSCTL=y 8.73 -CONFIG_KCORE_ELF=y 8.74 -# CONFIG_KCORE_AOUT is not set 8.75 -CONFIG_BINFMT_AOUT=y 8.76 -CONFIG_BINFMT_ELF=y 8.77 -# CONFIG_BINFMT_MISC is not set 8.78 -# CONFIG_OOM_KILLER is not set 8.79 - 8.80 -# 8.81 -# Networking options 8.82 -# 8.83 -CONFIG_PACKET=y 8.84 -CONFIG_PACKET_MMAP=y 8.85 -# CONFIG_NETLINK_DEV is not set 8.86 -CONFIG_NETFILTER=y 8.87 -# CONFIG_NETFILTER_DEBUG is not set 8.88 -CONFIG_FILTER=y 8.89 -CONFIG_UNIX=y 8.90 -CONFIG_INET=y 8.91 -# CONFIG_IP_MULTICAST is not set 8.92 -# CONFIG_IP_ADVANCED_ROUTER is not set 8.93 -CONFIG_IP_PNP=y 8.94 -CONFIG_IP_PNP_DHCP=y 8.95 -# CONFIG_IP_PNP_BOOTP is not set 8.96 -# CONFIG_IP_PNP_RARP is not set 8.97 -# CONFIG_NET_IPIP is not set 8.98 -# CONFIG_NET_IPGRE is not set 8.99 -# CONFIG_ARPD is not set 8.100 -# CONFIG_INET_ECN is not set 8.101 -# CONFIG_SYN_COOKIES is not set 8.102 - 8.103 -# 8.104 -# IP: Netfilter Configuration 8.105 -# 8.106 -CONFIG_IP_NF_CONNTRACK=y 8.107 -CONFIG_IP_NF_FTP=y 8.108 -# CONFIG_IP_NF_AMANDA is not set 8.109 -CONFIG_IP_NF_TFTP=y 8.110 -CONFIG_IP_NF_IRC=y 8.111 -# CONFIG_IP_NF_QUEUE is not set 8.112 -CONFIG_IP_NF_IPTABLES=y 8.113 -# CONFIG_IP_NF_MATCH_LIMIT is not set 8.114 -# CONFIG_IP_NF_MATCH_MAC is not set 8.115 -# CONFIG_IP_NF_MATCH_PKTTYPE is not set 8.116 -# CONFIG_IP_NF_MATCH_MARK is not set 8.117 -# CONFIG_IP_NF_MATCH_MULTIPORT is not set 8.118 -# CONFIG_IP_NF_MATCH_TOS is not set 8.119 -# CONFIG_IP_NF_MATCH_RECENT is not set 8.120 -# CONFIG_IP_NF_MATCH_ECN is not set 8.121 -# CONFIG_IP_NF_MATCH_DSCP is not set 8.122 -# CONFIG_IP_NF_MATCH_AH_ESP is not set 8.123 -# CONFIG_IP_NF_MATCH_LENGTH is not set 8.124 -# CONFIG_IP_NF_MATCH_TTL is not set 8.125 -# CONFIG_IP_NF_MATCH_TCPMSS is not set 8.126 -# CONFIG_IP_NF_MATCH_HELPER is not set 8.127 -CONFIG_IP_NF_MATCH_STATE=y 8.128 -CONFIG_IP_NF_MATCH_CONNTRACK=y 8.129 -# CONFIG_IP_NF_MATCH_UNCLEAN is not set 8.130 -# CONFIG_IP_NF_MATCH_OWNER is not set 8.131 -CONFIG_IP_NF_FILTER=y 8.132 -CONFIG_IP_NF_TARGET_REJECT=y 8.133 -# CONFIG_IP_NF_TARGET_MIRROR is not set 8.134 -CONFIG_IP_NF_NAT=y 8.135 -CONFIG_IP_NF_NAT_NEEDED=y 8.136 -CONFIG_IP_NF_TARGET_MASQUERADE=y 8.137 -CONFIG_IP_NF_TARGET_REDIRECT=y 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 -# CONFIG_DECNET is not set 8.168 -# CONFIG_BRIDGE is not set 8.169 -# CONFIG_X25 is not set 8.170 -# CONFIG_LAPB is not set 8.171 -# CONFIG_LLC is not set 8.172 -# CONFIG_NET_DIVERT is not set 8.173 -# CONFIG_ECONET is not set 8.174 -# CONFIG_WAN_ROUTER is not set 8.175 -# CONFIG_NET_FASTROUTE is not set 8.176 -# CONFIG_NET_HW_FLOWCONTROL is not set 8.177 - 8.178 -# 8.179 -# QoS and/or fair queueing 8.180 -# 8.181 -# CONFIG_NET_SCHED is not set 8.182 - 8.183 -# 8.184 -# Network testing 8.185 -# 8.186 -# CONFIG_NET_PKTGEN is not set 8.187 - 8.188 -# 8.189 -# SCSI support 8.190 -# 8.191 -CONFIG_SCSI=y 8.192 - 8.193 -# 8.194 -# SCSI support type (disk, tape, CD-ROM) 8.195 -# 8.196 -CONFIG_BLK_DEV_SD=y 8.197 -CONFIG_SD_EXTRA_DEVS=40 8.198 -# CONFIG_CHR_DEV_ST is not set 8.199 -# CONFIG_CHR_DEV_OSST is not set 8.200 -# CONFIG_BLK_DEV_SR is not set 8.201 -CONFIG_CHR_DEV_SG=y 8.202 - 8.203 -# 8.204 -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs 8.205 -# 8.206 -# CONFIG_SCSI_DEBUG_QUEUES is not set 8.207 -# CONFIG_SCSI_MULTI_LUN is not set 8.208 -# CONFIG_SCSI_CONSTANTS is not set 8.209 -# CONFIG_SCSI_LOGGING is not set 8.210 - 8.211 -# 8.212 -# SCSI low-level drivers 8.213 -# 8.214 -# CONFIG_SCSI_7000FASST is not set 8.215 -# CONFIG_SCSI_ACARD is not set 8.216 -# CONFIG_SCSI_AHA152X is not set 8.217 -# CONFIG_SCSI_AHA1542 is not set 8.218 -# CONFIG_SCSI_AHA1740 is not set 8.219 -# CONFIG_SCSI_AACRAID is not set 8.220 -# CONFIG_SCSI_AIC7XXX is not set 8.221 -# CONFIG_SCSI_AIC79XX is not set 8.222 -# CONFIG_SCSI_AIC7XXX_OLD is not set 8.223 -# CONFIG_SCSI_DPT_I2O is not set 8.224 -# CONFIG_SCSI_ADVANSYS is not set 8.225 -# CONFIG_SCSI_IN2000 is not set 8.226 -# CONFIG_SCSI_AM53C974 is not set 8.227 -# CONFIG_SCSI_MEGARAID is not set 8.228 -# CONFIG_SCSI_MEGARAID2 is not set 8.229 -# CONFIG_SCSI_SATA is not set 8.230 -# CONFIG_SCSI_SATA_AHCI is not set 8.231 -# CONFIG_SCSI_SATA_SVW is not set 8.232 -# CONFIG_SCSI_ATA_PIIX is not set 8.233 -# CONFIG_SCSI_SATA_NV is not set 8.234 -# CONFIG_SCSI_SATA_PROMISE is not set 8.235 -# CONFIG_SCSI_SATA_SX4 is not set 8.236 -# CONFIG_SCSI_SATA_SIL is not set 8.237 -# CONFIG_SCSI_SATA_SIS is not set 8.238 -# CONFIG_SCSI_SATA_ULI is not set 8.239 -# CONFIG_SCSI_SATA_VIA is not set 8.240 -# CONFIG_SCSI_SATA_VITESSE is not set 8.241 -# CONFIG_SCSI_BUSLOGIC is not set 8.242 -# CONFIG_SCSI_DMX3191D is not set 8.243 -# CONFIG_SCSI_DTC3280 is not set 8.244 -# CONFIG_SCSI_EATA is not set 8.245 -# CONFIG_SCSI_EATA_DMA is not set 8.246 -# CONFIG_SCSI_EATA_PIO is not set 8.247 -# CONFIG_SCSI_FUTURE_DOMAIN is not set 8.248 -# CONFIG_SCSI_GDTH is not set 8.249 -# CONFIG_SCSI_GENERIC_NCR5380 is not set 8.250 -# CONFIG_SCSI_IPS is not set 8.251 -# CONFIG_SCSI_INITIO is not set 8.252 -# CONFIG_SCSI_INIA100 is not set 8.253 -# CONFIG_SCSI_PPA is not set 8.254 -# CONFIG_SCSI_IMM is not set 8.255 -# CONFIG_SCSI_NCR53C406A is not set 8.256 -# CONFIG_SCSI_NCR53C7xx is not set 8.257 -# CONFIG_SCSI_PAS16 is not set 8.258 -# CONFIG_SCSI_PCI2000 is not set 8.259 -# CONFIG_SCSI_PCI2220I is not set 8.260 -# CONFIG_SCSI_PSI240I is not set 8.261 -# CONFIG_SCSI_QLOGIC_FAS is not set 8.262 -# CONFIG_SCSI_SEAGATE is not set 8.263 -# CONFIG_SCSI_SIM710 is not set 8.264 -# CONFIG_SCSI_SYM53C416 is not set 8.265 -# CONFIG_SCSI_T128 is not set 8.266 -# CONFIG_SCSI_U14_34F is not set 8.267 -# CONFIG_SCSI_ULTRASTOR is not set 8.268 -# CONFIG_SCSI_NSP32 is not set 8.269 -# CONFIG_SCSI_DEBUG is not set 8.270 - 8.271 -# 8.272 -# Block devices 8.273 -# 8.274 -CONFIG_BLK_DEV_LOOP=y 8.275 -CONFIG_BLK_DEV_NBD=y 8.276 -CONFIG_BLK_DEV_RAM=y 8.277 -CONFIG_BLK_DEV_RAM_SIZE=4096 8.278 -CONFIG_BLK_DEV_INITRD=y 8.279 -# CONFIG_BLK_STATS is not set 8.280 -# CONFIG_BLK_DEV_HD is not set 8.281 - 8.282 -# 8.283 -# Character devices 8.284 -# 8.285 -# CONFIG_VT is not set 8.286 -# CONFIG_SERIAL is not set 8.287 -# CONFIG_SERIAL_EXTENDED is not set 8.288 -# CONFIG_SERIAL_NONSTANDARD is not set 8.289 -CONFIG_UNIX98_PTYS=y 8.290 -CONFIG_UNIX98_PTY_COUNT=256 8.291 -# CONFIG_PRINTER is not set 8.292 -# CONFIG_PPDEV is not set 8.293 -# CONFIG_TIPAR is not set 8.294 - 8.295 -# 8.296 -# I2C support 8.297 -# 8.298 -# CONFIG_I2C is not set 8.299 - 8.300 -# 8.301 -# Mice 8.302 -# 8.303 -# CONFIG_BUSMOUSE is not set 8.304 -CONFIG_MOUSE=y 8.305 -CONFIG_PSMOUSE=y 8.306 -# CONFIG_82C710_MOUSE is not set 8.307 -# CONFIG_PC110_PAD is not set 8.308 -# CONFIG_MK712_MOUSE is not set 8.309 - 8.310 -# 8.311 -# Joysticks 8.312 -# 8.313 -# CONFIG_INPUT_GAMEPORT is not set 8.314 -# CONFIG_INPUT_NS558 is not set 8.315 -# CONFIG_INPUT_LIGHTNING is not set 8.316 -# CONFIG_INPUT_PCIGAME is not set 8.317 -# CONFIG_INPUT_CS461X is not set 8.318 -# CONFIG_INPUT_EMU10K1 is not set 8.319 -# CONFIG_INPUT_SERIO is not set 8.320 -# CONFIG_INPUT_SERPORT is not set 8.321 - 8.322 -# 8.323 -# Joysticks 8.324 -# 8.325 -# CONFIG_INPUT_ANALOG is not set 8.326 -# CONFIG_INPUT_A3D is not set 8.327 -# CONFIG_INPUT_ADI is not set 8.328 -# CONFIG_INPUT_COBRA is not set 8.329 -# CONFIG_INPUT_GF2K is not set 8.330 -# CONFIG_INPUT_GRIP is not set 8.331 -# CONFIG_INPUT_INTERACT is not set 8.332 -# CONFIG_INPUT_TMDC is not set 8.333 -# CONFIG_INPUT_SIDEWINDER is not set 8.334 -# CONFIG_INPUT_IFORCE_USB is not set 8.335 -# CONFIG_INPUT_IFORCE_232 is not set 8.336 -# CONFIG_INPUT_WARRIOR is not set 8.337 -# CONFIG_INPUT_MAGELLAN is not set 8.338 -# CONFIG_INPUT_SPACEORB is not set 8.339 -# CONFIG_INPUT_SPACEBALL is not set 8.340 -# CONFIG_INPUT_STINGER is not set 8.341 -# CONFIG_INPUT_DB9 is not set 8.342 -# CONFIG_INPUT_GAMECON is not set 8.343 -# CONFIG_INPUT_TURBOGRAFX is not set 8.344 -# CONFIG_QIC02_TAPE is not set 8.345 -# CONFIG_IPMI_HANDLER is not set 8.346 -# CONFIG_IPMI_PANIC_EVENT is not set 8.347 -# CONFIG_IPMI_DEVICE_INTERFACE is not set 8.348 -# CONFIG_IPMI_KCS is not set 8.349 -# CONFIG_IPMI_WATCHDOG is not set 8.350 - 8.351 -# 8.352 -# Watchdog Cards 8.353 -# 8.354 -# CONFIG_WATCHDOG is not set 8.355 -# CONFIG_SCx200 is not set 8.356 -# CONFIG_SCx200_GPIO is not set 8.357 -# CONFIG_AMD_RNG is not set 8.358 -# CONFIG_INTEL_RNG is not set 8.359 -# CONFIG_HW_RANDOM is not set 8.360 -# CONFIG_AMD_PM768 is not set 8.361 -# CONFIG_NVRAM is not set 8.362 -# CONFIG_RTC is not set 8.363 -# CONFIG_DTLK is not set 8.364 -# CONFIG_R3964 is not set 8.365 -# CONFIG_APPLICOM is not set 8.366 -# CONFIG_SONYPI is not set 8.367 - 8.368 -# 8.369 -# Ftape, the floppy tape device driver 8.370 -# 8.371 -# CONFIG_FTAPE is not set 8.372 -# CONFIG_AGP is not set 8.373 - 8.374 -# 8.375 -# Direct Rendering Manager (XFree86 DRI support) 8.376 -# 8.377 -# CONFIG_DRM is not set 8.378 -# CONFIG_MWAVE is not set 8.379 -# CONFIG_OBMOUSE is not set 8.380 - 8.381 -# 8.382 -# File systems 8.383 -# 8.384 -# CONFIG_QUOTA is not set 8.385 -# CONFIG_QFMT_V2 is not set 8.386 -CONFIG_AUTOFS_FS=y 8.387 -CONFIG_AUTOFS4_FS=y 8.388 -# CONFIG_REISERFS_FS is not set 8.389 -# CONFIG_REISERFS_CHECK is not set 8.390 -# CONFIG_REISERFS_PROC_INFO is not set 8.391 -# CONFIG_ADFS_FS is not set 8.392 -# CONFIG_ADFS_FS_RW is not set 8.393 -# CONFIG_AFFS_FS is not set 8.394 -# CONFIG_HFS_FS is not set 8.395 -# CONFIG_HFSPLUS_FS is not set 8.396 -# CONFIG_BEFS_FS is not set 8.397 -# CONFIG_BEFS_DEBUG is not set 8.398 -# CONFIG_BFS_FS is not set 8.399 -CONFIG_EXT3_FS=y 8.400 -CONFIG_JBD=y 8.401 -# CONFIG_JBD_DEBUG is not set 8.402 -CONFIG_FAT_FS=y 8.403 -CONFIG_MSDOS_FS=y 8.404 -CONFIG_UMSDOS_FS=y 8.405 -CONFIG_VFAT_FS=y 8.406 -# CONFIG_EFS_FS is not set 8.407 -# CONFIG_JFFS_FS is not set 8.408 -# CONFIG_JFFS2_FS is not set 8.409 -# CONFIG_CRAMFS is not set 8.410 -CONFIG_TMPFS=y 8.411 -CONFIG_RAMFS=y 8.412 -CONFIG_ISO9660_FS=y 8.413 -CONFIG_JOLIET=y 8.414 -CONFIG_ZISOFS=y 8.415 -# CONFIG_JFS_FS is not set 8.416 -# CONFIG_JFS_DEBUG is not set 8.417 -# CONFIG_JFS_STATISTICS is not set 8.418 -# CONFIG_MINIX_FS is not set 8.419 -# CONFIG_VXFS_FS is not set 8.420 -# CONFIG_NTFS_FS is not set 8.421 -# CONFIG_NTFS_RW is not set 8.422 -# CONFIG_HPFS_FS is not set 8.423 -CONFIG_PROC_FS=y 8.424 -# CONFIG_DEVFS_FS is not set 8.425 -# CONFIG_DEVFS_MOUNT is not set 8.426 -# CONFIG_DEVFS_DEBUG is not set 8.427 -CONFIG_DEVPTS_FS=y 8.428 -# CONFIG_QNX4FS_FS is not set 8.429 -# CONFIG_QNX4FS_RW is not set 8.430 -# CONFIG_ROMFS_FS is not set 8.431 -CONFIG_EXT2_FS=y 8.432 -# CONFIG_SYSV_FS is not set 8.433 -# CONFIG_UDF_FS is not set 8.434 -# CONFIG_UDF_RW is not set 8.435 -# CONFIG_UFS_FS is not set 8.436 -# CONFIG_UFS_FS_WRITE is not set 8.437 -# CONFIG_XFS_FS is not set 8.438 -# CONFIG_XFS_QUOTA is not set 8.439 -# CONFIG_XFS_RT is not set 8.440 -# CONFIG_XFS_TRACE is not set 8.441 -# CONFIG_XFS_DEBUG is not set 8.442 - 8.443 -# 8.444 -# Network File Systems 8.445 -# 8.446 -# CONFIG_CODA_FS is not set 8.447 -# CONFIG_INTERMEZZO_FS is not set 8.448 -CONFIG_NFS_FS=y 8.449 -CONFIG_NFS_V3=y 8.450 -# CONFIG_NFS_DIRECTIO is not set 8.451 -CONFIG_ROOT_NFS=y 8.452 -CONFIG_NFSD=y 8.453 -CONFIG_NFSD_V3=y 8.454 -# CONFIG_NFSD_TCP is not set 8.455 -CONFIG_SUNRPC=y 8.456 -CONFIG_LOCKD=y 8.457 -CONFIG_LOCKD_V4=y 8.458 -# CONFIG_SMB_FS is not set 8.459 -# CONFIG_NCP_FS is not set 8.460 -# CONFIG_NCPFS_PACKET_SIGNING is not set 8.461 -# CONFIG_NCPFS_IOCTL_LOCKING is not set 8.462 -# CONFIG_NCPFS_STRONG is not set 8.463 -# CONFIG_NCPFS_NFS_NS is not set 8.464 -# CONFIG_NCPFS_OS2_NS is not set 8.465 -# CONFIG_NCPFS_SMALLDOS is not set 8.466 -# CONFIG_NCPFS_NLS is not set 8.467 -# CONFIG_NCPFS_EXTRAS is not set 8.468 -CONFIG_ZISOFS_FS=y 8.469 - 8.470 -# 8.471 -# Partition Types 8.472 -# 8.473 -CONFIG_PARTITION_ADVANCED=y 8.474 -# CONFIG_ACORN_PARTITION is not set 8.475 -# CONFIG_OSF_PARTITION is not set 8.476 -# CONFIG_AMIGA_PARTITION is not set 8.477 -# CONFIG_ATARI_PARTITION is not set 8.478 -# CONFIG_MAC_PARTITION is not set 8.479 -CONFIG_MSDOS_PARTITION=y 8.480 -# CONFIG_BSD_DISKLABEL is not set 8.481 -# CONFIG_MINIX_SUBPARTITION is not set 8.482 -# CONFIG_SOLARIS_X86_PARTITION is not set 8.483 -# CONFIG_UNIXWARE_DISKLABEL is not set 8.484 -# CONFIG_LDM_PARTITION is not set 8.485 -# CONFIG_SGI_PARTITION is not set 8.486 -# CONFIG_ULTRIX_PARTITION is not set 8.487 -# CONFIG_SUN_PARTITION is not set 8.488 -# CONFIG_EFI_PARTITION is not set 8.489 -# CONFIG_SMB_NLS is not set 8.490 -CONFIG_NLS=y 8.491 - 8.492 -# 8.493 -# Native Language Support 8.494 -# 8.495 -CONFIG_NLS_DEFAULT="iso8559-1" 8.496 -# CONFIG_NLS_CODEPAGE_437 is not set 8.497 -# CONFIG_NLS_CODEPAGE_737 is not set 8.498 -# CONFIG_NLS_CODEPAGE_775 is not set 8.499 -# CONFIG_NLS_CODEPAGE_850 is not set 8.500 -# CONFIG_NLS_CODEPAGE_852 is not set 8.501 -# CONFIG_NLS_CODEPAGE_855 is not set 8.502 -# CONFIG_NLS_CODEPAGE_857 is not set 8.503 -# CONFIG_NLS_CODEPAGE_860 is not set 8.504 -# CONFIG_NLS_CODEPAGE_861 is not set 8.505 -# CONFIG_NLS_CODEPAGE_862 is not set 8.506 -# CONFIG_NLS_CODEPAGE_863 is not set 8.507 -# CONFIG_NLS_CODEPAGE_864 is not set 8.508 -# CONFIG_NLS_CODEPAGE_865 is not set 8.509 -# CONFIG_NLS_CODEPAGE_866 is not set 8.510 -# CONFIG_NLS_CODEPAGE_869 is not set 8.511 -# CONFIG_NLS_CODEPAGE_936 is not set 8.512 -# CONFIG_NLS_CODEPAGE_950 is not set 8.513 -# CONFIG_NLS_CODEPAGE_932 is not set 8.514 -# CONFIG_NLS_CODEPAGE_949 is not set 8.515 -# CONFIG_NLS_CODEPAGE_874 is not set 8.516 -# CONFIG_NLS_ISO8859_8 is not set 8.517 -# CONFIG_NLS_CODEPAGE_1250 is not set 8.518 -# CONFIG_NLS_CODEPAGE_1251 is not set 8.519 -CONFIG_NLS_ISO8859_1=y 8.520 -# CONFIG_NLS_ISO8859_2 is not set 8.521 -# CONFIG_NLS_ISO8859_3 is not set 8.522 -# CONFIG_NLS_ISO8859_4 is not set 8.523 -# CONFIG_NLS_ISO8859_5 is not set 8.524 -# CONFIG_NLS_ISO8859_6 is not set 8.525 -# CONFIG_NLS_ISO8859_7 is not set 8.526 -# CONFIG_NLS_ISO8859_9 is not set 8.527 -# CONFIG_NLS_ISO8859_13 is not set 8.528 -# CONFIG_NLS_ISO8859_14 is not set 8.529 -# CONFIG_NLS_ISO8859_15 is not set 8.530 -# CONFIG_NLS_KOI8_R is not set 8.531 -# CONFIG_NLS_KOI8_U is not set 8.532 -# CONFIG_NLS_UTF8 is not set 8.533 - 8.534 -# 8.535 -# Console drivers 8.536 -# 8.537 -CONFIG_XEN_CONSOLE=y 8.538 - 8.539 -# 8.540 -# Kernel hacking 8.541 -# 8.542 -CONFIG_DEBUG_KERNEL=y 8.543 -# CONFIG_DEBUG_STACKOVERFLOW is not set 8.544 -# CONFIG_DEBUG_HIGHMEM is not set 8.545 -# CONFIG_DEBUG_SLAB is not set 8.546 -# CONFIG_DEBUG_IOVIRT is not set 8.547 -# CONFIG_MAGIC_SYSRQ is not set 8.548 -# CONFIG_DEBUG_SPINLOCK is not set 8.549 -# CONFIG_DEBUG_BUGVERBOSE is not set 8.550 -CONFIG_KALLSYMS=y 8.551 -# CONFIG_FRAME_POINTER is not set 8.552 -CONFIG_LOG_BUF_SHIFT=0 8.553 - 8.554 -# 8.555 -# Cryptographic options 8.556 -# 8.557 -# CONFIG_CRYPTO is not set 8.558 - 8.559 -# 8.560 -# Library routines 8.561 -# 8.562 -# CONFIG_CRC32 is not set 8.563 -CONFIG_ZLIB_INFLATE=y 8.564 -# CONFIG_ZLIB_DEFLATE is not set
9.1 --- a/linux-2.4.29-xen-sparse/arch/xen/drivers/balloon/Makefile Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/drivers/blkif/Makefile Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/drivers/blkif/backend/Makefile Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/drivers/blkif/frontend/Makefile Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/drivers/blkif/frontend/common.h Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/drivers/blkif/frontend/vbd.c Fri May 20 19:34:47 2005 +0000 14.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 14.3 @@ -1,540 +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 -#ifdef CONFIG_XEN_BLKDEV_GRANT 14.74 - blkif_control_probe_send(&req, &rsp, 14.75 - (unsigned long)(virt_to_machine(buf))); 14.76 -#else 14.77 - req.frame_and_sects[0] = virt_to_machine(buf) | 7; 14.78 - 14.79 - blkif_control_send(&req, &rsp); 14.80 -#endif 14.81 - 14.82 - if ( rsp.status <= 0 ) 14.83 - { 14.84 - printk(KERN_ALERT "Could not probe disks (%d)\n", rsp.status); 14.85 - return -1; 14.86 - } 14.87 - 14.88 - if ( (nr = rsp.status) > MAX_VBDS ) 14.89 - nr = MAX_VBDS; 14.90 - memcpy(disk_info, buf, nr * sizeof(vdisk_t)); 14.91 - 14.92 - return nr; 14.93 -} 14.94 - 14.95 -/* 14.96 - * xlvbd_init_device - initialise a VBD device 14.97 - * @disk: a vdisk_t describing the VBD 14.98 - * 14.99 - * Takes a vdisk_t * that describes a VBD the domain has access to. 14.100 - * Performs appropriate initialisation and registration of the device. 14.101 - * 14.102 - * Care needs to be taken when making re-entrant calls to ensure that 14.103 - * corruption does not occur. Also, devices that are in use should not have 14.104 - * their details updated. This is the caller's responsibility. 14.105 - */ 14.106 -static int xlvbd_init_device(vdisk_t *xd) 14.107 -{ 14.108 - int device = xd->device; 14.109 - int major = MAJOR(device); 14.110 - int minor = MINOR(device); 14.111 - int is_ide = IDE_DISK_MAJOR(major); /* is this an ide device? */ 14.112 - int is_scsi= SCSI_BLK_MAJOR(major); /* is this a scsi device? */ 14.113 - char *major_name; 14.114 - struct gendisk *gd; 14.115 - struct block_device *bd; 14.116 - xl_disk_t *disk; 14.117 - int i, rc = 0, max_part, partno; 14.118 - unsigned long capacity; 14.119 - 14.120 - unsigned char buf[64]; 14.121 - 14.122 - if ( (bd = bdget(device)) == NULL ) 14.123 - return -1; 14.124 - 14.125 - if ( ((disk = xldev_to_xldisk(device)) != NULL) && (disk->usage != 0) ) 14.126 - { 14.127 - printk(KERN_ALERT "VBD update failed - in use [dev=%x]\n", device); 14.128 - rc = -1; 14.129 - goto out; 14.130 - } 14.131 - 14.132 - if ( is_ide ) { 14.133 - 14.134 - major_name = XLIDE_MAJOR_NAME; 14.135 - max_part = XLIDE_MAX_PART; 14.136 - 14.137 - } else if ( is_scsi ) { 14.138 - 14.139 - major_name = XLSCSI_MAJOR_NAME; 14.140 - max_part = XLSCSI_MAX_PART; 14.141 - 14.142 - } else { 14.143 - 14.144 - /* SMH: hmm - probably a CCISS driver or sim; assume CCISS for now */ 14.145 - printk(KERN_ALERT "Assuming device %02x:%02x is CCISS/SCSI\n", 14.146 - major, minor); 14.147 - is_scsi = 1; 14.148 - major_name = "cciss"; 14.149 - max_part = XLSCSI_MAX_PART; 14.150 - 14.151 - } 14.152 - 14.153 - partno = minor & (max_part - 1); 14.154 - 14.155 - if ( (gd = get_gendisk(device)) == NULL ) 14.156 - { 14.157 - rc = register_blkdev(major, major_name, &xlvbd_block_fops); 14.158 - if ( rc < 0 ) 14.159 - { 14.160 - printk(KERN_ALERT "XL VBD: can't get major %d\n", major); 14.161 - goto out; 14.162 - } 14.163 - 14.164 - if ( is_ide ) 14.165 - { 14.166 - blksize_size[major] = xlide_blksize_size; 14.167 - hardsect_size[major] = xlide_hardsect_size; 14.168 - max_sectors[major] = xlide_max_sectors; 14.169 - read_ahead[major] = 8; 14.170 - } 14.171 - else if ( is_scsi ) 14.172 - { 14.173 - blksize_size[major] = xlscsi_blksize_size; 14.174 - hardsect_size[major] = xlscsi_hardsect_size; 14.175 - max_sectors[major] = xlscsi_max_sectors; 14.176 - read_ahead[major] = 8; 14.177 - } 14.178 - else 14.179 - { 14.180 - blksize_size[major] = xlvbd_blksize_size; 14.181 - hardsect_size[major] = xlvbd_hardsect_size; 14.182 - max_sectors[major] = xlvbd_max_sectors; 14.183 - read_ahead[major] = 8; 14.184 - } 14.185 - 14.186 - blk_init_queue(BLK_DEFAULT_QUEUE(major), do_blkif_request); 14.187 - 14.188 - /* 14.189 - * Turn off barking 'headactive' mode. We dequeue buffer heads as 14.190 - * soon as we pass them to the back-end driver. 14.191 - */ 14.192 - blk_queue_headactive(BLK_DEFAULT_QUEUE(major), 0); 14.193 - 14.194 - /* Construct an appropriate gendisk structure. */ 14.195 - gd = kmalloc(sizeof(struct gendisk), GFP_KERNEL); 14.196 - gd->major = major; 14.197 - gd->major_name = major_name; 14.198 - 14.199 - gd->max_p = max_part; 14.200 - if ( is_ide ) 14.201 - { 14.202 - gd->minor_shift = XLIDE_PARTN_SHIFT; 14.203 - gd->nr_real = XLIDE_DEVS_PER_MAJOR; 14.204 - } 14.205 - else if ( is_scsi ) 14.206 - { 14.207 - gd->minor_shift = XLSCSI_PARTN_SHIFT; 14.208 - gd->nr_real = XLSCSI_DEVS_PER_MAJOR; 14.209 - } 14.210 - else 14.211 - { 14.212 - gd->minor_shift = XLVBD_PARTN_SHIFT; 14.213 - gd->nr_real = XLVBD_DEVS_PER_MAJOR; 14.214 - } 14.215 - 14.216 - /* 14.217 - ** The sizes[] and part[] arrays hold the sizes and other 14.218 - ** information about every partition with this 'major' (i.e. 14.219 - ** every disk sharing the 8 bit prefix * max partns per disk) 14.220 - */ 14.221 - gd->sizes = kmalloc(max_part*gd->nr_real*sizeof(int), GFP_KERNEL); 14.222 - gd->part = kmalloc(max_part*gd->nr_real*sizeof(struct hd_struct), 14.223 - GFP_KERNEL); 14.224 - memset(gd->sizes, 0, max_part * gd->nr_real * sizeof(int)); 14.225 - memset(gd->part, 0, max_part * gd->nr_real 14.226 - * sizeof(struct hd_struct)); 14.227 - 14.228 - 14.229 - gd->real_devices = kmalloc(gd->nr_real * sizeof(xl_disk_t), 14.230 - GFP_KERNEL); 14.231 - memset(gd->real_devices, 0, gd->nr_real * sizeof(xl_disk_t)); 14.232 - 14.233 - gd->next = NULL; 14.234 - gd->fops = &xlvbd_block_fops; 14.235 - 14.236 - gd->de_arr = kmalloc(gd->nr_real * sizeof(*gd->de_arr), 14.237 - GFP_KERNEL); 14.238 - gd->flags = kmalloc(gd->nr_real * sizeof(*gd->flags), GFP_KERNEL); 14.239 - 14.240 - memset(gd->de_arr, 0, gd->nr_real * sizeof(*gd->de_arr)); 14.241 - memset(gd->flags, 0, gd->nr_real * sizeof(*gd->flags)); 14.242 - 14.243 - add_gendisk(gd); 14.244 - 14.245 - blk_size[major] = gd->sizes; 14.246 - } 14.247 - 14.248 - if ( xd->info & VDISK_READONLY ) 14.249 - set_device_ro(device, 1); 14.250 - 14.251 - gd->flags[minor >> gd->minor_shift] |= GENHD_FL_XEN; 14.252 - 14.253 - /* NB. Linux 2.4 only handles 32-bit sector offsets and capacities. */ 14.254 - capacity = (unsigned long)xd->capacity; 14.255 - 14.256 - if ( partno != 0 ) 14.257 - { 14.258 - /* 14.259 - * If this was previously set up as a real disc we will have set 14.260 - * up partition-table information. Virtual partitions override 14.261 - * 'real' partitions, and the two cannot coexist on a device. 14.262 - */ 14.263 - if ( !(gd->flags[minor >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS) && 14.264 - (gd->sizes[minor & ~(max_part-1)] != 0) ) 14.265 - { 14.266 - /* 14.267 - * Any non-zero sub-partition entries must be cleaned out before 14.268 - * installing 'virtual' partition entries. The two types cannot 14.269 - * coexist, and virtual partitions are favoured. 14.270 - */ 14.271 - kdev_t dev = device & ~(max_part-1); 14.272 - for ( i = max_part - 1; i > 0; i-- ) 14.273 - { 14.274 - invalidate_device(dev+i, 1); 14.275 - gd->part[MINOR(dev+i)].start_sect = 0; 14.276 - gd->part[MINOR(dev+i)].nr_sects = 0; 14.277 - gd->sizes[MINOR(dev+i)] = 0; 14.278 - } 14.279 - printk(KERN_ALERT 14.280 - "Virtual partitions found for /dev/%s - ignoring any " 14.281 - "real partition information we may have found.\n", 14.282 - disk_name(gd, MINOR(device), buf)); 14.283 - } 14.284 - 14.285 - /* Need to skankily setup 'partition' information */ 14.286 - gd->part[minor].start_sect = 0; 14.287 - gd->part[minor].nr_sects = capacity; 14.288 - gd->sizes[minor] = capacity >>(BLOCK_SIZE_BITS-9); 14.289 - 14.290 - gd->flags[minor >> gd->minor_shift] |= GENHD_FL_VIRT_PARTNS; 14.291 - } 14.292 - else 14.293 - { 14.294 - gd->part[minor].nr_sects = capacity; 14.295 - gd->sizes[minor] = capacity>>(BLOCK_SIZE_BITS-9); 14.296 - 14.297 - /* Some final fix-ups depending on the device type */ 14.298 - if ( xd->info & VDISK_REMOVABLE ) 14.299 - { 14.300 - gd->flags[minor >> gd->minor_shift] |= GENHD_FL_REMOVABLE; 14.301 - printk(KERN_ALERT 14.302 - "Skipping partition check on %s /dev/%s\n", 14.303 - (xd->info & VDISK_CDROM) ? "cdrom" : "removable", 14.304 - disk_name(gd, MINOR(device), buf)); 14.305 - } 14.306 - else 14.307 - { 14.308 - /* Only check partitions on real discs (not virtual!). */ 14.309 - if ( gd->flags[minor>>gd->minor_shift] & GENHD_FL_VIRT_PARTNS ) 14.310 - { 14.311 - printk(KERN_ALERT 14.312 - "Skipping partition check on virtual /dev/%s\n", 14.313 - disk_name(gd, MINOR(device), buf)); 14.314 - break; 14.315 - } 14.316 - register_disk(gd, device, gd->max_p, &xlvbd_block_fops, capacity); 14.317 - } 14.318 - } 14.319 - 14.320 - out: 14.321 - bdput(bd); 14.322 - return rc; 14.323 -} 14.324 - 14.325 - 14.326 -/* 14.327 - * xlvbd_remove_device - remove a device node if possible 14.328 - * @device: numeric device ID 14.329 - * 14.330 - * Updates the gendisk structure and invalidates devices. 14.331 - * 14.332 - * This is OK for now but in future, should perhaps consider where this should 14.333 - * deallocate gendisks / unregister devices. 14.334 - */ 14.335 -static int xlvbd_remove_device(int device) 14.336 -{ 14.337 - int i, rc = 0, minor = MINOR(device); 14.338 - struct gendisk *gd; 14.339 - struct block_device *bd; 14.340 - xl_disk_t *disk = NULL; 14.341 - 14.342 - if ( (bd = bdget(device)) == NULL ) 14.343 - return -1; 14.344 - 14.345 - if ( ((gd = get_gendisk(device)) == NULL) || 14.346 - ((disk = xldev_to_xldisk(device)) == NULL) ) 14.347 - BUG(); 14.348 - 14.349 - if ( disk->usage != 0 ) 14.350 - { 14.351 - printk(KERN_ALERT "VBD removal failed - in use [dev=%x]\n", device); 14.352 - rc = -1; 14.353 - goto out; 14.354 - } 14.355 - 14.356 - if ( (minor & (gd->max_p-1)) != 0 ) 14.357 - { 14.358 - /* 1: The VBD is mapped to a partition rather than a whole unit. */ 14.359 - invalidate_device(device, 1); 14.360 - gd->part[minor].start_sect = 0; 14.361 - gd->part[minor].nr_sects = 0; 14.362 - gd->sizes[minor] = 0; 14.363 - 14.364 - /* Clear the consists-of-virtual-partitions flag if possible. */ 14.365 - gd->flags[minor >> gd->minor_shift] &= ~GENHD_FL_VIRT_PARTNS; 14.366 - for ( i = 1; i < gd->max_p; i++ ) 14.367 - if ( gd->sizes[(minor & ~(gd->max_p-1)) + i] != 0 ) 14.368 - gd->flags[minor >> gd->minor_shift] |= GENHD_FL_VIRT_PARTNS; 14.369 - 14.370 - /* 14.371 - * If all virtual partitions are now gone, and a 'whole unit' VBD is 14.372 - * present, then we can try to grok the unit's real partition table. 14.373 - */ 14.374 - if ( !(gd->flags[minor >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS) && 14.375 - (gd->sizes[minor & ~(gd->max_p-1)] != 0) && 14.376 - !(gd->flags[minor >> gd->minor_shift] & GENHD_FL_REMOVABLE) ) 14.377 - { 14.378 - register_disk(gd, 14.379 - device&~(gd->max_p-1), 14.380 - gd->max_p, 14.381 - &xlvbd_block_fops, 14.382 - gd->part[minor&~(gd->max_p-1)].nr_sects); 14.383 - } 14.384 - } 14.385 - else 14.386 - { 14.387 - /* 14.388 - * 2: The VBD is mapped to an entire 'unit'. Clear all partitions. 14.389 - * NB. The partition entries are only cleared if there are no VBDs 14.390 - * mapped to individual partitions on this unit. 14.391 - */ 14.392 - i = gd->max_p - 1; /* Default: clear subpartitions as well. */ 14.393 - if ( gd->flags[minor >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS ) 14.394 - i = 0; /* 'Virtual' mode: only clear the 'whole unit' entry. */ 14.395 - while ( i >= 0 ) 14.396 - { 14.397 - invalidate_device(device+i, 1); 14.398 - gd->part[minor+i].start_sect = 0; 14.399 - gd->part[minor+i].nr_sects = 0; 14.400 - gd->sizes[minor+i] = 0; 14.401 - i--; 14.402 - } 14.403 - } 14.404 - 14.405 - out: 14.406 - bdput(bd); 14.407 - return rc; 14.408 -} 14.409 - 14.410 -/* 14.411 - * xlvbd_update_vbds - reprobes the VBD status and performs updates driver 14.412 - * state. The VBDs need to be updated in this way when the domain is 14.413 - * initialised and also each time we receive an XLBLK_UPDATE event. 14.414 - */ 14.415 -void xlvbd_update_vbds(void) 14.416 -{ 14.417 - int i, j, k, old_nr, new_nr; 14.418 - vdisk_t *old_info, *new_info, *merged_info; 14.419 - 14.420 - old_info = vbd_info; 14.421 - old_nr = nr_vbds; 14.422 - 14.423 - new_info = kmalloc(MAX_VBDS * sizeof(vdisk_t), GFP_KERNEL); 14.424 - if (!new_info) 14.425 - return; 14.426 - 14.427 - if ( unlikely(new_nr = xlvbd_get_vbd_info(new_info)) < 0 ) 14.428 - goto out; 14.429 - 14.430 - /* 14.431 - * Final list maximum size is old list + new list. This occurs only when 14.432 - * old list and new list do not overlap at all, and we cannot yet destroy 14.433 - * VBDs in the old list because the usage counts are busy. 14.434 - */ 14.435 - merged_info = kmalloc((old_nr + new_nr) * sizeof(vdisk_t), GFP_KERNEL); 14.436 - if (!merged_info) 14.437 - goto out; 14.438 - 14.439 - /* @i tracks old list; @j tracks new list; @k tracks merged list. */ 14.440 - i = j = k = 0; 14.441 - 14.442 - while ( (i < old_nr) && (j < new_nr) ) 14.443 - { 14.444 - if ( old_info[i].device < new_info[j].device ) 14.445 - { 14.446 - if ( xlvbd_remove_device(old_info[i].device) != 0 ) 14.447 - memcpy(&merged_info[k++], &old_info[i], sizeof(vdisk_t)); 14.448 - i++; 14.449 - } 14.450 - else if ( old_info[i].device > new_info[j].device ) 14.451 - { 14.452 - if ( xlvbd_init_device(&new_info[j]) == 0 ) 14.453 - memcpy(&merged_info[k++], &new_info[j], sizeof(vdisk_t)); 14.454 - j++; 14.455 - } 14.456 - else 14.457 - { 14.458 - if ( ((old_info[i].capacity == new_info[j].capacity) && 14.459 - (old_info[i].info == new_info[j].info)) || 14.460 - (xlvbd_remove_device(old_info[i].device) != 0) ) 14.461 - memcpy(&merged_info[k++], &old_info[i], sizeof(vdisk_t)); 14.462 - else if ( xlvbd_init_device(&new_info[j]) == 0 ) 14.463 - memcpy(&merged_info[k++], &new_info[j], sizeof(vdisk_t)); 14.464 - i++; j++; 14.465 - } 14.466 - } 14.467 - 14.468 - for ( ; i < old_nr; i++ ) 14.469 - { 14.470 - if ( xlvbd_remove_device(old_info[i].device) != 0 ) 14.471 - memcpy(&merged_info[k++], &old_info[i], sizeof(vdisk_t)); 14.472 - } 14.473 - 14.474 - for ( ; j < new_nr; j++ ) 14.475 - { 14.476 - if ( xlvbd_init_device(&new_info[j]) == 0 ) 14.477 - memcpy(&merged_info[k++], &new_info[j], sizeof(vdisk_t)); 14.478 - } 14.479 - 14.480 - vbd_info = merged_info; 14.481 - nr_vbds = k; 14.482 - 14.483 - kfree(old_info); 14.484 -out: 14.485 - kfree(new_info); 14.486 -} 14.487 - 14.488 - 14.489 -/* 14.490 - * Set up all the linux device goop for the virtual block devices (vbd's) that 14.491 - * we know about. Note that although from the backend driver's p.o.v. VBDs are 14.492 - * addressed simply an opaque 16-bit device number, the domain creation tools 14.493 - * conventionally allocate these numbers to correspond to those used by 'real' 14.494 - * linux -- this is just for convenience as it means e.g. that the same 14.495 - * /etc/fstab can be used when booting with or without Xen. 14.496 - */ 14.497 -int xlvbd_init(void) 14.498 -{ 14.499 - int i; 14.500 - 14.501 - /* 14.502 - * If compiled as a module, we don't support unloading yet. We therefore 14.503 - * permanently increment the reference count to disallow it. 14.504 - */ 14.505 - SET_MODULE_OWNER(&xlvbd_block_fops); 14.506 - MOD_INC_USE_COUNT; 14.507 - 14.508 - /* Initialize the global arrays. */ 14.509 - for ( i = 0; i < 256; i++ ) 14.510 - { 14.511 - xlide_blksize_size[i] = 1024; 14.512 - xlide_hardsect_size[i] = 512; 14.513 - xlide_max_sectors[i] = 512; 14.514 - 14.515 - xlscsi_blksize_size[i] = 1024; 14.516 - xlscsi_hardsect_size[i] = 512; 14.517 - xlscsi_max_sectors[i] = 512; 14.518 - 14.519 - xlvbd_blksize_size[i] = 512; 14.520 - xlvbd_hardsect_size[i] = 512; 14.521 - xlvbd_max_sectors[i] = 512; 14.522 - } 14.523 - 14.524 - vbd_info = kmalloc(MAX_VBDS * sizeof(vdisk_t), GFP_KERNEL); 14.525 - if (!vbd_info) 14.526 - return -ENOMEM; 14.527 - 14.528 - nr_vbds = xlvbd_get_vbd_info(vbd_info); 14.529 - 14.530 - if ( nr_vbds < 0 ) 14.531 - { 14.532 - kfree(vbd_info); 14.533 - vbd_info = NULL; 14.534 - nr_vbds = 0; 14.535 - } 14.536 - else 14.537 - { 14.538 - for ( i = 0; i < nr_vbds; i++ ) 14.539 - xlvbd_init_device(&vbd_info[i]); 14.540 - } 14.541 - 14.542 - return 0; 14.543 -}
15.1 --- a/linux-2.4.29-xen-sparse/arch/xen/drivers/console/Makefile Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/drivers/dom0/Makefile Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/drivers/evtchn/Makefile Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/drivers/netif/Makefile Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/drivers/netif/backend/Makefile Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/drivers/netif/frontend/Makefile Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/kernel/Makefile Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/kernel/entry.S Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/kernel/head.S Fri May 20 19:34:47 2005 +0000 23.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 23.3 @@ -1,41 +0,0 @@ 23.4 - 23.5 -.section __xen_guest 23.6 - .ascii "GUEST_OS=linux,GUEST_VER=2.4,XEN_VER=3.0,VIRT_BASE=0xC0000000" 23.7 - .ascii ",LOADER=generic" 23.8 - .byte 0 23.9 - 23.10 -.text 23.11 -#include <linux/config.h> 23.12 -#include <linux/threads.h> 23.13 -#include <linux/linkage.h> 23.14 -#include <asm/segment.h> 23.15 -#include <asm/page.h> 23.16 -#include <asm/pgtable.h> 23.17 -#include <asm/desc.h> 23.18 - 23.19 -ENTRY(stext) 23.20 -ENTRY(_stext) 23.21 - cld 23.22 - lss stack_start,%esp 23.23 - /* Copy the necessary stuff from xen_start_info structure. */ 23.24 - mov $SYMBOL_NAME(xen_start_info_union),%edi 23.25 - mov $128,%ecx 23.26 - rep movsl 23.27 - jmp SYMBOL_NAME(start_kernel) 23.28 - 23.29 -ENTRY(stack_start) 23.30 - .long SYMBOL_NAME(init_task_union)+8192, __KERNEL_DS 23.31 - 23.32 -.org 0x1000 23.33 -ENTRY(empty_zero_page) 23.34 - 23.35 -.org 0x2000 23.36 -ENTRY(default_ldt) 23.37 - 23.38 -.org 0x3000 23.39 -ENTRY(cpu0_pte_quicklist) 23.40 - 23.41 -.org 0x3400 23.42 -ENTRY(cpu0_pgd_quicklist) 23.43 - 23.44 -.org 0x3800
24.1 --- a/linux-2.4.29-xen-sparse/arch/xen/kernel/i386_ksyms.c Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/kernel/irq.c Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/kernel/ldt.c Fri May 20 19:34:47 2005 +0000 26.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 26.3 @@ -1,272 +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/mmu_context.h> 26.21 -#include <asm/uaccess.h> 26.22 -#include <asm/system.h> 26.23 -#include <asm/ldt.h> 26.24 -#include <asm/desc.h> 26.25 - 26.26 -#ifdef CONFIG_SMP /* avoids "defined but not used" warnig */ 26.27 -static void flush_ldt(void *mm) 26.28 -{ 26.29 - if (current->active_mm) 26.30 - load_LDT(¤t->active_mm->context); 26.31 -} 26.32 -#endif 26.33 - 26.34 -static int alloc_ldt(mm_context_t *pc, int mincount, int reload) 26.35 -{ 26.36 - void *oldldt; 26.37 - void *newldt; 26.38 - int oldsize; 26.39 - 26.40 - if (mincount <= pc->size) 26.41 - return 0; 26.42 - oldsize = pc->size; 26.43 - mincount = (mincount+511)&(~511); 26.44 - if (mincount*LDT_ENTRY_SIZE > PAGE_SIZE) 26.45 - newldt = vmalloc(mincount*LDT_ENTRY_SIZE); 26.46 - else 26.47 - newldt = kmalloc(mincount*LDT_ENTRY_SIZE, GFP_KERNEL); 26.48 - 26.49 - if (!newldt) 26.50 - return -ENOMEM; 26.51 - 26.52 - if (oldsize) 26.53 - memcpy(newldt, pc->ldt, oldsize*LDT_ENTRY_SIZE); 26.54 - 26.55 - oldldt = pc->ldt; 26.56 - memset(newldt+oldsize*LDT_ENTRY_SIZE, 0, (mincount-oldsize)*LDT_ENTRY_SIZE); 26.57 - wmb(); 26.58 - pc->ldt = newldt; 26.59 - pc->size = mincount; 26.60 - if (reload) { 26.61 - make_pages_readonly( 26.62 - pc->ldt, 26.63 - (pc->size*LDT_ENTRY_SIZE)/PAGE_SIZE); 26.64 - load_LDT(pc); 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 - make_pages_writable( 26.73 - oldldt, (oldsize*LDT_ENTRY_SIZE)/PAGE_SIZE); 26.74 - if (oldsize*LDT_ENTRY_SIZE > PAGE_SIZE) 26.75 - vfree(oldldt); 26.76 - else 26.77 - kfree(oldldt); 26.78 - } 26.79 - return 0; 26.80 -} 26.81 - 26.82 -static inline int copy_ldt(mm_context_t *new, mm_context_t *old) 26.83 -{ 26.84 - int err = alloc_ldt(new, old->size, 0); 26.85 - if (err < 0) { 26.86 - printk(KERN_WARNING "ldt allocation failed\n"); 26.87 - new->size = 0; 26.88 - return err; 26.89 - } 26.90 - memcpy(new->ldt, old->ldt, old->size*LDT_ENTRY_SIZE); 26.91 - make_pages_readonly(new->ldt, (new->size*LDT_ENTRY_SIZE)/PAGE_SIZE); 26.92 - return 0; 26.93 -} 26.94 - 26.95 -/* 26.96 - * we do not have to muck with descriptors here, that is 26.97 - * done in switch_mm() as needed. 26.98 - */ 26.99 -int init_new_context(struct task_struct *tsk, struct mm_struct *mm) 26.100 -{ 26.101 - struct mm_struct * old_mm; 26.102 - int retval = 0; 26.103 - 26.104 - init_MUTEX(&mm->context.sem); 26.105 - mm->context.size = 0; 26.106 - old_mm = current->mm; 26.107 - if (old_mm && old_mm->context.size > 0) { 26.108 - down(&old_mm->context.sem); 26.109 - retval = copy_ldt(&mm->context, &old_mm->context); 26.110 - up(&old_mm->context.sem); 26.111 - } 26.112 - return retval; 26.113 -} 26.114 - 26.115 -/* 26.116 - * No need to lock the MM as we are the last user 26.117 - * Do not touch the ldt register, we are already 26.118 - * in the next thread. 26.119 - */ 26.120 -void destroy_context(struct mm_struct *mm) 26.121 -{ 26.122 - if (mm->context.size) { 26.123 - make_pages_writable( 26.124 - mm->context.ldt, 26.125 - (mm->context.size*LDT_ENTRY_SIZE)/PAGE_SIZE); 26.126 - if (mm->context.size*LDT_ENTRY_SIZE > PAGE_SIZE) 26.127 - vfree(mm->context.ldt); 26.128 - else 26.129 - kfree(mm->context.ldt); 26.130 - mm->context.size = 0; 26.131 - } 26.132 -} 26.133 - 26.134 -static int read_ldt(void * ptr, unsigned long bytecount) 26.135 -{ 26.136 - int err; 26.137 - unsigned long size; 26.138 - struct mm_struct * mm = current->mm; 26.139 - 26.140 - if (!mm->context.size) 26.141 - return 0; 26.142 - if (bytecount > LDT_ENTRY_SIZE*LDT_ENTRIES) 26.143 - bytecount = LDT_ENTRY_SIZE*LDT_ENTRIES; 26.144 - 26.145 - down(&mm->context.sem); 26.146 - size = mm->context.size*LDT_ENTRY_SIZE; 26.147 - if (size > bytecount) 26.148 - size = bytecount; 26.149 - 26.150 - err = 0; 26.151 - if (copy_to_user(ptr, mm->context.ldt, size)) 26.152 - err = -EFAULT; 26.153 - up(&mm->context.sem); 26.154 - if (err < 0) 26.155 - return err; 26.156 - if (size != bytecount) { 26.157 - /* zero-fill the rest */ 26.158 - clear_user(ptr+size, bytecount-size); 26.159 - } 26.160 - return bytecount; 26.161 -} 26.162 - 26.163 -static int read_default_ldt(void * ptr, unsigned long bytecount) 26.164 -{ 26.165 - int err; 26.166 - unsigned long size; 26.167 - void *address; 26.168 - 26.169 - err = 0; 26.170 - address = &default_ldt[0]; 26.171 - size = 5*sizeof(struct desc_struct); 26.172 - if (size > bytecount) 26.173 - size = bytecount; 26.174 - 26.175 - err = size; 26.176 - if (copy_to_user(ptr, address, size)) 26.177 - err = -EFAULT; 26.178 - 26.179 - return err; 26.180 -} 26.181 - 26.182 -static int write_ldt(void * ptr, unsigned long bytecount, int oldmode) 26.183 -{ 26.184 - struct mm_struct * mm = current->mm; 26.185 - __u32 entry_1, entry_2, *lp; 26.186 - unsigned long mach_lp; 26.187 - int error; 26.188 - struct modify_ldt_ldt_s ldt_info; 26.189 - 26.190 - error = -EINVAL; 26.191 - if (bytecount != sizeof(ldt_info)) 26.192 - goto out; 26.193 - error = -EFAULT; 26.194 - if (copy_from_user(&ldt_info, ptr, sizeof(ldt_info))) 26.195 - goto out; 26.196 - 26.197 - error = -EINVAL; 26.198 - if (ldt_info.entry_number >= LDT_ENTRIES) 26.199 - goto out; 26.200 - if (ldt_info.contents == 3) { 26.201 - if (oldmode) 26.202 - goto out; 26.203 - if (ldt_info.seg_not_present == 0) 26.204 - goto out; 26.205 - } 26.206 - 26.207 - down(&mm->context.sem); 26.208 - if (ldt_info.entry_number >= mm->context.size) { 26.209 - error = alloc_ldt(¤t->mm->context, ldt_info.entry_number+1, 1); 26.210 - if (error < 0) 26.211 - goto out_unlock; 26.212 - } 26.213 - 26.214 - lp = (__u32 *) ((ldt_info.entry_number << 3) + (char *) mm->context.ldt); 26.215 - mach_lp = arbitrary_virt_to_machine(lp); 26.216 - 26.217 - /* Allow LDTs to be cleared by the user. */ 26.218 - if (ldt_info.base_addr == 0 && ldt_info.limit == 0) { 26.219 - if (oldmode || 26.220 - (ldt_info.contents == 0 && 26.221 - ldt_info.read_exec_only == 1 && 26.222 - ldt_info.seg_32bit == 0 && 26.223 - ldt_info.limit_in_pages == 0 && 26.224 - ldt_info.seg_not_present == 1 && 26.225 - ldt_info.useable == 0 )) { 26.226 - entry_1 = 0; 26.227 - entry_2 = 0; 26.228 - goto install; 26.229 - } 26.230 - } 26.231 - 26.232 - entry_1 = ((ldt_info.base_addr & 0x0000ffff) << 16) | 26.233 - (ldt_info.limit & 0x0ffff); 26.234 - entry_2 = (ldt_info.base_addr & 0xff000000) | 26.235 - ((ldt_info.base_addr & 0x00ff0000) >> 16) | 26.236 - (ldt_info.limit & 0xf0000) | 26.237 - ((ldt_info.read_exec_only ^ 1) << 9) | 26.238 - (ldt_info.contents << 10) | 26.239 - ((ldt_info.seg_not_present ^ 1) << 15) | 26.240 - (ldt_info.seg_32bit << 22) | 26.241 - (ldt_info.limit_in_pages << 23) | 26.242 - 0x7000; 26.243 - if (!oldmode) 26.244 - entry_2 |= (ldt_info.useable << 20); 26.245 - 26.246 - /* Install the new entry ... */ 26.247 -install: 26.248 - error = HYPERVISOR_update_descriptor(mach_lp, entry_1, entry_2); 26.249 - 26.250 -out_unlock: 26.251 - up(&mm->context.sem); 26.252 -out: 26.253 - return error; 26.254 -} 26.255 - 26.256 -asmlinkage int sys_modify_ldt(int func, void *ptr, unsigned long bytecount) 26.257 -{ 26.258 - int ret = -ENOSYS; 26.259 - 26.260 - switch (func) { 26.261 - case 0: 26.262 - ret = read_ldt(ptr, bytecount); 26.263 - break; 26.264 - case 1: 26.265 - ret = write_ldt(ptr, bytecount, 1); 26.266 - break; 26.267 - case 2: 26.268 - ret = read_default_ldt(ptr, bytecount); 26.269 - break; 26.270 - case 0x11: 26.271 - ret = write_ldt(ptr, bytecount, 0); 26.272 - break; 26.273 - } 26.274 - return ret; 26.275 -}
27.1 --- a/linux-2.4.29-xen-sparse/arch/xen/kernel/pci-pc.c Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/kernel/process.c Fri May 20 19:34:47 2005 +0000 28.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 28.3 @@ -1,448 +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-xen/xen-public/physdev.h> 28.50 - 28.51 -#include <linux/irq.h> 28.52 - 28.53 -asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); 28.54 - 28.55 -int hlt_counter; 28.56 - 28.57 -/* 28.58 - * Powermanagement idle function, if any.. 28.59 - */ 28.60 -void (*pm_idle)(void); 28.61 - 28.62 -/* 28.63 - * Power off function, if any 28.64 - */ 28.65 -void (*pm_power_off)(void); 28.66 - 28.67 -void disable_hlt(void) 28.68 -{ 28.69 - hlt_counter++; 28.70 -} 28.71 - 28.72 -void enable_hlt(void) 28.73 -{ 28.74 - hlt_counter--; 28.75 -} 28.76 - 28.77 -/* 28.78 - * The idle thread. There's no useful work to be 28.79 - * done, so just try to conserve power and have a 28.80 - * low exit latency (ie sit in a loop waiting for 28.81 - * somebody to say that they'd like to reschedule) 28.82 - */ 28.83 -void cpu_idle (void) 28.84 -{ 28.85 - extern int set_timeout_timer(void); 28.86 - 28.87 - /* Endless idle loop with no priority at all. */ 28.88 - init_idle(); 28.89 - current->nice = 20; 28.90 - current->counter = -100; 28.91 - 28.92 - for ( ; ; ) 28.93 - { 28.94 - while ( !current->need_resched ) 28.95 - { 28.96 - __cli(); 28.97 - if ( current->need_resched ) 28.98 - { 28.99 - /* The race-free check for events failed. */ 28.100 - __sti(); 28.101 - break; 28.102 - } 28.103 - else if ( set_timeout_timer() == 0 ) 28.104 - { 28.105 - /* NB. Blocking reenable events in a race-free manner. */ 28.106 - HYPERVISOR_block(); 28.107 - } 28.108 - else 28.109 - { 28.110 - /* No race here: yielding will get us the CPU again anyway. */ 28.111 - __sti(); 28.112 - HYPERVISOR_yield(); 28.113 - } 28.114 - } 28.115 - schedule(); 28.116 - check_pgt_cache(); 28.117 - } 28.118 -} 28.119 - 28.120 -extern void show_trace(unsigned long* esp); 28.121 - 28.122 -void show_regs(struct pt_regs * regs) 28.123 -{ 28.124 - printk("\n"); 28.125 - printk("Pid: %d, comm: %20s\n", current->pid, current->comm); 28.126 - printk("EIP: %04x:[<%08lx>] CPU: %d",0xffff & regs->xcs,regs->eip, smp_processor_id()); 28.127 - if (regs->xcs & 2) 28.128 - printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp); 28.129 - printk(" EFLAGS: %08lx %s\n",regs->eflags, print_tainted()); 28.130 - printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n", 28.131 - regs->eax,regs->ebx,regs->ecx,regs->edx); 28.132 - printk("ESI: %08lx EDI: %08lx EBP: %08lx", 28.133 - regs->esi, regs->edi, regs->ebp); 28.134 - printk(" DS: %04x ES: %04x\n", 28.135 - 0xffff & regs->xds,0xffff & regs->xes); 28.136 - 28.137 - show_trace(®s->esp); 28.138 -} 28.139 - 28.140 - 28.141 -/* 28.142 - * Create a kernel thread 28.143 - */ 28.144 -int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) 28.145 -{ 28.146 - long retval, d0; 28.147 - 28.148 - __asm__ __volatile__( 28.149 - "movl %%esp,%%esi\n\t" 28.150 - "int $0x80\n\t" /* Linux/i386 system call */ 28.151 - "cmpl %%esp,%%esi\n\t" /* child or parent? */ 28.152 - "je 1f\n\t" /* parent - jump */ 28.153 - /* Load the argument into eax, and push it. That way, it does 28.154 - * not matter whether the called function is compiled with 28.155 - * -mregparm or not. */ 28.156 - "movl %4,%%eax\n\t" 28.157 - "pushl %%eax\n\t" 28.158 - "call *%5\n\t" /* call fn */ 28.159 - "movl %3,%0\n\t" /* exit */ 28.160 - "int $0x80\n" 28.161 - "1:\t" 28.162 - :"=&a" (retval), "=&S" (d0) 28.163 - :"0" (__NR_clone), "i" (__NR_exit), 28.164 - "r" (arg), "r" (fn), 28.165 - "b" (flags | CLONE_VM) 28.166 - : "memory"); 28.167 - 28.168 - return retval; 28.169 -} 28.170 - 28.171 -/* 28.172 - * Free current thread data structures etc.. 28.173 - */ 28.174 -void exit_thread(void) 28.175 -{ 28.176 - /* nothing to do ... */ 28.177 -} 28.178 - 28.179 -void flush_thread(void) 28.180 -{ 28.181 - struct task_struct *tsk = current; 28.182 - 28.183 - memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8); 28.184 - 28.185 - /* 28.186 - * Forget coprocessor state.. 28.187 - */ 28.188 - clear_fpu(tsk); 28.189 - tsk->used_math = 0; 28.190 -} 28.191 - 28.192 -void release_thread(struct task_struct *dead_task) 28.193 -{ 28.194 - if (dead_task->mm) { 28.195 - // temporary debugging check 28.196 - if (dead_task->mm->context.size) { 28.197 - printk("WARNING: dead process %8s still has LDT? <%p/%08x>\n", 28.198 - dead_task->comm, 28.199 - dead_task->mm->context.ldt, 28.200 - dead_task->mm->context.size); 28.201 - BUG(); 28.202 - } 28.203 - } 28.204 - //release_x86_irqs(dead_task); 28.205 -} 28.206 - 28.207 - 28.208 -/* 28.209 - * Save a segment. 28.210 - */ 28.211 -#define savesegment(seg,value) \ 28.212 - asm volatile("movl %%" #seg ",%0":"=m" (*(int *)&(value))) 28.213 - 28.214 -int copy_thread(int nr, unsigned long clone_flags, unsigned long esp, 28.215 - unsigned long unused, 28.216 - struct task_struct * p, struct pt_regs * regs) 28.217 -{ 28.218 - struct pt_regs * childregs; 28.219 - 28.220 - childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p)) - 1; 28.221 - struct_cpy(childregs, regs); 28.222 - childregs->eax = 0; 28.223 - childregs->esp = esp; 28.224 - 28.225 - p->thread.esp = (unsigned long) childregs; 28.226 - p->thread.esp0 = (unsigned long) (childregs+1); 28.227 - 28.228 - p->thread.eip = (unsigned long) ret_from_fork; 28.229 - 28.230 - savesegment(fs,p->thread.fs); 28.231 - savesegment(gs,p->thread.gs); 28.232 - 28.233 - unlazy_fpu(current); 28.234 - struct_cpy(&p->thread.i387, ¤t->thread.i387); 28.235 - 28.236 - p->thread.io_pl = current->thread.io_pl; 28.237 - 28.238 - return 0; 28.239 -} 28.240 - 28.241 -/* 28.242 - * fill in the user structure for a core dump.. 28.243 - */ 28.244 -void dump_thread(struct pt_regs * regs, struct user * dump) 28.245 -{ 28.246 - int i; 28.247 - 28.248 -/* changed the size calculations - should hopefully work better. lbt */ 28.249 - dump->magic = CMAGIC; 28.250 - dump->start_code = 0; 28.251 - dump->start_stack = regs->esp & ~(PAGE_SIZE - 1); 28.252 - dump->u_tsize = ((unsigned long) current->mm->end_code) >> PAGE_SHIFT; 28.253 - dump->u_dsize = ((unsigned long) (current->mm->brk + (PAGE_SIZE-1))) >> PAGE_SHIFT; 28.254 - dump->u_dsize -= dump->u_tsize; 28.255 - dump->u_ssize = 0; 28.256 - for (i = 0; i < 8; i++) 28.257 - dump->u_debugreg[i] = current->thread.debugreg[i]; 28.258 - 28.259 - if (dump->start_stack < TASK_SIZE) 28.260 - dump->u_ssize = ((unsigned long) (TASK_SIZE - dump->start_stack)) >> PAGE_SHIFT; 28.261 - 28.262 - dump->regs.ebx = regs->ebx; 28.263 - dump->regs.ecx = regs->ecx; 28.264 - dump->regs.edx = regs->edx; 28.265 - dump->regs.esi = regs->esi; 28.266 - dump->regs.edi = regs->edi; 28.267 - dump->regs.ebp = regs->ebp; 28.268 - dump->regs.eax = regs->eax; 28.269 - dump->regs.ds = regs->xds; 28.270 - dump->regs.es = regs->xes; 28.271 - savesegment(fs,dump->regs.fs); 28.272 - savesegment(gs,dump->regs.gs); 28.273 - dump->regs.orig_eax = regs->orig_eax; 28.274 - dump->regs.eip = regs->eip; 28.275 - dump->regs.cs = regs->xcs; 28.276 - dump->regs.eflags = regs->eflags; 28.277 - dump->regs.esp = regs->esp; 28.278 - dump->regs.ss = regs->xss; 28.279 - 28.280 - dump->u_fpvalid = dump_fpu (regs, &dump->i387); 28.281 -} 28.282 - 28.283 -/* 28.284 - * switch_to(x,yn) should switch tasks from x to y. 28.285 - * 28.286 - * We fsave/fwait so that an exception goes off at the right time 28.287 - * (as a call from the fsave or fwait in effect) rather than to 28.288 - * the wrong process. Lazy FP saving no longer makes any sense 28.289 - * with modern CPU's, and this simplifies a lot of things (SMP 28.290 - * and UP become the same). 28.291 - * 28.292 - * NOTE! We used to use the x86 hardware context switching. The 28.293 - * reason for not using it any more becomes apparent when you 28.294 - * try to recover gracefully from saved state that is no longer 28.295 - * valid (stale segment register values in particular). With the 28.296 - * hardware task-switch, there is no way to fix up bad state in 28.297 - * a reasonable manner. 28.298 - * 28.299 - * The fact that Intel documents the hardware task-switching to 28.300 - * be slow is a fairly red herring - this code is not noticeably 28.301 - * faster. However, there _is_ some room for improvement here, 28.302 - * so the performance issues may eventually be a valid point. 28.303 - * More important, however, is the fact that this allows us much 28.304 - * more flexibility. 28.305 - */ 28.306 -void fastcall __switch_to(struct task_struct *prev_p, struct task_struct *next_p) 28.307 -{ 28.308 - struct thread_struct *next = &next_p->thread; 28.309 - physdev_op_t op; 28.310 - multicall_entry_t _mcl[8], *mcl = _mcl; 28.311 - 28.312 - /* 28.313 - * This is basically 'unlazy_fpu', except that we queue a multicall to 28.314 - * indicate FPU task switch, rather than synchronously trapping to Xen. 28.315 - */ 28.316 - if ( prev_p->flags & PF_USEDFPU ) 28.317 - { 28.318 - if ( cpu_has_fxsr ) 28.319 - asm volatile( "fxsave %0 ; fnclex" 28.320 - : "=m" (prev_p->thread.i387.fxsave) ); 28.321 - else 28.322 - asm volatile( "fnsave %0 ; fwait" 28.323 - : "=m" (prev_p->thread.i387.fsave) ); 28.324 - prev_p->flags &= ~PF_USEDFPU; 28.325 - mcl->op = __HYPERVISOR_fpu_taskswitch; 28.326 - mcl->args[0] = 1; 28.327 - mcl++; 28.328 - } 28.329 - 28.330 - mcl->op = __HYPERVISOR_stack_switch; 28.331 - mcl->args[0] = __KERNEL_DS; 28.332 - mcl->args[1] = next->esp0; 28.333 - mcl++; 28.334 - 28.335 - if ( prev_p->thread.io_pl != next->io_pl ) 28.336 - { 28.337 - op.cmd = PHYSDEVOP_SET_IOPL; 28.338 - op.u.set_iopl.iopl = next->io_pl; 28.339 - mcl->op = __HYPERVISOR_physdev_op; 28.340 - mcl->args[0] = (unsigned long)&op; 28.341 - mcl++; 28.342 - } 28.343 - 28.344 - (void)HYPERVISOR_multicall(_mcl, mcl - _mcl); 28.345 - 28.346 - /* 28.347 - * Restore %fs and %gs. 28.348 - */ 28.349 - loadsegment(fs, next->fs); 28.350 - loadsegment(gs, next->gs); 28.351 - 28.352 - /* 28.353 - * Now maybe reload the debug registers 28.354 - */ 28.355 - if ( next->debugreg[7] != 0 ) 28.356 - { 28.357 - HYPERVISOR_set_debugreg(0, next->debugreg[0]); 28.358 - HYPERVISOR_set_debugreg(1, next->debugreg[1]); 28.359 - HYPERVISOR_set_debugreg(2, next->debugreg[2]); 28.360 - HYPERVISOR_set_debugreg(3, next->debugreg[3]); 28.361 - /* no 4 and 5 */ 28.362 - HYPERVISOR_set_debugreg(6, next->debugreg[6]); 28.363 - HYPERVISOR_set_debugreg(7, next->debugreg[7]); 28.364 - } 28.365 -} 28.366 - 28.367 -asmlinkage int sys_fork(struct pt_regs regs) 28.368 -{ 28.369 - return do_fork(SIGCHLD, regs.esp, ®s, 0); 28.370 -} 28.371 - 28.372 -asmlinkage int sys_clone(struct pt_regs regs) 28.373 -{ 28.374 - unsigned long clone_flags; 28.375 - unsigned long newsp; 28.376 - 28.377 - clone_flags = regs.ebx; 28.378 - newsp = regs.ecx; 28.379 - if (!newsp) 28.380 - newsp = regs.esp; 28.381 - return do_fork(clone_flags, newsp, ®s, 0); 28.382 -} 28.383 - 28.384 -/* 28.385 - * This is trivial, and on the face of it looks like it 28.386 - * could equally well be done in user mode. 28.387 - * 28.388 - * Not so, for quite unobvious reasons - register pressure. 28.389 - * In user mode vfork() cannot have a stack frame, and if 28.390 - * done by calling the "clone()" system call directly, you 28.391 - * do not have enough call-clobbered registers to hold all 28.392 - * the information you need. 28.393 - */ 28.394 -asmlinkage int sys_vfork(struct pt_regs regs) 28.395 -{ 28.396 - return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs.esp, ®s, 0); 28.397 -} 28.398 - 28.399 -/* 28.400 - * sys_execve() executes a new program. 28.401 - */ 28.402 -asmlinkage int sys_execve(struct pt_regs regs) 28.403 -{ 28.404 - int error; 28.405 - char * filename; 28.406 - 28.407 - filename = getname((char *) regs.ebx); 28.408 - error = PTR_ERR(filename); 28.409 - if (IS_ERR(filename)) 28.410 - goto out; 28.411 - error = do_execve(filename, (char **) regs.ecx, (char **) regs.edx, ®s); 28.412 - if (error == 0) 28.413 - current->ptrace &= ~PT_DTRACE; 28.414 - putname(filename); 28.415 - out: 28.416 - return error; 28.417 -} 28.418 - 28.419 -/* 28.420 - * These bracket the sleeping functions.. 28.421 - */ 28.422 -extern void scheduling_functions_start_here(void); 28.423 -extern void scheduling_functions_end_here(void); 28.424 -#define first_sched ((unsigned long) scheduling_functions_start_here) 28.425 -#define last_sched ((unsigned long) scheduling_functions_end_here) 28.426 - 28.427 -unsigned long get_wchan(struct task_struct *p) 28.428 -{ 28.429 - unsigned long ebp, esp, eip; 28.430 - unsigned long stack_page; 28.431 - int count = 0; 28.432 - if (!p || p == current || p->state == TASK_RUNNING) 28.433 - return 0; 28.434 - stack_page = (unsigned long)p; 28.435 - esp = p->thread.esp; 28.436 - if (!stack_page || esp < stack_page || esp > 8188+stack_page) 28.437 - return 0; 28.438 - /* include/asm-i386/system.h:switch_to() pushes ebp last. */ 28.439 - ebp = *(unsigned long *) esp; 28.440 - do { 28.441 - if (ebp < stack_page || ebp > 8184+stack_page) 28.442 - return 0; 28.443 - eip = *(unsigned long *) (ebp+4); 28.444 - if (eip < first_sched || eip >= last_sched) 28.445 - return eip; 28.446 - ebp = *(unsigned long *) ebp; 28.447 - } while (count++ < 16); 28.448 - return 0; 28.449 -} 28.450 -#undef last_sched 28.451 -#undef first_sched
29.1 --- a/linux-2.4.29-xen-sparse/arch/xen/kernel/setup.c Fri May 20 19:34:47 2005 +0000 29.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 29.3 @@ -1,1213 +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/physdev.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 int *phys_to_machine_mapping, *pfn_to_mfn_frame_list; 29.67 - 29.68 -/* 29.69 - * Machine setup.. 29.70 - */ 29.71 - 29.72 -char ignore_irq13; /* set if exception 16 works */ 29.73 -struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1, 1, 0, 0, -1 }; 29.74 - 29.75 -unsigned long mmu_cr4_features; 29.76 - 29.77 -unsigned char * vgacon_mmap; 29.78 - 29.79 -/* 29.80 - * Bus types .. 29.81 - */ 29.82 -#ifdef CONFIG_EISA 29.83 -int EISA_bus; 29.84 -#endif 29.85 -int MCA_bus; 29.86 - 29.87 -/* for MCA, but anyone else can use it if they want */ 29.88 -unsigned int machine_id; 29.89 -unsigned int machine_submodel_id; 29.90 -unsigned int BIOS_revision; 29.91 -unsigned int mca_pentium_flag; 29.92 - 29.93 -/* For PCI or other memory-mapped resources */ 29.94 -unsigned long pci_mem_start = 0x10000000; 29.95 - 29.96 -/* 29.97 - * Setup options 29.98 - */ 29.99 -struct drive_info_struct { char dummy[32]; } drive_info; 29.100 -struct screen_info screen_info; 29.101 -struct apm_info apm_info; 29.102 -struct sys_desc_table_struct { 29.103 - unsigned short length; 29.104 - unsigned char table[0]; 29.105 -}; 29.106 - 29.107 -unsigned char aux_device_present; 29.108 - 29.109 -extern int root_mountflags; 29.110 -extern char _text, _etext, _edata, _end; 29.111 - 29.112 -extern int blk_nohighio; 29.113 - 29.114 -int enable_acpi_smp_table; 29.115 - 29.116 -/* Raw start-of-day parameters from the hypervisor. */ 29.117 -union xen_start_info_union xen_start_info_union; 29.118 - 29.119 -#define COMMAND_LINE_SIZE 256 29.120 -static char command_line[COMMAND_LINE_SIZE]; 29.121 -char saved_command_line[COMMAND_LINE_SIZE]; 29.122 - 29.123 -/* parse_mem_cmdline() 29.124 - * returns the value of the mem= boot param converted to pages or 0 29.125 - */ 29.126 -static int __init parse_mem_cmdline (char ** cmdline_p) 29.127 -{ 29.128 - char c = ' ', *to = command_line, *from = saved_command_line; 29.129 - int len = 0; 29.130 - unsigned long long bytes; 29.131 - int mem_param = 0; 29.132 - 29.133 - /* Save unparsed command line copy for /proc/cmdline */ 29.134 - memcpy(saved_command_line, xen_start_info.cmd_line, COMMAND_LINE_SIZE); 29.135 - saved_command_line[COMMAND_LINE_SIZE-1] = '\0'; 29.136 - 29.137 - for (;;) { 29.138 - /* 29.139 - * "mem=nopentium" disables the 4MB page tables. 29.140 - * "mem=XXX[kKmM]" defines a memory region from HIGH_MEM 29.141 - * to <mem>, overriding the bios size. 29.142 - * "mem=XXX[KkmM]@XXX[KkmM]" defines a memory region from 29.143 - * <start> to <start>+<mem>, overriding the bios size. 29.144 - */ 29.145 - if (c == ' ' && !memcmp(from, "mem=", 4)) { 29.146 - if (to != command_line) 29.147 - to--; 29.148 - if (!memcmp(from+4, "nopentium", 9)) { 29.149 - from += 9+4; 29.150 - } else if (!memcmp(from+4, "exactmap", 8)) { 29.151 - from += 8+4; 29.152 - } else { 29.153 - bytes = memparse(from+4, &from); 29.154 - mem_param = bytes>>PAGE_SHIFT; 29.155 - if (*from == '@') 29.156 - (void)memparse(from+1, &from); 29.157 - } 29.158 - } 29.159 - 29.160 - c = *(from++); 29.161 - if (!c) 29.162 - break; 29.163 - if (COMMAND_LINE_SIZE <= ++len) 29.164 - break; 29.165 - *(to++) = c; 29.166 - } 29.167 - *to = '\0'; 29.168 - *cmdline_p = command_line; 29.169 - 29.170 - return mem_param; 29.171 -} 29.172 - 29.173 -/* 29.174 - * Every exception-fixup table is sorted (i.e., kernel main table, and every 29.175 - * module table. Some elements may be out of order if they reference text.init, 29.176 - * for example. 29.177 - */ 29.178 -static void sort_exception_table(struct exception_table_entry *start, 29.179 - struct exception_table_entry *end) 29.180 -{ 29.181 - struct exception_table_entry *p, *q, tmp; 29.182 - 29.183 - for ( p = start; p < end; p++ ) 29.184 - { 29.185 - for ( q = p-1; q > start; q-- ) 29.186 - if ( p->insn > q->insn ) 29.187 - break; 29.188 - if ( ++q != p ) 29.189 - { 29.190 - tmp = *p; 29.191 - memmove(q+1, q, (p-q)*sizeof(*p)); 29.192 - *q = tmp; 29.193 - } 29.194 - } 29.195 -} 29.196 - 29.197 -int xen_module_init(struct module *mod) 29.198 -{ 29.199 - sort_exception_table(mod->ex_table_start, mod->ex_table_end); 29.200 - return 0; 29.201 -} 29.202 - 29.203 -void __init setup_arch(char **cmdline_p) 29.204 -{ 29.205 - int i,j; 29.206 - unsigned long bootmap_size, start_pfn, lmax_low_pfn; 29.207 - int mem_param; /* user specified memory size in pages */ 29.208 - int boot_pfn; /* low pages available for bootmem */ 29.209 - physdev_op_t op; 29.210 - 29.211 - extern void hypervisor_callback(void); 29.212 - extern void failsafe_callback(void); 29.213 - 29.214 - extern unsigned long cpu0_pte_quicklist[]; 29.215 - extern unsigned long cpu0_pgd_quicklist[]; 29.216 - 29.217 - extern const struct exception_table_entry __start___ex_table[]; 29.218 - extern const struct exception_table_entry __stop___ex_table[]; 29.219 - 29.220 - extern char _stext; 29.221 - 29.222 - /* Force a quick death if the kernel panics. */ 29.223 - extern int panic_timeout; 29.224 - if ( panic_timeout == 0 ) 29.225 - panic_timeout = 1; 29.226 - 29.227 - /* Ensure that the kernel exception-fixup table is sorted. */ 29.228 - sort_exception_table(__start___ex_table, __stop___ex_table); 29.229 - 29.230 -#ifndef CONFIG_HIGHIO 29.231 - blk_nohighio = 1; 29.232 -#endif 29.233 - 29.234 - HYPERVISOR_vm_assist( 29.235 - VMASST_CMD_enable, VMASST_TYPE_4gb_segments); 29.236 - HYPERVISOR_vm_assist( 29.237 - VMASST_CMD_enable, VMASST_TYPE_writable_pagetables); 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 - /* This must be initialized to UNNAMED_MAJOR for ipconfig to work 29.247 - properly. Setting ROOT_DEV to default to /dev/ram0 breaks initrd. */ 29.248 - ROOT_DEV = MKDEV(UNNAMED_MAJOR,0); 29.249 - memset(&drive_info, 0, sizeof(drive_info)); 29.250 - memset(&screen_info, 0, sizeof(screen_info)); 29.251 - 29.252 - /* This is drawn from a dump from vgacon:startup in standard Linux. */ 29.253 - screen_info.orig_video_mode = 3; 29.254 - screen_info.orig_video_isVGA = 1; 29.255 - screen_info.orig_video_lines = 25; 29.256 - screen_info.orig_video_cols = 80; 29.257 - screen_info.orig_video_ega_bx = 3; 29.258 - screen_info.orig_video_points = 16; 29.259 - 29.260 - memset(&apm_info.bios, 0, sizeof(apm_info.bios)); 29.261 - aux_device_present = 0; 29.262 -#ifdef CONFIG_BLK_DEV_RAM 29.263 - rd_image_start = 0; 29.264 - rd_prompt = 0; 29.265 - rd_doload = 0; 29.266 -#endif 29.267 - 29.268 - root_mountflags &= ~MS_RDONLY; 29.269 - init_mm.start_code = (unsigned long) &_text; 29.270 - init_mm.end_code = (unsigned long) &_etext; 29.271 - init_mm.end_data = (unsigned long) &_edata; 29.272 - init_mm.brk = (unsigned long) &_end; 29.273 - 29.274 - /* The mem= kernel command line param overrides the detected amount 29.275 - * of memory. For xenolinux, if this override is larger than detected 29.276 - * memory, then boot using only detected memory and make provisions to 29.277 - * use all of the override value. The hypervisor can give this 29.278 - * domain more memory later on and it will be added to the free 29.279 - * lists at that time. See claim_new_pages() in 29.280 - * arch/xen/drivers/balloon/balloon.c 29.281 - */ 29.282 - mem_param = parse_mem_cmdline(cmdline_p); 29.283 - if (mem_param < xen_start_info.nr_pages) 29.284 - mem_param = xen_start_info.nr_pages; 29.285 - 29.286 -#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT) 29.287 -#define PFN_DOWN(x) ((x) >> PAGE_SHIFT) 29.288 -#define PFN_PHYS(x) ((x) << PAGE_SHIFT) 29.289 - 29.290 -/* 29.291 - * 128MB for vmalloc(), iomap(), kmap(), and fixaddr mappings. 29.292 - */ 29.293 -#define VMALLOC_RESERVE (unsigned long)(128 << 20) 29.294 -#define MAXMEM (unsigned long)(HYPERVISOR_VIRT_START-PAGE_OFFSET-VMALLOC_RESERVE) 29.295 -#define MAXMEM_PFN PFN_DOWN(MAXMEM) 29.296 -#define MAX_NONPAE_PFN (1 << 20) 29.297 - 29.298 - /* 29.299 - * Determine low and high memory ranges: 29.300 - */ 29.301 - lmax_low_pfn = max_pfn = mem_param; 29.302 - if (lmax_low_pfn > MAXMEM_PFN) { 29.303 - lmax_low_pfn = MAXMEM_PFN; 29.304 -#ifndef CONFIG_HIGHMEM 29.305 - /* Maximum memory usable is what is directly addressable */ 29.306 - printk(KERN_WARNING "Warning only %ldMB will be used.\n", 29.307 - MAXMEM>>20); 29.308 - if (max_pfn > MAX_NONPAE_PFN) 29.309 - printk(KERN_WARNING "Use a PAE enabled kernel.\n"); 29.310 - else 29.311 - printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n"); 29.312 - max_pfn = lmax_low_pfn; 29.313 -#else /* !CONFIG_HIGHMEM */ 29.314 -#ifndef CONFIG_X86_PAE 29.315 - if (max_pfn > MAX_NONPAE_PFN) { 29.316 - max_pfn = MAX_NONPAE_PFN; 29.317 - printk(KERN_WARNING "Warning only 4GB will be used.\n"); 29.318 - printk(KERN_WARNING "Use a PAE enabled kernel.\n"); 29.319 - } 29.320 -#endif /* !CONFIG_X86_PAE */ 29.321 -#endif /* !CONFIG_HIGHMEM */ 29.322 - } 29.323 - 29.324 -#ifdef CONFIG_HIGHMEM 29.325 - highstart_pfn = highend_pfn = max_pfn; 29.326 - if (max_pfn > MAXMEM_PFN) { 29.327 - highstart_pfn = MAXMEM_PFN; 29.328 - printk(KERN_NOTICE "%ldMB HIGHMEM available.\n", 29.329 - pages_to_mb(highend_pfn - highstart_pfn)); 29.330 - } 29.331 -#endif 29.332 - 29.333 - phys_to_machine_mapping = (unsigned int *)xen_start_info.mfn_list; 29.334 - cur_pgd = init_mm.pgd = (pgd_t *)xen_start_info.pt_base; 29.335 - 29.336 - start_pfn = (__pa(xen_start_info.pt_base) >> PAGE_SHIFT) + 29.337 - xen_start_info.nr_pt_frames; 29.338 - 29.339 - /* 29.340 - * Initialize the boot-time allocator, and free up all RAM. Then reserve 29.341 - * space for OS image, initrd, phys->machine table, bootstrap page table, 29.342 - * and the bootmem bitmap. 29.343 - * NB. There is definitely enough room for the bootmem bitmap in the 29.344 - * bootstrap page table. We are guaranteed to get >=512kB unused 'padding' 29.345 - * for our own use after all bootstrap elements 29.346 - * (see asm-xen/xen-public/xen.h). 29.347 - */ 29.348 - boot_pfn = min((int)xen_start_info.nr_pages,lmax_low_pfn); 29.349 - bootmap_size = init_bootmem(start_pfn,boot_pfn); 29.350 - free_bootmem(0, PFN_PHYS(boot_pfn)); 29.351 - reserve_bootmem(__pa(&_stext), 29.352 - PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE-1 - 29.353 - __pa(&_stext)); 29.354 - 29.355 - /* init_bootmem() set the global max_low_pfn to boot_pfn. Now max_low_pfn 29.356 - * can be set to the override value. 29.357 - */ 29.358 - max_low_pfn = lmax_low_pfn; 29.359 - 29.360 -#ifdef CONFIG_BLK_DEV_INITRD 29.361 - if ( xen_start_info.mod_start != 0 ) 29.362 - { 29.363 - if ( (__pa(xen_start_info.mod_start) + xen_start_info.mod_len) <= 29.364 - (max_low_pfn << PAGE_SHIFT) ) 29.365 - { 29.366 - initrd_start = xen_start_info.mod_start; 29.367 - initrd_end = initrd_start + xen_start_info.mod_len; 29.368 - initrd_below_start_ok = 1; 29.369 - } 29.370 - else 29.371 - { 29.372 - printk(KERN_ERR "initrd extends beyond end of memory " 29.373 - "(0x%08lx > 0x%08lx)\ndisabling initrd\n", 29.374 - __pa(xen_start_info.mod_start) + xen_start_info.mod_len, 29.375 - max_low_pfn << PAGE_SHIFT); 29.376 - initrd_start = 0; 29.377 - } 29.378 - } 29.379 -#endif 29.380 - 29.381 - paging_init(); 29.382 - 29.383 - /* Make sure we have a correctly sized P->M table. */ 29.384 - if ( max_pfn != xen_start_info.nr_pages ) 29.385 - { 29.386 - phys_to_machine_mapping = alloc_bootmem_low_pages( 29.387 - max_pfn * sizeof(unsigned long)); 29.388 - if ( max_pfn > xen_start_info.nr_pages ) 29.389 - { 29.390 - memset(phys_to_machine_mapping, ~0, 29.391 - max_pfn * sizeof(unsigned long)); 29.392 - memcpy(phys_to_machine_mapping, 29.393 - (unsigned long *)xen_start_info.mfn_list, 29.394 - xen_start_info.nr_pages * sizeof(unsigned long)); 29.395 - } 29.396 - else 29.397 - { 29.398 - memcpy(phys_to_machine_mapping, 29.399 - (unsigned long *)xen_start_info.mfn_list, 29.400 - max_pfn * sizeof(unsigned long)); 29.401 - if (HYPERVISOR_dom_mem_op( 29.402 - MEMOP_decrease_reservation, 29.403 - (unsigned long *)xen_start_info.mfn_list + max_pfn, 29.404 - xen_start_info.nr_pages - max_pfn, 0) != 29.405 - (xen_start_info.nr_pages - max_pfn)) 29.406 - BUG(); 29.407 - } 29.408 - free_bootmem(__pa(xen_start_info.mfn_list), 29.409 - PFN_PHYS(PFN_UP(xen_start_info.nr_pages * 29.410 - sizeof(unsigned long)))); 29.411 - } 29.412 - 29.413 - pfn_to_mfn_frame_list = alloc_bootmem_low_pages(PAGE_SIZE); 29.414 - for ( i=0, j=0; i < max_pfn; i+=(PAGE_SIZE/sizeof(unsigned long)), j++ ) 29.415 - { 29.416 - pfn_to_mfn_frame_list[j] = 29.417 - virt_to_machine(&phys_to_machine_mapping[i]) >> PAGE_SHIFT; 29.418 - } 29.419 - HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list = 29.420 - virt_to_machine(pfn_to_mfn_frame_list) >> PAGE_SHIFT; 29.421 - 29.422 - op.cmd = PHYSDEVOP_SET_IOPL; 29.423 - op.u.set_iopl.iopl = current->thread.io_pl = 1; 29.424 - HYPERVISOR_physdev_op(&op); 29.425 - 29.426 - if (xen_start_info.flags & SIF_INITDOMAIN ) 29.427 - { 29.428 - if( !(xen_start_info.flags & SIF_PRIVILEGED) ) 29.429 - panic("Xen granted us console access but not privileged status"); 29.430 - 29.431 -#if defined(CONFIG_VT) 29.432 -#if defined(CONFIG_VGA_CONSOLE) 29.433 - conswitchp = &vga_con; 29.434 -#elif defined(CONFIG_DUMMY_CONSOLE) 29.435 - conswitchp = &dummy_con; 29.436 -#endif 29.437 -#endif 29.438 - } 29.439 -} 29.440 - 29.441 -static int cachesize_override __initdata = -1; 29.442 -static int __init cachesize_setup(char *str) 29.443 -{ 29.444 - get_option (&str, &cachesize_override); 29.445 - return 1; 29.446 -} 29.447 -__setup("cachesize=", cachesize_setup); 29.448 - 29.449 -static int __init highio_setup(char *str) 29.450 -{ 29.451 - printk("i386: disabling HIGHMEM block I/O\n"); 29.452 - blk_nohighio = 1; 29.453 - return 1; 29.454 -} 29.455 -__setup("nohighio", highio_setup); 29.456 - 29.457 -static int __init get_model_name(struct cpuinfo_x86 *c) 29.458 -{ 29.459 - unsigned int *v; 29.460 - char *p, *q; 29.461 - 29.462 - if (cpuid_eax(0x80000000) < 0x80000004) 29.463 - return 0; 29.464 - 29.465 - v = (unsigned int *) c->x86_model_id; 29.466 - cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]); 29.467 - cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]); 29.468 - cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]); 29.469 - c->x86_model_id[48] = 0; 29.470 - 29.471 - /* Intel chips right-justify this string for some dumb reason; 29.472 - undo that brain damage */ 29.473 - p = q = &c->x86_model_id[0]; 29.474 - while ( *p == ' ' ) 29.475 - p++; 29.476 - if ( p != q ) { 29.477 - while ( *p ) 29.478 - *q++ = *p++; 29.479 - while ( q <= &c->x86_model_id[48] ) 29.480 - *q++ = '\0'; /* Zero-pad the rest */ 29.481 - } 29.482 - 29.483 - return 1; 29.484 -} 29.485 - 29.486 - 29.487 -static void __init display_cacheinfo(struct cpuinfo_x86 *c) 29.488 -{ 29.489 - unsigned int n, dummy, ecx, edx, l2size; 29.490 - 29.491 - n = cpuid_eax(0x80000000); 29.492 - 29.493 - if (n >= 0x80000005) { 29.494 - cpuid(0x80000005, &dummy, &dummy, &ecx, &edx); 29.495 - printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d bytes/line)\n", 29.496 - edx>>24, edx&0xFF, ecx>>24, ecx&0xFF); 29.497 - c->x86_cache_size=(ecx>>24)+(edx>>24); 29.498 - } 29.499 - 29.500 - if (n < 0x80000006) /* Some chips just has a large L1. */ 29.501 - return; 29.502 - 29.503 - ecx = cpuid_ecx(0x80000006); 29.504 - l2size = ecx >> 16; 29.505 - 29.506 - /* AMD errata T13 (order #21922) */ 29.507 - if ((c->x86_vendor == X86_VENDOR_AMD) && (c->x86 == 6)) { 29.508 - if (c->x86_model == 3 && c->x86_mask == 0) /* Duron Rev A0 */ 29.509 - l2size = 64; 29.510 - if (c->x86_model == 4 && 29.511 - (c->x86_mask==0 || c->x86_mask==1)) /* Tbird rev A1/A2 */ 29.512 - l2size = 256; 29.513 - } 29.514 - 29.515 - /* Intel PIII Tualatin. This comes in two flavours. 29.516 - * One has 256kb of cache, the other 512. We have no way 29.517 - * to determine which, so we use a boottime override 29.518 - * for the 512kb model, and assume 256 otherwise. 29.519 - */ 29.520 - if ((c->x86_vendor == X86_VENDOR_INTEL) && (c->x86 == 6) && 29.521 - (c->x86_model == 11) && (l2size == 0)) 29.522 - l2size = 256; 29.523 - 29.524 - if (c->x86_vendor == X86_VENDOR_CENTAUR) { 29.525 - /* VIA C3 CPUs (670-68F) need further shifting. */ 29.526 - if ((c->x86 == 6) && 29.527 - ((c->x86_model == 7) || (c->x86_model == 8))) { 29.528 - l2size >>= 8; 29.529 - } 29.530 - 29.531 - /* VIA also screwed up Nehemiah stepping 1, and made 29.532 - it return '65KB' instead of '64KB' 29.533 - - Note, it seems this may only be in engineering samples. */ 29.534 - if ((c->x86==6) && (c->x86_model==9) && 29.535 - (c->x86_mask==1) && (l2size==65)) 29.536 - l2size -= 1; 29.537 - } 29.538 - 29.539 - /* Allow user to override all this if necessary. */ 29.540 - if (cachesize_override != -1) 29.541 - l2size = cachesize_override; 29.542 - 29.543 - if ( l2size == 0 ) 29.544 - return; /* Again, no L2 cache is possible */ 29.545 - 29.546 - c->x86_cache_size = l2size; 29.547 - 29.548 - printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n", 29.549 - l2size, ecx & 0xFF); 29.550 -} 29.551 - 29.552 -static void __init init_c3(struct cpuinfo_x86 *c) 29.553 -{ 29.554 - /* Test for Centaur Extended Feature Flags presence */ 29.555 - if (cpuid_eax(0xC0000000) >= 0xC0000001) { 29.556 - /* store Centaur Extended Feature Flags as 29.557 - * word 5 of the CPU capability bit array 29.558 - */ 29.559 - c->x86_capability[5] = cpuid_edx(0xC0000001); 29.560 - } 29.561 - 29.562 - switch (c->x86_model) { 29.563 - case 9: /* Nehemiah */ 29.564 - default: 29.565 - get_model_name(c); 29.566 - display_cacheinfo(c); 29.567 - break; 29.568 - } 29.569 -} 29.570 - 29.571 -static void __init init_centaur(struct cpuinfo_x86 *c) 29.572 -{ 29.573 - /* Bit 31 in normal CPUID used for nonstandard 3DNow ID; 29.574 - 3DNow is IDd by bit 31 in extended CPUID (1*3231) anyway */ 29.575 - clear_bit(0*32+31, &c->x86_capability); 29.576 - 29.577 - switch (c->x86) { 29.578 - case 6: 29.579 - init_c3(c); 29.580 - break; 29.581 - default: 29.582 - panic("Unsupported Centaur CPU (%i)\n", c->x86); 29.583 - } 29.584 -} 29.585 - 29.586 -static int __init init_amd(struct cpuinfo_x86 *c) 29.587 -{ 29.588 - int r; 29.589 - 29.590 - /* Bit 31 in normal CPUID used for nonstandard 3DNow ID; 29.591 - 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ 29.592 - clear_bit(0*32+31, &c->x86_capability); 29.593 - 29.594 - r = get_model_name(c); 29.595 - 29.596 - switch(c->x86) 29.597 - { 29.598 - case 5: /* We don't like AMD K6 */ 29.599 - panic("Unsupported AMD processor\n"); 29.600 - case 6: /* An Athlon/Duron. We can trust the BIOS probably */ 29.601 - break; 29.602 - } 29.603 - 29.604 - display_cacheinfo(c); 29.605 - return r; 29.606 -} 29.607 - 29.608 - 29.609 -static void __init init_intel(struct cpuinfo_x86 *c) 29.610 -{ 29.611 - char *p = NULL; 29.612 - unsigned int l1i = 0, l1d = 0, l2 = 0, l3 = 0; /* Cache sizes */ 29.613 - 29.614 - if (c->cpuid_level > 1) { 29.615 - /* supports eax=2 call */ 29.616 - int i, j, n; 29.617 - int regs[4]; 29.618 - unsigned char *dp = (unsigned char *)regs; 29.619 - 29.620 - /* Number of times to iterate */ 29.621 - n = cpuid_eax(2) & 0xFF; 29.622 - 29.623 - for ( i = 0 ; i < n ; i++ ) { 29.624 - cpuid(2, ®s[0], ®s[1], ®s[2], ®s[3]); 29.625 - 29.626 - /* If bit 31 is set, this is an unknown format */ 29.627 - for ( j = 0 ; j < 3 ; j++ ) { 29.628 - if ( regs[j] < 0 ) regs[j] = 0; 29.629 - } 29.630 - 29.631 - /* Byte 0 is level count, not a descriptor */ 29.632 - for ( j = 1 ; j < 16 ; j++ ) { 29.633 - unsigned char des = dp[j]; 29.634 - unsigned char dl, dh; 29.635 - unsigned int cs; 29.636 - 29.637 - dh = des >> 4; 29.638 - dl = des & 0x0F; 29.639 - 29.640 - /* Black magic... */ 29.641 - 29.642 - switch ( dh ) 29.643 - { 29.644 - case 0: 29.645 - switch ( dl ) { 29.646 - case 6: 29.647 - /* L1 I cache */ 29.648 - l1i += 8; 29.649 - break; 29.650 - case 8: 29.651 - /* L1 I cache */ 29.652 - l1i += 16; 29.653 - break; 29.654 - case 10: 29.655 - /* L1 D cache */ 29.656 - l1d += 8; 29.657 - break; 29.658 - case 12: 29.659 - /* L1 D cache */ 29.660 - l1d += 16; 29.661 - break; 29.662 - default:; 29.663 - /* TLB, or unknown */ 29.664 - } 29.665 - break; 29.666 - case 2: 29.667 - if ( dl ) { 29.668 - /* L3 cache */ 29.669 - cs = (dl-1) << 9; 29.670 - l3 += cs; 29.671 - } 29.672 - break; 29.673 - case 4: 29.674 - if ( c->x86 > 6 && dl ) { 29.675 - /* P4 family */ 29.676 - /* L3 cache */ 29.677 - cs = 128 << (dl-1); 29.678 - l3 += cs; 29.679 - break; 29.680 - } 29.681 - /* else same as 8 - fall through */ 29.682 - case 8: 29.683 - if ( dl ) { 29.684 - /* L2 cache */ 29.685 - cs = 128 << (dl-1); 29.686 - l2 += cs; 29.687 - } 29.688 - break; 29.689 - case 6: 29.690 - if (dl > 5) { 29.691 - /* L1 D cache */ 29.692 - cs = 8<<(dl-6); 29.693 - l1d += cs; 29.694 - } 29.695 - break; 29.696 - case 7: 29.697 - if ( dl >= 8 ) 29.698 - { 29.699 - /* L2 cache */ 29.700 - cs = 64<<(dl-8); 29.701 - l2 += cs; 29.702 - } else { 29.703 - /* L0 I cache, count as L1 */ 29.704 - cs = dl ? (16 << (dl-1)) : 12; 29.705 - l1i += cs; 29.706 - } 29.707 - break; 29.708 - default: 29.709 - /* TLB, or something else we don't know about */ 29.710 - break; 29.711 - } 29.712 - } 29.713 - } 29.714 - if ( l1i || l1d ) 29.715 - printk(KERN_INFO "CPU: L1 I cache: %dK, L1 D cache: %dK\n", 29.716 - l1i, l1d); 29.717 - if ( l2 ) 29.718 - printk(KERN_INFO "CPU: L2 cache: %dK\n", l2); 29.719 - if ( l3 ) 29.720 - printk(KERN_INFO "CPU: L3 cache: %dK\n", l3); 29.721 - 29.722 - /* 29.723 - * This assumes the L3 cache is shared; it typically lives in 29.724 - * the northbridge. The L1 caches are included by the L2 29.725 - * cache, and so should not be included for the purpose of 29.726 - * SMP switching weights. 29.727 - */ 29.728 - c->x86_cache_size = l2 ? l2 : (l1i+l1d); 29.729 - } 29.730 - 29.731 - /* SEP CPUID bug: Pentium Pro reports SEP but doesn't have it */ 29.732 - if ( c->x86 == 6 && c->x86_model < 3 && c->x86_mask < 3 ) 29.733 - clear_bit(X86_FEATURE_SEP, &c->x86_capability); 29.734 - 29.735 - /* Names for the Pentium II/Celeron processors 29.736 - detectable only by also checking the cache size. 29.737 - Dixon is NOT a Celeron. */ 29.738 - if (c->x86 == 6) { 29.739 - switch (c->x86_model) { 29.740 - case 5: 29.741 - if (l2 == 0) 29.742 - p = "Celeron (Covington)"; 29.743 - if (l2 == 256) 29.744 - p = "Mobile Pentium II (Dixon)"; 29.745 - break; 29.746 - 29.747 - case 6: 29.748 - if (l2 == 128) 29.749 - p = "Celeron (Mendocino)"; 29.750 - break; 29.751 - 29.752 - case 8: 29.753 - if (l2 == 128) 29.754 - p = "Celeron (Coppermine)"; 29.755 - break; 29.756 - } 29.757 - } 29.758 - 29.759 - if ( p ) 29.760 - strcpy(c->x86_model_id, p); 29.761 -} 29.762 - 29.763 -void __init get_cpu_vendor(struct cpuinfo_x86 *c) 29.764 -{ 29.765 - char *v = c->x86_vendor_id; 29.766 - 29.767 - if (!strcmp(v, "GenuineIntel")) 29.768 - c->x86_vendor = X86_VENDOR_INTEL; 29.769 - else if (!strcmp(v, "AuthenticAMD")) 29.770 - c->x86_vendor = X86_VENDOR_AMD; 29.771 - else if (!strcmp(v, "CentaurHauls")) 29.772 - c->x86_vendor = X86_VENDOR_CENTAUR; 29.773 - else 29.774 - c->x86_vendor = X86_VENDOR_UNKNOWN; 29.775 -} 29.776 - 29.777 -struct cpu_model_info { 29.778 - int vendor; 29.779 - int family; 29.780 - char *model_names[16]; 29.781 -}; 29.782 - 29.783 -/* Naming convention should be: <Name> [(<Codename>)] */ 29.784 -/* This table only is used unless init_<vendor>() below doesn't set it; */ 29.785 -/* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used */ 29.786 -static struct cpu_model_info cpu_models[] __initdata = { 29.787 - { X86_VENDOR_INTEL, 6, 29.788 - { "Pentium Pro A-step", "Pentium Pro", NULL, "Pentium II (Klamath)", 29.789 - NULL, "Pentium II (Deschutes)", "Mobile Pentium II", 29.790 - "Pentium III (Katmai)", "Pentium III (Coppermine)", NULL, 29.791 - "Pentium III (Cascades)", NULL, NULL, NULL, NULL }}, 29.792 - { X86_VENDOR_AMD, 6, /* Is this this really necessary?? */ 29.793 - { "Athlon", "Athlon", 29.794 - "Athlon", NULL, "Athlon", NULL, 29.795 - NULL, NULL, NULL, 29.796 - NULL, NULL, NULL, NULL, NULL, NULL, NULL }} 29.797 -}; 29.798 - 29.799 -/* Look up CPU names by table lookup. */ 29.800 -static char __init *table_lookup_model(struct cpuinfo_x86 *c) 29.801 -{ 29.802 - struct cpu_model_info *info = cpu_models; 29.803 - int i; 29.804 - 29.805 - if ( c->x86_model >= 16 ) 29.806 - return NULL; /* Range check */ 29.807 - 29.808 - for ( i = 0 ; i < sizeof(cpu_models)/sizeof(struct cpu_model_info) ; i++ ) { 29.809 - if ( info->vendor == c->x86_vendor && 29.810 - info->family == c->x86 ) { 29.811 - return info->model_names[c->x86_model]; 29.812 - } 29.813 - info++; 29.814 - } 29.815 - return NULL; /* Not found */ 29.816 -} 29.817 - 29.818 - 29.819 - 29.820 -/* Standard macro to see if a specific flag is changeable */ 29.821 -static inline int flag_is_changeable_p(u32 flag) 29.822 -{ 29.823 - u32 f1, f2; 29.824 - 29.825 - asm("pushfl\n\t" 29.826 - "pushfl\n\t" 29.827 - "popl %0\n\t" 29.828 - "movl %0,%1\n\t" 29.829 - "xorl %2,%0\n\t" 29.830 - "pushl %0\n\t" 29.831 - "popfl\n\t" 29.832 - "pushfl\n\t" 29.833 - "popl %0\n\t" 29.834 - "popfl\n\t" 29.835 - : "=&r" (f1), "=&r" (f2) 29.836 - : "ir" (flag)); 29.837 - 29.838 - return ((f1^f2) & flag) != 0; 29.839 -} 29.840 - 29.841 - 29.842 -/* Probe for the CPUID instruction */ 29.843 -static int __init have_cpuid_p(void) 29.844 -{ 29.845 - return flag_is_changeable_p(X86_EFLAGS_ID); 29.846 -} 29.847 - 29.848 - 29.849 - 29.850 -#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE) 29.851 -unsigned char eddnr; 29.852 -struct edd_info edd[EDDMAXNR]; 29.853 -unsigned int edd_disk80_sig; 29.854 -/** 29.855 - * copy_edd() - Copy the BIOS EDD information 29.856 - * from empty_zero_page into a safe place. 29.857 - * 29.858 - */ 29.859 -static inline void copy_edd(void) 29.860 -{ 29.861 - eddnr = EDD_NR; 29.862 - memcpy(edd, EDD_BUF, sizeof(edd)); 29.863 - edd_disk80_sig = DISK80_SIGNATURE_BUFFER; 29.864 -} 29.865 -#else 29.866 -static inline void copy_edd(void) {} 29.867 -#endif 29.868 - 29.869 -/* 29.870 - * This does the hard work of actually picking apart the CPU stuff... 29.871 - */ 29.872 -void __init identify_cpu(struct cpuinfo_x86 *c) 29.873 -{ 29.874 - int junk, i; 29.875 - u32 xlvl, tfms; 29.876 - 29.877 - c->loops_per_jiffy = loops_per_jiffy; 29.878 - c->x86_cache_size = -1; 29.879 - c->x86_vendor = X86_VENDOR_UNKNOWN; 29.880 - c->cpuid_level = -1; /* CPUID not detected */ 29.881 - c->x86_model = c->x86_mask = 0; /* So far unknown... */ 29.882 - c->x86_vendor_id[0] = '\0'; /* Unset */ 29.883 - c->x86_model_id[0] = '\0'; /* Unset */ 29.884 - memset(&c->x86_capability, 0, sizeof c->x86_capability); 29.885 - c->hard_math = 1; 29.886 - 29.887 - if ( !have_cpuid_p() ) { 29.888 - panic("Processor must support CPUID\n"); 29.889 - } else { 29.890 - /* CPU does have CPUID */ 29.891 - 29.892 - /* Get vendor name */ 29.893 - cpuid(0x00000000, &c->cpuid_level, 29.894 - (int *)&c->x86_vendor_id[0], 29.895 - (int *)&c->x86_vendor_id[8], 29.896 - (int *)&c->x86_vendor_id[4]); 29.897 - 29.898 - get_cpu_vendor(c); 29.899 - /* Initialize the standard set of capabilities */ 29.900 - /* Note that the vendor-specific code below might override */ 29.901 - 29.902 - /* Intel-defined flags: level 0x00000001 */ 29.903 - if ( c->cpuid_level >= 0x00000001 ) { 29.904 - u32 capability, excap; 29.905 - cpuid(0x00000001, &tfms, &junk, &excap, &capability); 29.906 - c->x86_capability[0] = capability; 29.907 - c->x86_capability[4] = excap; 29.908 - c->x86 = (tfms >> 8) & 15; 29.909 - c->x86_model = (tfms >> 4) & 15; 29.910 - if (c->x86 == 0xf) { 29.911 - c->x86 += (tfms >> 20) & 0xff; 29.912 - c->x86_model += ((tfms >> 16) & 0xF) << 4; 29.913 - } 29.914 - c->x86_mask = tfms & 15; 29.915 - } else { 29.916 - /* Have CPUID level 0 only - unheard of */ 29.917 - c->x86 = 4; 29.918 - } 29.919 - 29.920 - /* AMD-defined flags: level 0x80000001 */ 29.921 - xlvl = cpuid_eax(0x80000000); 29.922 - if ( (xlvl & 0xffff0000) == 0x80000000 ) { 29.923 - if ( xlvl >= 0x80000001 ) 29.924 - c->x86_capability[1] = cpuid_edx(0x80000001); 29.925 - if ( xlvl >= 0x80000004 ) 29.926 - get_model_name(c); /* Default name */ 29.927 - } 29.928 - 29.929 - /* Transmeta-defined flags: level 0x80860001 */ 29.930 - xlvl = cpuid_eax(0x80860000); 29.931 - if ( (xlvl & 0xffff0000) == 0x80860000 ) { 29.932 - if ( xlvl >= 0x80860001 ) 29.933 - c->x86_capability[2] = cpuid_edx(0x80860001); 29.934 - } 29.935 - } 29.936 - 29.937 - printk(KERN_DEBUG "CPU: Before vendor init, caps: %08x %08x %08x, vendor = %d\n", 29.938 - c->x86_capability[0], 29.939 - c->x86_capability[1], 29.940 - c->x86_capability[2], 29.941 - c->x86_vendor); 29.942 - 29.943 - /* 29.944 - * Vendor-specific initialization. In this section we 29.945 - * canonicalize the feature flags, meaning if there are 29.946 - * features a certain CPU supports which CPUID doesn't 29.947 - * tell us, CPUID claiming incorrect flags, or other bugs, 29.948 - * we handle them here. 29.949 - * 29.950 - * At the end of this section, c->x86_capability better 29.951 - * indicate the features this CPU genuinely supports! 29.952 - */ 29.953 - switch ( c->x86_vendor ) { 29.954 - case X86_VENDOR_AMD: 29.955 - init_amd(c); 29.956 - break; 29.957 - 29.958 - case X86_VENDOR_INTEL: 29.959 - init_intel(c); 29.960 - break; 29.961 - 29.962 - case X86_VENDOR_CENTAUR: 29.963 - init_centaur(c); 29.964 - break; 29.965 - 29.966 - default: 29.967 - printk("Unsupported CPU vendor (%d) -- please report!\n", 29.968 - c->x86_vendor); 29.969 - } 29.970 - 29.971 - printk(KERN_DEBUG "CPU: After vendor init, caps: %08x %08x %08x %08x\n", 29.972 - c->x86_capability[0], 29.973 - c->x86_capability[1], 29.974 - c->x86_capability[2], 29.975 - c->x86_capability[3]); 29.976 - 29.977 - 29.978 - /* If the model name is still unset, do table lookup. */ 29.979 - if ( !c->x86_model_id[0] ) { 29.980 - char *p; 29.981 - p = table_lookup_model(c); 29.982 - if ( p ) 29.983 - strcpy(c->x86_model_id, p); 29.984 - else 29.985 - /* Last resort... */ 29.986 - sprintf(c->x86_model_id, "%02x/%02x", 29.987 - c->x86_vendor, c->x86_model); 29.988 - } 29.989 - 29.990 - /* Now the feature flags better reflect actual CPU features! */ 29.991 - 29.992 - printk(KERN_DEBUG "CPU: After generic, caps: %08x %08x %08x %08x\n", 29.993 - c->x86_capability[0], 29.994 - c->x86_capability[1], 29.995 - c->x86_capability[2], 29.996 - c->x86_capability[3]); 29.997 - 29.998 - /* 29.999 - * On SMP, boot_cpu_data holds the common feature set between 29.1000 - * all CPUs; so make sure that we indicate which features are 29.1001 - * common between the CPUs. The first time this routine gets 29.1002 - * executed, c == &boot_cpu_data. 29.1003 - */ 29.1004 - if ( c != &boot_cpu_data ) { 29.1005 - /* AND the already accumulated flags with these */ 29.1006 - for ( i = 0 ; i < NCAPINTS ; i++ ) 29.1007 - boot_cpu_data.x86_capability[i] &= c->x86_capability[i]; 29.1008 - } 29.1009 - 29.1010 - printk(KERN_DEBUG "CPU: Common caps: %08x %08x %08x %08x\n", 29.1011 - boot_cpu_data.x86_capability[0], 29.1012 - boot_cpu_data.x86_capability[1], 29.1013 - boot_cpu_data.x86_capability[2], 29.1014 - boot_cpu_data.x86_capability[3]); 29.1015 -} 29.1016 - 29.1017 - 29.1018 -/* These need to match <asm/processor.h> */ 29.1019 -static char *cpu_vendor_names[] __initdata = { 29.1020 - "Intel", "Cyrix", "AMD", "UMC", "NexGen", "Centaur", "Rise", "Transmeta" }; 29.1021 - 29.1022 - 29.1023 -void __init print_cpu_info(struct cpuinfo_x86 *c) 29.1024 -{ 29.1025 - char *vendor = NULL; 29.1026 - 29.1027 - if (c->x86_vendor < sizeof(cpu_vendor_names)/sizeof(char *)) 29.1028 - vendor = cpu_vendor_names[c->x86_vendor]; 29.1029 - else if (c->cpuid_level >= 0) 29.1030 - vendor = c->x86_vendor_id; 29.1031 - 29.1032 - if (vendor && strncmp(c->x86_model_id, vendor, strlen(vendor))) 29.1033 - printk("%s ", vendor); 29.1034 - 29.1035 - if (!c->x86_model_id[0]) 29.1036 - printk("%d86", c->x86); 29.1037 - else 29.1038 - printk("%s", c->x86_model_id); 29.1039 - 29.1040 - if (c->x86_mask || c->cpuid_level >= 0) 29.1041 - printk(" stepping %02x\n", c->x86_mask); 29.1042 - else 29.1043 - printk("\n"); 29.1044 -} 29.1045 - 29.1046 -/* 29.1047 - * Get CPU information for use by the procfs. 29.1048 - */ 29.1049 -static int show_cpuinfo(struct seq_file *m, void *v) 29.1050 -{ 29.1051 - /* 29.1052 - * These flag bits must match the definitions in <asm/cpufeature.h>. 29.1053 - * NULL means this bit is undefined or reserved; either way it doesn't 29.1054 - * have meaning as far as Linux is concerned. Note that it's important 29.1055 - * to realize there is a difference between this table and CPUID -- if 29.1056 - * applications want to get the raw CPUID data, they should access 29.1057 - * /dev/cpu/<cpu_nr>/cpuid instead. 29.1058 - */ 29.1059 - static char *x86_cap_flags[] = { 29.1060 - /* Intel-defined */ 29.1061 - "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce", 29.1062 - "cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov", 29.1063 - "pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx", 29.1064 - "fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", "pbe", 29.1065 - 29.1066 - /* AMD-defined */ 29.1067 - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 29.1068 - NULL, NULL, NULL, "syscall", NULL, NULL, NULL, NULL, 29.1069 - NULL, NULL, NULL, "mp", NULL, NULL, "mmxext", NULL, 29.1070 - NULL, NULL, NULL, NULL, NULL, "lm", "3dnowext", "3dnow", 29.1071 - 29.1072 - /* Transmeta-defined */ 29.1073 - "recovery", "longrun", NULL, "lrti", NULL, NULL, NULL, NULL, 29.1074 - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 29.1075 - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 29.1076 - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 29.1077 - 29.1078 - /* Other (Linux-defined) */ 29.1079 - "cxmmx", "k6_mtrr", "cyrix_arr", "centaur_mcr", 29.1080 - NULL, NULL, NULL, NULL, 29.1081 - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 29.1082 - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 29.1083 - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 29.1084 - 29.1085 - /* Intel-defined (#2) */ 29.1086 - "pni", NULL, NULL, "monitor", "ds_cpl", NULL, NULL, "tm2", 29.1087 - "est", NULL, "cid", NULL, NULL, NULL, NULL, NULL, 29.1088 - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 29.1089 - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 29.1090 - 29.1091 - /* VIA/Cyrix/Centaur-defined */ 29.1092 - NULL, NULL, "xstore", NULL, NULL, NULL, NULL, NULL, 29.1093 - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 29.1094 - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 29.1095 - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 29.1096 - 29.1097 - }; 29.1098 - struct cpuinfo_x86 *c = v; 29.1099 - int i, n = c - cpu_data; 29.1100 - int fpu_exception; 29.1101 - 29.1102 -#ifdef CONFIG_SMP 29.1103 - if (!(cpu_online_map & (1<<n))) 29.1104 - return 0; 29.1105 -#endif 29.1106 - seq_printf(m, "processor\t: %d\n" 29.1107 - "vendor_id\t: %s\n" 29.1108 - "cpu family\t: %d\n" 29.1109 - "model\t\t: %d\n" 29.1110 - "model name\t: %s\n", 29.1111 - n, 29.1112 - c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown", 29.1113 - c->x86, 29.1114 - c->x86_model, 29.1115 - c->x86_model_id[0] ? c->x86_model_id : "unknown"); 29.1116 - 29.1117 - if (c->x86_mask || c->cpuid_level >= 0) 29.1118 - seq_printf(m, "stepping\t: %d\n", c->x86_mask); 29.1119 - else 29.1120 - seq_printf(m, "stepping\t: unknown\n"); 29.1121 - 29.1122 - if ( test_bit(X86_FEATURE_TSC, &c->x86_capability) ) { 29.1123 - seq_printf(m, "cpu MHz\t\t: %lu.%03lu\n", 29.1124 - cpu_khz / 1000, (cpu_khz % 1000)); 29.1125 - } 29.1126 - 29.1127 - /* Cache size */ 29.1128 - if (c->x86_cache_size >= 0) 29.1129 - seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size); 29.1130 - 29.1131 - /* We use exception 16 if we have hardware math and we've either seen it or the CPU claims it is internal */ 29.1132 - fpu_exception = c->hard_math && (ignore_irq13 || cpu_has_fpu); 29.1133 - seq_printf(m, "fdiv_bug\t: %s\n" 29.1134 - "hlt_bug\t\t: %s\n" 29.1135 - "f00f_bug\t: %s\n" 29.1136 - "coma_bug\t: %s\n" 29.1137 - "fpu\t\t: %s\n" 29.1138 - "fpu_exception\t: %s\n" 29.1139 - "cpuid level\t: %d\n" 29.1140 - "wp\t\t: %s\n" 29.1141 - "flags\t\t:", 29.1142 - c->fdiv_bug ? "yes" : "no", 29.1143 - c->hlt_works_ok ? "no" : "yes", 29.1144 - c->f00f_bug ? "yes" : "no", 29.1145 - c->coma_bug ? "yes" : "no", 29.1146 - c->hard_math ? "yes" : "no", 29.1147 - fpu_exception ? "yes" : "no", 29.1148 - c->cpuid_level, 29.1149 - c->wp_works_ok ? "yes" : "no"); 29.1150 - 29.1151 - for ( i = 0 ; i < 32*NCAPINTS ; i++ ) 29.1152 - if ( test_bit(i, &c->x86_capability) && 29.1153 - x86_cap_flags[i] != NULL ) 29.1154 - seq_printf(m, " %s", x86_cap_flags[i]); 29.1155 - 29.1156 - seq_printf(m, "\nbogomips\t: %lu.%02lu\n\n", 29.1157 - c->loops_per_jiffy/(500000/HZ), 29.1158 - (c->loops_per_jiffy/(5000/HZ)) % 100); 29.1159 - return 0; 29.1160 -} 29.1161 - 29.1162 -static void *c_start(struct seq_file *m, loff_t *pos) 29.1163 -{ 29.1164 - return *pos < NR_CPUS ? cpu_data + *pos : NULL; 29.1165 -} 29.1166 -static void *c_next(struct seq_file *m, void *v, loff_t *pos) 29.1167 -{ 29.1168 - ++*pos; 29.1169 - return c_start(m, pos); 29.1170 -} 29.1171 -static void c_stop(struct seq_file *m, void *v) 29.1172 -{ 29.1173 -} 29.1174 -struct seq_operations cpuinfo_op = { 29.1175 - start: c_start, 29.1176 - next: c_next, 29.1177 - stop: c_stop, 29.1178 - show: show_cpuinfo, 29.1179 -}; 29.1180 - 29.1181 -unsigned long cpu_initialized __initdata = 0; 29.1182 - 29.1183 -/* 29.1184 - * cpu_init() initializes state that is per-CPU. Some data is already 29.1185 - * initialized (naturally) in the bootstrap process, such as the GDT 29.1186 - * and IDT. We reload them nevertheless, this function acts as a 29.1187 - * 'CPU state barrier', nothing should get across. 29.1188 - */ 29.1189 -void __init cpu_init (void) 29.1190 -{ 29.1191 - int nr = smp_processor_id(); 29.1192 - 29.1193 - if (test_and_set_bit(nr, &cpu_initialized)) { 29.1194 - printk(KERN_WARNING "CPU#%d already initialized!\n", nr); 29.1195 - for (;;) __sti(); 29.1196 - } 29.1197 - printk(KERN_INFO "Initializing CPU#%d\n", nr); 29.1198 - 29.1199 - /* 29.1200 - * set up and load the per-CPU TSS and LDT 29.1201 - */ 29.1202 - atomic_inc(&init_mm.mm_count); 29.1203 - current->active_mm = &init_mm; 29.1204 - if(current->mm) 29.1205 - BUG(); 29.1206 - enter_lazy_tlb(&init_mm, current, nr); 29.1207 - 29.1208 - HYPERVISOR_stack_switch(__KERNEL_DS, current->thread.esp0); 29.1209 - 29.1210 - load_LDT(&init_mm.context); 29.1211 - 29.1212 - /* Force FPU initialization. */ 29.1213 - current->flags &= ~PF_USEDFPU; 29.1214 - current->used_math = 0; 29.1215 - stts(); 29.1216 -}
30.1 --- a/linux-2.4.29-xen-sparse/arch/xen/kernel/signal.c Fri May 20 19:34:47 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(¤t->sigmask_lock); 30.82 - saveset = current->blocked; 30.83 - siginitset(¤t->blocked, mask); 30.84 - recalc_sigpending(current); 30.85 - spin_unlock_irq(¤t->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(¤t->sigmask_lock); 30.111 - saveset = current->blocked; 30.112 - current->blocked = newset; 30.113 - recalc_sigpending(current); 30.114 - spin_unlock_irq(¤t->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(¤t->sigmask_lock); 30.269 - current->blocked = set; 30.270 - recalc_sigpending(current); 30.271 - spin_unlock_irq(¤t->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(¤t->sigmask_lock); 30.297 - current->blocked = set; 30.298 - recalc_sigpending(current); 30.299 - spin_unlock_irq(¤t->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(¤t->sigmask_lock); 30.575 - sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); 30.576 - sigaddset(¤t->blocked,sig); 30.577 - recalc_sigpending(current); 30.578 - spin_unlock_irq(¤t->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 = ¤t->blocked; 30.603 - 30.604 - for (;;) { 30.605 - unsigned long signr; 30.606 - 30.607 - spin_lock_irq(¤t->sigmask_lock); 30.608 - signr = dequeue_signal(¤t->blocked, &info); 30.609 - spin_unlock_irq(¤t->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(¤t->blocked, signr)) { 30.641 - send_sig_info(signr, &info, current); 30.642 - continue; 30.643 - } 30.644 - } 30.645 - 30.646 - ka = ¤t->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.29-xen-sparse/arch/xen/kernel/time.c Fri May 20 19:34:47 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.29-xen-sparse/arch/xen/kernel/traps.c Fri May 20 19:34:47 2005 +0000 32.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 32.3 @@ -1,619 +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) (®s->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: "); 32.210 - if(regs->eip < PAGE_OFFSET) 32.211 - goto bad; 32.212 - 32.213 - for(i=0;i<20;i++) 32.214 - { 32.215 - unsigned char c; 32.216 - if(__get_user(c, &((unsigned char*)regs->eip)[i])) { 32.217 -bad: 32.218 - printk(KERN_ALERT " Bad EIP value."); 32.219 - break; 32.220 - } 32.221 - printk("%02x ", c); 32.222 - } 32.223 - } 32.224 -#endif 32.225 - } 32.226 - printk(KERN_ALERT "\n"); 32.227 -} 32.228 - 32.229 -spinlock_t die_lock = SPIN_LOCK_UNLOCKED; 32.230 - 32.231 -void die(const char * str, struct pt_regs * regs, long err) 32.232 -{ 32.233 - console_verbose(); 32.234 - spin_lock_irq(&die_lock); 32.235 - bust_spinlocks(1); 32.236 - printk("%s: %04lx\n", str, err & 0xffff); 32.237 - show_registers(regs); 32.238 - bust_spinlocks(0); 32.239 - spin_unlock_irq(&die_lock); 32.240 - do_exit(SIGSEGV); 32.241 -} 32.242 - 32.243 -static inline void die_if_kernel(const char * str, struct pt_regs * regs, long err) 32.244 -{ 32.245 - if (!(2 & regs->xcs)) 32.246 - die(str, regs, err); 32.247 -} 32.248 - 32.249 - 32.250 -static void inline do_trap(int trapnr, int signr, char *str, 32.251 - struct pt_regs * regs, long error_code, 32.252 - siginfo_t *info) 32.253 -{ 32.254 - if (!(regs->xcs & 2)) 32.255 - goto kernel_trap; 32.256 - 32.257 - /*trap_signal:*/ { 32.258 - struct task_struct *tsk = current; 32.259 - tsk->thread.error_code = error_code; 32.260 - tsk->thread.trap_no = trapnr; 32.261 - if (info) 32.262 - force_sig_info(signr, info, tsk); 32.263 - else 32.264 - force_sig(signr, tsk); 32.265 - return; 32.266 - } 32.267 - 32.268 - kernel_trap: { 32.269 - unsigned long fixup = search_exception_table(regs->eip); 32.270 - if (fixup) 32.271 - regs->eip = fixup; 32.272 - else 32.273 - die(str, regs, error_code); 32.274 - return; 32.275 - } 32.276 -} 32.277 - 32.278