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