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