From: cl349@firebug.cl.cam.ac.uk Date: Sat, 12 Mar 2005 20:44:12 +0000 (+0000) Subject: bitkeeper revision 1.1236.25.8 (4233549cSYOSn-8TjPjFtQTvJB0ECA) X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~17857^2~26^2~13 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=964a5ccfa91dec30aa01513482ae81992edddf16;p=xen.git bitkeeper revision 1.1236.25.8 (4233549cSYOSn-8TjPjFtQTvJB0ECA) Update to Linux 2.6.11. Signed-off-by: Christian Limpach --- 964a5ccfa91dec30aa01513482ae81992edddf16 diff --cc .rootkeys index 3ae07f2290,a495f8ea15..be7ae7e789 --- a/.rootkeys +++ b/.rootkeys @@@ -134,151 -128,133 +134,149 @@@ 3e5a4e683HKVU-sxtagrDasRB8eBVw linux-2.4.29-xen-sparse/mm/swapfile.c 41180721bNns9Na7w1nJ0ZVt8bhUNA linux-2.4.29-xen-sparse/mm/vmalloc.c 41505c57WAd5l1rlfCLNSCpx9J13vA linux-2.4.29-xen-sparse/net/core/skbuff.c - 40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.10-xen-sparse/arch/xen/Kconfig - 40f56237utH41NPukqHksuNf29IC9A linux-2.6.10-xen-sparse/arch/xen/Kconfig.drivers - 40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.10-xen-sparse/arch/xen/Makefile - 40f56237JTc60m1FRlUxkUaGSQKrNw linux-2.6.10-xen-sparse/arch/xen/boot/Makefile - 40f56237hRxbacU_3PdoAl6DjZ3Jnw linux-2.6.10-xen-sparse/arch/xen/configs/xen0_defconfig - 40f56237wubfjJKlfIzZlI3ZM2VgGA linux-2.6.10-xen-sparse/arch/xen/configs/xenU_defconfig - 40f56237Mta0yHNaMS_qtM2rge0qYA linux-2.6.10-xen-sparse/arch/xen/i386/Kconfig - 40f56238u2CJdXNpjsZgHBxeVyY-2g linux-2.6.10-xen-sparse/arch/xen/i386/Makefile - 40f56238eczveJ86k_4hNxCLRQIF-g linux-2.6.10-xen-sparse/arch/xen/i386/kernel/Makefile - 40f56238rXVTJQKbBuXXLH52qEArcg linux-2.6.10-xen-sparse/arch/xen/i386/kernel/cpu/Makefile - 40f562385s4lr6Zg92gExe7UQ4A76Q linux-2.6.10-xen-sparse/arch/xen/i386/kernel/cpu/common.c - 41ab440bnpxZdWShZrGgM9pPaz5rmA linux-2.6.10-xen-sparse/arch/xen/i386/kernel/cpu/mtrr/Makefile - 41ab440bBKWz-aEOEojU4PAMXe3Ppg linux-2.6.10-xen-sparse/arch/xen/i386/kernel/cpu/mtrr/main.c - 40f56238XDtHSijkAFlbv1PT8Bhw_Q linux-2.6.10-xen-sparse/arch/xen/i386/kernel/entry.S - 40f56238bnvciAuyzAiMkdzGErYt1A linux-2.6.10-xen-sparse/arch/xen/i386/kernel/head.S - 40f58a0d31M2EkuPbG94ns_nOi0PVA linux-2.6.10-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c - 40faa751_zbZlAmLyQgCXdYekVFdWA linux-2.6.10-xen-sparse/arch/xen/i386/kernel/ioport.c +41d00d82zN8IfLBRxc7G_i7lbwT3cQ linux-2.6.10-xen-sparse/arch/xen/i386/kernel/irq.c - 40f56238ue3YRsK52HG7iccNzP1AwQ linux-2.6.10-xen-sparse/arch/xen/i386/kernel/ldt.c - 41d54a76YMCA67S8J-TBT3J62Wx6yA linux-2.6.10-xen-sparse/arch/xen/i386/kernel/microcode.c - 4107adf1cNtsuOxOB4T6paAoY2R2PA linux-2.6.10-xen-sparse/arch/xen/i386/kernel/pci-dma.c - 40f56238a8iOVDEoostsbun_sy2i4g linux-2.6.10-xen-sparse/arch/xen/i386/kernel/process.c - 40f56238YQIJoYG2ehDGEcdTgLmGbg linux-2.6.10-xen-sparse/arch/xen/i386/kernel/setup.c - 40f56238nWMQg7CKbyTy0KJNvCzbtg linux-2.6.10-xen-sparse/arch/xen/i386/kernel/signal.c +41811cac4lkCB-fHir6CcxuEJ2pGsQ linux-2.6.10-xen-sparse/arch/xen/i386/kernel/smp.c +41811ca9mbGpqBrZVrUGEiv8CTV3ng linux-2.6.10-xen-sparse/arch/xen/i386/kernel/smpboot.c - 40f56238qVGkpO_ycnQA8k03kQzAgA linux-2.6.10-xen-sparse/arch/xen/i386/kernel/time.c - 40f56238NzTgeO63RGoxHrW5NQeO3Q linux-2.6.10-xen-sparse/arch/xen/i386/kernel/timers/Makefile - 40f56238BMqG5PuSHufpjbvp_helBw linux-2.6.10-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c - 40f562389xNa78YBZciUibQjyRU_Lg linux-2.6.10-xen-sparse/arch/xen/i386/kernel/traps.c - 40f56238JypKAUG01ZojFwH7qnZ5uA linux-2.6.10-xen-sparse/arch/xen/i386/kernel/vsyscall.S - 40f56238wi6AdNQjm0RT57bSkwb6hg linux-2.6.10-xen-sparse/arch/xen/i386/kernel/vsyscall.lds - 40f56238a3w6-byOzexIlMgni76Lcg linux-2.6.10-xen-sparse/arch/xen/i386/mm/Makefile - 40f56238ILx8xlbywNbzTdv5Zr4xXQ linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c - 4118cc35CbY8rfGVspF5O-7EkXBEAA linux-2.6.10-xen-sparse/arch/xen/i386/mm/highmem.c - 40f562383SKvDStdtrvzr5fyCbW4rw linux-2.6.10-xen-sparse/arch/xen/i386/mm/hypervisor.c - 40f56239xcNylAxuGsQHwi1AyMLV8w linux-2.6.10-xen-sparse/arch/xen/i386/mm/init.c - 41062ab7CjxC1UBaFhOMWWdhHkIUyg linux-2.6.10-xen-sparse/arch/xen/i386/mm/ioremap.c - 413b5ab8LIowAnQrEmaOJSdmqm96jQ linux-2.6.10-xen-sparse/arch/xen/i386/mm/pageattr.c - 40f5623906UYHv1rsVUeRc0tFT0dWw linux-2.6.10-xen-sparse/arch/xen/i386/mm/pgtable.c - 4107adf12ndy94MidCaivDibJ3pPAg linux-2.6.10-xen-sparse/arch/xen/i386/pci/Makefile - 4107adf1WcCgkhsdLTRGX52cOG1vJg linux-2.6.10-xen-sparse/arch/xen/i386/pci/direct.c - 4107adf1s5u6249DNPUViX1YNagbUQ linux-2.6.10-xen-sparse/arch/xen/i386/pci/irq.c - 40f56239zOksGg_H4XD4ye6iZNtoZA linux-2.6.10-xen-sparse/arch/xen/kernel/Makefile - 40f56239bvOjuuuViZ0XMlNiREFC0A linux-2.6.10-xen-sparse/arch/xen/kernel/ctrl_if.c - 41ab6fa06JdF7jxUsuDcjN3UhuIAxg linux-2.6.10-xen-sparse/arch/xen/kernel/devmem.c - 40f56238xFQe9T7M_U_FItM-bZIpLw linux-2.6.10-xen-sparse/arch/xen/kernel/evtchn.c - 4110f478aeQWllIN7J4kouAHiAqrPw linux-2.6.10-xen-sparse/arch/xen/kernel/fixup.c - 412dfae9eA3_6e6bCGUtg1mj8b56fQ linux-2.6.10-xen-sparse/arch/xen/kernel/gnttab.c - 40f562392LBhwmOxVPsYdkYXMxI_ZQ linux-2.6.10-xen-sparse/arch/xen/kernel/reboot.c - 414c113396tK1HTVeUalm3u-1DF16g linux-2.6.10-xen-sparse/arch/xen/kernel/skbuff.c +418f90e4lGdeJK9rmbOB1kN-IKSjsQ linux-2.6.10-xen-sparse/arch/xen/kernel/smp.c - 3f68905c5eiA-lBMQSvXLMWS1ikDEA linux-2.6.10-xen-sparse/arch/xen/kernel/xen_proc.c - 41261688yS8eAyy-7kzG4KBs0xbYCA linux-2.6.10-xen-sparse/drivers/Makefile - 4108f5c1WfTIrs0HZFeV39sttekCTw linux-2.6.10-xen-sparse/drivers/char/mem.c - 4111308bZAIzwf_Kzu6x1TZYZ3E0_Q linux-2.6.10-xen-sparse/drivers/char/tty_io.c - 40f56239Dp_vMTgz8TEbvo1hjHGc3w linux-2.6.10-xen-sparse/drivers/xen/Makefile - 41768fbcncpBQf8s2l2-CwoSNIZ9uA linux-2.6.10-xen-sparse/drivers/xen/balloon/Makefile - 3e6377f8i5e9eGz7Pw6fQuhuTQ7DQg linux-2.6.10-xen-sparse/drivers/xen/balloon/balloon.c - 410d0893otFGghmv4dUXDUBBdY5aIA linux-2.6.10-xen-sparse/drivers/xen/blkback/Makefile - 4087cf0d1XgMkooTZAiJS6NrcpLQNQ linux-2.6.10-xen-sparse/drivers/xen/blkback/blkback.c - 4087cf0dZadZ8r6CEt4fNN350Yle3A linux-2.6.10-xen-sparse/drivers/xen/blkback/common.h - 4087cf0dxlh29iw0w-9rxOCEGCjPcw linux-2.6.10-xen-sparse/drivers/xen/blkback/control.c - 4087cf0dbuoH20fMjNZjcgrRK-1msQ linux-2.6.10-xen-sparse/drivers/xen/blkback/interface.c - 4087cf0dk97tacDzxfByWV7JifUYqA linux-2.6.10-xen-sparse/drivers/xen/blkback/vbd.c - 40f56239Sfle6wGv5FS0wjS_HI150A linux-2.6.10-xen-sparse/drivers/xen/blkfront/Kconfig - 40f562395atl9x4suKGhPkjqLOXESg linux-2.6.10-xen-sparse/drivers/xen/blkfront/Makefile - 40f56239-JNIaTzlviVJohVdoYOUpw linux-2.6.10-xen-sparse/drivers/xen/blkfront/blkfront.c - 40f56239y9naBTXe40Pi2J_z3p-d1g linux-2.6.10-xen-sparse/drivers/xen/blkfront/block.h - 40f56239BVfPsXBiWQitXgDRtOsiqg linux-2.6.10-xen-sparse/drivers/xen/blkfront/vbd.c +41a226e0vjAcDXHOnXE5ummcdUD2mg linux-2.6.10-xen-sparse/drivers/xen/blktap/Makefile +41a226e0VeZA1N8tbU6nvJ3OxUcJmw linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap.c +41a226e1k4J5VMLnrYXDWRqElS49YQ linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap.h +41a226e1-A_Hy7utS8vJKaXnH_tzfA linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c +41a226e19NoUUTOvs7jumDMRYDIO4Q linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_datapath.c +41a226e1MNSyWWK5dEVgvSQ5OW0fDA linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_userdev.c - 40f56239fsLjvtD8YBRAWphps4FDjg linux-2.6.10-xen-sparse/drivers/xen/console/Makefile - 3e5a4e651TH-SXHoufurnWjgl5bfOA linux-2.6.10-xen-sparse/drivers/xen/console/console.c - 40f56239KYxO0YabhPzCTeUuln-lnA linux-2.6.10-xen-sparse/drivers/xen/evtchn/Makefile - 40f56239DoibTX6R-ZYd3QTXAB8_TA linux-2.6.10-xen-sparse/drivers/xen/evtchn/evtchn.c - 410a9817HEVJvred5Oy_uKH3HFJC5Q linux-2.6.10-xen-sparse/drivers/xen/netback/Makefile - 4097ba831lpGeLlPg-bfV8XarVVuoQ linux-2.6.10-xen-sparse/drivers/xen/netback/common.h - 4097ba83wvv8yi5P5xugCUBAdb6O-A linux-2.6.10-xen-sparse/drivers/xen/netback/control.c - 4097ba83byY5bTSugJGZ1exTxIcMKw linux-2.6.10-xen-sparse/drivers/xen/netback/interface.c - 4087cf0dGmSbFhFZyIZBJzvqxY-qBw linux-2.6.10-xen-sparse/drivers/xen/netback/netback.c - 40f56239lrg_Ob0BJ8WBFS1zeg2CYw linux-2.6.10-xen-sparse/drivers/xen/netfront/Kconfig - 40f56239Wd4k_ycG_mFsSO1r5xKdtQ linux-2.6.10-xen-sparse/drivers/xen/netfront/Makefile - 405853f6nbeazrNyEWNHBuoSg2PiPA linux-2.6.10-xen-sparse/drivers/xen/netfront/netfront.c - 4108f5c1ppFXVpQzCOAZ6xXYubsjKA linux-2.6.10-xen-sparse/drivers/xen/privcmd/Makefile - 3e5a4e65IUfzzMu2kZFlGEB8-rpTaA linux-2.6.10-xen-sparse/drivers/xen/privcmd/privcmd.c +41ee5e8bYDQkjRVKnFn5uFyy0KreCw linux-2.6.10-xen-sparse/drivers/xen/usbback/common.h +41ee5e8bt7xeBUJqG5XJS-ofukdsgA linux-2.6.10-xen-sparse/drivers/xen/usbback/control.c +41ee5e8bSs3BGC7yegM_ek2Tn0Ahvw linux-2.6.10-xen-sparse/drivers/xen/usbback/interface.c +41ee5e8bglvqKvZSY5uJ5JGQejEwyQ linux-2.6.10-xen-sparse/drivers/xen/usbback/usbback.c +41ee5e8ckZ9xVNvu9NHIZDK7JqApmQ linux-2.6.10-xen-sparse/drivers/xen/usbfront/usbfront.c +41ee5e8ck9scpGirfqEZRARbGDyTXA linux-2.6.10-xen-sparse/drivers/xen/usbfront/xhci.h - 412f47e4RKD-R5IS5gEXvcT8L4v8gA linux-2.6.10-xen-sparse/include/asm-generic/pgtable.h - 40f56239YAjS52QG2FIAQpHDZAdGHg linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/desc.h - 4107adf1E5O4ztGHNGMzCCNhcvqNow linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h - 40f5623akIoBsQ3KxSB2kufkbgONXQ linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/fixmap.h - 41979925z1MsKU1SfuuheM1IFDQ_bA linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/floppy.h - 4118b6a418gnL6AZsTdglC92YGqYTg linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/highmem.h - 40f5623aJVXQwpJMOLE99XgvGsfQ8Q linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/io.h - 40f5623aKXkBBxgpLx2NcvkncQ1Yyw linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h - 40f5623aDMCsWOFO0jktZ4e8sjwvEg linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h - 40f5623arsFXkGdPvIqvFi3yFXGR0Q linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h +41811f07Iri9hrvs97t-baxmhOwWDQ linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/mach-xen/smpboot_hooks.h - 4120f807GCO0uqsLqdZj9csxR1Wthw linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/mmu_context.h - 40f5623adgjZq9nAgCt0IXdWl7udSA linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/page.h - 40f5623a54NuG-7qHihGYmw4wWQnMA linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/param.h - 41137cc1kkvg0cg7uxddcEfjL7L67w linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pci.h - 40f5623atCokYc2uCysSJ8jFO8TEsw linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgalloc.h - 412e01beTwiaC8sYY4XJP8PxLST5CA linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable-2level-defs.h - 40f5623aEToIXouJgO-ao5d5pcEt1w linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h - 40f5623aCCXRPlGpNthVXstGz9ZV3A linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable.h - 40f5623aPCkQQfPtJSooGdhcatrvnQ linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/processor.h - 412ea0afQL2CAI-f522TbLjLPMibPQ linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/ptrace.h - 40f5623bzLvxr7WoJIxVf2OH4rCBJg linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/segment.h - 40f5623bG_LzgG6-qwk292nTc5Wabw linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/setup.h +4198c32a8NzmcKVOzKaEJfaQxxiA0A linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/spinlock.h - 40f5623bgzm_9vwxpzJswlAxg298Gg linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h - 40f5623bVdKP7Dt7qm8twu3NcnGNbA linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/system.h - 40f5623bc8LKPRO09wY5dGDnY_YCpw linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/tlbflush.h - 41062ab7uFxnCq-KtPeAm-aV8CicgA linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/vga.h - 41af4017PDMuSmMWtSRU5UC9Vylw5g linux-2.6.10-xen-sparse/include/asm-xen/balloon.h - 40f5623bYNP7tHE2zX6YQxp9Zq2utQ linux-2.6.10-xen-sparse/include/asm-xen/ctrl_if.h - 40f5623b3Eqs8pAc5WpPX8_jTzV2qw linux-2.6.10-xen-sparse/include/asm-xen/evtchn.h - 419b4e9367PjTEvdjwavWN12BeBBXg linux-2.6.10-xen-sparse/include/asm-xen/foreign_page.h - 412dfaeazclyNDM0cpnp60Yo4xulpQ linux-2.6.10-xen-sparse/include/asm-xen/gnttab.h - 40f5623aGPlsm0u1LTO-NVZ6AGzNRQ linux-2.6.10-xen-sparse/include/asm-xen/hypervisor.h - 3f108af1ylCIm82H052FVTfXACBHrw linux-2.6.10-xen-sparse/include/asm-xen/linux-public/privcmd.h - 3fa8e3f0kBLeE4To2vpdi3cpJbIkbQ linux-2.6.10-xen-sparse/include/asm-xen/linux-public/suspend.h - 40f5623cndVUFlkxpf7Lfx7xu8madQ linux-2.6.10-xen-sparse/include/asm-xen/multicall.h - 4122466356eIBnC9ot44WSVVIFyhQA linux-2.6.10-xen-sparse/include/asm-xen/queues.h - 3f689063BoW-HWV3auUJ-OqXfcGArw linux-2.6.10-xen-sparse/include/asm-xen/xen_proc.h - 419b4e93z2S0gR17XTy8wg09JEwAhg linux-2.6.10-xen-sparse/include/linux/gfp.h - 42305f545Vc5SLCUewZ2-n-P9JJhEQ linux-2.6.10-xen-sparse/include/linux/highmem.h - 419dfc609zbti8rqL60tL2dHXQ_rvQ linux-2.6.10-xen-sparse/include/linux/irq.h - 4124f66f4NaKNa0xPiGGykn9QaZk3w linux-2.6.10-xen-sparse/include/linux/skbuff.h - 419dfc6awx7w88wk6cG9P3mPidX6LQ linux-2.6.10-xen-sparse/kernel/irq/manage.c - 40f56a0ddHCSs3501MY4hRf22tctOw linux-2.6.10-xen-sparse/mkbuildtree - 42305f54Q6xJ1bXcQJlCQq1m-e2C8g linux-2.6.10-xen-sparse/mm/highmem.c - 412f46c0LJuKAgSPGoC0Z1DEkLfuLA linux-2.6.10-xen-sparse/mm/memory.c - 410a94a4KT6I6X0LVc7djB39tRDp4g linux-2.6.10-xen-sparse/mm/page_alloc.c - 41505c572m-s9ATiO1LiD1GPznTTIg linux-2.6.10-xen-sparse/net/core/skbuff.c + 40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.11-xen-sparse/arch/xen/Kconfig + 40f56237utH41NPukqHksuNf29IC9A linux-2.6.11-xen-sparse/arch/xen/Kconfig.drivers + 40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.11-xen-sparse/arch/xen/Makefile + 40f56237JTc60m1FRlUxkUaGSQKrNw linux-2.6.11-xen-sparse/arch/xen/boot/Makefile + 40f56237hRxbacU_3PdoAl6DjZ3Jnw linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig + 40f56237wubfjJKlfIzZlI3ZM2VgGA linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig + 40f56237Mta0yHNaMS_qtM2rge0qYA linux-2.6.11-xen-sparse/arch/xen/i386/Kconfig + 40f56238u2CJdXNpjsZgHBxeVyY-2g linux-2.6.11-xen-sparse/arch/xen/i386/Makefile + 40f56238eczveJ86k_4hNxCLRQIF-g linux-2.6.11-xen-sparse/arch/xen/i386/kernel/Makefile + 40f56238rXVTJQKbBuXXLH52qEArcg linux-2.6.11-xen-sparse/arch/xen/i386/kernel/cpu/Makefile + 40f562385s4lr6Zg92gExe7UQ4A76Q linux-2.6.11-xen-sparse/arch/xen/i386/kernel/cpu/common.c + 41ab440bnpxZdWShZrGgM9pPaz5rmA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/cpu/mtrr/Makefile + 41ab440bBKWz-aEOEojU4PAMXe3Ppg linux-2.6.11-xen-sparse/arch/xen/i386/kernel/cpu/mtrr/main.c + 40f56238XDtHSijkAFlbv1PT8Bhw_Q linux-2.6.11-xen-sparse/arch/xen/i386/kernel/entry.S + 40f56238bnvciAuyzAiMkdzGErYt1A linux-2.6.11-xen-sparse/arch/xen/i386/kernel/head.S + 40f58a0d31M2EkuPbG94ns_nOi0PVA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c + 40faa751_zbZlAmLyQgCXdYekVFdWA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/ioport.c + 40f56238ue3YRsK52HG7iccNzP1AwQ linux-2.6.11-xen-sparse/arch/xen/i386/kernel/ldt.c + 41d54a76YMCA67S8J-TBT3J62Wx6yA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/microcode.c + 4107adf1cNtsuOxOB4T6paAoY2R2PA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/pci-dma.c + 40f56238a8iOVDEoostsbun_sy2i4g linux-2.6.11-xen-sparse/arch/xen/i386/kernel/process.c + 40f56238YQIJoYG2ehDGEcdTgLmGbg linux-2.6.11-xen-sparse/arch/xen/i386/kernel/setup.c + 40f56238nWMQg7CKbyTy0KJNvCzbtg linux-2.6.11-xen-sparse/arch/xen/i386/kernel/signal.c + 40f56238qVGkpO_ycnQA8k03kQzAgA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/time.c + 40f56238NzTgeO63RGoxHrW5NQeO3Q linux-2.6.11-xen-sparse/arch/xen/i386/kernel/timers/Makefile + 40f56238BMqG5PuSHufpjbvp_helBw linux-2.6.11-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c + 40f562389xNa78YBZciUibQjyRU_Lg linux-2.6.11-xen-sparse/arch/xen/i386/kernel/traps.c + 40f56238JypKAUG01ZojFwH7qnZ5uA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/vsyscall.S + 40f56238wi6AdNQjm0RT57bSkwb6hg linux-2.6.11-xen-sparse/arch/xen/i386/kernel/vsyscall.lds + 40f56238a3w6-byOzexIlMgni76Lcg linux-2.6.11-xen-sparse/arch/xen/i386/mm/Makefile + 40f56238ILx8xlbywNbzTdv5Zr4xXQ linux-2.6.11-xen-sparse/arch/xen/i386/mm/fault.c + 4118cc35CbY8rfGVspF5O-7EkXBEAA linux-2.6.11-xen-sparse/arch/xen/i386/mm/highmem.c + 40f562383SKvDStdtrvzr5fyCbW4rw linux-2.6.11-xen-sparse/arch/xen/i386/mm/hypervisor.c + 40f56239xcNylAxuGsQHwi1AyMLV8w linux-2.6.11-xen-sparse/arch/xen/i386/mm/init.c + 41062ab7CjxC1UBaFhOMWWdhHkIUyg linux-2.6.11-xen-sparse/arch/xen/i386/mm/ioremap.c + 413b5ab8LIowAnQrEmaOJSdmqm96jQ linux-2.6.11-xen-sparse/arch/xen/i386/mm/pageattr.c + 40f5623906UYHv1rsVUeRc0tFT0dWw linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c + 4107adf12ndy94MidCaivDibJ3pPAg linux-2.6.11-xen-sparse/arch/xen/i386/pci/Makefile + 4107adf1WcCgkhsdLTRGX52cOG1vJg linux-2.6.11-xen-sparse/arch/xen/i386/pci/direct.c + 4107adf1s5u6249DNPUViX1YNagbUQ linux-2.6.11-xen-sparse/arch/xen/i386/pci/irq.c + 40f56239zOksGg_H4XD4ye6iZNtoZA linux-2.6.11-xen-sparse/arch/xen/kernel/Makefile + 40f56239bvOjuuuViZ0XMlNiREFC0A linux-2.6.11-xen-sparse/arch/xen/kernel/ctrl_if.c + 41ab6fa06JdF7jxUsuDcjN3UhuIAxg linux-2.6.11-xen-sparse/arch/xen/kernel/devmem.c + 40f56238xFQe9T7M_U_FItM-bZIpLw linux-2.6.11-xen-sparse/arch/xen/kernel/evtchn.c + 4110f478aeQWllIN7J4kouAHiAqrPw linux-2.6.11-xen-sparse/arch/xen/kernel/fixup.c + 412dfae9eA3_6e6bCGUtg1mj8b56fQ linux-2.6.11-xen-sparse/arch/xen/kernel/gnttab.c + 40f562392LBhwmOxVPsYdkYXMxI_ZQ linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c + 414c113396tK1HTVeUalm3u-1DF16g linux-2.6.11-xen-sparse/arch/xen/kernel/skbuff.c + 3f68905c5eiA-lBMQSvXLMWS1ikDEA linux-2.6.11-xen-sparse/arch/xen/kernel/xen_proc.c + 41261688yS8eAyy-7kzG4KBs0xbYCA linux-2.6.11-xen-sparse/drivers/Makefile + 4108f5c1WfTIrs0HZFeV39sttekCTw linux-2.6.11-xen-sparse/drivers/char/mem.c + 4111308bZAIzwf_Kzu6x1TZYZ3E0_Q linux-2.6.11-xen-sparse/drivers/char/tty_io.c + 40f56239Dp_vMTgz8TEbvo1hjHGc3w linux-2.6.11-xen-sparse/drivers/xen/Makefile + 41768fbcncpBQf8s2l2-CwoSNIZ9uA linux-2.6.11-xen-sparse/drivers/xen/balloon/Makefile + 3e6377f8i5e9eGz7Pw6fQuhuTQ7DQg linux-2.6.11-xen-sparse/drivers/xen/balloon/balloon.c + 410d0893otFGghmv4dUXDUBBdY5aIA linux-2.6.11-xen-sparse/drivers/xen/blkback/Makefile + 4087cf0d1XgMkooTZAiJS6NrcpLQNQ linux-2.6.11-xen-sparse/drivers/xen/blkback/blkback.c + 4087cf0dZadZ8r6CEt4fNN350Yle3A linux-2.6.11-xen-sparse/drivers/xen/blkback/common.h + 4087cf0dxlh29iw0w-9rxOCEGCjPcw linux-2.6.11-xen-sparse/drivers/xen/blkback/control.c + 4087cf0dbuoH20fMjNZjcgrRK-1msQ linux-2.6.11-xen-sparse/drivers/xen/blkback/interface.c + 4087cf0dk97tacDzxfByWV7JifUYqA linux-2.6.11-xen-sparse/drivers/xen/blkback/vbd.c + 40f56239Sfle6wGv5FS0wjS_HI150A linux-2.6.11-xen-sparse/drivers/xen/blkfront/Kconfig + 40f562395atl9x4suKGhPkjqLOXESg linux-2.6.11-xen-sparse/drivers/xen/blkfront/Makefile + 40f56239-JNIaTzlviVJohVdoYOUpw linux-2.6.11-xen-sparse/drivers/xen/blkfront/blkfront.c + 40f56239y9naBTXe40Pi2J_z3p-d1g linux-2.6.11-xen-sparse/drivers/xen/blkfront/block.h + 40f56239BVfPsXBiWQitXgDRtOsiqg linux-2.6.11-xen-sparse/drivers/xen/blkfront/vbd.c + 40f56239fsLjvtD8YBRAWphps4FDjg linux-2.6.11-xen-sparse/drivers/xen/console/Makefile + 3e5a4e651TH-SXHoufurnWjgl5bfOA linux-2.6.11-xen-sparse/drivers/xen/console/console.c + 40f56239KYxO0YabhPzCTeUuln-lnA linux-2.6.11-xen-sparse/drivers/xen/evtchn/Makefile + 40f56239DoibTX6R-ZYd3QTXAB8_TA linux-2.6.11-xen-sparse/drivers/xen/evtchn/evtchn.c + 410a9817HEVJvred5Oy_uKH3HFJC5Q linux-2.6.11-xen-sparse/drivers/xen/netback/Makefile + 4097ba831lpGeLlPg-bfV8XarVVuoQ linux-2.6.11-xen-sparse/drivers/xen/netback/common.h + 4097ba83wvv8yi5P5xugCUBAdb6O-A linux-2.6.11-xen-sparse/drivers/xen/netback/control.c + 4097ba83byY5bTSugJGZ1exTxIcMKw linux-2.6.11-xen-sparse/drivers/xen/netback/interface.c + 4087cf0dGmSbFhFZyIZBJzvqxY-qBw linux-2.6.11-xen-sparse/drivers/xen/netback/netback.c + 40f56239lrg_Ob0BJ8WBFS1zeg2CYw linux-2.6.11-xen-sparse/drivers/xen/netfront/Kconfig + 40f56239Wd4k_ycG_mFsSO1r5xKdtQ linux-2.6.11-xen-sparse/drivers/xen/netfront/Makefile + 405853f6nbeazrNyEWNHBuoSg2PiPA linux-2.6.11-xen-sparse/drivers/xen/netfront/netfront.c + 4108f5c1ppFXVpQzCOAZ6xXYubsjKA linux-2.6.11-xen-sparse/drivers/xen/privcmd/Makefile + 3e5a4e65IUfzzMu2kZFlGEB8-rpTaA linux-2.6.11-xen-sparse/drivers/xen/privcmd/privcmd.c + 412f47e4RKD-R5IS5gEXvcT8L4v8gA linux-2.6.11-xen-sparse/include/asm-generic/pgtable.h + 40f56239YAjS52QG2FIAQpHDZAdGHg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/desc.h + 4107adf1E5O4ztGHNGMzCCNhcvqNow linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h + 40f5623akIoBsQ3KxSB2kufkbgONXQ linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/fixmap.h + 41979925z1MsKU1SfuuheM1IFDQ_bA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/floppy.h + 4118b6a418gnL6AZsTdglC92YGqYTg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/highmem.h + 40f5623aJVXQwpJMOLE99XgvGsfQ8Q linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/io.h + 40f5623aKXkBBxgpLx2NcvkncQ1Yyw linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h + 40f5623aDMCsWOFO0jktZ4e8sjwvEg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h + 40f5623arsFXkGdPvIqvFi3yFXGR0Q linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h + 4120f807GCO0uqsLqdZj9csxR1Wthw linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/mmu_context.h -40f5623aFTyFTR-vdiA-KaGxk5JOKQ linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/msr.h + 40f5623adgjZq9nAgCt0IXdWl7udSA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/page.h + 40f5623a54NuG-7qHihGYmw4wWQnMA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/param.h + 41137cc1kkvg0cg7uxddcEfjL7L67w linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pci.h + 40f5623atCokYc2uCysSJ8jFO8TEsw linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgalloc.h + 412e01beTwiaC8sYY4XJP8PxLST5CA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level-defs.h + 40f5623aEToIXouJgO-ao5d5pcEt1w linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h + 40f5623aCCXRPlGpNthVXstGz9ZV3A linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable.h + 40f5623aPCkQQfPtJSooGdhcatrvnQ linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/processor.h + 412ea0afQL2CAI-f522TbLjLPMibPQ linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/ptrace.h + 40f5623bzLvxr7WoJIxVf2OH4rCBJg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/segment.h + 40f5623bG_LzgG6-qwk292nTc5Wabw linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/setup.h + 40f5623bgzm_9vwxpzJswlAxg298Gg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h + 40f5623bVdKP7Dt7qm8twu3NcnGNbA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/system.h + 40f5623bc8LKPRO09wY5dGDnY_YCpw linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/tlbflush.h + 41062ab7uFxnCq-KtPeAm-aV8CicgA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/vga.h -40f5623bxUbeGjkRrjDguCy_Gm8RLw linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/xor.h + 41af4017PDMuSmMWtSRU5UC9Vylw5g linux-2.6.11-xen-sparse/include/asm-xen/balloon.h + 40f5623bYNP7tHE2zX6YQxp9Zq2utQ linux-2.6.11-xen-sparse/include/asm-xen/ctrl_if.h + 40f5623b3Eqs8pAc5WpPX8_jTzV2qw linux-2.6.11-xen-sparse/include/asm-xen/evtchn.h + 419b4e9367PjTEvdjwavWN12BeBBXg linux-2.6.11-xen-sparse/include/asm-xen/foreign_page.h + 412dfaeazclyNDM0cpnp60Yo4xulpQ linux-2.6.11-xen-sparse/include/asm-xen/gnttab.h + 40f5623aGPlsm0u1LTO-NVZ6AGzNRQ linux-2.6.11-xen-sparse/include/asm-xen/hypervisor.h + 3f108af1ylCIm82H052FVTfXACBHrw linux-2.6.11-xen-sparse/include/asm-xen/linux-public/privcmd.h + 3fa8e3f0kBLeE4To2vpdi3cpJbIkbQ linux-2.6.11-xen-sparse/include/asm-xen/linux-public/suspend.h + 40f5623cndVUFlkxpf7Lfx7xu8madQ linux-2.6.11-xen-sparse/include/asm-xen/multicall.h + 4122466356eIBnC9ot44WSVVIFyhQA linux-2.6.11-xen-sparse/include/asm-xen/queues.h + 3f689063BoW-HWV3auUJ-OqXfcGArw linux-2.6.11-xen-sparse/include/asm-xen/xen_proc.h + 419b4e93z2S0gR17XTy8wg09JEwAhg linux-2.6.11-xen-sparse/include/linux/gfp.h + 42305f545Vc5SLCUewZ2-n-P9JJhEQ linux-2.6.11-xen-sparse/include/linux/highmem.h + 419dfc609zbti8rqL60tL2dHXQ_rvQ linux-2.6.11-xen-sparse/include/linux/irq.h + 419dfc6awx7w88wk6cG9P3mPidX6LQ linux-2.6.11-xen-sparse/kernel/irq/manage.c + 40f56a0ddHCSs3501MY4hRf22tctOw linux-2.6.11-xen-sparse/mkbuildtree + 42305f54Q6xJ1bXcQJlCQq1m-e2C8g linux-2.6.11-xen-sparse/mm/highmem.c + 412f46c0LJuKAgSPGoC0Z1DEkLfuLA linux-2.6.11-xen-sparse/mm/memory.c + 410a94a4KT6I6X0LVc7djB39tRDp4g linux-2.6.11-xen-sparse/mm/page_alloc.c 413cb1e4zst25MDYjg63Y-NGC5_pLg netbsd-2.0-xen-sparse/Makefile 413cb1e5c_Mkxf_X0zimEhTKI_l4DA netbsd-2.0-xen-sparse/mkbuildtree 413cb1e5kY_Zil7-b0kI6hvCIxBEYg netbsd-2.0-xen-sparse/nbconfig-xen @@@ -317,50 -293,10 +315,50 @@@ 422e4430vKaHLOOGS7X-SUUe3EBCgw netbsd-2.0-xen-sparse/sys/miscfs/kernfs/kernfs.h 422e4430-gOD358H8nGGnNWes08Nng netbsd-2.0-xen-sparse/sys/miscfs/kernfs/kernfs_vnops.c 413cb3b53nyOv1OIeDSsCXhBFDXvJA netbsd-2.0-xen-sparse/sys/nfs/files.nfs - 413aa1d0oNP8HXLvfPuMe6cSroUfSA patches/linux-2.6.10/agpgart.patch + 413aa1d0oNP8HXLvfPuMe6cSroUfSA patches/linux-2.6.11/agpgart.patch -418abc69J3F638vPO9MYoDGeYilxoQ patches/linux-2.6.11/nettel.patch 3f776bd1Hy9rn69ntXBhPReUFw9IEA tools/Makefile 40e1b09db5mN69Ijj0X_Eol-S7dXiw tools/Rules.mk +4209033eUwhDBJ_bxejiv5c6gjXS4A tools/blktap/Makefile +4209033ewLAHdhGrT_2jo3Gb_5bDcA tools/blktap/README +42277b02mYXxgijE7MFeUe9d8eldMw tools/blktap/README-PARALLAX +4209033eX_Xw94wHaOCtnU9nOAtSJA tools/blktap/blkaio.c +4209033egwf6LDxM2hbaqi9rRdZy4A tools/blktap/blkaiolib.c +4209033f9yELLK85Ipo2oKjr3ickgQ tools/blktap/blkaiolib.h +4209033fL9LcSI6LXrIp5O4axbUBLg tools/blktap/blkcow.c +4209033fUDlFGZreIyZHdP7h7yfvuQ tools/blktap/blkcowgnbd.c +4209033fCgZzLeMOwNBFmsp99x58ZQ tools/blktap/blkcowimg.c +4209033frfXH6oOi9AvRz08PPAndNA tools/blktap/blkcowlib.c +4209033fhFd_y2go9HgCF395A35xJg tools/blktap/blkcowlib.h +4209033fHgtGpb_K16_xC9CpkjNZLw tools/blktap/blkdump.c +4209033fm61CZG1RyKDW75V-eTZ9fg tools/blktap/blkgnbd.c +4209033fVfa-R6MFgGcmsQHTDna4PA tools/blktap/blkgnbdlib.c +4209033fIgDQbaHwHStHhPEDTtbqsA tools/blktap/blkgnbdlib.h +4209033figp5JRsKsXY8rw4keRumkg tools/blktap/blkimg.c +42090340V-8HKGlr00SyJGsE5jXC3A tools/blktap/blkimglib.c +42090340c7pQbh0Km8zLcEqPd_3zIg tools/blktap/blkimglib.h +42090340_mvZtozMjghPJO0qsjk4NQ tools/blktap/blkint.h +42090340rc2q1wmlGn6HtiJAkqhtNQ tools/blktap/blktaplib.c +42090340C-WkRPT7N3t-8Lzehzogdw tools/blktap/blktaplib.h +42277b02WrfP1meTDPv1M5swFq8oHQ tools/blktap/blockstore.c +42277b02P1C0FYj3gqwTZUD8sxKCug tools/blktap/blockstore.h +42090340B3mDvcxvd9ehDHUkg46hvw tools/blktap/libgnbd/Makefile +42090340ZWkc5Xhf9lpQmDON8HJXww tools/blktap/libgnbd/gnbdtest.c +42090340ocMiUScJE3OpY7QNunvSbg tools/blktap/libgnbd/libgnbd.c +42090340G5_F_EeVnPORKB0pTMGGhA tools/blktap/libgnbd/libgnbd.h +42277b03930x2TJT3PZlw6o0GERXpw tools/blktap/parallax.c +42277b03XQYq8bujXSz7JAZ8N7j_pA tools/blktap/radix.c +42277b03vZ4-jno_mgKmAcCW3ycRAg tools/blktap/radix.h +42277b03U_wLHL-alMA0bfxGlqldXg tools/blktap/snaplog.c +42277b04Ryya-z662BEx8HnxNN0dGQ tools/blktap/snaplog.h +42277b04LxFjptgZ75Z98DUAso4Prg tools/blktap/vdi.c +42277b04tt5QkIvs8She8CQqH5kwpg tools/blktap/vdi.h +42277b04zMAhB0_946sHQ_H2vwnt0Q tools/blktap/vdi_create.c +42277b04xB_iUmiSm6nKcy8OV8bckA tools/blktap/vdi_fill.c +42277b045CJGD_rKH-ZT_-0X4knhWA tools/blktap/vdi_list.c +42277b043ZKx0NJSbcgptQctQ5rerg tools/blktap/vdi_snap.c +42277b043Fjy5-H7LyBtUPyDlZFo6A tools/blktap/vdi_snap_list.c +42277b04vhqD6Lq3WmGbaESoAAKdhw tools/blktap/vdi_tree.c +42277b047H8fTVyUf75BWAjh6Zpsqg tools/blktap/vdi_validate.c 4124b307nRyK3dhn1hAsvrY76NuV3g tools/check/Makefile 4124b307vHLUWbfpemVefmaWDcdfag tools/check/README 4124b307jt7T3CHysgl9LijNHSe1tA tools/check/check_brctl diff --cc linux-2.6.11-xen-sparse/arch/xen/Kconfig index 0000000000,27eac46739..2a8c5f200f mode 000000,100644..100644 --- a/linux-2.6.11-xen-sparse/arch/xen/Kconfig +++ b/linux-2.6.11-xen-sparse/arch/xen/Kconfig @@@ -1,0 -1,152 +1,174 @@@ + # + # For a description of the syntax of this configuration file, + # see Documentation/kbuild/kconfig-language.txt. + # + + mainmenu "Linux Kernel Configuration" + + config XEN + bool + default y + help + This is the Linux Xen port. + + config ARCH_XEN + bool + default y + + + config NO_IDLE_HZ + bool + default y + + + menu "XEN" + + config XEN_PRIVILEGED_GUEST + bool "Privileged Guest (domain 0)" + default n + select XEN_PHYSDEV_ACCESS + help + Support for privileged operation (domain 0) + + config XEN_PHYSDEV_ACCESS + bool "Physical device access" + default XEN_PRIVILEGED_GUEST + help + Assume access is available to physical hardware devices + (e.g., hard drives, network cards). This allows you to configure + such devices and also includes some low-level support that is + otherwise not compiled into the kernel. + + config XEN_BLKDEV_BACKEND + bool "Block-device backend driver" + depends on XEN_PHYSDEV_ACCESS + default y + help + The block-device backend driver allows the kernel to export its + block devices to other guests via a high-performance shared-memory + interface. + ++config XEN_BLKDEV_TAP_BE ++ bool "Block Tap support for backend driver (DANGEROUS)" ++ depends on XEN_BLKDEV_BACKEND ++ default n ++ help ++ If you intend to use the block tap driver, the backend domain will ++ not know the domain id of the real frontend, and so will not be able ++ to map its data pages. This modifies the backend to attempt to map ++ from both the tap domain and the real frontend. This presents a ++ security risk, and so should ONLY be used for development ++ with the blktap. This option will be removed as the block drivers are ++ modified to use grant tables. ++ + config XEN_NETDEV_BACKEND + bool "Network-device backend driver" + depends on XEN_PHYSDEV_ACCESS + default y + help + The network-device backend driver allows the kernel to export its + network devices to other guests via a high-performance shared-memory + interface. + + config XEN_BLKDEV_FRONTEND + bool "Block-device frontend driver" + default y + help + The block-device frontend driver allows the kernel to access block + devices mounted within another guest OS. Unless you are building a + dedicated device-driver domain, or your master control domain + (domain 0), then you almost certainly want to say Y here. + + config XEN_NETDEV_FRONTEND + bool "Network-device frontend driver" + default y + help + The network-device frontend driver allows the kernel to access + network interfaces within another guest OS. Unless you are building a + dedicated device-driver domain, or your master control domain + (domain 0), then you almost certainly want to say Y here. + + config XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER + bool "Pipelined transmitter (DANGEROUS)" + depends on XEN_NETDEV_FRONTEND + default n + help + The driver will assume that the backend is pipelining packets for + transmission: whenever packets are pending in the remote backend, + the driver will not send asynchronous notifications when it queues + additional packets for transmission. + If the backend is a dumb domain, such as a transparent Ethernet + bridge with no local IP interface, it is safe to say Y here to get + slightly lower network overhead. + If the backend has a local IP interface; or may be doing smart things + like reassembling packets to perform firewall filtering; or if you + are unsure; or if you experience network hangs when this option is + enabled; then you must say N here. + ++config XEN_BLKDEV_TAP ++ bool "Block device tap driver" ++ default n ++ help ++ This driver allows a VM to interact on block device channels ++ to other VMs. Block messages may be passed through or redirected ++ to a character device, allowing device prototyping in application ++ space. Odds are that you want to say N here. ++ + config XEN_WRITABLE_PAGETABLES + bool + default y + + config XEN_SCRUB_PAGES + bool "Scrub memory before freeing it to Xen" + default y + help + Erase memory contents before freeing it back to Xen's global + pool. This ensures that any secrets contained within that + memory (e.g., private keys) cannot be found by other guests that + may be running on the machine. Most people will want to say Y here. + If security is not a concern then you may increase performance by + saying N. + + choice + prompt "Processor Type" + default X86 + + config X86 + bool "X86" + help + Choose this option if your computer is a X86 architecture. + + config X86_64 + bool "X86_64" + help + Choose this option if your computer is a X86 architecture. + + endchoice + + endmenu + + config HAVE_ARCH_DEV_ALLOC_SKB + bool + default y + + source "init/Kconfig" + + if X86 + source "arch/xen/i386/Kconfig" + endif + + menu "Executable file formats" + + source "fs/Kconfig.binfmt" + + endmenu + + source "arch/xen/Kconfig.drivers" + + source "fs/Kconfig" + + source "security/Kconfig" + + source "crypto/Kconfig" + + source "lib/Kconfig" diff --cc linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig index 0000000000,5d2a503c0a..95dee5b159 mode 000000,100644..100644 --- a/linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig +++ b/linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig @@@ -1,0 -1,521 +1,522 @@@ + # + # Automatically generated make config: don't edit + # Linux kernel version: 2.6.11-xenU + # Fri Mar 11 01:20:28 2005 + # + CONFIG_XEN=y + CONFIG_ARCH_XEN=y + CONFIG_NO_IDLE_HZ=y + + # + # XEN + # + # CONFIG_XEN_PRIVILEGED_GUEST is not set + # CONFIG_XEN_PHYSDEV_ACCESS is not set + CONFIG_XEN_BLKDEV_FRONTEND=y + CONFIG_XEN_NETDEV_FRONTEND=y + # CONFIG_XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER is not set ++# CONFIG_XEN_BLKDEV_TAP is not set + CONFIG_XEN_WRITABLE_PAGETABLES=y + CONFIG_XEN_SCRUB_PAGES=y + CONFIG_X86=y + # CONFIG_X86_64 is not set + CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y + + # + # Code maturity level options + # + CONFIG_EXPERIMENTAL=y + CONFIG_CLEAN_COMPILE=y + CONFIG_BROKEN_ON_SMP=y + CONFIG_LOCK_KERNEL=y + + # + # General setup + # + CONFIG_LOCALVERSION="" + CONFIG_SWAP=y + CONFIG_SYSVIPC=y + # CONFIG_POSIX_MQUEUE is not set + # CONFIG_BSD_PROCESS_ACCT is not set + CONFIG_SYSCTL=y + # CONFIG_AUDIT is not set + CONFIG_LOG_BUF_SHIFT=14 + CONFIG_HOTPLUG=y + CONFIG_KOBJECT_UEVENT=y + # CONFIG_IKCONFIG is not set + # CONFIG_EMBEDDED is not set + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_EXTRA_PASS is not set + CONFIG_FUTEX=y + CONFIG_EPOLL=y + # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set + + # + # Loadable module support + # + CONFIG_MODULES=y + CONFIG_MODULE_UNLOAD=y + # CONFIG_MODULE_FORCE_UNLOAD is not set + CONFIG_OBSOLETE_MODPARM=y + # CONFIG_MODVERSIONS is not set + # CONFIG_MODULE_SRCVERSION_ALL is not set + CONFIG_KMOD=y + + # + # X86 Processor Configuration + # + CONFIG_XENARCH="i386" + CONFIG_MMU=y + CONFIG_UID16=y + CONFIG_GENERIC_ISA_DMA=y + CONFIG_GENERIC_IOMAP=y + # CONFIG_M386 is not set + # CONFIG_M486 is not set + # CONFIG_M586 is not set + # CONFIG_M586TSC is not set + # CONFIG_M586MMX is not set + # CONFIG_M686 is not set + # CONFIG_MPENTIUMII is not set + # CONFIG_MPENTIUMIII is not set + # CONFIG_MPENTIUMM is not set + CONFIG_MPENTIUM4=y + # CONFIG_MK6 is not set + # CONFIG_MK7 is not set + # CONFIG_MK8 is not set + # CONFIG_MCRUSOE is not set + # CONFIG_MEFFICEON is not set + # CONFIG_MWINCHIPC6 is not set + # CONFIG_MWINCHIP2 is not set + # CONFIG_MWINCHIP3D is not set + # CONFIG_MCYRIXIII is not set + # CONFIG_MVIAC3_2 is not set + # CONFIG_X86_GENERIC is not set + CONFIG_X86_CMPXCHG=y + CONFIG_X86_XADD=y + CONFIG_X86_L1_CACHE_SHIFT=7 + CONFIG_RWSEM_XCHGADD_ALGORITHM=y + CONFIG_GENERIC_CALIBRATE_DELAY=y + CONFIG_X86_WP_WORKS_OK=y + CONFIG_X86_INVLPG=y + CONFIG_X86_BSWAP=y + CONFIG_X86_POPAD_OK=y + CONFIG_X86_GOOD_APIC=y + CONFIG_X86_INTEL_USERCOPY=y + CONFIG_X86_USE_PPRO_CHECKSUM=y + # CONFIG_HPET_TIMER is not set + # CONFIG_HPET_EMULATE_RTC is not set + # CONFIG_SMP is not set + CONFIG_PREEMPT=y + CONFIG_PREEMPT_BKL=y + CONFIG_X86_CPUID=y + + # + # Firmware Drivers + # + # CONFIG_EDD is not set + CONFIG_NOHIGHMEM=y + # CONFIG_HIGHMEM4G is not set + CONFIG_HAVE_DEC_LOCK=y + # CONFIG_REGPARM is not set + + # + # Kernel hacking + # + # CONFIG_DEBUG_KERNEL is not set + CONFIG_EARLY_PRINTK=y + # CONFIG_DEBUG_SPINLOCK_SLEEP is not set + # CONFIG_FRAME_POINTER is not set + # CONFIG_4KSTACKS is not set + CONFIG_GENERIC_HARDIRQS=y + CONFIG_GENERIC_IRQ_PROBE=y + CONFIG_X86_BIOS_REBOOT=y + CONFIG_PC=y + + # + # Executable file formats + # + CONFIG_BINFMT_ELF=y + # CONFIG_BINFMT_AOUT is not set + # CONFIG_BINFMT_MISC is not set + + # + # Device Drivers + # + + # + # Generic Driver Options + # + CONFIG_STANDALONE=y + CONFIG_PREVENT_FIRMWARE_BUILD=y + # CONFIG_FW_LOADER is not set + + # + # Block devices + # + # CONFIG_BLK_DEV_FD is not set + # CONFIG_BLK_DEV_COW_COMMON is not set + CONFIG_BLK_DEV_LOOP=m + # CONFIG_BLK_DEV_CRYPTOLOOP is not set + CONFIG_BLK_DEV_NBD=m + CONFIG_BLK_DEV_RAM=y + CONFIG_BLK_DEV_RAM_COUNT=16 + CONFIG_BLK_DEV_RAM_SIZE=4096 + CONFIG_BLK_DEV_INITRD=y + CONFIG_INITRAMFS_SOURCE="" + # CONFIG_LBD is not set + # CONFIG_CDROM_PKTCDVD is not set + + # + # IO Schedulers + # + CONFIG_IOSCHED_NOOP=y + CONFIG_IOSCHED_AS=y + CONFIG_IOSCHED_DEADLINE=y + CONFIG_IOSCHED_CFQ=y + # CONFIG_ATA_OVER_ETH is not set + + # + # SCSI device support + # + CONFIG_SCSI=m + CONFIG_SCSI_PROC_FS=y + + # + # SCSI support type (disk, tape, CD-ROM) + # + CONFIG_BLK_DEV_SD=m + # CONFIG_CHR_DEV_ST is not set + # CONFIG_CHR_DEV_OSST is not set + # CONFIG_BLK_DEV_SR is not set + # CONFIG_CHR_DEV_SG is not set + + # + # Some SCSI devices (e.g. CD jukebox) support multiple LUNs + # + # CONFIG_SCSI_MULTI_LUN is not set + # CONFIG_SCSI_CONSTANTS is not set + # CONFIG_SCSI_LOGGING is not set + + # + # SCSI Transport Attributes + # + # CONFIG_SCSI_SPI_ATTRS is not set + # CONFIG_SCSI_FC_ATTRS is not set + # CONFIG_SCSI_ISCSI_ATTRS is not set + + # + # SCSI low-level drivers + # + # CONFIG_SCSI_SATA is not set + # CONFIG_SCSI_DEBUG is not set + + # + # Multi-device support (RAID and LVM) + # + # CONFIG_MD is not set + + # + # Networking support + # + CONFIG_NET=y + + # + # Networking options + # + CONFIG_PACKET=y + # CONFIG_PACKET_MMAP is not set + # CONFIG_NETLINK_DEV is not set + CONFIG_UNIX=y + # CONFIG_NET_KEY is not set + CONFIG_INET=y + # CONFIG_IP_MULTICAST is not set + # CONFIG_IP_ADVANCED_ROUTER is not set + CONFIG_IP_PNP=y + # CONFIG_IP_PNP_DHCP is not set + # CONFIG_IP_PNP_BOOTP is not set + # CONFIG_IP_PNP_RARP is not set + # CONFIG_NET_IPIP is not set + # CONFIG_NET_IPGRE is not set + # CONFIG_ARPD is not set + # CONFIG_SYN_COOKIES is not set + # CONFIG_INET_AH is not set + # CONFIG_INET_ESP is not set + # CONFIG_INET_IPCOMP is not set + # CONFIG_INET_TUNNEL is not set + CONFIG_IP_TCPDIAG=y + # CONFIG_IP_TCPDIAG_IPV6 is not set + # CONFIG_IPV6 is not set + # CONFIG_NETFILTER is not set + + # + # SCTP Configuration (EXPERIMENTAL) + # + # CONFIG_IP_SCTP is not set + # CONFIG_ATM is not set + # CONFIG_BRIDGE is not set + # CONFIG_VLAN_8021Q is not set + # CONFIG_DECNET is not set + # CONFIG_LLC2 is not set + # CONFIG_IPX is not set + # CONFIG_ATALK is not set + # CONFIG_X25 is not set + # CONFIG_LAPB is not set + # CONFIG_NET_DIVERT is not set + # CONFIG_ECONET is not set + # CONFIG_WAN_ROUTER is not set + + # + # QoS and/or fair queueing + # + # CONFIG_NET_SCHED is not set + # CONFIG_NET_CLS_ROUTE is not set + + # + # Network testing + # + # CONFIG_NET_PKTGEN is not set + # CONFIG_NETPOLL is not set + # CONFIG_NET_POLL_CONTROLLER is not set + # CONFIG_HAMRADIO is not set + # CONFIG_IRDA is not set + # CONFIG_BT is not set + CONFIG_NETDEVICES=y + # CONFIG_DUMMY is not set + # CONFIG_BONDING is not set + # CONFIG_EQUALIZER is not set + # CONFIG_TUN is not set + + # + # Ethernet (10 or 100Mbit) + # + # CONFIG_NET_ETHERNET is not set + + # + # Ethernet (1000 Mbit) + # + + # + # Ethernet (10000 Mbit) + # + + # + # Token Ring devices + # + + # + # Wireless LAN (non-hamradio) + # + # CONFIG_NET_RADIO is not set + + # + # Wan interfaces + # + # CONFIG_WAN is not set + # CONFIG_PPP is not set + # CONFIG_SLIP is not set + # CONFIG_SHAPER is not set + # CONFIG_NETCONSOLE is not set + CONFIG_UNIX98_PTYS=y + + # + # File systems + # + CONFIG_EXT2_FS=y + # CONFIG_EXT2_FS_XATTR is not set + CONFIG_EXT3_FS=y + CONFIG_EXT3_FS_XATTR=y + # CONFIG_EXT3_FS_POSIX_ACL is not set + # CONFIG_EXT3_FS_SECURITY is not set + CONFIG_JBD=y + # CONFIG_JBD_DEBUG is not set + CONFIG_FS_MBCACHE=y + CONFIG_REISERFS_FS=y + # CONFIG_REISERFS_CHECK is not set + # CONFIG_REISERFS_PROC_INFO is not set + # CONFIG_REISERFS_FS_XATTR is not set + # CONFIG_JFS_FS is not set + + # + # XFS support + # + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set + # CONFIG_ROMFS_FS is not set + # CONFIG_QUOTA is not set + CONFIG_DNOTIFY=y + CONFIG_AUTOFS_FS=y + CONFIG_AUTOFS4_FS=y + + # + # CD-ROM/DVD Filesystems + # + CONFIG_ISO9660_FS=y + CONFIG_JOLIET=y + CONFIG_ZISOFS=y + CONFIG_ZISOFS_FS=y + # CONFIG_UDF_FS is not set + + # + # DOS/FAT/NT Filesystems + # + CONFIG_FAT_FS=m + CONFIG_MSDOS_FS=m + CONFIG_VFAT_FS=m + CONFIG_FAT_DEFAULT_CODEPAGE=437 + CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" + # CONFIG_NTFS_FS is not set + + # + # Pseudo filesystems + # + CONFIG_PROC_FS=y + CONFIG_PROC_KCORE=y + CONFIG_SYSFS=y + # CONFIG_DEVFS_FS is not set + CONFIG_DEVPTS_FS_XATTR=y + # CONFIG_DEVPTS_FS_SECURITY is not set + CONFIG_TMPFS=y + # CONFIG_TMPFS_XATTR is not set + # CONFIG_HUGETLBFS is not set + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y + + # + # Miscellaneous filesystems + # + # CONFIG_ADFS_FS is not set + # CONFIG_AFFS_FS is not set + # CONFIG_HFS_FS is not set + # CONFIG_HFSPLUS_FS is not set + # CONFIG_BEFS_FS is not set + # CONFIG_BFS_FS is not set + # CONFIG_EFS_FS is not set + # CONFIG_CRAMFS is not set + # CONFIG_VXFS_FS is not set + # CONFIG_HPFS_FS is not set + # CONFIG_QNX4FS_FS is not set + # CONFIG_SYSV_FS is not set + # CONFIG_UFS_FS is not set + + # + # Network File Systems + # + CONFIG_NFS_FS=y + CONFIG_NFS_V3=y + # CONFIG_NFS_V4 is not set + # CONFIG_NFS_DIRECTIO is not set + # CONFIG_NFSD is not set + CONFIG_ROOT_NFS=y + CONFIG_LOCKD=y + CONFIG_LOCKD_V4=y + CONFIG_SUNRPC=y + # CONFIG_RPCSEC_GSS_KRB5 is not set + # CONFIG_RPCSEC_GSS_SPKM3 is not set + # CONFIG_SMB_FS is not set + # CONFIG_CIFS is not set + # CONFIG_NCP_FS is not set + # CONFIG_CODA_FS is not set + # CONFIG_AFS_FS is not set + + # + # Partition Types + # + # CONFIG_PARTITION_ADVANCED is not set + CONFIG_MSDOS_PARTITION=y + + # + # Native Language Support + # + CONFIG_NLS=y + CONFIG_NLS_DEFAULT="iso8859-1" + CONFIG_NLS_CODEPAGE_437=y + # CONFIG_NLS_CODEPAGE_737 is not set + # CONFIG_NLS_CODEPAGE_775 is not set + # CONFIG_NLS_CODEPAGE_850 is not set + # CONFIG_NLS_CODEPAGE_852 is not set + # CONFIG_NLS_CODEPAGE_855 is not set + # CONFIG_NLS_CODEPAGE_857 is not set + # CONFIG_NLS_CODEPAGE_860 is not set + # CONFIG_NLS_CODEPAGE_861 is not set + # CONFIG_NLS_CODEPAGE_862 is not set + # CONFIG_NLS_CODEPAGE_863 is not set + # CONFIG_NLS_CODEPAGE_864 is not set + # CONFIG_NLS_CODEPAGE_865 is not set + # CONFIG_NLS_CODEPAGE_866 is not set + # CONFIG_NLS_CODEPAGE_869 is not set + # CONFIG_NLS_CODEPAGE_936 is not set + # CONFIG_NLS_CODEPAGE_950 is not set + # CONFIG_NLS_CODEPAGE_932 is not set + # CONFIG_NLS_CODEPAGE_949 is not set + # CONFIG_NLS_CODEPAGE_874 is not set + # CONFIG_NLS_ISO8859_8 is not set + # CONFIG_NLS_CODEPAGE_1250 is not set + # CONFIG_NLS_CODEPAGE_1251 is not set + # CONFIG_NLS_ASCII is not set + CONFIG_NLS_ISO8859_1=y + # CONFIG_NLS_ISO8859_2 is not set + # CONFIG_NLS_ISO8859_3 is not set + # CONFIG_NLS_ISO8859_4 is not set + # CONFIG_NLS_ISO8859_5 is not set + # CONFIG_NLS_ISO8859_6 is not set + # CONFIG_NLS_ISO8859_7 is not set + # CONFIG_NLS_ISO8859_9 is not set + # CONFIG_NLS_ISO8859_13 is not set + # CONFIG_NLS_ISO8859_14 is not set + # CONFIG_NLS_ISO8859_15 is not set + # CONFIG_NLS_KOI8_R is not set + # CONFIG_NLS_KOI8_U is not set + # CONFIG_NLS_UTF8 is not set + + # + # Security options + # + # CONFIG_KEYS is not set + # CONFIG_SECURITY is not set + + # + # Cryptographic options + # + CONFIG_CRYPTO=y + # CONFIG_CRYPTO_HMAC is not set + # CONFIG_CRYPTO_NULL is not set + # CONFIG_CRYPTO_MD4 is not set + CONFIG_CRYPTO_MD5=m + # CONFIG_CRYPTO_SHA1 is not set + # CONFIG_CRYPTO_SHA256 is not set + # CONFIG_CRYPTO_SHA512 is not set + # CONFIG_CRYPTO_WP512 is not set + # CONFIG_CRYPTO_DES is not set + # CONFIG_CRYPTO_BLOWFISH is not set + # CONFIG_CRYPTO_TWOFISH is not set + # CONFIG_CRYPTO_SERPENT is not set + # CONFIG_CRYPTO_AES_586 is not set + # CONFIG_CRYPTO_CAST5 is not set + # CONFIG_CRYPTO_CAST6 is not set + # CONFIG_CRYPTO_TEA is not set + # CONFIG_CRYPTO_ARC4 is not set + # CONFIG_CRYPTO_KHAZAD is not set + # CONFIG_CRYPTO_ANUBIS is not set + # CONFIG_CRYPTO_DEFLATE is not set + # CONFIG_CRYPTO_MICHAEL_MIC is not set + CONFIG_CRYPTO_CRC32C=m + # CONFIG_CRYPTO_TEST is not set + + # + # Hardware crypto devices + # + # CONFIG_CRYPTO_DEV_PADLOCK is not set + + # + # Library routines + # + # CONFIG_CRC_CCITT is not set + # CONFIG_CRC32 is not set + CONFIG_LIBCRC32C=m + CONFIG_ZLIB_INFLATE=y diff --cc linux-2.6.11-xen-sparse/arch/xen/i386/Kconfig index 0000000000,f6dd7b5203..ccdccd0d24 mode 000000,100644..100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/Kconfig +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/Kconfig @@@ -1,0 -1,974 +1,971 @@@ + # + # For a description of the syntax of this configuration file, + # see Documentation/kbuild/kconfig-language.txt. + # + + menu "X86 Processor Configuration" + + config XENARCH + string + default i386 + + config MMU + bool + default y + + config SBUS + bool + + config UID16 + bool + default y + + config GENERIC_ISA_DMA + bool + default y + + config GENERIC_IOMAP + bool + default y + + choice + prompt "Processor family" + default M686 + + config M386 + bool "386" + ---help--- + This is the processor type of your CPU. This information is used for + optimizing purposes. In order to compile a kernel that can run on + all x86 CPU types (albeit not optimally fast), you can specify + "386" here. + + The kernel will not necessarily run on earlier architectures than + the one you have chosen, e.g. a Pentium optimized kernel will run on + a PPro, but not necessarily on a i486. + + Here are the settings recommended for greatest speed: + - "386" for the AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix/TI + 486DLC/DLC2, UMC 486SX-S and NexGen Nx586. Only "386" kernels + will run on a 386 class machine. + - "486" for the AMD/Cyrix/IBM/Intel 486DX/DX2/DX4 or + SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S. + - "586" for generic Pentium CPUs lacking the TSC + (time stamp counter) register. + - "Pentium-Classic" for the Intel Pentium. + - "Pentium-MMX" for the Intel Pentium MMX. + - "Pentium-Pro" for the Intel Pentium Pro. + - "Pentium-II" for the Intel Pentium II or pre-Coppermine Celeron. + - "Pentium-III" for the Intel Pentium III or Coppermine Celeron. + - "Pentium-4" for the Intel Pentium 4 or P4-based Celeron. + - "K6" for the AMD K6, K6-II and K6-III (aka K6-3D). + - "Athlon" for the AMD K7 family (Athlon/Duron/Thunderbird). + - "Crusoe" for the Transmeta Crusoe series. + - "Efficeon" for the Transmeta Efficeon series. + - "Winchip-C6" for original IDT Winchip. + - "Winchip-2" for IDT Winchip 2. + - "Winchip-2A" for IDT Winchips with 3dNow! capabilities. + - "CyrixIII/VIA C3" for VIA Cyrix III or VIA C3. + - "VIA C3-2 for VIA C3-2 "Nehemiah" (model 9 and above). + + If you don't know what to do, choose "386". + + config M486 + bool "486" + help + Select this for a 486 series processor, either Intel or one of the + compatible processors from AMD, Cyrix, IBM, or Intel. Includes DX, + DX2, and DX4 variants; also SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or + U5S. + + config M586 + bool "586/K5/5x86/6x86/6x86MX" + help + Select this for an 586 or 686 series processor such as the AMD K5, + the Cyrix 5x86, 6x86 and 6x86MX. This choice does not + assume the RDTSC (Read Time Stamp Counter) instruction. + + config M586TSC + bool "Pentium-Classic" + help + Select this for a Pentium Classic processor with the RDTSC (Read + Time Stamp Counter) instruction for benchmarking. + + config M586MMX + bool "Pentium-MMX" + help + Select this for a Pentium with the MMX graphics/multimedia + extended instructions. + + config M686 + bool "Pentium-Pro" + help + Select this for Intel Pentium Pro chips. This enables the use of + Pentium Pro extended instructions, and disables the init-time guard + against the f00f bug found in earlier Pentiums. + + config MPENTIUMII + bool "Pentium-II/Celeron(pre-Coppermine)" + help + Select this for Intel chips based on the Pentium-II and + pre-Coppermine Celeron core. This option enables an unaligned + copy optimization, compiles the kernel with optimization flags + tailored for the chip, and applies any applicable Pentium Pro + optimizations. + + config MPENTIUMIII + bool "Pentium-III/Celeron(Coppermine)/Pentium-III Xeon" + help + Select this for Intel chips based on the Pentium-III and + Celeron-Coppermine core. This option enables use of some + extended prefetch instructions in addition to the Pentium II + extensions. + + config MPENTIUMM + bool "Pentium M" + help + Select this for Intel Pentium M (not Pentium-4 M) + notebook chips. + + config MPENTIUM4 + bool "Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon" + help + Select this for Intel Pentium 4 chips. This includes the + Pentium 4, P4-based Celeron and Xeon, and Pentium-4 M + (not Pentium M) chips. This option enables compile flags + optimized for the chip, uses the correct cache shift, and + applies any applicable Pentium III optimizations. + + config MK6 + bool "K6/K6-II/K6-III" + help + Select this for an AMD K6-family processor. Enables use of + some extended instructions, and passes appropriate optimization + flags to GCC. + + config MK7 + bool "Athlon/Duron/K7" + help + Select this for an AMD Athlon K7-family processor. Enables use of + some extended instructions, and passes appropriate optimization + flags to GCC. + + config MK8 + bool "Opteron/Athlon64/Hammer/K8" + help + Select this for an AMD Opteron or Athlon64 Hammer-family processor. Enables + use of some extended instructions, and passes appropriate optimization + flags to GCC. + + config MCRUSOE + bool "Crusoe" + help + Select this for a Transmeta Crusoe processor. Treats the processor + like a 586 with TSC, and sets some GCC optimization flags (like a + Pentium Pro with no alignment requirements). + + config MEFFICEON + bool "Efficeon" + help + Select this for a Transmeta Efficeon processor. + + config MWINCHIPC6 + bool "Winchip-C6" + help + Select this for an IDT Winchip C6 chip. Linux and GCC + treat this chip as a 586TSC with some extended instructions + and alignment requirements. + + config MWINCHIP2 + bool "Winchip-2" + help + Select this for an IDT Winchip-2. Linux and GCC + treat this chip as a 586TSC with some extended instructions + and alignment requirements. + + config MWINCHIP3D + bool "Winchip-2A/Winchip-3" + help + Select this for an IDT Winchip-2A or 3. Linux and GCC + treat this chip as a 586TSC with some extended instructions + and alignment reqirements. Also enable out of order memory + stores for this CPU, which can increase performance of some + operations. + + config MCYRIXIII + bool "CyrixIII/VIA-C3" + help + Select this for a Cyrix III or C3 chip. Presently Linux and GCC + treat this chip as a generic 586. Whilst the CPU is 686 class, + it lacks the cmov extension which gcc assumes is present when + generating 686 code. + Note that Nehemiah (Model 9) and above will not boot with this + kernel due to them lacking the 3DNow! instructions used in earlier + incarnations of the CPU. + + config MVIAC3_2 + bool "VIA C3-2 (Nehemiah)" + help + Select this for a VIA C3 "Nehemiah". Selecting this enables usage + of SSE and tells gcc to treat the CPU as a 686. + Note, this kernel will not boot on older (pre model 9) C3s. + + endchoice + + config X86_GENERIC + bool "Generic x86 support" + help + Instead of just including optimizations for the selected + x86 variant (e.g. PII, Crusoe or Athlon), include some more + generic optimizations as well. This will make the kernel + perform better on x86 CPUs other than that selected. + + This is really intended for distributors who need more + generic optimizations. + + # + # Define implied options from the CPU selection here + # + config X86_CMPXCHG + bool + depends on !M386 + default y + + config X86_XADD + bool + depends on !M386 + default y + + config X86_L1_CACHE_SHIFT + int + default "7" if MPENTIUM4 || X86_GENERIC + default "4" if X86_ELAN || M486 || M386 + default "5" if MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 + default "6" if MK7 || MK8 || MPENTIUMM + + config RWSEM_GENERIC_SPINLOCK + bool + depends on M386 + default y + + config RWSEM_XCHGADD_ALGORITHM + bool + depends on !M386 + default y + + config GENERIC_CALIBRATE_DELAY + bool + default y + + config X86_PPRO_FENCE + bool + depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 + default y + + config X86_F00F_BUG + bool + depends on M586MMX || M586TSC || M586 || M486 || M386 + default y + + config X86_WP_WORKS_OK + bool + depends on !M386 + default y + + config X86_INVLPG + bool + depends on !M386 + default y + + config X86_BSWAP + bool + depends on !M386 + default y + + config X86_POPAD_OK + bool + depends on !M386 + default y + + config X86_ALIGNMENT_16 + bool + depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || X86_ELAN || MK6 || M586MMX || M586TSC || M586 || M486 || MVIAC3_2 + default y + + config X86_GOOD_APIC + bool + depends on MK7 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || MK8 || MEFFICEON + default y + + config X86_INTEL_USERCOPY + bool + depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7 || MEFFICEON + default y + + config X86_USE_PPRO_CHECKSUM + bool + depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 || MEFFICEON + default y + + config X86_USE_3DNOW + bool + depends on MCYRIXIII || MK7 + default y + + config X86_OOSTORE + bool + depends on (MWINCHIP3D || MWINCHIP2 || MWINCHIPC6) && MTRR + default y + + config HPET_TIMER + bool + default n + #config HPET_TIMER + # bool "HPET Timer Support" + # help + # This enables the use of the HPET for the kernel's internal timer. + # HPET is the next generation timer replacing legacy 8254s. + # You can safely choose Y here. However, HPET will only be + # activated if the platform and the BIOS support this feature. + # Otherwise the 8254 will be used for timing services. + # + # Choose N to continue using the legacy 8254 timer. + + config HPET_EMULATE_RTC + def_bool HPET_TIMER && RTC=y + + config SMP - bool - default n -#config SMP -# bool "Symmetric multi-processing support" -# ---help--- -# This enables support for systems with more than one CPU. If you have -# a system with only one CPU, like most personal computers, say N. If -# you have a system with more than one CPU, say Y. -# -# If you say N here, the kernel will run on single and multiprocessor -# machines, but will use only one CPU of a multiprocessor machine. If -# you say Y here, the kernel will run on many, but not all, -# singleprocessor machines. On a singleprocessor machine, the kernel -# will run faster if you say N here. -# -# Note that if you say Y here and choose architecture "586" or -# "Pentium" under "Processor family", the kernel will not work on 486 -# architectures. Similarly, multiprocessor kernels for the "PPro" -# architecture may not work on all Pentium based boards. -# -# People using multiprocessor machines who say Y here should also say -# Y to "Enhanced Real Time Clock Support", below. The "Advanced Power -# Management" code will be disabled if you say Y here. -# -# See also the , -# , -# and the SMP-HOWTO available at -# . -# -# If you don't know what to do here, say N. ++ bool "Symmetric multi-processing support" ++ ---help--- ++ This enables support for systems with more than one CPU. If you have ++ a system with only one CPU, like most personal computers, say N. If ++ you have a system with more than one CPU, say Y. ++ ++ If you say N here, the kernel will run on single and multiprocessor ++ machines, but will use only one CPU of a multiprocessor machine. If ++ you say Y here, the kernel will run on many, but not all, ++ singleprocessor machines. On a singleprocessor machine, the kernel ++ will run faster if you say N here. ++ ++ Note that if you say Y here and choose architecture "586" or ++ "Pentium" under "Processor family", the kernel will not work on 486 ++ architectures. Similarly, multiprocessor kernels for the "PPro" ++ architecture may not work on all Pentium based boards. ++ ++ People using multiprocessor machines who say Y here should also say ++ Y to "Enhanced Real Time Clock Support", below. The "Advanced Power ++ Management" code will be disabled if you say Y here. ++ ++ See also the , ++ , ++ and the SMP-HOWTO available at ++ . ++ ++ If you don't know what to do here, say N. + + config NR_CPUS + int "Maximum number of CPUs (2-255)" + range 2 255 + depends on SMP + default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 + default "8" + help + This allows you to specify the maximum number of CPUs which this + kernel will support. The maximum supported value is 255 and the + minimum value which makes sense is 2. + + This is purely to save memory - each supported CPU adds + approximately eight kilobytes to the kernel image. + + config SCHED_SMT + bool "SMT (Hyperthreading) scheduler support" + depends on SMP + default off + help + SMT scheduler support improves the CPU scheduler's decision making + when dealing with Intel Pentium 4 chips with HyperThreading at a + cost of slightly increased overhead in some places. If unsure say + N here. + + config PREEMPT + bool "Preemptible Kernel" + help + This option reduces the latency of the kernel when reacting to + real-time or interactive events by allowing a low priority process to + be preempted even if it is in kernel mode executing a system call. + This allows applications to run more reliably even when the system is + under load. + + Say Y here if you are building a kernel for a desktop, embedded + or real-time system. Say N if you are unsure. + + config PREEMPT_BKL + bool "Preempt The Big Kernel Lock" + depends on PREEMPT + default y + help + This option reduces the latency of the kernel by making the + big kernel lock preemptible. + + Say Y here if you are building a kernel for a desktop system. + Say N if you are unsure. + + #config X86_TSC + # bool + # depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2) && !X86_NUMAQ + # default y + + #config X86_MCE + # bool "Machine Check Exception" + # depends on !X86_VOYAGER + # ---help--- + # Machine Check Exception support allows the processor to notify the + # kernel if it detects a problem (e.g. overheating, component failure). + # The action the kernel takes depends on the severity of the problem, + # ranging from a warning message on the console, to halting the machine. + # Your processor must be a Pentium or newer to support this - check the + # flags in /proc/cpuinfo for mce. Note that some older Pentium systems + # have a design flaw which leads to false MCE events - hence MCE is + # disabled on all P5 processors, unless explicitly enabled with "mce" + # as a boot argument. Similarly, if MCE is built in and creates a + # problem on some new non-standard machine, you can boot with "nomce" + # to disable it. MCE support simply ignores non-MCE processors like + # the 386 and 486, so nearly everyone can say Y here. + + #config X86_MCE_NONFATAL + # tristate "Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4" + # depends on X86_MCE + # help + # Enabling this feature starts a timer that triggers every 5 seconds which + # will look at the machine check registers to see if anything happened. + # Non-fatal problems automatically get corrected (but still logged). + # Disable this if you don't want to see these messages. + # Seeing the messages this option prints out may be indicative of dying hardware, + # or out-of-spec (ie, overclocked) hardware. + # This option only does something on certain CPUs. + # (AMD Athlon/Duron and Intel Pentium 4) + + #config X86_MCE_P4THERMAL + # bool "check for P4 thermal throttling interrupt." + # depends on X86_MCE && (X86_UP_APIC || SMP) + # help + # Enabling this feature will cause a message to be printed when the P4 + # enters thermal throttling. + + config MICROCODE + tristate "/dev/cpu/microcode - Intel IA32 CPU microcode support" + depends on XEN_PRIVILEGED_GUEST + ---help--- + If you say Y here and also to "/dev file system support" in the + 'File systems' section, you will be able to update the microcode on + Intel processors in the IA32 family, e.g. Pentium Pro, Pentium II, + Pentium III, Pentium 4, Xeon etc. You will obviously need the + actual microcode binary data itself which is not shipped with the + Linux kernel. + + For latest news and information on obtaining all the required + ingredients for this driver, check: + . + + To compile this driver as a module, choose M here: the + module will be called microcode. + + #config X86_MSR + # tristate "/dev/cpu/*/msr - Model-specific register support" + # help + # This device gives privileged processes access to the x86 + # Model-Specific Registers (MSRs). It is a character device with + # major 202 and minors 0 to 31 for /dev/cpu/0/msr to /dev/cpu/31/msr. + # MSR accesses are directed to a specific CPU on multi-processor + # systems. + + config X86_CPUID + tristate "/dev/cpu/*/cpuid - CPU information support" + help + This device gives processes access to the x86 CPUID instruction to + be executed on a specific processor. It is a character device + with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to + /dev/cpu/31/cpuid. + + source "drivers/firmware/Kconfig" + + choice + prompt "High Memory Support" + default NOHIGHMEM + + config NOHIGHMEM + bool "off" + ---help--- + Linux can use up to 64 Gigabytes of physical memory on x86 systems. + However, the address space of 32-bit x86 processors is only 4 + Gigabytes large. That means that, if you have a large amount of + physical memory, not all of it can be "permanently mapped" by the + kernel. The physical memory that's not permanently mapped is called + "high memory". + + If you are compiling a kernel which will never run on a machine with + more than 1 Gigabyte total physical RAM, answer "off" here (default + choice and suitable for most users). This will result in a "3GB/1GB" + split: 3GB are mapped so that each process sees a 3GB virtual memory + space and the remaining part of the 4GB virtual memory space is used + by the kernel to permanently map as much physical memory as + possible. + + If the machine has between 1 and 4 Gigabytes physical RAM, then + answer "4GB" here. + + If more than 4 Gigabytes is used then answer "64GB" here. This + selection turns Intel PAE (Physical Address Extension) mode on. + PAE implements 3-level paging on IA32 processors. PAE is fully + supported by Linux, PAE mode is implemented on all recent Intel + processors (Pentium Pro and better). NOTE: If you say "64GB" here, + then the kernel will not boot on CPUs that don't support PAE! + + The actual amount of total physical memory will either be + auto detected or can be forced by using a kernel command line option + such as "mem=256M". (Try "man bootparam" or see the documentation of + your boot loader (lilo or loadlin) about how to pass options to the + kernel at boot time.) + + If unsure, say "off". + + config HIGHMEM4G + bool "4GB" + help + Select this if you have a 32-bit processor and between 1 and 4 + gigabytes of physical RAM. + + #config HIGHMEM64G + # bool "64GB" + # help + # Select this if you have a 32-bit processor and more than 4 + # gigabytes of physical RAM. + + endchoice + + config HIGHMEM + bool + depends on HIGHMEM64G || HIGHMEM4G + default y + + config X86_PAE + bool + depends on HIGHMEM64G + default y + + # Common NUMA Features + config NUMA + bool "Numa Memory Allocation and Scheduler Support" + depends on SMP && HIGHMEM64G && (X86_NUMAQ || X86_GENERICARCH || (X86_SUMMIT && ACPI)) + default n if X86_PC + default y if (X86_NUMAQ || X86_SUMMIT) + + # Need comments to help the hapless user trying to turn on NUMA support + comment "NUMA (NUMA-Q) requires SMP, 64GB highmem support" + depends on X86_NUMAQ && (!HIGHMEM64G || !SMP) + + comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI" + depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI) + + config DISCONTIGMEM + bool + depends on NUMA + default y + + config HAVE_ARCH_BOOTMEM_NODE + bool + depends on NUMA + default y + + #config HIGHPTE + # bool "Allocate 3rd-level pagetables from highmem" + # depends on HIGHMEM4G || HIGHMEM64G + # help + # The VM uses one page table entry for each page of physical memory. + # For systems with a lot of RAM, this can be wasteful of precious + # low memory. Setting this option will put user-space page table + # entries in high memory. + + config MTRR + bool + depends on XEN_PRIVILEGED_GUEST + default y + + #config MTRR + # bool "MTRR (Memory Type Range Register) support" + # ---help--- + # On Intel P6 family processors (Pentium Pro, Pentium II and later) + # the Memory Type Range Registers (MTRRs) may be used to control + # processor access to memory ranges. This is most useful if you have + # a video (VGA) card on a PCI or AGP bus. Enabling write-combining + # allows bus write transfers to be combined into a larger transfer + # before bursting over the PCI/AGP bus. This can increase performance + # of image write operations 2.5 times or more. Saying Y here creates a + # /proc/mtrr file which may be used to manipulate your processor's + # MTRRs. Typically the X server should use this. + # + # This code has a reasonably generic interface so that similar + # control registers on other processors can be easily supported + # as well: + # + # The Cyrix 6x86, 6x86MX and M II processors have Address Range + # Registers (ARRs) which provide a similar functionality to MTRRs. For + # these, the ARRs are used to emulate the MTRRs. + # The AMD K6-2 (stepping 8 and above) and K6-3 processors have two + # MTRRs. The Centaur C6 (WinChip) has 8 MCRs, allowing + # write-combining. All of these processors are supported by this code + # and it makes sense to say Y here if you have one of them. + # + # Saying Y here also fixes a problem with buggy SMP BIOSes which only + # set the MTRRs for the boot CPU and not for the secondary CPUs. This + # can lead to all sorts of problems, so it's good to say Y here. + # + # You can safely say Y even if your machine doesn't have MTRRs, you'll + # just add about 9 KB to your kernel. + # + # See for more information. + + config IRQBALANCE + bool "Enable kernel irq balancing" + depends on SMP && X86_IO_APIC + default y + help + The default yes will allow the kernel to do irq load balancing. + Saying no will keep the kernel from doing irq load balancing. + + config HAVE_DEC_LOCK + bool + depends on (SMP || PREEMPT) && X86_CMPXCHG + default y + + # turning this on wastes a bunch of space. + # Summit needs it only when NUMA is on + config BOOT_IOREMAP + bool + depends on (((X86_SUMMIT || X86_GENERICARCH) && NUMA) || (X86 && EFI)) + default y + + config REGPARM + bool "Use register arguments (EXPERIMENTAL)" + depends on EXPERIMENTAL + default n + help + Compile the kernel with -mregparm=3. This uses a different ABI + and passes the first three arguments of a function call in registers. + This will probably break binary only modules. + + This feature is only enabled for gcc-3.0 and later - earlier compilers + generate incorrect output with certain kernel constructs when + -mregparm=3 is used. + + ++config X86_LOCAL_APIC ++ bool ++ depends on (X86_VISWS || SMP) && !X86_VOYAGER ++ default n ++ + if XEN_PHYSDEV_ACCESS + + menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)" + + config X86_VISWS_APIC + bool + depends on X86_VISWS + default y + -config X86_LOCAL_APIC - bool - depends on (X86_VISWS || SMP) && !X86_VOYAGER - default y - -config X86_IO_APIC - bool - depends on SMP && !(X86_VISWS || X86_VOYAGER) - default y ++#config X86_IO_APIC ++# bool ++# depends on SMP && !(X86_VISWS || X86_VOYAGER) ++# default y + + config PCI + bool "PCI support" if !X86_VISWS + depends on !X86_VOYAGER + default y if X86_VISWS + help + Find out whether you have a PCI motherboard. PCI is the name of a + bus system, i.e. the way the CPU talks to the other stuff inside + your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or + VESA. If you have PCI, say Y, otherwise N. + + The PCI-HOWTO, available from + , contains valuable + information about which PCI hardware does work under Linux and which + doesn't. + + #choice + # prompt "PCI access mode" + # depends on PCI && !X86_VISWS + # default PCI_GOANY + # ---help--- + # On PCI systems, the BIOS can be used to detect the PCI devices and + # determine their configuration. However, some old PCI motherboards + # have BIOS bugs and may crash if this is done. Also, some embedded + # PCI-based systems don't have any BIOS at all. Linux can also try to + # detect the PCI hardware directly without using the BIOS. + # + # With this option, you can specify how Linux should detect the + # PCI devices. If you choose "BIOS", the BIOS will be used, + # if you choose "Direct", the BIOS won't be used, and if you + # choose "MMConfig", then PCI Express MMCONFIG will be used. + # If you choose "Any", the kernel will try MMCONFIG, then the + # direct access method and falls back to the BIOS if that doesn't + # work. If unsure, go with the default, which is "Any". + # + #config PCI_GOBIOS + # bool "BIOS" + # + #config PCI_GOMMCONFIG + # bool "MMConfig" + # + #config PCI_GODIRECT + # bool "Direct" + # + #config PCI_GOANY + # bool "Any" + # + #endchoice + # + #config PCI_BIOS + # bool + # depends on !X86_VISWS && PCI && (PCI_GOBIOS || PCI_GOANY) + # default y + # + #config PCI_DIRECT + # bool + # depends on PCI && ((PCI_GODIRECT || PCI_GOANY) || X86_VISWS) + # default y + + config PCI_DIRECT + bool + depends on PCI + default y + + source "drivers/pci/pcie/Kconfig" + + source "drivers/pci/Kconfig" + + config ISA + bool "ISA support" + depends on !(X86_VOYAGER || X86_VISWS) + help + Find out whether you have ISA slots on your motherboard. ISA is the + name of a bus system, i.e. the way the CPU talks to the other stuff + inside your box. Other bus systems are PCI, EISA, MicroChannel + (MCA) or VESA. ISA is an older system, now being displaced by PCI; + newer boards don't support it. If you have ISA, say Y, otherwise N. + + config EISA + bool "EISA support" + depends on ISA + ---help--- + The Extended Industry Standard Architecture (EISA) bus was + developed as an open alternative to the IBM MicroChannel bus. + + The EISA bus provided some of the features of the IBM MicroChannel + bus while maintaining backward compatibility with cards made for + the older ISA bus. The EISA bus saw limited use between 1988 and + 1995 when it was made obsolete by the PCI bus. + + Say Y here if you are building a kernel for an EISA-based machine. + + Otherwise, say N. + + source "drivers/eisa/Kconfig" + + config MCA + bool "MCA support" + depends on !(X86_VISWS || X86_VOYAGER) + help + MicroChannel Architecture is found in some IBM PS/2 machines and + laptops. It is a bus system similar to PCI or ISA. See + (and especially the web page given + there) before attempting to build an MCA bus kernel. + + config MCA + depends on X86_VOYAGER + default y if X86_VOYAGER + + source "drivers/mca/Kconfig" + + config SCx200 + tristate "NatSemi SCx200 support" + depends on !X86_VOYAGER + help + This provides basic support for the National Semiconductor SCx200 + processor. Right now this is just a driver for the GPIO pins. + + If you don't know what to do here, say N. + + This support is also available as a module. If compiled as a + module, it will be called scx200. + + source "drivers/pcmcia/Kconfig" + + source "drivers/pci/hotplug/Kconfig" + + endmenu + + endif + + menu "Kernel hacking" + + config DEBUG_KERNEL + bool "Kernel debugging" + help + Say Y here if you are developing drivers or trying to debug and + identify kernel problems. + + config EARLY_PRINTK + bool "Early printk" if EMBEDDED + default y + help + Write kernel log output directly into the VGA buffer or to a serial + port. + + This is useful for kernel debugging when your machine crashes very + early before the console code is initialized. For normal operation + it is not recommended because it looks ugly and doesn't cooperate + with klogd/syslogd or the X server. You should normally N here, + unless you want to debug such a crash. + + config DEBUG_STACKOVERFLOW + bool "Check for stack overflows" + depends on DEBUG_KERNEL + + config DEBUG_STACK_USAGE + bool "Stack utilization instrumentation" + depends on DEBUG_KERNEL + help + Enables the display of the minimum amount of free stack which each + task has ever had available in the sysrq-T and sysrq-P debug output. + + This option will slow down process creation somewhat. + + config DEBUG_SLAB + bool "Debug memory allocations" + depends on DEBUG_KERNEL + help + Say Y here to have the kernel do limited verification on memory + allocation as well as poisoning memory on free to catch use of freed + memory. + + config MAGIC_SYSRQ + bool "Magic SysRq key" + depends on DEBUG_KERNEL + help + If you say Y here, you will have some control over the system even + if the system crashes for example during kernel debugging (e.g., you + will be able to flush the buffer cache to disk, reboot the system + immediately or dump some status information). This is accomplished + by pressing various keys while holding SysRq (Alt+PrintScreen). It + also works on a serial console (on PC hardware at least), if you + send a BREAK and then within 5 seconds a command keypress. The + keys are documented in . Don't say Y + unless you really know what this hack does. + + config DEBUG_SPINLOCK + bool "Spinlock debugging" + depends on DEBUG_KERNEL + help + Say Y here and build SMP to catch missing spinlock initialization + and certain other kinds of spinlock errors commonly made. This is + best used in conjunction with the NMI watchdog so that spinlock + deadlocks are also debuggable. + + config DEBUG_PAGEALLOC + bool "Page alloc debugging" + depends on DEBUG_KERNEL + help + Unmap pages from the kernel linear mapping after free_pages(). + This results in a large slowdown, but helps to find certain types + of memory corruptions. + + config DEBUG_HIGHMEM + bool "Highmem debugging" + depends on DEBUG_KERNEL && HIGHMEM + help + This options enables addition error checking for high memory systems. + Disable for production systems. + + config DEBUG_INFO + bool "Compile the kernel with debug info" + depends on DEBUG_KERNEL + help + If you say Y here the resulting kernel image will include + debugging info resulting in a larger kernel image. + Say Y here only if you plan to use gdb to debug the kernel. + If you don't debug the kernel, you can say N. + + config DEBUG_SPINLOCK_SLEEP + bool "Sleep-inside-spinlock checking" + help + If you say Y here, various routines which may sleep will become very + noisy if they are called with a spinlock held. + + config FRAME_POINTER + bool "Compile the kernel with frame pointers" + help + If you say Y here the resulting kernel image will be slightly larger + and slower, but it will give very useful debugging information. + If you don't debug the kernel, you can say N, but we may not be able + to solve problems without frame pointers. + + config 4KSTACKS + bool "Use 4Kb for kernel stacks instead of 8Kb" + help + If you say Y here the kernel will use a 4Kb stacksize for the + kernel stack attached to each process/thread. This facilitates + running more threads on a system and also reduces the pressure + on the VM subsystem for higher order allocations. This option + will also use IRQ stacks to compensate for the reduced stackspace. + + config X86_FIND_SMP_CONFIG + bool + depends on X86_LOCAL_APIC || X86_VOYAGER + default y + + config X86_MPPARSE + bool + depends on X86_LOCAL_APIC && !X86_VISWS + default y + + endmenu + + # + # Use the generic interrupt handling code in kernel/irq/: + # + config GENERIC_HARDIRQS + bool + default y + + config GENERIC_IRQ_PROBE + bool + default y + + config X86_SMP + bool + depends on SMP && !X86_VOYAGER + default y + -config X86_HT - bool - depends on SMP && !(X86_VISWS || X86_VOYAGER) - default y ++#config X86_HT ++# bool ++# depends on SMP && !(X86_VISWS || X86_VOYAGER) ++# default y + + config X86_BIOS_REBOOT + bool + depends on !(X86_VISWS || X86_VOYAGER) + default y + + config X86_TRAMPOLINE + bool + depends on X86_SMP || (X86_VOYAGER && SMP) + default y + + config PC + bool + depends on X86 && !EMBEDDED + default y + + endmenu diff --cc linux-2.6.11-xen-sparse/arch/xen/i386/kernel/Makefile index 0000000000,522bab987a..1542958464 mode 000000,100644..100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/Makefile +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/Makefile @@@ -1,0 -1,90 +1,91 @@@ + # + # Makefile for the linux kernel. + # + + XENARCH := $(subst ",,$(CONFIG_XENARCH)) + + CFLAGS += -Iarch/$(XENARCH)/kernel + + extra-y := head.o init_task.o + + obj-y := process.o signal.o entry.o traps.o \ + time.o ioport.o ldt.o setup.o \ + pci-dma.o i386_ksyms.o + + c-obj-y := semaphore.o irq.o vm86.o \ + ptrace.o sys_i386.o \ + i387.o dmi_scan.o bootflag.o \ + doublefault.o quirks.o + s-obj-y := + + obj-y += cpu/ + obj-y += timers/ + c-obj-$(CONFIG_ACPI_BOOT) += acpi/ + #c-obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o + c-obj-$(CONFIG_MCA) += mca.o + c-obj-$(CONFIG_X86_MSR) += msr.o + c-obj-$(CONFIG_X86_CPUID) += cpuid.o + obj-$(CONFIG_MICROCODE) += microcode.o + c-obj-$(CONFIG_APM) += apm.o -c-obj-$(CONFIG_X86_SMP) += smp.o smpboot.o -c-obj-$(CONFIG_X86_TRAMPOLINE) += trampoline.o ++obj-$(CONFIG_X86_SMP) += smp.o smpboot.o ++#obj-$(CONFIG_X86_TRAMPOLINE) += trampoline.o + c-obj-$(CONFIG_X86_MPPARSE) += mpparse.o -c-obj-$(CONFIG_X86_LOCAL_APIC) += apic.o nmi.o ++#obj-$(CONFIG_X86_LOCAL_APIC) += apic.o ++c-obj-$(CONFIG_X86_LOCAL_APIC) += nmi.o + c-obj-$(CONFIG_X86_IO_APIC) += io_apic.o + c-obj-$(CONFIG_X86_NUMAQ) += numaq.o + c-obj-$(CONFIG_X86_SUMMIT_NUMA) += summit.o + c-obj-$(CONFIG_MODULES) += module.o + c-obj-y += sysenter.o + obj-y += vsyscall.o + c-obj-$(CONFIG_ACPI_SRAT) += srat.o + c-obj-$(CONFIG_HPET_TIMER) += time_hpet.o + c-obj-$(CONFIG_EFI) += efi.o efi_stub.o + c-obj-$(CONFIG_EARLY_PRINTK) += early_printk.o + + EXTRA_AFLAGS := -traditional + + c-obj-$(CONFIG_SCx200) += scx200.o + + # vsyscall.o contains the vsyscall DSO images as __initdata. + # We must build both images before we can assemble it. + # Note: kbuild does not track this dependency due to usage of .incbin + $(obj)/vsyscall.o: $(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so + targets += $(foreach F,int80 sysenter,vsyscall-$F.o vsyscall-$F.so) + + # The DSO images are built using a special linker script. + quiet_cmd_syscall = SYSCALL $@ + cmd_syscall = $(CC) -nostdlib -m32 $(SYSCFLAGS_$(@F)) \ + -Wl,-T,$(filter-out FORCE,$^) -o $@ + + vsyscall-flags = -shared -s -Wl,-soname=linux-gate.so.1 + SYSCFLAGS_vsyscall-sysenter.so = $(vsyscall-flags) + SYSCFLAGS_vsyscall-int80.so = $(vsyscall-flags) + + $(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so: \ + $(obj)/vsyscall-%.so: $(obj)/vsyscall.lds $(obj)/vsyscall-%.o FORCE + $(call if_changed,syscall) + + # We also create a special relocatable object that should mirror the symbol + # table and layout of the linked DSO. With ld -R we can then refer to + # these symbols in the kernel code rather than hand-coded addresses. + extra-y += vsyscall-syms.o + $(obj)/built-in.o: $(obj)/vsyscall-syms.o + $(obj)/built-in.o: ld_flags += -R $(obj)/vsyscall-syms.o + + SYSCFLAGS_vsyscall-syms.o = -r + $(obj)/vsyscall-syms.o: $(obj)/vsyscall.lds $(obj)/vsyscall-sysenter.o FORCE + $(call if_changed,syscall) + + c-link := init_task.o + s-link := vsyscall-int80.o vsyscall-sysenter.o vsyscall-sigreturn.o + + $(patsubst %.o,$(obj)/%.c,$(c-obj-y) $(c-link)) $(patsubst %.o,$(obj)/%.S,$(s-obj-y) $(s-link)): + @ln -fsn $(srctree)/arch/i386/kernel/$(notdir $@) $@ + + $(obj)/vsyscall-int80.S: $(obj)/vsyscall-sigreturn.S + + obj-y += $(c-obj-y) $(s-obj-y) + + clean-files += $(patsubst %.o,%.c,$(c-obj-y) $(c-obj-) $(c-link)) + clean-files += $(patsubst %.o,%.S,$(s-obj-y) $(s-obj-) $(s-link)) diff --cc linux-2.6.11-xen-sparse/arch/xen/i386/kernel/cpu/common.c index 0000000000,dc60f9d677..2d2b7afc71 mode 000000,100644..100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/cpu/common.c +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/cpu/common.c @@@ -1,0 -1,655 +1,650 @@@ + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #ifdef CONFIG_X86_LOCAL_APIC + #include + #include + #include + #endif + #include + + #include "cpu.h" + + DEFINE_PER_CPU(struct desc_struct, cpu_gdt_table[GDT_ENTRIES]); + EXPORT_PER_CPU_SYMBOL(cpu_gdt_table); + + static int cachesize_override __initdata = -1; + static int disable_x86_fxsr __initdata = 0; + static int disable_x86_serial_nr __initdata = 1; + + struct cpu_dev * cpu_devs[X86_VENDOR_NUM] = {}; + + extern void mcheck_init(struct cpuinfo_x86 *c); + + extern void machine_specific_modify_cpu_capabilities(struct cpuinfo_x86 *c); + + extern int disable_pse; + + static void default_init(struct cpuinfo_x86 * c) + { + /* Not much we can do here... */ + /* Check if at least it has cpuid */ + if (c->cpuid_level == -1) { + /* No cpuid. It must be an ancient CPU */ + if (c->x86 == 4) + strcpy(c->x86_model_id, "486"); + else if (c->x86 == 3) + strcpy(c->x86_model_id, "386"); + } + } + + static struct cpu_dev default_cpu = { + .c_init = default_init, + }; + static struct cpu_dev * this_cpu = &default_cpu; + + static int __init cachesize_setup(char *str) + { + get_option (&str, &cachesize_override); + return 1; + } + __setup("cachesize=", cachesize_setup); + + int __init get_model_name(struct cpuinfo_x86 *c) + { + unsigned int *v; + char *p, *q; + + if (cpuid_eax(0x80000000) < 0x80000004) + return 0; + + v = (unsigned int *) c->x86_model_id; + cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]); + cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]); + cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]); + c->x86_model_id[48] = 0; + + /* Intel chips right-justify this string for some dumb reason; + undo that brain damage */ + p = q = &c->x86_model_id[0]; + while ( *p == ' ' ) + p++; + if ( p != q ) { + while ( *p ) + *q++ = *p++; + while ( q <= &c->x86_model_id[48] ) + *q++ = '\0'; /* Zero-pad the rest */ + } + + return 1; + } + + + void __init display_cacheinfo(struct cpuinfo_x86 *c) + { + unsigned int n, dummy, ecx, edx, l2size; + + n = cpuid_eax(0x80000000); + + if (n >= 0x80000005) { + cpuid(0x80000005, &dummy, &dummy, &ecx, &edx); + printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d bytes/line)\n", + edx>>24, edx&0xFF, ecx>>24, ecx&0xFF); + c->x86_cache_size=(ecx>>24)+(edx>>24); + } + + if (n < 0x80000006) /* Some chips just has a large L1. */ + return; + + ecx = cpuid_ecx(0x80000006); + l2size = ecx >> 16; + + /* do processor-specific cache resizing */ + if (this_cpu->c_size_cache) + l2size = this_cpu->c_size_cache(c,l2size); + + /* Allow user to override all this if necessary. */ + if (cachesize_override != -1) + l2size = cachesize_override; + + if ( l2size == 0 ) + return; /* Again, no L2 cache is possible */ + + c->x86_cache_size = l2size; + + printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n", + l2size, ecx & 0xFF); + } + + /* Naming convention should be: [()] */ + /* This table only is used unless init_() below doesn't set it; */ + /* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used */ + + /* Look up CPU names by table lookup. */ + static char __init *table_lookup_model(struct cpuinfo_x86 *c) + { + struct cpu_model_info *info; + + if ( c->x86_model >= 16 ) + return NULL; /* Range check */ + + if (!this_cpu) + return NULL; + + info = this_cpu->c_models; + + while (info && info->family) { + if (info->family == c->x86) + return info->model_names[c->x86_model]; + info++; + } + return NULL; /* Not found */ + } + + + void __init get_cpu_vendor(struct cpuinfo_x86 *c, int early) + { + char *v = c->x86_vendor_id; + int i; + + for (i = 0; i < X86_VENDOR_NUM; i++) { + if (cpu_devs[i]) { + if (!strcmp(v,cpu_devs[i]->c_ident[0]) || + (cpu_devs[i]->c_ident[1] && + !strcmp(v,cpu_devs[i]->c_ident[1]))) { + c->x86_vendor = i; + if (!early) + this_cpu = cpu_devs[i]; + break; + } + } + } + } + + + static int __init x86_fxsr_setup(char * s) + { + disable_x86_fxsr = 1; + return 1; + } + __setup("nofxsr", x86_fxsr_setup); + + + /* Standard macro to see if a specific flag is changeable */ + static inline int flag_is_changeable_p(u32 flag) + { + u32 f1, f2; + + asm("pushfl\n\t" + "pushfl\n\t" + "popl %0\n\t" + "movl %0,%1\n\t" + "xorl %2,%0\n\t" + "pushl %0\n\t" + "popfl\n\t" + "pushfl\n\t" + "popl %0\n\t" + "popfl\n\t" + : "=&r" (f1), "=&r" (f2) + : "ir" (flag)); + + return ((f1^f2) & flag) != 0; + } + + + /* Probe for the CPUID instruction */ + int __init have_cpuid_p(void) + { + return flag_is_changeable_p(X86_EFLAGS_ID); + } + + /* Do minimum CPU detection early. + Fields really needed: vendor, cpuid_level, family, model, mask, cache alignment. + The others are not touched to avoid unwanted side effects. */ + void __init early_cpu_detect(void) + { + struct cpuinfo_x86 *c = &boot_cpu_data; + + c->x86_cache_alignment = 32; + + if (!have_cpuid_p()) + return; + + /* Get vendor name */ + cpuid(0x00000000, &c->cpuid_level, + (int *)&c->x86_vendor_id[0], + (int *)&c->x86_vendor_id[8], + (int *)&c->x86_vendor_id[4]); + + get_cpu_vendor(c, 1); + + c->x86 = 4; + if (c->cpuid_level >= 0x00000001) { + u32 junk, tfms, cap0, misc; + cpuid(0x00000001, &tfms, &misc, &junk, &cap0); + c->x86 = (tfms >> 8) & 15; + c->x86_model = (tfms >> 4) & 15; + if (c->x86 == 0xf) { + c->x86 += (tfms >> 20) & 0xff; + c->x86_model += ((tfms >> 16) & 0xF) << 4; + } + c->x86_mask = tfms & 15; + if (cap0 & (1<<19)) + c->x86_cache_alignment = ((misc >> 8) & 0xff) * 8; + } + + early_intel_workaround(c); + } + + void __init generic_identify(struct cpuinfo_x86 * c) + { + u32 tfms, xlvl; + int junk; + + if (have_cpuid_p()) { + /* Get vendor name */ + cpuid(0x00000000, &c->cpuid_level, + (int *)&c->x86_vendor_id[0], + (int *)&c->x86_vendor_id[8], + (int *)&c->x86_vendor_id[4]); + + get_cpu_vendor(c, 0); + /* Initialize the standard set of capabilities */ + /* Note that the vendor-specific code below might override */ + + /* Intel-defined flags: level 0x00000001 */ + if ( c->cpuid_level >= 0x00000001 ) { + u32 capability, excap; + cpuid(0x00000001, &tfms, &junk, &excap, &capability); + c->x86_capability[0] = capability; + c->x86_capability[4] = excap; + c->x86 = (tfms >> 8) & 15; + c->x86_model = (tfms >> 4) & 15; + if (c->x86 == 0xf) { + c->x86 += (tfms >> 20) & 0xff; + c->x86_model += ((tfms >> 16) & 0xF) << 4; + } + c->x86_mask = tfms & 15; + } else { + /* Have CPUID level 0 only - unheard of */ + c->x86 = 4; + } + + /* AMD-defined flags: level 0x80000001 */ + xlvl = cpuid_eax(0x80000000); + if ( (xlvl & 0xffff0000) == 0x80000000 ) { + if ( xlvl >= 0x80000001 ) { + c->x86_capability[1] = cpuid_edx(0x80000001); + c->x86_capability[6] = cpuid_ecx(0x80000001); + } + if ( xlvl >= 0x80000004 ) + get_model_name(c); /* Default name */ + } + } + } + + static void __init squash_the_stupid_serial_number(struct cpuinfo_x86 *c) + { + if (cpu_has(c, X86_FEATURE_PN) && disable_x86_serial_nr ) { + /* Disable processor serial number */ + unsigned long lo,hi; + rdmsr(MSR_IA32_BBL_CR_CTL,lo,hi); + lo |= 0x200000; + wrmsr(MSR_IA32_BBL_CR_CTL,lo,hi); + printk(KERN_NOTICE "CPU serial number disabled.\n"); + clear_bit(X86_FEATURE_PN, c->x86_capability); + + /* Disabling the serial number may affect the cpuid level */ + c->cpuid_level = cpuid_eax(0); + } + } + + static int __init x86_serial_nr_setup(char *s) + { + disable_x86_serial_nr = 0; + return 1; + } + __setup("serialnumber", x86_serial_nr_setup); + + + + /* + * This does the hard work of actually picking apart the CPU stuff... + */ + void __init identify_cpu(struct cpuinfo_x86 *c) + { + int i; + + c->loops_per_jiffy = loops_per_jiffy; + c->x86_cache_size = -1; + c->x86_vendor = X86_VENDOR_UNKNOWN; + c->cpuid_level = -1; /* CPUID not detected */ + c->x86_model = c->x86_mask = 0; /* So far unknown... */ + c->x86_vendor_id[0] = '\0'; /* Unset */ + c->x86_model_id[0] = '\0'; /* Unset */ + c->x86_num_cores = 1; + memset(&c->x86_capability, 0, sizeof c->x86_capability); + + if (!have_cpuid_p()) { + /* First of all, decide if this is a 486 or higher */ + /* It's a 486 if we can modify the AC flag */ + if ( flag_is_changeable_p(X86_EFLAGS_AC) ) + c->x86 = 4; + else + c->x86 = 3; + } + + generic_identify(c); + + printk(KERN_DEBUG "CPU: After generic identify, caps:"); + for (i = 0; i < NCAPINTS; i++) + printk(" %08lx", c->x86_capability[i]); + printk("\n"); + + if (this_cpu->c_identify) { + this_cpu->c_identify(c); + + printk(KERN_DEBUG "CPU: After vendor identify, caps:"); + for (i = 0; i < NCAPINTS; i++) + printk(" %08lx", c->x86_capability[i]); + printk("\n"); + } + + /* + * Vendor-specific initialization. In this section we + * canonicalize the feature flags, meaning if there are + * features a certain CPU supports which CPUID doesn't + * tell us, CPUID claiming incorrect flags, or other bugs, + * we handle them here. + * + * At the end of this section, c->x86_capability better + * indicate the features this CPU genuinely supports! + */ + if (this_cpu->c_init) + this_cpu->c_init(c); + + /* Disable the PN if appropriate */ + squash_the_stupid_serial_number(c); + + /* + * The vendor-specific functions might have changed features. Now + * we do "generic changes." + */ + + /* TSC disabled? */ + if ( tsc_disable ) + clear_bit(X86_FEATURE_TSC, c->x86_capability); + + /* FXSR disabled? */ + if (disable_x86_fxsr) { + clear_bit(X86_FEATURE_FXSR, c->x86_capability); + clear_bit(X86_FEATURE_XMM, c->x86_capability); + } + + if (disable_pse) + clear_bit(X86_FEATURE_PSE, c->x86_capability); + + /* If the model name is still unset, do table lookup. */ + if ( !c->x86_model_id[0] ) { + char *p; + p = table_lookup_model(c); + if ( p ) + strcpy(c->x86_model_id, p); + else + /* Last resort... */ + sprintf(c->x86_model_id, "%02x/%02x", + c->x86_vendor, c->x86_model); + } + + machine_specific_modify_cpu_capabilities(c); + + /* Now the feature flags better reflect actual CPU features! */ + + printk(KERN_DEBUG "CPU: After all inits, caps:"); + for (i = 0; i < NCAPINTS; i++) + printk(" %08lx", c->x86_capability[i]); + printk("\n"); + + /* + * On SMP, boot_cpu_data holds the common feature set between + * all CPUs; so make sure that we indicate which features are + * common between the CPUs. The first time this routine gets + * executed, c == &boot_cpu_data. + */ + if ( c != &boot_cpu_data ) { + /* AND the already accumulated flags with these */ + for ( i = 0 ; i < NCAPINTS ; i++ ) + boot_cpu_data.x86_capability[i] &= c->x86_capability[i]; + } + + /* Init Machine Check Exception if available. */ + #ifdef CONFIG_X86_MCE + mcheck_init(c); + #endif + } + /* + * Perform early boot up checks for a valid TSC. See arch/i386/kernel/time.c + */ + + void __init dodgy_tsc(void) + { + if (( boot_cpu_data.x86_vendor == X86_VENDOR_CYRIX ) || + ( boot_cpu_data.x86_vendor == X86_VENDOR_NSC )) + cpu_devs[X86_VENDOR_CYRIX]->c_init(&boot_cpu_data); + } + + #ifdef CONFIG_X86_HT + void __init detect_ht(struct cpuinfo_x86 *c) + { + u32 eax, ebx, ecx, edx; + int index_lsb, index_msb, tmp; + int cpu = smp_processor_id(); + + if (!cpu_has(c, X86_FEATURE_HT)) + return; + + cpuid(1, &eax, &ebx, &ecx, &edx); + smp_num_siblings = (ebx & 0xff0000) >> 16; + + if (smp_num_siblings == 1) { + printk(KERN_INFO "CPU: Hyper-Threading is disabled\n"); + } else if (smp_num_siblings > 1 ) { + index_lsb = 0; + index_msb = 31; + + if (smp_num_siblings > NR_CPUS) { + printk(KERN_WARNING "CPU: Unsupported number of the siblings %d", smp_num_siblings); + smp_num_siblings = 1; + return; + } + tmp = smp_num_siblings; + while ((tmp & 1) == 0) { + tmp >>=1 ; + index_lsb++; + } + tmp = smp_num_siblings; + while ((tmp & 0x80000000 ) == 0) { + tmp <<=1 ; + index_msb--; + } + if (index_lsb != index_msb ) + index_msb++; + phys_proc_id[cpu] = phys_pkg_id((ebx >> 24) & 0xFF, index_msb); + + printk(KERN_INFO "CPU: Physical Processor ID: %d\n", + phys_proc_id[cpu]); + } + } + #endif + + void __init print_cpu_info(struct cpuinfo_x86 *c) + { + char *vendor = NULL; + + if (c->x86_vendor < X86_VENDOR_NUM) + vendor = this_cpu->c_vendor; + else if (c->cpuid_level >= 0) + vendor = c->x86_vendor_id; + + if (vendor && strncmp(c->x86_model_id, vendor, strlen(vendor))) + printk("%s ", vendor); + + if (!c->x86_model_id[0]) + printk("%d86", c->x86); + else + printk("%s", c->x86_model_id); + + if (c->x86_mask || c->cpuid_level >= 0) + printk(" stepping %02x\n", c->x86_mask); + else + printk("\n"); + } + + cpumask_t cpu_initialized __initdata = CPU_MASK_NONE; + + /* This is hacky. :) + * We're emulating future behavior. + * In the future, the cpu-specific init functions will be called implicitly + * via the magic of initcalls. + * They will insert themselves into the cpu_devs structure. + * Then, when cpu_init() is called, we can just iterate over that array. + */ + + extern int intel_cpu_init(void); + extern int cyrix_init_cpu(void); + extern int nsc_init_cpu(void); + extern int amd_init_cpu(void); + extern int centaur_init_cpu(void); + extern int transmeta_init_cpu(void); + extern int rise_init_cpu(void); + extern int nexgen_init_cpu(void); + extern int umc_init_cpu(void); + void early_cpu_detect(void); + + void __init early_cpu_init(void) + { + intel_cpu_init(); + cyrix_init_cpu(); + nsc_init_cpu(); + amd_init_cpu(); + centaur_init_cpu(); + transmeta_init_cpu(); + rise_init_cpu(); + nexgen_init_cpu(); + umc_init_cpu(); + early_cpu_detect(); + + #ifdef CONFIG_DEBUG_PAGEALLOC + /* pse is not compatible with on-the-fly unmapping, + * disable it even if the cpus claim to support it. + */ + clear_bit(X86_FEATURE_PSE, boot_cpu_data.x86_capability); + disable_pse = 1; + #endif + } + + void __init cpu_gdt_init(struct Xgt_desc_struct *gdt_descr) + { + unsigned long frames[gdt_descr->size >> PAGE_SHIFT]; + unsigned long va; + int f; + + for (va = gdt_descr->address, f = 0; + va < gdt_descr->address + gdt_descr->size; + va += PAGE_SIZE, f++) { + frames[f] = virt_to_machine(va) >> PAGE_SHIFT; + make_page_readonly((void *)va); + } + flush_page_update_queue(); + if (HYPERVISOR_set_gdt(frames, gdt_descr->size / 8)) + BUG(); + lgdt_finish(); + } + + /* + * cpu_init() initializes state that is per-CPU. Some data is already + * initialized (naturally) in the bootstrap process, such as the GDT + * and IDT. We reload them nevertheless, this function acts as a + * 'CPU state barrier', nothing should get across. + */ + void __init cpu_init (void) + { + int cpu = smp_processor_id(); + struct tss_struct * t = &per_cpu(init_tss, cpu); + struct thread_struct *thread = ¤t->thread; + + if (cpu_test_and_set(cpu, cpu_initialized)) { + printk(KERN_WARNING "CPU#%d already initialized!\n", cpu); + for (;;) local_irq_enable(); + } + printk(KERN_INFO "Initializing CPU#%d\n", cpu); + + if (cpu_has_vme || cpu_has_de) + clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE); + if (tsc_disable && cpu_has_tsc) { + printk(KERN_NOTICE "Disabling TSC...\n"); + /**** FIX-HPA: DOES THIS REALLY BELONG HERE? ****/ + clear_bit(X86_FEATURE_TSC, boot_cpu_data.x86_capability); + set_in_cr4(X86_CR4_TSD); + } + - /* - * Initialize the per-CPU GDT with the boot GDT, - * and set up the GDT descriptor: - */ - if (cpu) { - cpu_gdt_descr[cpu].size = GDT_SIZE; - cpu_gdt_descr[cpu].address = 0; /* XXXcl alloc page */ - BUG(); /* XXXcl SMP */ - memcpy((void *)cpu_gdt_descr[cpu].address, - (void *)cpu_gdt_descr[0].address, GDT_SIZE); - } + /* + * Set up the per-thread TLS descriptor cache: + */ + memcpy(thread->tls_array, &get_cpu_gdt_table(cpu)[GDT_ENTRY_TLS_MIN], + GDT_ENTRY_TLS_ENTRIES * 8); + + cpu_gdt_init(&cpu_gdt_descr[cpu]); + + /* + * Delete NT + */ + __asm__("pushfl ; andl $0xffffbfff,(%esp) ; popfl"); + + /* + * Set up and load the per-CPU TSS and LDT + */ + atomic_inc(&init_mm.mm_count); + current->active_mm = &init_mm; + if (current->mm) + BUG(); + enter_lazy_tlb(&init_mm, current); + + load_esp0(t, thread); + + load_LDT(&init_mm.context); + flush_page_update_queue(); + + /* Clear %fs and %gs. */ + asm volatile ("xorl %eax, %eax; movl %eax, %fs; movl %eax, %gs"); + + /* Clear all 6 debug registers: */ + + #define CD(register) HYPERVISOR_set_debugreg(register, 0) + + CD(0); CD(1); CD(2); CD(3); /* no db4 and db5 */; CD(6); CD(7); + + #undef CD + + /* + * Force FPU initialization: + */ + current_thread_info()->status = 0; + clear_used_math(); + mxcsr_feature_mask_init(); + } ++ ++ ++int get_smp_processor_id(void) ++{ ++ return smp_processor_id(); ++} diff --cc linux-2.6.11-xen-sparse/arch/xen/i386/kernel/entry.S index 0000000000,af2fad5236..ad7b3f44ad mode 000000,100644..100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/entry.S +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/entry.S @@@ -1,0 -1,1031 +1,1077 @@@ + /* + * linux/arch/i386/entry.S + * + * Copyright (C) 1991, 1992 Linus Torvalds + */ + + /* + * entry.S contains the system-call and fault low-level handling routines. + * This also contains the timer-interrupt handler, as well as all interrupts + * and faults that can result in a task-switch. + * + * NOTE: This code handles signal-recognition, which happens every time + * after a timer-interrupt and after each system call. + * + * I changed all the .align's to 4 (16 byte alignment), as that's faster + * on a 486. + * + * Stack layout in 'ret_from_system_call': + * ptrace needs to have all regs on the stack. + * if the order here is changed, it needs to be + * updated in fork.c:copy_process, signal.c:do_signal, + * ptrace.c and ptrace.h + * + * 0(%esp) - %ebx + * 4(%esp) - %ecx + * 8(%esp) - %edx + * C(%esp) - %esi + * 10(%esp) - %edi + * 14(%esp) - %ebp + * 18(%esp) - %eax + * 1C(%esp) - %ds + * 20(%esp) - %es + * 24(%esp) - orig_eax + * 28(%esp) - %eip + * 2C(%esp) - %cs + * 30(%esp) - %eflags + * 34(%esp) - %oldesp + * 38(%esp) - %oldss + * + * "current" is in register %ebx during any slow entries. + */ + + #include + #include + #include + #include + #include + #include + #include + #include "irq_vectors.h" + #include + + #define nr_syscalls ((syscall_table_size)/4) + + EBX = 0x00 + ECX = 0x04 + EDX = 0x08 + ESI = 0x0C + EDI = 0x10 + EBP = 0x14 + EAX = 0x18 + DS = 0x1C + ES = 0x20 + ORIG_EAX = 0x24 + EIP = 0x28 + CS = 0x2C + EVENT_MASK = 0x2E + EFLAGS = 0x30 + OLDESP = 0x34 + OLDSS = 0x38 + + CF_MASK = 0x00000001 + TF_MASK = 0x00000100 + IF_MASK = 0x00000200 + DF_MASK = 0x00000400 + NT_MASK = 0x00004000 + VM_MASK = 0x00020000 + + /* Offsets into shared_info_t. */ + #define evtchn_upcall_pending /* 0 */ + #define evtchn_upcall_mask 1 + ++#define sizeof_vcpu_shift 3 ++ ++#ifdef CONFIG_SMP ++#define XEN_GET_VCPU_INFO(reg) ++#define preempt_disable(reg) incl TI_preempt_count(reg) ++#define preempt_enable(reg) decl TI_preempt_count(reg) ++#define XEN_LOCK_VCPU_INFO_SMP(reg) preempt_disable(%ebp) ; \ ++ movl TI_cpu(%ebp),reg ; \ ++ shl $sizeof_vcpu_shift,reg ; \ ++ addl HYPERVISOR_shared_info,reg ++#define XEN_UNLOCK_VCPU_INFO_SMP(reg) preempt_enable(%ebp) ++#define XEN_UNLOCK_VCPU_INFO_SMP_fixup .byte 0xff,0xff,0xff ++#define Ux00 0xff ++#define XEN_LOCKED_BLOCK_EVENTS(reg) movb $1,evtchn_upcall_mask(reg) ++#define XEN_BLOCK_EVENTS(reg) XEN_LOCK_VCPU_INFO_SMP(reg) ; \ ++ XEN_LOCKED_BLOCK_EVENTS(reg) ; \ ++ XEN_UNLOCK_VCPU_INFO_SMP(reg) ++#define XEN_UNBLOCK_EVENTS(reg) XEN_LOCK_VCPU_INFO_SMP(reg) ; \ ++ movb $0,evtchn_upcall_mask(reg) ; \ ++ XEN_UNLOCK_VCPU_INFO_SMP(reg) ++#define XEN_SAVE_UPCALL_MASK(reg,tmp,off) GET_THREAD_INFO(%ebp) ; \ ++ XEN_LOCK_VCPU_INFO_SMP(reg) ; \ ++ movb evtchn_upcall_mask(reg), tmp ; \ ++ movb tmp, off(%esp) ; \ ++ XEN_UNLOCK_VCPU_INFO_SMP(reg) ++#else + #define XEN_GET_VCPU_INFO(reg) movl HYPERVISOR_shared_info,reg -#define XEN_BLOCK_EVENTS(reg) movb $1,evtchn_upcall_mask(reg) ++#define XEN_LOCK_VCPU_INFO_SMP(reg) ++#define XEN_UNLOCK_VCPU_INFO_SMP(reg) ++#define XEN_UNLOCK_VCPU_INFO_SMP_fixup ++#define Ux00 0x00 ++#define XEN_LOCKED_BLOCK_EVENTS(reg) movb $1,evtchn_upcall_mask(reg) ++#define XEN_BLOCK_EVENTS(reg) XEN_LOCKED_BLOCK_EVENTS(reg) + #define XEN_UNBLOCK_EVENTS(reg) movb $0,evtchn_upcall_mask(reg) + #define XEN_SAVE_UPCALL_MASK(reg,tmp,off) \ + movb evtchn_upcall_mask(reg), tmp; \ + movb tmp, off(%esp) ++#endif + + #define XEN_TEST_PENDING(reg) testb $0xFF,evtchn_upcall_pending(reg) + + #ifdef CONFIG_PREEMPT + #define preempt_stop XEN_BLOCK_EVENTS(%esi) + #else + #define preempt_stop + #define resume_kernel restore_all + #endif + + #define SAVE_ALL_NO_EVENTMASK \ + cld; \ + pushl %es; \ + pushl %ds; \ + pushl %eax; \ + pushl %ebp; \ + pushl %edi; \ + pushl %esi; \ + pushl %edx; \ + pushl %ecx; \ + pushl %ebx; \ + movl $(__USER_DS), %edx; \ + movl %edx, %ds; \ + movl %edx, %es; + + #define SAVE_ALL \ + SAVE_ALL_NO_EVENTMASK; \ + XEN_GET_VCPU_INFO(%esi); \ + XEN_SAVE_UPCALL_MASK(%esi,%dl,EVENT_MASK) + + #define RESTORE_INT_REGS \ + popl %ebx; \ + popl %ecx; \ + popl %edx; \ + popl %esi; \ + popl %edi; \ + popl %ebp; \ + popl %eax + + #define RESTORE_REGS \ + RESTORE_INT_REGS; \ + 1: popl %ds; \ + 2: popl %es; \ + .section .fixup,"ax"; \ + 3: movl $0,(%esp); \ + jmp 1b; \ + 4: movl $0,(%esp); \ + jmp 2b; \ + .previous; \ + .section __ex_table,"a";\ + .align 4; \ + .long 1b,3b; \ + .long 2b,4b; \ + .previous + + + #define RESTORE_ALL \ + RESTORE_REGS \ + addl $4, %esp; \ + 1: iret; \ + .section .fixup,"ax"; \ + 2: movl $(__USER_DS), %edx; \ + movl %edx, %ds; \ + movl %edx, %es; \ + movl $11,%eax; \ + call do_exit; \ + .previous; \ + .section __ex_table,"a";\ + .align 4; \ + .long 1b,2b; \ + .previous + + + ENTRY(ret_from_fork) + pushl %eax + call schedule_tail + GET_THREAD_INFO(%ebp) + popl %eax + XEN_GET_VCPU_INFO(%esi) + jmp syscall_exit + + /* + * Return to user mode is not as complex as all this looks, + * but we want the default path for a system call return to + * go as quickly as possible which is why some of this is + * less clear than it otherwise should be. + */ + + # userspace resumption stub bypassing syscall exit tracing + ALIGN + ret_from_exception: + preempt_stop + ret_from_intr: + GET_THREAD_INFO(%ebp) + movl EFLAGS(%esp), %eax # mix EFLAGS and CS + movb CS(%esp), %al + testl $(VM_MASK | 2), %eax + jz resume_kernel # returning to kernel or vm86-space + ENTRY(resume_userspace) + XEN_GET_VCPU_INFO(%esi) + XEN_BLOCK_EVENTS(%esi) # make sure we don't miss an interrupt + # setting need_resched or sigpending + # between sampling and the iret + movl TI_flags(%ebp), %ecx + andl $_TIF_WORK_MASK, %ecx # is there any work to be done on + # int/exception return? + jne work_pending + jmp restore_all + + #ifdef CONFIG_PREEMPT + ENTRY(resume_kernel) + XEN_GET_VCPU_INFO(%esi) + XEN_BLOCK_EVENTS(%esi) + cmpl $0,TI_preempt_count(%ebp) # non-zero preempt_count ? + jnz restore_all + need_resched: + movl TI_flags(%ebp), %ecx # need_resched set ? + testb $_TIF_NEED_RESCHED, %cl + jz restore_all + testb $0xFF,EVENT_MASK(%esp) # interrupts off (exception path) ? + jnz restore_all + call preempt_schedule_irq + jmp need_resched + #endif + + /* SYSENTER_RETURN points to after the "sysenter" instruction in + the vsyscall page. See vsyscall-sysentry.S, which defines the symbol. */ + + # sysenter call handler stub + ENTRY(sysenter_entry) + movl TSS_sysenter_esp0(%esp),%esp + sysenter_past_esp: + sti + pushl $(__USER_DS) + pushl %ebp + pushfl + pushl $(__USER_CS) + pushl $SYSENTER_RETURN + + /* + * Load the potential sixth argument from user stack. + * Careful about security. + */ + cmpl $__PAGE_OFFSET-3,%ebp + jae syscall_fault + 1: movl (%ebp),%ebp + .section __ex_table,"a" + .align 4 + .long 1b,syscall_fault + .previous + + pushl %eax + SAVE_ALL + GET_THREAD_INFO(%ebp) + + testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%ebp) + jnz syscall_trace_entry + cmpl $(nr_syscalls), %eax + jae syscall_badsys + call *sys_call_table(,%eax,4) + movl %eax,EAX(%esp) + cli + movl TI_flags(%ebp), %ecx + testw $_TIF_ALLWORK_MASK, %cx + jne syscall_exit_work + /* if something modifies registers it must also disable sysexit */ + movl EIP(%esp), %edx + movl OLDESP(%esp), %ecx + xorl %ebp,%ebp + sti + sysexit + + + # system call handler stub + ENTRY(system_call) + pushl %eax # save orig_eax + SAVE_ALL + GET_THREAD_INFO(%ebp) + # system call tracing in operation + testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%ebp) + jnz syscall_trace_entry + cmpl $(nr_syscalls), %eax + jae syscall_badsys + syscall_call: + call *sys_call_table(,%eax,4) + movl %eax,EAX(%esp) # store the return value + syscall_exit: + XEN_BLOCK_EVENTS(%esi) # make sure we don't miss an interrupt + # setting need_resched or sigpending + # between sampling and the iret + movl TI_flags(%ebp), %ecx + testw $_TIF_ALLWORK_MASK, %cx # current->work + jne syscall_exit_work + restore_all: + testl $VM_MASK, EFLAGS(%esp) + jnz resume_vm86 + movb EVENT_MASK(%esp), %al + notb %al # %al == ~saved_mask ++ XEN_LOCK_VCPU_INFO_SMP(%esi) + andb evtchn_upcall_mask(%esi),%al + andb $1,%al # %al == mask & ~saved_mask + jnz restore_all_enable_events # != 0 => reenable event delivery ++ XEN_UNLOCK_VCPU_INFO_SMP(%esi) + RESTORE_ALL + + resume_vm86: + XEN_UNBLOCK_EVENTS(%esi) + RESTORE_REGS + movl %eax,(%esp) + movl $__HYPERVISOR_switch_vm86,%eax + int $0x82 + ud2 + + # perform work that needs to be done immediately before resumption + ALIGN + work_pending: + testb $_TIF_NEED_RESCHED, %cl + jz work_notifysig + work_resched: + call schedule + XEN_BLOCK_EVENTS(%esi) # make sure we don't miss an interrupt + # setting need_resched or sigpending + # between sampling and the iret + movl TI_flags(%ebp), %ecx + andl $_TIF_WORK_MASK, %ecx # is there any work to be done other + # than syscall tracing? + jz restore_all + testb $_TIF_NEED_RESCHED, %cl + jnz work_resched + + work_notifysig: # deal with pending signals and + # notify-resume requests + testl $VM_MASK, EFLAGS(%esp) + movl %esp, %eax + jne work_notifysig_v86 # returning to kernel-space or + # vm86-space + xorl %edx, %edx + call do_notify_resume + jmp restore_all + + ALIGN + work_notifysig_v86: + pushl %ecx # save ti_flags for do_notify_resume + call save_v86_state # %eax contains pt_regs pointer + popl %ecx + movl %eax, %esp + xorl %edx, %edx + call do_notify_resume + jmp restore_all + + # perform syscall exit tracing + ALIGN + syscall_trace_entry: + movl $-ENOSYS,EAX(%esp) + movl %esp, %eax + xorl %edx,%edx + call do_syscall_trace + movl ORIG_EAX(%esp), %eax + cmpl $(nr_syscalls), %eax + jnae syscall_call + jmp syscall_exit + + # perform syscall exit tracing + ALIGN + syscall_exit_work: + testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP), %cl + jz work_pending + XEN_UNBLOCK_EVENTS(%esi) # could let do_syscall_trace() call + # schedule() instead + movl %esp, %eax + movl $1, %edx + call do_syscall_trace + jmp resume_userspace + + ALIGN + syscall_fault: + pushl %eax # save orig_eax + SAVE_ALL + GET_THREAD_INFO(%ebp) + movl $-EFAULT,EAX(%esp) + jmp resume_userspace + + ALIGN + syscall_badsys: + movl $-ENOSYS,EAX(%esp) + jmp resume_userspace + + #if 0 /* XEN */ + /* + * Build the entry stubs and pointer table with + * some assembler magic. + */ + .data + ENTRY(interrupt) + .text + + vector=0 + ENTRY(irq_entries_start) + .rept NR_IRQS + ALIGN + 1: pushl $vector-256 + jmp common_interrupt + .data + .long 1b + .text + vector=vector+1 + .endr + + ALIGN + common_interrupt: + SAVE_ALL + movl %esp,%eax + call do_IRQ + jmp ret_from_intr + + #define BUILD_INTERRUPT(name, nr) \ + ENTRY(name) \ + pushl $nr-256; \ + SAVE_ALL \ + movl %esp,%eax; \ + call smp_/**/name; \ + jmp ret_from_intr; + + /* The include is where all of the SMP etc. interrupts come from */ + #include "entry_arch.h" + #endif /* XEN */ + + ENTRY(divide_error) + pushl $0 # no error code + pushl $do_divide_error + ALIGN + error_code: + pushl %ds + pushl %eax + xorl %eax, %eax + pushl %ebp + pushl %edi + pushl %esi + pushl %edx + decl %eax # eax = -1 + pushl %ecx + pushl %ebx + cld + movl %es, %ecx + movl ES(%esp), %edi # get the function address + movl ORIG_EAX(%esp), %edx # get the error code + movl %eax, ORIG_EAX(%esp) + movl %ecx, ES(%esp) + movl $(__USER_DS), %ecx + movl %ecx, %ds + movl %ecx, %es + movl %esp,%eax # pt_regs pointer + XEN_GET_VCPU_INFO(%esi) + XEN_SAVE_UPCALL_MASK(%esi,%bl,EVENT_MASK) + call *%edi + jmp ret_from_exception + + # A note on the "critical region" in our callback handler. + # We want to avoid stacking callback handlers due to events occurring + # during handling of the last event. To do this, we keep events disabled + # until we've done all processing. HOWEVER, we must enable events before + # popping the stack frame (can't be done atomically) and so it would still + # be possible to get enough handler activations to overflow the stack. + # Although unlikely, bugs of that kind are hard to track down, so we'd + # like to avoid the possibility. + # So, on entry to the handler we detect whether we interrupted an + # existing activation in its critical region -- if so, we pop the current + # activation and restart the handler using the previous one. + ENTRY(hypervisor_callback) + pushl %eax + SAVE_ALL_NO_EVENTMASK + movl EIP(%esp),%eax + cmpl $scrit,%eax + jb 11f + cmpl $ecrit,%eax + jb critical_region_fixup + 11: XEN_GET_VCPU_INFO(%esi) + movb $0, EVENT_MASK(%esp) + push %esp + call evtchn_do_upcall + add $4,%esp + jmp ret_from_intr + + ALIGN + restore_all_enable_events: + XEN_UNBLOCK_EVENTS(%esi) + scrit: /**** START OF CRITICAL REGION ****/ + XEN_TEST_PENDING(%esi) + jnz 14f # process more events if necessary... ++ XEN_UNLOCK_VCPU_INFO_SMP(%esi) + RESTORE_ALL -14: XEN_BLOCK_EVENTS(%esi) ++14: XEN_LOCKED_BLOCK_EVENTS(%esi) ++ XEN_UNLOCK_VCPU_INFO_SMP(%esi) + jmp 11b + ecrit: /**** END OF CRITICAL REGION ****/ + # [How we do the fixup]. We want to merge the current stack frame with the + # just-interrupted frame. How we do this depends on where in the critical + # region the interrupted handler was executing, and so how many saved + # registers are in each frame. We do this quickly using the lookup table + # 'critical_fixup_table'. For each byte offset in the critical region, it + # provides the number of bytes which have already been popped from the + # interrupted stack frame. + critical_region_fixup: + addl $critical_fixup_table-scrit,%eax + movzbl (%eax),%eax # %eax contains num bytes popped - mov %esp,%esi ++#ifdef CONFIG_SMP ++ cmpb $0xff,%al ++ jne 15f ++ add $1,%al ++ GET_THREAD_INFO(%ebp) ++ XEN_UNLOCK_VCPU_INFO_SMP(%esi) ++15: ++#endif ++ mov %esp,%esi + add %eax,%esi # %esi points at end of src region + mov %esp,%edi + add $0x34,%edi # %edi points at end of dst region + mov %eax,%ecx + shr $2,%ecx # convert words to bytes - je 16f # skip loop if nothing to copy -15: subl $4,%esi # pre-decrementing copy loop ++ je 17f # skip loop if nothing to copy ++16: subl $4,%esi # pre-decrementing copy loop + subl $4,%edi + movl (%esi),%eax + movl %eax,(%edi) - loop 15b -16: movl %edi,%esp # final %edi is top of merged stack ++ loop 16b ++17: movl %edi,%esp # final %edi is top of merged stack + jmp 11b + + critical_fixup_table: - .byte 0x00,0x00,0x00 # testb $0xff,(%esi) = XEN_TEST_PENDING - .byte 0x00,0x00 # jnz 14f ++ .byte Ux00,Ux00,Ux00 # testb $0xff,(%esi) = XEN_TEST_PENDING ++ .byte Ux00,Ux00 # jnz 14f ++ XEN_UNLOCK_VCPU_INFO_SMP_fixup + .byte 0x00 # pop %ebx + .byte 0x04 # pop %ecx + .byte 0x08 # pop %edx + .byte 0x0c # pop %esi + .byte 0x10 # pop %edi + .byte 0x14 # pop %ebp + .byte 0x18 # pop %eax + .byte 0x1c # pop %ds + .byte 0x20 # pop %es + .byte 0x24,0x24,0x24 # add $4,%esp + .byte 0x28 # iret - .byte 0x00,0x00,0x00,0x00 # movb $1,1(%esi) ++ .byte Ux00,Ux00,Ux00,Ux00 # movb $1,1(%esi) ++ XEN_UNLOCK_VCPU_INFO_SMP_fixup + .byte 0x00,0x00 # jmp 11b + + # Hypervisor uses this for application faults while it executes. + ENTRY(failsafe_callback) + 1: popl %ds + 2: popl %es + 3: popl %fs + 4: popl %gs + subl $4,%esp + SAVE_ALL + jmp ret_from_exception + .section .fixup,"ax"; \ + 6: movl $0,(%esp); \ + jmp 1b; \ + 7: movl $0,(%esp); \ + jmp 2b; \ + 8: movl $0,(%esp); \ + jmp 3b; \ + 9: movl $0,(%esp); \ + jmp 4b; \ + .previous; \ + .section __ex_table,"a";\ + .align 4; \ + .long 1b,6b; \ + .long 2b,7b; \ + .long 3b,8b; \ + .long 4b,9b; \ + .previous + + ENTRY(coprocessor_error) + pushl $0 + pushl $do_coprocessor_error + jmp error_code + + ENTRY(simd_coprocessor_error) + pushl $0 + pushl $do_simd_coprocessor_error + jmp error_code + + ENTRY(device_not_available) + pushl $-1 # mark this as an int + SAVE_ALL + preempt_stop + call math_state_restore + jmp ret_from_exception + + /* + * Debug traps and NMI can happen at the one SYSENTER instruction + * that sets up the real kernel stack. Check here, since we can't + * allow the wrong stack to be used. + * + * "TSS_sysenter_esp0+12" is because the NMI/debug handler will have + * already pushed 3 words if it hits on the sysenter instruction: + * eflags, cs and eip. + * + * We just load the right stack, and push the three (known) values + * by hand onto the new stack - while updating the return eip past + * the instruction that would have done it for sysenter. + */ + #define FIX_STACK(offset, ok, label) \ + cmpw $__KERNEL_CS,4(%esp); \ + jne ok; \ + label: \ + movl TSS_sysenter_esp0+offset(%esp),%esp; \ + pushfl; \ + pushl $__KERNEL_CS; \ + pushl $sysenter_past_esp + + ENTRY(debug) + cmpl $sysenter_entry,(%esp) + jne debug_stack_correct + FIX_STACK(12, debug_stack_correct, debug_esp_fix_insn) + debug_stack_correct: + pushl $-1 # mark this as an int + SAVE_ALL + xorl %edx,%edx # error code 0 + movl %esp,%eax # pt_regs pointer + call do_debug + testl %eax,%eax + jnz restore_all + jmp ret_from_exception + + #if 0 /* XEN */ + /* + * NMI is doubly nasty. It can happen _while_ we're handling + * a debug fault, and the debug fault hasn't yet been able to + * clear up the stack. So we first check whether we got an + * NMI on the sysenter entry path, but after that we need to + * check whether we got an NMI on the debug path where the debug + * fault happened on the sysenter path. + */ + ENTRY(nmi) + cmpl $sysenter_entry,(%esp) + je nmi_stack_fixup + pushl %eax + movl %esp,%eax + /* Do not access memory above the end of our stack page, + * it might not exist. + */ + andl $(THREAD_SIZE-1),%eax + cmpl $(THREAD_SIZE-20),%eax + popl %eax + jae nmi_stack_correct + cmpl $sysenter_entry,12(%esp) + je nmi_debug_stack_check + nmi_stack_correct: + pushl %eax + SAVE_ALL + xorl %edx,%edx # zero error code + movl %esp,%eax # pt_regs pointer + call do_nmi + RESTORE_ALL + + nmi_stack_fixup: + FIX_STACK(12,nmi_stack_correct, 1) + jmp nmi_stack_correct + nmi_debug_stack_check: + cmpw $__KERNEL_CS,16(%esp) + jne nmi_stack_correct + cmpl $debug - 1,(%esp) + jle nmi_stack_correct + cmpl $debug_esp_fix_insn,(%esp) + jle nmi_debug_stack_fixup + nmi_debug_stack_fixup: + FIX_STACK(24,nmi_stack_correct, 1) + jmp nmi_stack_correct + #endif /* XEN */ + + ENTRY(int3) + pushl $-1 # mark this as an int + SAVE_ALL + xorl %edx,%edx # zero error code + movl %esp,%eax # pt_regs pointer + call do_int3 + testl %eax,%eax + jnz restore_all + jmp ret_from_exception + + ENTRY(overflow) + pushl $0 + pushl $do_overflow + jmp error_code + + ENTRY(bounds) + pushl $0 + pushl $do_bounds + jmp error_code + + ENTRY(invalid_op) + pushl $0 + pushl $do_invalid_op + jmp error_code + + ENTRY(coprocessor_segment_overrun) + pushl $0 + pushl $do_coprocessor_segment_overrun + jmp error_code + + ENTRY(invalid_TSS) + pushl $do_invalid_TSS + jmp error_code + + ENTRY(segment_not_present) + pushl $do_segment_not_present + jmp error_code + + ENTRY(stack_segment) + pushl $do_stack_segment + jmp error_code + + ENTRY(general_protection) + pushl $do_general_protection + jmp error_code + + ENTRY(alignment_check) + pushl $do_alignment_check + jmp error_code + + # This handler is special, because it gets an extra value on its stack, + # which is the linear faulting address. + # fastcall register usage: %eax = pt_regs, %edx = error code, + # %ecx = fault address + ENTRY(page_fault) + pushl %ds + pushl %eax + xorl %eax, %eax + pushl %ebp + pushl %edi + pushl %esi + pushl %edx + decl %eax /* eax = -1 */ + pushl %ecx + pushl %ebx + cld + movl %es,%edi + movl ES(%esp), %ecx /* get the faulting address */ + movl ORIG_EAX(%esp), %edx /* get the error code */ + movl %eax, ORIG_EAX(%esp) + movl %edi, ES(%esp) + movl $(__KERNEL_DS),%eax + movl %eax, %ds + movl %eax, %es + movl %esp,%eax /* pt_regs pointer */ + XEN_GET_VCPU_INFO(%esi) + XEN_SAVE_UPCALL_MASK(%esi,%bl,EVENT_MASK) + call do_page_fault + jmp ret_from_exception + + #ifdef CONFIG_X86_MCE + ENTRY(machine_check) + pushl $0 + pushl machine_check_vector + jmp error_code + #endif + + ENTRY(fixup_4gb_segment) + pushl $do_fixup_4gb_segment + jmp error_code + + .data + ENTRY(sys_call_table) + .long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */ + .long sys_exit + .long sys_fork + .long sys_read + .long sys_write + .long sys_open /* 5 */ + .long sys_close + .long sys_waitpid + .long sys_creat + .long sys_link + .long sys_unlink /* 10 */ + .long sys_execve + .long sys_chdir + .long sys_time + .long sys_mknod + .long sys_chmod /* 15 */ + .long sys_lchown16 + .long sys_ni_syscall /* old break syscall holder */ + .long sys_stat + .long sys_lseek + .long sys_getpid /* 20 */ + .long sys_mount + .long sys_oldumount + .long sys_setuid16 + .long sys_getuid16 + .long sys_stime /* 25 */ + .long sys_ptrace + .long sys_alarm + .long sys_fstat + .long sys_pause + .long sys_utime /* 30 */ + .long sys_ni_syscall /* old stty syscall holder */ + .long sys_ni_syscall /* old gtty syscall holder */ + .long sys_access + .long sys_nice + .long sys_ni_syscall /* 35 - old ftime syscall holder */ + .long sys_sync + .long sys_kill + .long sys_rename + .long sys_mkdir + .long sys_rmdir /* 40 */ + .long sys_dup + .long sys_pipe + .long sys_times + .long sys_ni_syscall /* old prof syscall holder */ + .long sys_brk /* 45 */ + .long sys_setgid16 + .long sys_getgid16 + .long sys_signal + .long sys_geteuid16 + .long sys_getegid16 /* 50 */ + .long sys_acct + .long sys_umount /* recycled never used phys() */ + .long sys_ni_syscall /* old lock syscall holder */ + .long sys_ioctl + .long sys_fcntl /* 55 */ + .long sys_ni_syscall /* old mpx syscall holder */ + .long sys_setpgid + .long sys_ni_syscall /* old ulimit syscall holder */ + .long sys_olduname + .long sys_umask /* 60 */ + .long sys_chroot + .long sys_ustat + .long sys_dup2 + .long sys_getppid + .long sys_getpgrp /* 65 */ + .long sys_setsid + .long sys_sigaction + .long sys_sgetmask + .long sys_ssetmask + .long sys_setreuid16 /* 70 */ + .long sys_setregid16 + .long sys_sigsuspend + .long sys_sigpending + .long sys_sethostname + .long sys_setrlimit /* 75 */ + .long sys_old_getrlimit + .long sys_getrusage + .long sys_gettimeofday + .long sys_settimeofday + .long sys_getgroups16 /* 80 */ + .long sys_setgroups16 + .long old_select + .long sys_symlink + .long sys_lstat + .long sys_readlink /* 85 */ + .long sys_uselib + .long sys_swapon + .long sys_reboot + .long old_readdir + .long old_mmap /* 90 */ + .long sys_munmap + .long sys_truncate + .long sys_ftruncate + .long sys_fchmod + .long sys_fchown16 /* 95 */ + .long sys_getpriority + .long sys_setpriority + .long sys_ni_syscall /* old profil syscall holder */ + .long sys_statfs + .long sys_fstatfs /* 100 */ + .long sys_ioperm + .long sys_socketcall + .long sys_syslog + .long sys_setitimer + .long sys_getitimer /* 105 */ + .long sys_newstat + .long sys_newlstat + .long sys_newfstat + .long sys_uname + .long sys_iopl /* 110 */ + .long sys_vhangup + .long sys_ni_syscall /* old "idle" system call */ + .long sys_vm86old + .long sys_wait4 + .long sys_swapoff /* 115 */ + .long sys_sysinfo + .long sys_ipc + .long sys_fsync + .long sys_sigreturn + .long sys_clone /* 120 */ + .long sys_setdomainname + .long sys_newuname + .long sys_modify_ldt + .long sys_adjtimex + .long sys_mprotect /* 125 */ + .long sys_sigprocmask + .long sys_ni_syscall /* old "create_module" */ + .long sys_init_module + .long sys_delete_module + .long sys_ni_syscall /* 130: old "get_kernel_syms" */ + .long sys_quotactl + .long sys_getpgid + .long sys_fchdir + .long sys_bdflush + .long sys_sysfs /* 135 */ + .long sys_personality + .long sys_ni_syscall /* reserved for afs_syscall */ + .long sys_setfsuid16 + .long sys_setfsgid16 + .long sys_llseek /* 140 */ + .long sys_getdents + .long sys_select + .long sys_flock + .long sys_msync + .long sys_readv /* 145 */ + .long sys_writev + .long sys_getsid + .long sys_fdatasync + .long sys_sysctl + .long sys_mlock /* 150 */ + .long sys_munlock + .long sys_mlockall + .long sys_munlockall + .long sys_sched_setparam + .long sys_sched_getparam /* 155 */ + .long sys_sched_setscheduler + .long sys_sched_getscheduler + .long sys_sched_yield + .long sys_sched_get_priority_max + .long sys_sched_get_priority_min /* 160 */ + .long sys_sched_rr_get_interval + .long sys_nanosleep + .long sys_mremap + .long sys_setresuid16 + .long sys_getresuid16 /* 165 */ + .long sys_vm86 + .long sys_ni_syscall /* Old sys_query_module */ + .long sys_poll + .long sys_nfsservctl + .long sys_setresgid16 /* 170 */ + .long sys_getresgid16 + .long sys_prctl + .long sys_rt_sigreturn + .long sys_rt_sigaction + .long sys_rt_sigprocmask /* 175 */ + .long sys_rt_sigpending + .long sys_rt_sigtimedwait + .long sys_rt_sigqueueinfo + .long sys_rt_sigsuspend + .long sys_pread64 /* 180 */ + .long sys_pwrite64 + .long sys_chown16 + .long sys_getcwd + .long sys_capget + .long sys_capset /* 185 */ + .long sys_sigaltstack + .long sys_sendfile + .long sys_ni_syscall /* reserved for streams1 */ + .long sys_ni_syscall /* reserved for streams2 */ + .long sys_vfork /* 190 */ + .long sys_getrlimit + .long sys_mmap2 + .long sys_truncate64 + .long sys_ftruncate64 + .long sys_stat64 /* 195 */ + .long sys_lstat64 + .long sys_fstat64 + .long sys_lchown + .long sys_getuid + .long sys_getgid /* 200 */ + .long sys_geteuid + .long sys_getegid + .long sys_setreuid + .long sys_setregid + .long sys_getgroups /* 205 */ + .long sys_setgroups + .long sys_fchown + .long sys_setresuid + .long sys_getresuid + .long sys_setresgid /* 210 */ + .long sys_getresgid + .long sys_chown + .long sys_setuid + .long sys_setgid + .long sys_setfsuid /* 215 */ + .long sys_setfsgid + .long sys_pivot_root + .long sys_mincore + .long sys_madvise + .long sys_getdents64 /* 220 */ + .long sys_fcntl64 + .long sys_ni_syscall /* reserved for TUX */ + .long sys_ni_syscall + .long sys_gettid + .long sys_readahead /* 225 */ + .long sys_setxattr + .long sys_lsetxattr + .long sys_fsetxattr + .long sys_getxattr + .long sys_lgetxattr /* 230 */ + .long sys_fgetxattr + .long sys_listxattr + .long sys_llistxattr + .long sys_flistxattr + .long sys_removexattr /* 235 */ + .long sys_lremovexattr + .long sys_fremovexattr + .long sys_tkill + .long sys_sendfile64 + .long sys_futex /* 240 */ + .long sys_sched_setaffinity + .long sys_sched_getaffinity + .long sys_set_thread_area + .long sys_get_thread_area + .long sys_io_setup /* 245 */ + .long sys_io_destroy + .long sys_io_getevents + .long sys_io_submit + .long sys_io_cancel + .long sys_fadvise64 /* 250 */ + .long sys_ni_syscall + .long sys_exit_group + .long sys_lookup_dcookie + .long sys_epoll_create + .long sys_epoll_ctl /* 255 */ + .long sys_epoll_wait + .long sys_remap_file_pages + .long sys_set_tid_address + .long sys_timer_create + .long sys_timer_settime /* 260 */ + .long sys_timer_gettime + .long sys_timer_getoverrun + .long sys_timer_delete + .long sys_clock_settime + .long sys_clock_gettime /* 265 */ + .long sys_clock_getres + .long sys_clock_nanosleep + .long sys_statfs64 + .long sys_fstatfs64 + .long sys_tgkill /* 270 */ + .long sys_utimes + .long sys_fadvise64_64 + .long sys_ni_syscall /* sys_vserver */ + .long sys_mbind + .long sys_get_mempolicy + .long sys_set_mempolicy + .long sys_mq_open + .long sys_mq_unlink + .long sys_mq_timedsend + .long sys_mq_timedreceive /* 280 */ + .long sys_mq_notify + .long sys_mq_getsetattr + .long sys_ni_syscall /* reserved for kexec */ + .long sys_waitid + .long sys_ni_syscall /* 285 */ /* available */ + .long sys_add_key + .long sys_request_key + .long sys_keyctl + + syscall_table_size=(.-sys_call_table) diff --cc linux-2.6.11-xen-sparse/arch/xen/i386/kernel/head.S index 0000000000,b8ac0568da..8b998ea003 mode 000000,100644..100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/head.S +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/head.S @@@ -1,0 -1,167 +1,185 @@@ + + #include + + .section __xen_guest - .ascii "GUEST_OS=linux,GUEST_VER=2.6,XEN_VER=2.0,VIRT_BASE=0xC0000000" ++ .ascii "GUEST_OS=linux,GUEST_VER=2.6,XEN_VER=3.0,VIRT_BASE=0xC0000000" + .ascii ",LOADER=generic" + .ascii ",PT_MODE_WRITABLE" + .byte 0 + + .text + #include + #include + #include + #include + #include + #include + + /* + * References to members of the new_cpu_data structure. + */ + + #define X86 new_cpu_data+CPUINFO_x86 + #define X86_VENDOR new_cpu_data+CPUINFO_x86_vendor + #define X86_MODEL new_cpu_data+CPUINFO_x86_model + #define X86_MASK new_cpu_data+CPUINFO_x86_mask + #define X86_HARD_MATH new_cpu_data+CPUINFO_hard_math + #define X86_CPUID new_cpu_data+CPUINFO_cpuid_level + #define X86_CAPABILITY new_cpu_data+CPUINFO_x86_capability + #define X86_VENDOR_ID new_cpu_data+CPUINFO_x86_vendor_id + + ENTRY(startup_32) + cld + - /* Set up the stack pointer */ - lss stack_start,%esp - + /* Copy the necessary stuff from xen_start_info structure. */ + mov $xen_start_info_union,%edi + mov $128,%ecx + rep movsl + ++#ifdef CONFIG_SMP ++ENTRY(startup_32_smp) ++ cld ++#endif /* CONFIG_SMP */ ++ ++ /* Set up the stack pointer */ ++ lss stack_start,%esp ++ + checkCPUtype: + + /* get vendor info */ + xorl %eax,%eax # call CPUID with 0 -> return vendor ID + cpuid + movl %eax,X86_CPUID # save CPUID level + movl %ebx,X86_VENDOR_ID # lo 4 chars + movl %edx,X86_VENDOR_ID+4 # next 4 chars + movl %ecx,X86_VENDOR_ID+8 # last 4 chars + + movl $1,%eax # Use the CPUID instruction to get CPU type + cpuid + movb %al,%cl # save reg for future use + andb $0x0f,%ah # mask processor family + movb %ah,X86 + andb $0xf0,%al # mask model + shrb $4,%al + movb %al,X86_MODEL + andb $0x0f,%cl # mask mask revision + movb %cl,X86_MASK + movl %edx,X86_CAPABILITY + ++ incb ready ++ + xorl %eax,%eax # Clear FS/GS and LDT + movl %eax,%fs + movl %eax,%gs + cld # gcc2 wants the direction flag cleared at all times + ++#ifdef CONFIG_SMP ++ movb ready, %cl ++ cmpb $1,%cl ++ je 1f # the first CPU calls start_kernel ++ # all other CPUs call initialize_secondary ++ call initialize_secondary ++ jmp L6 ++1: ++#endif /* CONFIG_SMP */ + call start_kernel + L6: + jmp L6 # main should never return here, but + # just in case, we know what happens. + + ENTRY(lgdt_finish) + movl $(__KERNEL_DS),%eax # reload all the segment registers + movw %ax,%ss # after changing gdt. + + movl $(__USER_DS),%eax # DS/ES contains default USER segment + movw %ax,%ds + movw %ax,%es + + popl %eax # reload CS by intersegment return + pushl $(__KERNEL_CS) + pushl %eax + lret + + ENTRY(stack_start) + .long init_thread_union+THREAD_SIZE + .long __BOOT_DS + ++ready: .byte 0 ++ + .globl idt_descr + .globl cpu_gdt_descr + + ALIGN + .word 0 # 32-bit align idt_desc.address + idt_descr: + .word IDT_ENTRIES*8-1 # idt contains 256 entries + .long idt_table + + # boot GDT descriptor (later on used by CPU#0): + .word 0 # 32 bit align gdt_desc.address + cpu_gdt_descr: + .word GDT_SIZE + .long cpu_gdt_table + + .fill NR_CPUS-1,8,0 # space for the other GDT descriptors + + .org 0x1000 + ENTRY(empty_zero_page) + + .org 0x2000 + ENTRY(swapper_pg_dir) + + .org 0x3000 + ENTRY(cpu_gdt_table) + .quad 0x0000000000000000 /* NULL descriptor */ + .quad 0x0000000000000000 /* 0x0b reserved */ + .quad 0x0000000000000000 /* 0x13 reserved */ + .quad 0x0000000000000000 /* 0x1b reserved */ + .quad 0x0000000000000000 /* 0x20 unused */ + .quad 0x0000000000000000 /* 0x28 unused */ + .quad 0x0000000000000000 /* 0x33 TLS entry 1 */ + .quad 0x0000000000000000 /* 0x3b TLS entry 2 */ + .quad 0x0000000000000000 /* 0x43 TLS entry 3 */ + .quad 0x0000000000000000 /* 0x4b reserved */ + .quad 0x0000000000000000 /* 0x53 reserved */ + .quad 0x0000000000000000 /* 0x5b reserved */ + + .quad 0x00cfbb000000c3ff /* 0x60 kernel 4GB code at 0x00000000 */ + .quad 0x00cfb3000000c3ff /* 0x68 kernel 4GB data at 0x00000000 */ + .quad 0x00cffb000000c3ff /* 0x73 user 4GB code at 0x00000000 */ + .quad 0x00cff3000000c3ff /* 0x7b user 4GB data at 0x00000000 */ + + .quad 0x0000000000000000 /* 0x80 TSS descriptor */ + .quad 0x0000000000000000 /* 0x88 LDT descriptor */ + + /* Segments used for calling PnP BIOS */ + .quad 0x0000000000000000 /* 0x90 32-bit code */ + .quad 0x0000000000000000 /* 0x98 16-bit code */ + .quad 0x0000000000000000 /* 0xa0 16-bit data */ + .quad 0x0000000000000000 /* 0xa8 16-bit data */ + .quad 0x0000000000000000 /* 0xb0 16-bit data */ + /* + * The APM segments have byte granularity and their bases + * and limits are set at run time. + */ + .quad 0x0000000000000000 /* 0xb8 APM CS code */ + .quad 0x0000000000000000 /* 0xc0 APM CS 16 code (16 bit) */ + .quad 0x0000000000000000 /* 0xc8 APM DS data */ + + .quad 0x0000000000000000 /* 0xd0 - unused */ + .quad 0x0000000000000000 /* 0xd8 - unused */ + .quad 0x0000000000000000 /* 0xe0 - unused */ + .quad 0x0000000000000000 /* 0xe8 - unused */ + .quad 0x0000000000000000 /* 0xf0 - unused */ + .quad 0x0000000000000000 /* 0xf8 - GDT entry 31: double-fault TSS */ + .fill GDT_ENTRIES-32,8,0 + + .org 0x4000 + ENTRY(default_ldt) + + .org 0x5000 + /* + * Real beginning of normal "text" segment + */ + ENTRY(stext) + ENTRY(_stext) diff --cc linux-2.6.11-xen-sparse/arch/xen/i386/kernel/process.c index 0000000000,6500ff9a2c..ce5ab25a4e mode 000000,100644..100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/process.c +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/process.c @@@ -1,0 -1,785 +1,783 @@@ + /* + * linux/arch/i386/kernel/process.c + * + * Copyright (C) 1995 Linus Torvalds + * + * Pentium III FXSR, SSE support + * Gareth Hughes , May 2000 + */ + + /* + * This file handles the architecture-dependent parts of process handling.. + */ + + #include + + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #ifdef CONFIG_MATH_EMULATION + #include + #endif + + #include + #include + + asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); + + int hlt_counter; + + unsigned long boot_option_idle_override = 0; + EXPORT_SYMBOL(boot_option_idle_override); + + /* + * Return saved PC of a blocked thread. + */ + unsigned long thread_saved_pc(struct task_struct *tsk) + { + return ((unsigned long *)tsk->thread.esp)[3]; + } + + /* + * Powermanagement idle function, if any.. + */ + void (*pm_idle)(void); + static cpumask_t cpu_idle_map; + + void disable_hlt(void) + { + hlt_counter++; + } + + EXPORT_SYMBOL(disable_hlt); + + void enable_hlt(void) + { + hlt_counter--; + } + + EXPORT_SYMBOL(enable_hlt); + + /* XXX XEN doesn't use default_idle(), poll_idle(). Use xen_idle() instead. */ + extern int set_timeout_timer(void); + void xen_idle(void) + { - int cpu = smp_processor_id(); ++ int cpu; + + local_irq_disable(); + ++ cpu = smp_processor_id(); + if (rcu_pending(cpu)) + rcu_check_callbacks(cpu, 0); + + if (need_resched()) { + local_irq_enable(); + } else if (set_timeout_timer() == 0) { + /* NB. Blocking reenable events in a race-free manner. */ + HYPERVISOR_block(); + } else { + local_irq_enable(); + HYPERVISOR_yield(); + } + } + + /* + * The idle thread. There's no useful work to be + * done, so just try to conserve power and have a + * low exit latency (ie sit in a loop waiting for + * somebody to say that they'd like to reschedule) + */ + void cpu_idle (void) + { + int cpu = _smp_processor_id(); + + /* endless idle loop with no priority at all */ + while (1) { + while (!need_resched()) { + + if (cpu_isset(cpu, cpu_idle_map)) + cpu_clear(cpu, cpu_idle_map); + rmb(); + + irq_stat[cpu].idle_timestamp = jiffies; + xen_idle(); + } + schedule(); + } + } + + void cpu_idle_wait(void) + { + int cpu; + cpumask_t map; + + for_each_online_cpu(cpu) + cpu_set(cpu, cpu_idle_map); + + wmb(); + do { + ssleep(1); + cpus_and(map, cpu_idle_map, cpu_online_map); + } while (!cpus_empty(map)); + } + EXPORT_SYMBOL_GPL(cpu_idle_wait); + + /* XXX XEN doesn't use mwait_idle(), select_idle_routine(), idle_setup(). */ + /* Always use xen_idle() instead. */ + void __init select_idle_routine(const struct cpuinfo_x86 *c) {} + + void show_regs(struct pt_regs * regs) + { + printk("\n"); + printk("Pid: %d, comm: %20s\n", current->pid, current->comm); + printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, smp_processor_id()); + print_symbol("EIP is at %s\n", regs->eip); + + if (regs->xcs & 2) + printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp); + printk(" EFLAGS: %08lx %s (%s)\n", + regs->eflags, print_tainted(),UTS_RELEASE); + printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n", + regs->eax,regs->ebx,regs->ecx,regs->edx); + printk("ESI: %08lx EDI: %08lx EBP: %08lx", + regs->esi, regs->edi, regs->ebp); + printk(" DS: %04x ES: %04x\n", + 0xffff & regs->xds,0xffff & regs->xes); + + show_trace(NULL, ®s->esp); + } + + /* + * This gets run with %ebx containing the + * function to call, and %edx containing + * the "args". + */ + extern void kernel_thread_helper(void); + __asm__(".section .text\n" + ".align 4\n" + "kernel_thread_helper:\n\t" + "movl %edx,%eax\n\t" + "pushl %edx\n\t" + "call *%ebx\n\t" + "pushl %eax\n\t" + "call do_exit\n" + ".previous"); + + /* + * Create a kernel thread + */ + int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) + { + struct pt_regs regs; + + memset(®s, 0, sizeof(regs)); + + regs.ebx = (unsigned long) fn; + regs.edx = (unsigned long) arg; + + regs.xds = __USER_DS; + regs.xes = __USER_DS; + regs.orig_eax = -1; + regs.eip = (unsigned long) kernel_thread_helper; + regs.xcs = __KERNEL_CS; + regs.eflags = X86_EFLAGS_IF | X86_EFLAGS_SF | X86_EFLAGS_PF | 0x2; + + /* Ok, create the new process.. */ + return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0, NULL, NULL); + } + + /* + * Free current thread data structures etc.. + */ + void exit_thread(void) + { + struct task_struct *tsk = current; + struct thread_struct *t = &tsk->thread; + + /* The process may have allocated an io port bitmap... nuke it. */ + if (unlikely(NULL != t->io_bitmap_ptr)) { + int cpu = get_cpu(); + struct tss_struct *tss = &per_cpu(init_tss, cpu); + + kfree(t->io_bitmap_ptr); + t->io_bitmap_ptr = NULL; + /* + * Careful, clear this in the TSS too: + */ + memset(tss->io_bitmap, 0xff, tss->io_bitmap_max); + t->io_bitmap_max = 0; + tss->io_bitmap_owner = NULL; + tss->io_bitmap_max = 0; + tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET; + put_cpu(); + } + } + + void flush_thread(void) + { + struct task_struct *tsk = current; + + memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8); + memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); + /* + * Forget coprocessor state.. + */ + clear_fpu(tsk); + clear_used_math(); + } + + void release_thread(struct task_struct *dead_task) + { + if (dead_task->mm) { + // temporary debugging check + if (dead_task->mm->context.size) { + printk("WARNING: dead process %8s still has LDT? <%p/%d>\n", + dead_task->comm, + dead_task->mm->context.ldt, + dead_task->mm->context.size); + BUG(); + } + } + + release_vm86_irqs(dead_task); + } + + /* + * This gets called before we allocate a new thread and copy + * the current task into it. + */ + void prepare_to_copy(struct task_struct *tsk) + { + unlazy_fpu(tsk); + } + + int copy_thread(int nr, unsigned long clone_flags, unsigned long esp, + unsigned long unused, + struct task_struct * p, struct pt_regs * regs) + { + struct pt_regs * childregs; + struct task_struct *tsk; + int err; - unsigned long eflags; + + childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p->thread_info)) - 1; + *childregs = *regs; + childregs->eax = 0; + childregs->esp = esp; + + p->thread.esp = (unsigned long) childregs; + p->thread.esp0 = (unsigned long) (childregs+1); + + p->thread.eip = (unsigned long) ret_from_fork; + + savesegment(fs,p->thread.fs); + savesegment(gs,p->thread.gs); + + tsk = current; + if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) { + p->thread.io_bitmap_ptr = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL); + if (!p->thread.io_bitmap_ptr) { + p->thread.io_bitmap_max = 0; + return -ENOMEM; + } + memcpy(p->thread.io_bitmap_ptr, tsk->thread.io_bitmap_ptr, + IO_BITMAP_BYTES); + } + + /* + * Set a new TLS for the child thread? + */ + if (clone_flags & CLONE_SETTLS) { + struct desc_struct *desc; + struct user_desc info; + int idx; + + err = -EFAULT; + if (copy_from_user(&info, (void __user *)childregs->esi, sizeof(info))) + goto out; + err = -EINVAL; + if (LDT_empty(&info)) + goto out; + + idx = info.entry_number; + if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX) + goto out; + + desc = p->thread.tls_array + idx - GDT_ENTRY_TLS_MIN; + desc->a = LDT_entry_a(&info); + desc->b = LDT_entry_b(&info); + } + - - __asm__ __volatile__ ( "pushfl; popl %0" : "=r" (eflags) : ); - p->thread.io_pl = (eflags >> 12) & 3; ++ p->thread.io_pl = current->thread.io_pl; + + err = 0; + out: + if (err && p->thread.io_bitmap_ptr) { + kfree(p->thread.io_bitmap_ptr); + p->thread.io_bitmap_max = 0; + } + return err; + } + + /* + * fill in the user structure for a core dump.. + */ + void dump_thread(struct pt_regs * regs, struct user * dump) + { + int i; + + /* changed the size calculations - should hopefully work better. lbt */ + dump->magic = CMAGIC; + dump->start_code = 0; + dump->start_stack = regs->esp & ~(PAGE_SIZE - 1); + dump->u_tsize = ((unsigned long) current->mm->end_code) >> PAGE_SHIFT; + dump->u_dsize = ((unsigned long) (current->mm->brk + (PAGE_SIZE-1))) >> PAGE_SHIFT; + dump->u_dsize -= dump->u_tsize; + dump->u_ssize = 0; + for (i = 0; i < 8; i++) + dump->u_debugreg[i] = current->thread.debugreg[i]; + + if (dump->start_stack < TASK_SIZE) + dump->u_ssize = ((unsigned long) (TASK_SIZE - dump->start_stack)) >> PAGE_SHIFT; + + dump->regs.ebx = regs->ebx; + dump->regs.ecx = regs->ecx; + dump->regs.edx = regs->edx; + dump->regs.esi = regs->esi; + dump->regs.edi = regs->edi; + dump->regs.ebp = regs->ebp; + dump->regs.eax = regs->eax; + dump->regs.ds = regs->xds; + dump->regs.es = regs->xes; + savesegment(fs,dump->regs.fs); + savesegment(gs,dump->regs.gs); + dump->regs.orig_eax = regs->orig_eax; + dump->regs.eip = regs->eip; + dump->regs.cs = regs->xcs; + dump->regs.eflags = regs->eflags; + dump->regs.esp = regs->esp; + dump->regs.ss = regs->xss; + + dump->u_fpvalid = dump_fpu (regs, &dump->i387); + } + + /* + * Capture the user space registers if the task is not running (in user space) + */ + int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs) + { + struct pt_regs ptregs; + + ptregs = *(struct pt_regs *) + ((unsigned long)tsk->thread_info+THREAD_SIZE - sizeof(ptregs)); + ptregs.xcs &= 0xffff; + ptregs.xds &= 0xffff; + ptregs.xes &= 0xffff; + ptregs.xss &= 0xffff; + + elf_core_copy_regs(regs, &ptregs); + + boot_option_idle_override = 1; + return 1; + } + + static inline void + handle_io_bitmap(struct thread_struct *next, struct tss_struct *tss) + { + if (!next->io_bitmap_ptr) { + /* + * Disable the bitmap via an invalid offset. We still cache + * the previous bitmap owner and the IO bitmap contents: + */ + tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET; + return; + } + if (likely(next == tss->io_bitmap_owner)) { + /* + * Previous owner of the bitmap (hence the bitmap content) + * matches the next task, we dont have to do anything but + * to set a valid offset in the TSS: + */ + tss->io_bitmap_base = IO_BITMAP_OFFSET; + return; + } + /* + * Lazy TSS's I/O bitmap copy. We set an invalid offset here + * and we let the task to get a GPF in case an I/O instruction + * is performed. The handler of the GPF will verify that the + * faulting task has a valid I/O bitmap and, it true, does the + * real copy and restart the instruction. This will save us + * redundant copies when the currently switched task does not + * perform any I/O during its timeslice. + */ + tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET_LAZY; + } + /* + * This special macro can be used to load a debugging register + */ + #define loaddebug(thread,register) \ + HYPERVISOR_set_debugreg((register), \ + (thread->debugreg[register])) + + /* + * switch_to(x,yn) should switch tasks from x to y. + * + * We fsave/fwait so that an exception goes off at the right time + * (as a call from the fsave or fwait in effect) rather than to + * the wrong process. Lazy FP saving no longer makes any sense + * with modern CPU's, and this simplifies a lot of things (SMP + * and UP become the same). + * + * NOTE! We used to use the x86 hardware context switching. The + * reason for not using it any more becomes apparent when you + * try to recover gracefully from saved state that is no longer + * valid (stale segment register values in particular). With the + * hardware task-switch, there is no way to fix up bad state in + * a reasonable manner. + * + * The fact that Intel documents the hardware task-switching to + * be slow is a fairly red herring - this code is not noticeably + * faster. However, there _is_ some room for improvement here, + * so the performance issues may eventually be a valid point. + * More important, however, is the fact that this allows us much + * more flexibility. + * + * The return value (in %eax) will be the "prev" task after + * the task-switch, and shows up in ret_from_fork in entry.S, + * for example. + */ + struct task_struct fastcall * __switch_to(struct task_struct *prev_p, struct task_struct *next_p) + { + struct thread_struct *prev = &prev_p->thread, + *next = &next_p->thread; + int cpu = smp_processor_id(); + struct tss_struct *tss = &per_cpu(init_tss, cpu); + dom0_op_t op; + + /* NB. No need to disable interrupts as already done in sched.c */ + /* __cli(); */ + + /* + * Save away %fs and %gs. No need to save %es and %ds, as + * those are always kernel segments while inside the kernel. + */ + asm volatile("movl %%fs,%0":"=m" (*(int *)&prev->fs)); + asm volatile("movl %%gs,%0":"=m" (*(int *)&prev->gs)); + + /* + * We clobber FS and GS here so that we avoid a GPF when restoring + * previous task's FS/GS values in Xen when the LDT is switched. + */ + __asm__ __volatile__ ( + "xorl %%eax,%%eax; movl %%eax,%%fs; movl %%eax,%%gs" : : : + "eax" ); + + MULTICALL_flush_page_update_queue(); + + /* never put a printk in __switch_to... printk() calls wake_up*() indirectly */ + + /* + * This is basically '__unlazy_fpu', except that we queue a + * multicall to indicate FPU task switch, rather than + * synchronously trapping to Xen. + */ + if (prev_p->thread_info->status & TS_USEDFPU) { + __save_init_fpu(prev_p); /* _not_ save_init_fpu() */ - queue_multicall0(__HYPERVISOR_fpu_taskswitch); ++ queue_multicall1(__HYPERVISOR_fpu_taskswitch, 1); + } + + /* + * Reload esp0, LDT and the page table pointer: + * This is load_esp0(tss, next) with a multicall. + */ + tss->esp0 = next->esp0; + queue_multicall2(__HYPERVISOR_stack_switch, tss->ss0, tss->esp0); + + /* + * Load the per-thread Thread-Local Storage descriptor. + * This is load_TLS(next, cpu) with multicalls. + */ + #define C(i) do { \ + if (unlikely(next->tls_array[i].a != prev->tls_array[i].a || \ + next->tls_array[i].b != prev->tls_array[i].b)) \ + 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]); \ + } while (0) + C(0); C(1); C(2); + #undef C + + if (xen_start_info.flags & SIF_PRIVILEGED) { + op.cmd = DOM0_IOPL; + op.u.iopl.domain = DOMID_SELF; + op.u.iopl.iopl = next->io_pl; + op.interface_version = DOM0_INTERFACE_VERSION; + queue_multicall1(__HYPERVISOR_dom0_op, (unsigned long)&op); + } + + /* EXECUTE ALL TASK SWITCH XEN SYSCALLS AT THIS POINT. */ + execute_multicall_list(); + /* __sti(); */ + + /* + * Restore %fs and %gs if needed. + */ + if (unlikely(next->fs | next->gs)) { + loadsegment(fs, next->fs); + loadsegment(gs, next->gs); + } + + /* + * Now maybe reload the debug registers + */ + if (unlikely(next->debugreg[7])) { + loaddebug(next, 0); + loaddebug(next, 1); + loaddebug(next, 2); + loaddebug(next, 3); + /* no 4 and 5 */ + loaddebug(next, 6); + loaddebug(next, 7); + } + + if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr)) + handle_io_bitmap(next, tss); + + return prev_p; + } + + asmlinkage int sys_fork(struct pt_regs regs) + { + return do_fork(SIGCHLD, regs.esp, ®s, 0, NULL, NULL); + } + + asmlinkage int sys_clone(struct pt_regs regs) + { + unsigned long clone_flags; + unsigned long newsp; + int __user *parent_tidptr, *child_tidptr; + + clone_flags = regs.ebx; + newsp = regs.ecx; + parent_tidptr = (int __user *)regs.edx; + child_tidptr = (int __user *)regs.edi; + if (!newsp) + newsp = regs.esp; + return do_fork(clone_flags, newsp, ®s, 0, parent_tidptr, child_tidptr); + } + + /* + * This is trivial, and on the face of it looks like it + * could equally well be done in user mode. + * + * Not so, for quite unobvious reasons - register pressure. + * In user mode vfork() cannot have a stack frame, and if + * done by calling the "clone()" system call directly, you + * do not have enough call-clobbered registers to hold all + * the information you need. + */ + asmlinkage int sys_vfork(struct pt_regs regs) + { + return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs.esp, ®s, 0, NULL, NULL); + } + + /* + * sys_execve() executes a new program. + */ + asmlinkage int sys_execve(struct pt_regs regs) + { + int error; + char * filename; + + filename = getname((char __user *) regs.ebx); + error = PTR_ERR(filename); + if (IS_ERR(filename)) + goto out; + error = do_execve(filename, + (char __user * __user *) regs.ecx, + (char __user * __user *) regs.edx, + ®s); + if (error == 0) { + task_lock(current); + current->ptrace &= ~PT_DTRACE; + task_unlock(current); + /* Make sure we don't return using sysenter.. */ + set_thread_flag(TIF_IRET); + } + putname(filename); + out: + return error; + } + + #define top_esp (THREAD_SIZE - sizeof(unsigned long)) + #define top_ebp (THREAD_SIZE - 2*sizeof(unsigned long)) + + unsigned long get_wchan(struct task_struct *p) + { + unsigned long ebp, esp, eip; + unsigned long stack_page; + int count = 0; + if (!p || p == current || p->state == TASK_RUNNING) + return 0; + stack_page = (unsigned long)p->thread_info; + esp = p->thread.esp; + if (!stack_page || esp < stack_page || esp > top_esp+stack_page) + return 0; + /* include/asm-i386/system.h:switch_to() pushes ebp last. */ + ebp = *(unsigned long *) esp; + do { + if (ebp < stack_page || ebp > top_ebp+stack_page) + return 0; + eip = *(unsigned long *) (ebp+4); + if (!in_sched_functions(eip)) + return eip; + ebp = *(unsigned long *) ebp; + } while (count++ < 16); + return 0; + } + + /* + * sys_alloc_thread_area: get a yet unused TLS descriptor index. + */ + static int get_free_idx(void) + { + struct thread_struct *t = ¤t->thread; + int idx; + + for (idx = 0; idx < GDT_ENTRY_TLS_ENTRIES; idx++) + if (desc_empty(t->tls_array + idx)) + return idx + GDT_ENTRY_TLS_MIN; + return -ESRCH; + } + + /* + * Set a given TLS descriptor: + */ + asmlinkage int sys_set_thread_area(struct user_desc __user *u_info) + { + struct thread_struct *t = ¤t->thread; + struct user_desc info; + struct desc_struct *desc; + int cpu, idx; + + if (copy_from_user(&info, u_info, sizeof(info))) + return -EFAULT; + idx = info.entry_number; + + /* + * index -1 means the kernel should try to find and + * allocate an empty descriptor: + */ + if (idx == -1) { + idx = get_free_idx(); + if (idx < 0) + return idx; + if (put_user(idx, &u_info->entry_number)) + return -EFAULT; + } + + if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX) + return -EINVAL; + + desc = t->tls_array + idx - GDT_ENTRY_TLS_MIN; + + /* + * We must not get preempted while modifying the TLS. + */ + cpu = get_cpu(); + + if (LDT_empty(&info)) { + desc->a = 0; + desc->b = 0; + } else { + desc->a = LDT_entry_a(&info); + desc->b = LDT_entry_b(&info); + } + load_TLS(t, cpu); + + put_cpu(); + + return 0; + } + + /* + * Get the current Thread-Local Storage area: + */ + + #define GET_BASE(desc) ( \ + (((desc)->a >> 16) & 0x0000ffff) | \ + (((desc)->b << 16) & 0x00ff0000) | \ + ( (desc)->b & 0xff000000) ) + + #define GET_LIMIT(desc) ( \ + ((desc)->a & 0x0ffff) | \ + ((desc)->b & 0xf0000) ) + + #define GET_32BIT(desc) (((desc)->b >> 22) & 1) + #define GET_CONTENTS(desc) (((desc)->b >> 10) & 3) + #define GET_WRITABLE(desc) (((desc)->b >> 9) & 1) + #define GET_LIMIT_PAGES(desc) (((desc)->b >> 23) & 1) + #define GET_PRESENT(desc) (((desc)->b >> 15) & 1) + #define GET_USEABLE(desc) (((desc)->b >> 20) & 1) + + asmlinkage int sys_get_thread_area(struct user_desc __user *u_info) + { + struct user_desc info; + struct desc_struct *desc; + int idx; + + if (get_user(idx, &u_info->entry_number)) + return -EFAULT; + if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX) + return -EINVAL; + + desc = current->thread.tls_array + idx - GDT_ENTRY_TLS_MIN; + + info.entry_number = idx; + info.base_addr = GET_BASE(desc); + info.limit = GET_LIMIT(desc); + info.seg_32bit = GET_32BIT(desc); + info.contents = GET_CONTENTS(desc); + info.read_exec_only = !GET_WRITABLE(desc); + info.limit_in_pages = GET_LIMIT_PAGES(desc); + info.seg_not_present = !GET_PRESENT(desc); + info.useable = GET_USEABLE(desc); + + if (copy_to_user(u_info, &info, sizeof(info))) + return -EFAULT; + return 0; + } + diff --cc linux-2.6.11-xen-sparse/arch/xen/i386/kernel/setup.c index 0000000000,9b892b04ba..0096c6b6d5 mode 000000,100644..100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/setup.c +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/setup.c @@@ -1,0 -1,1607 +1,1608 @@@ + /* + * linux/arch/i386/kernel/setup.c + * + * Copyright (C) 1995 Linus Torvalds + * + * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999 + * + * Memory region support + * David Parsons , July-August 1999 + * + * Added E820 sanitization routine (removes overlapping memory regions); + * Brian Moyle , February 2001 + * + * Moved CPU detection code to cpu/${cpu}.c + * Patrick Mochel , March 2002 + * + * Provisions for empty E820 memory regions (reported by certain BIOSes). + * Alex Achenbach , December 2002. + * + */ + + /* + * This file handles the architecture-dependent parts of initialization + */ + + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include ++#include + #include