ia64/xen-unstable
changeset 2351:388784b73401
bitkeeper revision 1.1159.52.1 (412e34aa5HAbxIOroKVPIBaWpr-yDQ)
Update to Linux 2.6.8.1
Update to Linux 2.6.8.1
line diff
1.1 --- a/.rootkeys Wed Aug 25 16:26:15 2004 +0000 1.2 +++ b/.rootkeys Thu Aug 26 19:06:18 2004 +0000 1.3 @@ -125,130 +125,131 @@ 3e5a4e681xMPdF9xCMwpyfuYMySU5g linux-2.4 1.4 409ba2e7akOFqQUg6Qyg2s28xcXiMg linux-2.4.27-xen-sparse/mm/page_alloc.c 1.5 3e5a4e683HKVU-sxtagrDasRB8eBVw linux-2.4.27-xen-sparse/mm/swapfile.c 1.6 41180721bNns9Na7w1nJ0ZVt8bhUNA linux-2.4.27-xen-sparse/mm/vmalloc.c 1.7 -40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.7-xen-sparse/arch/xen/Kconfig 1.8 -40f56237utH41NPukqHksuNf29IC9A linux-2.6.7-xen-sparse/arch/xen/Kconfig.drivers 1.9 -40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.7-xen-sparse/arch/xen/Makefile 1.10 -40f56237JTc60m1FRlUxkUaGSQKrNw linux-2.6.7-xen-sparse/arch/xen/boot/Makefile 1.11 -40f56237hRxbacU_3PdoAl6DjZ3Jnw linux-2.6.7-xen-sparse/arch/xen/configs/xen0_defconfig 1.12 -40f56237wubfjJKlfIzZlI3ZM2VgGA linux-2.6.7-xen-sparse/arch/xen/configs/xenU_defconfig 1.13 -40f56237Mta0yHNaMS_qtM2rge0qYA linux-2.6.7-xen-sparse/arch/xen/i386/Kconfig 1.14 -40f56238u2CJdXNpjsZgHBxeVyY-2g linux-2.6.7-xen-sparse/arch/xen/i386/Makefile 1.15 -40f56238eczveJ86k_4hNxCLRQIF-g linux-2.6.7-xen-sparse/arch/xen/i386/kernel/Makefile 1.16 -40f56238rXVTJQKbBuXXLH52qEArcg linux-2.6.7-xen-sparse/arch/xen/i386/kernel/cpu/Makefile 1.17 -40f562385s4lr6Zg92gExe7UQ4A76Q linux-2.6.7-xen-sparse/arch/xen/i386/kernel/cpu/common.c 1.18 -40f56238XDtHSijkAFlbv1PT8Bhw_Q linux-2.6.7-xen-sparse/arch/xen/i386/kernel/entry.S 1.19 -40f56238bnvciAuyzAiMkdzGErYt1A linux-2.6.7-xen-sparse/arch/xen/i386/kernel/head.S 1.20 -40f58a0d31M2EkuPbG94ns_nOi0PVA linux-2.6.7-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c 1.21 -40faa751_zbZlAmLyQgCXdYekVFdWA linux-2.6.7-xen-sparse/arch/xen/i386/kernel/ioport.c 1.22 -40f562382aC3_Gt4RG-4ZsfvDRUg3Q linux-2.6.7-xen-sparse/arch/xen/i386/kernel/irq.c 1.23 -40f56238ue3YRsK52HG7iccNzP1AwQ linux-2.6.7-xen-sparse/arch/xen/i386/kernel/ldt.c 1.24 -4107adf1cNtsuOxOB4T6paAoY2R2PA linux-2.6.7-xen-sparse/arch/xen/i386/kernel/pci-dma.c 1.25 -40f56238a8iOVDEoostsbun_sy2i4g linux-2.6.7-xen-sparse/arch/xen/i386/kernel/process.c 1.26 -40f56238YQIJoYG2ehDGEcdTgLmGbg linux-2.6.7-xen-sparse/arch/xen/i386/kernel/setup.c 1.27 -40f56238nWMQg7CKbyTy0KJNvCzbtg linux-2.6.7-xen-sparse/arch/xen/i386/kernel/signal.c 1.28 -40f56238UL9uv78ODDzMwLL9yryeFw linux-2.6.7-xen-sparse/arch/xen/i386/kernel/sysenter.c 1.29 -40f56238qVGkpO_ycnQA8k03kQzAgA linux-2.6.7-xen-sparse/arch/xen/i386/kernel/time.c 1.30 -40f56238NzTgeO63RGoxHrW5NQeO3Q linux-2.6.7-xen-sparse/arch/xen/i386/kernel/timers/Makefile 1.31 -40f56238BMqG5PuSHufpjbvp_helBw linux-2.6.7-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c 1.32 -40f562389xNa78YBZciUibQjyRU_Lg linux-2.6.7-xen-sparse/arch/xen/i386/kernel/traps.c 1.33 -40f56238qASEI_IOhCKWNuwFKNZrKQ linux-2.6.7-xen-sparse/arch/xen/i386/kernel/vmlinux.lds.S 1.34 -40f56238JypKAUG01ZojFwH7qnZ5uA linux-2.6.7-xen-sparse/arch/xen/i386/kernel/vsyscall.S 1.35 -40f56238wi6AdNQjm0RT57bSkwb6hg linux-2.6.7-xen-sparse/arch/xen/i386/kernel/vsyscall.lds 1.36 -40f56238a3w6-byOzexIlMgni76Lcg linux-2.6.7-xen-sparse/arch/xen/i386/mm/Makefile 1.37 -40f56238ILx8xlbywNbzTdv5Zr4xXQ linux-2.6.7-xen-sparse/arch/xen/i386/mm/fault.c 1.38 -4118cc35CbY8rfGVspF5O-7EkXBEAA linux-2.6.7-xen-sparse/arch/xen/i386/mm/highmem.c 1.39 -40f562383SKvDStdtrvzr5fyCbW4rw linux-2.6.7-xen-sparse/arch/xen/i386/mm/hypervisor.c 1.40 -40f56239xcNylAxuGsQHwi1AyMLV8w linux-2.6.7-xen-sparse/arch/xen/i386/mm/init.c 1.41 -41062ab7CjxC1UBaFhOMWWdhHkIUyg linux-2.6.7-xen-sparse/arch/xen/i386/mm/ioremap.c 1.42 -40f5623906UYHv1rsVUeRc0tFT0dWw linux-2.6.7-xen-sparse/arch/xen/i386/mm/pgtable.c 1.43 -4107adf12ndy94MidCaivDibJ3pPAg linux-2.6.7-xen-sparse/arch/xen/i386/pci/Makefile 1.44 -4107adf1WcCgkhsdLTRGX52cOG1vJg linux-2.6.7-xen-sparse/arch/xen/i386/pci/direct.c 1.45 -4107adf1s5u6249DNPUViX1YNagbUQ linux-2.6.7-xen-sparse/arch/xen/i386/pci/irq.c 1.46 -40f56239zOksGg_H4XD4ye6iZNtoZA linux-2.6.7-xen-sparse/arch/xen/kernel/Makefile 1.47 -40f56239bvOjuuuViZ0XMlNiREFC0A linux-2.6.7-xen-sparse/arch/xen/kernel/ctrl_if.c 1.48 -40f56239pYRq5yshPTkv3ujXKc8K6g linux-2.6.7-xen-sparse/arch/xen/kernel/empty.c 1.49 -40f56238xFQe9T7M_U_FItM-bZIpLw linux-2.6.7-xen-sparse/arch/xen/kernel/evtchn.c 1.50 -4110f478aeQWllIN7J4kouAHiAqrPw linux-2.6.7-xen-sparse/arch/xen/kernel/fixup.c 1.51 -40f56239sFcjHiIRmnObRIDF-zaeKQ linux-2.6.7-xen-sparse/arch/xen/kernel/process.c 1.52 -40f562392LBhwmOxVPsYdkYXMxI_ZQ linux-2.6.7-xen-sparse/arch/xen/kernel/reboot.c 1.53 -3f68905c5eiA-lBMQSvXLMWS1ikDEA linux-2.6.7-xen-sparse/arch/xen/kernel/xen_proc.c 1.54 -41261688yS8eAyy-7kzG4KBs0xbYCA linux-2.6.7-xen-sparse/drivers/Makefile 1.55 -4108f5c1WfTIrs0HZFeV39sttekCTw linux-2.6.7-xen-sparse/drivers/char/mem.c 1.56 -4111308bZAIzwf_Kzu6x1TZYZ3E0_Q linux-2.6.7-xen-sparse/drivers/char/tty_io.c 1.57 -40f56239Dp_vMTgz8TEbvo1hjHGc3w linux-2.6.7-xen-sparse/drivers/xen/Makefile 1.58 -410d0893otFGghmv4dUXDUBBdY5aIA linux-2.6.7-xen-sparse/drivers/xen/blkback/Makefile 1.59 -4087cf0d1XgMkooTZAiJS6NrcpLQNQ linux-2.6.7-xen-sparse/drivers/xen/blkback/blkback.c 1.60 -4087cf0dZadZ8r6CEt4fNN350Yle3A linux-2.6.7-xen-sparse/drivers/xen/blkback/common.h 1.61 -4087cf0dxlh29iw0w-9rxOCEGCjPcw linux-2.6.7-xen-sparse/drivers/xen/blkback/control.c 1.62 -4087cf0dbuoH20fMjNZjcgrRK-1msQ linux-2.6.7-xen-sparse/drivers/xen/blkback/interface.c 1.63 -4087cf0dk97tacDzxfByWV7JifUYqA linux-2.6.7-xen-sparse/drivers/xen/blkback/vbd.c 1.64 -40f56239Sfle6wGv5FS0wjS_HI150A linux-2.6.7-xen-sparse/drivers/xen/blkfront/Kconfig 1.65 -40f562395atl9x4suKGhPkjqLOXESg linux-2.6.7-xen-sparse/drivers/xen/blkfront/Makefile 1.66 -40f56239-JNIaTzlviVJohVdoYOUpw linux-2.6.7-xen-sparse/drivers/xen/blkfront/blkfront.c 1.67 -40f56239y9naBTXe40Pi2J_z3p-d1g linux-2.6.7-xen-sparse/drivers/xen/blkfront/block.h 1.68 -40f56239BVfPsXBiWQitXgDRtOsiqg linux-2.6.7-xen-sparse/drivers/xen/blkfront/vbd.c 1.69 -40f56239fsLjvtD8YBRAWphps4FDjg linux-2.6.7-xen-sparse/drivers/xen/console/Makefile 1.70 -3e5a4e651TH-SXHoufurnWjgl5bfOA linux-2.6.7-xen-sparse/drivers/xen/console/console.c 1.71 -40f56239KYxO0YabhPzCTeUuln-lnA linux-2.6.7-xen-sparse/drivers/xen/evtchn/Makefile 1.72 -40f56239DoibTX6R-ZYd3QTXAB8_TA linux-2.6.7-xen-sparse/drivers/xen/evtchn/evtchn.c 1.73 -410a9817HEVJvred5Oy_uKH3HFJC5Q linux-2.6.7-xen-sparse/drivers/xen/netback/Makefile 1.74 -4097ba831lpGeLlPg-bfV8XarVVuoQ linux-2.6.7-xen-sparse/drivers/xen/netback/common.h 1.75 -4097ba83wvv8yi5P5xugCUBAdb6O-A linux-2.6.7-xen-sparse/drivers/xen/netback/control.c 1.76 -4097ba83byY5bTSugJGZ1exTxIcMKw linux-2.6.7-xen-sparse/drivers/xen/netback/interface.c 1.77 -4087cf0dGmSbFhFZyIZBJzvqxY-qBw linux-2.6.7-xen-sparse/drivers/xen/netback/netback.c 1.78 -40f56239lrg_Ob0BJ8WBFS1zeg2CYw linux-2.6.7-xen-sparse/drivers/xen/netfront/Kconfig 1.79 -40f56239Wd4k_ycG_mFsSO1r5xKdtQ linux-2.6.7-xen-sparse/drivers/xen/netfront/Makefile 1.80 -405853f6nbeazrNyEWNHBuoSg2PiPA linux-2.6.7-xen-sparse/drivers/xen/netfront/netfront.c 1.81 -4108f5c1ppFXVpQzCOAZ6xXYubsjKA linux-2.6.7-xen-sparse/drivers/xen/privcmd/Makefile 1.82 -3e5a4e65IUfzzMu2kZFlGEB8-rpTaA linux-2.6.7-xen-sparse/drivers/xen/privcmd/privcmd.c 1.83 -40f56239YAjS52QG2FIAQpHDZAdGHg linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/desc.h 1.84 -4107adf1E5O4ztGHNGMzCCNhcvqNow linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h 1.85 -40f5623anSzpuEHgiNmQ56fIRfCoaQ linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/e820.h 1.86 -40f5623akIoBsQ3KxSB2kufkbgONXQ linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/fixmap.h 1.87 -4118b6a418gnL6AZsTdglC92YGqYTg linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/highmem.h 1.88 -40f5623aJVXQwpJMOLE99XgvGsfQ8Q linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/io.h 1.89 -40f5623am9BzluYFuV6EQfTd-so3dA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/do_timer.h 1.90 -40f5623adZQ1IZGPxbDXONjyZGYuTA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/io_ports.h 1.91 -40f5623aKXkBBxgpLx2NcvkncQ1Yyw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h 1.92 -40f5623aMQZoYuf4ml9v69N3gu8ing linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_mpspec.h 1.93 -40f5623a8LroVMnZ5YRzJJmIc-zHlw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_reboot.h 1.94 -40f5623an3wOvFKmpIvqSxQfWzklVQ linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_resources.h 1.95 -40f5623ayR1vnzfF__htza35a8Ft-g linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_time.h 1.96 -40f5623a4YdRdVzYWJzOOoqe8mnrXA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_timer.h 1.97 -40f5623aDLxmbOtUHvkWztKjAO4EjA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_traps.h 1.98 -41062ab7HMSSuaUv3_Z4agLpjSO88A linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/pci-functions.h 1.99 -40f5623aDMCsWOFO0jktZ4e8sjwvEg linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h 1.100 -40f5623arsFXkGdPvIqvFi3yFXGR0Q linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h 1.101 -4120f807GCO0uqsLqdZj9csxR1Wthw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/mmu_context.h 1.102 -40f5623aFTyFTR-vdiA-KaGxk5JOKQ linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/msr.h 1.103 -40f5623adgjZq9nAgCt0IXdWl7udSA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/page.h 1.104 -40f5623a54NuG-7qHihGYmw4wWQnMA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/param.h 1.105 -41137cc1kkvg0cg7uxddcEfjL7L67w linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/pci.h 1.106 -40f5623atCokYc2uCysSJ8jFO8TEsw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/pgalloc.h 1.107 -40f5623aEToIXouJgO-ao5d5pcEt1w linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h 1.108 -40f5623aCCXRPlGpNthVXstGz9ZV3A linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/pgtable.h 1.109 -40f5623aPCkQQfPtJSooGdhcatrvnQ linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/processor.h 1.110 -40f5623bzLvxr7WoJIxVf2OH4rCBJg linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/segment.h 1.111 -40f5623bG_LzgG6-qwk292nTc5Wabw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/setup.h 1.112 -40f5623bgzm_9vwxpzJswlAxg298Gg linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h 1.113 -40f5623bVdKP7Dt7qm8twu3NcnGNbA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/system.h 1.114 -40f5623bSgGrvrGRpD71K-lIYqaGgg linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/timer.h 1.115 -40f5623bc8LKPRO09wY5dGDnY_YCpw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/tlbflush.h 1.116 -41062ab7uFxnCq-KtPeAm-aV8CicgA linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/vga.h 1.117 -40f5623bxUbeGjkRrjDguCy_Gm8RLw linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/xor.h 1.118 -40f5623bYNP7tHE2zX6YQxp9Zq2utQ linux-2.6.7-xen-sparse/include/asm-xen/ctrl_if.h 1.119 -40f5623b3Eqs8pAc5WpPX8_jTzV2qw linux-2.6.7-xen-sparse/include/asm-xen/evtchn.h 1.120 -40f5623aGPlsm0u1LTO-NVZ6AGzNRQ linux-2.6.7-xen-sparse/include/asm-xen/hypervisor.h 1.121 -40f5623cndVUFlkxpf7Lfx7xu8madQ linux-2.6.7-xen-sparse/include/asm-xen/multicall.h 1.122 -3f108af1ylCIm82H052FVTfXACBHrw linux-2.6.7-xen-sparse/include/asm-xen/proc_cmd.h 1.123 -4122466356eIBnC9ot44WSVVIFyhQA linux-2.6.7-xen-sparse/include/asm-xen/queues.h 1.124 -3fa8e3f0kBLeE4To2vpdi3cpJbIkbQ linux-2.6.7-xen-sparse/include/asm-xen/suspend.h 1.125 -3f689063BoW-HWV3auUJ-OqXfcGArw linux-2.6.7-xen-sparse/include/asm-xen/xen_proc.h 1.126 -4124d8c4aocX7A-jIbuGraWN84pxGQ linux-2.6.7-xen-sparse/include/linux/bio.h 1.127 -4124f66fp5QwbDHEfoUIa7pqO5Xhag linux-2.6.7-xen-sparse/include/linux/page-flags.h 1.128 -4124f66f4NaKNa0xPiGGykn9QaZk3w linux-2.6.7-xen-sparse/include/linux/skbuff.h 1.129 -40f56a0ddHCSs3501MY4hRf22tctOw linux-2.6.7-xen-sparse/mkbuildtree 1.130 -410a94a4KT6I6X0LVc7djB39tRDp4g linux-2.6.7-xen-sparse/mm/page_alloc.c 1.131 +40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.8.1-xen-sparse/arch/xen/Kconfig 1.132 +40f56237utH41NPukqHksuNf29IC9A linux-2.6.8.1-xen-sparse/arch/xen/Kconfig.drivers 1.133 +40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.8.1-xen-sparse/arch/xen/Makefile 1.134 +40f56237JTc60m1FRlUxkUaGSQKrNw linux-2.6.8.1-xen-sparse/arch/xen/boot/Makefile 1.135 +40f56237hRxbacU_3PdoAl6DjZ3Jnw linux-2.6.8.1-xen-sparse/arch/xen/configs/xen0_defconfig 1.136 +40f56237wubfjJKlfIzZlI3ZM2VgGA linux-2.6.8.1-xen-sparse/arch/xen/configs/xenU_defconfig 1.137 +40f56237Mta0yHNaMS_qtM2rge0qYA linux-2.6.8.1-xen-sparse/arch/xen/i386/Kconfig 1.138 +40f56238u2CJdXNpjsZgHBxeVyY-2g linux-2.6.8.1-xen-sparse/arch/xen/i386/Makefile 1.139 +40f56238eczveJ86k_4hNxCLRQIF-g linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/Makefile 1.140 +40f56238rXVTJQKbBuXXLH52qEArcg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/cpu/Makefile 1.141 +40f562385s4lr6Zg92gExe7UQ4A76Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/cpu/common.c 1.142 +40f56238XDtHSijkAFlbv1PT8Bhw_Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/entry.S 1.143 +40f56238bnvciAuyzAiMkdzGErYt1A linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/head.S 1.144 +40f58a0d31M2EkuPbG94ns_nOi0PVA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c 1.145 +40faa751_zbZlAmLyQgCXdYekVFdWA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/ioport.c 1.146 +40f562382aC3_Gt4RG-4ZsfvDRUg3Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/irq.c 1.147 +40f56238ue3YRsK52HG7iccNzP1AwQ linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/ldt.c 1.148 +4107adf1cNtsuOxOB4T6paAoY2R2PA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/pci-dma.c 1.149 +40f56238a8iOVDEoostsbun_sy2i4g linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/process.c 1.150 +40f56238YQIJoYG2ehDGEcdTgLmGbg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/setup.c 1.151 +40f56238nWMQg7CKbyTy0KJNvCzbtg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/signal.c 1.152 +40f56238UL9uv78ODDzMwLL9yryeFw linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/sysenter.c 1.153 +40f56238qVGkpO_ycnQA8k03kQzAgA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c 1.154 +40f56238NzTgeO63RGoxHrW5NQeO3Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/timers/Makefile 1.155 +40f56238BMqG5PuSHufpjbvp_helBw linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c 1.156 +40f562389xNa78YBZciUibQjyRU_Lg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/traps.c 1.157 +40f56238qASEI_IOhCKWNuwFKNZrKQ linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vmlinux.lds.S 1.158 +40f56238JypKAUG01ZojFwH7qnZ5uA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vsyscall.S 1.159 +40f56238wi6AdNQjm0RT57bSkwb6hg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vsyscall.lds 1.160 +40f56238a3w6-byOzexIlMgni76Lcg linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/Makefile 1.161 +40f56238ILx8xlbywNbzTdv5Zr4xXQ linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/fault.c 1.162 +4118cc35CbY8rfGVspF5O-7EkXBEAA linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/highmem.c 1.163 +40f562383SKvDStdtrvzr5fyCbW4rw linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/hypervisor.c 1.164 +40f56239xcNylAxuGsQHwi1AyMLV8w linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/init.c 1.165 +41062ab7CjxC1UBaFhOMWWdhHkIUyg linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/ioremap.c 1.166 +40f5623906UYHv1rsVUeRc0tFT0dWw linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/pgtable.c 1.167 +4107adf12ndy94MidCaivDibJ3pPAg linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/Makefile 1.168 +4107adf1WcCgkhsdLTRGX52cOG1vJg linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/direct.c 1.169 +4107adf1s5u6249DNPUViX1YNagbUQ linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/irq.c 1.170 +40f56239zOksGg_H4XD4ye6iZNtoZA linux-2.6.8.1-xen-sparse/arch/xen/kernel/Makefile 1.171 +40f56239bvOjuuuViZ0XMlNiREFC0A linux-2.6.8.1-xen-sparse/arch/xen/kernel/ctrl_if.c 1.172 +40f56239pYRq5yshPTkv3ujXKc8K6g linux-2.6.8.1-xen-sparse/arch/xen/kernel/empty.c 1.173 +40f56238xFQe9T7M_U_FItM-bZIpLw linux-2.6.8.1-xen-sparse/arch/xen/kernel/evtchn.c 1.174 +4110f478aeQWllIN7J4kouAHiAqrPw linux-2.6.8.1-xen-sparse/arch/xen/kernel/fixup.c 1.175 +40f56239sFcjHiIRmnObRIDF-zaeKQ linux-2.6.8.1-xen-sparse/arch/xen/kernel/process.c 1.176 +40f562392LBhwmOxVPsYdkYXMxI_ZQ linux-2.6.8.1-xen-sparse/arch/xen/kernel/reboot.c 1.177 +3f68905c5eiA-lBMQSvXLMWS1ikDEA linux-2.6.8.1-xen-sparse/arch/xen/kernel/xen_proc.c 1.178 +41261688yS8eAyy-7kzG4KBs0xbYCA linux-2.6.8.1-xen-sparse/drivers/Makefile 1.179 +4108f5c1WfTIrs0HZFeV39sttekCTw linux-2.6.8.1-xen-sparse/drivers/char/mem.c 1.180 +4111308bZAIzwf_Kzu6x1TZYZ3E0_Q linux-2.6.8.1-xen-sparse/drivers/char/tty_io.c 1.181 +40f56239Dp_vMTgz8TEbvo1hjHGc3w linux-2.6.8.1-xen-sparse/drivers/xen/Makefile 1.182 +410d0893otFGghmv4dUXDUBBdY5aIA linux-2.6.8.1-xen-sparse/drivers/xen/blkback/Makefile 1.183 +4087cf0d1XgMkooTZAiJS6NrcpLQNQ linux-2.6.8.1-xen-sparse/drivers/xen/blkback/blkback.c 1.184 +4087cf0dZadZ8r6CEt4fNN350Yle3A linux-2.6.8.1-xen-sparse/drivers/xen/blkback/common.h 1.185 +4087cf0dxlh29iw0w-9rxOCEGCjPcw linux-2.6.8.1-xen-sparse/drivers/xen/blkback/control.c 1.186 +4087cf0dbuoH20fMjNZjcgrRK-1msQ linux-2.6.8.1-xen-sparse/drivers/xen/blkback/interface.c 1.187 +4087cf0dk97tacDzxfByWV7JifUYqA linux-2.6.8.1-xen-sparse/drivers/xen/blkback/vbd.c 1.188 +40f56239Sfle6wGv5FS0wjS_HI150A linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/Kconfig 1.189 +40f562395atl9x4suKGhPkjqLOXESg linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/Makefile 1.190 +40f56239-JNIaTzlviVJohVdoYOUpw linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/blkfront.c 1.191 +40f56239y9naBTXe40Pi2J_z3p-d1g linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/block.h 1.192 +40f56239BVfPsXBiWQitXgDRtOsiqg linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/vbd.c 1.193 +40f56239fsLjvtD8YBRAWphps4FDjg linux-2.6.8.1-xen-sparse/drivers/xen/console/Makefile 1.194 +3e5a4e651TH-SXHoufurnWjgl5bfOA linux-2.6.8.1-xen-sparse/drivers/xen/console/console.c 1.195 +40f56239KYxO0YabhPzCTeUuln-lnA linux-2.6.8.1-xen-sparse/drivers/xen/evtchn/Makefile 1.196 +40f56239DoibTX6R-ZYd3QTXAB8_TA linux-2.6.8.1-xen-sparse/drivers/xen/evtchn/evtchn.c 1.197 +410a9817HEVJvred5Oy_uKH3HFJC5Q linux-2.6.8.1-xen-sparse/drivers/xen/netback/Makefile 1.198 +4097ba831lpGeLlPg-bfV8XarVVuoQ linux-2.6.8.1-xen-sparse/drivers/xen/netback/common.h 1.199 +4097ba83wvv8yi5P5xugCUBAdb6O-A linux-2.6.8.1-xen-sparse/drivers/xen/netback/control.c 1.200 +4097ba83byY5bTSugJGZ1exTxIcMKw linux-2.6.8.1-xen-sparse/drivers/xen/netback/interface.c 1.201 +4087cf0dGmSbFhFZyIZBJzvqxY-qBw linux-2.6.8.1-xen-sparse/drivers/xen/netback/netback.c 1.202 +40f56239lrg_Ob0BJ8WBFS1zeg2CYw linux-2.6.8.1-xen-sparse/drivers/xen/netfront/Kconfig 1.203 +40f56239Wd4k_ycG_mFsSO1r5xKdtQ linux-2.6.8.1-xen-sparse/drivers/xen/netfront/Makefile 1.204 +405853f6nbeazrNyEWNHBuoSg2PiPA linux-2.6.8.1-xen-sparse/drivers/xen/netfront/netfront.c 1.205 +4108f5c1ppFXVpQzCOAZ6xXYubsjKA linux-2.6.8.1-xen-sparse/drivers/xen/privcmd/Makefile 1.206 +3e5a4e65IUfzzMu2kZFlGEB8-rpTaA linux-2.6.8.1-xen-sparse/drivers/xen/privcmd/privcmd.c 1.207 +40f56239YAjS52QG2FIAQpHDZAdGHg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/desc.h 1.208 +4107adf1E5O4ztGHNGMzCCNhcvqNow linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h 1.209 +40f5623anSzpuEHgiNmQ56fIRfCoaQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/e820.h 1.210 +40f5623akIoBsQ3KxSB2kufkbgONXQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/fixmap.h 1.211 +4118b6a418gnL6AZsTdglC92YGqYTg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/highmem.h 1.212 +40f5623aJVXQwpJMOLE99XgvGsfQ8Q linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/io.h 1.213 +40f5623am9BzluYFuV6EQfTd-so3dA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/do_timer.h 1.214 +40f5623adZQ1IZGPxbDXONjyZGYuTA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/io_ports.h 1.215 +40f5623aKXkBBxgpLx2NcvkncQ1Yyw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h 1.216 +40f5623aMQZoYuf4ml9v69N3gu8ing linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_mpspec.h 1.217 +40f5623a8LroVMnZ5YRzJJmIc-zHlw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_reboot.h 1.218 +40f5623an3wOvFKmpIvqSxQfWzklVQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_resources.h 1.219 +40f5623ayR1vnzfF__htza35a8Ft-g linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_time.h 1.220 +40f5623a4YdRdVzYWJzOOoqe8mnrXA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_timer.h 1.221 +40f5623aDLxmbOtUHvkWztKjAO4EjA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_traps.h 1.222 +41062ab7HMSSuaUv3_Z4agLpjSO88A linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/pci-functions.h 1.223 +40f5623aDMCsWOFO0jktZ4e8sjwvEg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h 1.224 +40f5623arsFXkGdPvIqvFi3yFXGR0Q linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h 1.225 +4120f807GCO0uqsLqdZj9csxR1Wthw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mmu_context.h 1.226 +40f5623aFTyFTR-vdiA-KaGxk5JOKQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/msr.h 1.227 +40f5623adgjZq9nAgCt0IXdWl7udSA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/page.h 1.228 +40f5623a54NuG-7qHihGYmw4wWQnMA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/param.h 1.229 +41137cc1kkvg0cg7uxddcEfjL7L67w linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pci.h 1.230 +40f5623atCokYc2uCysSJ8jFO8TEsw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgalloc.h 1.231 +412e01beTwiaC8sYY4XJP8PxLST5CA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable-2level-defs.h 1.232 +40f5623aEToIXouJgO-ao5d5pcEt1w linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h 1.233 +40f5623aCCXRPlGpNthVXstGz9ZV3A linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable.h 1.234 +40f5623aPCkQQfPtJSooGdhcatrvnQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/processor.h 1.235 +40f5623bzLvxr7WoJIxVf2OH4rCBJg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/segment.h 1.236 +40f5623bG_LzgG6-qwk292nTc5Wabw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/setup.h 1.237 +40f5623bgzm_9vwxpzJswlAxg298Gg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h 1.238 +40f5623bVdKP7Dt7qm8twu3NcnGNbA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/system.h 1.239 +40f5623bSgGrvrGRpD71K-lIYqaGgg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/timer.h 1.240 +40f5623bc8LKPRO09wY5dGDnY_YCpw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/tlbflush.h 1.241 +41062ab7uFxnCq-KtPeAm-aV8CicgA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/vga.h 1.242 +40f5623bxUbeGjkRrjDguCy_Gm8RLw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/xor.h 1.243 +40f5623bYNP7tHE2zX6YQxp9Zq2utQ linux-2.6.8.1-xen-sparse/include/asm-xen/ctrl_if.h 1.244 +40f5623b3Eqs8pAc5WpPX8_jTzV2qw linux-2.6.8.1-xen-sparse/include/asm-xen/evtchn.h 1.245 +40f5623aGPlsm0u1LTO-NVZ6AGzNRQ linux-2.6.8.1-xen-sparse/include/asm-xen/hypervisor.h 1.246 +40f5623cndVUFlkxpf7Lfx7xu8madQ linux-2.6.8.1-xen-sparse/include/asm-xen/multicall.h 1.247 +3f108af1ylCIm82H052FVTfXACBHrw linux-2.6.8.1-xen-sparse/include/asm-xen/proc_cmd.h 1.248 +4122466356eIBnC9ot44WSVVIFyhQA linux-2.6.8.1-xen-sparse/include/asm-xen/queues.h 1.249 +3fa8e3f0kBLeE4To2vpdi3cpJbIkbQ linux-2.6.8.1-xen-sparse/include/asm-xen/suspend.h 1.250 +3f689063BoW-HWV3auUJ-OqXfcGArw linux-2.6.8.1-xen-sparse/include/asm-xen/xen_proc.h 1.251 +4124d8c4aocX7A-jIbuGraWN84pxGQ linux-2.6.8.1-xen-sparse/include/linux/bio.h 1.252 +4124f66fp5QwbDHEfoUIa7pqO5Xhag linux-2.6.8.1-xen-sparse/include/linux/page-flags.h 1.253 +4124f66f4NaKNa0xPiGGykn9QaZk3w linux-2.6.8.1-xen-sparse/include/linux/skbuff.h 1.254 +40f56a0ddHCSs3501MY4hRf22tctOw linux-2.6.8.1-xen-sparse/mkbuildtree 1.255 +410a94a4KT6I6X0LVc7djB39tRDp4g linux-2.6.8.1-xen-sparse/mm/page_alloc.c 1.256 40e1b09db5mN69Ijj0X_Eol-S7dXiw tools/Make.defs 1.257 3f776bd1Hy9rn69ntXBhPReUFw9IEA tools/Makefile 1.258 4124b307nRyK3dhn1hAsvrY76NuV3g tools/check/Makefile
2.1 --- a/linux-2.4.27-xen-sparse/include/asm-xen/irq.h Wed Aug 25 16:26:15 2004 +0000 2.2 +++ b/linux-2.4.27-xen-sparse/include/asm-xen/irq.h Thu Aug 26 19:06:18 2004 +0000 2.3 @@ -56,4 +56,7 @@ extern void enable_irq(unsigned int); 2.4 extern void irq_suspend(void); 2.5 extern void irq_resume(void); 2.6 2.7 + 2.8 +#define CPU_MASK_NONE 0 2.9 + 2.10 #endif /* _ASM_IRQ_H */
3.1 --- a/linux-2.4.27-xen-sparse/include/linux/mm.h Wed Aug 25 16:26:15 2004 +0000 3.2 +++ b/linux-2.4.27-xen-sparse/include/linux/mm.h Thu Aug 26 19:06:18 2004 +0000 3.3 @@ -332,7 +332,10 @@ typedef struct page { 3.4 /* A foreign page uses a custom destructor rather than the buddy allocator. */ 3.5 #ifdef CONFIG_FOREIGN_PAGES 3.6 #define PageForeign(page) test_bit(PG_foreign, &(page)->flags) 3.7 -#define SetPageForeign(page) set_bit(PG_foreign, &(page)->flags) 3.8 +#define SetPageForeign(page, dtor) do { \ 3.9 + set_bit(PG_foreign, &(page)->flags); \ 3.10 + (page)->mapping = (void *)dtor; \ 3.11 +} while (0) 3.12 #define ClearPageForeign(page) clear_bit(PG_foreign, &(page)->flags) 3.13 #define PageForeignDestructor(page) \ 3.14 ( (void (*) (struct page *)) (page)->mapping )
4.1 --- a/linux-2.4.27-xen-sparse/mkbuildtree Wed Aug 25 16:26:15 2004 +0000 4.2 +++ b/linux-2.4.27-xen-sparse/mkbuildtree Thu Aug 26 19:06:18 2004 +0000 4.3 @@ -78,7 +78,7 @@ relative_lndir () 4.4 4.5 # Get absolute path to the destination directory 4.6 pushd . >/dev/null 4.7 -cd ${1} 4.8 +cd ${1} || { echo "cannot cd to ${1}"; exit 1; } 4.9 AD=$PWD 4.10 popd >/dev/null 4.11 4.12 @@ -93,7 +93,7 @@ RS=$DESTPATH 4.13 for i in `find . -type f -o -type l` ; do rm -f ${AD}/${i#./} ; done 4.14 4.15 # We now work from the destination directory 4.16 -cd ${AD} 4.17 +cd ${AD} || { echo "cannot cd to ${AD}"; exit 1; } 4.18 4.19 # Remove old symlinks 4.20 for i in `find . -type l`; do rm -f $i; done 4.21 @@ -102,7 +102,9 @@ for i in `find . -type l`; do rm -f $i; 4.22 relative_lndir ${RS} 4.23 rm -f mkbuildtree 4.24 4.25 -LINUX_26=${RS}/../linux-2.6.7-xen-sparse 4.26 +set ${RS}/../linux-2.6.*-xen-sparse 4.27 +[ "$1" == "${RS}/../linux-2.6.*-xen-parse" ] && { echo "no Linux 2.6 sparse tree at ${RS}/../linux-2.6.*-xen-sparse"; exit 1; } 4.28 +LINUX_26="$1" 4.29 4.30 4.31 # Create links to the shared definitions of the hypervisor interface
5.1 --- a/linux-2.6.7-xen-sparse/arch/xen/Kconfig Wed Aug 25 16:26:15 2004 +0000 5.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 5.3 @@ -1,105 +0,0 @@ 5.4 -# 5.5 -# For a description of the syntax of this configuration file, 5.6 -# see Documentation/kbuild/kconfig-language.txt. 5.7 -# 5.8 - 5.9 -mainmenu "Linux Kernel Configuration" 5.10 - 5.11 -config XEN 5.12 - bool 5.13 - default y 5.14 - help 5.15 - This is the Linux Xen port. 5.16 - 5.17 -config ARCH_XEN 5.18 - bool 5.19 - default y 5.20 - 5.21 - 5.22 -config NO_IDLE_HZ 5.23 - bool 5.24 - default y 5.25 - 5.26 - 5.27 -menu "XEN" 5.28 - 5.29 -config XEN_PRIVILEGED_GUEST 5.30 - bool "Privileged Guest (domain 0)" 5.31 - default n 5.32 - help 5.33 - Support for privileged operation (domain 0) 5.34 - 5.35 -config XEN_PHYSDEV_ACCESS 5.36 - bool "Device-driver domain (physical device access)" 5.37 - default y if XEN_PRIVILEGED_GUEST 5.38 - default n 5.39 - help 5.40 - Device-driver domain (physical device access) 5.41 - 5.42 -config XEN_WRITABLE_PAGETABLES 5.43 - bool "Use writable pagetables" 5.44 - default n 5.45 - help 5.46 - Use writable L1 pagetables 5.47 - 5.48 -endmenu 5.49 - 5.50 -config FOREIGN_PAGES 5.51 - bool 5.52 - default y if XEN_PHYSDEV_ACCESS 5.53 - default n if !XEN_PHYSDEV_ACCESS 5.54 - 5.55 -config PAGESIZED_SKBS 5.56 - bool 5.57 - default y if XEN_PHYSDEV_ACCESS 5.58 - default n if !XEN_PHYSDEV_ACCESS 5.59 - 5.60 -#config VT 5.61 -# bool 5.62 -# default y 5.63 - 5.64 -#config VT_CONSOLE 5.65 -# bool 5.66 -# default y 5.67 - 5.68 -#config HW_CONSOLE 5.69 -# bool 5.70 -# default y 5.71 - 5.72 -choice 5.73 - prompt "Processor Type" 5.74 - default X86 5.75 - 5.76 -config X86 5.77 - bool "X86" 5.78 - help 5.79 - Choose this option if your computer is a X86 architecture. 5.80 - 5.81 -config X86_64 5.82 - bool "X86_64" 5.83 - help 5.84 - Choose this option if your computer is a X86 architecture. 5.85 - 5.86 -endchoice 5.87 - 5.88 -source "init/Kconfig" 5.89 - 5.90 -if X86 5.91 -source "arch/xen/i386/Kconfig" 5.92 -endif 5.93 - 5.94 -menu "Executable file formats" 5.95 - 5.96 -source "fs/Kconfig.binfmt" 5.97 - 5.98 -endmenu 5.99 - 5.100 -source "arch/xen/Kconfig.drivers" 5.101 - 5.102 -source "fs/Kconfig" 5.103 - 5.104 -source "security/Kconfig" 5.105 - 5.106 -source "crypto/Kconfig" 5.107 - 5.108 -source "lib/Kconfig"
6.1 --- a/linux-2.6.7-xen-sparse/arch/xen/Kconfig.drivers Wed Aug 25 16:26:15 2004 +0000 6.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 6.3 @@ -1,87 +0,0 @@ 6.4 -# arch/xen/Kconfig.drivers 6.5 - 6.6 -menu "Device Drivers" 6.7 - 6.8 -source "drivers/base/Kconfig" 6.9 - 6.10 -source "drivers/scsi/Kconfig" 6.11 -source "drivers/block/Kconfig" 6.12 -source "drivers/md/Kconfig" 6.13 - 6.14 -# Always include scsi and block to enable iscsi, loop0 etc. 6.15 - 6.16 -if XEN_PHYSDEV_ACCESS 6.17 -source "drivers/ide/Kconfig" 6.18 -source "drivers/cdrom/Kconfig" 6.19 -endif 6.20 - 6.21 -source "net/Kconfig" 6.22 - 6.23 -if XEN_PRIVILEGED_GUEST 6.24 -source "drivers/input/Kconfig" 6.25 -endif 6.26 - 6.27 -config INPUT 6.28 - tristate "Input devices (needed for keyboard, mouse, ...)" if EMBEDDED 6.29 - default y 6.30 - ---help--- 6.31 - Say Y here if you have any input device (mouse, keyboard, tablet, 6.32 - joystick, steering wheel ...) connected to your system and want 6.33 - it to be available to applications. This includes standard PS/2 6.34 - keyboard and mouse. 6.35 - 6.36 - Say N here if you have a headless (no monitor, no keyboard) system. 6.37 - 6.38 - More information is available: <file:Documentation/input/input.txt> 6.39 - 6.40 - If unsure, say Y. 6.41 - 6.42 - To compile this driver as a module, choose M here: the 6.43 - module will be called input. 6.44 - 6.45 -if XEN_PRIVILEGED_GUEST 6.46 -source "drivers/char/Kconfig" 6.47 -endif 6.48 - 6.49 -config UNIX98_PTYS 6.50 - bool "Unix98 PTY support" if EMBEDDED 6.51 - default y 6.52 - ---help--- 6.53 - A pseudo terminal (PTY) is a software device consisting of two 6.54 - halves: a master and a slave. The slave device behaves identical to 6.55 - a physical terminal; the master device is used by a process to 6.56 - read data from and write data to the slave, thereby emulating a 6.57 - terminal. Typical programs for the master side are telnet servers 6.58 - and xterms. 6.59 - 6.60 - Linux has traditionally used the BSD-like names /dev/ptyxx for 6.61 - masters and /dev/ttyxx for slaves of pseudo terminals. This scheme 6.62 - has a number of problems. The GNU C library glibc 2.1 and later, 6.63 - however, supports the Unix98 naming standard: in order to acquire a 6.64 - pseudo terminal, a process opens /dev/ptmx; the number of the pseudo 6.65 - terminal is then made available to the process and the pseudo 6.66 - terminal slave can be accessed as /dev/pts/<number>. What was 6.67 - traditionally /dev/ttyp2 will then be /dev/pts/2, for example. 6.68 - 6.69 - All modern Linux systems use the Unix98 ptys. Say Y unless 6.70 - you're on an embedded system and want to conserve memory. 6.71 - 6.72 - 6.73 -if XEN_PHYSDEV_ACCESS 6.74 -source "drivers/i2c/Kconfig" 6.75 -source "drivers/video/Kconfig" 6.76 -endif 6.77 - 6.78 -#config XEN_EVTCHN 6.79 -# bool "Xen Event Channel" 6.80 -# depends on XEN 6.81 -# default Y 6.82 -# 6.83 -#config XEN_CONSOLE 6.84 -# bool "Xen Console" 6.85 -# depends on XEN && XEN_EVTCHN 6.86 -# default Y 6.87 -# help 6.88 -# Say Y to build a console driver for Xen. 6.89 - 6.90 -endmenu
7.1 --- a/linux-2.6.7-xen-sparse/arch/xen/Makefile Wed Aug 25 16:26:15 2004 +0000 7.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 7.3 @@ -1,77 +0,0 @@ 7.4 -# 7.5 -# xen/Makefile 7.6 -# 7.7 -# This file is included by the global makefile so that you can add your own 7.8 -# architecture-specific flags and dependencies. Remember to do have actions 7.9 -# for "archclean" cleaning up for this architecture. 7.10 -# 7.11 -# This file is subject to the terms and conditions of the GNU General Public 7.12 -# License. See the file "COPYING" in the main directory of this archive 7.13 -# for more details. 7.14 -# 7.15 -# Copyright (C) 2004 by Christian Limpach 7.16 -# 7.17 - 7.18 -override EXTRAVERSION:=$(subst linux-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL),,$(shell basename $(TOPDIR)))$(EXTRAVERSION) 7.19 - 7.20 -XENARCH := $(subst ",,$(CONFIG_XENARCH)) 7.21 - 7.22 -# pick up headers from include/asm-xen/asm in preference over include/asm 7.23 -NOSTDINC_FLAGS = -nostdinc -iwithprefix include/asm-xen -Iinclude/asm-xen -iwithprefix include 7.24 - 7.25 -# make uname return the processor arch 7.26 -UTS_MACHINE := $(XENARCH) 7.27 - 7.28 -core-y += arch/xen/kernel/ 7.29 - 7.30 -include/.asm-ignore: 7.31 - @rm -f include/.asm-ignore 7.32 - @mv include/asm include/.asm-ignore 7.33 - @echo ' SYMLINK include/asm -> include/asm-$(XENARCH)' 7.34 - $(Q)if [ ! -d include ]; then mkdir -p include; fi; 7.35 - @ln -fsn asm-$(XENARCH) include/asm 7.36 - 7.37 -include/asm-xen/asm: 7.38 - @echo ' SYMLINK $@ -> include/asm-xen/asm-$(XENARCH)' 7.39 - @ln -fsn asm-$(XENARCH) $@ 7.40 - 7.41 -include/asm-xen/asm-$(XENARCH)/hypervisor-ifs: 7.42 - @echo ' SYMLINK $@ -> include/asm-xen/hypervisor-ifs' 7.43 - @ln -fsn ../hypervisor-ifs $@ 7.44 - 7.45 -arch/xen/arch: 7.46 - @rm -f $@ 7.47 - @ln -fsn $(XENARCH) $@ 7.48 - 7.49 -prepare: include/.asm-ignore include/asm-xen/asm \ 7.50 - include/asm-xen/asm-$(XENARCH)/hypervisor-ifs \ 7.51 - arch/xen/arch ; 7.52 - 7.53 -all: vmlinuz 7.54 - 7.55 -vmlinuz: vmlinux 7.56 - $(Q)$(MAKE) $(build)=arch/xen/boot vmlinuz 7.57 - 7.58 -XINSTALL_NAME ?= $(KERNELRELEASE) 7.59 -install: vmlinuz 7.60 - mkdir -p $(INSTALL_PATH)/boot 7.61 - install -m0644 vmlinuz $(INSTALL_PATH)/boot/vmlinuz-$(XINSTALL_NAME)$(INSTALL_SUFFIX) 7.62 - install -m0644 vmlinux $(INSTALL_PATH)/boot/vmlinux-syms-$(XINSTALL_NAME)$(INSTALL_SUFFIX) 7.63 - install -m0664 .config $(INSTALL_PATH)/boot/config-$(XINSTALL_NAME)$(INSTALL_SUFFIX) 7.64 - install -m0664 System.map $(INSTALL_PATH)/boot/System.map-$(XINSTALL_NAME)$(INSTALL_SUFFIX) 7.65 - 7.66 -dist: 7.67 - $(MAKE) INSTALL_PATH=../install install 7.68 - 7.69 -archclean: 7.70 - @if [ -e arch/xen/arch ]; then $(MAKE) $(clean)=arch/xen/arch; fi; 7.71 - @rm -f arch/xen/arch include/.asm-ignore include/asm-xen/asm 7.72 - 7.73 -define archhelp 7.74 - echo '* vmlinuz - Compressed kernel image' 7.75 - echo ' install - Install kernel image and config file' 7.76 -endef 7.77 - 7.78 -ifneq ($(XENARCH),) 7.79 -include $(srctree)/arch/xen/$(XENARCH)/Makefile 7.80 -endif
8.1 --- a/linux-2.6.7-xen-sparse/arch/xen/boot/Makefile Wed Aug 25 16:26:15 2004 +0000 8.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 8.3 @@ -1,8 +0,0 @@ 8.4 - 8.5 -OBJCOPYFLAGS := -g --strip-unneeded 8.6 - 8.7 -vmlinuz: vmlinux-stripped FORCE 8.8 - $(call if_changed,gzip) 8.9 - 8.10 -vmlinux-stripped: vmlinux FORCE 8.11 - $(call if_changed,objcopy)
9.1 --- a/linux-2.6.7-xen-sparse/arch/xen/configs/xen0_defconfig Wed Aug 25 16:26:15 2004 +0000 9.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 9.3 @@ -1,933 +0,0 @@ 9.4 -# 9.5 -# Automatically generated make config: don't edit 9.6 -# 9.7 -CONFIG_XEN=y 9.8 -CONFIG_ARCH_XEN=y 9.9 -CONFIG_NO_IDLE_HZ=y 9.10 - 9.11 -# 9.12 -# XEN 9.13 -# 9.14 -CONFIG_XEN_PRIVILEGED_GUEST=y 9.15 -CONFIG_XEN_PHYSDEV_ACCESS=y 9.16 -# CONFIG_XEN_WRITABLE_PAGETABLES is not set 9.17 -CONFIG_FOREIGN_PAGES=y 9.18 -CONFIG_PAGESIZED_SKBS=y 9.19 -CONFIG_X86=y 9.20 -# CONFIG_X86_64 is not set 9.21 - 9.22 -# 9.23 -# Code maturity level options 9.24 -# 9.25 -CONFIG_EXPERIMENTAL=y 9.26 -# CONFIG_CLEAN_COMPILE is not set 9.27 -# CONFIG_STANDALONE is not set 9.28 -CONFIG_BROKEN=y 9.29 -CONFIG_BROKEN_ON_SMP=y 9.30 - 9.31 -# 9.32 -# General setup 9.33 -# 9.34 -CONFIG_SWAP=y 9.35 -CONFIG_SYSVIPC=y 9.36 -# CONFIG_POSIX_MQUEUE is not set 9.37 -# CONFIG_BSD_PROCESS_ACCT is not set 9.38 -CONFIG_SYSCTL=y 9.39 -# CONFIG_AUDIT is not set 9.40 -CONFIG_LOG_BUF_SHIFT=14 9.41 -CONFIG_HOTPLUG=y 9.42 -# CONFIG_IKCONFIG is not set 9.43 -# CONFIG_EMBEDDED is not set 9.44 -CONFIG_KALLSYMS=y 9.45 -# CONFIG_KALLSYMS_ALL is not set 9.46 -CONFIG_FUTEX=y 9.47 -CONFIG_EPOLL=y 9.48 -CONFIG_IOSCHED_NOOP=y 9.49 -CONFIG_IOSCHED_AS=y 9.50 -CONFIG_IOSCHED_DEADLINE=y 9.51 -CONFIG_IOSCHED_CFQ=y 9.52 -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 9.53 - 9.54 -# 9.55 -# Loadable module support 9.56 -# 9.57 -CONFIG_MODULES=y 9.58 -CONFIG_MODULE_UNLOAD=y 9.59 -# CONFIG_MODULE_FORCE_UNLOAD is not set 9.60 -CONFIG_OBSOLETE_MODPARM=y 9.61 -# CONFIG_MODVERSIONS is not set 9.62 -CONFIG_KMOD=y 9.63 - 9.64 -# 9.65 -# X86 Processor Configuration 9.66 -# 9.67 -CONFIG_XENARCH="i386" 9.68 -CONFIG_MMU=y 9.69 -CONFIG_UID16=y 9.70 -CONFIG_GENERIC_ISA_DMA=y 9.71 -# CONFIG_M686 is not set 9.72 -# CONFIG_MPENTIUMII is not set 9.73 -# CONFIG_MPENTIUMIII is not set 9.74 -# CONFIG_MPENTIUMM is not set 9.75 -CONFIG_MPENTIUM4=y 9.76 -# CONFIG_MK6 is not set 9.77 -# CONFIG_MK7 is not set 9.78 -# CONFIG_MK8 is not set 9.79 -# CONFIG_MCRUSOE is not set 9.80 -# CONFIG_MCYRIXIII is not set 9.81 -# CONFIG_MVIAC3_2 is not set 9.82 -# CONFIG_X86_GENERIC is not set 9.83 -CONFIG_X86_CMPXCHG=y 9.84 -CONFIG_X86_XADD=y 9.85 -CONFIG_X86_L1_CACHE_SHIFT=7 9.86 -CONFIG_RWSEM_XCHGADD_ALGORITHM=y 9.87 -CONFIG_X86_WP_WORKS_OK=y 9.88 -CONFIG_X86_INVLPG=y 9.89 -CONFIG_X86_BSWAP=y 9.90 -CONFIG_X86_POPAD_OK=y 9.91 -CONFIG_X86_GOOD_APIC=y 9.92 -CONFIG_X86_INTEL_USERCOPY=y 9.93 -CONFIG_X86_USE_PPRO_CHECKSUM=y 9.94 -# CONFIG_HPET_TIMER is not set 9.95 -# CONFIG_HPET_EMULATE_RTC is not set 9.96 -# CONFIG_SMP is not set 9.97 -CONFIG_PREEMPT=y 9.98 -CONFIG_X86_CPUID=y 9.99 - 9.100 -# 9.101 -# Firmware Drivers 9.102 -# 9.103 -# CONFIG_EDD is not set 9.104 -CONFIG_NOHIGHMEM=y 9.105 -# CONFIG_HIGHMEM4G is not set 9.106 -CONFIG_HAVE_DEC_LOCK=y 9.107 -# CONFIG_REGPARM is not set 9.108 - 9.109 -# 9.110 -# Bus options (PCI, PCMCIA, EISA, MCA, ISA) 9.111 -# 9.112 -CONFIG_PCI=y 9.113 -# CONFIG_PCI_GOBIOS is not set 9.114 -# CONFIG_PCI_GOMMCONFIG is not set 9.115 -CONFIG_PCI_GODIRECT=y 9.116 -# CONFIG_PCI_GOANY is not set 9.117 -CONFIG_PCI_DIRECT=y 9.118 -CONFIG_PCI_LEGACY_PROC=y 9.119 -# CONFIG_PCI_NAMES is not set 9.120 -CONFIG_ISA=y 9.121 -# CONFIG_EISA is not set 9.122 -# CONFIG_MCA is not set 9.123 -# CONFIG_SCx200 is not set 9.124 - 9.125 -# 9.126 -# PCMCIA/CardBus support 9.127 -# 9.128 -CONFIG_PCMCIA=m 9.129 -# CONFIG_PCMCIA_DEBUG is not set 9.130 -CONFIG_YENTA=m 9.131 -CONFIG_CARDBUS=y 9.132 -# CONFIG_I82092 is not set 9.133 -# CONFIG_I82365 is not set 9.134 -# CONFIG_TCIC is not set 9.135 -CONFIG_PCMCIA_PROBE=y 9.136 - 9.137 -# 9.138 -# PCI Hotplug Support 9.139 -# 9.140 -# CONFIG_HOTPLUG_PCI is not set 9.141 - 9.142 -# 9.143 -# Kernel hacking 9.144 -# 9.145 -CONFIG_DEBUG_KERNEL=y 9.146 -CONFIG_EARLY_PRINTK=y 9.147 -# CONFIG_DEBUG_STACKOVERFLOW is not set 9.148 -# CONFIG_DEBUG_STACK_USAGE is not set 9.149 -# CONFIG_DEBUG_SLAB is not set 9.150 -CONFIG_MAGIC_SYSRQ=y 9.151 -# CONFIG_DEBUG_SPINLOCK is not set 9.152 -# CONFIG_DEBUG_PAGEALLOC is not set 9.153 -# CONFIG_DEBUG_INFO is not set 9.154 -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 9.155 -# CONFIG_FRAME_POINTER is not set 9.156 -# CONFIG_4KSTACKS is not set 9.157 -CONFIG_X86_BIOS_REBOOT=y 9.158 -CONFIG_X86_STD_RESOURCES=y 9.159 -CONFIG_PC=y 9.160 - 9.161 -# 9.162 -# Executable file formats 9.163 -# 9.164 -CONFIG_BINFMT_ELF=y 9.165 -# CONFIG_BINFMT_AOUT is not set 9.166 -# CONFIG_BINFMT_MISC is not set 9.167 - 9.168 -# 9.169 -# Device Drivers 9.170 -# 9.171 - 9.172 -# 9.173 -# Generic Driver Options 9.174 -# 9.175 -# CONFIG_FW_LOADER is not set 9.176 -# CONFIG_DEBUG_DRIVER is not set 9.177 - 9.178 -# 9.179 -# SCSI device support 9.180 -# 9.181 -CONFIG_SCSI=y 9.182 -CONFIG_SCSI_PROC_FS=y 9.183 - 9.184 -# 9.185 -# SCSI support type (disk, tape, CD-ROM) 9.186 -# 9.187 -CONFIG_BLK_DEV_SD=y 9.188 -# CONFIG_CHR_DEV_ST is not set 9.189 -# CONFIG_CHR_DEV_OSST is not set 9.190 -# CONFIG_BLK_DEV_SR is not set 9.191 -# CONFIG_CHR_DEV_SG is not set 9.192 - 9.193 -# 9.194 -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs 9.195 -# 9.196 -# CONFIG_SCSI_MULTI_LUN is not set 9.197 -# CONFIG_SCSI_CONSTANTS is not set 9.198 -# CONFIG_SCSI_LOGGING is not set 9.199 - 9.200 -# 9.201 -# SCSI Transport Attributes 9.202 -# 9.203 -# CONFIG_SCSI_SPI_ATTRS is not set 9.204 -# CONFIG_SCSI_FC_ATTRS is not set 9.205 - 9.206 -# 9.207 -# SCSI low-level drivers 9.208 -# 9.209 -CONFIG_BLK_DEV_3W_XXXX_RAID=y 9.210 -# CONFIG_SCSI_7000FASST is not set 9.211 -# CONFIG_SCSI_ACARD is not set 9.212 -# CONFIG_SCSI_AHA152X is not set 9.213 -# CONFIG_SCSI_AHA1542 is not set 9.214 -CONFIG_SCSI_AACRAID=y 9.215 -CONFIG_SCSI_AIC7XXX=y 9.216 -CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 9.217 -CONFIG_AIC7XXX_RESET_DELAY_MS=15000 9.218 -# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set 9.219 -CONFIG_AIC7XXX_DEBUG_ENABLE=y 9.220 -CONFIG_AIC7XXX_DEBUG_MASK=0 9.221 -CONFIG_AIC7XXX_REG_PRETTY_PRINT=y 9.222 -# CONFIG_SCSI_AIC7XXX_OLD is not set 9.223 -CONFIG_SCSI_AIC79XX=y 9.224 -CONFIG_AIC79XX_CMDS_PER_DEVICE=32 9.225 -CONFIG_AIC79XX_RESET_DELAY_MS=15000 9.226 -# CONFIG_AIC79XX_BUILD_FIRMWARE is not set 9.227 -# CONFIG_AIC79XX_ENABLE_RD_STRM is not set 9.228 -CONFIG_AIC79XX_DEBUG_ENABLE=y 9.229 -CONFIG_AIC79XX_DEBUG_MASK=0 9.230 -CONFIG_AIC79XX_REG_PRETTY_PRINT=y 9.231 -# CONFIG_SCSI_DPT_I2O is not set 9.232 -# CONFIG_SCSI_ADVANSYS is not set 9.233 -# CONFIG_SCSI_IN2000 is not set 9.234 -CONFIG_SCSI_MEGARAID=y 9.235 -CONFIG_SCSI_SATA=y 9.236 -# CONFIG_SCSI_SATA_SVW is not set 9.237 -CONFIG_SCSI_ATA_PIIX=y 9.238 -CONFIG_SCSI_SATA_PROMISE=y 9.239 -CONFIG_SCSI_SATA_SX4=y 9.240 -CONFIG_SCSI_SATA_SIL=y 9.241 -# CONFIG_SCSI_SATA_SIS is not set 9.242 -# CONFIG_SCSI_SATA_VIA is not set 9.243 -# CONFIG_SCSI_SATA_VITESSE is not set 9.244 -CONFIG_SCSI_BUSLOGIC=y 9.245 -# CONFIG_SCSI_OMIT_FLASHPOINT is not set 9.246 -# CONFIG_SCSI_CPQFCTS is not set 9.247 -# CONFIG_SCSI_DMX3191D is not set 9.248 -# CONFIG_SCSI_DTC3280 is not set 9.249 -# CONFIG_SCSI_EATA is not set 9.250 -# CONFIG_SCSI_EATA_PIO is not set 9.251 -# CONFIG_SCSI_FUTURE_DOMAIN is not set 9.252 -# CONFIG_SCSI_GDTH is not set 9.253 -# CONFIG_SCSI_GENERIC_NCR5380 is not set 9.254 -# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set 9.255 -# CONFIG_SCSI_IPS is not set 9.256 -# CONFIG_SCSI_INITIO is not set 9.257 -# CONFIG_SCSI_INIA100 is not set 9.258 -# CONFIG_SCSI_NCR53C406A is not set 9.259 -# CONFIG_SCSI_SYM53C8XX_2 is not set 9.260 -# CONFIG_SCSI_IPR is not set 9.261 -# CONFIG_SCSI_PAS16 is not set 9.262 -# CONFIG_SCSI_PCI2000 is not set 9.263 -# CONFIG_SCSI_PCI2220I is not set 9.264 -# CONFIG_SCSI_PSI240I is not set 9.265 -# CONFIG_SCSI_QLOGIC_FAS is not set 9.266 -# CONFIG_SCSI_QLOGIC_ISP is not set 9.267 -# CONFIG_SCSI_QLOGIC_FC is not set 9.268 -# CONFIG_SCSI_QLOGIC_1280 is not set 9.269 -CONFIG_SCSI_QLA2XXX=y 9.270 -# CONFIG_SCSI_QLA21XX is not set 9.271 -# CONFIG_SCSI_QLA22XX is not set 9.272 -# CONFIG_SCSI_QLA2300 is not set 9.273 -# CONFIG_SCSI_QLA2322 is not set 9.274 -# CONFIG_SCSI_QLA6312 is not set 9.275 -# CONFIG_SCSI_QLA6322 is not set 9.276 -# CONFIG_SCSI_SEAGATE is not set 9.277 -# CONFIG_SCSI_SYM53C416 is not set 9.278 -# CONFIG_SCSI_DC395x is not set 9.279 -# CONFIG_SCSI_DC390T is not set 9.280 -# CONFIG_SCSI_T128 is not set 9.281 -# CONFIG_SCSI_U14_34F is not set 9.282 -# CONFIG_SCSI_ULTRASTOR is not set 9.283 -# CONFIG_SCSI_NSP32 is not set 9.284 -# CONFIG_SCSI_DEBUG is not set 9.285 - 9.286 -# 9.287 -# PCMCIA SCSI adapter support 9.288 -# 9.289 -# CONFIG_PCMCIA_AHA152X is not set 9.290 -# CONFIG_PCMCIA_FDOMAIN is not set 9.291 -# CONFIG_PCMCIA_NINJA_SCSI is not set 9.292 -# CONFIG_PCMCIA_QLOGIC is not set 9.293 -# CONFIG_PCMCIA_SYM53C500 is not set 9.294 - 9.295 -# 9.296 -# Block devices 9.297 -# 9.298 -# CONFIG_BLK_DEV_FD is not set 9.299 -# CONFIG_BLK_DEV_XD is not set 9.300 -# CONFIG_BLK_CPQ_DA is not set 9.301 -# CONFIG_BLK_CPQ_CISS_DA is not set 9.302 -# CONFIG_BLK_DEV_DAC960 is not set 9.303 -# CONFIG_BLK_DEV_UMEM is not set 9.304 -CONFIG_BLK_DEV_LOOP=y 9.305 -# CONFIG_BLK_DEV_CRYPTOLOOP is not set 9.306 -CONFIG_BLK_DEV_NBD=y 9.307 -# CONFIG_BLK_DEV_CARMEL is not set 9.308 -CONFIG_BLK_DEV_RAM=y 9.309 -CONFIG_BLK_DEV_RAM_SIZE=4096 9.310 -CONFIG_BLK_DEV_INITRD=y 9.311 -# CONFIG_LBD is not set 9.312 - 9.313 -# 9.314 -# Multi-device support (RAID and LVM) 9.315 -# 9.316 -CONFIG_MD=y 9.317 -CONFIG_BLK_DEV_MD=m 9.318 -# CONFIG_MD_LINEAR is not set 9.319 -CONFIG_MD_RAID0=m 9.320 -CONFIG_MD_RAID1=m 9.321 -# CONFIG_MD_RAID5 is not set 9.322 -# CONFIG_MD_RAID6 is not set 9.323 -# CONFIG_MD_MULTIPATH is not set 9.324 -CONFIG_BLK_DEV_DM=y 9.325 -# CONFIG_DM_CRYPT is not set 9.326 - 9.327 -# 9.328 -# ATA/ATAPI/MFM/RLL support 9.329 -# 9.330 -CONFIG_IDE=y 9.331 -CONFIG_BLK_DEV_IDE=y 9.332 - 9.333 -# 9.334 -# Please see Documentation/ide.txt for help/info on IDE drives 9.335 -# 9.336 -# CONFIG_BLK_DEV_HD_IDE is not set 9.337 -CONFIG_BLK_DEV_IDEDISK=y 9.338 -# CONFIG_IDEDISK_MULTI_MODE is not set 9.339 -# CONFIG_BLK_DEV_IDECS is not set 9.340 -CONFIG_BLK_DEV_IDECD=y 9.341 -# CONFIG_BLK_DEV_IDETAPE is not set 9.342 -# CONFIG_BLK_DEV_IDEFLOPPY is not set 9.343 -# CONFIG_BLK_DEV_IDESCSI is not set 9.344 -# CONFIG_IDE_TASK_IOCTL is not set 9.345 -# CONFIG_IDE_TASKFILE_IO is not set 9.346 - 9.347 -# 9.348 -# IDE chipset support/bugfixes 9.349 -# 9.350 -CONFIG_IDE_GENERIC=y 9.351 -# CONFIG_BLK_DEV_CMD640 is not set 9.352 -CONFIG_BLK_DEV_IDEPCI=y 9.353 -# CONFIG_IDEPCI_SHARE_IRQ is not set 9.354 -# CONFIG_BLK_DEV_OFFBOARD is not set 9.355 -CONFIG_BLK_DEV_GENERIC=y 9.356 -# CONFIG_BLK_DEV_OPTI621 is not set 9.357 -# CONFIG_BLK_DEV_RZ1000 is not set 9.358 -CONFIG_BLK_DEV_IDEDMA_PCI=y 9.359 -# CONFIG_BLK_DEV_IDEDMA_FORCED is not set 9.360 -CONFIG_IDEDMA_PCI_AUTO=y 9.361 -# CONFIG_IDEDMA_ONLYDISK is not set 9.362 -CONFIG_BLK_DEV_ADMA=y 9.363 -# CONFIG_BLK_DEV_AEC62XX is not set 9.364 -# CONFIG_BLK_DEV_ALI15X3 is not set 9.365 -# CONFIG_BLK_DEV_AMD74XX is not set 9.366 -# CONFIG_BLK_DEV_ATIIXP is not set 9.367 -# CONFIG_BLK_DEV_CMD64X is not set 9.368 -# CONFIG_BLK_DEV_TRIFLEX is not set 9.369 -# CONFIG_BLK_DEV_CY82C693 is not set 9.370 -# CONFIG_BLK_DEV_CS5520 is not set 9.371 -# CONFIG_BLK_DEV_CS5530 is not set 9.372 -# CONFIG_BLK_DEV_HPT34X is not set 9.373 -# CONFIG_BLK_DEV_HPT366 is not set 9.374 -# CONFIG_BLK_DEV_SC1200 is not set 9.375 -CONFIG_BLK_DEV_PIIX=y 9.376 -# CONFIG_BLK_DEV_NS87415 is not set 9.377 -# CONFIG_BLK_DEV_PDC202XX_OLD is not set 9.378 -# CONFIG_BLK_DEV_PDC202XX_NEW is not set 9.379 -CONFIG_BLK_DEV_SVWKS=y 9.380 -# CONFIG_BLK_DEV_SIIMAGE is not set 9.381 -# CONFIG_BLK_DEV_SIS5513 is not set 9.382 -# CONFIG_BLK_DEV_SLC90E66 is not set 9.383 -# CONFIG_BLK_DEV_TRM290 is not set 9.384 -# CONFIG_BLK_DEV_VIA82CXXX is not set 9.385 -# CONFIG_IDE_ARM is not set 9.386 -# CONFIG_IDE_CHIPSETS is not set 9.387 -CONFIG_BLK_DEV_IDEDMA=y 9.388 -# CONFIG_IDEDMA_IVB is not set 9.389 -CONFIG_IDEDMA_AUTO=y 9.390 -# CONFIG_BLK_DEV_HD is not set 9.391 - 9.392 -# 9.393 -# Old CD-ROM drivers (not SCSI, not IDE) 9.394 -# 9.395 -# CONFIG_CD_NO_IDESCSI is not set 9.396 - 9.397 -# 9.398 -# Networking support 9.399 -# 9.400 -CONFIG_NET=y 9.401 - 9.402 -# 9.403 -# Networking options 9.404 -# 9.405 -CONFIG_PACKET=y 9.406 -# CONFIG_PACKET_MMAP is not set 9.407 -# CONFIG_NETLINK_DEV is not set 9.408 -CONFIG_UNIX=y 9.409 -# CONFIG_NET_KEY is not set 9.410 -CONFIG_INET=y 9.411 -# CONFIG_IP_MULTICAST is not set 9.412 -# CONFIG_IP_ADVANCED_ROUTER is not set 9.413 -CONFIG_IP_PNP=y 9.414 -CONFIG_IP_PNP_DHCP=y 9.415 -# CONFIG_IP_PNP_BOOTP is not set 9.416 -# CONFIG_IP_PNP_RARP is not set 9.417 -# CONFIG_NET_IPIP is not set 9.418 -# CONFIG_NET_IPGRE is not set 9.419 -# CONFIG_ARPD is not set 9.420 -# CONFIG_SYN_COOKIES is not set 9.421 -# CONFIG_INET_AH is not set 9.422 -# CONFIG_INET_ESP is not set 9.423 -# CONFIG_INET_IPCOMP is not set 9.424 - 9.425 -# 9.426 -# IP: Virtual Server Configuration 9.427 -# 9.428 -# CONFIG_IP_VS is not set 9.429 -# CONFIG_IPV6 is not set 9.430 -CONFIG_NETFILTER=y 9.431 -# CONFIG_NETFILTER_DEBUG is not set 9.432 -CONFIG_BRIDGE_NETFILTER=y 9.433 - 9.434 -# 9.435 -# IP: Netfilter Configuration 9.436 -# 9.437 -CONFIG_IP_NF_CONNTRACK=m 9.438 -CONFIG_IP_NF_FTP=m 9.439 -# CONFIG_IP_NF_IRC is not set 9.440 -# CONFIG_IP_NF_TFTP is not set 9.441 -# CONFIG_IP_NF_AMANDA is not set 9.442 -# CONFIG_IP_NF_QUEUE is not set 9.443 -CONFIG_IP_NF_IPTABLES=m 9.444 -# CONFIG_IP_NF_MATCH_LIMIT is not set 9.445 -# CONFIG_IP_NF_MATCH_IPRANGE is not set 9.446 -# CONFIG_IP_NF_MATCH_MAC is not set 9.447 -# CONFIG_IP_NF_MATCH_PKTTYPE is not set 9.448 -# CONFIG_IP_NF_MATCH_MARK is not set 9.449 -# CONFIG_IP_NF_MATCH_MULTIPORT is not set 9.450 -# CONFIG_IP_NF_MATCH_TOS is not set 9.451 -# CONFIG_IP_NF_MATCH_RECENT is not set 9.452 -# CONFIG_IP_NF_MATCH_ECN is not set 9.453 -# CONFIG_IP_NF_MATCH_DSCP is not set 9.454 -# CONFIG_IP_NF_MATCH_AH_ESP is not set 9.455 -# CONFIG_IP_NF_MATCH_LENGTH is not set 9.456 -# CONFIG_IP_NF_MATCH_TTL is not set 9.457 -# CONFIG_IP_NF_MATCH_TCPMSS is not set 9.458 -# CONFIG_IP_NF_MATCH_HELPER is not set 9.459 -# CONFIG_IP_NF_MATCH_STATE is not set 9.460 -# CONFIG_IP_NF_MATCH_CONNTRACK is not set 9.461 -# CONFIG_IP_NF_MATCH_OWNER is not set 9.462 -# CONFIG_IP_NF_MATCH_PHYSDEV is not set 9.463 -# CONFIG_IP_NF_FILTER is not set 9.464 -# CONFIG_IP_NF_NAT is not set 9.465 -# CONFIG_IP_NF_MANGLE is not set 9.466 -# CONFIG_IP_NF_TARGET_LOG is not set 9.467 -# CONFIG_IP_NF_TARGET_ULOG is not set 9.468 -# CONFIG_IP_NF_TARGET_TCPMSS is not set 9.469 -# CONFIG_IP_NF_ARPTABLES is not set 9.470 -# CONFIG_IP_NF_COMPAT_IPCHAINS is not set 9.471 -# CONFIG_IP_NF_COMPAT_IPFWADM is not set 9.472 -# CONFIG_IP_NF_RAW is not set 9.473 - 9.474 -# 9.475 -# Bridge: Netfilter Configuration 9.476 -# 9.477 -# CONFIG_BRIDGE_NF_EBTABLES is not set 9.478 - 9.479 -# 9.480 -# SCTP Configuration (EXPERIMENTAL) 9.481 -# 9.482 -# CONFIG_IP_SCTP is not set 9.483 -# CONFIG_ATM is not set 9.484 -CONFIG_BRIDGE=y 9.485 -# CONFIG_VLAN_8021Q is not set 9.486 -# CONFIG_DECNET is not set 9.487 -# CONFIG_LLC2 is not set 9.488 -# CONFIG_IPX is not set 9.489 -# CONFIG_ATALK is not set 9.490 -# CONFIG_X25 is not set 9.491 -# CONFIG_LAPB is not set 9.492 -# CONFIG_NET_DIVERT is not set 9.493 -# CONFIG_ECONET is not set 9.494 -# CONFIG_WAN_ROUTER is not set 9.495 -# CONFIG_NET_FASTROUTE is not set 9.496 -# CONFIG_NET_HW_FLOWCONTROL is not set 9.497 - 9.498 -# 9.499 -# QoS and/or fair queueing 9.500 -# 9.501 -# CONFIG_NET_SCHED is not set 9.502 - 9.503 -# 9.504 -# Network testing 9.505 -# 9.506 -# CONFIG_NET_PKTGEN is not set 9.507 -# CONFIG_NETPOLL is not set 9.508 -# CONFIG_NET_POLL_CONTROLLER is not set 9.509 -# CONFIG_HAMRADIO is not set 9.510 -# CONFIG_IRDA is not set 9.511 -# CONFIG_BT is not set 9.512 -CONFIG_NETDEVICES=y 9.513 -# CONFIG_DUMMY is not set 9.514 -# CONFIG_BONDING is not set 9.515 -# CONFIG_EQUALIZER is not set 9.516 -# CONFIG_TUN is not set 9.517 - 9.518 -# 9.519 -# ARCnet devices 9.520 -# 9.521 -# CONFIG_ARCNET is not set 9.522 - 9.523 -# 9.524 -# Ethernet (10 or 100Mbit) 9.525 -# 9.526 -CONFIG_NET_ETHERNET=y 9.527 -CONFIG_MII=y 9.528 -# CONFIG_HAPPYMEAL is not set 9.529 -# CONFIG_SUNGEM is not set 9.530 -CONFIG_NET_VENDOR_3COM=y 9.531 -# CONFIG_EL1 is not set 9.532 -# CONFIG_EL2 is not set 9.533 -# CONFIG_ELPLUS is not set 9.534 -# CONFIG_EL16 is not set 9.535 -# CONFIG_EL3 is not set 9.536 -# CONFIG_3C515 is not set 9.537 -CONFIG_VORTEX=y 9.538 -# CONFIG_TYPHOON is not set 9.539 -# CONFIG_LANCE is not set 9.540 -# CONFIG_NET_VENDOR_SMC is not set 9.541 -# CONFIG_NET_VENDOR_RACAL is not set 9.542 - 9.543 -# 9.544 -# Tulip family network device support 9.545 -# 9.546 -CONFIG_NET_TULIP=y 9.547 -# CONFIG_DE2104X is not set 9.548 -CONFIG_TULIP=y 9.549 -# CONFIG_TULIP_MWI is not set 9.550 -# CONFIG_TULIP_MMIO is not set 9.551 -# CONFIG_TULIP_NAPI is not set 9.552 -# CONFIG_DE4X5 is not set 9.553 -# CONFIG_WINBOND_840 is not set 9.554 -# CONFIG_DM9102 is not set 9.555 -# CONFIG_PCMCIA_XIRCOM is not set 9.556 -# CONFIG_PCMCIA_XIRTULIP is not set 9.557 -# CONFIG_AT1700 is not set 9.558 -# CONFIG_DEPCA is not set 9.559 -# CONFIG_HP100 is not set 9.560 -# CONFIG_NET_ISA is not set 9.561 -CONFIG_NET_PCI=y 9.562 -CONFIG_PCNET32=y 9.563 -# CONFIG_AMD8111_ETH is not set 9.564 -# CONFIG_ADAPTEC_STARFIRE is not set 9.565 -# CONFIG_AC3200 is not set 9.566 -# CONFIG_APRICOT is not set 9.567 -# CONFIG_B44 is not set 9.568 -# CONFIG_FORCEDETH is not set 9.569 -# CONFIG_CS89x0 is not set 9.570 -# CONFIG_DGRS is not set 9.571 -# CONFIG_EEPRO100 is not set 9.572 -CONFIG_E100=y 9.573 -# CONFIG_E100_NAPI is not set 9.574 -# CONFIG_FEALNX is not set 9.575 -# CONFIG_NATSEMI is not set 9.576 -# CONFIG_NE2K_PCI is not set 9.577 -# CONFIG_8139CP is not set 9.578 -CONFIG_8139TOO=y 9.579 -CONFIG_8139TOO_PIO=y 9.580 -# CONFIG_8139TOO_TUNE_TWISTER is not set 9.581 -# CONFIG_8139TOO_8129 is not set 9.582 -# CONFIG_8139_OLD_RX_RESET is not set 9.583 -# CONFIG_SIS900 is not set 9.584 -# CONFIG_EPIC100 is not set 9.585 -# CONFIG_SUNDANCE is not set 9.586 -# CONFIG_TLAN is not set 9.587 -CONFIG_VIA_RHINE=y 9.588 -# CONFIG_VIA_RHINE_MMIO is not set 9.589 -# CONFIG_NET_POCKET is not set 9.590 - 9.591 -# 9.592 -# Ethernet (1000 Mbit) 9.593 -# 9.594 -CONFIG_ACENIC=y 9.595 -# CONFIG_ACENIC_OMIT_TIGON_I is not set 9.596 -# CONFIG_DL2K is not set 9.597 -CONFIG_E1000=y 9.598 -# CONFIG_E1000_NAPI is not set 9.599 -# CONFIG_NS83820 is not set 9.600 -# CONFIG_HAMACHI is not set 9.601 -# CONFIG_YELLOWFIN is not set 9.602 -# CONFIG_R8169 is not set 9.603 -# CONFIG_SK98LIN is not set 9.604 -CONFIG_TIGON3=y 9.605 - 9.606 -# 9.607 -# Ethernet (10000 Mbit) 9.608 -# 9.609 -# CONFIG_IXGB is not set 9.610 -# CONFIG_S2IO is not set 9.611 - 9.612 -# 9.613 -# Token Ring devices 9.614 -# 9.615 -# CONFIG_TR is not set 9.616 - 9.617 -# 9.618 -# Wireless LAN (non-hamradio) 9.619 -# 9.620 -# CONFIG_NET_RADIO is not set 9.621 - 9.622 -# 9.623 -# PCMCIA network device support 9.624 -# 9.625 -# CONFIG_NET_PCMCIA is not set 9.626 - 9.627 -# 9.628 -# Wan interfaces 9.629 -# 9.630 -# CONFIG_WAN is not set 9.631 -# CONFIG_FDDI is not set 9.632 -# CONFIG_HIPPI is not set 9.633 -# CONFIG_PPP is not set 9.634 -# CONFIG_SLIP is not set 9.635 -# CONFIG_NET_FC is not set 9.636 -# CONFIG_SHAPER is not set 9.637 -# CONFIG_NETCONSOLE is not set 9.638 - 9.639 -# 9.640 -# Input device support 9.641 -# 9.642 -CONFIG_INPUT=y 9.643 - 9.644 -# 9.645 -# Userland interfaces 9.646 -# 9.647 -CONFIG_INPUT_MOUSEDEV=y 9.648 -CONFIG_INPUT_MOUSEDEV_PSAUX=y 9.649 -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 9.650 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 9.651 -# CONFIG_INPUT_JOYDEV is not set 9.652 -# CONFIG_INPUT_TSDEV is not set 9.653 -# CONFIG_INPUT_EVDEV is not set 9.654 -# CONFIG_INPUT_EVBUG is not set 9.655 - 9.656 -# 9.657 -# Input I/O drivers 9.658 -# 9.659 -# CONFIG_GAMEPORT is not set 9.660 -CONFIG_SOUND_GAMEPORT=y 9.661 -CONFIG_SERIO=y 9.662 -CONFIG_SERIO_I8042=y 9.663 -CONFIG_SERIO_SERPORT=y 9.664 -# CONFIG_SERIO_CT82C710 is not set 9.665 -# CONFIG_SERIO_PCIPS2 is not set 9.666 - 9.667 -# 9.668 -# Input Device Drivers 9.669 -# 9.670 -CONFIG_INPUT_KEYBOARD=y 9.671 -CONFIG_KEYBOARD_ATKBD=y 9.672 -# CONFIG_KEYBOARD_SUNKBD is not set 9.673 -# CONFIG_KEYBOARD_LKKBD is not set 9.674 -# CONFIG_KEYBOARD_XTKBD is not set 9.675 -# CONFIG_KEYBOARD_NEWTON is not set 9.676 -CONFIG_INPUT_MOUSE=y 9.677 -CONFIG_MOUSE_PS2=y 9.678 -# CONFIG_MOUSE_SERIAL is not set 9.679 -# CONFIG_MOUSE_INPORT is not set 9.680 -# CONFIG_MOUSE_LOGIBM is not set 9.681 -# CONFIG_MOUSE_PC110PAD is not set 9.682 -# CONFIG_MOUSE_VSXXXAA is not set 9.683 -# CONFIG_INPUT_JOYSTICK is not set 9.684 -# CONFIG_INPUT_TOUCHSCREEN is not set 9.685 -# CONFIG_INPUT_MISC is not set 9.686 - 9.687 -# 9.688 -# Character devices 9.689 -# 9.690 -CONFIG_VT=y 9.691 -CONFIG_VT_CONSOLE=y 9.692 -CONFIG_HW_CONSOLE=y 9.693 -# CONFIG_SERIAL_NONSTANDARD is not set 9.694 - 9.695 -# 9.696 -# Serial drivers 9.697 -# 9.698 -# CONFIG_SERIAL_8250 is not set 9.699 - 9.700 -# 9.701 -# Non-8250 serial port support 9.702 -# 9.703 -CONFIG_UNIX98_PTYS=y 9.704 -CONFIG_LEGACY_PTYS=y 9.705 -CONFIG_LEGACY_PTY_COUNT=256 9.706 -# CONFIG_QIC02_TAPE is not set 9.707 - 9.708 -# 9.709 -# IPMI 9.710 -# 9.711 -# CONFIG_IPMI_HANDLER is not set 9.712 - 9.713 -# 9.714 -# Watchdog Cards 9.715 -# 9.716 -# CONFIG_WATCHDOG is not set 9.717 -# CONFIG_HW_RANDOM is not set 9.718 -# CONFIG_NVRAM is not set 9.719 -# CONFIG_RTC is not set 9.720 -# CONFIG_GEN_RTC is not set 9.721 -# CONFIG_DTLK is not set 9.722 -# CONFIG_R3964 is not set 9.723 -# CONFIG_APPLICOM is not set 9.724 -# CONFIG_SONYPI is not set 9.725 - 9.726 -# 9.727 -# Ftape, the floppy tape device driver 9.728 -# 9.729 -# CONFIG_FTAPE is not set 9.730 -# CONFIG_AGP is not set 9.731 -# CONFIG_DRM is not set 9.732 - 9.733 -# 9.734 -# PCMCIA character devices 9.735 -# 9.736 -# CONFIG_SYNCLINK_CS is not set 9.737 -# CONFIG_MWAVE is not set 9.738 -# CONFIG_RAW_DRIVER is not set 9.739 -# CONFIG_HANGCHECK_TIMER is not set 9.740 - 9.741 -# 9.742 -# I2C support 9.743 -# 9.744 -# CONFIG_I2C is not set 9.745 - 9.746 -# 9.747 -# Graphics support 9.748 -# 9.749 -# CONFIG_FB is not set 9.750 -# CONFIG_VIDEO_SELECT is not set 9.751 - 9.752 -# 9.753 -# Console display driver support 9.754 -# 9.755 -CONFIG_VGA_CONSOLE=y 9.756 -# CONFIG_MDA_CONSOLE is not set 9.757 -CONFIG_DUMMY_CONSOLE=y 9.758 - 9.759 -# 9.760 -# File systems 9.761 -# 9.762 -CONFIG_EXT2_FS=y 9.763 -# CONFIG_EXT2_FS_XATTR is not set 9.764 -CONFIG_EXT3_FS=y 9.765 -CONFIG_EXT3_FS_XATTR=y 9.766 -# CONFIG_EXT3_FS_POSIX_ACL is not set 9.767 -# CONFIG_EXT3_FS_SECURITY is not set 9.768 -CONFIG_JBD=y 9.769 -# CONFIG_JBD_DEBUG is not set 9.770 -CONFIG_FS_MBCACHE=y 9.771 -CONFIG_REISERFS_FS=y 9.772 -# CONFIG_REISERFS_CHECK is not set 9.773 -# CONFIG_REISERFS_PROC_INFO is not set 9.774 -# CONFIG_REISERFS_FS_XATTR is not set 9.775 -# CONFIG_JFS_FS is not set 9.776 -# CONFIG_XFS_FS is not set 9.777 -# CONFIG_MINIX_FS is not set 9.778 -# CONFIG_ROMFS_FS is not set 9.779 -# CONFIG_QUOTA is not set 9.780 -# CONFIG_AUTOFS_FS is not set 9.781 -# CONFIG_AUTOFS4_FS is not set 9.782 - 9.783 -# 9.784 -# CD-ROM/DVD Filesystems 9.785 -# 9.786 -CONFIG_ISO9660_FS=y 9.787 -CONFIG_JOLIET=y 9.788 -CONFIG_ZISOFS=y 9.789 -CONFIG_ZISOFS_FS=y 9.790 -# CONFIG_UDF_FS is not set 9.791 - 9.792 -# 9.793 -# DOS/FAT/NT Filesystems 9.794 -# 9.795 -CONFIG_FAT_FS=m 9.796 -CONFIG_MSDOS_FS=m 9.797 -CONFIG_VFAT_FS=m 9.798 -# CONFIG_NTFS_FS is not set 9.799 - 9.800 -# 9.801 -# Pseudo filesystems 9.802 -# 9.803 -CONFIG_PROC_FS=y 9.804 -CONFIG_PROC_KCORE=y 9.805 -CONFIG_SYSFS=y 9.806 -# CONFIG_DEVFS_FS is not set 9.807 -# CONFIG_DEVPTS_FS_XATTR is not set 9.808 -CONFIG_TMPFS=y 9.809 -# CONFIG_HUGETLBFS is not set 9.810 -# CONFIG_HUGETLB_PAGE is not set 9.811 -CONFIG_RAMFS=y 9.812 - 9.813 -# 9.814 -# Miscellaneous filesystems 9.815 -# 9.816 -# CONFIG_ADFS_FS is not set 9.817 -# CONFIG_AFFS_FS is not set 9.818 -# CONFIG_HFS_FS is not set 9.819 -# CONFIG_HFSPLUS_FS is not set 9.820 -# CONFIG_BEFS_FS is not set 9.821 -# CONFIG_BFS_FS is not set 9.822 -# CONFIG_EFS_FS is not set 9.823 -# CONFIG_CRAMFS is not set 9.824 -# CONFIG_VXFS_FS is not set 9.825 -# CONFIG_HPFS_FS is not set 9.826 -# CONFIG_QNX4FS_FS is not set 9.827 -# CONFIG_SYSV_FS is not set 9.828 -# CONFIG_UFS_FS is not set 9.829 - 9.830 -# 9.831 -# Network File Systems 9.832 -# 9.833 -CONFIG_NFS_FS=y 9.834 -CONFIG_NFS_V3=y 9.835 -# CONFIG_NFS_V4 is not set 9.836 -# CONFIG_NFS_DIRECTIO is not set 9.837 -CONFIG_NFSD=m 9.838 -CONFIG_NFSD_V3=y 9.839 -# CONFIG_NFSD_V4 is not set 9.840 -CONFIG_NFSD_TCP=y 9.841 -CONFIG_ROOT_NFS=y 9.842 -CONFIG_LOCKD=y 9.843 -CONFIG_LOCKD_V4=y 9.844 -CONFIG_EXPORTFS=m 9.845 -CONFIG_SUNRPC=y 9.846 -# CONFIG_RPCSEC_GSS_KRB5 is not set 9.847 -# CONFIG_SMB_FS is not set 9.848 -# CONFIG_CIFS is not set 9.849 -# CONFIG_NCP_FS is not set 9.850 -# CONFIG_CODA_FS is not set 9.851 -# CONFIG_AFS_FS is not set 9.852 - 9.853 -# 9.854 -# Partition Types 9.855 -# 9.856 -# CONFIG_PARTITION_ADVANCED is not set 9.857 -CONFIG_MSDOS_PARTITION=y 9.858 - 9.859 -# 9.860 -# Native Language Support 9.861 -# 9.862 -CONFIG_NLS=y 9.863 -CONFIG_NLS_DEFAULT="iso8859-1" 9.864 -CONFIG_NLS_CODEPAGE_437=y 9.865 -# CONFIG_NLS_CODEPAGE_737 is not set 9.866 -# CONFIG_NLS_CODEPAGE_775 is not set 9.867 -# CONFIG_NLS_CODEPAGE_850 is not set 9.868 -# CONFIG_NLS_CODEPAGE_852 is not set 9.869 -# CONFIG_NLS_CODEPAGE_855 is not set 9.870 -# CONFIG_NLS_CODEPAGE_857 is not set 9.871 -# CONFIG_NLS_CODEPAGE_860 is not set 9.872 -# CONFIG_NLS_CODEPAGE_861 is not set 9.873 -# CONFIG_NLS_CODEPAGE_862 is not set 9.874 -# CONFIG_NLS_CODEPAGE_863 is not set 9.875 -# CONFIG_NLS_CODEPAGE_864 is not set 9.876 -# CONFIG_NLS_CODEPAGE_865 is not set 9.877 -# CONFIG_NLS_CODEPAGE_866 is not set 9.878 -# CONFIG_NLS_CODEPAGE_869 is not set 9.879 -# CONFIG_NLS_CODEPAGE_936 is not set 9.880 -# CONFIG_NLS_CODEPAGE_950 is not set 9.881 -# CONFIG_NLS_CODEPAGE_932 is not set 9.882 -# CONFIG_NLS_CODEPAGE_949 is not set 9.883 -# CONFIG_NLS_CODEPAGE_874 is not set 9.884 -# CONFIG_NLS_ISO8859_8 is not set 9.885 -# CONFIG_NLS_CODEPAGE_1250 is not set 9.886 -# CONFIG_NLS_CODEPAGE_1251 is not set 9.887 -CONFIG_NLS_ISO8859_1=y 9.888 -# CONFIG_NLS_ISO8859_2 is not set 9.889 -# CONFIG_NLS_ISO8859_3 is not set 9.890 -# CONFIG_NLS_ISO8859_4 is not set 9.891 -# CONFIG_NLS_ISO8859_5 is not set 9.892 -# CONFIG_NLS_ISO8859_6 is not set 9.893 -# CONFIG_NLS_ISO8859_7 is not set 9.894 -# CONFIG_NLS_ISO8859_9 is not set 9.895 -# CONFIG_NLS_ISO8859_13 is not set 9.896 -# CONFIG_NLS_ISO8859_14 is not set 9.897 -# CONFIG_NLS_ISO8859_15 is not set 9.898 -# CONFIG_NLS_KOI8_R is not set 9.899 -# CONFIG_NLS_KOI8_U is not set 9.900 -# CONFIG_NLS_UTF8 is not set 9.901 - 9.902 -# 9.903 -# Security options 9.904 -# 9.905 -# CONFIG_SECURITY is not set 9.906 - 9.907 -# 9.908 -# Cryptographic options 9.909 -# 9.910 -CONFIG_CRYPTO=y 9.911 -CONFIG_CRYPTO_HMAC=y 9.912 -# CONFIG_CRYPTO_NULL is not set 9.913 -# CONFIG_CRYPTO_MD4 is not set 9.914 -CONFIG_CRYPTO_MD5=m 9.915 -CONFIG_CRYPTO_SHA1=m 9.916 -# CONFIG_CRYPTO_SHA256 is not set 9.917 -# CONFIG_CRYPTO_SHA512 is not set 9.918 -CONFIG_CRYPTO_DES=m 9.919 -# CONFIG_CRYPTO_BLOWFISH is not set 9.920 -# CONFIG_CRYPTO_TWOFISH is not set 9.921 -# CONFIG_CRYPTO_SERPENT is not set 9.922 -CONFIG_CRYPTO_AES=m 9.923 -# CONFIG_CRYPTO_CAST5 is not set 9.924 -# CONFIG_CRYPTO_CAST6 is not set 9.925 -# CONFIG_CRYPTO_ARC4 is not set 9.926 -# CONFIG_CRYPTO_DEFLATE is not set 9.927 -# CONFIG_CRYPTO_MICHAEL_MIC is not set 9.928 -CONFIG_CRYPTO_CRC32C=m 9.929 -# CONFIG_CRYPTO_TEST is not set 9.930 - 9.931 -# 9.932 -# Library routines 9.933 -# 9.934 -CONFIG_CRC32=y 9.935 -CONFIG_LIBCRC32C=y 9.936 -CONFIG_ZLIB_INFLATE=y
10.1 --- a/linux-2.6.7-xen-sparse/arch/xen/configs/xenU_defconfig Wed Aug 25 16:26:15 2004 +0000 10.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 10.3 @@ -1,462 +0,0 @@ 10.4 -# 10.5 -# Automatically generated make config: don't edit 10.6 -# 10.7 -CONFIG_XEN=y 10.8 -CONFIG_ARCH_XEN=y 10.9 -CONFIG_NO_IDLE_HZ=y 10.10 - 10.11 -# 10.12 -# XEN 10.13 -# 10.14 -# CONFIG_XEN_PRIVILEGED_GUEST is not set 10.15 -# CONFIG_XEN_PHYSDEV_ACCESS is not set 10.16 -# CONFIG_XEN_WRITABLE_PAGETABLES is not set 10.17 -# CONFIG_FOREIGN_PAGES is not set 10.18 -# CONFIG_PAGESIZED_SKBS is not set 10.19 -CONFIG_X86=y 10.20 -# CONFIG_X86_64 is not set 10.21 - 10.22 -# 10.23 -# Code maturity level options 10.24 -# 10.25 -CONFIG_EXPERIMENTAL=y 10.26 -CONFIG_CLEAN_COMPILE=y 10.27 -CONFIG_STANDALONE=y 10.28 -CONFIG_BROKEN_ON_SMP=y 10.29 - 10.30 -# 10.31 -# General setup 10.32 -# 10.33 -CONFIG_SWAP=y 10.34 -CONFIG_SYSVIPC=y 10.35 -# CONFIG_POSIX_MQUEUE is not set 10.36 -# CONFIG_BSD_PROCESS_ACCT is not set 10.37 -CONFIG_SYSCTL=y 10.38 -# CONFIG_AUDIT is not set 10.39 -CONFIG_LOG_BUF_SHIFT=14 10.40 -CONFIG_HOTPLUG=y 10.41 -# CONFIG_IKCONFIG is not set 10.42 -# CONFIG_EMBEDDED is not set 10.43 -CONFIG_KALLSYMS=y 10.44 -CONFIG_FUTEX=y 10.45 -CONFIG_EPOLL=y 10.46 -CONFIG_IOSCHED_NOOP=y 10.47 -CONFIG_IOSCHED_AS=y 10.48 -CONFIG_IOSCHED_DEADLINE=y 10.49 -CONFIG_IOSCHED_CFQ=y 10.50 -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 10.51 - 10.52 -# 10.53 -# Loadable module support 10.54 -# 10.55 -CONFIG_MODULES=y 10.56 -CONFIG_MODULE_UNLOAD=y 10.57 -# CONFIG_MODULE_FORCE_UNLOAD is not set 10.58 -CONFIG_OBSOLETE_MODPARM=y 10.59 -# CONFIG_MODVERSIONS is not set 10.60 -CONFIG_KMOD=y 10.61 - 10.62 -# 10.63 -# X86 Processor Configuration 10.64 -# 10.65 -CONFIG_XENARCH="i386" 10.66 -CONFIG_MMU=y 10.67 -CONFIG_UID16=y 10.68 -CONFIG_GENERIC_ISA_DMA=y 10.69 -# CONFIG_M686 is not set 10.70 -# CONFIG_MPENTIUMII is not set 10.71 -# CONFIG_MPENTIUMIII is not set 10.72 -# CONFIG_MPENTIUMM is not set 10.73 -CONFIG_MPENTIUM4=y 10.74 -# CONFIG_MK6 is not set 10.75 -# CONFIG_MK7 is not set 10.76 -# CONFIG_MK8 is not set 10.77 -# CONFIG_MCRUSOE is not set 10.78 -# CONFIG_MCYRIXIII is not set 10.79 -# CONFIG_MVIAC3_2 is not set 10.80 -# CONFIG_X86_GENERIC is not set 10.81 -CONFIG_X86_CMPXCHG=y 10.82 -CONFIG_X86_XADD=y 10.83 -CONFIG_X86_L1_CACHE_SHIFT=7 10.84 -CONFIG_RWSEM_XCHGADD_ALGORITHM=y 10.85 -CONFIG_X86_WP_WORKS_OK=y 10.86 -CONFIG_X86_INVLPG=y 10.87 -CONFIG_X86_BSWAP=y 10.88 -CONFIG_X86_POPAD_OK=y 10.89 -CONFIG_X86_GOOD_APIC=y 10.90 -CONFIG_X86_INTEL_USERCOPY=y 10.91 -CONFIG_X86_USE_PPRO_CHECKSUM=y 10.92 -# CONFIG_HPET_TIMER is not set 10.93 -# CONFIG_HPET_EMULATE_RTC is not set 10.94 -# CONFIG_SMP is not set 10.95 -CONFIG_PREEMPT=y 10.96 -CONFIG_X86_CPUID=y 10.97 - 10.98 -# 10.99 -# Firmware Drivers 10.100 -# 10.101 -# CONFIG_EDD is not set 10.102 -CONFIG_NOHIGHMEM=y 10.103 -# CONFIG_HIGHMEM4G is not set 10.104 -CONFIG_HAVE_DEC_LOCK=y 10.105 -# CONFIG_REGPARM is not set 10.106 - 10.107 -# 10.108 -# Kernel hacking 10.109 -# 10.110 -# CONFIG_DEBUG_KERNEL is not set 10.111 -CONFIG_EARLY_PRINTK=y 10.112 -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 10.113 -# CONFIG_FRAME_POINTER is not set 10.114 -# CONFIG_4KSTACKS is not set 10.115 -CONFIG_X86_BIOS_REBOOT=y 10.116 -CONFIG_X86_STD_RESOURCES=y 10.117 -CONFIG_PC=y 10.118 - 10.119 -# 10.120 -# Executable file formats 10.121 -# 10.122 -CONFIG_BINFMT_ELF=y 10.123 -# CONFIG_BINFMT_AOUT is not set 10.124 -# CONFIG_BINFMT_MISC is not set 10.125 - 10.126 -# 10.127 -# Device Drivers 10.128 -# 10.129 - 10.130 -# 10.131 -# Generic Driver Options 10.132 -# 10.133 -# CONFIG_FW_LOADER is not set 10.134 - 10.135 -# 10.136 -# SCSI device support 10.137 -# 10.138 -CONFIG_SCSI=m 10.139 -CONFIG_SCSI_PROC_FS=y 10.140 - 10.141 -# 10.142 -# SCSI support type (disk, tape, CD-ROM) 10.143 -# 10.144 -CONFIG_BLK_DEV_SD=m 10.145 -# CONFIG_CHR_DEV_ST is not set 10.146 -# CONFIG_CHR_DEV_OSST is not set 10.147 -# CONFIG_BLK_DEV_SR is not set 10.148 -# CONFIG_CHR_DEV_SG is not set 10.149 - 10.150 -# 10.151 -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs 10.152 -# 10.153 -# CONFIG_SCSI_MULTI_LUN is not set 10.154 -# CONFIG_SCSI_CONSTANTS is not set 10.155 -# CONFIG_SCSI_LOGGING is not set 10.156 - 10.157 -# 10.158 -# SCSI Transport Attributes 10.159 -# 10.160 -# CONFIG_SCSI_SPI_ATTRS is not set 10.161 -# CONFIG_SCSI_FC_ATTRS is not set 10.162 - 10.163 -# 10.164 -# SCSI low-level drivers 10.165 -# 10.166 -# CONFIG_SCSI_AIC7XXX_OLD is not set 10.167 -# CONFIG_SCSI_SATA is not set 10.168 -# CONFIG_SCSI_EATA_PIO is not set 10.169 -# CONFIG_SCSI_DEBUG is not set 10.170 - 10.171 -# 10.172 -# Block devices 10.173 -# 10.174 -# CONFIG_BLK_DEV_FD is not set 10.175 -CONFIG_BLK_DEV_LOOP=m 10.176 -# CONFIG_BLK_DEV_CRYPTOLOOP is not set 10.177 -CONFIG_BLK_DEV_NBD=m 10.178 -CONFIG_BLK_DEV_RAM=y 10.179 -CONFIG_BLK_DEV_RAM_SIZE=4096 10.180 -CONFIG_BLK_DEV_INITRD=y 10.181 -# CONFIG_LBD is not set 10.182 - 10.183 -# 10.184 -# Multi-device support (RAID and LVM) 10.185 -# 10.186 -# CONFIG_MD is not set 10.187 - 10.188 -# 10.189 -# Networking support 10.190 -# 10.191 -CONFIG_NET=y 10.192 - 10.193 -# 10.194 -# Networking options 10.195 -# 10.196 -CONFIG_PACKET=y 10.197 -# CONFIG_PACKET_MMAP is not set 10.198 -# CONFIG_NETLINK_DEV is not set 10.199 -CONFIG_UNIX=y 10.200 -# CONFIG_NET_KEY is not set 10.201 -CONFIG_INET=y 10.202 -# CONFIG_IP_MULTICAST is not set 10.203 -# CONFIG_IP_ADVANCED_ROUTER is not set 10.204 -CONFIG_IP_PNP=y 10.205 -# CONFIG_IP_PNP_DHCP is not set 10.206 -# CONFIG_IP_PNP_BOOTP is not set 10.207 -# CONFIG_IP_PNP_RARP is not set 10.208 -# CONFIG_NET_IPIP is not set 10.209 -# CONFIG_NET_IPGRE is not set 10.210 -# CONFIG_ARPD is not set 10.211 -# CONFIG_SYN_COOKIES is not set 10.212 -# CONFIG_INET_AH is not set 10.213 -# CONFIG_INET_ESP is not set 10.214 -# CONFIG_INET_IPCOMP is not set 10.215 -# CONFIG_IPV6 is not set 10.216 -# CONFIG_NETFILTER is not set 10.217 - 10.218 -# 10.219 -# SCTP Configuration (EXPERIMENTAL) 10.220 -# 10.221 -# CONFIG_IP_SCTP is not set 10.222 -# CONFIG_ATM is not set 10.223 -# CONFIG_BRIDGE is not set 10.224 -# CONFIG_VLAN_8021Q is not set 10.225 -# CONFIG_DECNET is not set 10.226 -# CONFIG_LLC2 is not set 10.227 -# CONFIG_IPX is not set 10.228 -# CONFIG_ATALK is not set 10.229 -# CONFIG_X25 is not set 10.230 -# CONFIG_LAPB is not set 10.231 -# CONFIG_NET_DIVERT is not set 10.232 -# CONFIG_ECONET is not set 10.233 -# CONFIG_WAN_ROUTER is not set 10.234 -# CONFIG_NET_FASTROUTE is not set 10.235 -# CONFIG_NET_HW_FLOWCONTROL is not set 10.236 - 10.237 -# 10.238 -# QoS and/or fair queueing 10.239 -# 10.240 -# CONFIG_NET_SCHED is not set 10.241 - 10.242 -# 10.243 -# Network testing 10.244 -# 10.245 -# CONFIG_NET_PKTGEN is not set 10.246 -# CONFIG_NETPOLL is not set 10.247 -# CONFIG_NET_POLL_CONTROLLER is not set 10.248 -# CONFIG_HAMRADIO is not set 10.249 -# CONFIG_IRDA is not set 10.250 -# CONFIG_BT is not set 10.251 -CONFIG_NETDEVICES=y 10.252 -# CONFIG_DUMMY is not set 10.253 -# CONFIG_BONDING is not set 10.254 -# CONFIG_EQUALIZER is not set 10.255 -# CONFIG_TUN is not set 10.256 - 10.257 -# 10.258 -# Ethernet (10 or 100Mbit) 10.259 -# 10.260 -# CONFIG_NET_ETHERNET is not set 10.261 - 10.262 -# 10.263 -# Ethernet (1000 Mbit) 10.264 -# 10.265 - 10.266 -# 10.267 -# Ethernet (10000 Mbit) 10.268 -# 10.269 - 10.270 -# 10.271 -# Token Ring devices 10.272 -# 10.273 - 10.274 -# 10.275 -# Wireless LAN (non-hamradio) 10.276 -# 10.277 -# CONFIG_NET_RADIO is not set 10.278 - 10.279 -# 10.280 -# Wan interfaces 10.281 -# 10.282 -# CONFIG_WAN is not set 10.283 -# CONFIG_PPP is not set 10.284 -# CONFIG_SLIP is not set 10.285 -# CONFIG_SHAPER is not set 10.286 -# CONFIG_NETCONSOLE is not set 10.287 -CONFIG_INPUT=y 10.288 -CONFIG_UNIX98_PTYS=y 10.289 - 10.290 -# 10.291 -# File systems 10.292 -# 10.293 -CONFIG_EXT2_FS=y 10.294 -# CONFIG_EXT2_FS_XATTR is not set 10.295 -CONFIG_EXT3_FS=y 10.296 -CONFIG_EXT3_FS_XATTR=y 10.297 -# CONFIG_EXT3_FS_POSIX_ACL is not set 10.298 -# CONFIG_EXT3_FS_SECURITY is not set 10.299 -CONFIG_JBD=y 10.300 -# CONFIG_JBD_DEBUG is not set 10.301 -CONFIG_FS_MBCACHE=y 10.302 -CONFIG_REISERFS_FS=y 10.303 -# CONFIG_REISERFS_CHECK is not set 10.304 -# CONFIG_REISERFS_PROC_INFO is not set 10.305 -# CONFIG_REISERFS_FS_XATTR is not set 10.306 -# CONFIG_JFS_FS is not set 10.307 -# CONFIG_XFS_FS is not set 10.308 -# CONFIG_MINIX_FS is not set 10.309 -# CONFIG_ROMFS_FS is not set 10.310 -# CONFIG_QUOTA is not set 10.311 -CONFIG_AUTOFS_FS=y 10.312 -CONFIG_AUTOFS4_FS=y 10.313 - 10.314 -# 10.315 -# CD-ROM/DVD Filesystems 10.316 -# 10.317 -CONFIG_ISO9660_FS=y 10.318 -CONFIG_JOLIET=y 10.319 -CONFIG_ZISOFS=y 10.320 -CONFIG_ZISOFS_FS=y 10.321 -# CONFIG_UDF_FS is not set 10.322 - 10.323 -# 10.324 -# DOS/FAT/NT Filesystems 10.325 -# 10.326 -CONFIG_FAT_FS=m 10.327 -CONFIG_MSDOS_FS=m 10.328 -CONFIG_VFAT_FS=m 10.329 -# CONFIG_NTFS_FS is not set 10.330 - 10.331 -# 10.332 -# Pseudo filesystems 10.333 -# 10.334 -CONFIG_PROC_FS=y 10.335 -CONFIG_PROC_KCORE=y 10.336 -CONFIG_SYSFS=y 10.337 -# CONFIG_DEVFS_FS is not set 10.338 -CONFIG_DEVPTS_FS_XATTR=y 10.339 -# CONFIG_DEVPTS_FS_SECURITY is not set 10.340 -CONFIG_TMPFS=y 10.341 -# CONFIG_HUGETLBFS is not set 10.342 -# CONFIG_HUGETLB_PAGE is not set 10.343 -CONFIG_RAMFS=y 10.344 - 10.345 -# 10.346 -# Miscellaneous filesystems 10.347 -# 10.348 -# CONFIG_ADFS_FS is not set 10.349 -# CONFIG_AFFS_FS is not set 10.350 -# CONFIG_HFS_FS is not set 10.351 -# CONFIG_HFSPLUS_FS is not set 10.352 -# CONFIG_BEFS_FS is not set 10.353 -# CONFIG_BFS_FS is not set 10.354 -# CONFIG_EFS_FS is not set 10.355 -# CONFIG_CRAMFS is not set 10.356 -# CONFIG_VXFS_FS is not set 10.357 -# CONFIG_HPFS_FS is not set 10.358 -# CONFIG_QNX4FS_FS is not set 10.359 -# CONFIG_SYSV_FS is not set 10.360 -# CONFIG_UFS_FS is not set 10.361 - 10.362 -# 10.363 -# Network File Systems 10.364 -# 10.365 -CONFIG_NFS_FS=y 10.366 -CONFIG_NFS_V3=y 10.367 -# CONFIG_NFS_V4 is not set 10.368 -# CONFIG_NFS_DIRECTIO is not set 10.369 -# CONFIG_NFSD is not set 10.370 -CONFIG_ROOT_NFS=y 10.371 -CONFIG_LOCKD=y 10.372 -CONFIG_LOCKD_V4=y 10.373 -# CONFIG_EXPORTFS is not set 10.374 -CONFIG_SUNRPC=y 10.375 -# CONFIG_RPCSEC_GSS_KRB5 is not set 10.376 -# CONFIG_SMB_FS is not set 10.377 -# CONFIG_CIFS is not set 10.378 -# CONFIG_NCP_FS is not set 10.379 -# CONFIG_CODA_FS is not set 10.380 -# CONFIG_AFS_FS is not set 10.381 - 10.382 -# 10.383 -# Partition Types 10.384 -# 10.385 -# CONFIG_PARTITION_ADVANCED is not set 10.386 -CONFIG_MSDOS_PARTITION=y 10.387 - 10.388 -# 10.389 -# Native Language Support 10.390 -# 10.391 -CONFIG_NLS=y 10.392 -CONFIG_NLS_DEFAULT="iso8859-1" 10.393 -CONFIG_NLS_CODEPAGE_437=y 10.394 -# CONFIG_NLS_CODEPAGE_737 is not set 10.395 -# CONFIG_NLS_CODEPAGE_775 is not set 10.396 -# CONFIG_NLS_CODEPAGE_850 is not set 10.397 -# CONFIG_NLS_CODEPAGE_852 is not set 10.398 -# CONFIG_NLS_CODEPAGE_855 is not set 10.399 -# CONFIG_NLS_CODEPAGE_857 is not set 10.400 -# CONFIG_NLS_CODEPAGE_860 is not set 10.401 -# CONFIG_NLS_CODEPAGE_861 is not set 10.402 -# CONFIG_NLS_CODEPAGE_862 is not set 10.403 -# CONFIG_NLS_CODEPAGE_863 is not set 10.404 -# CONFIG_NLS_CODEPAGE_864 is not set 10.405 -# CONFIG_NLS_CODEPAGE_865 is not set 10.406 -# CONFIG_NLS_CODEPAGE_866 is not set 10.407 -# CONFIG_NLS_CODEPAGE_869 is not set 10.408 -# CONFIG_NLS_CODEPAGE_936 is not set 10.409 -# CONFIG_NLS_CODEPAGE_950 is not set 10.410 -# CONFIG_NLS_CODEPAGE_932 is not set 10.411 -# CONFIG_NLS_CODEPAGE_949 is not set 10.412 -# CONFIG_NLS_CODEPAGE_874 is not set 10.413 -# CONFIG_NLS_ISO8859_8 is not set 10.414 -# CONFIG_NLS_CODEPAGE_1250 is not set 10.415 -# CONFIG_NLS_CODEPAGE_1251 is not set 10.416 -CONFIG_NLS_ISO8859_1=y 10.417 -# CONFIG_NLS_ISO8859_2 is not set 10.418 -# CONFIG_NLS_ISO8859_3 is not set 10.419 -# CONFIG_NLS_ISO8859_4 is not set 10.420 -# CONFIG_NLS_ISO8859_5 is not set 10.421 -# CONFIG_NLS_ISO8859_6 is not set 10.422 -# CONFIG_NLS_ISO8859_7 is not set 10.423 -# CONFIG_NLS_ISO8859_9 is not set 10.424 -# CONFIG_NLS_ISO8859_13 is not set 10.425 -# CONFIG_NLS_ISO8859_14 is not set 10.426 -# CONFIG_NLS_ISO8859_15 is not set 10.427 -# CONFIG_NLS_KOI8_R is not set 10.428 -# CONFIG_NLS_KOI8_U is not set 10.429 -# CONFIG_NLS_UTF8 is not set 10.430 - 10.431 -# 10.432 -# Security options 10.433 -# 10.434 -# CONFIG_SECURITY is not set 10.435 - 10.436 -# 10.437 -# Cryptographic options 10.438 -# 10.439 -CONFIG_CRYPTO=y 10.440 -# CONFIG_CRYPTO_HMAC is not set 10.441 -# CONFIG_CRYPTO_NULL is not set 10.442 -# CONFIG_CRYPTO_MD4 is not set 10.443 -CONFIG_CRYPTO_MD5=m 10.444 -# CONFIG_CRYPTO_SHA1 is not set 10.445 -# CONFIG_CRYPTO_SHA256 is not set 10.446 -# CONFIG_CRYPTO_SHA512 is not set 10.447 -# CONFIG_CRYPTO_DES is not set 10.448 -# CONFIG_CRYPTO_BLOWFISH is not set 10.449 -# CONFIG_CRYPTO_TWOFISH is not set 10.450 -# CONFIG_CRYPTO_SERPENT is not set 10.451 -# CONFIG_CRYPTO_AES is not set 10.452 -# CONFIG_CRYPTO_CAST5 is not set 10.453 -# CONFIG_CRYPTO_CAST6 is not set 10.454 -# CONFIG_CRYPTO_ARC4 is not set 10.455 -# CONFIG_CRYPTO_DEFLATE is not set 10.456 -# CONFIG_CRYPTO_MICHAEL_MIC is not set 10.457 -CONFIG_CRYPTO_CRC32C=m 10.458 -# CONFIG_CRYPTO_TEST is not set 10.459 - 10.460 -# 10.461 -# Library routines 10.462 -# 10.463 -# CONFIG_CRC32 is not set 10.464 -CONFIG_LIBCRC32C=m 10.465 -CONFIG_ZLIB_INFLATE=y
11.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/Kconfig Wed Aug 25 16:26:15 2004 +0000 11.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 11.3 @@ -1,932 +0,0 @@ 11.4 -# 11.5 -# For a description of the syntax of this configuration file, 11.6 -# see Documentation/kbuild/kconfig-language.txt. 11.7 -# 11.8 - 11.9 -menu "X86 Processor Configuration" 11.10 - 11.11 -config XENARCH 11.12 - string 11.13 - default i386 11.14 - 11.15 -config MMU 11.16 - bool 11.17 - default y 11.18 - 11.19 -config SBUS 11.20 - bool 11.21 - 11.22 -config UID16 11.23 - bool 11.24 - default y 11.25 - 11.26 -config GENERIC_ISA_DMA 11.27 - bool 11.28 - default y 11.29 - 11.30 - 11.31 -choice 11.32 - prompt "Processor family" 11.33 - default M686 11.34 - 11.35 -#config M386 11.36 -# bool "386" 11.37 -# ---help--- 11.38 -# This is the processor type of your CPU. This information is used for 11.39 -# optimizing purposes. In order to compile a kernel that can run on 11.40 -# all x86 CPU types (albeit not optimally fast), you can specify 11.41 -# "386" here. 11.42 -# 11.43 -# The kernel will not necessarily run on earlier architectures than 11.44 -# the one you have chosen, e.g. a Pentium optimized kernel will run on 11.45 -# a PPro, but not necessarily on a i486. 11.46 -# 11.47 -# Here are the settings recommended for greatest speed: 11.48 -# - "386" for the AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix/TI 11.49 -# 486DLC/DLC2, UMC 486SX-S and NexGen Nx586. Only "386" kernels 11.50 -# will run on a 386 class machine. 11.51 -# - "486" for the AMD/Cyrix/IBM/Intel 486DX/DX2/DX4 or 11.52 -# SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S. 11.53 -# - "586" for generic Pentium CPUs lacking the TSC 11.54 -# (time stamp counter) register. 11.55 -# - "Pentium-Classic" for the Intel Pentium. 11.56 -# - "Pentium-MMX" for the Intel Pentium MMX. 11.57 -# - "Pentium-Pro" for the Intel Pentium Pro. 11.58 -# - "Pentium-II" for the Intel Pentium II or pre-Coppermine Celeron. 11.59 -# - "Pentium-III" for the Intel Pentium III or Coppermine Celeron. 11.60 -# - "Pentium-4" for the Intel Pentium 4 or P4-based Celeron. 11.61 -# - "K6" for the AMD K6, K6-II and K6-III (aka K6-3D). 11.62 -# - "Athlon" for the AMD K7 family (Athlon/Duron/Thunderbird). 11.63 -# - "Crusoe" for the Transmeta Crusoe series. 11.64 -# - "Winchip-C6" for original IDT Winchip. 11.65 -# - "Winchip-2" for IDT Winchip 2. 11.66 -# - "Winchip-2A" for IDT Winchips with 3dNow! capabilities. 11.67 -# - "CyrixIII/VIA C3" for VIA Cyrix III or VIA C3. 11.68 -# - "VIA C3-2 for VIA C3-2 "Nehemiah" (model 9 and above). 11.69 -# 11.70 -# If you don't know what to do, choose "386". 11.71 - 11.72 -#config M486 11.73 -# bool "486" 11.74 -# help 11.75 -# Select this for a 486 series processor, either Intel or one of the 11.76 -# compatible processors from AMD, Cyrix, IBM, or Intel. Includes DX, 11.77 -# DX2, and DX4 variants; also SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or 11.78 -# U5S. 11.79 - 11.80 -#config M586 11.81 -# bool "586/K5/5x86/6x86/6x86MX" 11.82 -# help 11.83 -# Select this for an 586 or 686 series processor such as the AMD K5, 11.84 -# the Intel 5x86 or 6x86, or the Intel 6x86MX. This choice does not 11.85 -# assume the RDTSC (Read Time Stamp Counter) instruction. 11.86 - 11.87 -#config M586TSC 11.88 -# bool "Pentium-Classic" 11.89 -# help 11.90 -# Select this for a Pentium Classic processor with the RDTSC (Read 11.91 -# Time Stamp Counter) instruction for benchmarking. 11.92 - 11.93 -#config M586MMX 11.94 -# bool "Pentium-MMX" 11.95 -# help 11.96 -# Select this for a Pentium with the MMX graphics/multimedia 11.97 -# extended instructions. 11.98 - 11.99 -config M686 11.100 - bool "Pentium-Pro" 11.101 - help 11.102 - Select this for Intel Pentium Pro chips. This enables the use of 11.103 - Pentium Pro extended instructions, and disables the init-time guard 11.104 - against the f00f bug found in earlier Pentiums. 11.105 - 11.106 -config MPENTIUMII 11.107 - bool "Pentium-II/Celeron(pre-Coppermine)" 11.108 - help 11.109 - Select this for Intel chips based on the Pentium-II and 11.110 - pre-Coppermine Celeron core. This option enables an unaligned 11.111 - copy optimization, compiles the kernel with optimization flags 11.112 - tailored for the chip, and applies any applicable Pentium Pro 11.113 - optimizations. 11.114 - 11.115 -config MPENTIUMIII 11.116 - bool "Pentium-III/Celeron(Coppermine)/Pentium-III Xeon" 11.117 - help 11.118 - Select this for Intel chips based on the Pentium-III and 11.119 - Celeron-Coppermine core. This option enables use of some 11.120 - extended prefetch instructions in addition to the Pentium II 11.121 - extensions. 11.122 - 11.123 -config MPENTIUMM 11.124 - bool "Pentium M" 11.125 - help 11.126 - Select this for Intel Pentium M (not Pentium-4 M) 11.127 - notebook chips. 11.128 - 11.129 -config MPENTIUM4 11.130 - bool "Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon" 11.131 - help 11.132 - Select this for Intel Pentium 4 chips. This includes the 11.133 - Pentium 4, P4-based Celeron and Xeon, and Pentium-4 M 11.134 - (not Pentium M) chips. This option enables compile flags 11.135 - optimized for the chip, uses the correct cache shift, and 11.136 - applies any applicable Pentium III optimizations. 11.137 - 11.138 -config MK6 11.139 - bool "K6/K6-II/K6-III" 11.140 - help 11.141 - Select this for an AMD K6-family processor. Enables use of 11.142 - some extended instructions, and passes appropriate optimization 11.143 - flags to GCC. 11.144 - 11.145 -config MK7 11.146 - bool "Athlon/Duron/K7" 11.147 - help 11.148 - Select this for an AMD Athlon K7-family processor. Enables use of 11.149 - some extended instructions, and passes appropriate optimization 11.150 - flags to GCC. 11.151 - 11.152 -config MK8 11.153 - bool "Opteron/Athlon64/Hammer/K8" 11.154 - help 11.155 - Select this for an AMD Opteron or Athlon64 Hammer-family processor. Enables 11.156 - use of some extended instructions, and passes appropriate optimization 11.157 - flags to GCC. 11.158 - 11.159 -config MCRUSOE 11.160 - bool "Crusoe" 11.161 - help 11.162 - Select this for a Transmeta Crusoe processor. Treats the processor 11.163 - like a 586 with TSC, and sets some GCC optimization flags (like a 11.164 - Pentium Pro with no alignment requirements). 11.165 - 11.166 -#config MWINCHIPC6 11.167 -# bool "Winchip-C6" 11.168 -# help 11.169 -# Select this for an IDT Winchip C6 chip. Linux and GCC 11.170 -# treat this chip as a 586TSC with some extended instructions 11.171 -# and alignment requirements. 11.172 - 11.173 -#config MWINCHIP2 11.174 -# bool "Winchip-2" 11.175 -# help 11.176 -# Select this for an IDT Winchip-2. Linux and GCC 11.177 -# treat this chip as a 586TSC with some extended instructions 11.178 -# and alignment requirements. 11.179 - 11.180 -#config MWINCHIP3D 11.181 -# bool "Winchip-2A/Winchip-3" 11.182 -# help 11.183 -# Select this for an IDT Winchip-2A or 3. Linux and GCC 11.184 -# treat this chip as a 586TSC with some extended instructions 11.185 -# and alignment reqirements. Also enable out of order memory 11.186 -# stores for this CPU, which can increase performance of some 11.187 -# operations. 11.188 - 11.189 -config MCYRIXIII 11.190 - bool "CyrixIII/VIA-C3" 11.191 - help 11.192 - Select this for a Cyrix III or C3 chip. Presently Linux and GCC 11.193 - treat this chip as a generic 586. Whilst the CPU is 686 class, 11.194 - it lacks the cmov extension which gcc assumes is present when 11.195 - generating 686 code. 11.196 - Note that Nehemiah (Model 9) and above will not boot with this 11.197 - kernel due to them lacking the 3DNow! instructions used in earlier 11.198 - incarnations of the CPU. 11.199 - 11.200 -config MVIAC3_2 11.201 - bool "VIA C3-2 (Nehemiah)" 11.202 - help 11.203 - Select this for a VIA C3 "Nehemiah". Selecting this enables usage 11.204 - of SSE and tells gcc to treat the CPU as a 686. 11.205 - Note, this kernel will not boot on older (pre model 9) C3s. 11.206 - 11.207 -endchoice 11.208 - 11.209 -config X86_GENERIC 11.210 - bool "Generic x86 support" 11.211 - help 11.212 - Instead of just including optimizations for the selected 11.213 - x86 variant (e.g. PII, Crusoe or Athlon), include some more 11.214 - generic optimizations as well. This will make the kernel 11.215 - perform better on x86 CPUs other than that selected. 11.216 - 11.217 - This is really intended for distributors who need more 11.218 - generic optimizations. 11.219 - 11.220 -# 11.221 -# Define implied options from the CPU selection here 11.222 -# 11.223 -config X86_CMPXCHG 11.224 - bool 11.225 - depends on !M386 11.226 - default y 11.227 - 11.228 -config X86_XADD 11.229 - bool 11.230 - depends on !M386 11.231 - default y 11.232 - 11.233 -config X86_L1_CACHE_SHIFT 11.234 - int 11.235 - default "7" if MPENTIUM4 || X86_GENERIC 11.236 - default "4" if X86_ELAN || M486 || M386 11.237 - default "5" if MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCRUSOE || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 11.238 - default "6" if MK7 || MK8 || MPENTIUMM 11.239 - 11.240 -config RWSEM_GENERIC_SPINLOCK 11.241 - bool 11.242 - depends on M386 11.243 - default y 11.244 - 11.245 -config RWSEM_XCHGADD_ALGORITHM 11.246 - bool 11.247 - depends on !M386 11.248 - default y 11.249 - 11.250 -config X86_PPRO_FENCE 11.251 - bool 11.252 - depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 11.253 - default y 11.254 - 11.255 -config X86_F00F_BUG 11.256 - bool 11.257 - depends on M586MMX || M586TSC || M586 || M486 || M386 11.258 - default y 11.259 - 11.260 -config X86_WP_WORKS_OK 11.261 - bool 11.262 - depends on !M386 11.263 - default y 11.264 - 11.265 -config X86_INVLPG 11.266 - bool 11.267 - depends on !M386 11.268 - default y 11.269 - 11.270 -config X86_BSWAP 11.271 - bool 11.272 - depends on !M386 11.273 - default y 11.274 - 11.275 -config X86_POPAD_OK 11.276 - bool 11.277 - depends on !M386 11.278 - default y 11.279 - 11.280 -config X86_ALIGNMENT_16 11.281 - bool 11.282 - depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || X86_ELAN || MK6 || M586MMX || M586TSC || M586 || M486 || MVIAC3_2 11.283 - default y 11.284 - 11.285 -config X86_GOOD_APIC 11.286 - bool 11.287 - depends on MK7 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || MK8 11.288 - default y 11.289 - 11.290 -config X86_INTEL_USERCOPY 11.291 - bool 11.292 - depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7 11.293 - default y 11.294 - 11.295 -config X86_USE_PPRO_CHECKSUM 11.296 - bool 11.297 - depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 11.298 - default y 11.299 - 11.300 -config X86_USE_3DNOW 11.301 - bool 11.302 - depends on MCYRIXIII || MK7 11.303 - default y 11.304 - 11.305 -config X86_OOSTORE 11.306 - bool 11.307 - depends on (MWINCHIP3D || MWINCHIP2 || MWINCHIPC6) && MTRR 11.308 - default y 11.309 - 11.310 -config HPET_TIMER 11.311 - bool 11.312 - default n 11.313 -#config HPET_TIMER 11.314 -# bool "HPET Timer Support" 11.315 -# help 11.316 -# This enables the use of the HPET for the kernel's internal timer. 11.317 -# HPET is the next generation timer replacing legacy 8254s. 11.318 -# You can safely choose Y here. However, HPET will only be 11.319 -# activated if the platform and the BIOS support this feature. 11.320 -# Otherwise the 8254 will be used for timing services. 11.321 -# 11.322 -# Choose N to continue using the legacy 8254 timer. 11.323 - 11.324 -config HPET_EMULATE_RTC 11.325 - def_bool HPET_TIMER && RTC=y 11.326 - 11.327 -config SMP 11.328 - bool 11.329 - default n 11.330 -#config SMP 11.331 -# bool "Symmetric multi-processing support" 11.332 -# ---help--- 11.333 -# This enables support for systems with more than one CPU. If you have 11.334 -# a system with only one CPU, like most personal computers, say N. If 11.335 -# you have a system with more than one CPU, say Y. 11.336 -# 11.337 -# If you say N here, the kernel will run on single and multiprocessor 11.338 -# machines, but will use only one CPU of a multiprocessor machine. If 11.339 -# you say Y here, the kernel will run on many, but not all, 11.340 -# singleprocessor machines. On a singleprocessor machine, the kernel 11.341 -# will run faster if you say N here. 11.342 -# 11.343 -# Note that if you say Y here and choose architecture "586" or 11.344 -# "Pentium" under "Processor family", the kernel will not work on 486 11.345 -# architectures. Similarly, multiprocessor kernels for the "PPro" 11.346 -# architecture may not work on all Pentium based boards. 11.347 -# 11.348 -# People using multiprocessor machines who say Y here should also say 11.349 -# Y to "Enhanced Real Time Clock Support", below. The "Advanced Power 11.350 -# Management" code will be disabled if you say Y here. 11.351 -# 11.352 -# See also the <file:Documentation/smp.txt>, 11.353 -# <file:Documentation/i386/IO-APIC.txt>, 11.354 -# <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at 11.355 -# <http://www.tldp.org/docs.html#howto>. 11.356 -# 11.357 -# If you don't know what to do here, say N. 11.358 - 11.359 -config NR_CPUS 11.360 - int "Maximum number of CPUs (2-255)" 11.361 - range 2 255 11.362 - depends on SMP 11.363 - default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 11.364 - default "8" 11.365 - help 11.366 - This allows you to specify the maximum number of CPUs which this 11.367 - kernel will support. The maximum supported value is 255 and the 11.368 - minimum value which makes sense is 2. 11.369 - 11.370 - This is purely to save memory - each supported CPU adds 11.371 - approximately eight kilobytes to the kernel image. 11.372 - 11.373 -config SCHED_SMT 11.374 - bool "SMT (Hyperthreading) scheduler support" 11.375 - depends on SMP 11.376 - default off 11.377 - help 11.378 - SMT scheduler support improves the CPU scheduler's decision making 11.379 - when dealing with Intel Pentium 4 chips with HyperThreading at a 11.380 - cost of slightly increased overhead in some places. If unsure say 11.381 - N here. 11.382 - 11.383 -config PREEMPT 11.384 - bool "Preemptible Kernel" 11.385 - help 11.386 - This option reduces the latency of the kernel when reacting to 11.387 - real-time or interactive events by allowing a low priority process to 11.388 - be preempted even if it is in kernel mode executing a system call. 11.389 - This allows applications to run more reliably even when the system is 11.390 - under load. 11.391 - 11.392 - Say Y here if you are building a kernel for a desktop, embedded 11.393 - or real-time system. Say N if you are unsure. 11.394 - 11.395 -#config X86_TSC 11.396 -# bool 11.397 -# depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2) && !X86_NUMAQ 11.398 -# default y 11.399 - 11.400 -#config X86_MCE 11.401 -# bool "Machine Check Exception" 11.402 -# depends on !X86_VOYAGER 11.403 -# ---help--- 11.404 -# Machine Check Exception support allows the processor to notify the 11.405 -# kernel if it detects a problem (e.g. overheating, component failure). 11.406 -# The action the kernel takes depends on the severity of the problem, 11.407 -# ranging from a warning message on the console, to halting the machine. 11.408 -# Your processor must be a Pentium or newer to support this - check the 11.409 -# flags in /proc/cpuinfo for mce. Note that some older Pentium systems 11.410 -# have a design flaw which leads to false MCE events - hence MCE is 11.411 -# disabled on all P5 processors, unless explicitly enabled with "mce" 11.412 -# as a boot argument. Similarly, if MCE is built in and creates a 11.413 -# problem on some new non-standard machine, you can boot with "nomce" 11.414 -# to disable it. MCE support simply ignores non-MCE processors like 11.415 -# the 386 and 486, so nearly everyone can say Y here. 11.416 - 11.417 -#config X86_MCE_NONFATAL 11.418 -# tristate "Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4" 11.419 -# depends on X86_MCE 11.420 -# help 11.421 -# Enabling this feature starts a timer that triggers every 5 seconds which 11.422 -# will look at the machine check registers to see if anything happened. 11.423 -# Non-fatal problems automatically get corrected (but still logged). 11.424 -# Disable this if you don't want to see these messages. 11.425 -# Seeing the messages this option prints out may be indicative of dying hardware, 11.426 -# or out-of-spec (ie, overclocked) hardware. 11.427 -# This option only does something on certain CPUs. 11.428 -# (AMD Athlon/Duron and Intel Pentium 4) 11.429 - 11.430 -#config X86_MCE_P4THERMAL 11.431 -# bool "check for P4 thermal throttling interrupt." 11.432 -# depends on X86_MCE && (X86_UP_APIC || SMP) 11.433 -# help 11.434 -# Enabling this feature will cause a message to be printed when the P4 11.435 -# enters thermal throttling. 11.436 - 11.437 -#config MICROCODE 11.438 -# tristate "/dev/cpu/microcode - Intel IA32 CPU microcode support" 11.439 -# ---help--- 11.440 -# If you say Y here and also to "/dev file system support" in the 11.441 -# 'File systems' section, you will be able to update the microcode on 11.442 -# Intel processors in the IA32 family, e.g. Pentium Pro, Pentium II, 11.443 -# Pentium III, Pentium 4, Xeon etc. You will obviously need the 11.444 -# actual microcode binary data itself which is not shipped with the 11.445 -# Linux kernel. 11.446 -# 11.447 -# For latest news and information on obtaining all the required 11.448 -# ingredients for this driver, check: 11.449 -# <http://www.urbanmyth.org/microcode/>. 11.450 -# 11.451 -# To compile this driver as a module, choose M here: the 11.452 -# module will be called microcode. 11.453 - 11.454 -#config X86_MSR 11.455 -# tristate "/dev/cpu/*/msr - Model-specific register support" 11.456 -# help 11.457 -# This device gives privileged processes access to the x86 11.458 -# Model-Specific Registers (MSRs). It is a character device with 11.459 -# major 202 and minors 0 to 31 for /dev/cpu/0/msr to /dev/cpu/31/msr. 11.460 -# MSR accesses are directed to a specific CPU on multi-processor 11.461 -# systems. 11.462 - 11.463 -config X86_CPUID 11.464 - tristate "/dev/cpu/*/cpuid - CPU information support" 11.465 - help 11.466 - This device gives processes access to the x86 CPUID instruction to 11.467 - be executed on a specific processor. It is a character device 11.468 - with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to 11.469 - /dev/cpu/31/cpuid. 11.470 - 11.471 -source "drivers/firmware/Kconfig" 11.472 - 11.473 -choice 11.474 - prompt "High Memory Support" 11.475 - default NOHIGHMEM 11.476 - 11.477 -config NOHIGHMEM 11.478 - bool "off" 11.479 - ---help--- 11.480 - Linux can use up to 64 Gigabytes of physical memory on x86 systems. 11.481 - However, the address space of 32-bit x86 processors is only 4 11.482 - Gigabytes large. That means that, if you have a large amount of 11.483 - physical memory, not all of it can be "permanently mapped" by the 11.484 - kernel. The physical memory that's not permanently mapped is called 11.485 - "high memory". 11.486 - 11.487 - If you are compiling a kernel which will never run on a machine with 11.488 - more than 1 Gigabyte total physical RAM, answer "off" here (default 11.489 - choice and suitable for most users). This will result in a "3GB/1GB" 11.490 - split: 3GB are mapped so that each process sees a 3GB virtual memory 11.491 - space and the remaining part of the 4GB virtual memory space is used 11.492 - by the kernel to permanently map as much physical memory as 11.493 - possible. 11.494 - 11.495 - If the machine has between 1 and 4 Gigabytes physical RAM, then 11.496 - answer "4GB" here. 11.497 - 11.498 - If more than 4 Gigabytes is used then answer "64GB" here. This 11.499 - selection turns Intel PAE (Physical Address Extension) mode on. 11.500 - PAE implements 3-level paging on IA32 processors. PAE is fully 11.501 - supported by Linux, PAE mode is implemented on all recent Intel 11.502 - processors (Pentium Pro and better). NOTE: If you say "64GB" here, 11.503 - then the kernel will not boot on CPUs that don't support PAE! 11.504 - 11.505 - The actual amount of total physical memory will either be 11.506 - auto detected or can be forced by using a kernel command line option 11.507 - such as "mem=256M". (Try "man bootparam" or see the documentation of 11.508 - your boot loader (lilo or loadlin) about how to pass options to the 11.509 - kernel at boot time.) 11.510 - 11.511 - If unsure, say "off". 11.512 - 11.513 -config HIGHMEM4G 11.514 - bool "4GB" 11.515 - help 11.516 - Select this if you have a 32-bit processor and between 1 and 4 11.517 - gigabytes of physical RAM. 11.518 - 11.519 -#config HIGHMEM64G 11.520 -# bool "64GB" 11.521 -# help 11.522 -# Select this if you have a 32-bit processor and more than 4 11.523 -# gigabytes of physical RAM. 11.524 - 11.525 -endchoice 11.526 - 11.527 -config HIGHMEM 11.528 - bool 11.529 - depends on HIGHMEM64G || HIGHMEM4G 11.530 - default y 11.531 - 11.532 -config X86_PAE 11.533 - bool 11.534 - depends on HIGHMEM64G 11.535 - default y 11.536 - 11.537 -# Common NUMA Features 11.538 -config NUMA 11.539 - bool "Numa Memory Allocation and Scheduler Support" 11.540 - depends on SMP && HIGHMEM64G && (X86_NUMAQ || X86_GENERICARCH || (X86_SUMMIT && ACPI)) 11.541 - default n if X86_PC 11.542 - default y if (X86_NUMAQ || X86_SUMMIT) 11.543 - 11.544 -# Need comments to help the hapless user trying to turn on NUMA support 11.545 -comment "NUMA (NUMA-Q) requires SMP, 64GB highmem support" 11.546 - depends on X86_NUMAQ && (!HIGHMEM64G || !SMP) 11.547 - 11.548 -comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI" 11.549 - depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI) 11.550 - 11.551 -config DISCONTIGMEM 11.552 - bool 11.553 - depends on NUMA 11.554 - default y 11.555 - 11.556 -config HAVE_ARCH_BOOTMEM_NODE 11.557 - bool 11.558 - depends on NUMA 11.559 - default y 11.560 - 11.561 -#config HIGHPTE 11.562 -# bool "Allocate 3rd-level pagetables from highmem" 11.563 -# depends on HIGHMEM4G || HIGHMEM64G 11.564 -# help 11.565 -# The VM uses one page table entry for each page of physical memory. 11.566 -# For systems with a lot of RAM, this can be wasteful of precious 11.567 -# low memory. Setting this option will put user-space page table 11.568 -# entries in high memory. 11.569 - 11.570 -#config MTRR 11.571 -# bool "MTRR (Memory Type Range Register) support" 11.572 -# ---help--- 11.573 -# On Intel P6 family processors (Pentium Pro, Pentium II and later) 11.574 -# the Memory Type Range Registers (MTRRs) may be used to control 11.575 -# processor access to memory ranges. This is most useful if you have 11.576 -# a video (VGA) card on a PCI or AGP bus. Enabling write-combining 11.577 -# allows bus write transfers to be combined into a larger transfer 11.578 -# before bursting over the PCI/AGP bus. This can increase performance 11.579 -# of image write operations 2.5 times or more. Saying Y here creates a 11.580 -# /proc/mtrr file which may be used to manipulate your processor's 11.581 -# MTRRs. Typically the X server should use this. 11.582 -# 11.583 -# This code has a reasonably generic interface so that similar 11.584 -# control registers on other processors can be easily supported 11.585 -# as well: 11.586 -# 11.587 -# The Cyrix 6x86, 6x86MX and M II processors have Address Range 11.588 -# Registers (ARRs) which provide a similar functionality to MTRRs. For 11.589 -# these, the ARRs are used to emulate the MTRRs. 11.590 -# The AMD K6-2 (stepping 8 and above) and K6-3 processors have two 11.591 -# MTRRs. The Centaur C6 (WinChip) has 8 MCRs, allowing 11.592 -# write-combining. All of these processors are supported by this code 11.593 -# and it makes sense to say Y here if you have one of them. 11.594 -# 11.595 -# Saying Y here also fixes a problem with buggy SMP BIOSes which only 11.596 -# set the MTRRs for the boot CPU and not for the secondary CPUs. This 11.597 -# can lead to all sorts of problems, so it's good to say Y here. 11.598 -# 11.599 -# You can safely say Y even if your machine doesn't have MTRRs, you'll 11.600 -# just add about 9 KB to your kernel. 11.601 -# 11.602 -# See <file:Documentation/mtrr.txt> for more information. 11.603 - 11.604 -config IRQBALANCE 11.605 - bool "Enable kernel irq balancing" 11.606 - depends on SMP && X86_IO_APIC 11.607 - default y 11.608 - help 11.609 - The default yes will allow the kernel to do irq load balancing. 11.610 - Saying no will keep the kernel from doing irq load balancing. 11.611 - 11.612 -config HAVE_DEC_LOCK 11.613 - bool 11.614 - depends on (SMP || PREEMPT) && X86_CMPXCHG 11.615 - default y 11.616 - 11.617 -# turning this on wastes a bunch of space. 11.618 -# Summit needs it only when NUMA is on 11.619 -config BOOT_IOREMAP 11.620 - bool 11.621 - depends on (((X86_SUMMIT || X86_GENERICARCH) && NUMA) || (X86 && EFI)) 11.622 - default y 11.623 - 11.624 -config REGPARM 11.625 - bool "Use register arguments (EXPERIMENTAL)" 11.626 - depends on EXPERIMENTAL 11.627 - default n 11.628 - help 11.629 - Compile the kernel with -mregparm=3. This uses an different ABI 11.630 - and passes the first three arguments of a function call in registers. 11.631 - This will probably break binary only modules. 11.632 - 11.633 - This feature is only enabled for gcc-3.0 and later - earlier compilers 11.634 - generate incorrect output with certain kernel constructs when 11.635 - -mregparm=3 is used. 11.636 - 11.637 - 11.638 -if XEN_PHYSDEV_ACCESS 11.639 - 11.640 -menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)" 11.641 - 11.642 -config X86_VISWS_APIC 11.643 - bool 11.644 - depends on X86_VISWS 11.645 - default y 11.646 - 11.647 -config X86_LOCAL_APIC 11.648 - bool 11.649 - depends on (X86_VISWS || SMP) && !X86_VOYAGER 11.650 - default y 11.651 - 11.652 -config X86_IO_APIC 11.653 - bool 11.654 - depends on SMP && !(X86_VISWS || X86_VOYAGER) 11.655 - default y 11.656 - 11.657 -config PCI 11.658 - bool "PCI support" if !X86_VISWS 11.659 - depends on !X86_VOYAGER 11.660 - default y if X86_VISWS 11.661 - help 11.662 - Find out whether you have a PCI motherboard. PCI is the name of a 11.663 - bus system, i.e. the way the CPU talks to the other stuff inside 11.664 - your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or 11.665 - VESA. If you have PCI, say Y, otherwise N. 11.666 - 11.667 - The PCI-HOWTO, available from 11.668 - <http://www.tldp.org/docs.html#howto>, contains valuable 11.669 - information about which PCI hardware does work under Linux and which 11.670 - doesn't. 11.671 - 11.672 -choice 11.673 - prompt "PCI access mode" 11.674 - depends on PCI && !X86_VISWS 11.675 - default PCI_GOANY 11.676 - ---help--- 11.677 - On PCI systems, the BIOS can be used to detect the PCI devices and 11.678 - determine their configuration. However, some old PCI motherboards 11.679 - have BIOS bugs and may crash if this is done. Also, some embedded 11.680 - PCI-based systems don't have any BIOS at all. Linux can also try to 11.681 - detect the PCI hardware directly without using the BIOS. 11.682 - 11.683 - With this option, you can specify how Linux should detect the 11.684 - PCI devices. If you choose "BIOS", the BIOS will be used, 11.685 - if you choose "Direct", the BIOS won't be used, and if you 11.686 - choose "MMConfig", then PCI Express MMCONFIG will be used. 11.687 - If you choose "Any", the kernel will try MMCONFIG, then the 11.688 - direct access method and falls back to the BIOS if that doesn't 11.689 - work. If unsure, go with the default, which is "Any". 11.690 - 11.691 -config PCI_GOBIOS 11.692 - bool "BIOS" 11.693 - 11.694 -config PCI_GOMMCONFIG 11.695 - bool "MMConfig" 11.696 - 11.697 -config PCI_GODIRECT 11.698 - bool "Direct" 11.699 - 11.700 -config PCI_GOANY 11.701 - bool "Any" 11.702 - 11.703 -endchoice 11.704 - 11.705 -config PCI_BIOS 11.706 - bool 11.707 - depends on !X86_VISWS && PCI && (PCI_GOBIOS || PCI_GOANY) 11.708 - default y 11.709 - 11.710 -config PCI_DIRECT 11.711 - bool 11.712 - depends on PCI && ((PCI_GODIRECT || PCI_GOANY) || X86_VISWS) 11.713 - default y 11.714 - 11.715 -source "drivers/pci/Kconfig" 11.716 - 11.717 -config ISA 11.718 - bool "ISA support" 11.719 - depends on !(X86_VOYAGER || X86_VISWS) 11.720 - help 11.721 - Find out whether you have ISA slots on your motherboard. ISA is the 11.722 - name of a bus system, i.e. the way the CPU talks to the other stuff 11.723 - inside your box. Other bus systems are PCI, EISA, MicroChannel 11.724 - (MCA) or VESA. ISA is an older system, now being displaced by PCI; 11.725 - newer boards don't support it. If you have ISA, say Y, otherwise N. 11.726 - 11.727 -config EISA 11.728 - bool "EISA support" 11.729 - depends on ISA 11.730 - ---help--- 11.731 - The Extended Industry Standard Architecture (EISA) bus was 11.732 - developed as an open alternative to the IBM MicroChannel bus. 11.733 - 11.734 - The EISA bus provided some of the features of the IBM MicroChannel 11.735 - bus while maintaining backward compatibility with cards made for 11.736 - the older ISA bus. The EISA bus saw limited use between 1988 and 11.737 - 1995 when it was made obsolete by the PCI bus. 11.738 - 11.739 - Say Y here if you are building a kernel for an EISA-based machine. 11.740 - 11.741 - Otherwise, say N. 11.742 - 11.743 -source "drivers/eisa/Kconfig" 11.744 - 11.745 -config MCA 11.746 - bool "MCA support" 11.747 - depends on !(X86_VISWS || X86_VOYAGER) 11.748 - help 11.749 - MicroChannel Architecture is found in some IBM PS/2 machines and 11.750 - laptops. It is a bus system similar to PCI or ISA. See 11.751 - <file:Documentation/mca.txt> (and especially the web page given 11.752 - there) before attempting to build an MCA bus kernel. 11.753 - 11.754 -config MCA 11.755 - depends on X86_VOYAGER 11.756 - default y if X86_VOYAGER 11.757 - 11.758 -source "drivers/mca/Kconfig" 11.759 - 11.760 -config SCx200 11.761 - tristate "NatSemi SCx200 support" 11.762 - depends on !X86_VOYAGER 11.763 - help 11.764 - This provides basic support for the National Semiconductor SCx200 11.765 - processor. Right now this is just a driver for the GPIO pins. 11.766 - 11.767 - If you don't know what to do here, say N. 11.768 - 11.769 - This support is also available as a module. If compiled as a 11.770 - module, it will be called scx200. 11.771 - 11.772 -source "drivers/pcmcia/Kconfig" 11.773 - 11.774 -source "drivers/pci/hotplug/Kconfig" 11.775 - 11.776 -endmenu 11.777 - 11.778 -endif 11.779 - 11.780 -menu "Kernel hacking" 11.781 - 11.782 -config DEBUG_KERNEL 11.783 - bool "Kernel debugging" 11.784 - help 11.785 - Say Y here if you are developing drivers or trying to debug and 11.786 - identify kernel problems. 11.787 - 11.788 -config EARLY_PRINTK 11.789 - bool "Early printk" if EMBEDDED 11.790 - default y 11.791 - help 11.792 - Write kernel log output directly into the VGA buffer or to a serial 11.793 - port. 11.794 - 11.795 - This is useful for kernel debugging when your machine crashes very 11.796 - early before the console code is initialized. For normal operation 11.797 - it is not recommended because it looks ugly and doesn't cooperate 11.798 - with klogd/syslogd or the X server. You should normally N here, 11.799 - unless you want to debug such a crash. 11.800 - 11.801 -config DEBUG_STACKOVERFLOW 11.802 - bool "Check for stack overflows" 11.803 - depends on DEBUG_KERNEL 11.804 - 11.805 -config DEBUG_STACK_USAGE 11.806 - bool "Stack utilization instrumentation" 11.807 - depends on DEBUG_KERNEL 11.808 - help 11.809 - Enables the display of the minimum amount of free stack which each 11.810 - task has ever had available in the sysrq-T and sysrq-P debug output. 11.811 - 11.812 - This option will slow down process creation somewhat. 11.813 - 11.814 -config DEBUG_SLAB 11.815 - bool "Debug memory allocations" 11.816 - depends on DEBUG_KERNEL 11.817 - help 11.818 - Say Y here to have the kernel do limited verification on memory 11.819 - allocation as well as poisoning memory on free to catch use of freed 11.820 - memory. 11.821 - 11.822 -config MAGIC_SYSRQ 11.823 - bool "Magic SysRq key" 11.824 - depends on DEBUG_KERNEL 11.825 - help 11.826 - If you say Y here, you will have some control over the system even 11.827 - if the system crashes for example during kernel debugging (e.g., you 11.828 - will be able to flush the buffer cache to disk, reboot the system 11.829 - immediately or dump some status information). This is accomplished 11.830 - by pressing various keys while holding SysRq (Alt+PrintScreen). It 11.831 - also works on a serial console (on PC hardware at least), if you 11.832 - send a BREAK and then within 5 seconds a command keypress. The 11.833 - keys are documented in <file:Documentation/sysrq.txt>. Don't say Y 11.834 - unless you really know what this hack does. 11.835 - 11.836 -config DEBUG_SPINLOCK 11.837 - bool "Spinlock debugging" 11.838 - depends on DEBUG_KERNEL 11.839 - help 11.840 - Say Y here and build SMP to catch missing spinlock initialization 11.841 - and certain other kinds of spinlock errors commonly made. This is 11.842 - best used in conjunction with the NMI watchdog so that spinlock 11.843 - deadlocks are also debuggable. 11.844 - 11.845 -config DEBUG_PAGEALLOC 11.846 - bool "Page alloc debugging" 11.847 - depends on DEBUG_KERNEL 11.848 - help 11.849 - Unmap pages from the kernel linear mapping after free_pages(). 11.850 - This results in a large slowdown, but helps to find certain types 11.851 - of memory corruptions. 11.852 - 11.853 -config DEBUG_HIGHMEM 11.854 - bool "Highmem debugging" 11.855 - depends on DEBUG_KERNEL && HIGHMEM 11.856 - help 11.857 - This options enables addition error checking for high memory systems. 11.858 - Disable for production systems. 11.859 - 11.860 -config DEBUG_INFO 11.861 - bool "Compile the kernel with debug info" 11.862 - depends on DEBUG_KERNEL 11.863 - help 11.864 - If you say Y here the resulting kernel image will include 11.865 - debugging info resulting in a larger kernel image. 11.866 - Say Y here only if you plan to use gdb to debug the kernel. 11.867 - If you don't debug the kernel, you can say N. 11.868 - 11.869 -config DEBUG_SPINLOCK_SLEEP 11.870 - bool "Sleep-inside-spinlock checking" 11.871 - help 11.872 - If you say Y here, various routines which may sleep will become very 11.873 - noisy if they are called with a spinlock held. 11.874 - 11.875 -config FRAME_POINTER 11.876 - bool "Compile the kernel with frame pointers" 11.877 - help 11.878 - If you say Y here the resulting kernel image will be slightly larger 11.879 - and slower, but it will give very useful debugging information. 11.880 - If you don't debug the kernel, you can say N, but we may not be able 11.881 - to solve problems without frame pointers. 11.882 - 11.883 -config 4KSTACKS 11.884 - bool "Use 4Kb for kernel stacks instead of 8Kb" 11.885 - help 11.886 - If you say Y here the kernel will use a 4Kb stacksize for the 11.887 - kernel stack attached to each process/thread. This facilitates 11.888 - running more threads on a system and also reduces the pressure 11.889 - on the VM subsystem for higher order allocations. This option 11.890 - will also use IRQ stacks to compensate for the reduced stackspace. 11.891 - 11.892 -config X86_FIND_SMP_CONFIG 11.893 - bool 11.894 - depends on X86_LOCAL_APIC || X86_VOYAGER 11.895 - default y 11.896 - 11.897 -config X86_MPPARSE 11.898 - bool 11.899 - depends on X86_LOCAL_APIC && !X86_VISWS 11.900 - default y 11.901 - 11.902 -endmenu 11.903 - 11.904 -config X86_SMP 11.905 - bool 11.906 - depends on SMP && !X86_VOYAGER 11.907 - default y 11.908 - 11.909 -config X86_HT 11.910 - bool 11.911 - depends on SMP && !(X86_VISWS || X86_VOYAGER) 11.912 - default y 11.913 - 11.914 -config X86_BIOS_REBOOT 11.915 - bool 11.916 - depends on !(X86_VISWS || X86_VOYAGER) 11.917 - default y 11.918 - 11.919 -config X86_TRAMPOLINE 11.920 - bool 11.921 - depends on X86_SMP || (X86_VOYAGER && SMP) 11.922 - default y 11.923 - 11.924 -# std_resources is overridden for pc9800, but that's not 11.925 -# a currently selectable arch choice 11.926 -config X86_STD_RESOURCES 11.927 - bool 11.928 - default y 11.929 - 11.930 -config PC 11.931 - bool 11.932 - depends on X86 && !EMBEDDED 11.933 - default y 11.934 - 11.935 -endmenu
12.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/Makefile Wed Aug 25 16:26:15 2004 +0000 12.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 12.3 @@ -1,97 +0,0 @@ 12.4 -# 12.5 -# i386/Makefile 12.6 -# 12.7 -# This file is included by the global makefile so that you can add your own 12.8 -# architecture-specific flags and dependencies. Remember to do have actions 12.9 -# for "archclean" cleaning up for this architecture. 12.10 -# 12.11 -# This file is subject to the terms and conditions of the GNU General Public 12.12 -# License. See the file "COPYING" in the main directory of this archive 12.13 -# for more details. 12.14 -# 12.15 -# Copyright (C) 1994 by Linus Torvalds 12.16 -# 12.17 -# 19990713 Artur Skawina <skawina@geocities.com> 12.18 -# Added '-march' and '-mpreferred-stack-boundary' support 12.19 -# 12.20 - 12.21 -XENARCH := $(subst ",,$(CONFIG_XENARCH)) 12.22 - 12.23 -LDFLAGS := -m elf_i386 12.24 -LDFLAGS_vmlinux := 12.25 -CHECK := $(CHECK) -D__i386__=1 12.26 - 12.27 -CFLAGS += -pipe -msoft-float 12.28 - 12.29 -# prevent gcc from keeping the stack 16 byte aligned 12.30 -CFLAGS += $(call check_gcc,-mpreferred-stack-boundary=2,) 12.31 - 12.32 -align := $(subst -functions=0,,$(call check_gcc,-falign-functions=0,-malign-functions=0)) 12.33 - 12.34 -cflags-$(CONFIG_M386) += -march=i386 12.35 -cflags-$(CONFIG_M486) += -march=i486 12.36 -cflags-$(CONFIG_M586) += -march=i586 12.37 -cflags-$(CONFIG_M586TSC) += -march=i586 12.38 -cflags-$(CONFIG_M586MMX) += $(call check_gcc,-march=pentium-mmx,-march=i586) 12.39 -cflags-$(CONFIG_M686) += -march=i686 12.40 -cflags-$(CONFIG_MPENTIUMII) += $(call check_gcc,-march=pentium2,-march=i686) 12.41 -cflags-$(CONFIG_MPENTIUMIII) += $(call check_gcc,-march=pentium3,-march=i686) 12.42 -cflags-$(CONFIG_MPENTIUMM) += $(call check_gcc,-march=pentium3,-march=i686) 12.43 -cflags-$(CONFIG_MPENTIUM4) += $(call check_gcc,-march=pentium4,-march=i686) 12.44 -cflags-$(CONFIG_MK6) += -march=k6 12.45 -# Please note, that patches that add -march=athlon-xp and friends are pointless. 12.46 -# They make zero difference whatsosever to performance at this time. 12.47 -cflags-$(CONFIG_MK7) += $(call check_gcc,-march=athlon,-march=i686 $(align)-functions=4) 12.48 -cflags-$(CONFIG_MK8) += $(call check_gcc,-march=k8,$(call check_gcc,-march=athlon,-march=i686 $(align)-functions=4)) 12.49 -cflags-$(CONFIG_MCRUSOE) += -march=i686 $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0 12.50 -cflags-$(CONFIG_MWINCHIPC6) += $(call check_gcc,-march=winchip-c6,-march=i586) 12.51 -cflags-$(CONFIG_MWINCHIP2) += $(call check_gcc,-march=winchip2,-march=i586) 12.52 -cflags-$(CONFIG_MWINCHIP3D) += $(call check_gcc,-march=winchip2,-march=i586) 12.53 -cflags-$(CONFIG_MCYRIXIII) += $(call check_gcc,-march=c3,-march=i486) $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0 12.54 -cflags-$(CONFIG_MVIAC3_2) += $(call check_gcc,-march=c3-2,-march=i686) 12.55 - 12.56 -# AMD Elan support 12.57 -cflags-$(CONFIG_X86_ELAN) += -march=i486 12.58 - 12.59 -# -mregparm=3 works ok on gcc-3.0 and later 12.60 -# 12.61 -GCC_VERSION := $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC)) 12.62 -cflags-$(CONFIG_REGPARM) += $(shell if [ $(GCC_VERSION) -ge 0300 ] ; then echo "-mregparm=3"; fi ;) 12.63 - 12.64 -# Disable unit-at-a-time mode, it makes gcc use a lot more stack 12.65 -# due to the lack of sharing of stacklots. 12.66 -CFLAGS += $(call check_gcc,-fno-unit-at-a-time,) 12.67 - 12.68 -CFLAGS += $(cflags-y) 12.69 - 12.70 -head-y := arch/xen/i386/kernel/head.o arch/xen/i386/kernel/init_task.o 12.71 - 12.72 -libs-y += arch/i386/lib/ 12.73 -core-y += arch/xen/i386/kernel/ \ 12.74 - arch/xen/i386/mm/ 12.75 -# \ 12.76 -# arch/xen/$(mcore-y)/ 12.77 -drivers-$(CONFIG_MATH_EMULATION) += arch/i386/math-emu/ 12.78 -drivers-$(CONFIG_PCI) += arch/xen/i386/pci/ 12.79 -# must be linked after kernel/ 12.80 -drivers-$(CONFIG_OPROFILE) += arch/i386/oprofile/ 12.81 -drivers-$(CONFIG_PM) += arch/i386/power/ 12.82 - 12.83 -# for clean 12.84 -obj- += kernel/ mm/ pci/ 12.85 -#obj- += ../../i386/lib/ ../../i386/mm/ 12.86 -#../../i386/$(mcore-y)/ 12.87 -#obj- += ../../i386/pci/ ../../i386/oprofile/ ../../i386/power/ 12.88 - 12.89 -xenflags-y += -Iinclude/asm-xen/asm-i386/mach-xen 12.90 -CFLAGS += $(xenflags-y) 12.91 -AFLAGS += $(xenflags-y) 12.92 - 12.93 -prepare: include/asm-$(XENARCH)/asm_offsets.h 12.94 -CLEAN_FILES += include/asm-$(XENARCH)/asm_offsets.h 12.95 - 12.96 -arch/$(XENARCH)/kernel/asm-offsets.s: include/asm include/.asm-ignore \ 12.97 - include/linux/version.h include/config/MARKER 12.98 - 12.99 -include/asm-$(XENARCH)/asm_offsets.h: arch/$(XENARCH)/kernel/asm-offsets.s 12.100 - $(call filechk,gen-asm-offsets)
13.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/Makefile Wed Aug 25 16:26:15 2004 +0000 13.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 13.3 @@ -1,92 +0,0 @@ 13.4 -# 13.5 -# Makefile for the linux kernel. 13.6 -# 13.7 - 13.8 -XENARCH := $(subst ",,$(CONFIG_XENARCH)) 13.9 - 13.10 -CFLAGS += -Iarch/$(XENARCH)/kernel 13.11 - 13.12 -extra-y := head.o init_task.o vmlinux.lds.s 13.13 - 13.14 -obj-y := traps.o irq.o ldt.o setup.o entry.o time.o pci-dma.o process.o \ 13.15 - ioport.o signal.o i386_ksyms.o 13.16 - 13.17 -c-obj-y := semaphore.o vm86.o \ 13.18 - ptrace.o sys_i386.o \ 13.19 - i387.o dmi_scan.o bootflag.o \ 13.20 - doublefault.o 13.21 -s-obj-y := 13.22 - 13.23 -obj-y += cpu/ 13.24 -obj-y += timers/ 13.25 -c-obj-$(CONFIG_ACPI_BOOT) += acpi/ 13.26 -#c-obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o 13.27 -c-obj-$(CONFIG_MCA) += mca.o 13.28 -c-obj-$(CONFIG_X86_MSR) += msr.o 13.29 -c-obj-$(CONFIG_X86_CPUID) += cpuid.o 13.30 -c-obj-$(CONFIG_MICROCODE) += microcode.o 13.31 -c-obj-$(CONFIG_APM) += apm.o 13.32 -c-obj-$(CONFIG_X86_SMP) += smp.o smpboot.o 13.33 -c-obj-$(CONFIG_X86_TRAMPOLINE) += trampoline.o 13.34 -c-obj-$(CONFIG_X86_MPPARSE) += mpparse.o 13.35 -c-obj-$(CONFIG_X86_LOCAL_APIC) += apic.o nmi.o 13.36 -c-obj-$(CONFIG_X86_IO_APIC) += io_apic.o 13.37 -c-obj-$(CONFIG_X86_NUMAQ) += numaq.o 13.38 -c-obj-$(CONFIG_X86_SUMMIT_NUMA) += summit.o 13.39 -c-obj-$(CONFIG_MODULES) += module.o 13.40 -obj-y += sysenter.o 13.41 -obj-y += vsyscall.o 13.42 -c-obj-$(CONFIG_ACPI_SRAT) += srat.o 13.43 -c-obj-$(CONFIG_HPET_TIMER) += time_hpet.o 13.44 -c-obj-$(CONFIG_EFI) += efi.o efi_stub.o 13.45 -c-obj-$(CONFIG_EARLY_PRINTK) += early_printk.o 13.46 -c-obj-$(CONFIG_X86_STD_RESOURCES) += std_resources.o 13.47 - 13.48 -EXTRA_AFLAGS := -traditional 13.49 - 13.50 -c-obj-$(CONFIG_SCx200) += scx200.o 13.51 - 13.52 -AFLAGS_vmlinux.lds.o += -U$(XENARCH) 13.53 - 13.54 -# vsyscall.o contains the vsyscall DSO images as __initdata. 13.55 -# We must build both images before we can assemble it. 13.56 -# Note: kbuild does not track this dependency due to usage of .incbin 13.57 -$(obj)/vsyscall.o: $(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so 13.58 -targets += $(foreach F,int80 sysenter,vsyscall-$F.o vsyscall-$F.so) 13.59 - 13.60 -# The DSO images are built using a special linker script. 13.61 -quiet_cmd_syscall = SYSCALL $@ 13.62 - cmd_syscall = $(CC) -nostdlib $(SYSCFLAGS_$(@F)) \ 13.63 - -Wl,-T,$(filter-out FORCE,$^) -o $@ 13.64 - 13.65 -vsyscall-flags = -shared -s -Wl,-soname=linux-gate.so.1 13.66 -SYSCFLAGS_vsyscall-sysenter.so = $(vsyscall-flags) 13.67 -SYSCFLAGS_vsyscall-int80.so = $(vsyscall-flags) 13.68 - 13.69 -$(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so: \ 13.70 -$(obj)/vsyscall-%.so: $(obj)/vsyscall.lds $(obj)/vsyscall-%.o FORCE 13.71 - $(call if_changed,syscall) 13.72 - 13.73 -# We also create a special relocatable object that should mirror the symbol 13.74 -# table and layout of the linked DSO. With ld -R we can then refer to 13.75 -# these symbols in the kernel code rather than hand-coded addresses. 13.76 -extra-y += vsyscall-syms.o 13.77 -$(obj)/built-in.o: $(obj)/vsyscall-syms.o 13.78 -$(obj)/built-in.o: ld_flags += -R $(obj)/vsyscall-syms.o 13.79 - 13.80 -SYSCFLAGS_vsyscall-syms.o = -r 13.81 -$(obj)/vsyscall-syms.o: $(obj)/vsyscall.lds $(obj)/vsyscall-sysenter.o FORCE 13.82 - $(call if_changed,syscall) 13.83 - 13.84 -c-link := init_task.o 13.85 -s-link := vsyscall-int80.o vsyscall-sysenter.o vsyscall-sigreturn.o 13.86 - 13.87 -$(patsubst %.o,$(obj)/%.c,$(c-obj-y) $(c-link)) $(patsubst %.o,$(obj)/%.S,$(s-obj-y) $(s-link)): 13.88 - @ln -fsn $(srctree)/arch/i386/kernel/$(notdir $@) $@ 13.89 - 13.90 -$(obj)/vsyscall-int80.S: $(obj)/vsyscall-sigreturn.S 13.91 - 13.92 -obj-y += $(c-obj-y) $(s-obj-y) 13.93 - 13.94 -clean-files += $(patsubst %.o,%.c,$(c-obj-y) $(c-obj-) $(c-link)) 13.95 -clean-files += $(patsubst %.o,%.S,$(s-obj-y) $(s-obj-) $(s-link))
14.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/cpu/Makefile Wed Aug 25 16:26:15 2004 +0000 14.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 14.3 @@ -1,31 +0,0 @@ 14.4 -# 14.5 -# Makefile for x86-compatible CPU details and quirks 14.6 -# 14.7 - 14.8 -CFLAGS += -Iarch/i386/kernel/cpu 14.9 - 14.10 -obj-y := common.o 14.11 -c-obj-y += proc.o 14.12 - 14.13 -c-obj-y += amd.o 14.14 -c-obj-y += cyrix.o 14.15 -c-obj-y += centaur.o 14.16 -c-obj-y += transmeta.o 14.17 -c-obj-y += intel.o 14.18 -c-obj-y += rise.o 14.19 -c-obj-y += nexgen.o 14.20 -c-obj-y += umc.o 14.21 - 14.22 -#obj-$(CONFIG_X86_MCE) += ../../../../i386/kernel/cpu/mcheck/ 14.23 - 14.24 -#obj-$(CONFIG_MTRR) += ../../../../i386/kernel/cpu/mtrr/ 14.25 -#obj-$(CONFIG_CPU_FREQ) += ../../../../i386/kernel/cpu/cpufreq/ 14.26 - 14.27 -c-link := 14.28 - 14.29 -$(patsubst %.o,$(obj)/%.c,$(c-obj-y) $(c-link)): 14.30 - @ln -fsn $(srctree)/arch/i386/kernel/cpu/$(notdir $@) $@ 14.31 - 14.32 -obj-y += $(c-obj-y) 14.33 - 14.34 -clean-files += $(patsubst %.o,%.c,$(c-obj-y) $(c-obj-) $(c-link))
15.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/cpu/common.c Wed Aug 25 16:26:15 2004 +0000 15.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 15.3 @@ -1,597 +0,0 @@ 15.4 -#include <linux/init.h> 15.5 -#include <linux/string.h> 15.6 -#include <linux/delay.h> 15.7 -#include <linux/smp.h> 15.8 -#include <asm/semaphore.h> 15.9 -#include <asm/processor.h> 15.10 -#include <asm/i387.h> 15.11 -#include <asm/msr.h> 15.12 -#include <asm/io.h> 15.13 -#include <asm/mmu_context.h> 15.14 -#include <asm-xen/hypervisor.h> 15.15 - 15.16 -#include "cpu.h" 15.17 - 15.18 -static int cachesize_override __initdata = -1; 15.19 -static int disable_x86_fxsr __initdata = 0; 15.20 -static int disable_x86_serial_nr __initdata = 1; 15.21 - 15.22 -struct cpu_dev * cpu_devs[X86_VENDOR_NUM] = {}; 15.23 - 15.24 -extern void mcheck_init(struct cpuinfo_x86 *c); 15.25 - 15.26 -extern int disable_pse; 15.27 - 15.28 -static void default_init(struct cpuinfo_x86 * c) 15.29 -{ 15.30 - /* Not much we can do here... */ 15.31 - /* Check if at least it has cpuid */ 15.32 - if (c->cpuid_level == -1) { 15.33 - /* No cpuid. It must be an ancient CPU */ 15.34 - if (c->x86 == 4) 15.35 - strcpy(c->x86_model_id, "486"); 15.36 - else if (c->x86 == 3) 15.37 - strcpy(c->x86_model_id, "386"); 15.38 - } 15.39 -} 15.40 - 15.41 -static struct cpu_dev default_cpu = { 15.42 - .c_init = default_init, 15.43 -}; 15.44 -static struct cpu_dev * this_cpu = &default_cpu; 15.45 - 15.46 -static int __init cachesize_setup(char *str) 15.47 -{ 15.48 - get_option (&str, &cachesize_override); 15.49 - return 1; 15.50 -} 15.51 -__setup("cachesize=", cachesize_setup); 15.52 - 15.53 -int __init get_model_name(struct cpuinfo_x86 *c) 15.54 -{ 15.55 - unsigned int *v; 15.56 - char *p, *q; 15.57 - 15.58 - if (cpuid_eax(0x80000000) < 0x80000004) 15.59 - return 0; 15.60 - 15.61 - v = (unsigned int *) c->x86_model_id; 15.62 - cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]); 15.63 - cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]); 15.64 - cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]); 15.65 - c->x86_model_id[48] = 0; 15.66 - 15.67 - /* Intel chips right-justify this string for some dumb reason; 15.68 - undo that brain damage */ 15.69 - p = q = &c->x86_model_id[0]; 15.70 - while ( *p == ' ' ) 15.71 - p++; 15.72 - if ( p != q ) { 15.73 - while ( *p ) 15.74 - *q++ = *p++; 15.75 - while ( q <= &c->x86_model_id[48] ) 15.76 - *q++ = '\0'; /* Zero-pad the rest */ 15.77 - } 15.78 - 15.79 - return 1; 15.80 -} 15.81 - 15.82 - 15.83 -void __init display_cacheinfo(struct cpuinfo_x86 *c) 15.84 -{ 15.85 - unsigned int n, dummy, ecx, edx, l2size; 15.86 - 15.87 - n = cpuid_eax(0x80000000); 15.88 - 15.89 - if (n >= 0x80000005) { 15.90 - cpuid(0x80000005, &dummy, &dummy, &ecx, &edx); 15.91 - printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d bytes/line)\n", 15.92 - edx>>24, edx&0xFF, ecx>>24, ecx&0xFF); 15.93 - c->x86_cache_size=(ecx>>24)+(edx>>24); 15.94 - } 15.95 - 15.96 - if (n < 0x80000006) /* Some chips just has a large L1. */ 15.97 - return; 15.98 - 15.99 - ecx = cpuid_ecx(0x80000006); 15.100 - l2size = ecx >> 16; 15.101 - 15.102 - /* do processor-specific cache resizing */ 15.103 - if (this_cpu->c_size_cache) 15.104 - l2size = this_cpu->c_size_cache(c,l2size); 15.105 - 15.106 - /* Allow user to override all this if necessary. */ 15.107 - if (cachesize_override != -1) 15.108 - l2size = cachesize_override; 15.109 - 15.110 - if ( l2size == 0 ) 15.111 - return; /* Again, no L2 cache is possible */ 15.112 - 15.113 - c->x86_cache_size = l2size; 15.114 - 15.115 - printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n", 15.116 - l2size, ecx & 0xFF); 15.117 -} 15.118 - 15.119 -/* Naming convention should be: <Name> [(<Codename>)] */ 15.120 -/* This table only is used unless init_<vendor>() below doesn't set it; */ 15.121 -/* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used */ 15.122 - 15.123 -/* Look up CPU names by table lookup. */ 15.124 -static char __init *table_lookup_model(struct cpuinfo_x86 *c) 15.125 -{ 15.126 - struct cpu_model_info *info; 15.127 - 15.128 - if ( c->x86_model >= 16 ) 15.129 - return NULL; /* Range check */ 15.130 - 15.131 - if (!this_cpu) 15.132 - return NULL; 15.133 - 15.134 - info = this_cpu->c_models; 15.135 - 15.136 - while (info && info->family) { 15.137 - if (info->family == c->x86) 15.138 - return info->model_names[c->x86_model]; 15.139 - info++; 15.140 - } 15.141 - return NULL; /* Not found */ 15.142 -} 15.143 - 15.144 - 15.145 -void __init get_cpu_vendor(struct cpuinfo_x86 *c, int early) 15.146 -{ 15.147 - char *v = c->x86_vendor_id; 15.148 - int i; 15.149 - 15.150 - for (i = 0; i < X86_VENDOR_NUM; i++) { 15.151 - if (cpu_devs[i]) { 15.152 - if (!strcmp(v,cpu_devs[i]->c_ident[0]) || 15.153 - (cpu_devs[i]->c_ident[1] && 15.154 - !strcmp(v,cpu_devs[i]->c_ident[1]))) { 15.155 - c->x86_vendor = i; 15.156 - if (!early) 15.157 - this_cpu = cpu_devs[i]; 15.158 - break; 15.159 - } 15.160 - } 15.161 - } 15.162 -} 15.163 - 15.164 - 15.165 -static int __init x86_fxsr_setup(char * s) 15.166 -{ 15.167 - disable_x86_fxsr = 1; 15.168 - return 1; 15.169 -} 15.170 -__setup("nofxsr", x86_fxsr_setup); 15.171 - 15.172 - 15.173 -/* Standard macro to see if a specific flag is changeable */ 15.174 -static inline int flag_is_changeable_p(u32 flag) 15.175 -{ 15.176 - u32 f1, f2; 15.177 - 15.178 - asm("pushfl\n\t" 15.179 - "pushfl\n\t" 15.180 - "popl %0\n\t" 15.181 - "movl %0,%1\n\t" 15.182 - "xorl %2,%0\n\t" 15.183 - "pushl %0\n\t" 15.184 - "popfl\n\t" 15.185 - "pushfl\n\t" 15.186 - "popl %0\n\t" 15.187 - "popfl\n\t" 15.188 - : "=&r" (f1), "=&r" (f2) 15.189 - : "ir" (flag)); 15.190 - 15.191 - return ((f1^f2) & flag) != 0; 15.192 -} 15.193 - 15.194 - 15.195 -/* Probe for the CPUID instruction */ 15.196 -int __init have_cpuid_p(void) 15.197 -{ 15.198 - return flag_is_changeable_p(X86_EFLAGS_ID); 15.199 -} 15.200 - 15.201 -/* Do minimum CPU detection early. 15.202 - Fields really needed: vendor, cpuid_level, family, model, mask, cache alignment. 15.203 - The others are not touched to avoid unwanted side effects. */ 15.204 -void __init early_cpu_detect(void) 15.205 -{ 15.206 - struct cpuinfo_x86 *c = &boot_cpu_data; 15.207 - 15.208 - c->x86_cache_alignment = 32; 15.209 - 15.210 - if (!have_cpuid_p()) 15.211 - return; 15.212 - 15.213 - /* Get vendor name */ 15.214 - cpuid(0x00000000, &c->cpuid_level, 15.215 - (int *)&c->x86_vendor_id[0], 15.216 - (int *)&c->x86_vendor_id[8], 15.217 - (int *)&c->x86_vendor_id[4]); 15.218 - 15.219 - get_cpu_vendor(c, 1); 15.220 - 15.221 - c->x86 = 4; 15.222 - if (c->cpuid_level >= 0x00000001) { 15.223 - u32 junk, tfms, cap0, misc; 15.224 - cpuid(0x00000001, &tfms, &misc, &junk, &cap0); 15.225 - c->x86 = (tfms >> 8) & 15; 15.226 - c->x86_model = (tfms >> 4) & 15; 15.227 - if (c->x86 == 0xf) { 15.228 - c->x86 += (tfms >> 20) & 0xff; 15.229 - c->x86_model += ((tfms >> 16) & 0xF) << 4; 15.230 - } 15.231 - c->x86_mask = tfms & 15; 15.232 - if (cap0 & (1<<19)) 15.233 - c->x86_cache_alignment = ((misc >> 8) & 0xff) * 8; 15.234 - } 15.235 - 15.236 - early_intel_workaround(c); 15.237 -} 15.238 - 15.239 -void __init generic_identify(struct cpuinfo_x86 * c) 15.240 -{ 15.241 - u32 tfms, xlvl; 15.242 - int junk; 15.243 - 15.244 - if (have_cpuid_p()) { 15.245 - /* Get vendor name */ 15.246 - cpuid(0x00000000, &c->cpuid_level, 15.247 - (int *)&c->x86_vendor_id[0], 15.248 - (int *)&c->x86_vendor_id[8], 15.249 - (int *)&c->x86_vendor_id[4]); 15.250 - 15.251 - get_cpu_vendor(c, 0); 15.252 - /* Initialize the standard set of capabilities */ 15.253 - /* Note that the vendor-specific code below might override */ 15.254 - 15.255 - /* Intel-defined flags: level 0x00000001 */ 15.256 - if ( c->cpuid_level >= 0x00000001 ) { 15.257 - u32 capability, excap; 15.258 - cpuid(0x00000001, &tfms, &junk, &excap, &capability); 15.259 - c->x86_capability[0] = capability; 15.260 - c->x86_capability[4] = excap; 15.261 - c->x86 = (tfms >> 8) & 15; 15.262 - c->x86_model = (tfms >> 4) & 15; 15.263 - if (c->x86 == 0xf) { 15.264 - c->x86 += (tfms >> 20) & 0xff; 15.265 - c->x86_model += ((tfms >> 16) & 0xF) << 4; 15.266 - } 15.267 - c->x86_mask = tfms & 15; 15.268 - } else { 15.269 - /* Have CPUID level 0 only - unheard of */ 15.270 - c->x86 = 4; 15.271 - } 15.272 - 15.273 - /* AMD-defined flags: level 0x80000001 */ 15.274 - xlvl = cpuid_eax(0x80000000); 15.275 - if ( (xlvl & 0xffff0000) == 0x80000000 ) { 15.276 - if ( xlvl >= 0x80000001 ) 15.277 - c->x86_capability[1] = cpuid_edx(0x80000001); 15.278 - if ( xlvl >= 0x80000004 ) 15.279 - get_model_name(c); /* Default name */ 15.280 - } 15.281 - } 15.282 -} 15.283 - 15.284 -static void __init squash_the_stupid_serial_number(struct cpuinfo_x86 *c) 15.285 -{ 15.286 - if (cpu_has(c, X86_FEATURE_PN) && disable_x86_serial_nr ) { 15.287 - /* Disable processor serial number */ 15.288 - unsigned long lo,hi; 15.289 - rdmsr(MSR_IA32_BBL_CR_CTL,lo,hi); 15.290 - lo |= 0x200000; 15.291 - wrmsr(MSR_IA32_BBL_CR_CTL,lo,hi); 15.292 - printk(KERN_NOTICE "CPU serial number disabled.\n"); 15.293 - clear_bit(X86_FEATURE_PN, c->x86_capability); 15.294 - 15.295 - /* Disabling the serial number may affect the cpuid level */ 15.296 - c->cpuid_level = cpuid_eax(0); 15.297 - } 15.298 -} 15.299 - 15.300 -static int __init x86_serial_nr_setup(char *s) 15.301 -{ 15.302 - disable_x86_serial_nr = 0; 15.303 - return 1; 15.304 -} 15.305 -__setup("serialnumber", x86_serial_nr_setup); 15.306 - 15.307 - 15.308 - 15.309 -/* 15.310 - * This does the hard work of actually picking apart the CPU stuff... 15.311 - */ 15.312 -void __init identify_cpu(struct cpuinfo_x86 *c) 15.313 -{ 15.314 - int i; 15.315 - 15.316 - c->loops_per_jiffy = loops_per_jiffy; 15.317 - c->x86_cache_size = -1; 15.318 - c->x86_vendor = X86_VENDOR_UNKNOWN; 15.319 - c->cpuid_level = -1; /* CPUID not detected */ 15.320 - c->x86_model = c->x86_mask = 0; /* So far unknown... */ 15.321 - c->x86_vendor_id[0] = '\0'; /* Unset */ 15.322 - c->x86_model_id[0] = '\0'; /* Unset */ 15.323 - memset(&c->x86_capability, 0, sizeof c->x86_capability); 15.324 - 15.325 - if (!have_cpuid_p()) { 15.326 - /* First of all, decide if this is a 486 or higher */ 15.327 - /* It's a 486 if we can modify the AC flag */ 15.328 - if ( flag_is_changeable_p(X86_EFLAGS_AC) ) 15.329 - c->x86 = 4; 15.330 - else 15.331 - c->x86 = 3; 15.332 - } 15.333 - 15.334 - generic_identify(c); 15.335 - 15.336 - printk(KERN_DEBUG "CPU: After generic identify, caps: %08lx %08lx %08lx %08lx\n", 15.337 - c->x86_capability[0], 15.338 - c->x86_capability[1], 15.339 - c->x86_capability[2], 15.340 - c->x86_capability[3]); 15.341 - 15.342 - if (this_cpu->c_identify) { 15.343 - this_cpu->c_identify(c); 15.344 - 15.345 - printk(KERN_DEBUG "CPU: After vendor identify, caps: %08lx %08lx %08lx %08lx\n", 15.346 - c->x86_capability[0], 15.347 - c->x86_capability[1], 15.348 - c->x86_capability[2], 15.349 - c->x86_capability[3]); 15.350 -} 15.351 - 15.352 - /* 15.353 - * Vendor-specific initialization. In this section we 15.354 - * canonicalize the feature flags, meaning if there are 15.355 - * features a certain CPU supports which CPUID doesn't 15.356 - * tell us, CPUID claiming incorrect flags, or other bugs, 15.357 - * we handle them here. 15.358 - * 15.359 - * At the end of this section, c->x86_capability better 15.360 - * indicate the features this CPU genuinely supports! 15.361 - */ 15.362 - if (this_cpu->c_init) 15.363 - this_cpu->c_init(c); 15.364 - 15.365 - /* Disable the PN if appropriate */ 15.366 - squash_the_stupid_serial_number(c); 15.367 - 15.368 - /* 15.369 - * The vendor-specific functions might have changed features. Now 15.370 - * we do "generic changes." 15.371 - */ 15.372 - 15.373 - /* TSC disabled? */ 15.374 - if ( tsc_disable ) 15.375 - clear_bit(X86_FEATURE_TSC, c->x86_capability); 15.376 - 15.377 - /* FXSR disabled? */ 15.378 - if (disable_x86_fxsr) { 15.379 - clear_bit(X86_FEATURE_FXSR, c->x86_capability); 15.380 - clear_bit(X86_FEATURE_XMM, c->x86_capability); 15.381 - } 15.382 - 15.383 - if (disable_pse) 15.384 - clear_bit(X86_FEATURE_PSE, c->x86_capability); 15.385 - 15.386 - /* If the model name is still unset, do table lookup. */ 15.387 - if ( !c->x86_model_id[0] ) { 15.388 - char *p; 15.389 - p = table_lookup_model(c); 15.390 - if ( p ) 15.391 - strcpy(c->x86_model_id, p); 15.392 - else 15.393 - /* Last resort... */ 15.394 - sprintf(c->x86_model_id, "%02x/%02x", 15.395 - c->x86_vendor, c->x86_model); 15.396 - } 15.397 - 15.398 - /* Now the feature flags better reflect actual CPU features! */ 15.399 - 15.400 - printk(KERN_DEBUG "CPU: After all inits, caps: %08lx %08lx %08lx %08lx\n", 15.401 - c->x86_capability[0], 15.402 - c->x86_capability[1], 15.403 - c->x86_capability[2], 15.404 - c->x86_capability[3]); 15.405 - 15.406 - /* 15.407 - * On SMP, boot_cpu_data holds the common feature set between 15.408 - * all CPUs; so make sure that we indicate which features are 15.409 - * common between the CPUs. The first time this routine gets 15.410 - * executed, c == &boot_cpu_data. 15.411 - */ 15.412 - if ( c != &boot_cpu_data ) { 15.413 - /* AND the already accumulated flags with these */ 15.414 - for ( i = 0 ; i < NCAPINTS ; i++ ) 15.415 - boot_cpu_data.x86_capability[i] &= c->x86_capability[i]; 15.416 - } 15.417 - 15.418 - /* Init Machine Check Exception if available. */ 15.419 -#ifdef CONFIG_X86_MCE 15.420 - mcheck_init(c); 15.421 -#endif 15.422 -} 15.423 -/* 15.424 - * Perform early boot up checks for a valid TSC. See arch/i386/kernel/time.c 15.425 - */ 15.426 - 15.427 -void __init dodgy_tsc(void) 15.428 -{ 15.429 - if (( boot_cpu_data.x86_vendor == X86_VENDOR_CYRIX ) || 15.430 - ( boot_cpu_data.x86_vendor == X86_VENDOR_NSC )) 15.431 - cpu_devs[X86_VENDOR_CYRIX]->c_init(&boot_cpu_data); 15.432 -} 15.433 - 15.434 -void __init print_cpu_info(struct cpuinfo_x86 *c) 15.435 -{ 15.436 - char *vendor = NULL; 15.437 - 15.438 - if (c->x86_vendor < X86_VENDOR_NUM) 15.439 - vendor = this_cpu->c_vendor; 15.440 - else if (c->cpuid_level >= 0) 15.441 - vendor = c->x86_vendor_id; 15.442 - 15.443 - if (vendor && strncmp(c->x86_model_id, vendor, strlen(vendor))) 15.444 - printk("%s ", vendor); 15.445 - 15.446 - if (!c->x86_model_id[0]) 15.447 - printk("%d86", c->x86); 15.448 - else 15.449 - printk("%s", c->x86_model_id); 15.450 - 15.451 - if (c->x86_mask || c->cpuid_level >= 0) 15.452 - printk(" stepping %02x\n", c->x86_mask); 15.453 - else 15.454 - printk("\n"); 15.455 -} 15.456 - 15.457 -unsigned long cpu_initialized __initdata = 0; 15.458 - 15.459 -/* This is hacky. :) 15.460 - * We're emulating future behavior. 15.461 - * In the future, the cpu-specific init functions will be called implicitly 15.462 - * via the magic of initcalls. 15.463 - * They will insert themselves into the cpu_devs structure. 15.464 - * Then, when cpu_init() is called, we can just iterate over that array. 15.465 - */ 15.466 - 15.467 -extern int intel_cpu_init(void); 15.468 -extern int cyrix_init_cpu(void); 15.469 -extern int nsc_init_cpu(void); 15.470 -extern int amd_init_cpu(void); 15.471 -extern int centaur_init_cpu(void); 15.472 -extern int transmeta_init_cpu(void); 15.473 -extern int rise_init_cpu(void); 15.474 -extern int nexgen_init_cpu(void); 15.475 -extern int umc_init_cpu(void); 15.476 -void early_cpu_detect(void); 15.477 - 15.478 -void __init early_cpu_init(void) 15.479 -{ 15.480 - early_cpu_detect(); 15.481 - intel_cpu_init(); 15.482 - cyrix_init_cpu(); 15.483 - nsc_init_cpu(); 15.484 - amd_init_cpu(); 15.485 - centaur_init_cpu(); 15.486 - transmeta_init_cpu(); 15.487 - rise_init_cpu(); 15.488 - nexgen_init_cpu(); 15.489 - umc_init_cpu(); 15.490 - 15.491 -#ifdef CONFIG_DEBUG_PAGEALLOC 15.492 - /* pse is not compatible with on-the-fly unmapping, 15.493 - * disable it even if the cpus claim to support it. 15.494 - */ 15.495 - clear_bit(X86_FEATURE_PSE, boot_cpu_data.x86_capability); 15.496 - disable_pse = 1; 15.497 -#endif 15.498 -} 15.499 - 15.500 -void __init cpu_gdt_init(struct Xgt_desc_struct *gdt_descr) 15.501 -{ 15.502 - unsigned long frames[gdt_descr->size >> PAGE_SHIFT]; 15.503 - unsigned long va; 15.504 - int f; 15.505 - 15.506 - for (va = gdt_descr->address, f = 0; 15.507 - va < gdt_descr->address + gdt_descr->size; 15.508 - va += PAGE_SIZE, f++) { 15.509 - frames[f] = virt_to_machine(va) >> PAGE_SHIFT; 15.510 - wrprotect_bootpt(swapper_pg_dir, (void *)va, 1); 15.511 - } 15.512 - flush_page_update_queue(); 15.513 - if (HYPERVISOR_set_gdt(frames, gdt_descr->size / 8)) 15.514 - BUG(); 15.515 - lgdt_finish(); 15.516 -} 15.517 - 15.518 -/* 15.519 - * cpu_init() initializes state that is per-CPU. Some data is already 15.520 - * initialized (naturally) in the bootstrap process, such as the GDT 15.521 - * and IDT. We reload them nevertheless, this function acts as a 15.522 - * 'CPU state barrier', nothing should get across. 15.523 - */ 15.524 -void __init cpu_init (void) 15.525 -{ 15.526 - int cpu = smp_processor_id(); 15.527 - struct tss_struct * t = init_tss + cpu; 15.528 - struct thread_struct *thread = ¤t->thread; 15.529 - 15.530 - if (test_and_set_bit(cpu, &cpu_initialized)) { 15.531 - printk(KERN_WARNING "CPU#%d already initialized!\n", cpu); 15.532 - for (;;) local_irq_enable(); 15.533 - } 15.534 - printk(KERN_INFO "Initializing CPU#%d\n", cpu); 15.535 - 15.536 - if (cpu_has_vme || cpu_has_tsc || cpu_has_de) 15.537 - clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE); 15.538 - if (tsc_disable && cpu_has_tsc) { 15.539 - printk(KERN_NOTICE "Disabling TSC...\n"); 15.540 - /**** FIX-HPA: DOES THIS REALLY BELONG HERE? ****/ 15.541 - clear_bit(X86_FEATURE_TSC, boot_cpu_data.x86_capability); 15.542 - set_in_cr4(X86_CR4_TSD); 15.543 - } 15.544 - 15.545 - /* 15.546 - * Initialize the per-CPU GDT with the boot GDT, 15.547 - * and set up the GDT descriptor: 15.548 - */ 15.549 - if (cpu) { 15.550 - cpu_gdt_descr[cpu].size = GDT_SIZE; 15.551 - cpu_gdt_descr[cpu].address = 0; /* XXXcl alloc page */ 15.552 - BUG(); /* XXXcl SMP */ 15.553 - memcpy((void *)cpu_gdt_descr[cpu].address, 15.554 - (void *)cpu_gdt_descr[0].address, GDT_SIZE); 15.555 - } 15.556 - /* 15.557 - * Set up the per-thread TLS descriptor cache: 15.558 - */ 15.559 - memcpy(thread->tls_array, &get_cpu_gdt_table(cpu)[GDT_ENTRY_TLS_MIN], 15.560 - GDT_ENTRY_TLS_ENTRIES * 8); 15.561 - 15.562 - cpu_gdt_init(&cpu_gdt_descr[cpu]); 15.563 - 15.564 - /* 15.565 - * Delete NT 15.566 - */ 15.567 - __asm__("pushfl ; andl $0xffffbfff,(%esp) ; popfl"); 15.568 - 15.569 - /* 15.570 - * Set up and load the per-CPU TSS and LDT 15.571 - */ 15.572 - atomic_inc(&init_mm.mm_count); 15.573 - current->active_mm = &init_mm; 15.574 - if (current->mm) 15.575 - BUG(); 15.576 - enter_lazy_tlb(&init_mm, current); 15.577 - 15.578 - load_esp0(t, thread); 15.579 - 15.580 - load_LDT(&init_mm.context); 15.581 - flush_page_update_queue(); 15.582 - 15.583 - /* Clear %fs and %gs. */ 15.584 - asm volatile ("xorl %eax, %eax; movl %eax, %fs; movl %eax, %gs"); 15.585 - 15.586 - /* Clear all 6 debug registers: */ 15.587 - 15.588 -#define CD(register) HYPERVISOR_set_debugreg(register, 0) 15.589 - 15.590 - CD(0); CD(1); CD(2); CD(3); /* no db4 and db5 */; CD(6); CD(7); 15.591 - 15.592 -#undef CD 15.593 - 15.594 - /* 15.595 - * Force FPU initialization: 15.596 - */ 15.597 - current_thread_info()->status = 0; 15.598 - current->used_math = 0; 15.599 - mxcsr_feature_mask_init(); 15.600 -}
16.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/entry.S Wed Aug 25 16:26:15 2004 +0000 16.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 16.3 @@ -1,1029 +0,0 @@ 16.4 -/* 16.5 - * linux/arch/i386/entry.S 16.6 - * 16.7 - * Copyright (C) 1991, 1992 Linus Torvalds 16.8 - */ 16.9 - 16.10 -/* 16.11 - * entry.S contains the system-call and fault low-level handling routines. 16.12 - * This also contains the timer-interrupt handler, as well as all interrupts 16.13 - * and faults that can result in a task-switch. 16.14 - * 16.15 - * NOTE: This code handles signal-recognition, which happens every time 16.16 - * after a timer-interrupt and after each system call. 16.17 - * 16.18 - * I changed all the .align's to 4 (16 byte alignment), as that's faster 16.19 - * on a 486. 16.20 - * 16.21 - * Stack layout in 'ret_from_system_call': 16.22 - * ptrace needs to have all regs on the stack. 16.23 - * if the order here is changed, it needs to be 16.24 - * updated in fork.c:copy_process, signal.c:do_signal, 16.25 - * ptrace.c and ptrace.h 16.26 - * 16.27 - * 0(%esp) - %ebx 16.28 - * 4(%esp) - %ecx 16.29 - * 8(%esp) - %edx 16.30 - * C(%esp) - %esi 16.31 - * 10(%esp) - %edi 16.32 - * 14(%esp) - %ebp 16.33 - * 18(%esp) - %eax 16.34 - * 1C(%esp) - %ds 16.35 - * 20(%esp) - %es 16.36 - * 24(%esp) - orig_eax 16.37 - * 28(%esp) - %eip 16.38 - * 2C(%esp) - %cs 16.39 - * 30(%esp) - %eflags 16.40 - * 34(%esp) - %oldesp 16.41 - * 38(%esp) - %oldss 16.42 - * 16.43 - * "current" is in register %ebx during any slow entries. 16.44 - */ 16.45 - 16.46 -#include <linux/config.h> 16.47 -#include <linux/linkage.h> 16.48 -#include <asm/thread_info.h> 16.49 -#include <asm/errno.h> 16.50 -#include <asm/segment.h> 16.51 -#include <asm/smp.h> 16.52 -#include <asm/page.h> 16.53 -#include "irq_vectors.h" 16.54 -#include <asm/hypervisor-ifs/hypervisor-if.h> 16.55 - 16.56 -#define nr_syscalls ((syscall_table_size)/4) 16.57 - 16.58 -EBX = 0x00 16.59 -ECX = 0x04 16.60 -EDX = 0x08 16.61 -ESI = 0x0C 16.62 -EDI = 0x10 16.63 -EBP = 0x14 16.64 -EAX = 0x18 16.65 -DS = 0x1C 16.66 -ES = 0x20 16.67 -ORIG_EAX = 0x24 16.68 -EIP = 0x28 16.69 -CS = 0x2C 16.70 -EFLAGS = 0x30 16.71 -OLDESP = 0x34 16.72 -OLDSS = 0x38 16.73 - 16.74 -CF_MASK = 0x00000001 16.75 -TF_MASK = 0x00000100 16.76 -IF_MASK = 0x00000200 16.77 -DF_MASK = 0x00000400 16.78 -NT_MASK = 0x00004000 16.79 -VM_MASK = 0x00020000 16.80 - 16.81 -/* Offsets into shared_info_t. */ 16.82 -#define evtchn_upcall_pending /* 0 */ 16.83 -#define evtchn_upcall_mask 1 16.84 - 16.85 -#define XEN_BLOCK_EVENTS(reg) movb $1,evtchn_upcall_mask(reg) 16.86 -#define XEN_UNBLOCK_EVENTS(reg) movb $0,evtchn_upcall_mask(reg) 16.87 -#define XEN_TEST_PENDING(reg) testb $0xFF,evtchn_upcall_pending(%reg) 16.88 - 16.89 -#ifdef CONFIG_PREEMPT 16.90 -#define preempt_stop movl HYPERVISOR_shared_info,%esi ; \ 16.91 - XEN_BLOCK_EVENTS(%esi) 16.92 -#else 16.93 -#define preempt_stop 16.94 -#define resume_kernel restore_all 16.95 -#endif 16.96 - 16.97 -#define SAVE_ALL \ 16.98 - cld; \ 16.99 - pushl %es; \ 16.100 - pushl %ds; \ 16.101 - pushl %eax; \ 16.102 - pushl %ebp; \ 16.103 - pushl %edi; \ 16.104 - pushl %esi; \ 16.105 - pushl %edx; \ 16.106 - pushl %ecx; \ 16.107 - pushl %ebx; \ 16.108 - movl $(__KERNEL_DS), %edx; \ 16.109 - movl %edx, %ds; \ 16.110 - movl %edx, %es; 16.111 - # XXXcl USER? 16.112 - 16.113 -#define RESTORE_INT_REGS \ 16.114 - popl %ebx; \ 16.115 - popl %ecx; \ 16.116 - popl %edx; \ 16.117 - popl %esi; \ 16.118 - popl %edi; \ 16.119 - popl %ebp; \ 16.120 - popl %eax 16.121 - 16.122 -#define RESTORE_REGS \ 16.123 - RESTORE_INT_REGS; \ 16.124 -1: popl %ds; \ 16.125 -2: popl %es; \ 16.126 -.section .fixup,"ax"; \ 16.127 -3: movl $0,(%esp); \ 16.128 - jmp 1b; \ 16.129 -4: movl $0,(%esp); \ 16.130 - jmp 2b; \ 16.131 -.previous; \ 16.132 -.section __ex_table,"a";\ 16.133 - .align 4; \ 16.134 - .long 1b,3b; \ 16.135 - .long 2b,4b; \ 16.136 -.previous 16.137 - 16.138 - 16.139 -#define RESTORE_ALL \ 16.140 - RESTORE_REGS \ 16.141 - addl $4, %esp; \ 16.142 -1: iret; \ 16.143 -.section .fixup,"ax"; \ 16.144 -2: movl $(__USER_DS), %edx; \ 16.145 - movl %edx, %ds; \ 16.146 - movl %edx, %es; \ 16.147 - pushl $11; \ 16.148 - call do_exit; \ 16.149 -.previous; \ 16.150 -.section __ex_table,"a";\ 16.151 - .align 4; \ 16.152 - .long 1b,2b; \ 16.153 -.previous 16.154 - 16.155 - 16.156 - 16.157 -ENTRY(lcall7) 16.158 - pushfl # We get a different stack layout with call 16.159 - # gates, which has to be cleaned up later.. 16.160 - pushl %eax 16.161 - SAVE_ALL 16.162 - movl %esp, %ebp 16.163 - pushl %ebp 16.164 - pushl $0x7 16.165 -do_lcall: 16.166 - movl EIP(%ebp), %eax # due to call gates, this is eflags, not eip.. 16.167 - movl CS(%ebp), %edx # this is eip.. 16.168 - movl EFLAGS(%ebp), %ecx # and this is cs.. 16.169 - movl %eax,EFLAGS(%ebp) # 16.170 - movl %edx,EIP(%ebp) # Now we move them to their "normal" places 16.171 - movl %ecx,CS(%ebp) # 16.172 - GET_THREAD_INFO_WITH_ESP(%ebp) # GET_THREAD_INFO 16.173 - movl TI_exec_domain(%ebp), %edx # Get the execution domain 16.174 - call *EXEC_DOMAIN_handler(%edx) # Call the handler for the domain 16.175 - addl $4, %esp 16.176 - popl %eax 16.177 - jmp resume_userspace 16.178 - 16.179 -ENTRY(lcall27) 16.180 - pushfl # We get a different stack layout with call 16.181 - # gates, which has to be cleaned up later.. 16.182 - pushl %eax 16.183 - SAVE_ALL 16.184 - movl %esp, %ebp 16.185 - pushl %ebp 16.186 - pushl $0x27 16.187 - jmp do_lcall 16.188 - 16.189 - 16.190 -ENTRY(ret_from_fork) 16.191 - pushl %eax 16.192 - call schedule_tail 16.193 - GET_THREAD_INFO(%ebp) 16.194 - popl %eax 16.195 - jmp syscall_exit 16.196 - 16.197 -/* 16.198 - * Return to user mode is not as complex as all this looks, 16.199 - * but we want the default path for a system call return to 16.200 - * go as quickly as possible which is why some of this is 16.201 - * less clear than it otherwise should be. 16.202 - */ 16.203 - 16.204 - # userspace resumption stub bypassing syscall exit tracing 16.205 - ALIGN 16.206 -ret_from_exception: 16.207 - preempt_stop 16.208 -ret_from_intr: 16.209 - GET_THREAD_INFO(%ebp) 16.210 - movl EFLAGS(%esp), %eax # mix EFLAGS and CS 16.211 - movb CS(%esp), %al 16.212 - testl $(VM_MASK | 2), %eax 16.213 - jz resume_kernel # returning to kernel or vm86-space 16.214 -ENTRY(resume_userspace) 16.215 - movl HYPERVISOR_shared_info,%esi 16.216 - XEN_BLOCK_EVENTS(%esi) # make tests atomic 16.217 - # make sure we don't miss an interrupt 16.218 - # setting need_resched or sigpending 16.219 - # between sampling and the iret 16.220 -ret_syscall_tests: 16.221 - movl TI_flags(%ebp), %ecx 16.222 - andl $_TIF_WORK_MASK, %ecx # is there any work to be done on 16.223 - # int/exception return? 16.224 - jne work_pending 16.225 - jmp restore_all_enable_events 16.226 - 16.227 -#ifdef CONFIG_PREEMPT 16.228 -ENTRY(resume_kernel) 16.229 - movl HYPERVISOR_shared_info,%esi 16.230 - cmpl $0,TI_preempt_count(%ebp) # non-zero preempt_count ? 16.231 - jnz restore_all_enable_events 16.232 -need_resched: 16.233 - movl TI_flags(%ebp), %ecx # need_resched set ? 16.234 - testb $_TIF_NEED_RESCHED, %cl 16.235 - jz restore_all_enable_events 16.236 - testl $IF_MASK,EFLAGS(%esp) # interrupts off (exception path) ? 16.237 - jz restore_all_enable_events 16.238 - movl $PREEMPT_ACTIVE,TI_preempt_count(%ebp) 16.239 - XEN_UNBLOCK_EVENTS(%esi) # reenable event callbacks 16.240 - call schedule 16.241 - movl $0,TI_preempt_count(%ebp) 16.242 - movl HYPERVISOR_shared_info,%esi 16.243 - XEN_BLOCK_EVENTS(%esi) # make tests atomic 16.244 - jmp need_resched 16.245 -#endif 16.246 - 16.247 -/* SYSENTER_RETURN points to after the "sysenter" instruction in 16.248 - the vsyscall page. See vsyscall-sysentry.S, which defines the symbol. */ 16.249 - 16.250 - # sysenter call handler stub 16.251 -ENTRY(sysenter_entry) 16.252 - movl TSS_sysenter_esp0(%esp),%esp 16.253 -sysenter_past_esp: 16.254 - sti 16.255 - pushl $(__USER_DS) 16.256 - pushl %ebp 16.257 - pushfl 16.258 - pushl $(__USER_CS) 16.259 - pushl $SYSENTER_RETURN 16.260 - 16.261 -/* 16.262 - * Load the potential sixth argument from user stack. 16.263 - * Careful about security. 16.264 - */ 16.265 - cmpl $__PAGE_OFFSET-3,%ebp 16.266 - jae syscall_fault 16.267 -1: movl (%ebp),%ebp 16.268 -.section __ex_table,"a" 16.269 - .align 4 16.270 - .long 1b,syscall_fault 16.271 -.previous 16.272 - 16.273 - pushl %eax 16.274 - SAVE_ALL 16.275 - GET_THREAD_INFO(%ebp) 16.276 - cmpl $(nr_syscalls), %eax 16.277 - jae syscall_badsys 16.278 - 16.279 - testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%ebp) 16.280 - jnz syscall_trace_entry 16.281 - call *sys_call_table(,%eax,4) 16.282 - movl %eax,EAX(%esp) 16.283 - cli 16.284 - movl TI_flags(%ebp), %ecx 16.285 - testw $_TIF_ALLWORK_MASK, %cx 16.286 - jne syscall_exit_work 16.287 -/* if something modifies registers it must also disable sysexit */ 16.288 - movl EIP(%esp), %edx 16.289 - movl OLDESP(%esp), %ecx 16.290 - sti 16.291 - sysexit 16.292 - 16.293 - 16.294 - # system call handler stub 16.295 -ENTRY(system_call) 16.296 - pushl %eax # save orig_eax 16.297 - SAVE_ALL 16.298 - GET_THREAD_INFO(%ebp) 16.299 - cmpl $(nr_syscalls), %eax 16.300 - jae syscall_badsys 16.301 - # system call tracing in operation 16.302 - testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%ebp) 16.303 - jnz syscall_trace_entry 16.304 -syscall_call: 16.305 - call *sys_call_table(,%eax,4) 16.306 - movl %eax,EAX(%esp) # store the return value 16.307 -syscall_exit: 16.308 - movl HYPERVISOR_shared_info,%esi 16.309 - XEN_BLOCK_EVENTS(%esi) # make tests atomic 16.310 - # make sure we don't miss an interrupt 16.311 - # setting need_resched or sigpending 16.312 - # between sampling and the iret 16.313 - movl TI_flags(%ebp), %ecx 16.314 - testw $_TIF_ALLWORK_MASK, %cx # current->work 16.315 - jne syscall_exit_work 16.316 - jmp restore_all_enable_events 16.317 - 16.318 - ALIGN 16.319 -restore_all: 16.320 - RESTORE_ALL 16.321 - 16.322 - # perform work that needs to be done immediately before resumption 16.323 - ALIGN 16.324 -work_pending: 16.325 - XEN_UNBLOCK_EVENTS(%esi) # reenable event callbacks 16.326 - testb $_TIF_NEED_RESCHED, %cl 16.327 - jz work_notifysig 16.328 -work_resched: 16.329 - call schedule 16.330 - movl HYPERVISOR_shared_info,%esi 16.331 - XEN_BLOCK_EVENTS(%esi) # make tests atomic 16.332 - # make sure we don't miss an interrupt 16.333 - # setting need_resched or sigpending 16.334 - # between sampling and the iret 16.335 - movl TI_flags(%ebp), %ecx 16.336 - andl $_TIF_WORK_MASK, %ecx # is there any work to be done other 16.337 - # than syscall tracing? 16.338 - jz restore_all_enable_events 16.339 - # XXXcl sti missing??? 16.340 - XEN_UNBLOCK_EVENTS(%esi) # reenable event callbacks 16.341 - testb $_TIF_NEED_RESCHED, %cl 16.342 - jnz work_resched 16.343 - 16.344 -work_notifysig: # deal with pending signals and 16.345 - # notify-resume requests 16.346 - testl $VM_MASK, EFLAGS(%esp) 16.347 - movl %esp, %eax 16.348 - jne work_notifysig_v86 # returning to kernel-space or 16.349 - # vm86-space 16.350 - xorl %edx, %edx 16.351 - call do_notify_resume 16.352 - movl HYPERVISOR_shared_info,%esi 16.353 - jmp restore_all_enable_events 16.354 - 16.355 - ALIGN 16.356 -work_notifysig_v86: 16.357 - pushl %ecx 16.358 - call save_v86_state 16.359 - popl %ecx 16.360 - movl %eax, %esp 16.361 - xorl %edx, %edx 16.362 - call do_notify_resume 16.363 - movl HYPERVISOR_shared_info,%esi 16.364 - jmp restore_all_enable_events 16.365 - 16.366 - # perform syscall exit tracing 16.367 - ALIGN 16.368 -syscall_trace_entry: 16.369 - movl $-ENOSYS,EAX(%esp) 16.370 - movl %esp, %eax 16.371 - xorl %edx,%edx 16.372 - call do_syscall_trace 16.373 - movl ORIG_EAX(%esp), %eax 16.374 - cmpl $(nr_syscalls), %eax 16.375 - jnae syscall_call 16.376 - jmp syscall_exit 16.377 - 16.378 - # perform syscall exit tracing 16.379 - ALIGN 16.380 -syscall_exit_work: 16.381 - movl HYPERVISOR_shared_info,%esi 16.382 - testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT), %cl 16.383 - jz work_pending 16.384 - XEN_UNBLOCK_EVENTS(%esi) # reenable event callbacks 16.385 - # could let do_syscall_trace() call 16.386 - # schedule() instead 16.387 - movl %esp, %eax 16.388 - movl $1, %edx 16.389 - call do_syscall_trace 16.390 - jmp resume_userspace 16.391 - 16.392 - ALIGN 16.393 -syscall_fault: 16.394 - pushl %eax # save orig_eax 16.395 - SAVE_ALL 16.396 - GET_THREAD_INFO(%ebp) 16.397 - movl $-EFAULT,EAX(%esp) 16.398 - jmp resume_userspace 16.399 - 16.400 - ALIGN 16.401 -syscall_badsys: 16.402 - movl $-ENOSYS,EAX(%esp) 16.403 - jmp resume_userspace 16.404 - 16.405 -ENTRY(divide_error) 16.406 - pushl $0 # no error code 16.407 - pushl $do_divide_error 16.408 - ALIGN 16.409 -error_code: 16.410 - pushl %ds 16.411 - pushl %eax 16.412 - xorl %eax, %eax 16.413 - pushl %ebp 16.414 - pushl %edi 16.415 - pushl %esi 16.416 - pushl %edx 16.417 - decl %eax # eax = -1 16.418 - pushl %ecx 16.419 - pushl %ebx 16.420 - cld 16.421 - movl %es, %ecx 16.422 - movl ORIG_EAX(%esp), %esi # get the error code 16.423 - movl ES(%esp), %edi # get the function address 16.424 - movl %eax, ORIG_EAX(%esp) 16.425 - movl %ecx, ES(%esp) 16.426 - movl %esp, %edx 16.427 - pushl %esi # push the error code 16.428 - pushl %edx # push the pt_regs pointer 16.429 - movl $(__KERNEL_DS), %edx # XXXcl USER? 16.430 - movl %edx, %ds 16.431 - movl %edx, %es 16.432 - call *%edi 16.433 - addl $8, %esp 16.434 - jmp ret_from_exception 16.435 - 16.436 -# A note on the "critical region" in our callback handler. 16.437 -# We want to avoid stacking callback handlers due to events occurring 16.438 -# during handling of the last event. To do this, we keep events disabled 16.439 -# until we've done all processing. HOWEVER, we must enable events before 16.440 -# popping the stack frame (can't be done atomically) and so it would still 16.441 -# be possible to get enough handler activations to overflow the stack. 16.442 -# Although unlikely, bugs of that kind are hard to track down, so we'd 16.443 -# like to avoid the possibility. 16.444 -# So, on entry to the handler we detect whether we interrupted an 16.445 -# existing activation in its critical region -- if so, we pop the current 16.446 -# activation and restart the handler using the previous one. 16.447 -ENTRY(hypervisor_callback) 16.448 - pushl %eax 16.449 - SAVE_ALL 16.450 - GET_THREAD_INFO(%ebp) 16.451 - movl EIP(%esp),%eax 16.452 - cmpl $scrit,%eax 16.453 - jb 11f 16.454 - cmpl $ecrit,%eax 16.455 - jb critical_region_fixup 16.456 -11: push %esp 16.457 - call evtchn_do_upcall 16.458 - add $4,%esp 16.459 - movl HYPERVISOR_shared_info,%esi 16.460 - movb CS(%esp),%cl 16.461 - test $2,%cl # slow return to ring 2 or 3 16.462 - jne ret_syscall_tests 16.463 -restore_all_enable_events: 16.464 -safesti:XEN_UNBLOCK_EVENTS(%esi) # reenable event callbacks 16.465 -scrit: /**** START OF CRITICAL REGION ****/ 16.466 - testb $1,evtchn_upcall_pending(%esi) 16.467 - jnz 14f # process more events if necessary... 16.468 - RESTORE_ALL 16.469 -14: XEN_BLOCK_EVENTS(%esi) 16.470 - jmp 11b 16.471 -ecrit: /**** END OF CRITICAL REGION ****/ 16.472 -# [How we do the fixup]. We want to merge the current stack frame with the 16.473 -# just-interrupted frame. How we do this depends on where in the critical 16.474 -# region the interrupted handler was executing, and so how many saved 16.475 -# registers are in each frame. We do this quickly using the lookup table 16.476 -# 'critical_fixup_table'. For each byte offset in the critical region, it 16.477 -# provides the number of bytes which have already been popped from the 16.478 -# interrupted stack frame. 16.479 -critical_region_fixup: 16.480 - addl $critical_fixup_table-scrit,%eax 16.481 - movzbl (%eax),%eax # %eax contains num bytes popped 16.482 - mov %esp,%esi 16.483 - add %eax,%esi # %esi points at end of src region 16.484 - mov %esp,%edi 16.485 - add $0x34,%edi # %edi points at end of dst region 16.486 - mov %eax,%ecx 16.487 - shr $2,%ecx # convert words to bytes 16.488 - je 16f # skip loop if nothing to copy 16.489 -15: subl $4,%esi # pre-decrementing copy loop 16.490 - subl $4,%edi 16.491 - movl (%esi),%eax 16.492 - movl %eax,(%edi) 16.493 - loop 15b 16.494 -16: movl %edi,%esp # final %edi is top of merged stack 16.495 - jmp 11b 16.496 - 16.497 -critical_fixup_table: 16.498 - .byte 0x00,0x00,0x00 # testb $0xff,(%esi) 16.499 - .byte 0x00,0x00 # jnz 14f 16.500 - .byte 0x00 # pop %ebx 16.501 - .byte 0x04 # pop %ecx 16.502 - .byte 0x08 # pop %edx 16.503 - .byte 0x0c # pop %esi 16.504 - .byte 0x10 # pop %edi 16.505 - .byte 0x14 # pop %ebp 16.506 - .byte 0x18 # pop %eax 16.507 - .byte 0x1c # pop %ds 16.508 - .byte 0x20 # pop %es 16.509 - .byte 0x24,0x24,0x24 # add $4,%esp 16.510 - .byte 0x28 # iret 16.511 - .byte 0x00,0x00,0x00,0x00 # movb $1,1(%esi) 16.512 - .byte 0x00,0x00 # jmp 11b 16.513 - 16.514 -# Hypervisor uses this for application faults while it executes. 16.515 -ENTRY(failsafe_callback) 16.516 - pushal 16.517 - call install_safe_pf_handler 16.518 - movl 32(%esp),%ebx 16.519 -1: movl %ebx,%ds 16.520 - movl 36(%esp),%ebx 16.521 -2: movl %ebx,%es 16.522 - movl 40(%esp),%ebx 16.523 -3: movl %ebx,%fs 16.524 - movl 44(%esp),%ebx 16.525 -4: movl %ebx,%gs 16.526 - call install_normal_pf_handler 16.527 - popal 16.528 - addl $16,%esp 16.529 -5: iret 16.530 -.section .fixup,"ax"; \ 16.531 -6: xorl %ebx,%ebx; \ 16.532 - jmp 1b; \ 16.533 -7: xorl %ebx,%ebx; \ 16.534 - jmp 2b; \ 16.535 -8: xorl %ebx,%ebx; \ 16.536 - jmp 3b; \ 16.537 -9: xorl %ebx,%ebx; \ 16.538 - jmp 4b; \ 16.539 -10: pushl %ss; \ 16.540 - popl %ds; \ 16.541 - pushl %ss; \ 16.542 - popl %es; \ 16.543 - pushl $11; \ 16.544 - call do_exit; \ 16.545 -.previous; \ 16.546 -.section __ex_table,"a";\ 16.547 - .align 4; \ 16.548 - .long 1b,6b; \ 16.549 - .long 2b,7b; \ 16.550 - .long 3b,8b; \ 16.551 - .long 4b,9b; \ 16.552 - .long 5b,10b; \ 16.553 -.previous 16.554 - 16.555 -ENTRY(coprocessor_error) 16.556 - pushl $0 16.557 - pushl $do_coprocessor_error 16.558 - jmp error_code 16.559 - 16.560 -ENTRY(simd_coprocessor_error) 16.561 - pushl $0 16.562 - pushl $do_simd_coprocessor_error 16.563 - jmp error_code 16.564 - 16.565 -ENTRY(device_not_available) 16.566 - pushl $-1 # mark this as an int 16.567 - SAVE_ALL 16.568 - preempt_stop 16.569 - call math_state_restore 16.570 - jmp ret_from_exception 16.571 - 16.572 -/* 16.573 - * Debug traps and NMI can happen at the one SYSENTER instruction 16.574 - * that sets up the real kernel stack. Check here, since we can't 16.575 - * allow the wrong stack to be used. 16.576 - * 16.577 - * "TSS_sysenter_esp0+12" is because the NMI/debug handler will have 16.578 - * already pushed 3 words if it hits on the sysenter instruction: 16.579 - * eflags, cs and eip. 16.580 - * 16.581 - * We just load the right stack, and push the three (known) values 16.582 - * by hand onto the new stack - while updating the return eip past 16.583 - * the instruction that would have done it for sysenter. 16.584 - */ 16.585 -#define FIX_STACK(offset, ok, label) \ 16.586 - cmpw $__KERNEL_CS,4(%esp); \ 16.587 - jne ok; \ 16.588 -label: \ 16.589 - movl TSS_sysenter_esp0+offset(%esp),%esp; \ 16.590 - pushfl; \ 16.591 - pushl $__KERNEL_CS; \ 16.592 - pushl $sysenter_past_esp 16.593 - 16.594 -ENTRY(debug) 16.595 - cmpl $sysenter_entry,(%esp) 16.596 - jne debug_stack_correct 16.597 - FIX_STACK(12, debug_stack_correct, debug_esp_fix_insn) 16.598 -debug_stack_correct: 16.599 - pushl $0 16.600 - pushl $do_debug 16.601 - jmp error_code 16.602 - 16.603 -#if 0 16.604 -/* 16.605 - * NMI is doubly nasty. It can happen _while_ we're handling 16.606 - * a debug fault, and the debug fault hasn't yet been able to 16.607 - * clear up the stack. So we first check whether we got an 16.608 - * NMI on the sysenter entry path, but after that we need to 16.609 - * check whether we got an NMI on the debug path where the debug 16.610 - * fault happened on the sysenter path. 16.611 - */ 16.612 -ENTRY(nmi) 16.613 - cmpl $sysenter_entry,(%esp) 16.614 - je nmi_stack_fixup 16.615 - pushl %eax 16.616 - movl %esp,%eax 16.617 - /* Do not access memory above the end of our stack page, 16.618 - * it might not exist. 16.619 - */ 16.620 - andl $(THREAD_SIZE-1),%eax 16.621 - cmpl $(THREAD_SIZE-20),%eax 16.622 - popl %eax 16.623 - jae nmi_stack_correct 16.624 - cmpl $sysenter_entry,12(%esp) 16.625 - je nmi_debug_stack_check 16.626 -nmi_stack_correct: 16.627 - pushl %eax 16.628 - SAVE_ALL 16.629 - movl %esp, %edx 16.630 - pushl $0 16.631 - pushl %edx 16.632 - call do_nmi 16.633 - addl $8, %esp 16.634 - RESTORE_ALL 16.635 - 16.636 -nmi_stack_fixup: 16.637 - FIX_STACK(12,nmi_stack_correct, 1) 16.638 - jmp nmi_stack_correct 16.639 -nmi_debug_stack_check: 16.640 - cmpw $__KERNEL_CS,16(%esp) 16.641 - jne nmi_stack_correct 16.642 - cmpl $debug - 1,(%esp) 16.643 - jle nmi_stack_correct 16.644 - cmpl $debug_esp_fix_insn,(%esp) 16.645 - jle nmi_debug_stack_fixup 16.646 -nmi_debug_stack_fixup: 16.647 - FIX_STACK(24,nmi_stack_correct, 1) 16.648 - jmp nmi_stack_correct 16.649 -#endif 16.650 - 16.651 -ENTRY(int3) 16.652 - pushl $0 16.653 - pushl $do_int3 16.654 - jmp error_code 16.655 - 16.656 -ENTRY(overflow) 16.657 - pushl $0 16.658 - pushl $do_overflow 16.659 - jmp error_code 16.660 - 16.661 -ENTRY(bounds) 16.662 - pushl $0 16.663 - pushl $do_bounds 16.664 - jmp error_code 16.665 - 16.666 -ENTRY(invalid_op) 16.667 - pushl $0 16.668 - pushl $do_invalid_op 16.669 - jmp error_code 16.670 - 16.671 -ENTRY(coprocessor_segment_overrun) 16.672 - pushl $0 16.673 - pushl $do_coprocessor_segment_overrun 16.674 - jmp error_code 16.675 - 16.676 -ENTRY(double_fault) 16.677 - pushl $do_double_fault 16.678 - jmp error_code 16.679 - 16.680 -ENTRY(invalid_TSS) 16.681 - pushl $do_invalid_TSS 16.682 - jmp error_code 16.683 - 16.684 -ENTRY(segment_not_present) 16.685 - pushl $do_segment_not_present 16.686 - jmp error_code 16.687 - 16.688 -ENTRY(stack_segment) 16.689 - pushl $do_stack_segment 16.690 - jmp error_code 16.691 - 16.692 -ENTRY(general_protection) 16.693 - pushl $do_general_protection 16.694 - jmp error_code 16.695 - 16.696 -ENTRY(alignment_check) 16.697 - pushl $do_alignment_check 16.698 - jmp error_code 16.699 - 16.700 -# This handler is special, because it gets an extra value on its stack, 16.701 -# which is the linear faulting address. 16.702 -#define PAGE_FAULT_STUB(_name1, _name2) \ 16.703 -ENTRY(_name1) \ 16.704 - pushl %ds ; \ 16.705 - pushl %eax ; \ 16.706 - xorl %eax,%eax ; \ 16.707 - pushl %ebp ; \ 16.708 - pushl %edi ; \ 16.709 - pushl %esi ; \ 16.710 - pushl %edx ; \ 16.711 - decl %eax /* eax = -1 */ ; \ 16.712 - pushl %ecx ; \ 16.713 - pushl %ebx ; \ 16.714 - GET_THREAD_INFO(%ebp) ; \ 16.715 - cld ; \ 16.716 - movl %es,%ecx ; \ 16.717 - movl ORIG_EAX(%esp), %esi /* get the error code */ ; \ 16.718 - movl ES(%esp), %edi /* get the faulting address */ ; \ 16.719 - movl %eax, ORIG_EAX(%esp) ; \ 16.720 - movl %ecx, ES(%esp) ; \ 16.721 - movl %esp,%edx ; \ 16.722 - pushl %edi /* push the faulting address */ ; \ 16.723 - pushl %esi /* push the error code */ ; \ 16.724 - pushl %edx /* push the pt_regs pointer */ ; \ 16.725 - movl $(__KERNEL_DS),%edx ; \ 16.726 - movl %edx,%ds ; \ 16.727 - movl %edx,%es ; \ 16.728 - call _name2 ; \ 16.729 - addl $12,%esp ; \ 16.730 - jmp ret_from_exception ; 16.731 -PAGE_FAULT_STUB(page_fault, do_page_fault) 16.732 -PAGE_FAULT_STUB(safe_page_fault, do_safe_page_fault) 16.733 - 16.734 -#ifdef CONFIG_X86_MCE 16.735 -ENTRY(machine_check) 16.736 - pushl $0 16.737 - pushl machine_check_vector 16.738 - jmp error_code 16.739 -#endif 16.740 - 16.741 -ENTRY(fixup_4gb_segment) 16.742 - pushl $do_fixup_4gb_segment 16.743 - jmp error_code 16.744 - 16.745 -.data 16.746 -ENTRY(sys_call_table) 16.747 - .long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */ 16.748 - .long sys_exit 16.749 - .long sys_fork 16.750 - .long sys_read 16.751 - .long sys_write 16.752 - .long sys_open /* 5 */ 16.753 - .long sys_close 16.754 - .long sys_waitpid 16.755 - .long sys_creat 16.756 - .long sys_link 16.757 - .long sys_unlink /* 10 */ 16.758 - .long sys_execve 16.759 - .long sys_chdir 16.760 - .long sys_time 16.761 - .long sys_mknod 16.762 - .long sys_chmod /* 15 */ 16.763 - .long sys_lchown16 16.764 - .long sys_ni_syscall /* old break syscall holder */ 16.765 - .long sys_stat 16.766 - .long sys_lseek 16.767 - .long sys_getpid /* 20 */ 16.768 - .long sys_mount 16.769 - .long sys_oldumount 16.770 - .long sys_setuid16 16.771 - .long sys_getuid16 16.772 - .long sys_stime /* 25 */ 16.773 - .long sys_ptrace 16.774 - .long sys_alarm 16.775 - .long sys_fstat 16.776 - .long sys_pause 16.777 - .long sys_utime /* 30 */ 16.778 - .long sys_ni_syscall /* old stty syscall holder */ 16.779 - .long sys_ni_syscall /* old gtty syscall holder */ 16.780 - .long sys_access 16.781 - .long sys_nice 16.782 - .long sys_ni_syscall /* 35 - old ftime syscall holder */ 16.783 - .long sys_sync 16.784 - .long sys_kill 16.785 - .long sys_rename 16.786 - .long sys_mkdir 16.787 - .long sys_rmdir /* 40 */ 16.788 - .long sys_dup 16.789 - .long sys_pipe 16.790 - .long sys_times 16.791 - .long sys_ni_syscall /* old prof syscall holder */ 16.792 - .long sys_brk /* 45 */ 16.793 - .long sys_setgid16 16.794 - .long sys_getgid16 16.795 - .long sys_signal 16.796 - .long sys_geteuid16 16.797 - .long sys_getegid16 /* 50 */ 16.798 - .long sys_acct 16.799 - .long sys_umount /* recycled never used phys() */ 16.800 - .long sys_ni_syscall /* old lock syscall holder */ 16.801 - .long sys_ioctl 16.802 - .long sys_fcntl /* 55 */ 16.803 - .long sys_ni_syscall /* old mpx syscall holder */ 16.804 - .long sys_setpgid 16.805 - .long sys_ni_syscall /* old ulimit syscall holder */ 16.806 - .long sys_olduname 16.807 - .long sys_umask /* 60 */ 16.808 - .long sys_chroot 16.809 - .long sys_ustat 16.810 - .long sys_dup2 16.811 - .long sys_getppid 16.812 - .long sys_getpgrp /* 65 */ 16.813 - .long sys_setsid 16.814 - .long sys_sigaction 16.815 - .long sys_sgetmask 16.816 - .long sys_ssetmask 16.817 - .long sys_setreuid16 /* 70 */ 16.818 - .long sys_setregid16 16.819 - .long sys_sigsuspend 16.820 - .long sys_sigpending 16.821 - .long sys_sethostname 16.822 - .long sys_setrlimit /* 75 */ 16.823 - .long sys_old_getrlimit 16.824 - .long sys_getrusage 16.825 - .long sys_gettimeofday 16.826 - .long sys_settimeofday 16.827 - .long sys_getgroups16 /* 80 */ 16.828 - .long sys_setgroups16 16.829 - .long old_select 16.830 - .long sys_symlink 16.831 - .long sys_lstat 16.832 - .long sys_readlink /* 85 */ 16.833 - .long sys_uselib 16.834 - .long sys_swapon 16.835 - .long sys_reboot 16.836 - .long old_readdir 16.837 - .long old_mmap /* 90 */ 16.838 - .long sys_munmap 16.839 - .long sys_truncate 16.840 - .long sys_ftruncate 16.841 - .long sys_fchmod 16.842 - .long sys_fchown16 /* 95 */ 16.843 - .long sys_getpriority 16.844 - .long sys_setpriority 16.845 - .long sys_ni_syscall /* old profil syscall holder */ 16.846 - .long sys_statfs 16.847 - .long sys_fstatfs /* 100 */ 16.848 - .long sys_ioperm 16.849 - .long sys_socketcall 16.850 - .long sys_syslog 16.851 - .long sys_setitimer 16.852 - .long sys_getitimer /* 105 */ 16.853 - .long sys_newstat 16.854 - .long sys_newlstat 16.855 - .long sys_newfstat 16.856 - .long sys_uname 16.857 - .long sys_iopl /* 110 */ 16.858 - .long sys_vhangup 16.859 - .long sys_ni_syscall /* old "idle" system call */ 16.860 - .long sys_vm86old 16.861 - .long sys_wait4 16.862 - .long sys_swapoff /* 115 */ 16.863 - .long sys_sysinfo 16.864 - .long sys_ipc 16.865 - .long sys_fsync 16.866 - .long sys_sigreturn 16.867 - .long sys_clone /* 120 */ 16.868 - .long sys_setdomainname 16.869 - .long sys_newuname 16.870 - .long sys_modify_ldt 16.871 - .long sys_adjtimex 16.872 - .long sys_mprotect /* 125 */ 16.873 - .long sys_sigprocmask 16.874 - .long sys_ni_syscall /* old "create_module" */ 16.875 - .long sys_init_module 16.876 - .long sys_delete_module 16.877 - .long sys_ni_syscall /* 130: old "get_kernel_syms" */ 16.878 - .long sys_quotactl 16.879 - .long sys_getpgid 16.880 - .long sys_fchdir 16.881 - .long sys_bdflush 16.882 - .long sys_sysfs /* 135 */ 16.883 - .long sys_personality 16.884 - .long sys_ni_syscall /* reserved for afs_syscall */ 16.885 - .long sys_setfsuid16 16.886 - .long sys_setfsgid16 16.887 - .long sys_llseek /* 140 */ 16.888 - .long sys_getdents 16.889 - .long sys_select 16.890 - .long sys_flock 16.891 - .long sys_msync 16.892 - .long sys_readv /* 145 */ 16.893 - .long sys_writev 16.894 - .long sys_getsid 16.895 - .long sys_fdatasync 16.896 - .long sys_sysctl 16.897 - .long sys_mlock /* 150 */ 16.898 - .long sys_munlock 16.899 - .long sys_mlockall 16.900 - .long sys_munlockall 16.901 - .long sys_sched_setparam 16.902 - .long sys_sched_getparam /* 155 */ 16.903 - .long sys_sched_setscheduler 16.904 - .long sys_sched_getscheduler 16.905 - .long sys_sched_yield 16.906 - .long sys_sched_get_priority_max 16.907 - .long sys_sched_get_priority_min /* 160 */ 16.908 - .long sys_sched_rr_get_interval 16.909 - .long sys_nanosleep 16.910 - .long sys_mremap 16.911 - .long sys_setresuid16 16.912 - .long sys_getresuid16 /* 165 */ 16.913 - .long sys_vm86 16.914 - .long sys_ni_syscall /* Old sys_query_module */ 16.915 - .long sys_poll 16.916 - .long sys_nfsservctl 16.917 - .long sys_setresgid16 /* 170 */ 16.918 - .long sys_getresgid16 16.919 - .long sys_prctl 16.920 - .long sys_rt_sigreturn 16.921 - .long sys_rt_sigaction 16.922 - .long sys_rt_sigprocmask /* 175 */ 16.923 - .long sys_rt_sigpending 16.924 - .long sys_rt_sigtimedwait 16.925 - .long sys_rt_sigqueueinfo 16.926 - .long sys_rt_sigsuspend 16.927 - .long sys_pread64 /* 180 */ 16.928 - .long sys_pwrite64 16.929 - .long sys_chown16 16.930 - .long sys_getcwd 16.931 - .long sys_capget 16.932 - .long sys_capset /* 185 */ 16.933 - .long sys_sigaltstack 16.934 - .long sys_sendfile 16.935 - .long sys_ni_syscall /* reserved for streams1 */ 16.936 - .long sys_ni_syscall /* reserved for streams2 */ 16.937 - .long sys_vfork /* 190 */ 16.938 - .long sys_getrlimit 16.939 - .long sys_mmap2 16.940 - .long sys_truncate64 16.941 - .long sys_ftruncate64 16.942 - .long sys_stat64 /* 195 */ 16.943 - .long sys_lstat64 16.944 - .long sys_fstat64 16.945 - .long sys_lchown 16.946 - .long sys_getuid 16.947 - .long sys_getgid /* 200 */ 16.948 - .long sys_geteuid 16.949 - .long sys_getegid 16.950 - .long sys_setreuid 16.951 - .long sys_setregid 16.952 - .long sys_getgroups /* 205 */ 16.953 - .long sys_setgroups 16.954 - .long sys_fchown 16.955 - .long sys_setresuid 16.956 - .long sys_getresuid 16.957 - .long sys_setresgid /* 210 */ 16.958 - .long sys_getresgid 16.959 - .long sys_chown 16.960 - .long sys_setuid 16.961 - .long sys_setgid 16.962 - .long sys_setfsuid /* 215 */ 16.963 - .long sys_setfsgid 16.964 - .long sys_pivot_root 16.965 - .long sys_mincore 16.966 - .long sys_madvise 16.967 - .long sys_getdents64 /* 220 */ 16.968 - .long sys_fcntl64 16.969 - .long sys_ni_syscall /* reserved for TUX */ 16.970 - .long sys_ni_syscall 16.971 - .long sys_gettid 16.972 - .long sys_readahead /* 225 */ 16.973 - .long sys_setxattr 16.974 - .long sys_lsetxattr 16.975 - .long sys_fsetxattr 16.976 - .long sys_getxattr 16.977 - .long sys_lgetxattr /* 230 */ 16.978 - .long sys_fgetxattr 16.979 - .long sys_listxattr 16.980 - .long sys_llistxattr 16.981 - .long sys_flistxattr 16.982 - .long sys_removexattr /* 235 */ 16.983 - .long sys_lremovexattr 16.984 - .long sys_fremovexattr 16.985 - .long sys_tkill 16.986 - .long sys_sendfile64 16.987 - .long sys_futex /* 240 */ 16.988 - .long sys_sched_setaffinity 16.989 - .long sys_sched_getaffinity 16.990 - .long sys_set_thread_area 16.991 - .long sys_get_thread_area 16.992 - .long sys_io_setup /* 245 */ 16.993 - .long sys_io_destroy 16.994 - .long sys_io_getevents 16.995 - .long sys_io_submit 16.996 - .long sys_io_cancel 16.997 - .long sys_fadvise64 /* 250 */ 16.998 - .long sys_ni_syscall 16.999 - .long sys_exit_group 16.1000 - .long sys_lookup_dcookie 16.1001 - .long sys_epoll_create 16.1002 - .long sys_epoll_ctl /* 255 */ 16.1003 - .long sys_epoll_wait 16.1004 - .long sys_remap_file_pages 16.1005 - .long sys_set_tid_address 16.1006 - .long sys_timer_create 16.1007 - .long sys_timer_settime /* 260 */ 16.1008 - .long sys_timer_gettime 16.1009 - .long sys_timer_getoverrun 16.1010 - .long sys_timer_delete 16.1011 - .long sys_clock_settime 16.1012 - .long sys_clock_gettime /* 265 */ 16.1013 - .long sys_clock_getres 16.1014 - .long sys_clock_nanosleep 16.1015 - .long sys_statfs64 16.1016 - .long sys_fstatfs64 16.1017 - .long sys_tgkill /* 270 */ 16.1018 - .long sys_utimes 16.1019 - .long sys_fadvise64_64 16.1020 - .long sys_ni_syscall /* sys_vserver */ 16.1021 - .long sys_mbind 16.1022 - .long sys_get_mempolicy 16.1023 - .long sys_set_mempolicy 16.1024 - .long sys_mq_open 16.1025 - .long sys_mq_unlink 16.1026 - .long sys_mq_timedsend 16.1027 - .long sys_mq_timedreceive /* 280 */ 16.1028 - .long sys_mq_notify 16.1029 - .long sys_mq_getsetattr 16.1030 - .long sys_ni_syscall /* reserved for kexec */ 16.1031 - 16.1032 -syscall_table_size=(.-sys_call_table)
17.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/head.S Wed Aug 25 16:26:15 2004 +0000 17.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 17.3 @@ -1,165 +0,0 @@ 17.4 - 17.5 -.section __xen_guest 17.6 - .asciz "GUEST_OS=linux,GUEST_VER=2.6,XEN_VER=1.3" 17.7 - 17.8 -.text 17.9 -#include <linux/config.h> 17.10 -#include <linux/threads.h> 17.11 -#include <linux/linkage.h> 17.12 -#include <asm/segment.h> 17.13 -#include <asm/thread_info.h> 17.14 -#include <asm/asm_offsets.h> 17.15 -#include <asm/hypervisor-ifs/arch-x86_32.h> 17.16 - 17.17 -/* 17.18 - * References to members of the new_cpu_data structure. 17.19 - */ 17.20 - 17.21 -#define X86 new_cpu_data+CPUINFO_x86 17.22 -#define X86_VENDOR new_cpu_data+CPUINFO_x86_vendor 17.23 -#define X86_MODEL new_cpu_data+CPUINFO_x86_model 17.24 -#define X86_MASK new_cpu_data+CPUINFO_x86_mask 17.25 -#define X86_HARD_MATH new_cpu_data+CPUINFO_hard_math 17.26 -#define X86_CPUID new_cpu_data+CPUINFO_cpuid_level 17.27 -#define X86_CAPABILITY new_cpu_data+CPUINFO_x86_capability 17.28 -#define X86_VENDOR_ID new_cpu_data+CPUINFO_x86_vendor_id 17.29 - 17.30 -ENTRY(startup_32) 17.31 - cld 17.32 - 17.33 - /* Set up the stack pointer */ 17.34 - lss stack_start,%esp 17.35 - 17.36 - /* Copy the necessary stuff from start_info structure. */ 17.37 - mov $start_info_union,%edi 17.38 - mov $128,%ecx 17.39 - rep movsl 17.40 - 17.41 -checkCPUtype: 17.42 - 17.43 - /* get vendor info */ 17.44 - xorl %eax,%eax # call CPUID with 0 -> return vendor ID 17.45 - cpuid 17.46 - movl %eax,X86_CPUID # save CPUID level 17.47 - movl %ebx,X86_VENDOR_ID # lo 4 chars 17.48 - movl %edx,X86_VENDOR_ID+4 # next 4 chars 17.49 - movl %ecx,X86_VENDOR_ID+8 # last 4 chars 17.50 - 17.51 - movl $1,%eax # Use the CPUID instruction to get CPU type 17.52 - cpuid 17.53 - movb %al,%cl # save reg for future use 17.54 - andb $0x0f,%ah # mask processor family 17.55 - movb %ah,X86 17.56 - andb $0xf0,%al # mask model 17.57 - shrb $4,%al 17.58 - movb %al,X86_MODEL 17.59 - andb $0x0f,%cl # mask mask revision 17.60 - movb %cl,X86_MASK 17.61 - movl %edx,X86_CAPABILITY 17.62 - 17.63 - xorl %eax,%eax # Clear FS/GS and LDT 17.64 - movl %eax,%fs 17.65 - movl %eax,%gs 17.66 - cld # gcc2 wants the direction flag cleared at all times 17.67 - 17.68 - call start_kernel 17.69 -L6: 17.70 - jmp L6 # main should never return here, but 17.71 - # just in case, we know what happens. 17.72 - 17.73 -ENTRY(lgdt_finish) 17.74 - movl $(__KERNEL_DS),%eax # reload all the segment registers 17.75 - movw %ax,%ss # after changing gdt. 17.76 - 17.77 - movl $(__USER_DS),%eax # DS/ES contains default USER segment 17.78 - movw %ax,%ds 17.79 - movw %ax,%es 17.80 - 17.81 - popl %eax # reload CS by intersegment return 17.82 - pushl $(__KERNEL_CS) 17.83 - pushl %eax 17.84 - lret 17.85 - 17.86 -ENTRY(stack_start) 17.87 - .long init_thread_union+THREAD_SIZE 17.88 - .long __BOOT_DS 17.89 - 17.90 -# XXXcl 17.91 -.globl idt_descr 17.92 -.globl cpu_gdt_descr 17.93 - 17.94 - ALIGN 17.95 - .word 0 # 32-bit align idt_desc.address 17.96 -idt_descr: 17.97 - .word IDT_ENTRIES*8-1 # idt contains 256 entries 17.98 - .long idt_table 17.99 -# XXXcl 17.100 - 17.101 -# boot GDT descriptor (later on used by CPU#0): 17.102 - .word 0 # 32 bit align gdt_desc.address 17.103 -cpu_gdt_descr: 17.104 - .word GDT_SIZE 17.105 - .long cpu_gdt_table 17.106 - 17.107 - .fill NR_CPUS-1,8,0 # space for the other GDT descriptors 17.108 - 17.109 -.org 0x1000 17.110 -ENTRY(empty_zero_page) 17.111 - 17.112 -.org 0x2000 17.113 -ENTRY(swapper_pg_dir) 17.114 - 17.115 -.org 0x3000 17.116 -ENTRY(cpu_gdt_table) 17.117 - .quad 0x0000000000000000 /* NULL descriptor */ 17.118 - .quad 0x0000000000000000 /* 0x0b reserved */ 17.119 - .quad 0x0000000000000000 /* 0x13 reserved */ 17.120 - .quad 0x0000000000000000 /* 0x1b reserved */ 17.121 - .quad 0x0000000000000000 /* 0x20 unused */ 17.122 - .quad 0x0000000000000000 /* 0x28 unused */ 17.123 - .quad 0x0000000000000000 /* 0x33 TLS entry 1 */ 17.124 - .quad 0x0000000000000000 /* 0x3b TLS entry 2 */ 17.125 - .quad 0x0000000000000000 /* 0x43 TLS entry 3 */ 17.126 - .quad 0x0000000000000000 /* 0x4b reserved */ 17.127 - .quad 0x0000000000000000 /* 0x53 reserved */ 17.128 - .quad 0x0000000000000000 /* 0x5b reserved */ 17.129 - 17.130 - .quad 0x00cfbb000000c3ff /* 0x60 kernel 4GB code at 0x00000000 */ 17.131 - .quad 0x00cfb3000000c3ff /* 0x68 kernel 4GB data at 0x00000000 */ 17.132 - .quad 0x00cffb000000c3ff /* 0x73 user 4GB code at 0x00000000 */ 17.133 - .quad 0x00cff3000000c3ff /* 0x7b user 4GB data at 0x00000000 */ 17.134 - 17.135 - .quad 0x0000000000000000 /* 0x80 TSS descriptor */ 17.136 - .quad 0x0000000000000000 /* 0x88 LDT descriptor */ 17.137 - 17.138 - /* Segments used for calling PnP BIOS */ 17.139 - .quad 0x0000000000000000 /* 0x90 32-bit code */ 17.140 - .quad 0x0000000000000000 /* 0x98 16-bit code */ 17.141 - .quad 0x0000000000000000 /* 0xa0 16-bit data */ 17.142 - .quad 0x0000000000000000 /* 0xa8 16-bit data */ 17.143 - .quad 0x0000000000000000 /* 0xb0 16-bit data */ 17.144 - /* 17.145 - * The APM segments have byte granularity and their bases 17.146 - * and limits are set at run time. 17.147 - */ 17.148 - .quad 0x0000000000000000 /* 0xb8 APM CS code */ 17.149 - .quad 0x0000000000000000 /* 0xc0 APM CS 16 code (16 bit) */ 17.150 - .quad 0x0000000000000000 /* 0xc8 APM DS data */ 17.151 - 17.152 - .quad 0x0000000000000000 /* 0xd0 - unused */ 17.153 - .quad 0x0000000000000000 /* 0xd8 - unused */ 17.154 - .quad 0x0000000000000000 /* 0xe0 - unused */ 17.155 - .quad 0x0000000000000000 /* 0xe8 - unused */ 17.156 - .quad 0x0000000000000000 /* 0xf0 - unused */ 17.157 - .quad 0x0000000000000000 /* 0xf8 - GDT entry 31: double-fault TSS */ 17.158 - .fill GDT_ENTRIES-32,8,0 17.159 - 17.160 -.org 0x4000 17.161 -ENTRY(default_ldt) 17.162 - 17.163 -.org 0x5000 17.164 -/* 17.165 - * Real beginning of normal "text" segment 17.166 - */ 17.167 -ENTRY(stext) 17.168 -ENTRY(_stext)
18.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c Wed Aug 25 16:26:15 2004 +0000 18.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 18.3 @@ -1,210 +0,0 @@ 18.4 -#include <linux/config.h> 18.5 -#include <linux/module.h> 18.6 -#include <linux/smp.h> 18.7 -#include <linux/user.h> 18.8 -#include <linux/elfcore.h> 18.9 -#include <linux/mca.h> 18.10 -#include <linux/sched.h> 18.11 -#include <linux/in6.h> 18.12 -#include <linux/interrupt.h> 18.13 -#include <linux/smp_lock.h> 18.14 -#include <linux/pm.h> 18.15 -#include <linux/pci.h> 18.16 -#include <linux/apm_bios.h> 18.17 -#include <linux/kernel.h> 18.18 -#include <linux/string.h> 18.19 -#include <linux/tty.h> 18.20 -#include <linux/highmem.h> 18.21 -#include <linux/time.h> 18.22 - 18.23 -#include <asm/semaphore.h> 18.24 -#include <asm/processor.h> 18.25 -#include <asm/i387.h> 18.26 -#include <asm/uaccess.h> 18.27 -#include <asm/checksum.h> 18.28 -#include <asm/io.h> 18.29 -#include <asm/hardirq.h> 18.30 -#include <asm/delay.h> 18.31 -#include <asm/irq.h> 18.32 -#include <asm/mmx.h> 18.33 -#include <asm/desc.h> 18.34 -#include <asm/pgtable.h> 18.35 -#include <asm/pgalloc.h> 18.36 -#include <asm/tlbflush.h> 18.37 -#include <asm/nmi.h> 18.38 -#include <asm/ist.h> 18.39 - 18.40 -extern void dump_thread(struct pt_regs *, struct user *); 18.41 -extern spinlock_t rtc_lock; 18.42 - 18.43 -/* This is definitely a GPL-only symbol */ 18.44 -EXPORT_SYMBOL_GPL(cpu_gdt_table); 18.45 - 18.46 -#if defined(CONFIG_APM_MODULE) 18.47 -extern void machine_real_restart(unsigned char *, int); 18.48 -EXPORT_SYMBOL(machine_real_restart); 18.49 -extern void default_idle(void); 18.50 -EXPORT_SYMBOL(default_idle); 18.51 -#endif 18.52 - 18.53 -#ifdef CONFIG_SMP 18.54 -extern void FASTCALL( __write_lock_failed(rwlock_t *rw)); 18.55 -extern void FASTCALL( __read_lock_failed(rwlock_t *rw)); 18.56 -#endif 18.57 - 18.58 -#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE) 18.59 -extern struct drive_info_struct drive_info; 18.60 -EXPORT_SYMBOL(drive_info); 18.61 -#endif 18.62 - 18.63 -extern unsigned long cpu_khz; 18.64 -extern unsigned long get_cmos_time(void); 18.65 - 18.66 -/* platform dependent support */ 18.67 -EXPORT_SYMBOL(boot_cpu_data); 18.68 -EXPORT_SYMBOL(MCA_bus); 18.69 -#ifdef CONFIG_DISCONTIGMEM 18.70 -EXPORT_SYMBOL(node_data); 18.71 -EXPORT_SYMBOL(physnode_map); 18.72 -#endif 18.73 -#ifdef CONFIG_X86_NUMAQ 18.74 -EXPORT_SYMBOL(xquad_portio); 18.75 -#endif 18.76 -EXPORT_SYMBOL(dump_thread); 18.77 -EXPORT_SYMBOL(dump_fpu); 18.78 -EXPORT_SYMBOL(dump_extended_fpu); 18.79 -EXPORT_SYMBOL_GPL(kernel_fpu_begin); 18.80 -EXPORT_SYMBOL(__ioremap); 18.81 -EXPORT_SYMBOL(ioremap_nocache); 18.82 -EXPORT_SYMBOL(iounmap); 18.83 -EXPORT_SYMBOL(enable_irq); 18.84 -EXPORT_SYMBOL(disable_irq); 18.85 -EXPORT_SYMBOL(disable_irq_nosync); 18.86 -EXPORT_SYMBOL(probe_irq_mask); 18.87 -EXPORT_SYMBOL(kernel_thread); 18.88 -EXPORT_SYMBOL(pm_idle); 18.89 -#ifdef CONFIG_APM 18.90 -EXPORT_SYMBOL(pm_power_off); 18.91 -#endif 18.92 -EXPORT_SYMBOL(get_cmos_time); 18.93 -EXPORT_SYMBOL(cpu_khz); 18.94 -EXPORT_SYMBOL(apm_info); 18.95 - 18.96 -EXPORT_SYMBOL_NOVERS(__down_failed); 18.97 -EXPORT_SYMBOL_NOVERS(__down_failed_interruptible); 18.98 -EXPORT_SYMBOL_NOVERS(__down_failed_trylock); 18.99 -EXPORT_SYMBOL_NOVERS(__up_wakeup); 18.100 -/* Networking helper routines. */ 18.101 -EXPORT_SYMBOL(csum_partial_copy_generic); 18.102 -/* Delay loops */ 18.103 -EXPORT_SYMBOL(__ndelay); 18.104 -EXPORT_SYMBOL(__udelay); 18.105 -EXPORT_SYMBOL(__delay); 18.106 -EXPORT_SYMBOL(__const_udelay); 18.107 - 18.108 -EXPORT_SYMBOL_NOVERS(__get_user_1); 18.109 -EXPORT_SYMBOL_NOVERS(__get_user_2); 18.110 -EXPORT_SYMBOL_NOVERS(__get_user_4); 18.111 - 18.112 -EXPORT_SYMBOL(strpbrk); 18.113 -EXPORT_SYMBOL(strstr); 18.114 - 18.115 -EXPORT_SYMBOL(strncpy_from_user); 18.116 -EXPORT_SYMBOL(__strncpy_from_user); 18.117 -EXPORT_SYMBOL(clear_user); 18.118 -EXPORT_SYMBOL(__clear_user); 18.119 -EXPORT_SYMBOL(__copy_from_user_ll); 18.120 -EXPORT_SYMBOL(__copy_to_user_ll); 18.121 -EXPORT_SYMBOL(strnlen_user); 18.122 - 18.123 -EXPORT_SYMBOL(dma_alloc_coherent); 18.124 -EXPORT_SYMBOL(dma_free_coherent); 18.125 - 18.126 -#ifdef CONFIG_PCI 18.127 -EXPORT_SYMBOL(pcibios_penalize_isa_irq); 18.128 -EXPORT_SYMBOL(pci_mem_start); 18.129 -#endif 18.130 - 18.131 -#ifdef CONFIG_PCI_BIOS 18.132 -EXPORT_SYMBOL(pcibios_set_irq_routing); 18.133 -EXPORT_SYMBOL(pcibios_get_irq_routing_table); 18.134 -#endif 18.135 - 18.136 -#ifdef CONFIG_X86_USE_3DNOW 18.137 -EXPORT_SYMBOL(_mmx_memcpy); 18.138 -EXPORT_SYMBOL(mmx_clear_page); 18.139 -EXPORT_SYMBOL(mmx_copy_page); 18.140 -#endif 18.141 - 18.142 -#ifdef CONFIG_X86_HT 18.143 -EXPORT_SYMBOL(smp_num_siblings); 18.144 -EXPORT_SYMBOL(cpu_sibling_map); 18.145 -#endif 18.146 - 18.147 -#ifdef CONFIG_SMP 18.148 -EXPORT_SYMBOL(cpu_data); 18.149 -EXPORT_SYMBOL(cpu_online_map); 18.150 -EXPORT_SYMBOL(cpu_callout_map); 18.151 -EXPORT_SYMBOL_NOVERS(__write_lock_failed); 18.152 -EXPORT_SYMBOL_NOVERS(__read_lock_failed); 18.153 - 18.154 -/* Global SMP stuff */ 18.155 -EXPORT_SYMBOL(synchronize_irq); 18.156 -EXPORT_SYMBOL(smp_call_function); 18.157 - 18.158 -/* TLB flushing */ 18.159 -EXPORT_SYMBOL(flush_tlb_page); 18.160 -EXPORT_SYMBOL_GPL(flush_tlb_all); 18.161 -#endif 18.162 - 18.163 -#ifdef CONFIG_X86_IO_APIC 18.164 -EXPORT_SYMBOL(IO_APIC_get_PCI_irq_vector); 18.165 -#endif 18.166 - 18.167 -#ifdef CONFIG_MCA 18.168 -EXPORT_SYMBOL(machine_id); 18.169 -#endif 18.170 - 18.171 -#ifdef CONFIG_VT 18.172 -EXPORT_SYMBOL(screen_info); 18.173 -#endif 18.174 - 18.175 -EXPORT_SYMBOL(get_wchan); 18.176 - 18.177 -EXPORT_SYMBOL(rtc_lock); 18.178 - 18.179 -EXPORT_SYMBOL_GPL(set_nmi_callback); 18.180 -EXPORT_SYMBOL_GPL(unset_nmi_callback); 18.181 - 18.182 -#undef memcpy 18.183 -#undef memset 18.184 -#undef memcmp 18.185 -extern void * memset(void *,int,__kernel_size_t); 18.186 -extern void * memcpy(void *,const void *,__kernel_size_t); 18.187 -extern int memcmp(const void *,const void *,__kernel_size_t); 18.188 -EXPORT_SYMBOL_NOVERS(memcpy); 18.189 -EXPORT_SYMBOL_NOVERS(memset); 18.190 -EXPORT_SYMBOL_NOVERS(memcmp); 18.191 - 18.192 -#ifdef CONFIG_HAVE_DEC_LOCK 18.193 -EXPORT_SYMBOL(atomic_dec_and_lock); 18.194 -#endif 18.195 - 18.196 -extern int is_sony_vaio_laptop; 18.197 -EXPORT_SYMBOL(is_sony_vaio_laptop); 18.198 - 18.199 -EXPORT_SYMBOL(__PAGE_KERNEL); 18.200 - 18.201 -#ifdef CONFIG_HIGHMEM 18.202 -EXPORT_SYMBOL(kmap); 18.203 -EXPORT_SYMBOL(kunmap); 18.204 -EXPORT_SYMBOL(kmap_atomic); 18.205 -EXPORT_SYMBOL(kunmap_atomic); 18.206 -EXPORT_SYMBOL(kmap_atomic_to_page); 18.207 -#endif 18.208 - 18.209 -#if defined(CONFIG_X86_SPEEDSTEP_SMI) || defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE) 18.210 -EXPORT_SYMBOL(ist_info); 18.211 -#endif 18.212 - 18.213 -EXPORT_SYMBOL(csum_partial);
19.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/ioport.c Wed Aug 25 16:26:15 2004 +0000 19.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 19.3 @@ -1,49 +0,0 @@ 19.4 -#include <linux/sched.h> 19.5 -#include <linux/kernel.h> 19.6 -#include <linux/errno.h> 19.7 -#include <linux/types.h> 19.8 -#include <linux/ioport.h> 19.9 -#include <linux/mm.h> 19.10 -#include <linux/smp.h> 19.11 -#include <linux/smp_lock.h> 19.12 -#include <linux/stddef.h> 19.13 -#include <linux/slab.h> 19.14 -#include <asm/hypervisor-ifs/dom0_ops.h> 19.15 - 19.16 -asmlinkage long sys_iopl(unsigned int new_io_pl) 19.17 -{ 19.18 - unsigned int old_io_pl = current->thread.io_pl; 19.19 - dom0_op_t op; 19.20 - 19.21 - if (new_io_pl > 3) 19.22 - return -EINVAL; 19.23 - 19.24 - /* Need "raw I/O" privileges for direct port access. */ 19.25 - if ((new_io_pl > old_io_pl) && !capable(CAP_SYS_RAWIO)) 19.26 - return -EPERM; 19.27 - 19.28 - if (!(start_info.flags & SIF_PRIVILEGED)) 19.29 - return -EPERM; 19.30 - 19.31 - /* Maintain OS privileges even if user attempts to relinquish them. */ 19.32 - if (new_io_pl == 0) 19.33 - new_io_pl = 1; 19.34 - 19.35 - /* Change our version of the privilege levels. */ 19.36 - current->thread.io_pl = new_io_pl; 19.37 - 19.38 - /* Force the change at ring 0. */ 19.39 - op.cmd = DOM0_IOPL; 19.40 - op.u.iopl.domain = DOMID_SELF; 19.41 - op.u.iopl.iopl = new_io_pl; 19.42 - HYPERVISOR_dom0_op(&op); 19.43 - 19.44 - return 0; 19.45 -} 19.46 - 19.47 -asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on) 19.48 -{ 19.49 - printk(KERN_INFO "ioperm not fully supported - %s\n", 19.50 - turn_on ? "set iopl to 3" : "ignore resource release"); 19.51 - return turn_on ? sys_iopl(3) : 0; 19.52 -}
20.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/irq.c Wed Aug 25 16:26:15 2004 +0000 20.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 20.3 @@ -1,1196 +0,0 @@ 20.4 -/* 20.5 - * linux/arch/i386/kernel/irq.c 20.6 - * 20.7 - * Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar 20.8 - * 20.9 - * This file contains the code used by various IRQ handling routines: 20.10 - * asking for different IRQ's should be done through these routines 20.11 - * instead of just grabbing them. Thus setups with different IRQ numbers 20.12 - * shouldn't result in any weird surprises, and installing new handlers 20.13 - * should be easier. 20.14 - */ 20.15 - 20.16 -/* 20.17 - * (mostly architecture independent, will move to kernel/irq.c in 2.5.) 20.18 - * 20.19 - * IRQs are in fact implemented a bit like signal handlers for the kernel. 20.20 - * Naturally it's not a 1:1 relation, but there are similarities. 20.21 - */ 20.22 - 20.23 -#include <linux/config.h> 20.24 -#include <linux/errno.h> 20.25 -#include <linux/module.h> 20.26 -#include <linux/signal.h> 20.27 -#include <linux/sched.h> 20.28 -#include <linux/ioport.h> 20.29 -#include <linux/interrupt.h> 20.30 -#include <linux/timex.h> 20.31 -#include <linux/slab.h> 20.32 -#include <linux/random.h> 20.33 -#include <linux/smp_lock.h> 20.34 -#include <linux/init.h> 20.35 -#include <linux/kernel_stat.h> 20.36 -#include <linux/irq.h> 20.37 -#include <linux/proc_fs.h> 20.38 -#include <linux/seq_file.h> 20.39 -#include <linux/kallsyms.h> 20.40 - 20.41 -#include <asm/atomic.h> 20.42 -#include <asm/io.h> 20.43 -#include <asm/smp.h> 20.44 -#include <asm/system.h> 20.45 -#include <asm/bitops.h> 20.46 -#include <asm/uaccess.h> 20.47 -#include <asm/pgalloc.h> 20.48 -#include <asm/delay.h> 20.49 -#include <asm/desc.h> 20.50 -#include <asm/irq.h> 20.51 - 20.52 -/* 20.53 - * Linux has a controller-independent x86 interrupt architecture. 20.54 - * every controller has a 'controller-template', that is used 20.55 - * by the main code to do the right thing. Each driver-visible 20.56 - * interrupt source is transparently wired to the apropriate 20.57 - * controller. Thus drivers need not be aware of the 20.58 - * interrupt-controller. 20.59 - * 20.60 - * Various interrupt controllers we handle: 8259 PIC, SMP IO-APIC, 20.61 - * PIIX4's internal 8259 PIC and SGI's Visual Workstation Cobalt (IO-)APIC. 20.62 - * (IO-APICs assumed to be messaging to Pentium local-APICs) 20.63 - * 20.64 - * the code is designed to be easily extended with new/different 20.65 - * interrupt controllers, without having to do assembly magic. 20.66 - */ 20.67 - 20.68 -/* 20.69 - * Controller mappings for all interrupt sources: 20.70 - */ 20.71 -irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned = { 20.72 - [0 ... NR_IRQS-1] = { 20.73 - .handler = &no_irq_type, 20.74 - .lock = SPIN_LOCK_UNLOCKED 20.75 - } 20.76 -}; 20.77 - 20.78 -static void register_irq_proc (unsigned int irq); 20.79 - 20.80 -/* 20.81 - * per-CPU IRQ handling stacks 20.82 - */ 20.83 -#ifdef CONFIG_4KSTACKS 20.84 -union irq_ctx *hardirq_ctx[NR_CPUS]; 20.85 -union irq_ctx *softirq_ctx[NR_CPUS]; 20.86 -#endif 20.87 - 20.88 -/* 20.89 - * Special irq handlers. 20.90 - */ 20.91 - 20.92 -irqreturn_t no_action(int cpl, void *dev_id, struct pt_regs *regs) 20.93 -{ return IRQ_NONE; } 20.94 - 20.95 -/* 20.96 - * Generic no controller code 20.97 - */ 20.98 - 20.99 -static void enable_none(unsigned int irq) { } 20.100 -static unsigned int startup_none(unsigned int irq) { return 0; } 20.101 -static void disable_none(unsigned int irq) { } 20.102 -static void ack_none(unsigned int irq) 20.103 -{ 20.104 -/* 20.105 - * 'what should we do if we get a hw irq event on an illegal vector'. 20.106 - * each architecture has to answer this themselves, it doesn't deserve 20.107 - * a generic callback i think. 20.108 - */ 20.109 -#ifdef CONFIG_X86 20.110 - printk("unexpected IRQ trap at vector %02x\n", irq); 20.111 -#ifdef CONFIG_X86_LOCAL_APIC 20.112 - /* 20.113 - * Currently unexpected vectors happen only on SMP and APIC. 20.114 - * We _must_ ack these because every local APIC has only N 20.115 - * irq slots per priority level, and a 'hanging, unacked' IRQ 20.116 - * holds up an irq slot - in excessive cases (when multiple 20.117 - * unexpected vectors occur) that might lock up the APIC 20.118 - * completely. 20.119 - */ 20.120 - ack_APIC_irq(); 20.121 -#endif 20.122 -#endif 20.123 -} 20.124 - 20.125 -/* startup is the same as "enable", shutdown is same as "disable" */ 20.126 -#define shutdown_none disable_none 20.127 -#define end_none enable_none 20.128 - 20.129 -struct hw_interrupt_type no_irq_type = { 20.130 - "none", 20.131 - startup_none, 20.132 - shutdown_none, 20.133 - enable_none, 20.134 - disable_none, 20.135 - ack_none, 20.136 - end_none 20.137 -}; 20.138 - 20.139 -atomic_t irq_err_count; 20.140 -#if defined(CONFIG_X86_IO_APIC) && defined(APIC_MISMATCH_DEBUG) 20.141 -atomic_t irq_mis_count; 20.142 -#endif 20.143 - 20.144 -/* 20.145 - * Generic, controller-independent functions: 20.146 - */ 20.147 - 20.148 -int show_interrupts(struct seq_file *p, void *v) 20.149 -{ 20.150 - int i = *(loff_t *) v, j; 20.151 - struct irqaction * action; 20.152 - unsigned long flags; 20.153 - 20.154 - if (i == 0) { 20.155 - seq_printf(p, " "); 20.156 - for (j=0; j<NR_CPUS; j++) 20.157 - if (cpu_online(j)) 20.158 - seq_printf(p, "CPU%d ",j); 20.159 - seq_putc(p, '\n'); 20.160 - } 20.161 - 20.162 - if (i < NR_IRQS) { 20.163 - spin_lock_irqsave(&irq_desc[i].lock, flags); 20.164 - action = irq_desc[i].action; 20.165 - if (!action) 20.166 - goto skip; 20.167 - seq_printf(p, "%3d: ",i); 20.168 -#ifndef CONFIG_SMP 20.169 - seq_printf(p, "%10u ", kstat_irqs(i)); 20.170 -#else 20.171 - for (j = 0; j < NR_CPUS; j++) 20.172 - if (cpu_online(j)) 20.173 - seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); 20.174 -#endif 20.175 - seq_printf(p, " %14s", irq_desc[i].handler->typename); 20.176 - seq_printf(p, " %s", action->name); 20.177 - 20.178 - for (action=action->next; action; action = action->next) 20.179 - seq_printf(p, ", %s", action->name); 20.180 - 20.181 - seq_putc(p, '\n'); 20.182 -skip: 20.183 - spin_unlock_irqrestore(&irq_desc[i].lock, flags); 20.184 - } else if (i == NR_IRQS) { 20.185 - seq_printf(p, "NMI: "); 20.186 - for (j = 0; j < NR_CPUS; j++) 20.187 - if (cpu_online(j)) 20.188 - seq_printf(p, "%10u ", nmi_count(j)); 20.189 - seq_putc(p, '\n'); 20.190 -#ifdef CONFIG_X86_LOCAL_APIC 20.191 - seq_printf(p, "LOC: "); 20.192 - for (j = 0; j < NR_CPUS; j++) 20.193 - if (cpu_online(j)) 20.194 - seq_printf(p, "%10u ", irq_stat[j].apic_timer_irqs); 20.195 - seq_putc(p, '\n'); 20.196 -#endif 20.197 - seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); 20.198 -#if defined(CONFIG_X86_IO_APIC) && defined(APIC_MISMATCH_DEBUG) 20.199 - seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count)); 20.200 -#endif 20.201 - } 20.202 - return 0; 20.203 -} 20.204 - 20.205 - 20.206 - 20.207 - 20.208 -#ifdef CONFIG_SMP 20.209 -inline void synchronize_irq(unsigned int irq) 20.210 -{ 20.211 - while (irq_desc[irq].status & IRQ_INPROGRESS) 20.212 - cpu_relax(); 20.213 -} 20.214 -#endif 20.215 - 20.216 -/* 20.217 - * This should really return information about whether 20.218 - * we should do bottom half handling etc. Right now we 20.219 - * end up _always_ checking the bottom half, which is a 20.220 - * waste of time and is not what some drivers would 20.221 - * prefer. 20.222 - */ 20.223 -asmlinkage int handle_IRQ_event(unsigned int irq, 20.224 - struct pt_regs *regs, struct irqaction *action) 20.225 -{ 20.226 - int status = 1; /* Force the "do bottom halves" bit */ 20.227 - int retval = 0; 20.228 - 20.229 - if (!(action->flags & SA_INTERRUPT)) 20.230 - local_irq_enable(); 20.231 - 20.232 - do { 20.233 - status |= action->flags; 20.234 - retval |= action->handler(irq, action->dev_id, regs); 20.235 - action = action->next; 20.236 - } while (action); 20.237 - if (status & SA_SAMPLE_RANDOM) 20.238 - add_interrupt_randomness(irq); 20.239 - local_irq_disable(); 20.240 - return retval; 20.241 -} 20.242 - 20.243 -static void __report_bad_irq(int irq, irq_desc_t *desc, irqreturn_t action_ret) 20.244 -{ 20.245 - struct irqaction *action; 20.246 - 20.247 - if (action_ret != IRQ_HANDLED && action_ret != IRQ_NONE) { 20.248 - printk(KERN_ERR "irq event %d: bogus return value %x\n", 20.249 - irq, action_ret); 20.250 - } else { 20.251 - printk(KERN_ERR "irq %d: nobody cared!\n", irq); 20.252 - } 20.253 - dump_stack(); 20.254 - printk(KERN_ERR "handlers:\n"); 20.255 - action = desc->action; 20.256 - do { 20.257 - printk(KERN_ERR "[<%p>]", action->handler); 20.258 - print_symbol(" (%s)", 20.259 - (unsigned long)action->handler); 20.260 - printk("\n"); 20.261 - action = action->next; 20.262 - } while (action); 20.263 -} 20.264 - 20.265 -static void report_bad_irq(int irq, irq_desc_t *desc, irqreturn_t action_ret) 20.266 -{ 20.267 - static int count = 100; 20.268 - 20.269 - if (count) { 20.270 - count--; 20.271 - __report_bad_irq(irq, desc, action_ret); 20.272 - } 20.273 -} 20.274 - 20.275 -static int noirqdebug; 20.276 - 20.277 -static int __init noirqdebug_setup(char *str) 20.278 -{ 20.279 - noirqdebug = 1; 20.280 - printk("IRQ lockup detection disabled\n"); 20.281 - return 1; 20.282 -} 20.283 - 20.284 -__setup("noirqdebug", noirqdebug_setup); 20.285 - 20.286 -/* 20.287 - * If 99,900 of the previous 100,000 interrupts have not been handled then 20.288 - * assume that the IRQ is stuck in some manner. Drop a diagnostic and try to 20.289 - * turn the IRQ off. 20.290 - * 20.291 - * (The other 100-of-100,000 interrupts may have been a correctly-functioning 20.292 - * device sharing an IRQ with the failing one) 20.293 - * 20.294 - * Called under desc->lock 20.295 - */ 20.296 -static void note_interrupt(int irq, irq_desc_t *desc, irqreturn_t action_ret) 20.297 -{ 20.298 - if (action_ret != IRQ_HANDLED) { 20.299 - desc->irqs_unhandled++; 20.300 - if (action_ret != IRQ_NONE) 20.301 - report_bad_irq(irq, desc, action_ret); 20.302 - } 20.303 - 20.304 - desc->irq_count++; 20.305 - if (desc->irq_count < 100000) 20.306 - return; 20.307 - 20.308 - desc->irq_count = 0; 20.309 - if (desc->irqs_unhandled > 99900) { 20.310 - /* 20.311 - * The interrupt is stuck 20.312 - */ 20.313 - __report_bad_irq(irq, desc, action_ret); 20.314 - /* 20.315 - * Now kill the IRQ 20.316 - */ 20.317 - printk(KERN_EMERG "Disabling IRQ #%d\n", irq); 20.318 - desc->status |= IRQ_DISABLED; 20.319 - desc->handler->disable(irq); 20.320 - } 20.321 - desc->irqs_unhandled = 0; 20.322 -} 20.323 - 20.324 -/* 20.325 - * Generic enable/disable code: this just calls 20.326 - * down into the PIC-specific version for the actual 20.327 - * hardware disable after having gotten the irq 20.328 - * controller lock. 20.329 - */ 20.330 - 20.331 -/** 20.332 - * disable_irq_nosync - disable an irq without waiting 20.333 - * @irq: Interrupt to disable 20.334 - * 20.335 - * Disable the selected interrupt line. Disables and Enables are 20.336 - * nested. 20.337 - * Unlike disable_irq(), this function does not ensure existing 20.338 - * instances of the IRQ handler have completed before returning. 20.339 - * 20.340 - * This function may be called from IRQ context. 20.341 - */ 20.342 - 20.343 -inline void disable_irq_nosync(unsigned int irq) 20.344 -{ 20.345 - irq_desc_t *desc = irq_desc + irq; 20.346 - unsigned long flags; 20.347 - 20.348 - spin_lock_irqsave(&desc->lock, flags); 20.349 - if (!desc->depth++) { 20.350 - desc->status |= IRQ_DISABLED; 20.351 - desc->handler->disable(irq); 20.352 - } 20.353 - spin_unlock_irqrestore(&desc->lock, flags); 20.354 -} 20.355 - 20.356 -/** 20.357 - * disable_irq - disable an irq and wait for completion 20.358 - * @irq: Interrupt to disable 20.359 - * 20.360 - * Disable the selected interrupt line. Enables and Disables are 20.361 - * nested. 20.362 - * This function waits for any pending IRQ handlers for this interrupt 20.363 - * to complete before returning. If you use this function while 20.364 - * holding a resource the IRQ handler may need you will deadlock. 20.365 - * 20.366 - * This function may be called - with care - from IRQ context. 20.367 - */ 20.368 - 20.369 -void disable_irq(unsigned int irq) 20.370 -{ 20.371 - irq_desc_t *desc = irq_desc + irq; 20.372 - disable_irq_nosync(irq); 20.373 - if (desc->action) 20.374 - synchronize_irq(irq); 20.375 -} 20.376 - 20.377 -/** 20.378 - * enable_irq - enable handling of an irq 20.379 - * @irq: Interrupt to enable 20.380 - * 20.381 - * Undoes the effect of one call to disable_irq(). If this 20.382 - * matches the last disable, processing of interrupts on this 20.383 - * IRQ line is re-enabled. 20.384 - * 20.385 - * This function may be called from IRQ context. 20.386 - */ 20.387 - 20.388 -void enable_irq(unsigned int irq) 20.389 -{ 20.390 - irq_desc_t *desc = irq_desc + irq; 20.391 - unsigned long flags; 20.392 - 20.393 - spin_lock_irqsave(&desc->lock, flags); 20.394 - switch (desc->depth) { 20.395 - case 1: { 20.396 - unsigned int status = desc->status & ~IRQ_DISABLED; 20.397 - desc->status = status; 20.398 - if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) { 20.399 - desc->status = status | IRQ_REPLAY; 20.400 - hw_resend_irq(desc->handler,irq); 20.401 - } 20.402 - desc->handler->enable(irq); 20.403 - /* fall-through */ 20.404 - } 20.405 - default: 20.406 - desc->depth--; 20.407 - break; 20.408 - case 0: 20.409 - printk("enable_irq(%u) unbalanced from %p\n", irq, 20.410 - __builtin_return_address(0)); 20.411 - } 20.412 - spin_unlock_irqrestore(&desc->lock, flags); 20.413 -} 20.414 - 20.415 -/* 20.416 - * do_IRQ handles all normal device IRQ's (the special 20.417 - * SMP cross-CPU interrupts have their own specific 20.418 - * handlers). 20.419 - */ 20.420 -asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs) 20.421 -{ 20.422 - /* 20.423 - * We ack quickly, we don't want the irq controller 20.424 - * thinking we're snobs just because some other CPU has 20.425 - * disabled global interrupts (we have already done the 20.426 - * INT_ACK cycles, it's too late to try to pretend to the 20.427 - * controller that we aren't taking the interrupt). 20.428 - * 20.429 - * 0 return value means that this irq is already being 20.430 - * handled by some other CPU. (or is disabled) 20.431 - */ 20.432 - irq_desc_t *desc = irq_desc + irq; 20.433 - struct irqaction * action; 20.434 - unsigned int status; 20.435 - 20.436 - irq_enter(); 20.437 - 20.438 -#ifdef CONFIG_DEBUG_STACKOVERFLOW 20.439 - /* Debugging check for stack overflow: is there less than 1KB free? */ 20.440 - { 20.441 - long esp; 20.442 - 20.443 - __asm__ __volatile__("andl %%esp,%0" : 20.444 - "=r" (esp) : "0" (THREAD_SIZE - 1)); 20.445 - if (unlikely(esp < (sizeof(struct thread_info) + STACK_WARN))) { 20.446 - printk("do_IRQ: stack overflow: %ld\n", 20.447 - esp - sizeof(struct thread_info)); 20.448 - dump_stack(); 20.449 - } 20.450 - } 20.451 -#endif 20.452 - kstat_this_cpu.irqs[irq]++; 20.453 - spin_lock(&desc->lock); 20.454 - desc->handler->ack(irq); 20.455 - /* 20.456 - REPLAY is when Linux resends an IRQ that was dropped earlier 20.457 - WAITING is used by probe to mark irqs that are being tested 20.458 - */ 20.459 - status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING); 20.460 - status |= IRQ_PENDING; /* we _want_ to handle it */ 20.461 - 20.462 - /* 20.463 - * If the IRQ is disabled for whatever reason, we cannot 20.464 - * use the action we have. 20.465 - */ 20.466 - action = NULL; 20.467 - if (likely(!(status & (IRQ_DISABLED | IRQ_INPROGRESS)))) { 20.468 - action = desc->action; 20.469 - status &= ~IRQ_PENDING; /* we commit to handling */ 20.470 - status |= IRQ_INPROGRESS; /* we are handling it */ 20.471 - } 20.472 - desc->status = status; 20.473 - 20.474 - /* 20.475 - * If there is no IRQ handler or it was disabled, exit early. 20.476 - Since we set PENDING, if another processor is handling 20.477 - a different instance of this same irq, the other processor 20.478 - will take care of it. 20.479 - */ 20.480 - if (unlikely(!action)) 20.481 - goto out; 20.482 - 20.483 - /* 20.484 - * Edge triggered interrupts need to remember 20.485 - * pending events. 20.486 - * This applies to any hw interrupts that allow a second 20.487 - * instance of the same irq to arrive while we are in do_IRQ 20.488 - * or in the handler. But the code here only handles the _second_ 20.489 - * instance of the irq, not the third or fourth. So it is mostly 20.490 - * useful for irq hardware that does not mask cleanly in an 20.491 - * SMP environment. 20.492 - */ 20.493 -#ifdef CONFIG_4KSTACKS 20.494 - 20.495 - for (;;) { 20.496 - irqreturn_t action_ret; 20.497 - u32 *isp; 20.498 - union irq_ctx * curctx; 20.499 - union irq_ctx * irqctx; 20.500 - 20.501 - curctx = (union irq_ctx *) current_thread_info(); 20.502 - irqctx = hardirq_ctx[smp_processor_id()]; 20.503 - 20.504 - spin_unlock(&desc->lock); 20.505 - 20.506 - /* 20.507 - * this is where we switch to the IRQ stack. However, if we are already using 20.508 - * the IRQ stack (because we interrupted a hardirq handler) we can't do that 20.509 - * and just have to keep using the current stack (which is the irq stack already 20.510 - * after all) 20.511 - */ 20.512 - 20.513 - if (curctx == irqctx) 20.514 - action_ret = handle_IRQ_event(irq, regs, action); 20.515 - else { 20.516 - /* build the stack frame on the IRQ stack */ 20.517 - isp = (u32*) ((char*)irqctx + sizeof(*irqctx)); 20.518 - irqctx->tinfo.task = curctx->tinfo.task; 20.519 - irqctx->tinfo.previous_esp = current_stack_pointer(); 20.520 - 20.521 - *--isp = (u32) action; 20.522 - *--isp = (u32) regs; 20.523 - *--isp = (u32) irq; 20.524 - 20.525 - asm volatile( 20.526 - " xchgl %%ebx,%%esp \n" 20.527 - " call handle_IRQ_event \n" 20.528 - " xchgl %%ebx,%%esp \n" 20.529 - : "=a"(action_ret) 20.530 - : "b"(isp) 20.531 - : "memory", "cc", "edx", "ecx" 20.532 - ); 20.533 - 20.534 - 20.535 - } 20.536 - spin_lock(&desc->lock); 20.537 - if (!noirqdebug) 20.538 - note_interrupt(irq, desc, action_ret); 20.539 - if (curctx != irqctx) 20.540 - irqctx->tinfo.task = NULL; 20.541 - if (likely(!(desc->status & IRQ_PENDING))) 20.542 - break; 20.543 - desc->status &= ~IRQ_PENDING; 20.544 - } 20.545 - 20.546 -#else 20.547 - 20.548 - for (;;) { 20.549 - irqreturn_t action_ret; 20.550 - 20.551 - spin_unlock(&desc->lock); 20.552 - 20.553 - action_ret = handle_IRQ_event(irq, regs, action); 20.554 - 20.555 - spin_lock(&desc->lock); 20.556 - if (!noirqdebug) 20.557 - note_interrupt(irq, desc, action_ret); 20.558 - if (likely(!(desc->status & IRQ_PENDING))) 20.559 - break; 20.560 - desc->status &= ~IRQ_PENDING; 20.561 - } 20.562 -#endif 20.563 - desc->status &= ~IRQ_INPROGRESS; 20.564 - 20.565 -out: 20.566 - /* 20.567 - * The ->end() handler has to deal with interrupts which got 20.568 - * disabled while the handler was running. 20.569 - */ 20.570 - desc->handler->end(irq); 20.571 - spin_unlock(&desc->lock); 20.572 - 20.573 - irq_exit(); 20.574 - 20.575 - return 1; 20.576 -} 20.577 - 20.578 -int can_request_irq(unsigned int irq, unsigned long irqflags) 20.579 -{ 20.580 - struct irqaction *action; 20.581 - 20.582 - if (irq >= NR_IRQS) 20.583 - return 0; 20.584 - action = irq_desc[irq].action; 20.585 - if (action) { 20.586 - if (irqflags & action->flags & SA_SHIRQ) 20.587 - action = NULL; 20.588 - } 20.589 - return !action; 20.590 -} 20.591 - 20.592 -/** 20.593 - * request_irq - allocate an interrupt line 20.594 - * @irq: Interrupt line to allocate 20.595 - * @handler: Function to be called when the IRQ occurs 20.596 - * @irqflags: Interrupt type flags 20.597 - * @devname: An ascii name for the claiming device 20.598 - * @dev_id: A cookie passed back to the handler function 20.599 - * 20.600 - * This call allocates interrupt resources and enables the 20.601 - * interrupt line and IRQ handling. From the point this 20.602 - * call is made your handler function may be invoked. Since 20.603 - * your handler function must clear any interrupt the board 20.604 - * raises, you must take care both to initialise your hardware 20.605 - * and to set up the interrupt handler in the right order. 20.606 - * 20.607 - * Dev_id must be globally unique. Normally the address of the 20.608 - * device data structure is used as the cookie. Since the handler 20.609 - * receives this value it makes sense to use it. 20.610 - * 20.611 - * If your interrupt is shared you must pass a non NULL dev_id 20.612 - * as this is required when freeing the interrupt. 20.613 - * 20.614 - * Flags: 20.615 - * 20.616 - * SA_SHIRQ Interrupt is shared 20.617 - * 20.618 - * SA_INTERRUPT Disable local interrupts while processing 20.619 - * 20.620 - * SA_SAMPLE_RANDOM The interrupt can be used for entropy 20.621 - * 20.622 - */ 20.623 - 20.624 -int request_irq(unsigned int irq, 20.625 - irqreturn_t (*handler)(int, void *, struct pt_regs *), 20.626 - unsigned long irqflags, 20.627 - const char * devname, 20.628 - void *dev_id) 20.629 -{ 20.630 - int retval; 20.631 - struct irqaction * action; 20.632 - 20.633 -#if 1 20.634 - /* 20.635 - * Sanity-check: shared interrupts should REALLY pass in 20.636 - * a real dev-ID, otherwise we'll have trouble later trying 20.637 - * to figure out which interrupt is which (messes up the 20.638 - * interrupt freeing logic etc). 20.639 - */ 20.640 - if (irqflags & SA_SHIRQ) { 20.641 - if (!dev_id) 20.642 - printk("Bad boy: %s (at 0x%x) called us without a dev_id!\n", devname, (&irq)[-1]); 20.643 - } 20.644 -#endif 20.645 - 20.646 - if (irq >= NR_IRQS) 20.647 - return -EINVAL; 20.648 - if (!handler) 20.649 - return -EINVAL; 20.650 - 20.651 - action = (struct irqaction *) 20.652 - kmalloc(sizeof(struct irqaction), GFP_ATOMIC); 20.653 - if (!action) 20.654 - return -ENOMEM; 20.655 - 20.656 - action->handler = handler; 20.657 - action->flags = irqflags; 20.658 - action->mask = 0; 20.659 - action->name = devname; 20.660 - action->next = NULL; 20.661 - action->dev_id = dev_id; 20.662 - 20.663 - retval = setup_irq(irq, action); 20.664 - if (retval) 20.665 - kfree(action); 20.666 - return retval; 20.667 -} 20.668 - 20.669 -EXPORT_SYMBOL(request_irq); 20.670 - 20.671 -/** 20.672 - * free_irq - free an interrupt 20.673 - * @irq: Interrupt line to free 20.674 - * @dev_id: Device identity to free 20.675 - * 20.676 - * Remove an interrupt handler. The handler is removed and if the 20.677 - * interrupt line is no longer in use by any driver it is disabled. 20.678 - * On a shared IRQ the caller must ensure the interrupt is disabled 20.679 - * on the card it drives before calling this function. The function 20.680 - * does not return until any executing interrupts for this IRQ 20.681 - * have completed. 20.682 - * 20.683 - * This function must not be called from interrupt context. 20.684 - */ 20.685 - 20.686 -void free_irq(unsigned int irq, void *dev_id) 20.687 -{ 20.688 - irq_desc_t *desc; 20.689 - struct irqaction **p; 20.690 - unsigned long flags; 20.691 - 20.692 - if (irq >= NR_IRQS) 20.693 - return; 20.694 - 20.695 - desc = irq_desc + irq; 20.696 - spin_lock_irqsave(&desc->lock,flags); 20.697 - p = &desc->action; 20.698 - for (;;) { 20.699 - struct irqaction * action = *p; 20.700 - 20.701 - if (action) { 20.702 - struct irqaction **pp = p; 20.703 - p = &action->next; 20.704 - if (action->dev_id != dev_id) 20.705 - continue; 20.706 - 20.707 - /* Found it - now remove it from the list of entries */ 20.708 - *pp = action->next; 20.709 - if (!desc->action) { 20.710 - desc->status |= IRQ_DISABLED; 20.711 - desc->handler->shutdown(irq); 20.712 - } 20.713 - spin_unlock_irqrestore(&desc->lock,flags); 20.714 - 20.715 - /* Wait to make sure it's not being used on another CPU */ 20.716 - synchronize_irq(irq); 20.717 - 20.718 -#define SA_STATIC_ACTION 0x01000000 /* Is it our duty to free the action? */ 20.719 - if (!(action->flags & SA_STATIC_ACTION)) 20.720 - kfree(action); 20.721 - return; 20.722 - } 20.723 - printk("Trying to free free IRQ%d\n",irq); 20.724 - spin_unlock_irqrestore(&desc->lock,flags); 20.725 - return; 20.726 - } 20.727 -} 20.728 - 20.729 -EXPORT_SYMBOL(free_irq); 20.730 - 20.731 -/* 20.732 - * IRQ autodetection code.. 20.733 - * 20.734 - * This depends on the fact that any interrupt that 20.735 - * comes in on to an unassigned handler will get stuck 20.736 - * with "IRQ_WAITING" cleared and the interrupt 20.737 - * disabled. 20.738 - */ 20.739 - 20.740 -static DECLARE_MUTEX(probe_sem); 20.741 - 20.742 -/** 20.743 - * probe_irq_on - begin an interrupt autodetect 20.744 - * 20.745 - * Commence probing for an interrupt. The interrupts are scanned 20.746 - * and a mask of potential interrupt lines is returned. 20.747 - * 20.748 - */ 20.749 - 20.750 -unsigned long probe_irq_on(void) 20.751 -{ 20.752 - unsigned int i; 20.753 - irq_desc_t *desc; 20.754 - unsigned long val; 20.755 - unsigned long delay; 20.756 - 20.757 - down(&probe_sem); 20.758 - /* 20.759 - * something may have generated an irq long ago and we want to 20.760 - * flush such a longstanding irq before considering it as spurious. 20.761 - */ 20.762 - for (i = NR_PIRQS-1; i > 0; i--) { 20.763 - desc = irq_desc + i; 20.764 - 20.765 - spin_lock_irq(&desc->lock); 20.766 - if (!irq_desc[i].action) 20.767 - irq_desc[i].handler->startup(i); 20.768 - spin_unlock_irq(&desc->lock); 20.769 - } 20.770 - 20.771 - /* Wait for longstanding interrupts to trigger. */ 20.772 - for (delay = jiffies + HZ/50; time_after(delay, jiffies); ) 20.773 - /* about 20ms delay */ barrier(); 20.774 - 20.775 - /* 20.776 - * enable any unassigned irqs 20.777 - * (we must startup again here because if a longstanding irq 20.778 - * happened in the previous stage, it may have masked itself) 20.779 - */ 20.780 - for (i = NR_PIRQS-1; i > 0; i--) { 20.781 - desc = irq_desc + i; 20.782 - 20.783 - spin_lock_irq(&desc->lock); 20.784 - if (!desc->action) { 20.785 - desc->status |= IRQ_AUTODETECT | IRQ_WAITING; 20.786 - if (desc->handler->startup(i)) 20.787 - desc->status |= IRQ_PENDING; 20.788 - } 20.789 - spin_unlock_irq(&desc->lock); 20.790 - } 20.791 - 20.792 - /* 20.793 - * Wait for spurious interrupts to trigger 20.794 - */ 20.795 - for (delay = jiffies + HZ/10; time_after(delay, jiffies); ) 20.796 - /* about 100ms delay */ barrier(); 20.797 - 20.798 - /* 20.799 - * Now filter out any obviously spurious interrupts 20.800 - */ 20.801 - val = 0; 20.802 - for (i = 0; i < NR_PIRQS; i++) { 20.803 - irq_desc_t *desc = irq_desc + i; 20.804 - unsigned int status; 20.805 - 20.806 - spin_lock_irq(&desc->lock); 20.807 - status = desc->status; 20.808 - 20.809 - if (status & IRQ_AUTODETECT) { 20.810 - /* It triggered already - consider it spurious. */ 20.811 - if (!(status & IRQ_WAITING)) { 20.812 - desc->status = status & ~IRQ_AUTODETECT; 20.813 - desc->handler->shutdown(i); 20.814 - } else 20.815 - if (i < 32) 20.816 - val |= 1 << i; 20.817 - } 20.818 - spin_unlock_irq(&desc->lock); 20.819 - } 20.820 - 20.821 - return val; 20.822 -} 20.823 - 20.824 -EXPORT_SYMBOL(probe_irq_on); 20.825 - 20.826 -/* 20.827 - * Return a mask of triggered interrupts (this 20.828 - * can handle only legacy ISA interrupts). 20.829 - */ 20.830 - 20.831 -/** 20.832 - * probe_irq_mask - scan a bitmap of interrupt lines 20.833 - * @val: mask of interrupts to consider 20.834 - * 20.835 - * Scan the ISA bus interrupt lines and return a bitmap of 20.836 - * active interrupts. The interrupt probe logic state is then 20.837 - * returned to its previous value. 20.838 - * 20.839 - * Note: we need to scan all the irq's even though we will 20.840 - * only return ISA irq numbers - just so that we reset them 20.841 - * all to a known state. 20.842 - */ 20.843 -unsigned int probe_irq_mask(unsigned long val) 20.844 -{ 20.845 - int i; 20.846 - unsigned int mask; 20.847 - 20.848 - mask = 0; 20.849 - for (i = 0; i < NR_PIRQS; i++) { 20.850 - irq_desc_t *desc = irq_desc + i; 20.851 - unsigned int status; 20.852 - 20.853 - spin_lock_irq(&desc->lock); 20.854 - status = desc->status; 20.855 - 20.856 - if (status & IRQ_AUTODETECT) { 20.857 - if (i < 16 && !(status & IRQ_WAITING)) 20.858 - mask |= 1 << i; 20.859 - 20.860 - desc->status = status & ~IRQ_AUTODETECT; 20.861 - desc->handler->shutdown(i); 20.862 - } 20.863 - spin_unlock_irq(&desc->lock); 20.864 - } 20.865 - up(&probe_sem); 20.866 - 20.867 - return mask & val; 20.868 -} 20.869 - 20.870 -/* 20.871 - * Return the one interrupt that triggered (this can 20.872 - * handle any interrupt source). 20.873 - */ 20.874 - 20.875 -/** 20.876 - * probe_irq_off - end an interrupt autodetect 20.877 - * @val: mask of potential interrupts (unused) 20.878 - * 20.879 - * Scans the unused interrupt lines and returns the line which 20.880 - * appears to have triggered the interrupt. If no interrupt was 20.881 - * found then zero is returned. If more than one interrupt is 20.882 - * found then minus the first candidate is returned to indicate 20.883 - * their is doubt. 20.884 - * 20.885 - * The interrupt probe logic state is returned to its previous 20.886 - * value. 20.887 - * 20.888 - * BUGS: When used in a module (which arguably shouldnt happen) 20.889 - * nothing prevents two IRQ probe callers from overlapping. The 20.890 - * results of this are non-optimal. 20.891 - */ 20.892 - 20.893 -int probe_irq_off(unsigned long val) 20.894 -{ 20.895 - int i, irq_found, nr_irqs; 20.896 - 20.897 - nr_irqs = 0; 20.898 - irq_found = 0; 20.899 - for (i = 0; i < NR_PIRQS; i++) { 20.900 - irq_desc_t *desc = irq_desc + i; 20.901 - unsigned int status; 20.902 - 20.903 - spin_lock_irq(&desc->lock); 20.904 - status = desc->status; 20.905 - 20.906 - if (status & IRQ_AUTODETECT) { 20.907 - if (!(status & IRQ_WAITING)) { 20.908 - if (!nr_irqs) 20.909 - irq_found = i; 20.910 - nr_irqs++; 20.911 - } 20.912 - desc->status = status & ~IRQ_AUTODETECT; 20.913 - desc->handler->shutdown(i); 20.914 - } 20.915 - spin_unlock_irq(&desc->lock); 20.916 - } 20.917 - up(&probe_sem); 20.918 - 20.919 - if (nr_irqs > 1) 20.920 - irq_found = -irq_found; 20.921 - return irq_found; 20.922 -} 20.923 - 20.924 -EXPORT_SYMBOL(probe_irq_off); 20.925 - 20.926 -/* this was setup_x86_irq but it seems pretty generic */ 20.927 -int setup_irq(unsigned int irq, struct irqaction * new) 20.928 -{ 20.929 - int shared = 0; 20.930 - unsigned long flags; 20.931 - struct irqaction *old, **p; 20.932 - irq_desc_t *desc = irq_desc + irq; 20.933 - 20.934 - if (desc->handler == &no_irq_type) 20.935 - return -ENOSYS; 20.936 - /* 20.937 - * Some drivers like serial.c use request_irq() heavily, 20.938 - * so we have to be careful not to interfere with a 20.939 - * running system. 20.940 - */ 20.941 - if (new->flags & SA_SAMPLE_RANDOM) { 20.942 - /* 20.943 - * This function might sleep, we want to call it first, 20.944 - * outside of the atomic block. 20.945 - * Yes, this might clear the entropy pool if the wrong 20.946 - * driver is attempted to be loaded, without actually 20.947 - * installing a new handler, but is this really a problem, 20.948 - * only the sysadmin is able to do this. 20.949 - */ 20.950 - rand_initialize_irq(irq); 20.951 - } 20.952 - 20.953 - /* 20.954 - * The following block of code has to be executed atomically 20.955 - */ 20.956 - spin_lock_irqsave(&desc->lock,flags); 20.957 - p = &desc->action; 20.958 - if ((old = *p) != NULL) { 20.959 - /* Can't share interrupts unless both agree to */ 20.960 - if (!(old->flags & new->flags & SA_SHIRQ)) { 20.961 - spin_unlock_irqrestore(&desc->lock,flags); 20.962 - return -EBUSY; 20.963 - } 20.964 - 20.965 - /* add new interrupt at end of irq queue */ 20.966 - do { 20.967 - p = &old->next; 20.968 - old = *p; 20.969 - } while (old); 20.970 - shared = 1; 20.971 - } 20.972 - 20.973 - *p = new; 20.974 - 20.975 - if (!shared) { 20.976 - desc->depth = 0; 20.977 - desc->status &= ~(IRQ_DISABLED | IRQ_AUTODETECT | IRQ_WAITING | IRQ_INPROGRESS); 20.978 - desc->handler->startup(irq); 20.979 - } 20.980 - spin_unlock_irqrestore(&desc->lock,flags); 20.981 - 20.982 - register_irq_proc(irq); 20.983 - return 0; 20.984 -} 20.985 - 20.986 -static struct proc_dir_entry * root_irq_dir; 20.987 -static struct proc_dir_entry * irq_dir [NR_IRQS]; 20.988 - 20.989 -#ifdef CONFIG_SMP 20.990 - 20.991 -static struct proc_dir_entry *smp_affinity_entry[NR_IRQS]; 20.992 - 20.993 -cpumask_t irq_affinity[NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL }; 20.994 - 20.995 -static int irq_affinity_read_proc(char *page, char **start, off_t off, 20.996 - int count, int *eof, void *data) 20.997 -{ 20.998 - int len = cpumask_scnprintf(page, count, irq_affinity[(long)data]); 20.999 - if (count - len < 2) 20.1000 - return -EINVAL; 20.1001 - len += sprintf(page + len, "\n"); 20.1002 - return len; 20.1003 -} 20.1004 - 20.1005 -static int irq_affinity_write_proc(struct file *file, const char __user *buffer, 20.1006 - unsigned long count, void *data) 20.1007 -{ 20.1008 - int irq = (long)data, full_count = count, err; 20.1009 - cpumask_t new_value, tmp; 20.1010 - 20.1011 - if (!irq_desc[irq].handler->set_affinity) 20.1012 - return -EIO; 20.1013 - 20.1014 - err = cpumask_parse(buffer, count, new_value); 20.1015 - if (err) 20.1016 - return err; 20.1017 - 20.1018 - /* 20.1019 - * Do not allow disabling IRQs completely - it's a too easy 20.1020 - * way to make the system unusable accidentally :-) At least 20.1021 - * one online CPU still has to be targeted. 20.1022 - */ 20.1023 - cpus_and(tmp, new_value, cpu_online_map); 20.1024 - if (cpus_empty(tmp)) 20.1025 - return -EINVAL; 20.1026 - 20.1027 - irq_affinity[irq] = new_value; 20.1028 - irq_desc[irq].handler->set_affinity(irq, 20.1029 - cpumask_of_cpu(first_cpu(new_value))); 20.1030 - 20.1031 - return full_count; 20.1032 -} 20.1033 - 20.1034 -#endif 20.1035 - 20.1036 -static int prof_cpu_mask_read_proc (char *page, char **start, off_t off, 20.1037 - int count, int *eof, void *data) 20.1038 -{ 20.1039 - int len = cpumask_scnprintf(page, count, *(cpumask_t *)data); 20.1040 - if (count - len < 2) 20.1041 - return -EINVAL; 20.1042 - len += sprintf(page + len, "\n"); 20.1043 - return len; 20.1044 -} 20.1045 - 20.1046 -static int prof_cpu_mask_write_proc (struct file *file, const char __user *buffer, 20.1047 - unsigned long count, void *data) 20.1048 -{ 20.1049 - cpumask_t *mask = (cpumask_t *)data; 20.1050 - unsigned long full_count = count, err; 20.1051 - cpumask_t new_value; 20.1052 - 20.1053 - err = cpumask_parse(buffer, count, new_value); 20.1054 - if (err) 20.1055 - return err; 20.1056 - 20.1057 - *mask = new_value; 20.1058 - return full_count; 20.1059 -} 20.1060 - 20.1061 -#define MAX_NAMELEN 10 20.1062 - 20.1063 -static void register_irq_proc (unsigned int irq) 20.1064 -{ 20.1065 - char name [MAX_NAMELEN]; 20.1066 - 20.1067 - if (!root_irq_dir || (irq_desc[irq].handler == &no_irq_type) || 20.1068 - irq_dir[irq]) 20.1069 - return; 20.1070 - 20.1071 - memset(name, 0, MAX_NAMELEN); 20.1072 - sprintf(name, "%d", irq); 20.1073 - 20.1074 - /* create /proc/irq/1234 */ 20.1075 - irq_dir[irq] = proc_mkdir(name, root_irq_dir); 20.1076 - 20.1077 -#ifdef CONFIG_SMP 20.1078 - { 20.1079 - struct proc_dir_entry *entry; 20.1080 - 20.1081 - /* create /proc/irq/1234/smp_affinity */ 20.1082 - entry = create_proc_entry("smp_affinity", 0600, irq_dir[irq]); 20.1083 - 20.1084 - if (entry) { 20.1085 - entry->nlink = 1; 20.1086 - entry->data = (void *)(long)irq; 20.1087 - entry->read_proc = irq_affinity_read_proc; 20.1088 - entry->write_proc = irq_affinity_write_proc; 20.1089 - } 20.1090 - 20.1091 - smp_affinity_entry[irq] = entry; 20.1092 - } 20.1093 -#endif 20.1094 -} 20.1095 - 20.1096 -unsigned long prof_cpu_mask = -1; 20.1097 - 20.1098 -void init_irq_proc (void) 20.1099 -{ 20.1100 - struct proc_dir_entry *entry; 20.1101 - int i; 20.1102 - 20.1103 - /* create /proc/irq */ 20.1104 - root_irq_dir = proc_mkdir("irq", 0); 20.1105 - 20.1106 - /* create /proc/irq/prof_cpu_mask */ 20.1107 - entry = create_proc_entry("prof_cpu_mask", 0600, root_irq_dir); 20.1108 - 20.1109 - if (!entry) 20.1110 - return; 20.1111 - 20.1112 - entry->nlink = 1; 20.1113 - entry->data = (void *)&prof_cpu_mask; 20.1114 - entry->read_proc = prof_cpu_mask_read_proc; 20.1115 - entry->write_proc = prof_cpu_mask_write_proc; 20.1116 - 20.1117 - /* 20.1118 - * Create entries for all existing IRQs. 20.1119 - */ 20.1120 - for (i = 0; i < NR_IRQS; i++) 20.1121 - register_irq_proc(i); 20.1122 -} 20.1123 - 20.1124 - 20.1125 -#ifdef CONFIG_4KSTACKS 20.1126 -static char softirq_stack[NR_CPUS * THREAD_SIZE] __attribute__((__aligned__(THREAD_SIZE), __section__(".bss.page_aligned"))); 20.1127 -static char hardirq_stack[NR_CPUS * THREAD_SIZE] __attribute__((__aligned__(THREAD_SIZE), __section__(".bss.page_aligned"))); 20.1128 - 20.1129 -/* 20.1130 - * allocate per-cpu stacks for hardirq and for softirq processing 20.1131 - */ 20.1132 -void irq_ctx_init(int cpu) 20.1133 -{ 20.1134 - union irq_ctx *irqctx; 20.1135 - 20.1136 - if (hardirq_ctx[cpu]) 20.1137 - return; 20.1138 - 20.1139 - irqctx = (union irq_ctx*) &hardirq_stack[cpu*THREAD_SIZE]; 20.1140 - irqctx->tinfo.task = NULL; 20.1141 - irqctx->tinfo.exec_domain = NULL; 20.1142 - irqctx->tinfo.cpu = cpu; 20.1143 - irqctx->tinfo.preempt_count = HARDIRQ_OFFSET; 20.1144 - irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); 20.1145 - 20.1146 - hardirq_ctx[cpu] = irqctx; 20.1147 - 20.1148 - irqctx = (union irq_ctx*) &softirq_stack[cpu*THREAD_SIZE]; 20.1149 - irqctx->tinfo.task = NULL; 20.1150 - irqctx->tinfo.exec_domain = NULL; 20.1151 - irqctx->tinfo.cpu = cpu; 20.1152 - irqctx->tinfo.preempt_count = SOFTIRQ_OFFSET; 20.1153 - irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); 20.1154 - 20.1155 - softirq_ctx[cpu] = irqctx; 20.1156 - 20.1157 - printk("CPU %u irqstacks, hard=%p soft=%p\n", 20.1158 - cpu,hardirq_ctx[cpu],softirq_ctx[cpu]); 20.1159 -} 20.1160 - 20.1161 -extern asmlinkage void __do_softirq(void); 20.1162 - 20.1163 -asmlinkage void do_softirq(void) 20.1164 -{ 20.1165 - unsigned long flags; 20.1166 - struct thread_info *curctx; 20.1167 - union irq_ctx *irqctx; 20.1168 - u32 *isp; 20.1169 - 20.1170 - if (in_interrupt()) 20.1171 - return; 20.1172 - 20.1173 - local_irq_save(flags); 20.1174 - 20.1175 - if (local_softirq_pending()) { 20.1176 - curctx = current_thread_info(); 20.1177 - irqctx = softirq_ctx[smp_processor_id()]; 20.1178 - irqctx->tinfo.task = curctx->task; 20.1179 - irqctx->tinfo.previous_esp = current_stack_pointer(); 20.1180 - 20.1181 - /* build the stack frame on the softirq stack */ 20.1182 - isp = (u32*) ((char*)irqctx + sizeof(*irqctx)); 20.1183 - 20.1184 - 20.1185 - asm volatile( 20.1186 - " xchgl %%ebx,%%esp \n" 20.1187 - " call __do_softirq \n" 20.1188 - " movl %%ebx,%%esp \n" 20.1189 - : "=b"(isp) 20.1190 - : "0"(isp) 20.1191 - : "memory", "cc", "edx", "ecx", "eax" 20.1192 - ); 20.1193 - } 20.1194 - 20.1195 - local_irq_restore(flags); 20.1196 -} 20.1197 - 20.1198 -EXPORT_SYMBOL(do_softirq); 20.1199 -#endif
21.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/ldt.c Wed Aug 25 16:26:15 2004 +0000 21.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 21.3 @@ -1,262 +0,0 @@ 21.4 -/* 21.5 - * linux/kernel/ldt.c 21.6 - * 21.7 - * Copyright (C) 1992 Krishna Balasubramanian and Linus Torvalds 21.8 - * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com> 21.9 - */ 21.10 - 21.11 -#include <linux/errno.h> 21.12 -#include <linux/sched.h> 21.13 -#include <linux/string.h> 21.14 -#include <linux/mm.h> 21.15 -#include <linux/smp.h> 21.16 -#include <linux/smp_lock.h> 21.17 -#include <linux/vmalloc.h> 21.18 -#include <linux/slab.h> 21.19 - 21.20 -#include <asm/uaccess.h> 21.21 -#include <asm/system.h> 21.22 -#include <asm/ldt.h> 21.23 -#include <asm/desc.h> 21.24 - 21.25 -#ifdef CONFIG_SMP /* avoids "defined but not used" warnig */ 21.26 -static void flush_ldt(void *null) 21.27 -{ 21.28 - if (current->active_mm) 21.29 - load_LDT(¤t->active_mm->context); 21.30 -} 21.31 -#endif 21.32 - 21.33 -static int alloc_ldt(mm_context_t *pc, int mincount, int reload) 21.34 -{ 21.35 - void *oldldt; 21.36 - void *newldt; 21.37 - int oldsize; 21.38 - 21.39 - if (mincount <= pc->size) 21.40 - return 0; 21.41 - oldsize = pc->size; 21.42 - mincount = (mincount+511)&(~511); 21.43 - if (mincount*LDT_ENTRY_SIZE > PAGE_SIZE) 21.44 - newldt = vmalloc(mincount*LDT_ENTRY_SIZE); 21.45 - else 21.46 - newldt = kmalloc(mincount*LDT_ENTRY_SIZE, GFP_KERNEL); 21.47 - 21.48 - if (!newldt) 21.49 - return -ENOMEM; 21.50 - 21.51 - if (oldsize) 21.52 - memcpy(newldt, pc->ldt, oldsize*LDT_ENTRY_SIZE); 21.53 - oldldt = pc->ldt; 21.54 - memset(newldt+oldsize*LDT_ENTRY_SIZE, 0, (mincount-oldsize)*LDT_ENTRY_SIZE); 21.55 - pc->ldt = newldt; 21.56 - wmb(); 21.57 - pc->size = mincount; 21.58 - wmb(); 21.59 - 21.60 - if (reload) { 21.61 -#ifdef CONFIG_SMP 21.62 - cpumask_t mask; 21.63 - preempt_disable(); 21.64 -#endif 21.65 - make_pages_readonly(pc->ldt, (pc->size * LDT_ENTRY_SIZE) / 21.66 - PAGE_SIZE); 21.67 - load_LDT(pc); 21.68 - flush_page_update_queue(); 21.69 -#ifdef CONFIG_SMP 21.70 - mask = cpumask_of_cpu(smp_processor_id()); 21.71 - if (!cpus_equal(current->mm->cpu_vm_mask, mask)) 21.72 - smp_call_function(flush_ldt, 0, 1, 1); 21.73 - preempt_enable(); 21.74 -#endif 21.75 - } 21.76 - if (oldsize) { 21.77 - make_pages_writable(oldldt, (oldsize * LDT_ENTRY_SIZE) / 21.78 - PAGE_SIZE); 21.79 - flush_page_update_queue(); 21.80 - if (oldsize*LDT_ENTRY_SIZE > PAGE_SIZE) 21.81 - vfree(oldldt); 21.82 - else 21.83 - kfree(oldldt); 21.84 - } 21.85 - return 0; 21.86 -} 21.87 - 21.88 -static inline int copy_ldt(mm_context_t *new, mm_context_t *old) 21.89 -{ 21.90 - int err = alloc_ldt(new, old->size, 0); 21.91 - if (err < 0) 21.92 - return err; 21.93 - memcpy(new->ldt, old->ldt, old->size*LDT_ENTRY_SIZE); 21.94 - make_pages_readonly(new->ldt, (new->size * LDT_ENTRY_SIZE) / 21.95 - PAGE_SIZE); 21.96 - return 0; 21.97 -} 21.98 - 21.99 -/* 21.100 - * we do not have to muck with descriptors here, that is 21.101 - * done in switch_mm() as needed. 21.102 - */ 21.103 -int init_new_context(struct task_struct *tsk, struct mm_struct *mm) 21.104 -{ 21.105 - struct mm_struct * old_mm; 21.106 - int retval = 0; 21.107 - 21.108 - init_MUTEX(&mm->context.sem); 21.109 - mm->context.size = 0; 21.110 - old_mm = current->mm; 21.111 - if (old_mm && old_mm->context.size > 0) { 21.112 - down(&old_mm->context.sem); 21.113 - retval = copy_ldt(&mm->context, &old_mm->context); 21.114 - up(&old_mm->context.sem); 21.115 - } 21.116 - return retval; 21.117 -} 21.118 - 21.119 -/* 21.120 - * No need to lock the MM as we are the last user 21.121 - */ 21.122 -void destroy_context(struct mm_struct *mm) 21.123 -{ 21.124 - if (mm->context.size) { 21.125 - if (mm == current->active_mm) 21.126 - clear_LDT(); 21.127 - make_pages_writable(mm->context.ldt, 21.128 - (mm->context.size * LDT_ENTRY_SIZE) / 21.129 - PAGE_SIZE); 21.130 - flush_page_update_queue(); 21.131 - if (mm->context.size*LDT_ENTRY_SIZE > PAGE_SIZE) 21.132 - vfree(mm->context.ldt); 21.133 - else 21.134 - kfree(mm->context.ldt); 21.135 - mm->context.size = 0; 21.136 - } 21.137 -} 21.138 - 21.139 -static int read_ldt(void __user * ptr, unsigned long bytecount) 21.140 -{ 21.141 - int err; 21.142 - unsigned long size; 21.143 - struct mm_struct * mm = current->mm; 21.144 - 21.145 - if (!mm->context.size) 21.146 - return 0; 21.147 - if (bytecount > LDT_ENTRY_SIZE*LDT_ENTRIES) 21.148 - bytecount = LDT_ENTRY_SIZE*LDT_ENTRIES; 21.149 - 21.150 - down(&mm->context.sem); 21.151 - size = mm->context.size*LDT_ENTRY_SIZE; 21.152 - if (size > bytecount) 21.153 - size = bytecount; 21.154 - 21.155 - err = 0; 21.156 - if (copy_to_user(ptr, mm->context.ldt, size)) 21.157 - err = -EFAULT; 21.158 - up(&mm->context.sem); 21.159 - if (err < 0) 21.160 - return err; 21.161 - if (size != bytecount) { 21.162 - /* zero-fill the rest */ 21.163 - clear_user(ptr+size, bytecount-size); 21.164 - } 21.165 - return bytecount; 21.166 -} 21.167 - 21.168 -static int read_default_ldt(void __user * ptr, unsigned long bytecount) 21.169 -{ 21.170 - int err; 21.171 - unsigned long size; 21.172 - void *address; 21.173 - 21.174 - err = 0; 21.175 - address = &default_ldt[0]; 21.176 - size = 5*sizeof(struct desc_struct); 21.177 - if (size > bytecount) 21.178 - size = bytecount; 21.179 - 21.180 - err = size; 21.181 - if (copy_to_user(ptr, address, size)) 21.182 - err = -EFAULT; 21.183 - 21.184 - return err; 21.185 -} 21.186 - 21.187 -static int write_ldt(void __user * ptr, unsigned long bytecount, int oldmode) 21.188 -{ 21.189 - struct mm_struct * mm = current->mm; 21.190 - __u32 entry_1, entry_2, *lp; 21.191 - unsigned long phys_lp; 21.192 - int error; 21.193 - struct user_desc ldt_info; 21.194 - 21.195 - error = -EINVAL; 21.196 - if (bytecount != sizeof(ldt_info)) 21.197 - goto out; 21.198 - error = -EFAULT; 21.199 - if (copy_from_user(&ldt_info, ptr, sizeof(ldt_info))) 21.200 - goto out; 21.201 - 21.202 - error = -EINVAL; 21.203 - if (ldt_info.entry_number >= LDT_ENTRIES) 21.204 - goto out; 21.205 - if (ldt_info.contents == 3) { 21.206 - if (oldmode) 21.207 - goto out; 21.208 - if (ldt_info.seg_not_present == 0) 21.209 - goto out; 21.210 - } 21.211 - 21.212 - down(&mm->context.sem); 21.213 - if (ldt_info.entry_number >= mm->context.size) { 21.214 - error = alloc_ldt(¤t->mm->context, ldt_info.entry_number+1, 1); 21.215 - if (error < 0) 21.216 - goto out_unlock; 21.217 - } 21.218 - 21.219 - lp = (__u32 *) ((ldt_info.entry_number << 3) + (char *) mm->context.ldt); 21.220 - phys_lp = arbitrary_virt_to_phys(lp); 21.221 - 21.222 - /* Allow LDTs to be cleared by the user. */ 21.223 - if (ldt_info.base_addr == 0 && ldt_info.limit == 0) { 21.224 - if (oldmode || LDT_empty(&ldt_info)) { 21.225 - entry_1 = 0; 21.226 - entry_2 = 0; 21.227 - goto install; 21.228 - } 21.229 - } 21.230 - 21.231 - entry_1 = LDT_entry_a(&ldt_info); 21.232 - entry_2 = LDT_entry_b(&ldt_info); 21.233 - if (oldmode) 21.234 - entry_2 &= ~(1 << 20); 21.235 - 21.236 - /* Install the new entry ... */ 21.237 -install: 21.238 - error = HYPERVISOR_update_descriptor(phys_lp, entry_1, entry_2); 21.239 - 21.240 -out_unlock: 21.241 - up(&mm->context.sem); 21.242 -out: 21.243 - return error; 21.244 -} 21.245 - 21.246 -asmlinkage int sys_modify_ldt(int func, void __user *ptr, unsigned long bytecount) 21.247 -{ 21.248 - int ret = -ENOSYS; 21.249 - 21.250 - switch (func) { 21.251 - case 0: 21.252 - ret = read_ldt(ptr, bytecount); 21.253 - break; 21.254 - case 1: 21.255 - ret = write_ldt(ptr, bytecount, 1); 21.256 - break; 21.257 - case 2: 21.258 - ret = read_default_ldt(ptr, bytecount); 21.259 - break; 21.260 - case 0x11: 21.261 - ret = write_ldt(ptr, bytecount, 0); 21.262 - break; 21.263 - } 21.264 - return ret; 21.265 -}
22.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/pci-dma.c Wed Aug 25 16:26:15 2004 +0000 22.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 22.3 @@ -1,103 +0,0 @@ 22.4 -/* 22.5 - * Dynamic DMA mapping support. 22.6 - * 22.7 - * On i386 there is no hardware dynamic DMA address translation, 22.8 - * so consistent alloc/free are merely page allocation/freeing. 22.9 - * The rest of the dynamic DMA mapping interface is implemented 22.10 - * in asm/pci.h. 22.11 - */ 22.12 - 22.13 -#include <linux/types.h> 22.14 -#include <linux/mm.h> 22.15 -#include <linux/string.h> 22.16 -#include <linux/pci.h> 22.17 -#include <linux/version.h> 22.18 -#include <asm/io.h> 22.19 - 22.20 -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) 22.21 -#define pte_offset_kernel pte_offset 22.22 -void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size, 22.23 - dma_addr_t *dma_handle) 22.24 -#else 22.25 -void *dma_alloc_coherent(struct device *dev, size_t size, 22.26 - dma_addr_t *dma_handle, int gfp) 22.27 -#endif 22.28 -{ 22.29 - void *ret; 22.30 - unsigned int order = get_order(size); 22.31 - unsigned long vstart; 22.32 - 22.33 -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) 22.34 - int gfp = GFP_ATOMIC; 22.35 - 22.36 - if (hwdev == NULL || ((u32)hwdev->dma_mask < 0xffffffff)) 22.37 - gfp |= GFP_DMA; 22.38 -#else 22.39 - /* ignore region specifiers */ 22.40 - gfp &= ~(__GFP_DMA | __GFP_HIGHMEM); 22.41 - 22.42 - if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff)) 22.43 - gfp |= GFP_DMA; 22.44 -#endif 22.45 - 22.46 - ret = (void *)vstart = __get_free_pages(gfp, order); 22.47 - if (ret == NULL) 22.48 - return ret; 22.49 - 22.50 - /* 22.51 - * Ensure multi-page extents are contiguous in machine memory. 22.52 - * This code could be cleaned up some, and the number of 22.53 - * hypercalls reduced. 22.54 - */ 22.55 - if (size > PAGE_SIZE) { 22.56 - pgd_t *pgd; 22.57 - pmd_t *pmd; 22.58 - pte_t *pte; 22.59 - unsigned long pfn, i; 22.60 - /* 1. Zap current PTEs, giving away the underlying pages. */ 22.61 - for (i = 0; i < (1<<order); i++) { 22.62 - pgd = pgd_offset_k( (vstart + (i*PAGE_SIZE))); 22.63 - pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE))); 22.64 - pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE))); 22.65 - pfn = pte->pte_low >> PAGE_SHIFT; 22.66 - queue_l1_entry_update(pte, 0); 22.67 - phys_to_machine_mapping[(__pa(ret)>>PAGE_SHIFT)+i] = 22.68 - INVALID_P2M_ENTRY; 22.69 - flush_page_update_queue(); 22.70 - if (HYPERVISOR_dom_mem_op(MEMOP_decrease_reservation, 22.71 - &pfn, 1, 0) != 1) BUG(); 22.72 - } 22.73 - /* 2. Get a new contiguous memory extent. */ 22.74 - if (HYPERVISOR_dom_mem_op(MEMOP_increase_reservation, 22.75 - &pfn, 1, order) != 1) BUG(); 22.76 - /* 3. Map the new extent in place of old pages. */ 22.77 - for (i = 0; i < (1<<order); i++) { 22.78 - pgd = pgd_offset_k( (vstart + (i*PAGE_SIZE))); 22.79 - pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE))); 22.80 - pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE))); 22.81 - queue_l1_entry_update( 22.82 - pte, ((pfn+i)<<PAGE_SHIFT)|__PAGE_KERNEL); 22.83 - queue_machphys_update( 22.84 - pfn+i, (__pa(ret)>>PAGE_SHIFT)+i); 22.85 - phys_to_machine_mapping[(__pa(ret)>>PAGE_SHIFT)+i] = 22.86 - pfn+i; 22.87 - } 22.88 - flush_page_update_queue(); 22.89 - } 22.90 - 22.91 - memset(ret, 0, size); 22.92 - *dma_handle = virt_to_bus(ret); 22.93 - 22.94 - return ret; 22.95 -} 22.96 - 22.97 -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) 22.98 -void pci_free_consistent(struct pci_dev *hwdev, size_t size, 22.99 - void *vaddr, dma_addr_t dma_handle) 22.100 -#else 22.101 -void dma_free_coherent(struct device *dev, size_t size, 22.102 - void *vaddr, dma_addr_t dma_handle) 22.103 -#endif 22.104 -{ 22.105 - free_pages((unsigned long)vaddr, get_order(size)); 22.106 -}
23.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/process.c Wed Aug 25 16:26:15 2004 +0000 23.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 23.3 @@ -1,819 +0,0 @@ 23.4 -/* 23.5 - * linux/arch/i386/kernel/process.c 23.6 - * 23.7 - * Copyright (C) 1995 Linus Torvalds 23.8 - * 23.9 - * Pentium III FXSR, SSE support 23.10 - * Gareth Hughes <gareth@valinux.com>, May 2000 23.11 - */ 23.12 - 23.13 -/* 23.14 - * This file handles the architecture-dependent parts of process handling.. 23.15 - */ 23.16 - 23.17 -#include <stdarg.h> 23.18 - 23.19 -#include <linux/errno.h> 23.20 -#include <linux/sched.h> 23.21 -#include <linux/fs.h> 23.22 -#include <linux/kernel.h> 23.23 -#include <linux/mm.h> 23.24 -#include <linux/elfcore.h> 23.25 -#include <linux/smp.h> 23.26 -#include <linux/smp_lock.h> 23.27 -#include <linux/stddef.h> 23.28 -#include <linux/slab.h> 23.29 -#include <linux/vmalloc.h> 23.30 -#include <linux/user.h> 23.31 -#include <linux/a.out.h> 23.32 -#include <linux/interrupt.h> 23.33 -#include <linux/config.h> 23.34 -#include <linux/version.h> 23.35 -#include <linux/delay.h> 23.36 -#include <linux/reboot.h> 23.37 -#include <linux/init.h> 23.38 -#include <linux/mc146818rtc.h> 23.39 -#include <linux/module.h> 23.40 -#include <linux/kallsyms.h> 23.41 -#include <linux/ptrace.h> 23.42 - 23.43 -#include <asm/uaccess.h> 23.44 -#include <asm/pgtable.h> 23.45 -#include <asm/system.h> 23.46 -#include <asm/io.h> 23.47 -#include <asm/ldt.h> 23.48 -#include <asm/processor.h> 23.49 -#include <asm/i387.h> 23.50 -#include <asm/irq.h> 23.51 -#include <asm/desc.h> 23.52 -#include <asm-xen/multicall.h> 23.53 -#include <asm/hypervisor-ifs/dom0_ops.h> 23.54 -#ifdef CONFIG_MATH_EMULATION 23.55 -#include <asm/math_emu.h> 23.56 -#endif 23.57 - 23.58 -#include <linux/irq.h> 23.59 -#include <linux/err.h> 23.60 - 23.61 -asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); 23.62 - 23.63 -int hlt_counter; 23.64 - 23.65 -/* 23.66 - * Return saved PC of a blocked thread. 23.67 - */ 23.68 -unsigned long thread_saved_pc(struct task_struct *tsk) 23.69 -{ 23.70 - return ((unsigned long *)tsk->thread.esp)[3]; 23.71 -} 23.72 - 23.73 -/* 23.74 - * Powermanagement idle function, if any.. 23.75 - */ 23.76 -void (*pm_idle)(void); 23.77 - 23.78 -void disable_hlt(void) 23.79 -{ 23.80 - hlt_counter++; 23.81 -} 23.82 - 23.83 -EXPORT_SYMBOL(disable_hlt); 23.84 - 23.85 -void enable_hlt(void) 23.86 -{ 23.87 - hlt_counter--; 23.88 -} 23.89 - 23.90 -EXPORT_SYMBOL(enable_hlt); 23.91 - 23.92 -/* 23.93 - * We use this if we don't have any better 23.94 - * idle routine.. 23.95 - */ 23.96 -void default_idle(void) 23.97 -{ 23.98 - if (!hlt_counter && current_cpu_data.hlt_works_ok) { 23.99 - local_irq_disable(); 23.100 - if (!need_resched()) 23.101 - safe_halt(); 23.102 - else 23.103 - local_irq_enable(); 23.104 - } 23.105 -} 23.106 - 23.107 -/* 23.108 - * On SMP it's slightly faster (but much more power-consuming!) 23.109 - * to poll the ->work.need_resched flag instead of waiting for the 23.110 - * cross-CPU IPI to arrive. Use this option with caution. 23.111 - */ 23.112 -static void poll_idle (void) 23.113 -{ 23.114 - int oldval; 23.115 - 23.116 - local_irq_enable(); 23.117 - 23.118 - /* 23.119 - * Deal with another CPU just having chosen a thread to 23.120 - * run here: 23.121 - */ 23.122 - oldval = test_and_clear_thread_flag(TIF_NEED_RESCHED); 23.123 - 23.124 - if (!oldval) { 23.125 - set_thread_flag(TIF_POLLING_NRFLAG); 23.126 - asm volatile( 23.127 - "2:" 23.128 - "testl %0, %1;" 23.129 - "rep; nop;" 23.130 - "je 2b;" 23.131 - : : "i"(_TIF_NEED_RESCHED), "m" (current_thread_info()->flags)); 23.132 - 23.133 - clear_thread_flag(TIF_POLLING_NRFLAG); 23.134 - } else { 23.135 - set_need_resched(); 23.136 - } 23.137 -} 23.138 - 23.139 -/* 23.140 - * The idle thread. There's no useful work to be 23.141 - * done, so just try to conserve power and have a 23.142 - * low exit latency (ie sit in a loop waiting for 23.143 - * somebody to say that they'd like to reschedule) 23.144 - */ 23.145 -void cpu_idle (void) 23.146 -{ 23.147 - /* endless idle loop with no priority at all */ 23.148 - while (1) { 23.149 - while (!need_resched()) { 23.150 - void (*idle)(void) = pm_idle; 23.151 - 23.152 - if (!idle) 23.153 - idle = default_idle; 23.154 - 23.155 - irq_stat[smp_processor_id()].idle_timestamp = jiffies; 23.156 - idle(); 23.157 - } 23.158 - schedule(); 23.159 - } 23.160 -} 23.161 - 23.162 -/* 23.163 - * This uses new MONITOR/MWAIT instructions on P4 processors with PNI, 23.164 - * which can obviate IPI to trigger checking of need_resched. 23.165 - * We execute MONITOR against need_resched and enter optimized wait state 23.166 - * through MWAIT. Whenever someone changes need_resched, we would be woken 23.167 - * up from MWAIT (without an IPI). 23.168 - */ 23.169 -static void mwait_idle(void) 23.170 -{ 23.171 - local_irq_enable(); 23.172 - 23.173 - if (!need_resched()) { 23.174 - set_thread_flag(TIF_POLLING_NRFLAG); 23.175 - do { 23.176 - __monitor((void *)¤t_thread_info()->flags, 0, 0); 23.177 - if (need_resched()) 23.178 - break; 23.179 - __mwait(0, 0); 23.180 - } while (!need_resched()); 23.181 - clear_thread_flag(TIF_POLLING_NRFLAG); 23.182 - } 23.183 -} 23.184 - 23.185 -void __init select_idle_routine(const struct cpuinfo_x86 *c) 23.186 -{ 23.187 - if (cpu_has(c, X86_FEATURE_MWAIT)) { 23.188 - printk("monitor/mwait feature present.\n"); 23.189 - /* 23.190 - * Skip, if setup has overridden idle. 23.191 - * Also, take care of system with asymmetric CPUs. 23.192 - * Use, mwait_idle only if all cpus support it. 23.193 - * If not, we fallback to default_idle() 23.194 - */ 23.195 - if (!pm_idle) { 23.196 - printk("using mwait in idle threads.\n"); 23.197 - pm_idle = mwait_idle; 23.198 - } 23.199 - return; 23.200 - } 23.201 - if (!pm_idle) 23.202 - pm_idle = default_idle; 23.203 - return; 23.204 -} 23.205 - 23.206 -static int __init idle_setup (char *str) 23.207 -{ 23.208 - if (!strncmp(str, "poll", 4)) { 23.209 - printk("using polling idle threads.\n"); 23.210 - pm_idle = poll_idle; 23.211 -#ifdef CONFIG_X86_SMP 23.212 - if (smp_num_siblings > 1) 23.213 - printk("WARNING: polling idle and HT enabled, performance may degrade.\n"); 23.214 -#endif 23.215 - } else if (!strncmp(str, "halt", 4)) { 23.216 - printk("using halt in idle threads.\n"); 23.217 - pm_idle = default_idle; 23.218 - } 23.219 - 23.220 - return 1; 23.221 -} 23.222 - 23.223 -__setup("idle=", idle_setup); 23.224 - 23.225 -void show_regs(struct pt_regs * regs) 23.226 -{ 23.227 - printk("\n"); 23.228 - printk("Pid: %d, comm: %20s\n", current->pid, current->comm); 23.229 - printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, smp_processor_id()); 23.230 - print_symbol("EIP is at %s\n", regs->eip); 23.231 - 23.232 - if (regs->xcs & 2) 23.233 - printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp); 23.234 - printk(" EFLAGS: %08lx %s (%s)\n",regs->eflags, print_tainted(),UTS_RELEASE); 23.235 - printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n", 23.236 - regs->eax,regs->ebx,regs->ecx,regs->edx); 23.237 - printk("ESI: %08lx EDI: %08lx EBP: %08lx", 23.238 - regs->esi, regs->edi, regs->ebp); 23.239 - printk(" DS: %04x ES: %04x\n", 23.240 - 0xffff & regs->xds,0xffff & regs->xes); 23.241 - 23.242 - show_trace(NULL, ®s->esp); 23.243 -} 23.244 - 23.245 -/* 23.246 - * This gets run with %ebx containing the 23.247 - * function to call, and %edx containing 23.248 - * the "args". 23.249 - */ 23.250 -extern void kernel_thread_helper(void); 23.251 -__asm__(".section .text\n" 23.252 - ".align 4\n" 23.253 - "kernel_thread_helper:\n\t" 23.254 - "movl %edx,%eax\n\t" 23.255 - "pushl %edx\n\t" 23.256 - "call *%ebx\n\t" 23.257 - "pushl %eax\n\t" 23.258 - "call do_exit\n" 23.259 - ".previous"); 23.260 - 23.261 -/* 23.262 - * Create a kernel thread 23.263 - */ 23.264 -int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) 23.265 -{ 23.266 - struct pt_regs regs; 23.267 - 23.268 - memset(®s, 0, sizeof(regs)); 23.269 - 23.270 - regs.ebx = (unsigned long) fn; 23.271 - regs.edx = (unsigned long) arg; 23.272 - 23.273 - regs.xds = __USER_DS; 23.274 - regs.xes = __USER_DS; 23.275 - regs.orig_eax = -1; 23.276 - regs.eip = (unsigned long) kernel_thread_helper; 23.277 - regs.xcs = __KERNEL_CS; 23.278 - regs.eflags = X86_EFLAGS_IF | X86_EFLAGS_SF | X86_EFLAGS_PF | 0x2; 23.279 - 23.280 - /* Ok, create the new process.. */ 23.281 - return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0, NULL, NULL); 23.282 -} 23.283 - 23.284 -/* 23.285 - * Free current thread data structures etc.. 23.286 - */ 23.287 -void exit_thread(void) 23.288 -{ 23.289 - struct task_struct *tsk = current; 23.290 - 23.291 - /* The process may have allocated an io port bitmap... nuke it. */ 23.292 - if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) { 23.293 - int cpu = get_cpu(); 23.294 - struct tss_struct *tss = init_tss + cpu; 23.295 - kfree(tsk->thread.io_bitmap_ptr); 23.296 - tsk->thread.io_bitmap_ptr = NULL; 23.297 - tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET; 23.298 - put_cpu(); 23.299 - } 23.300 -} 23.301 - 23.302 -void flush_thread(void) 23.303 -{ 23.304 - struct task_struct *tsk = current; 23.305 - 23.306 - memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8); 23.307 - memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); 23.308 - /* 23.309 - * Forget coprocessor state.. 23.310 - */ 23.311 - clear_fpu(tsk); 23.312 - tsk->used_math = 0; 23.313 -} 23.314 - 23.315 -void release_thread(struct task_struct *dead_task) 23.316 -{ 23.317 - if (dead_task->mm) { 23.318 - // temporary debugging check 23.319 - if (dead_task->mm->context.size) { 23.320 - printk("WARNING: dead process %8s still has LDT? <%p/%d>\n", 23.321 - dead_task->comm, 23.322 - dead_task->mm->context.ldt, 23.323 - dead_task->mm->context.size); 23.324 - BUG(); 23.325 - } 23.326 - } 23.327 - 23.328 - release_x86_irqs(dead_task); 23.329 -} 23.330 - 23.331 -/* 23.332 - * This gets called before we allocate a new thread and copy 23.333 - * the current task into it. 23.334 - */ 23.335 -void prepare_to_copy(struct task_struct *tsk) 23.336 -{ 23.337 - unlazy_fpu(tsk); 23.338 -} 23.339 - 23.340 -int copy_thread(int nr, unsigned long clone_flags, unsigned long esp, 23.341 - unsigned long unused, 23.342 - struct task_struct * p, struct pt_regs * regs) 23.343 -{ 23.344 - struct pt_regs * childregs; 23.345 - struct task_struct *tsk; 23.346 - int err; 23.347 - unsigned long eflags; 23.348 - 23.349 - childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p->thread_info)) - 1; 23.350 - struct_cpy(childregs, regs); 23.351 - childregs->eax = 0; 23.352 - childregs->esp = esp; 23.353 - p->set_child_tid = p->clear_child_tid = NULL; 23.354 - 23.355 - p->thread.esp = (unsigned long) childregs; 23.356 - p->thread.esp0 = (unsigned long) (childregs+1); 23.357 - 23.358 - p->thread.eip = (unsigned long) ret_from_fork; 23.359 - 23.360 - savesegment(fs,p->thread.fs); 23.361 - savesegment(gs,p->thread.gs); 23.362 - 23.363 - tsk = current; 23.364 - if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) { 23.365 - p->thread.io_bitmap_ptr = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL); 23.366 - if (!p->thread.io_bitmap_ptr) 23.367 - return -ENOMEM; 23.368 - memcpy(p->thread.io_bitmap_ptr, tsk->thread.io_bitmap_ptr, 23.369 - IO_BITMAP_BYTES); 23.370 - } 23.371 - 23.372 - /* 23.373 - * Set a new TLS for the child thread? 23.374 - */ 23.375 - if (clone_flags & CLONE_SETTLS) { 23.376 - struct desc_struct *desc; 23.377 - struct user_desc info; 23.378 - int idx; 23.379 - 23.380 - err = -EFAULT; 23.381 - if (copy_from_user(&info, (void __user *)childregs->esi, sizeof(info))) 23.382 - goto out; 23.383 - err = -EINVAL; 23.384 - if (LDT_empty(&info)) 23.385 - goto out; 23.386 - 23.387 - idx = info.entry_number; 23.388 - if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX) 23.389 - goto out; 23.390 - 23.391 - desc = p->thread.tls_array + idx - GDT_ENTRY_TLS_MIN; 23.392 - desc->a = LDT_entry_a(&info); 23.393 - desc->b = LDT_entry_b(&info); 23.394 - } 23.395 - 23.396 - 23.397 - __asm__ __volatile__ ( "pushfl; popl %0" : "=r" (eflags) : ); 23.398 - p->thread.io_pl = (eflags >> 12) & 3; 23.399 - 23.400 - err = 0; 23.401 - out: 23.402 - if (err && p->thread.io_bitmap_ptr) 23.403 - kfree(p->thread.io_bitmap_ptr); 23.404 - return err; 23.405 -} 23.406 - 23.407 -/* 23.408 - * fill in the user structure for a core dump.. 23.409 - */ 23.410 -void dump_thread(struct pt_regs * regs, struct user * dump) 23.411 -{ 23.412 - int i; 23.413 - 23.414 -/* changed the size calculations - should hopefully work better. lbt */ 23.415 - dump->magic = CMAGIC; 23.416 - dump->start_code = 0; 23.417 - dump->start_stack = regs->esp & ~(PAGE_SIZE - 1); 23.418 - dump->u_tsize = ((unsigned long) current->mm->end_code) >> PAGE_SHIFT; 23.419 - dump->u_dsize = ((unsigned long) (current->mm->brk + (PAGE_SIZE-1))) >> PAGE_SHIFT; 23.420 - dump->u_dsize -= dump->u_tsize; 23.421 - dump->u_ssize = 0; 23.422 - for (i = 0; i < 8; i++) 23.423 - dump->u_debugreg[i] = current->thread.debugreg[i]; 23.424 - 23.425 - if (dump->start_stack < TASK_SIZE) 23.426 - dump->u_ssize = ((unsigned long) (TASK_SIZE - dump->start_stack)) >> PAGE_SHIFT; 23.427 - 23.428 - dump->regs.ebx = regs->ebx; 23.429 - dump->regs.ecx = regs->ecx; 23.430 - dump->regs.edx = regs->edx; 23.431 - dump->regs.esi = regs->esi; 23.432 - dump->regs.edi = regs->edi; 23.433 - dump->regs.ebp = regs->ebp; 23.434 - dump->regs.eax = regs->eax; 23.435 - dump->regs.ds = regs->xds; 23.436 - dump->regs.es = regs->xes; 23.437 - savesegment(fs,dump->regs.fs); 23.438 - savesegment(gs,dump->regs.gs); 23.439 - dump->regs.orig_eax = regs->orig_eax; 23.440 - dump->regs.eip = regs->eip; 23.441 - dump->regs.cs = regs->xcs; 23.442 - dump->regs.eflags = regs->eflags; 23.443 - dump->regs.esp = regs->esp; 23.444 - dump->regs.ss = regs->xss; 23.445 - 23.446 - dump->u_fpvalid = dump_fpu (regs, &dump->i387); 23.447 -} 23.448 - 23.449 -/* 23.450 - * Capture the user space registers if the task is not running (in user space) 23.451 - */ 23.452 -int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs) 23.453 -{ 23.454 - struct pt_regs ptregs; 23.455 - 23.456 - ptregs = *(struct pt_regs *) 23.457 - ((unsigned long)tsk->thread_info+THREAD_SIZE - sizeof(ptregs)); 23.458 - ptregs.xcs &= 0xffff; 23.459 - ptregs.xds &= 0xffff; 23.460 - ptregs.xes &= 0xffff; 23.461 - ptregs.xss &= 0xffff; 23.462 - 23.463 - elf_core_copy_regs(regs, &ptregs); 23.464 - 23.465 - return 1; 23.466 -} 23.467 - 23.468 -/* 23.469 - * This special macro can be used to load a debugging register 23.470 - */ 23.471 -#define loaddebug(thread,register) \ 23.472 - HYPERVISOR_set_debugreg((register), \ 23.473 - (thread->debugreg[register])) 23.474 - 23.475 -/* 23.476 - * switch_to(x,yn) should switch tasks from x to y. 23.477 - * 23.478 - * We fsave/fwait so that an exception goes off at the right time 23.479 - * (as a call from the fsave or fwait in effect) rather than to 23.480 - * the wrong process. Lazy FP saving no longer makes any sense 23.481 - * with modern CPU's, and this simplifies a lot of things (SMP 23.482 - * and UP become the same). 23.483 - * 23.484 - * NOTE! We used to use the x86 hardware context switching. The 23.485 - * reason for not using it any more becomes apparent when you 23.486 - * try to recover gracefully from saved state that is no longer 23.487 - * valid (stale segment register values in particular). With the 23.488 - * hardware task-switch, there is no way to fix up bad state in 23.489 - * a reasonable manner. 23.490 - * 23.491 - * The fact that Intel documents the hardware task-switching to 23.492 - * be slow is a fairly red herring - this code is not noticeably 23.493 - * faster. However, there _is_ some room for improvement here, 23.494 - * so the performance issues may eventually be a valid point. 23.495 - * More important, however, is the fact that this allows us much 23.496 - * more flexibility. 23.497 - * 23.498 - * The return value (in %eax) will be the "prev" task after 23.499 - * the task-switch, and shows up in ret_from_fork in entry.S, 23.500 - * for example. 23.501 - */ 23.502 -struct task_struct fastcall * __switch_to(struct task_struct *prev_p, struct task_struct *next_p) 23.503 -{ 23.504 - struct thread_struct *prev = &prev_p->thread, 23.505 - *next = &next_p->thread; 23.506 - int cpu = smp_processor_id(); 23.507 - struct tss_struct *tss = init_tss + cpu; 23.508 - dom0_op_t op; 23.509 - 23.510 - /* NB. No need to disable interrupts as already done in sched.c */ 23.511 - /* __cli(); */ 23.512 - 23.513 - /* 23.514 - * Save away %fs and %gs. No need to save %es and %ds, as 23.515 - * those are always kernel segments while inside the kernel. 23.516 - */ 23.517 - asm volatile("movl %%fs,%0":"=m" (*(int *)&prev->fs)); 23.518 - asm volatile("movl %%gs,%0":"=m" (*(int *)&prev->gs)); 23.519 - 23.520 - /* 23.521 - * We clobber FS and GS here so that we avoid a GPF when 23.522 - * restoring previous task's FS/GS values in Xen when the LDT 23.523 - * is switched. If we don't do this then we can end up 23.524 - * erroneously re-flushing the page-update queue when we 23.525 - * 'execute_multicall_list'. 23.526 - */ 23.527 - __asm__ __volatile__ ( 23.528 - "xorl %%eax,%%eax; movl %%eax,%%fs; movl %%eax,%%gs" : : : 23.529 - "eax" ); 23.530 - 23.531 - MULTICALL_flush_page_update_queue(); 23.532 - 23.533 - /* never put a printk in __switch_to... printk() calls wake_up*() indirectly */ 23.534 - 23.535 - /* 23.536 - * This is basically '__unlazy_fpu', except that we queue a 23.537 - * multicall to indicate FPU task switch, rather than 23.538 - * synchronously trapping to Xen. 23.539 - */ 23.540 - if (prev_p->thread_info->status & TS_USEDFPU) { 23.541 - save_init_fpu(prev_p); 23.542 - queue_multicall0(__HYPERVISOR_fpu_taskswitch); 23.543 - } 23.544 - 23.545 - /* 23.546 - * Reload esp0, LDT and the page table pointer: 23.547 - * This is load_esp0(tss, next) with a multicall. 23.548 - */ 23.549 - tss->esp0 = next->esp0; 23.550 - /* This can only happen when SEP is enabled, no need to test 23.551 - * "SEP"arately */ 23.552 - if (unlikely(tss->ss1 != next->sysenter_cs)) { 23.553 - tss->ss1 = next->sysenter_cs; 23.554 - wrmsr(MSR_IA32_SYSENTER_CS, next->sysenter_cs, 0); 23.555 - } 23.556 - queue_multicall2(__HYPERVISOR_stack_switch, tss->ss0, tss->esp0); 23.557 - 23.558 - /* 23.559 - * Load the per-thread Thread-Local Storage descriptor. 23.560 - * This is load_TLS(next, cpu) with multicalls. 23.561 - */ 23.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]) 23.563 - C(0); C(1); C(2); 23.564 -#undef C 23.565 - 23.566 - if (start_info.flags & SIF_PRIVILEGED) { 23.567 - op.cmd = DOM0_IOPL; 23.568 - op.u.iopl.domain = DOMID_SELF; 23.569 - op.u.iopl.iopl = next->io_pl; 23.570 - queue_multicall1(__HYPERVISOR_dom0_op, (unsigned long)&op); 23.571 - } 23.572 - 23.573 - /* EXECUTE ALL TASK SWITCH XEN SYSCALLS AT THIS POINT. */ 23.574 - execute_multicall_list(); 23.575 - /* __sti(); */ 23.576 - 23.577 - /* 23.578 - * Restore %fs and %gs if needed. 23.579 - */ 23.580 - if (unlikely(prev->fs | prev->gs | next->fs | next->gs)) { 23.581 - loadsegment(fs, next->fs); 23.582 - loadsegment(gs, next->gs); 23.583 - } 23.584 - 23.585 - /* 23.586 - * Now maybe reload the debug registers 23.587 - */ 23.588 - if (unlikely(next->debugreg[7])) { 23.589 - loaddebug(next, 0); 23.590 - loaddebug(next, 1); 23.591 - loaddebug(next, 2); 23.592 - loaddebug(next, 3); 23.593 - /* no 4 and 5 */ 23.594 - loaddebug(next, 6); 23.595 - loaddebug(next, 7); 23.596 - } 23.597 - 23.598 - if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr)) { 23.599 - if (next->io_bitmap_ptr) { 23.600 - /* 23.601 - * 4 cachelines copy ... not good, but not that 23.602 - * bad either. Anyone got something better? 23.603 - * This only affects processes which use ioperm(). 23.604 - * [Putting the TSSs into 4k-tlb mapped regions 23.605 - * and playing VM tricks to switch the IO bitmap 23.606 - * is not really acceptable.] 23.607 - */ 23.608 - memcpy(tss->io_bitmap, next->io_bitmap_ptr, 23.609 - IO_BITMAP_BYTES); 23.610 - tss->io_bitmap_base = IO_BITMAP_OFFSET; 23.611 - } else 23.612 - /* 23.613 - * a bitmap offset pointing outside of the TSS limit 23.614 - * causes a nicely controllable SIGSEGV if a process 23.615 - * tries to use a port IO instruction. The first 23.616 - * sys_ioperm() call sets up the bitmap properly. 23.617 - */ 23.618 - tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET; 23.619 - } 23.620 - return prev_p; 23.621 -} 23.622 - 23.623 -asmlinkage int sys_fork(struct pt_regs regs) 23.624 -{ 23.625 - return do_fork(SIGCHLD, regs.esp, ®s, 0, NULL, NULL); 23.626 -} 23.627 - 23.628 -asmlinkage int sys_clone(struct pt_regs regs) 23.629 -{ 23.630 - unsigned long clone_flags; 23.631 - unsigned long newsp; 23.632 - int __user *parent_tidptr, *child_tidptr; 23.633 - 23.634 - clone_flags = regs.ebx; 23.635 - newsp = regs.ecx; 23.636 - parent_tidptr = (int __user *)regs.edx; 23.637 - child_tidptr = (int __user *)regs.edi; 23.638 - if (!newsp) 23.639 - newsp = regs.esp; 23.640 - return do_fork(clone_flags & ~CLONE_IDLETASK, newsp, ®s, 0, parent_tidptr, child_tidptr); 23.641 -} 23.642 - 23.643 -/* 23.644 - * This is trivial, and on the face of it looks like it 23.645 - * could equally well be done in user mode. 23.646 - * 23.647 - * Not so, for quite unobvious reasons - register pressure. 23.648 - * In user mode vfork() cannot have a stack frame, and if 23.649 - * done by calling the "clone()" system call directly, you 23.650 - * do not have enough call-clobbered registers to hold all 23.651 - * the information you need. 23.652 - */ 23.653 -asmlinkage int sys_vfork(struct pt_regs regs) 23.654 -{ 23.655 - return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs.esp, ®s, 0, NULL, NULL); 23.656 -} 23.657 - 23.658 -/* 23.659 - * sys_execve() executes a new program. 23.660 - */ 23.661 -asmlinkage int sys_execve(struct pt_regs regs) 23.662 -{ 23.663 - int error; 23.664 - char * filename; 23.665 - 23.666 - filename = getname((char __user *) regs.ebx); 23.667 - error = PTR_ERR(filename); 23.668 - if (IS_ERR(filename)) 23.669 - goto out; 23.670 - error = do_execve(filename, 23.671 - (char __user * __user *) regs.ecx, 23.672 - (char __user * __user *) regs.edx, 23.673 - ®s); 23.674 - if (error == 0) { 23.675 - current->ptrace &= ~PT_DTRACE; 23.676 - /* Make sure we don't return using sysenter.. */ 23.677 - set_thread_flag(TIF_IRET); 23.678 - } 23.679 - putname(filename); 23.680 -out: 23.681 - return error; 23.682 -} 23.683 - 23.684 -#define top_esp (THREAD_SIZE - sizeof(unsigned long)) 23.685 -#define top_ebp (THREAD_SIZE - 2*sizeof(unsigned long)) 23.686 - 23.687 -unsigned long get_wchan(struct task_struct *p) 23.688 -{ 23.689 - unsigned long ebp, esp, eip; 23.690 - unsigned long stack_page; 23.691 - int count = 0; 23.692 - if (!p || p == current || p->state == TASK_RUNNING) 23.693 - return 0; 23.694 - stack_page = (unsigned long)p->thread_info; 23.695 - esp = p->thread.esp; 23.696 - if (!stack_page || esp < stack_page || esp > top_esp+stack_page) 23.697 - return 0; 23.698 - /* include/asm-i386/system.h:switch_to() pushes ebp last. */ 23.699 - ebp = *(unsigned long *) esp; 23.700 - do { 23.701 - if (ebp < stack_page || ebp > top_ebp+stack_page) 23.702 - return 0; 23.703 - eip = *(unsigned long *) (ebp+4); 23.704 - if (!in_sched_functions(eip)) 23.705 - return eip; 23.706 - ebp = *(unsigned long *) ebp; 23.707 - } while (count++ < 16); 23.708 - return 0; 23.709 -} 23.710 - 23.711 -/* 23.712 - * sys_alloc_thread_area: get a yet unused TLS descriptor index. 23.713 - */ 23.714 -static int get_free_idx(void) 23.715 -{ 23.716 - struct thread_struct *t = ¤t->thread; 23.717 - int idx; 23.718 - 23.719 - for (idx = 0; idx < GDT_ENTRY_TLS_ENTRIES; idx++) 23.720 - if (desc_empty(t->tls_array + idx)) 23.721 - return idx + GDT_ENTRY_TLS_MIN; 23.722 - return -ESRCH; 23.723 -} 23.724 - 23.725 -/* 23.726 - * Set a given TLS descriptor: 23.727 - */ 23.728 -asmlinkage int sys_set_thread_area(struct user_desc __user *u_info) 23.729 -{ 23.730 - struct thread_struct *t = ¤t->thread; 23.731 - struct user_desc info; 23.732 - struct desc_struct *desc; 23.733 - int cpu, idx; 23.734 - 23.735 - if (copy_from_user(&info, u_info, sizeof(info))) 23.736 - return -EFAULT; 23.737 - idx = info.entry_number; 23.738 - 23.739 - /* 23.740 - * index -1 means the kernel should try to find and 23.741 - * allocate an empty descriptor: 23.742 - */ 23.743 - if (idx == -1) { 23.744 - idx = get_free_idx(); 23.745 - if (idx < 0) 23.746 - return idx; 23.747 - if (put_user(idx, &u_info->entry_number)) 23.748 - return -EFAULT; 23.749 - } 23.750 - 23.751 - if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX) 23.752 - return -EINVAL; 23.753 - 23.754 - desc = t->tls_array + idx - GDT_ENTRY_TLS_MIN; 23.755 - 23.756 - /* 23.757 - * We must not get preempted while modifying the TLS. 23.758 - */ 23.759 - cpu = get_cpu(); 23.760 - 23.761 - if (LDT_empty(&info)) { 23.762 - desc->a = 0; 23.763 - desc->b = 0; 23.764 - } else { 23.765 - desc->a = LDT_entry_a(&info); 23.766 - desc->b = LDT_entry_b(&info); 23.767 - } 23.768 - load_TLS(t, cpu); 23.769 - 23.770 - put_cpu(); 23.771 - 23.772 - return 0; 23.773 -} 23.774 - 23.775 -/* 23.776 - * Get the current Thread-Local Storage area: 23.777 - */ 23.778 - 23.779 -#define GET_BASE(desc) ( \ 23.780 - (((desc)->a >> 16) & 0x0000ffff) | \ 23.781 - (((desc)->b << 16) & 0x00ff0000) | \ 23.782 - ( (desc)->b & 0xff000000) ) 23.783 - 23.784 -#define GET_LIMIT(desc) ( \ 23.785 - ((desc)->a & 0x0ffff) | \ 23.786 - ((desc)->b & 0xf0000) ) 23.787 - 23.788 -#define GET_32BIT(desc) (((desc)->b >> 22) & 1) 23.789 -#define GET_CONTENTS(desc) (((desc)->b >> 10) & 3) 23.790 -#define GET_WRITABLE(desc) (((desc)->b >> 9) & 1) 23.791 -#define GET_LIMIT_PAGES(desc) (((desc)->b >> 23) & 1) 23.792 -#define GET_PRESENT(desc) (((desc)->b >> 15) & 1) 23.793 -#define GET_USEABLE(desc) (((desc)->b >> 20) & 1) 23.794 - 23.795 -asmlinkage int sys_get_thread_area(struct user_desc __user *u_info) 23.796 -{ 23.797 - struct user_desc info; 23.798 - struct desc_struct *desc; 23.799 - int idx; 23.800 - 23.801 - if (get_user(idx, &u_info->entry_number)) 23.802 - return -EFAULT; 23.803 - if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX) 23.804 - return -EINVAL; 23.805 - 23.806 - desc = current->thread.tls_array + idx - GDT_ENTRY_TLS_MIN; 23.807 - 23.808 - info.entry_number = idx; 23.809 - info.base_addr = GET_BASE(desc); 23.810 - info.limit = GET_LIMIT(desc); 23.811 - info.seg_32bit = GET_32BIT(desc); 23.812 - info.contents = GET_CONTENTS(desc); 23.813 - info.read_exec_only = !GET_WRITABLE(desc); 23.814 - info.limit_in_pages = GET_LIMIT_PAGES(desc); 23.815 - info.seg_not_present = !GET_PRESENT(desc); 23.816 - info.useable = GET_USEABLE(desc); 23.817 - 23.818 - if (copy_to_user(u_info, &info, sizeof(info))) 23.819 - return -EFAULT; 23.820 - return 0; 23.821 -} 23.822 -
24.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/setup.c Wed Aug 25 16:26:15 2004 +0000 24.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 24.3 @@ -1,1282 +0,0 @@ 24.4 -/* 24.5 - * linux/arch/i386/kernel/setup.c 24.6 - * 24.7 - * Copyright (C) 1995 Linus Torvalds 24.8 - * 24.9 - * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999 24.10 - * 24.11 - * Memory region support 24.12 - * David Parsons <orc@pell.chi.il.us>, July-August 1999 24.13 - * 24.14 - * Added E820 sanitization routine (removes overlapping memory regions); 24.15 - * Brian Moyle <bmoyle@mvista.com>, February 2001 24.16 - * 24.17 - * Moved CPU detection code to cpu/${cpu}.c 24.18 - * Patrick Mochel <mochel@osdl.org>, March 2002 24.19 - * 24.20 - * Provisions for empty E820 memory regions (reported by certain BIOSes). 24.21 - * Alex Achenbach <xela@slit.de>, December 2002. 24.22 - * 24.23 - */ 24.24 - 24.25 -/* 24.26 - * This file handles the architecture-dependent parts of initialization 24.27 - */ 24.28 - 24.29 -#include <linux/sched.h> 24.30 -#include <linux/mm.h> 24.31 -#include <linux/tty.h> 24.32 -#include <linux/ioport.h> 24.33 -#include <linux/acpi.h> 24.34 -#include <linux/apm_bios.h> 24.35 -#include <linux/initrd.h> 24.36 -#include <linux/bootmem.h> 24.37 -#include <linux/seq_file.h> 24.38 -#include <linux/console.h> 24.39 -#include <linux/root_dev.h> 24.40 -#include <linux/highmem.h> 24.41 -#include <linux/module.h> 24.42 -#include <linux/efi.h> 24.43 -#include <linux/init.h> 24.44 -#include <linux/edd.h> 24.45 -#include <video/edid.h> 24.46 -#include <asm/e820.h> 24.47 -#include <asm/mpspec.h> 24.48 -#include <asm/setup.h> 24.49 -#include <asm/arch_hooks.h> 24.50 -#include <asm/sections.h> 24.51 -#include <asm/io_apic.h> 24.52 -#include <asm/ist.h> 24.53 -#include <asm/std_resources.h> 24.54 -#include <asm-xen/hypervisor.h> 24.55 -#include "setup_arch_pre.h" 24.56 - 24.57 -int disable_pse __initdata = 0; 24.58 - 24.59 -static inline char * __init machine_specific_memory_setup(void); 24.60 - 24.61 -/* 24.62 - * Machine setup.. 24.63 - */ 24.64 - 24.65 -#ifdef CONFIG_EFI 24.66 -int efi_enabled = 0; 24.67 -EXPORT_SYMBOL(efi_enabled); 24.68 -#endif 24.69 - 24.70 -/* cpu data as detected by the assembly code in head.S */ 24.71 -struct cpuinfo_x86 new_cpu_data __initdata = { 0, 0, 0, 0, -1, 0, 1, 0, -1 }; 24.72 -/* common cpu data for all cpus */ 24.73 -struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1, 0, 1, 0, -1 }; 24.74 - 24.75 -unsigned long mmu_cr4_features; 24.76 -EXPORT_SYMBOL_GPL(mmu_cr4_features); 24.77 - 24.78 -#ifdef CONFIG_ACPI_INTERPRETER 24.79 - int acpi_disabled = 0; 24.80 -#else 24.81 - int acpi_disabled = 1; 24.82 -#endif 24.83 -EXPORT_SYMBOL(acpi_disabled); 24.84 - 24.85 -#ifdef CONFIG_ACPI_BOOT 24.86 -int __initdata acpi_force = 0; 24.87 -extern acpi_interrupt_flags acpi_sci_flags; 24.88 -#endif 24.89 - 24.90 -int MCA_bus; 24.91 -/* for MCA, but anyone else can use it if they want */ 24.92 -unsigned int machine_id; 24.93 -unsigned int machine_submodel_id; 24.94 -unsigned int BIOS_revision; 24.95 -unsigned int mca_pentium_flag; 24.96 - 24.97 -/* For PCI or other memory-mapped resources */ 24.98 -unsigned long pci_mem_start = 0x10000000; 24.99 - 24.100 -/* user-defined highmem size */ 24.101 -static unsigned int highmem_pages = -1; 24.102 - 24.103 -/* 24.104 - * Setup options 24.105 - */ 24.106 -struct drive_info_struct { char dummy[32]; } drive_info; 24.107 -struct screen_info screen_info; 24.108 -struct apm_info apm_info; 24.109 -struct sys_desc_table_struct { 24.110 - unsigned short length; 24.111 - unsigned char table[0]; 24.112 -}; 24.113 -struct edid_info edid_info; 24.114 -struct ist_info ist_info; 24.115 -struct e820map e820; 24.116 - 24.117 -unsigned char aux_device_present; 24.118 - 24.119 -extern void early_cpu_init(void); 24.120 -extern void dmi_scan_machine(void); 24.121 -extern void generic_apic_probe(char *); 24.122 -extern int root_mountflags; 24.123 - 24.124 -unsigned long saved_videomode; 24.125 - 24.126 -#define RAMDISK_IMAGE_START_MASK 0x07FF 24.127 -#define RAMDISK_PROMPT_FLAG 0x8000 24.128 -#define RAMDISK_LOAD_FLAG 0x4000 24.129 - 24.130 -static char command_line[COMMAND_LINE_SIZE]; 24.131 - char saved_command_line[COMMAND_LINE_SIZE]; 24.132 - 24.133 -unsigned char __initdata boot_params[PARAM_SIZE]; 24.134 - 24.135 -static struct resource code_resource = { "Kernel code", 0x100000, 0 }; 24.136 -static struct resource data_resource = { "Kernel data", 0, 0 }; 24.137 - 24.138 -/* 24.139 - * Point at the empty zero page to start with. We map the real shared_info 24.140 - * page as soon as fixmap is up and running. 24.141 - */ 24.142 -shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page; 24.143 -EXPORT_SYMBOL(HYPERVISOR_shared_info); 24.144 - 24.145 -unsigned long *phys_to_machine_mapping, *pfn_to_mfn_frame_list; 24.146 -EXPORT_SYMBOL(phys_to_machine_mapping); 24.147 - 24.148 -multicall_entry_t multicall_list[8]; 24.149 -int nr_multicall_ents = 0; 24.150 - 24.151 -/* Raw start-of-day parameters from the hypervisor. */ 24.152 -union start_info_union start_info_union; 24.153 - 24.154 -extern void (*pm_idle)(void); 24.155 - 24.156 -static void __init limit_regions(unsigned long long size) 24.157 -{ 24.158 - unsigned long long current_addr = 0; 24.159 - int i; 24.160 - 24.161 - if (efi_enabled) { 24.162 - for (i = 0; i < memmap.nr_map; i++) { 24.163 - current_addr = memmap.map[i].phys_addr + 24.164 - (memmap.map[i].num_pages << 12); 24.165 - if (memmap.map[i].type == EFI_CONVENTIONAL_MEMORY) { 24.166 - if (current_addr >= size) { 24.167 - memmap.map[i].num_pages -= 24.168 - (((current_addr-size) + PAGE_SIZE-1) >> PAGE_SHIFT); 24.169 - memmap.nr_map = i + 1; 24.170 - return; 24.171 - } 24.172 - } 24.173 - } 24.174 - } 24.175 - for (i = 0; i < e820.nr_map; i++) { 24.176 - if (e820.map[i].type == E820_RAM) { 24.177 - current_addr = e820.map[i].addr + e820.map[i].size; 24.178 - if (current_addr >= size) { 24.179 - e820.map[i].size -= current_addr-size; 24.180 - e820.nr_map = i + 1; 24.181 - return; 24.182 - } 24.183 - } 24.184 - } 24.185 -} 24.186 - 24.187 -static void __init add_memory_region(unsigned long long start, 24.188 - unsigned long long size, int type) 24.189 -{ 24.190 - int x; 24.191 - 24.192 - if (!efi_enabled) { 24.193 - x = e820.nr_map; 24.194 - 24.195 - if (x == E820MAX) { 24.196 - printk(KERN_ERR "Ooops! Too many entries in the memory map!\n"); 24.197 - return; 24.198 - } 24.199 - 24.200 - e820.map[x].addr = start; 24.201 - e820.map[x].size = size; 24.202 - e820.map[x].type = type; 24.203 - e820.nr_map++; 24.204 - } 24.205 -} /* add_memory_region */ 24.206 - 24.207 -#define E820_DEBUG 1 24.208 - 24.209 -static void __init print_memory_map(char *who) 24.210 -{ 24.211 - int i; 24.212 - 24.213 - for (i = 0; i < e820.nr_map; i++) { 24.214 - printk(" %s: %016Lx - %016Lx ", who, 24.215 - e820.map[i].addr, 24.216 - e820.map[i].addr + e820.map[i].size); 24.217 - switch (e820.map[i].type) { 24.218 - case E820_RAM: printk("(usable)\n"); 24.219 - break; 24.220 - case E820_RESERVED: 24.221 - printk("(reserved)\n"); 24.222 - break; 24.223 - case E820_ACPI: 24.224 - printk("(ACPI data)\n"); 24.225 - break; 24.226 - case E820_NVS: 24.227 - printk("(ACPI NVS)\n"); 24.228 - break; 24.229 - default: printk("type %lu\n", e820.map[i].type); 24.230 - break; 24.231 - } 24.232 - } 24.233 -} 24.234 - 24.235 -#if 0 24.236 -/* 24.237 - * Sanitize the BIOS e820 map. 24.238 - * 24.239 - * Some e820 responses include overlapping entries. The following 24.240 - * replaces the original e820 map with a new one, removing overlaps. 24.241 - * 24.242 - */ 24.243 -struct change_member { 24.244 - struct e820entry *pbios; /* pointer to original bios entry */ 24.245 - unsigned long long addr; /* address for this change point */ 24.246 -}; 24.247 -struct change_member change_point_list[2*E820MAX] __initdata; 24.248 -struct change_member *change_point[2*E820MAX] __initdata; 24.249 -struct e820entry *overlap_list[E820MAX] __initdata; 24.250 -struct e820entry new_bios[E820MAX] __initdata; 24.251 - 24.252 -static int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map) 24.253 -{ 24.254 - struct change_member *change_tmp; 24.255 - unsigned long current_type, last_type; 24.256 - unsigned long long last_addr; 24.257 - int chgidx, still_changing; 24.258 - int overlap_entries; 24.259 - int new_bios_entry; 24.260 - int old_nr, new_nr, chg_nr; 24.261 - int i; 24.262 - 24.263 - /* 24.264 - Visually we're performing the following (1,2,3,4 = memory types)... 24.265 - 24.266 - Sample memory map (w/overlaps): 24.267 - ____22__________________ 24.268 - ______________________4_ 24.269 - ____1111________________ 24.270 - _44_____________________ 24.271 - 11111111________________ 24.272 - ____________________33__ 24.273 - ___________44___________ 24.274 - __________33333_________ 24.275 - ______________22________ 24.276 - ___________________2222_ 24.277 - _________111111111______ 24.278 - _____________________11_ 24.279 - _________________4______ 24.280 - 24.281 - Sanitized equivalent (no overlap): 24.282 - 1_______________________ 24.283 - _44_____________________ 24.284 - ___1____________________ 24.285 - ____22__________________ 24.286 - ______11________________ 24.287 - _________1______________ 24.288 - __________3_____________ 24.289 - ___________44___________ 24.290 - _____________33_________ 24.291 - _______________2________ 24.292 - ________________1_______ 24.293 - _________________4______ 24.294 - ___________________2____ 24.295 - ____________________33__ 24.296 - ______________________4_ 24.297 - */ 24.298 - 24.299 - /* if there's only one memory region, don't bother */ 24.300 - if (*pnr_map < 2) 24.301 - return -1; 24.302 - 24.303 - old_nr = *pnr_map; 24.304 - 24.305 - /* bail out if we find any unreasonable addresses in bios map */ 24.306 - for (i=0; i<old_nr; i++) 24.307 - if (biosmap[i].addr + biosmap[i].size < biosmap[i].addr) 24.308 - return -1; 24.309 - 24.310 - /* create pointers for initial change-point information (for sorting) */ 24.311 - for (i=0; i < 2*old_nr; i++) 24.312 - change_point[i] = &change_point_list[i]; 24.313 - 24.314 - /* record all known change-points (starting and ending addresses), 24.315 - omitting those that are for empty memory regions */ 24.316 - chgidx = 0; 24.317 - for (i=0; i < old_nr; i++) { 24.318 - if (biosmap[i].size != 0) { 24.319 - change_point[chgidx]->addr = biosmap[i].addr; 24.320 - change_point[chgidx++]->pbios = &biosmap[i]; 24.321 - change_point[chgidx]->addr = biosmap[i].addr + biosmap[i].size; 24.322 - change_point[chgidx++]->pbios = &biosmap[i]; 24.323 - } 24.324 - } 24.325 - chg_nr = chgidx; /* true number of change-points */ 24.326 - 24.327 - /* sort change-point list by memory addresses (low -> high) */ 24.328 - still_changing = 1; 24.329 - while (still_changing) { 24.330 - still_changing = 0; 24.331 - for (i=1; i < chg_nr; i++) { 24.332 - /* if <current_addr> > <last_addr>, swap */ 24.333 - /* or, if current=<start_addr> & last=<end_addr>, swap */ 24.334 - if ((change_point[i]->addr < change_point[i-1]->addr) || 24.335 - ((change_point[i]->addr == change_point[i-1]->addr) && 24.336 - (change_point[i]->addr == change_point[i]->pbios->addr) && 24.337 - (change_point[i-1]->addr != change_point[i-1]->pbios->addr)) 24.338 - ) 24.339 - { 24.340 - change_tmp = change_point[i]; 24.341 - change_point[i] = change_point[i-1]; 24.342 - change_point[i-1] = change_tmp; 24.343 - still_changing=1; 24.344 - } 24.345 - } 24.346 - } 24.347 - 24.348 - /* create a new bios memory map, removing overlaps */ 24.349 - overlap_entries=0; /* number of entries in the overlap table */ 24.350 - new_bios_entry=0; /* index for creating new bios map entries */ 24.351 - last_type = 0; /* start with undefined memory type */ 24.352 - last_addr = 0; /* start with 0 as last starting address */ 24.353 - /* loop through change-points, determining affect on the new bios map */ 24.354 - for (chgidx=0; chgidx < chg_nr; chgidx++) 24.355 - { 24.356 - /* keep track of all overlapping bios entries */ 24.357 - if (change_point[chgidx]->addr == change_point[chgidx]->pbios->addr) 24.358 - { 24.359 - /* add map entry to overlap list (> 1 entry implies an overlap) */ 24.360 - overlap_list[overlap_entries++]=change_point[chgidx]->pbios; 24.361 - } 24.362 - else 24.363 - { 24.364 - /* remove entry from list (order independent, so swap with last) */ 24.365 - for (i=0; i<overlap_entries; i++) 24.366 - { 24.367 - if (overlap_list[i] == change_point[chgidx]->pbios) 24.368 - overlap_list[i] = overlap_list[overlap_entries-1]; 24.369 - } 24.370 - overlap_entries--; 24.371 - } 24.372 - /* if there are overlapping entries, decide which "type" to use */ 24.373 - /* (larger value takes precedence -- 1=usable, 2,3,4,4+=unusable) */ 24.374 - current_type = 0; 24.375 - for (i=0; i<overlap_entries; i++) 24.376 - if (overlap_list[i]->type > current_type) 24.377 - current_type = overlap_list[i]->type; 24.378 - /* continue building up new bios map based on this information */ 24.379 - if (current_type != last_type) { 24.380 - if (last_type != 0) { 24.381 - new_bios[new_bios_entry].size = 24.382 - change_point[chgidx]->addr - last_addr; 24.383 - /* move forward only if the new size was non-zero */ 24.384 - if (new_bios[new_bios_entry].size != 0) 24.385 - if (++new_bios_entry >= E820MAX) 24.386 - break; /* no more space left for new bios entries */ 24.387 - } 24.388 - if (current_type != 0) { 24.389 - new_bios[new_bios_entry].addr = change_point[chgidx]->addr; 24.390 - new_bios[new_bios_entry].type = current_type; 24.391 - last_addr=change_point[chgidx]->addr; 24.392 - } 24.393 - last_type = current_type; 24.394 - } 24.395 - } 24.396 - new_nr = new_bios_entry; /* retain count for new bios entries */ 24.397 - 24.398 - /* copy new bios mapping into original location */ 24.399 - memcpy(biosmap, new_bios, new_nr*sizeof(struct e820entry)); 24.400 - *pnr_map = new_nr; 24.401 - 24.402 - return 0; 24.403 -} 24.404 - 24.405 -/* 24.406 - * Copy the BIOS e820 map into a safe place. 24.407 - * 24.408 - * Sanity-check it while we're at it.. 24.409 - * 24.410 - * If we're lucky and live on a modern system, the setup code 24.411 - * will have given us a memory map that we can use to properly 24.412 - * set up memory. If we aren't, we'll fake a memory map. 24.413 - * 24.414 - * We check to see that the memory map contains at least 2 elements 24.415 - * before we'll use it, because the detection code in setup.S may 24.416 - * not be perfect and most every PC known to man has two memory 24.417 - * regions: one from 0 to 640k, and one from 1mb up. (The IBM 24.418 - * thinkpad 560x, for example, does not cooperate with the memory 24.419 - * detection code.) 24.420 - */ 24.421 -static int __init copy_e820_map(struct e820entry * biosmap, int nr_map) 24.422 -{ 24.423 - /* Only one memory region (or negative)? Ignore it */ 24.424 - if (nr_map < 2) 24.425 - return -1; 24.426 - 24.427 - do { 24.428 - unsigned long long start = biosmap->addr; 24.429 - unsigned long long size = biosmap->size; 24.430 - unsigned long long end = start + size; 24.431 - unsigned long type = biosmap->type; 24.432 - 24.433 - /* Overflow in 64 bits? Ignore the memory map. */ 24.434 - if (start > end) 24.435 - return -1; 24.436 - 24.437 - /* 24.438 - * Some BIOSes claim RAM in the 640k - 1M region. 24.439 - * Not right. Fix it up. 24.440 - */ 24.441 - if (type == E820_RAM) { 24.442 - if (start < 0x100000ULL && end > 0xA0000ULL) { 24.443 - if (start < 0xA0000ULL) 24.444 - add_memory_region(start, 0xA0000ULL-start, type); 24.445 - if (end <= 0x100000ULL) 24.446 - continue; 24.447 - start = 0x100000ULL; 24.448 - size = end - start; 24.449 - } 24.450 - } 24.451 - add_memory_region(start, size, type); 24.452 - } while (biosmap++,--nr_map); 24.453 - return 0; 24.454 -} 24.455 -#endif 24.456 - 24.457 -#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE) 24.458 -unsigned char eddnr; 24.459 -struct edd_info edd[EDDMAXNR]; 24.460 -unsigned int edd_disk80_sig; 24.461 -#ifdef CONFIG_EDD_MODULE 24.462 -EXPORT_SYMBOL(eddnr); 24.463 -EXPORT_SYMBOL(edd); 24.464 -EXPORT_SYMBOL(edd_disk80_sig); 24.465 -#endif 24.466 -/** 24.467 - * copy_edd() - Copy the BIOS EDD information 24.468 - * from boot_params into a safe place. 24.469 - * 24.470 - */ 24.471 -static inline void copy_edd(void) 24.472 -{ 24.473 - eddnr = EDD_NR; 24.474 - memcpy(edd, EDD_BUF, sizeof(edd)); 24.475 - edd_disk80_sig = DISK80_SIGNATURE; 24.476 -} 24.477 -#else 24.478 -#define copy_edd() do {} while (0) 24.479 -#endif 24.480 - 24.481 -/* 24.482 - * Do NOT EVER look at the BIOS memory size location. 24.483 - * It does not work on many machines. 24.484 - */ 24.485 -#define LOWMEMSIZE() (0x9f000) 24.486 - 24.487 -static void __init setup_memory_region(void) 24.488 -{ 24.489 - char *who = machine_specific_memory_setup(); 24.490 - printk(KERN_INFO "BIOS-provided physical RAM map:\n"); 24.491 - print_memory_map(who); 24.492 -} /* setup_memory_region */ 24.493 - 24.494 - 24.495 -static void __init parse_cmdline_early (char ** cmdline_p) 24.496 -{ 24.497 - char c = ' ', *to = command_line, *from = saved_command_line; 24.498 - int len = 0; 24.499 - int userdef = 0; 24.500 - 24.501 - memcpy(saved_command_line, start_info.cmd_line, MAX_CMDLINE); 24.502 - /* Save unparsed command line copy for /proc/cmdline */ 24.503 - saved_command_line[COMMAND_LINE_SIZE-1] = '\0'; 24.504 - 24.505 - for (;;) { 24.506 - /* 24.507 - * "mem=nopentium" disables the 4MB page tables. 24.508 - * "mem=XXX[kKmM]" defines a memory region from HIGH_MEM 24.509 - * to <mem>, overriding the bios size. 24.510 - * "memmap=XXX[KkmM]@XXX[KkmM]" defines a memory region from 24.511 - * <start> to <start>+<mem>, overriding the bios size. 24.512 - * 24.513 - * HPA tells me bootloaders need to parse mem=, so no new 24.514 - * option should be mem= [also see Documentation/i386/boot.txt] 24.515 - */ 24.516 - if (c == ' ' && !memcmp(from, "mem=", 4)) { 24.517 - if (to != command_line) 24.518 - to--; 24.519 - if (!memcmp(from+4, "nopentium", 9)) { 24.520 - from += 9+4; 24.521 - clear_bit(X86_FEATURE_PSE, boot_cpu_data.x86_capability); 24.522 - disable_pse = 1; 24.523 - } else { 24.524 - /* If the user specifies memory size, we 24.525 - * limit the BIOS-provided memory map to 24.526 - * that size. exactmap can be used to specify 24.527 - * the exact map. mem=number can be used to 24.528 - * trim the existing memory map. 24.529 - */ 24.530 - unsigned long long mem_size; 24.531 - 24.532 - mem_size = memparse(from+4, &from); 24.533 - limit_regions(mem_size); 24.534 - userdef=1; 24.535 - } 24.536 - } 24.537 - 24.538 - if (c == ' ' && !memcmp(from, "memmap=", 7)) { 24.539 - if (to != command_line) 24.540 - to--; 24.541 - if (!memcmp(from+7, "exactmap", 8)) { 24.542 - from += 8+7; 24.543 - e820.nr_map = 0; 24.544 - userdef = 1; 24.545 - } else { 24.546 - /* If the user specifies memory size, we 24.547 - * limit the BIOS-provided memory map to 24.548 - * that size. exactmap can be used to specify 24.549 - * the exact map. mem=number can be used to 24.550 - * trim the existing memory map. 24.551 - */ 24.552 - unsigned long long start_at, mem_size; 24.553 - 24.554 - mem_size = memparse(from+7, &from); 24.555 - if (*from == '@') { 24.556 - start_at = memparse(from+1, &from); 24.557 - add_memory_region(start_at, mem_size, E820_RAM); 24.558 - } else if (*from == '#') { 24.559 - start_at = memparse(from+1, &from); 24.560 - add_memory_region(start_at, mem_size, E820_ACPI); 24.561 - } else if (*from == '$') { 24.562 - start_at = memparse(from+1, &from); 24.563 - add_memory_region(start_at, mem_size, E820_RESERVED); 24.564 - } else { 24.565 - limit_regions(mem_size); 24.566 - userdef=1; 24.567 - } 24.568 - } 24.569 - } 24.570 - 24.571 -#ifdef CONFIG_X86_SMP 24.572 - /* 24.573 - * If the BIOS enumerates physical processors before logical, 24.574 - * maxcpus=N at enumeration-time can be used to disable HT. 24.575 - */ 24.576 - else if (!memcmp(from, "maxcpus=", 8)) { 24.577 - extern unsigned int maxcpus; 24.578 - 24.579 - maxcpus = simple_strtoul(from + 8, NULL, 0); 24.580 - } 24.581 -#endif 24.582 - 24.583 -#ifdef CONFIG_ACPI_BOOT 24.584 - /* "acpi=off" disables both ACPI table parsing and interpreter */ 24.585 - else if (!memcmp(from, "acpi=off", 8)) { 24.586 - disable_acpi(); 24.587 - } 24.588 - 24.589 - /* acpi=force to over-ride black-list */ 24.590 - else if (!memcmp(from, "acpi=force", 10)) { 24.591 - acpi_force = 1; 24.592 - acpi_ht = 1; 24.593 - acpi_disabled = 0; 24.594 - } 24.595 - 24.596 - /* acpi=strict disables out-of-spec workarounds */ 24.597 - else if (!memcmp(from, "acpi=strict", 11)) { 24.598 - acpi_strict = 1; 24.599 - } 24.600 - 24.601 - /* Limit ACPI just to boot-time to enable HT */ 24.602 - else if (!memcmp(from, "acpi=ht", 7)) { 24.603 - if (!acpi_force) 24.604 - disable_acpi(); 24.605 - acpi_ht = 1; 24.606 - } 24.607 - 24.608 - /* "pci=noacpi" disable ACPI IRQ routing and PCI scan */ 24.609 - else if (!memcmp(from, "pci=noacpi", 10)) { 24.610 - acpi_disable_pci(); 24.611 - } 24.612 - /* "acpi=noirq" disables ACPI interrupt routing */ 24.613 - else if (!memcmp(from, "acpi=noirq", 10)) { 24.614 - acpi_noirq_set(); 24.615 - } 24.616 - 24.617 - else if (!memcmp(from, "acpi_sci=edge", 13)) 24.618 - acpi_sci_flags.trigger = 1; 24.619 - 24.620 - else if (!memcmp(from, "acpi_sci=level", 14)) 24.621 - acpi_sci_flags.trigger = 3; 24.622 - 24.623 - else if (!memcmp(from, "acpi_sci=high", 13)) 24.624 - acpi_sci_flags.polarity = 1; 24.625 - 24.626 - else if (!memcmp(from, "acpi_sci=low", 12)) 24.627 - acpi_sci_flags.polarity = 3; 24.628 - 24.629 -#ifdef CONFIG_X86_IO_APIC 24.630 - else if (!memcmp(from, "acpi_skip_timer_override", 24)) 24.631 - acpi_skip_timer_override = 1; 24.632 -#endif 24.633 - 24.634 -#ifdef CONFIG_X86_LOCAL_APIC 24.635 - /* disable IO-APIC */ 24.636 - else if (!memcmp(from, "noapic", 6)) 24.637 - disable_ioapic_setup(); 24.638 -#endif /* CONFIG_X86_LOCAL_APIC */ 24.639 -#endif /* CONFIG_ACPI_BOOT */ 24.640 - 24.641 - /* 24.642 - * highmem=size forces highmem to be exactly 'size' bytes. 24.643 - * This works even on boxes that have no highmem otherwise. 24.644 - * This also works to reduce highmem size on bigger boxes. 24.645 - */ 24.646 - if (c == ' ' && !memcmp(from, "highmem=", 8)) 24.647 - highmem_pages = memparse(from+8, &from) >> PAGE_SHIFT; 24.648 - 24.649 - c = *(from++); 24.650 - if (!c) 24.651 - break; 24.652 - if (COMMAND_LINE_SIZE <= ++len) 24.653 - break; 24.654 - *(to++) = c; 24.655 - } 24.656 - *to = '\0'; 24.657 - *cmdline_p = command_line; 24.658 - if (userdef) { 24.659 - printk(KERN_INFO "user-defined physical RAM map:\n"); 24.660 - print_memory_map("user"); 24.661 - } 24.662 -} 24.663 - 24.664 -/* 24.665 - * Callback for efi_memory_walk. 24.666 - */ 24.667 -static int __init 24.668 -efi_find_max_pfn(unsigned long start, unsigned long end, void *arg) 24.669 -{ 24.670 - unsigned long *max_pfn = arg, pfn; 24.671 - 24.672 - if (start < end) { 24.673 - pfn = PFN_UP(end -1); 24.674 - if (pfn > *max_pfn) 24.675 - *max_pfn = pfn; 24.676 - } 24.677 - return 0; 24.678 -} 24.679 - 24.680 - 24.681 -/* 24.682 - * Find the highest page frame number we have available 24.683 - */ 24.684 -void __init find_max_pfn(void) 24.685 -{ 24.686 - int i; 24.687 - 24.688 - max_pfn = 0; 24.689 - if (efi_enabled) { 24.690 - efi_memmap_walk(efi_find_max_pfn, &max_pfn); 24.691 - return; 24.692 - } 24.693 - 24.694 - for (i = 0; i < e820.nr_map; i++) { 24.695 - unsigned long start, end; 24.696 - /* RAM? */ 24.697 - if (e820.map[i].type != E820_RAM) 24.698 - continue; 24.699 - start = PFN_UP(e820.map[i].addr); 24.700 - end = PFN_DOWN(e820.map[i].addr + e820.map[i].size); 24.701 - if (start >= end) 24.702 - continue; 24.703 - if (end > max_pfn) 24.704 - max_pfn = end; 24.705 - } 24.706 -} 24.707 - 24.708 -/* 24.709 - * Determine low and high memory ranges: 24.710 - */ 24.711 -unsigned long __init find_max_low_pfn(void) 24.712 -{ 24.713 - unsigned long max_low_pfn; 24.714 - 24.715 - max_low_pfn = max_pfn; 24.716 - if (max_low_pfn > MAXMEM_PFN) { 24.717 - if (highmem_pages == -1) 24.718 - highmem_pages = max_pfn - MAXMEM_PFN; 24.719 - if (highmem_pages + MAXMEM_PFN < max_pfn) 24.720 - max_pfn = MAXMEM_PFN + highmem_pages; 24.721 - if (highmem_pages + MAXMEM_PFN > max_pfn) { 24.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)); 24.723 - highmem_pages = 0; 24.724 - } 24.725 - max_low_pfn = MAXMEM_PFN; 24.726 -#ifndef CONFIG_HIGHMEM 24.727 - /* Maximum memory usable is what is directly addressable */ 24.728 - printk(KERN_WARNING "Warning only %ldMB will be used.\n", 24.729 - MAXMEM>>20); 24.730 - if (max_pfn > MAX_NONPAE_PFN) 24.731 - printk(KERN_WARNING "Use a PAE enabled kernel.\n"); 24.732 - else 24.733 - printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n"); 24.734 - max_pfn = MAXMEM_PFN; 24.735 -#else /* !CONFIG_HIGHMEM */ 24.736 -#ifndef CONFIG_X86_PAE 24.737 - if (max_pfn > MAX_NONPAE_PFN) { 24.738 - max_pfn = MAX_NONPAE_PFN; 24.739 - printk(KERN_WARNING "Warning only 4GB will be used.\n"); 24.740 - printk(KERN_WARNING "Use a PAE enabled kernel.\n"); 24.741 - } 24.742 -#endif /* !CONFIG_X86_PAE */ 24.743 -#endif /* !CONFIG_HIGHMEM */ 24.744 - } else { 24.745 - if (highmem_pages == -1) 24.746 - highmem_pages = 0; 24.747 -#ifdef CONFIG_HIGHMEM 24.748 - if (highmem_pages >= max_pfn) { 24.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)); 24.750 - highmem_pages = 0; 24.751 - } 24.752 - if (highmem_pages) { 24.753 - if (max_low_pfn-highmem_pages < 64*1024*1024/PAGE_SIZE){ 24.754 - printk(KERN_ERR "highmem size %uMB results in smaller than 64MB lowmem, ignoring it.\n", pages_to_mb(highmem_pages)); 24.755 - highmem_pages = 0; 24.756 - } 24.757 - max_low_pfn -= highmem_pages; 24.758 - } 24.759 -#else 24.760 - if (highmem_pages) 24.761 - printk(KERN_ERR "ignoring highmem size on non-highmem kernel!\n"); 24.762 -#endif 24.763 - } 24.764 - return max_low_pfn; 24.765 -} 24.766 - 24.767 -#ifndef CONFIG_DISCONTIGMEM 24.768 - 24.769 -/* 24.770 - * Free all available memory for boot time allocation. Used 24.771 - * as a callback function by efi_memory_walk() 24.772 - */ 24.773 - 24.774 -static int __init 24.775 -free_available_memory(unsigned long start, unsigned long end, void *arg) 24.776 -{ 24.777 - /* check max_low_pfn */ 24.778 - if (start >= ((max_low_pfn + 1) << PAGE_SHIFT)) 24.779 - return 0; 24.780 - if (end >= ((max_low_pfn + 1) << PAGE_SHIFT)) 24.781 - end = (max_low_pfn + 1) << PAGE_SHIFT; 24.782 - if (start < end) 24.783 - free_bootmem(start, end - start); 24.784 - 24.785 - return 0; 24.786 -} 24.787 -/* 24.788 - * Register fully available low RAM pages with the bootmem allocator. 24.789 - */ 24.790 -static void __init register_bootmem_low_pages(unsigned long max_low_pfn) 24.791 -{ 24.792 - int i; 24.793 - 24.794 - if (efi_enabled) { 24.795 - efi_memmap_walk(free_available_memory, NULL); 24.796 - return; 24.797 - } 24.798 - for (i = 0; i < e820.nr_map; i++) { 24.799 - unsigned long curr_pfn, last_pfn, size; 24.800 - /* 24.801 - * Reserve usable low memory 24.802 - */ 24.803 - if (e820.map[i].type != E820_RAM) 24.804 - continue; 24.805 - /* 24.806 - * We are rounding up the start address of usable memory: 24.807 - */ 24.808 - curr_pfn = PFN_UP(e820.map[i].addr); 24.809 - if (curr_pfn >= max_low_pfn) 24.810 - continue; 24.811 - /* 24.812 - * ... and at the end of the usable range downwards: 24.813 - */ 24.814 - last_pfn = PFN_DOWN(e820.map[i].addr + e820.map[i].size); 24.815 - 24.816 - if (last_pfn > max_low_pfn) 24.817 - last_pfn = max_low_pfn; 24.818 - 24.819 - /* 24.820 - * .. finally, did all the rounding and playing 24.821 - * around just make the area go away? 24.822 - */ 24.823 - if (last_pfn <= curr_pfn) 24.824 - continue; 24.825 - 24.826 - size = last_pfn - curr_pfn; 24.827 - free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size)); 24.828 - } 24.829 -} 24.830 - 24.831 -static unsigned long __init setup_memory(void) 24.832 -{ 24.833 - unsigned long bootmap_size, start_pfn, max_low_pfn; 24.834 - 24.835 - /* 24.836 - * partially used pages are not usable - thus 24.837 - * we are rounding upwards: 24.838 - */ 24.839 - start_pfn = PFN_UP(__pa(start_info.pt_base)) + start_info.nr_pt_frames; 24.840 - 24.841 - find_max_pfn(); 24.842 - 24.843 - max_low_pfn = find_max_low_pfn(); 24.844 - 24.845 -#ifdef CONFIG_HIGHMEM 24.846 - highstart_pfn = highend_pfn = max_pfn; 24.847 - if (max_pfn > max_low_pfn) { 24.848 - highstart_pfn = max_low_pfn; 24.849 - } 24.850 - printk(KERN_NOTICE "%ldMB HIGHMEM available.\n", 24.851 - pages_to_mb(highend_pfn - highstart_pfn)); 24.852 -#endif 24.853 - printk(KERN_NOTICE "%ldMB LOWMEM available.\n", 24.854 - pages_to_mb(max_low_pfn)); 24.855 - /* 24.856 - * Initialize the boot-time allocator (with low memory only): 24.857 - */ 24.858 - bootmap_size = init_bootmem(start_pfn, max_low_pfn); 24.859 - 24.860 - register_bootmem_low_pages(max_low_pfn); 24.861 - 24.862 - /* 24.863 - * Reserve the bootmem bitmap itself as well. We do this in two 24.864 - * steps (first step was init_bootmem()) because this catches 24.865 - * the (very unlikely) case of us accidentally initializing the 24.866 - * bootmem allocator with an invalid RAM area. 24.867 - */ 24.868 - reserve_bootmem(HIGH_MEMORY, (PFN_PHYS(start_pfn) + 24.869 - bootmap_size + PAGE_SIZE-1) - (HIGH_MEMORY)); 24.870 - 24.871 - /* could be an AMD 768MPX chipset. Reserve a page before VGA to prevent 24.872 - PCI prefetch into it (errata #56). Usually the page is reserved anyways, 24.873 - unless you have no PS/2 mouse plugged in. */ 24.874 - if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD && 24.875 - boot_cpu_data.x86 == 6) 24.876 - reserve_bootmem(0xa0000 - 4096, 4096); 24.877 - 24.878 -#ifdef CONFIG_SMP 24.879 - /* 24.880 - * But first pinch a few for the stack/trampoline stuff 24.881 - * FIXME: Don't need the extra page at 4K, but need to fix 24.882 - * trampoline before removing it. (see the GDT stuff) 24.883 - */ 24.884 - reserve_bootmem(PAGE_SIZE, PAGE_SIZE); 24.885 -#endif 24.886 -#ifdef CONFIG_ACPI_SLEEP 24.887 - /* 24.888 - * Reserve low memory region for sleep support. 24.889 - */ 24.890 - acpi_reserve_bootmem(); 24.891 -#endif 24.892 -#ifdef CONFIG_X86_FIND_SMP_CONFIG 24.893 - /* 24.894 - * Find and reserve possible boot-time SMP configuration: 24.895 - */ 24.896 - find_smp_config(); 24.897 -#endif 24.898 - 24.899 -#ifdef CONFIG_BLK_DEV_INITRD 24.900 - if (start_info.mod_start) { 24.901 - if (INITRD_START + INITRD_SIZE <= (max_low_pfn << PAGE_SHIFT)) { 24.902 - /*reserve_bootmem(INITRD_START, INITRD_SIZE);*/ 24.903 - initrd_start = INITRD_START + PAGE_OFFSET; 24.904 - initrd_end = initrd_start+INITRD_SIZE; 24.905 - initrd_below_start_ok = 1; 24.906 - } 24.907 - else { 24.908 - printk(KERN_ERR "initrd extends beyond end of memory " 24.909 - "(0x%08lx > 0x%08lx)\ndisabling initrd\n", 24.910 - INITRD_START + INITRD_SIZE, 24.911 - max_low_pfn << PAGE_SHIFT); 24.912 - initrd_start = 0; 24.913 - } 24.914 - } 24.915 -#endif 24.916 - 24.917 - phys_to_machine_mapping = (unsigned long *)start_info.mfn_list; 24.918 - 24.919 - return max_low_pfn; 24.920 -} 24.921 -#else 24.922 -extern unsigned long setup_memory(void); 24.923 -#endif /* !CONFIG_DISCONTIGMEM */ 24.924 - 24.925 -/* 24.926 - * Request address space for all standard RAM and ROM resources 24.927 - * and also for regions reported as reserved by the e820. 24.928 - */ 24.929 -static void __init 24.930 -legacy_init_iomem_resources(struct resource *code_resource, struct resource *data_resource) 24.931 -{ 24.932 - int i; 24.933 - 24.934 -#ifdef CONFIG_XEN_PRIVILEGED_GUEST 24.935 - probe_roms(); 24.936 -#endif 24.937 - for (i = 0; i < e820.nr_map; i++) { 24.938 - struct resource *res; 24.939 - if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL) 24.940 - continue; 24.941 - res = alloc_bootmem_low(sizeof(struct resource)); 24.942 - switch (e820.map[i].type) { 24.943 - case E820_RAM: res->name = "System RAM"; break; 24.944 - case E820_ACPI: res->name = "ACPI Tables"; break; 24.945 - case E820_NVS: res->name = "ACPI Non-volatile Storage"; break; 24.946 - default: res->name = "reserved"; 24.947 - } 24.948 - res->start = e820.map[i].addr; 24.949 - res->end = res->start + e820.map[i].size - 1; 24.950 - res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; 24.951 - request_resource(&iomem_resource, res); 24.952 - if (e820.map[i].type == E820_RAM) { 24.953 - /* 24.954 - * We don't know which RAM region contains kernel data, 24.955 - * so we try it repeatedly and let the resource manager 24.956 - * test it. 24.957 - */ 24.958 - request_resource(res, code_resource); 24.959 - request_resource(res, data_resource); 24.960 - } 24.961 - } 24.962 -} 24.963 - 24.964 -/* 24.965 - * Request address space for all standard resources 24.966 - */ 24.967 -static void __init register_memory(unsigned long max_low_pfn) 24.968 -{ 24.969 - unsigned long low_mem_size; 24.970 - 24.971 - if (efi_enabled) 24.972 - efi_initialize_iomem_resources(&code_resource, &data_resource); 24.973 - else 24.974 - legacy_init_iomem_resources(&code_resource, &data_resource); 24.975 - 24.976 - /* EFI systems may still have VGA */ 24.977 - request_graphics_resource(); 24.978 - 24.979 - /* request I/O space for devices used on all i[345]86 PCs */ 24.980 - request_standard_io_resources(); 24.981 - 24.982 - /* Tell the PCI layer not to allocate too close to the RAM area.. */ 24.983 - low_mem_size = ((max_low_pfn << PAGE_SHIFT) + 0xfffff) & ~0xfffff; 24.984 - if (low_mem_size > pci_mem_start) 24.985 - pci_mem_start = low_mem_size; 24.986 -} 24.987 - 24.988 -/* Use inline assembly to define this because the nops are defined 24.989 - as inline assembly strings in the include files and we cannot 24.990 - get them easily into strings. */ 24.991 -asm("\t.data\nintelnops: " 24.992 - GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6 24.993 - GENERIC_NOP7 GENERIC_NOP8); 24.994 -asm("\t.data\nk8nops: " 24.995 - K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6 24.996 - K8_NOP7 K8_NOP8); 24.997 -asm("\t.data\nk7nops: " 24.998 - K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6 24.999 - K7_NOP7 K7_NOP8); 24.1000 - 24.1001 -extern unsigned char intelnops[], k8nops[], k7nops[]; 24.1002 -static unsigned char *intel_nops[ASM_NOP_MAX+1] = { 24.1003 - NULL, 24.1004 - intelnops, 24.1005 - intelnops + 1, 24.1006 - intelnops + 1 + 2, 24.1007 - intelnops + 1 + 2 + 3, 24.1008 - intelnops + 1 + 2 + 3 + 4, 24.1009 - intelnops + 1 + 2 + 3 + 4 + 5, 24.1010 - intelnops + 1 + 2 + 3 + 4 + 5 + 6, 24.1011 - intelnops + 1 + 2 + 3 + 4 + 5 + 6 + 7, 24.1012 -}; 24.1013 -static unsigned char *k8_nops[ASM_NOP_MAX+1] = { 24.1014 - NULL, 24.1015 - k8nops, 24.1016 - k8nops + 1, 24.1017 - k8nops + 1 + 2, 24.1018 - k8nops + 1 + 2 + 3, 24.1019 - k8nops + 1 + 2 + 3 + 4, 24.1020 - k8nops + 1 + 2 + 3 + 4 + 5, 24.1021 - k8nops + 1 + 2 + 3 + 4 + 5 + 6, 24.1022 - k8nops + 1 + 2 + 3 + 4 + 5 + 6 + 7, 24.1023 -}; 24.1024 -static unsigned char *k7_nops[ASM_NOP_MAX+1] = { 24.1025 - NULL, 24.1026 - k7nops, 24.1027 - k7nops + 1, 24.1028 - k7nops + 1 + 2, 24.1029 - k7nops + 1 + 2 + 3, 24.1030 - k7nops + 1 + 2 + 3 + 4, 24.1031 - k7nops + 1 + 2 + 3 + 4 + 5, 24.1032 - k7nops + 1 + 2 + 3 + 4 + 5 + 6, 24.1033 - k7nops + 1 + 2 + 3 + 4 + 5 + 6 + 7, 24.1034 -}; 24.1035 -static struct nop { 24.1036 - int cpuid; 24.1037 - unsigned char **noptable; 24.1038 -} noptypes[] = { 24.1039 - { X86_FEATURE_K8, k8_nops }, 24.1040 - { X86_FEATURE_K7, k7_nops }, 24.1041 - { -1, 0 } 24.1042 -}; 24.1043 - 24.1044 -/* Replace instructions with better alternatives for this CPU type. 24.1045 - 24.1046 - This runs before SMP is initialized to avoid SMP problems with 24.1047 - self modifying code. This implies that assymetric systems where 24.1048 - APs have less capabilities than the boot processor are not handled. 24.1049 - In this case boot with "noreplacement". */ 24.1050 -void apply_alternatives(void *start, void *end) 24.1051 -{ 24.1052 - struct alt_instr *a; 24.1053 - int diff, i, k; 24.1054 - unsigned char **noptable = intel_nops; 24.1055 - for (i = 0; noptypes[i].cpuid >= 0; i++) { 24.1056 - if (boot_cpu_has(noptypes[i].cpuid)) { 24.1057 - noptable = noptypes[i].noptable; 24.1058 - break; 24.1059 - } 24.1060 - } 24.1061 - for (a = start; (void *)a < end; a++) { 24.1062 - if (!boot_cpu_has(a->cpuid)) 24.1063 - continue; 24.1064 - BUG_ON(a->replacementlen > a->instrlen); 24.1065 - memcpy(a->instr, a->replacement, a->replacementlen); 24.1066 - diff = a->instrlen - a->replacementlen; 24.1067 - /* Pad the rest with nops */ 24.1068 - for (i = a->replacementlen; diff > 0; diff -= k, i += k) { 24.1069 - k = diff; 24.1070 - if (k > ASM_NOP_MAX) 24.1071 - k = ASM_NOP_MAX; 24.1072 - memcpy(a->instr + i, noptable[k], k); 24.1073 - } 24.1074 - } 24.1075 -} 24.1076 - 24.1077 -static int no_replacement __initdata = 0; 24.1078 - 24.1079 -void __init alternative_instructions(void) 24.1080 -{ 24.1081 - extern struct alt_instr __alt_instructions[], __alt_instructions_end[]; 24.1082 - if (no_replacement) 24.1083 - return; 24.1084 - apply_alternatives(__alt_instructions, __alt_instructions_end); 24.1085 -} 24.1086 - 24.1087 -static int __init noreplacement_setup(char *s) 24.1088 -{ 24.1089 - no_replacement = 1; 24.1090 - return 0; 24.1091 -} 24.1092 - 24.1093 -__setup("noreplacement", noreplacement_setup); 24.1094 - 24.1095 -/* 24.1096 - * Determine if we were loaded by an EFI loader. If so, then we have also been 24.1097 - * passed the efi memmap, systab, etc., so we should use these data structures 24.1098 - * for initialization. Note, the efi init code path is determined by the 24.1099 - * global efi_enabled. This allows the same kernel image to be used on existing 24.1100 - * systems (with a traditional BIOS) as well as on EFI systems. 24.1101 - */ 24.1102 -void __init setup_arch(char **cmdline_p) 24.1103 -{ 24.1104 - int i,j; 24.1105 - 24.1106 - unsigned long max_low_pfn; 24.1107 - 24.1108 - HYPERVISOR_vm_assist(VMASST_CMD_enable, 24.1109 - VMASST_TYPE_4gb_segments); 24.1110 -#ifdef CONFIG_XEN_WRITABLE_PAGETABLES 24.1111 - HYPERVISOR_vm_assist(VMASST_CMD_enable, 24.1112 - VMASST_TYPE_writable_pagetables); 24.1113 -#endif 24.1114 - 24.1115 - pm_idle = xen_cpu_idle; 24.1116 - 24.1117 - memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data)); 24.1118 - early_cpu_init(); 24.1119 - 24.1120 - /* 24.1121 - * FIXME: This isn't an official loader_type right 24.1122 - * now but does currently work with elilo. 24.1123 - * If we were configured as an EFI kernel, check to make 24.1124 - * sure that we were loaded correctly from elilo and that 24.1125 - * the system table is valid. If not, then initialize normally. 24.1126 - */ 24.1127 -#ifdef CONFIG_EFI 24.1128 - if ((LOADER_TYPE == 0x50) && EFI_SYSTAB) 24.1129 - efi_enabled = 1; 24.1130 -#endif 24.1131 - 24.1132 - ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); 24.1133 - drive_info = DRIVE_INFO; 24.1134 - screen_info = SCREEN_INFO; 24.1135 - edid_info = EDID_INFO; 24.1136 - apm_info.bios = APM_BIOS_INFO; 24.1137 - ist_info = IST_INFO; 24.1138 - saved_videomode = VIDEO_MODE; 24.1139 - if( SYS_DESC_TABLE.length != 0 ) { 24.1140 - MCA_bus = SYS_DESC_TABLE.table[3] &0x2; 24.1141 - machine_id = SYS_DESC_TABLE.table[0]; 24.1142 - machine_submodel_id = SYS_DESC_TABLE.table[1]; 24.1143 - BIOS_revision = SYS_DESC_TABLE.table[2]; 24.1144 - } 24.1145 - aux_device_present = AUX_DEVICE_INFO; 24.1146 - 24.1147 -#ifdef CONFIG_XEN_PHYSDEV_ACCESS 24.1148 - /* This is drawn from a dump from vgacon:startup in standard Linux. */ 24.1149 - screen_info.orig_video_mode = 3; 24.1150 - screen_info.orig_video_isVGA = 1; 24.1151 - screen_info.orig_video_lines = 25; 24.1152 - screen_info.orig_video_cols = 80; 24.1153 - screen_info.orig_video_ega_bx = 3; 24.1154 - screen_info.orig_video_points = 16; 24.1155 -#endif 24.1156 - 24.1157 -#ifdef CONFIG_BLK_DEV_RAM 24.1158 - rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK; 24.1159 - rd_prompt = ((RAMDISK_FLAGS & RAMDISK_PROMPT_FLAG) != 0); 24.1160 - rd_doload = ((RAMDISK_FLAGS & RAMDISK_LOAD_FLAG) != 0); 24.1161 -#endif 24.1162 - ARCH_SETUP 24.1163 - if (efi_enabled) 24.1164 - efi_init(); 24.1165 - else 24.1166 - setup_memory_region(); 24.1167 - 24.1168 - copy_edd(); 24.1169 - 24.1170 - if (!MOUNT_ROOT_RDONLY) 24.1171 - root_mountflags &= ~MS_RDONLY; 24.1172 - init_mm.start_code = (unsigned long) _text; 24.1173 - init_mm.end_code = (unsigned long) _etext; 24.1174 - init_mm.end_data = (unsigned long) _edata; 24.1175 - init_mm.brk = (PFN_UP(__pa(start_info.pt_base)) + start_info.nr_pt_frames) << PAGE_SHIFT; 24.1176 - 24.1177 - code_resource.start = virt_to_phys(_text); 24.1178 - code_resource.end = virt_to_phys(_etext)-1; 24.1179 - data_resource.start = virt_to_phys(_etext); 24.1180 - data_resource.end = virt_to_phys(_edata)-1; 24.1181 - 24.1182 - parse_cmdline_early(cmdline_p); 24.1183 - 24.1184 - max_low_pfn = setup_memory(); 24.1185 - 24.1186 - /* 24.1187 - * NOTE: before this point _nobody_ is allowed to allocate 24.1188 - * any memory using the bootmem allocator. 24.1189 - */ 24.1190 - 24.1191 -#ifdef CONFIG_SMP 24.1192 - smp_alloc_memory(); /* AP processor realmode stacks in low memory*/ 24.1193 -#endif 24.1194 - paging_init(); 24.1195 - 24.1196 - pfn_to_mfn_frame_list = alloc_bootmem_low_pages(PAGE_SIZE); 24.1197 - for ( i=0, j=0; i < max_pfn; i+=(PAGE_SIZE/sizeof(unsigned long)), j++ ) 24.1198 - { 24.1199 - pfn_to_mfn_frame_list[j] = 24.1200 - virt_to_machine(&phys_to_machine_mapping[i]) >> PAGE_SHIFT; 24.1201 - } 24.1202 - HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list = 24.1203 - virt_to_machine(pfn_to_mfn_frame_list) >> PAGE_SHIFT; 24.1204 - 24.1205 - 24.1206 -#ifdef CONFIG_EARLY_PRINTK 24.1207 - { 24.1208 - char *s = strstr(*cmdline_p, "earlyprintk="); 24.1209 - if (s) { 24.1210 - extern void setup_early_printk(char *); 24.1211 - 24.1212 - setup_early_printk(s); 24.1213 - printk("early console enabled\n"); 24.1214 - } 24.1215 - } 24.1216 -#endif 24.1217 - 24.1218 - 24.1219 - dmi_scan_machine(); 24.1220 - 24.1221 -#ifdef CONFIG_X86_GENERICARCH 24.1222 - generic_apic_probe(*cmdline_p); 24.1223 -#endif 24.1224 - if (efi_enabled) 24.1225 - efi_map_memmap(); 24.1226 - 24.1227 - /* 24.1228 - * Parse the ACPI tables for possible boot-time SMP configuration. 24.1229 - */ 24.1230 - acpi_boot_init(); 24.1231 - 24.1232 -#ifdef CONFIG_X86_LOCAL_APIC 24.1233 - if (smp_found_config) 24.1234 - get_smp_config(); 24.1235 -#endif 24.1236 - 24.1237 - register_memory(max_low_pfn); 24.1238 - 24.1239 - /* If we are a privileged guest OS then we should request IO privs. */ 24.1240 - if (start_info.flags & SIF_PRIVILEGED) { 24.1241 - dom0_op_t op; 24.1242 - op.cmd = DOM0_IOPL; 24.1243 - op.u.iopl.domain = DOMID_SELF; 24.1244 - op.u.iopl.iopl = 1; 24.1245 - if (HYPERVISOR_dom0_op(&op) != 0) 24.1246 - panic("Unable to obtain IOPL, despite SIF_PRIVILEGED"); 24.1247 - current->thread.io_pl = 1; 24.1248 - } 24.1249 - 24.1250 - if (start_info.flags & SIF_INITDOMAIN) { 24.1251 - if (!(start_info.flags & SIF_PRIVILEGED)) 24.1252 - panic("Xen granted us console access " 24.1253 - "but not privileged status"); 24.1254 - 24.1255 -#ifdef CONFIG_VT 24.1256 -#if defined(CONFIG_VGA_CONSOLE) 24.1257 - if (!efi_enabled || 24.1258 - (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY)) 24.1259 - conswitchp = &vga_con; 24.1260 -#elif defined(CONFIG_DUMMY_CONSOLE) 24.1261 - conswitchp = &dummy_con; 24.1262 -#endif 24.1263 -#endif 24.1264 - } else { 24.1265 -#ifdef CONFIG_XEN_PRIVILEGED_GUEST 24.1266 - extern const struct consw xennull_con; 24.1267 - extern int console_use_vt; 24.1268 -#if defined(CONFIG_VGA_CONSOLE) 24.1269 - /* disable VGA driver */ 24.1270 - ORIG_VIDEO_ISVGA = VIDEO_TYPE_VLFB; 24.1271 -#endif 24.1272 - conswitchp = &xennull_con; 24.1273 - console_use_vt = 0; 24.1274 -#endif 24.1275 - } 24.1276 -} 24.1277 - 24.1278 -#include "setup_arch_post.h" 24.1279 -/* 24.1280 - * Local Variables: 24.1281 - * mode:c 24.1282 - * c-file-style:"k&r" 24.1283 - * c-basic-offset:8 24.1284 - * End: 24.1285 - */
25.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/signal.c Wed Aug 25 16:26:15 2004 +0000 25.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 25.3 @@ -1,624 +0,0 @@ 25.4 -/* 25.5 - * linux/arch/i386/kernel/signal.c 25.6 - * 25.7 - * Copyright (C) 1991, 1992 Linus Torvalds 25.8 - * 25.9 - * 1997-11-28 Modified for POSIX.1b signals by Richard Henderson 25.10 - * 2000-06-20 Pentium III FXSR, SSE support by Gareth Hughes 25.11 - */ 25.12 - 25.13 -#include <linux/sched.h> 25.14 -#include <linux/mm.h> 25.15 -#include <linux/smp.h> 25.16 -#include <linux/smp_lock.h> 25.17 -#include <linux/kernel.h> 25.18 -#include <linux/signal.h> 25.19 -#include <linux/errno.h> 25.20 -#include <linux/wait.h> 25.21 -#include <linux/unistd.h> 25.22 -#include <linux/stddef.h> 25.23 -#include <linux/personality.h> 25.24 -#include <linux/suspend.h> 25.25 -#include <linux/elf.h> 25.26 -#include <asm/processor.h> 25.27 -#include <asm/ucontext.h> 25.28 -#include <asm/uaccess.h> 25.29 -#include <asm/i387.h> 25.30 -#include "sigframe.h" 25.31 - 25.32 -#define DEBUG_SIG 0 25.33 - 25.34 -#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) 25.35 - 25.36 -/* 25.37 - * Atomically swap in the new signal mask, and wait for a signal. 25.38 - */ 25.39 -asmlinkage int 25.40 -sys_sigsuspend(int history0, int history1, old_sigset_t mask) 25.41 -{ 25.42 - struct pt_regs * regs = (struct pt_regs *) &history0; 25.43 - sigset_t saveset; 25.44 - 25.45 - mask &= _BLOCKABLE; 25.46 - spin_lock_irq(¤t->sighand->siglock); 25.47 - saveset = current->blocked; 25.48 - siginitset(¤t->blocked, mask); 25.49 - recalc_sigpending(); 25.50 - spin_unlock_irq(¤t->sighand->siglock); 25.51 - 25.52 - regs->eax = -EINTR; 25.53 - while (1) { 25.54 - current->state = TASK_INTERRUPTIBLE; 25.55 - schedule(); 25.56 - if (do_signal(regs, &saveset)) 25.57 - return -EINTR; 25.58 - } 25.59 -} 25.60 - 25.61 -asmlinkage int 25.62 -sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize) 25.63 -{ 25.64 - struct pt_regs * regs = (struct pt_regs *) &unewset; 25.65 - sigset_t saveset, newset; 25.66 - 25.67 - /* XXX: Don't preclude handling different sized sigset_t's. */ 25.68 - if (sigsetsize != sizeof(sigset_t)) 25.69 - return -EINVAL; 25.70 - 25.71 - if (copy_from_user(&newset, unewset, sizeof(newset))) 25.72 - return -EFAULT; 25.73 - sigdelsetmask(&newset, ~_BLOCKABLE); 25.74 - 25.75 - spin_lock_irq(¤t->sighand->siglock); 25.76 - saveset = current->blocked; 25.77 - current->blocked = newset; 25.78 - recalc_sigpending(); 25.79 - spin_unlock_irq(¤t->sighand->siglock); 25.80 - 25.81 - regs->eax = -EINTR; 25.82 - while (1) { 25.83 - current->state = TASK_INTERRUPTIBLE; 25.84 - schedule(); 25.85 - if (do_signal(regs, &saveset)) 25.86 - return -EINTR; 25.87 - } 25.88 -} 25.89 - 25.90 -asmlinkage int 25.91 -sys_sigaction(int sig, const struct old_sigaction __user *act, 25.92 - struct old_sigaction __user *oact) 25.93 -{ 25.94 - struct k_sigaction new_ka, old_ka; 25.95 - int ret; 25.96 - 25.97 - if (act) { 25.98 - old_sigset_t mask; 25.99 - if (verify_area(VERIFY_READ, act, sizeof(*act)) || 25.100 - __get_user(new_ka.sa.sa_handler, &act->sa_handler) || 25.101 - __get_user(new_ka.sa.sa_restorer, &act->sa_restorer)) 25.102 - return -EFAULT; 25.103 - __get_user(new_ka.sa.sa_flags, &act->sa_flags); 25.104 - __get_user(mask, &act->sa_mask); 25.105 - siginitset(&new_ka.sa.sa_mask, mask); 25.106 - } 25.107 - 25.108 - ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); 25.109 - 25.110 - if (!ret && oact) { 25.111 - if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) || 25.112 - __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || 25.113 - __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer)) 25.114 - return -EFAULT; 25.115 - __put_user(old_ka.sa.sa_flags, &oact->sa_flags); 25.116 - __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); 25.117 - } 25.118 - 25.119 - return ret; 25.120 -} 25.121 - 25.122 -asmlinkage int 25.123 -sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss) 25.124 -{ 25.125 - struct pt_regs *regs = (struct pt_regs *) &uss; 25.126 - return do_sigaltstack(uss, uoss, regs->esp); 25.127 -} 25.128 - 25.129 - 25.130 -/* 25.131 - * Do a signal return; undo the signal stack. 25.132 - */ 25.133 - 25.134 -static int 25.135 -restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *peax) 25.136 -{ 25.137 - unsigned int err = 0; 25.138 - 25.139 - /* Always make any pending restarted system calls return -EINTR */ 25.140 - current_thread_info()->restart_block.fn = do_no_restart_syscall; 25.141 - 25.142 -#define COPY(x) err |= __get_user(regs->x, &sc->x) 25.143 - 25.144 -#define COPY_SEG(seg) \ 25.145 - { unsigned short tmp; \ 25.146 - err |= __get_user(tmp, &sc->seg); \ 25.147 - regs->x##seg = tmp; } 25.148 - 25.149 -#define COPY_SEG_STRICT(seg) \ 25.150 - { unsigned short tmp; \ 25.151 - err |= __get_user(tmp, &sc->seg); \ 25.152 - regs->x##seg = tmp|3; } 25.153 - 25.154 -#define GET_SEG(seg) \ 25.155 - { unsigned short tmp; \ 25.156 - err |= __get_user(tmp, &sc->seg); \ 25.157 - loadsegment(seg,tmp); } 25.158 - 25.159 -#define FIX_EFLAGS (X86_EFLAGS_AC | X86_EFLAGS_OF | X86_EFLAGS_DF | \ 25.160 - X86_EFLAGS_TF | X86_EFLAGS_SF | X86_EFLAGS_ZF | \ 25.161 - X86_EFLAGS_AF | X86_EFLAGS_PF | X86_EFLAGS_CF) 25.162 - 25.163 - GET_SEG(gs); 25.164 - GET_SEG(fs); 25.165 - COPY_SEG(es); 25.166 - COPY_SEG(ds); 25.167 - COPY(edi); 25.168 - COPY(esi); 25.169 - COPY(ebp); 25.170 - COPY(esp); 25.171 - COPY(ebx); 25.172 - COPY(edx); 25.173 - COPY(ecx); 25.174 - COPY(eip); 25.175 - COPY_SEG_STRICT(cs); 25.176 - COPY_SEG_STRICT(ss); 25.177 - 25.178 - { 25.179 - unsigned int tmpflags; 25.180 - err |= __get_user(tmpflags, &sc->eflags); 25.181 - regs->eflags = (regs->eflags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS); 25.182 - regs->orig_eax = -1; /* disable syscall checks */ 25.183 - } 25.184 - 25.185 - { 25.186 - struct _fpstate __user * buf; 25.187 - err |= __get_user(buf, &sc->fpstate); 25.188 - if (buf) { 25.189 - if (verify_area(VERIFY_READ, buf, sizeof(*buf))) 25.190 - goto badframe; 25.191 - err |= restore_i387(buf); 25.192 - } 25.193 - } 25.194 - 25.195 - err |= __get_user(*peax, &sc->eax); 25.196 - return err; 25.197 - 25.198 -badframe: 25.199 - return 1; 25.200 -} 25.201 - 25.202 -asmlinkage int sys_sigreturn(unsigned long __unused) 25.203 -{ 25.204 - struct pt_regs *regs = (struct pt_regs *) &__unused; 25.205 - struct sigframe __user *frame = (struct sigframe __user *)(regs->esp - 8); 25.206 - sigset_t set; 25.207 - int eax; 25.208 - 25.209 - if (verify_area(VERIFY_READ, frame, sizeof(*frame))) 25.210 - goto badframe; 25.211 - if (__get_user(set.sig[0], &frame->sc.oldmask) 25.212 - || (_NSIG_WORDS > 1 25.213 - && __copy_from_user(&set.sig[1], &frame->extramask, 25.214 - sizeof(frame->extramask)))) 25.215 - goto badframe; 25.216 - 25.217 - sigdelsetmask(&set, ~_BLOCKABLE); 25.218 - spin_lock_irq(¤t->sighand->siglock); 25.219 - current->blocked = set; 25.220 - recalc_sigpending(); 25.221 - spin_unlock_irq(¤t->sighand->siglock); 25.222 - 25.223 - if (restore_sigcontext(regs, &frame->sc, &eax)) 25.224 - goto badframe; 25.225 - return eax; 25.226 - 25.227 -badframe: 25.228 - force_sig(SIGSEGV, current); 25.229 - return 0; 25.230 -} 25.231 - 25.232 -asmlinkage int sys_rt_sigreturn(unsigned long __unused) 25.233 -{ 25.234 - struct pt_regs *regs = (struct pt_regs *) &__unused; 25.235 - struct rt_sigframe __user *frame = (struct rt_sigframe __user *)(regs->esp - 4); 25.236 - sigset_t set; 25.237 - int eax; 25.238 - 25.239 - if (verify_area(VERIFY_READ, frame, sizeof(*frame))) 25.240 - goto badframe; 25.241 - if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) 25.242 - goto badframe; 25.243 - 25.244 - sigdelsetmask(&set, ~_BLOCKABLE); 25.245 - spin_lock_irq(¤t->sighand->siglock); 25.246 - current->blocked = set; 25.247 - recalc_sigpending(); 25.248 - spin_unlock_irq(¤t->sighand->siglock); 25.249 - 25.250 - if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &eax)) 25.251 - goto badframe; 25.252 - 25.253 - if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->esp) == -EFAULT) 25.254 - goto badframe; 25.255 - 25.256 - return eax; 25.257 - 25.258 -badframe: 25.259 - force_sig(SIGSEGV, current); 25.260 - return 0; 25.261 -} 25.262 - 25.263 -/* 25.264 - * Set up a signal frame. 25.265 - */ 25.266 - 25.267 -static int 25.268 -setup_sigcontext(struct sigcontext __user *sc, struct _fpstate __user *fpstate, 25.269 - struct pt_regs *regs, unsigned long mask) 25.270 -{ 25.271 - int tmp, err = 0; 25.272 - 25.273 - tmp = 0; 25.274 - __asm__("movl %%gs,%0" : "=r"(tmp): "0"(tmp)); 25.275 - err |= __put_user(tmp, (unsigned int __user *)&sc->gs); 25.276 - __asm__("movl %%fs,%0" : "=r"(tmp): "0"(tmp)); 25.277 - err |= __put_user(tmp, (unsigned int __user *)&sc->fs); 25.278 - 25.279 - err |= __put_user(regs->xes, (unsigned int __user *)&sc->es); 25.280 - err |= __put_user(regs->xds, (unsigned int __user *)&sc->ds); 25.281 - err |= __put_user(regs->edi, &sc->edi); 25.282 - err |= __put_user(regs->esi, &sc->esi); 25.283 - err |= __put_user(regs->ebp, &sc->ebp); 25.284 - err |= __put_user(regs->esp, &sc->esp); 25.285 - err |= __put_user(regs->ebx, &sc->ebx); 25.286 - err |= __put_user(regs->edx, &sc->edx); 25.287 - err |= __put_user(regs->ecx, &sc->ecx); 25.288 - err |= __put_user(regs->eax, &sc->eax); 25.289 - err |= __put_user(current->thread.trap_no, &sc->trapno); 25.290 - err |= __put_user(current->thread.error_code, &sc->err); 25.291 - err |= __put_user(regs->eip, &sc->eip); 25.292 - err |= __put_user(regs->xcs, (unsigned int __user *)&sc->cs); 25.293 - err |= __put_user(regs->eflags, &sc->eflags); 25.294 - err |= __put_user(regs->esp, &sc->esp_at_signal); 25.295 - err |= __put_user(regs->xss, (unsigned int __user *)&sc->ss); 25.296 - 25.297 - tmp = save_i387(fpstate); 25.298 - if (tmp < 0) 25.299 - err = 1; 25.300 - else 25.301 - err |= __put_user(tmp ? fpstate : NULL, &sc->fpstate); 25.302 - 25.303 - /* non-iBCS2 extensions.. */ 25.304 - err |= __put_user(mask, &sc->oldmask); 25.305 - err |= __put_user(current->thread.cr2, &sc->cr2); 25.306 - 25.307 - return err; 25.308 -} 25.309 - 25.310 -/* 25.311 - * Determine which stack to use.. 25.312 - */ 25.313 -static inline void __user * 25.314 -get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size) 25.315 -{ 25.316 - unsigned long esp; 25.317 - 25.318 - /* Default to using normal stack */ 25.319 - esp = regs->esp; 25.320 - 25.321 - /* This is the X/Open sanctioned signal stack switching. */ 25.322 - if (ka->sa.sa_flags & SA_ONSTACK) { 25.323 - if (sas_ss_flags(esp) == 0) 25.324 - esp = current->sas_ss_sp + current->sas_ss_size; 25.325 - } 25.326 - 25.327 - /* This is the legacy signal stack switching. */ 25.328 - else if ((regs->xss & 0xffff) != __USER_DS && 25.329 - !(ka->sa.sa_flags & SA_RESTORER) && 25.330 - ka->sa.sa_restorer) { 25.331 - esp = (unsigned long) ka->sa.sa_restorer; 25.332 - } 25.333 - 25.334 - return (void __user *)((esp - frame_size) & -8ul); 25.335 -} 25.336 - 25.337 -/* These symbols are defined with the addresses in the vsyscall page. 25.338 - See vsyscall-sigreturn.S. */ 25.339 -extern void __kernel_sigreturn, __kernel_rt_sigreturn; 25.340 - 25.341 -static void setup_frame(int sig, struct k_sigaction *ka, 25.342 - sigset_t *set, struct pt_regs * regs) 25.343 -{ 25.344 - void *restorer; 25.345 - struct sigframe __user *frame; 25.346 - int err = 0; 25.347 - 25.348 - frame = get_sigframe(ka, regs, sizeof(*frame)); 25.349 - 25.350 - if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) 25.351 - goto give_sigsegv; 25.352 - 25.353 - err |= __put_user((current_thread_info()->exec_domain 25.354 - && current_thread_info()->exec_domain->signal_invmap 25.355 - && sig < 32 25.356 - ? current_thread_info()->exec_domain->signal_invmap[sig] 25.357 - : sig), 25.358 - &frame->sig); 25.359 - if (err) 25.360 - goto give_sigsegv; 25.361 - 25.362 - err |= setup_sigcontext(&frame->sc, &frame->fpstate, regs, set->sig[0]); 25.363 - if (err) 25.364 - goto give_sigsegv; 25.365 - 25.366 - if (_NSIG_WORDS > 1) { 25.367 - err |= __copy_to_user(&frame->extramask, &set->sig[1], 25.368 - sizeof(frame->extramask)); 25.369 - } 25.370 - if (err) 25.371 - goto give_sigsegv; 25.372 - 25.373 - restorer = &__kernel_sigreturn; 25.374 - if (ka->sa.sa_flags & SA_RESTORER) 25.375 - restorer = ka->sa.sa_restorer; 25.376 - 25.377 - /* Set up to return from userspace. */ 25.378 - err |= __put_user(restorer, &frame->pretcode); 25.379 - 25.380 - /* 25.381 - * This is popl %eax ; movl $,%eax ; int $0x80 25.382 - * 25.383 - * WE DO NOT USE IT ANY MORE! It's only left here for historical 25.384 - * reasons and because gdb uses it as a signature to notice 25.385 - * signal handler stack frames. 25.386 - */ 25.387 - err |= __put_user(0xb858, (short __user *)(frame->retcode+0)); 25.388 - err |= __put_user(__NR_sigreturn, (int __user *)(frame->retcode+2)); 25.389 - err |= __put_user(0x80cd, (short __user *)(frame->retcode+6)); 25.390 - 25.391 - if (err) 25.392 - goto give_sigsegv; 25.393 - 25.394 - /* Set up registers for signal handler */ 25.395 - regs->esp = (unsigned long) frame; 25.396 - regs->eip = (unsigned long) ka->sa.sa_handler; 25.397 - 25.398 - set_fs(USER_DS); 25.399 - regs->xds = __USER_DS; 25.400 - regs->xes = __USER_DS; 25.401 - regs->xss = __USER_DS; 25.402 - regs->xcs = __USER_CS; 25.403 - regs->eflags &= ~TF_MASK; 25.404 - 25.405 -#if DEBUG_SIG 25.406 - printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n", 25.407 - current->comm, current->pid, frame, regs->eip, frame->pretcode); 25.408 -#endif 25.409 - 25.410 - return; 25.411 - 25.412 -give_sigsegv: 25.413 - if (sig == SIGSEGV) 25.414 - ka->sa.sa_handler = SIG_DFL; 25.415 - force_sig(SIGSEGV, current); 25.416 -} 25.417 - 25.418 -static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, 25.419 - sigset_t *set, struct pt_regs * regs) 25.420 -{ 25.421 - void *restorer; 25.422 - struct rt_sigframe __user *frame; 25.423 - int err = 0; 25.424 - 25.425 - frame = get_sigframe(ka, regs, sizeof(*frame)); 25.426 - 25.427 - if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) 25.428 - goto give_sigsegv; 25.429 - 25.430 - err |= __put_user((current_thread_info()->exec_domain 25.431 - && current_thread_info()->exec_domain->signal_invmap 25.432 - && sig < 32 25.433 - ? current_thread_info()->exec_domain->signal_invmap[sig] 25.434 - : sig), 25.435 - &frame->sig); 25.436 - err |= __put_user(&frame->info, &frame->pinfo); 25.437 - err |= __put_user(&frame->uc, &frame->puc); 25.438 - err |= copy_siginfo_to_user(&frame->info, info); 25.439 - if (err) 25.440 - goto give_sigsegv; 25.441 - 25.442 - /* Create the ucontext. */ 25.443 - err |= __put_user(0, &frame->uc.uc_flags); 25.444 - err |= __put_user(0, &frame->uc.uc_link); 25.445 - err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp); 25.446 - err |= __put_user(sas_ss_flags(regs->esp), 25.447 - &frame->uc.uc_stack.ss_flags); 25.448 - err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); 25.449 - err |= setup_sigcontext(&frame->uc.uc_mcontext, &frame->fpstate, 25.450 - regs, set->sig[0]); 25.451 - err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); 25.452 - if (err) 25.453 - goto give_sigsegv; 25.454 - 25.455 - /* Set up to return from userspace. */ 25.456 - restorer = &__kernel_rt_sigreturn; 25.457 - if (ka->sa.sa_flags & SA_RESTORER) 25.458 - restorer = ka->sa.sa_restorer; 25.459 - err |= __put_user(restorer, &frame->pretcode); 25.460 - 25.461 - /* 25.462 - * This is movl $,%eax ; int $0x80 25.463 - * 25.464 - * WE DO NOT USE IT ANY MORE! It's only left here for historical 25.465 - * reasons and because gdb uses it as a signature to notice 25.466 - * signal handler stack frames. 25.467 - */ 25.468 - err |= __put_user(0xb8, (char __user *)(frame->retcode+0)); 25.469 - err |= __put_user(__NR_rt_sigreturn, (int __user *)(frame->retcode+1)); 25.470 - err |= __put_user(0x80cd, (short __user *)(frame->retcode+5)); 25.471 - 25.472 - if (err) 25.473 - goto give_sigsegv; 25.474 - 25.475 - /* Set up registers for signal handler */ 25.476 - regs->esp = (unsigned long) frame; 25.477 - regs->eip = (unsigned long) ka->sa.sa_handler; 25.478 - 25.479 - set_fs(USER_DS); 25.480 - regs->xds = __USER_DS; 25.481 - regs->xes = __USER_DS; 25.482 - regs->xss = __USER_DS; 25.483 - regs->xcs = __USER_CS; 25.484 - regs->eflags &= ~TF_MASK; 25.485 - 25.486 -#if DEBUG_SIG 25.487 - printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n", 25.488 - current->comm, current->pid, frame, regs->eip, frame->pretcode); 25.489 -#endif 25.490 - 25.491 - return; 25.492 - 25.493 -give_sigsegv: 25.494 - if (sig == SIGSEGV) 25.495 - ka->sa.sa_handler = SIG_DFL; 25.496 - force_sig(SIGSEGV, current); 25.497 -} 25.498 - 25.499 -/* 25.500 - * OK, we're invoking a handler 25.501 - */ 25.502 - 25.503 -static void 25.504 -handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset, 25.505 - struct pt_regs * regs) 25.506 -{ 25.507 - struct k_sigaction *ka = ¤t->sighand->action[sig-1]; 25.508 - 25.509 - /* Are we from a system call? */ 25.510 - if (regs->orig_eax >= 0) { 25.511 - /* If so, check system call restarting.. */ 25.512 - switch (regs->eax) { 25.513 - case -ERESTART_RESTARTBLOCK: 25.514 - case -ERESTARTNOHAND: 25.515 - regs->eax = -EINTR; 25.516 - break; 25.517 - 25.518 - case -ERESTARTSYS: 25.519 - if (!(ka->sa.sa_flags & SA_RESTART)) { 25.520 - regs->eax = -EINTR; 25.521 - break; 25.522 - } 25.523 - /* fallthrough */ 25.524 - case -ERESTARTNOINTR: 25.525 - regs->eax = regs->orig_eax; 25.526 - regs->eip -= 2; 25.527 - } 25.528 - } 25.529 - 25.530 - /* Set up the stack frame */ 25.531 - if (ka->sa.sa_flags & SA_SIGINFO) 25.532 - setup_rt_frame(sig, ka, info, oldset, regs); 25.533 - else 25.534 - setup_frame(sig, ka, oldset, regs); 25.535 - 25.536 - if (ka->sa.sa_flags & SA_ONESHOT) 25.537 - ka->sa.sa_handler = SIG_DFL; 25.538 - 25.539 - if (!(ka->sa.sa_flags & SA_NODEFER)) { 25.540 - spin_lock_irq(¤t->sighand->siglock); 25.541 - sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); 25.542 - sigaddset(¤t->blocked,sig); 25.543 - recalc_sigpending(); 25.544 - spin_unlock_irq(¤t->sighand->siglock); 25.545 - } 25.546 -} 25.547 - 25.548 -/* 25.549 - * Note that 'init' is a special process: it doesn't get signals it doesn't 25.550 - * want to handle. Thus you cannot kill init even with a SIGKILL even by 25.551 - * mistake. 25.552 - */ 25.553 -int fastcall do_signal(struct pt_regs *regs, sigset_t *oldset) 25.554 -{ 25.555 - siginfo_t info; 25.556 - int signr; 25.557 - 25.558 - /* 25.559 - * We want the common case to go fast, which 25.560 - * is why we may in certain cases get here from 25.561 - * kernel mode. Just return without doing anything 25.562 - * if so. 25.563 - */ 25.564 - if ((regs->xcs & 2) != 2) 25.565 - return 1; 25.566 - 25.567 - if (current->flags & PF_FREEZE) { 25.568 - refrigerator(0); 25.569 - goto no_signal; 25.570 - } 25.571 - 25.572 - if (!oldset) 25.573 - oldset = ¤t->blocked; 25.574 - 25.575 - signr = get_signal_to_deliver(&info, regs, NULL); 25.576 - if (signr > 0) { 25.577 - /* Reenable any watchpoints before delivering the 25.578 - * signal to user space. The processor register will 25.579 - * have been cleared if the watchpoint triggered 25.580 - * inside the kernel. 25.581 - */ 25.582 - if (current->thread.debugreg[7]) 25.583 - HYPERVISOR_set_debugreg(7, 25.584 - current->thread.debugreg[7]); 25.585 - 25.586 - /* Whee! Actually deliver the signal. */ 25.587 - handle_signal(signr, &info, oldset, regs); 25.588 - return 1; 25.589 - } 25.590 - 25.591 - no_signal: 25.592 - /* Did we come from a system call? */ 25.593 - if (regs->orig_eax >= 0) { 25.594 - /* Restart the system call - no handlers present */ 25.595 - if (regs->eax == -ERESTARTNOHAND || 25.596 - regs->eax == -ERESTARTSYS || 25.597 - regs->eax == -ERESTARTNOINTR) { 25.598 - regs->eax = regs->orig_eax; 25.599 - regs->eip -= 2; 25.600 - } 25.601 - if (regs->eax == -ERESTART_RESTARTBLOCK){ 25.602 - regs->eax = __NR_restart_syscall; 25.603 - regs->eip -= 2; 25.604 - } 25.605 - } 25.606 - return 0; 25.607 -} 25.608 - 25.609 -/* 25.610 - * notification of userspace execution resumption 25.611 - * - triggered by current->work.notify_resume 25.612 - */ 25.613 -__attribute__((regparm(3))) 25.614 -void do_notify_resume(struct pt_regs *regs, sigset_t *oldset, 25.615 - __u32 thread_info_flags) 25.616 -{ 25.617 - /* Pending single-step? */ 25.618 - if (thread_info_flags & _TIF_SINGLESTEP) { 25.619 - regs->eflags |= TF_MASK; 25.620 - clear_thread_flag(TIF_SINGLESTEP); 25.621 - } 25.622 - /* deal with pending signal delivery */ 25.623 - if (thread_info_flags & _TIF_SIGPENDING) 25.624 - do_signal(regs,oldset); 25.625 - 25.626 - clear_thread_flag(TIF_IRET); 25.627 -}
26.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/sysenter.c Wed Aug 25 16:26:15 2004 +0000 26.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 26.3 @@ -1,65 +0,0 @@ 26.4 -/* 26.5 - * linux/arch/i386/kernel/sysenter.c 26.6 - * 26.7 - * (C) Copyright 2002 Linus Torvalds 26.8 - * 26.9 - * This file contains the needed initializations to support sysenter. 26.10 - */ 26.11 - 26.12 -#include <linux/init.h> 26.13 -#include <linux/smp.h> 26.14 -#include <linux/thread_info.h> 26.15 -#include <linux/sched.h> 26.16 -#include <linux/gfp.h> 26.17 -#include <linux/string.h> 26.18 -#include <linux/elf.h> 26.19 - 26.20 -#include <asm/cpufeature.h> 26.21 -#include <asm/msr.h> 26.22 -#include <asm/pgtable.h> 26.23 -#include <asm/unistd.h> 26.24 - 26.25 -extern asmlinkage void sysenter_entry(void); 26.26 - 26.27 -void enable_sep_cpu(void *info) 26.28 -{ 26.29 - int cpu = get_cpu(); 26.30 - struct tss_struct *tss = init_tss + cpu; 26.31 - 26.32 - tss->ss1 = __KERNEL_CS; 26.33 - tss->esp1 = sizeof(struct tss_struct) + (unsigned long) tss; 26.34 - wrmsr(MSR_IA32_SYSENTER_CS, __KERNEL_CS, 0); 26.35 - wrmsr(MSR_IA32_SYSENTER_ESP, tss->esp1, 0); 26.36 - wrmsr(MSR_IA32_SYSENTER_EIP, (unsigned long) sysenter_entry, 0); 26.37 - put_cpu(); 26.38 -} 26.39 - 26.40 -/* 26.41 - * These symbols are defined by vsyscall.o to mark the bounds 26.42 - * of the ELF DSO images included therein. 26.43 - */ 26.44 -extern const char vsyscall_int80_start, vsyscall_int80_end; 26.45 -extern const char vsyscall_sysenter_start, vsyscall_sysenter_end; 26.46 - 26.47 -static int __init sysenter_setup(void) 26.48 -{ 26.49 - unsigned long page = get_zeroed_page(GFP_ATOMIC); 26.50 - 26.51 - __set_fixmap(FIX_VSYSCALL, __pa(page), PAGE_READONLY); 26.52 - 26.53 - if (1 /* XXXcl not yet */ || !boot_cpu_has(X86_FEATURE_SEP)) { 26.54 - memcpy((void *) page, 26.55 - &vsyscall_int80_start, 26.56 - &vsyscall_int80_end - &vsyscall_int80_start); 26.57 - return 0; 26.58 - } 26.59 - 26.60 - memcpy((void *) page, 26.61 - &vsyscall_sysenter_start, 26.62 - &vsyscall_sysenter_end - &vsyscall_sysenter_start); 26.63 - 26.64 - on_each_cpu(enable_sep_cpu, NULL, 1, 1); 26.65 - return 0; 26.66 -} 26.67 - 26.68 -__initcall(sysenter_setup);
27.1 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/time.c Wed Aug 25 16:26:15 2004 +0000 27.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 27.3 @@ -1,687 +0,0 @@ 27.4 -/* 27.5 - * linux/arch/i386/kernel/time.c 27.6 - * 27.7 - * Copyright (C) 1991, 1992, 1995 Linus Torvalds 27.8 - * 27.9 - * This file contains the PC-specific time handling details: 27.10 - * reading the RTC at bootup, etc.. 27.11 - * 1994-07-02 Alan Modra 27.12 - * fixed set_rtc_mmss, fixed time.year for >= 2000, new mktime 27.13 - * 1995-03-26 Markus Kuhn 27.14 - * fixed 500 ms bug at call to set_rtc_mmss, fixed DS12887 27.15 - * precision CMOS clock update 27.16 - * 1996-05-03 Ingo Molnar 27.17 - * fixed time warps in do_[slow|fast]_gettimeoffset() 27.18 - * 1997-09-10 Updated NTP code according to technical memorandum Jan '96 27.19 - * "A Kernel Model for Precision Timekeeping" by Dave Mills 27.20 - * 1998-09-05 (Various) 27.21 - * More robust do_fast_gettimeoffset() algorithm implemented 27.22 - * (works with APM, Cyrix 6x86MX and Centaur C6), 27.23 - * monotonic gettimeofday() with fast_get_timeoffset(), 27.24 - * drift-proof precision TSC calibration on boot 27.25 - * (C. Scott Ananian <cananian@alumni.princeton.edu>, Andrew D. 27.26 - * Balsa <andrebalsa@altern.org>, Philip Gladstone <philip@raptor.com>; 27.27 - * ported from 2.0.35 Jumbo-9 by Michael Krause <m.krause@tu-harburg.de>). 27.28 - * 1998-12-16 Andrea Arcangeli 27.29 - * Fixed Jumbo-9 code in 2.1.131: do_gettimeofday was missing 1 jiffy 27.30 - * because was not accounting lost_ticks. 27.31 - * 1998-12-24 Copyright (C) 1998 Andrea Arcangeli 27.32 - * Fixed a xtime SMP race (we need the xtime_lock rw spinlock to 27.33 - * serialize accesses to xtime/lost_ticks). 27.34 - */ 27.35 - 27.36 -#include <linux/errno.h> 27.37 -#include <linux/sched.h> 27.38 -#include <linux/kernel.h> 27.39 -#include <linux/param.h> 27.40 -#include <linux/string.h> 27.41 -#include <linux/mm.h> 27.42 -#include <linux/interrupt.h> 27.43 -#include <linux/time.h> 27.44 -#include <linux/delay.h> 27.45 -#include <linux/init.h> 27.46 -#include <linux/smp.h> 27.47 -#include <linux/module.h> 27.48 -#include <linux/sysdev.h> 27.49 -#include <linux/bcd.h> 27.50 -#include <linux/efi.h> 27.51 -#include <linux/sysctl.h> 27.52 - 27.53 -#include <asm/io.h> 27.54 -#include <asm/smp.h> 27.55 -#include <asm/irq.h> 27.56 -#include <asm/msr.h> 27.57 -#include <asm/delay.h> 27.58 -#include <asm/mpspec.h> 27.59 -#include <asm/uaccess.h> 27.60 -#include <asm/processor.h> 27.61 -#include <asm/timer.h> 27.62 - 27.63 -#include "mach_time.h" 27.64 - 27.65 -#include <linux/timex.h> 27.66 -#include <linux/config.h> 27.67 - 27.68 -#include <asm/hpet.h> 27.69 - 27.70 -#include <asm/arch_hooks.h> 27.71 - 27.72 -#include "io_ports.h" 27.73 - 27.74 -extern spinlock_t i8259A_lock; 27.75 -int pit_latch_buggy; /* extern */ 27.76 - 27.77 -#include "do_timer.h" 27.78 - 27.79 -u64 jiffies_64 = INITIAL_JIFFIES; 27.80 - 27.81 -EXPORT_SYMBOL(jiffies_64); 27.82 - 27.83 -unsigned long cpu_khz; /* Detected as we calibrate the TSC */ 27.84 - 27.85 -extern unsigned long wall_jiffies; 27.86 - 27.87 -spinlock_t rtc_lock = SPIN_LOCK_UNLOCKED; 27.88 - 27.89 -spinlock_t i8253_lock = SPIN_LOCK_UNLOCKED; 27.90 -EXPORT_SYMBOL(i8253_lock); 2