mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
bitkeeper revision 1.1159.1.272 (417d33eaZEb_tnkLdhSsCNFpEXrEiw)
Update to Linux 2.6.9.
This commit is contained in:
1 parent
070574bcbb
commit
45ee46cd82
139 files changed
+1814
-979
No files matched your search
@@ -124,143 +124,142 @@
|
||||
3e5a4e683HKVU-sxtagrDasRB8eBVw linux-2.4.27-xen-sparse/mm/swapfile.c
|
||||
41180721bNns9Na7w1nJ0ZVt8bhUNA linux-2.4.27-xen-sparse/mm/vmalloc.c
|
||||
41505c57WAd5l1rlfCLNSCpx9J13vA linux-2.4.27-xen-sparse/net/core/skbuff.c
|
||||
413aa1d0oNP8HXLvfPuMe6cSroUfSA linux-2.6.8.1-patches/agpgart.patch
|
||||
413aa1d0ewvSv-ohnNnQQNGsbPTTNA linux-2.6.8.1-patches/drm.patch
|
||||
40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.8.1-xen-sparse/arch/xen/Kconfig
|
||||
40f56237utH41NPukqHksuNf29IC9A linux-2.6.8.1-xen-sparse/arch/xen/Kconfig.drivers
|
||||
40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.8.1-xen-sparse/arch/xen/Makefile
|
||||
40f56237JTc60m1FRlUxkUaGSQKrNw linux-2.6.8.1-xen-sparse/arch/xen/boot/Makefile
|
||||
40f56237hRxbacU_3PdoAl6DjZ3Jnw linux-2.6.8.1-xen-sparse/arch/xen/configs/xen0_defconfig
|
||||
40f56237wubfjJKlfIzZlI3ZM2VgGA linux-2.6.8.1-xen-sparse/arch/xen/configs/xenU_defconfig
|
||||
40f56237Mta0yHNaMS_qtM2rge0qYA linux-2.6.8.1-xen-sparse/arch/xen/i386/Kconfig
|
||||
40f56238u2CJdXNpjsZgHBxeVyY-2g linux-2.6.8.1-xen-sparse/arch/xen/i386/Makefile
|
||||
40f56238eczveJ86k_4hNxCLRQIF-g linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/Makefile
|
||||
40f56238rXVTJQKbBuXXLH52qEArcg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/cpu/Makefile
|
||||
40f562385s4lr6Zg92gExe7UQ4A76Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/cpu/common.c
|
||||
40f56238XDtHSijkAFlbv1PT8Bhw_Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/entry.S
|
||||
40f56238bnvciAuyzAiMkdzGErYt1A linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/head.S
|
||||
40f58a0d31M2EkuPbG94ns_nOi0PVA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c
|
||||
40faa751_zbZlAmLyQgCXdYekVFdWA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/ioport.c
|
||||
40f562382aC3_Gt4RG-4ZsfvDRUg3Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/irq.c
|
||||
40f56238ue3YRsK52HG7iccNzP1AwQ linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/ldt.c
|
||||
4107adf1cNtsuOxOB4T6paAoY2R2PA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/pci-dma.c
|
||||
40f56238a8iOVDEoostsbun_sy2i4g linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/process.c
|
||||
40f56238YQIJoYG2ehDGEcdTgLmGbg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/setup.c
|
||||
40f56238nWMQg7CKbyTy0KJNvCzbtg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/signal.c
|
||||
40f56238UL9uv78ODDzMwLL9yryeFw linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/sysenter.c
|
||||
40f56238qVGkpO_ycnQA8k03kQzAgA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c
|
||||
40f56238NzTgeO63RGoxHrW5NQeO3Q linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/timers/Makefile
|
||||
40f56238BMqG5PuSHufpjbvp_helBw linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c
|
||||
40f562389xNa78YBZciUibQjyRU_Lg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/traps.c
|
||||
40f56238qASEI_IOhCKWNuwFKNZrKQ linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vmlinux.lds.S
|
||||
40f56238JypKAUG01ZojFwH7qnZ5uA linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vsyscall.S
|
||||
40f56238wi6AdNQjm0RT57bSkwb6hg linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/vsyscall.lds
|
||||
40f56238a3w6-byOzexIlMgni76Lcg linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/Makefile
|
||||
40f56238ILx8xlbywNbzTdv5Zr4xXQ linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/fault.c
|
||||
4118cc35CbY8rfGVspF5O-7EkXBEAA linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/highmem.c
|
||||
40f562383SKvDStdtrvzr5fyCbW4rw linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/hypervisor.c
|
||||
40f56239xcNylAxuGsQHwi1AyMLV8w linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/init.c
|
||||
41062ab7CjxC1UBaFhOMWWdhHkIUyg linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/ioremap.c
|
||||
413b5ab8LIowAnQrEmaOJSdmqm96jQ linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/pageattr.c
|
||||
40f5623906UYHv1rsVUeRc0tFT0dWw linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/pgtable.c
|
||||
4107adf12ndy94MidCaivDibJ3pPAg linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/Makefile
|
||||
4107adf1WcCgkhsdLTRGX52cOG1vJg linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/direct.c
|
||||
4107adf1s5u6249DNPUViX1YNagbUQ linux-2.6.8.1-xen-sparse/arch/xen/i386/pci/irq.c
|
||||
40f56239zOksGg_H4XD4ye6iZNtoZA linux-2.6.8.1-xen-sparse/arch/xen/kernel/Makefile
|
||||
40f56239bvOjuuuViZ0XMlNiREFC0A linux-2.6.8.1-xen-sparse/arch/xen/kernel/ctrl_if.c
|
||||
40f56239pYRq5yshPTkv3ujXKc8K6g linux-2.6.8.1-xen-sparse/arch/xen/kernel/empty.c
|
||||
40f56238xFQe9T7M_U_FItM-bZIpLw linux-2.6.8.1-xen-sparse/arch/xen/kernel/evtchn.c
|
||||
4110f478aeQWllIN7J4kouAHiAqrPw linux-2.6.8.1-xen-sparse/arch/xen/kernel/fixup.c
|
||||
412dfae9eA3_6e6bCGUtg1mj8b56fQ linux-2.6.8.1-xen-sparse/arch/xen/kernel/gnttab.c
|
||||
40f56239sFcjHiIRmnObRIDF-zaeKQ linux-2.6.8.1-xen-sparse/arch/xen/kernel/process.c
|
||||
40f562392LBhwmOxVPsYdkYXMxI_ZQ linux-2.6.8.1-xen-sparse/arch/xen/kernel/reboot.c
|
||||
414c113396tK1HTVeUalm3u-1DF16g linux-2.6.8.1-xen-sparse/arch/xen/kernel/skbuff.c
|
||||
3f68905c5eiA-lBMQSvXLMWS1ikDEA linux-2.6.8.1-xen-sparse/arch/xen/kernel/xen_proc.c
|
||||
41261688yS8eAyy-7kzG4KBs0xbYCA linux-2.6.8.1-xen-sparse/drivers/Makefile
|
||||
4108f5c1WfTIrs0HZFeV39sttekCTw linux-2.6.8.1-xen-sparse/drivers/char/mem.c
|
||||
4111308bZAIzwf_Kzu6x1TZYZ3E0_Q linux-2.6.8.1-xen-sparse/drivers/char/tty_io.c
|
||||
40f56239Dp_vMTgz8TEbvo1hjHGc3w linux-2.6.8.1-xen-sparse/drivers/xen/Makefile
|
||||
41768fbcncpBQf8s2l2-CwoSNIZ9uA linux-2.6.8.1-xen-sparse/drivers/xen/balloon/Makefile
|
||||
3e6377f8i5e9eGz7Pw6fQuhuTQ7DQg linux-2.6.8.1-xen-sparse/drivers/xen/balloon/balloon.c
|
||||
410d0893otFGghmv4dUXDUBBdY5aIA linux-2.6.8.1-xen-sparse/drivers/xen/blkback/Makefile
|
||||
4087cf0d1XgMkooTZAiJS6NrcpLQNQ linux-2.6.8.1-xen-sparse/drivers/xen/blkback/blkback.c
|
||||
4087cf0dZadZ8r6CEt4fNN350Yle3A linux-2.6.8.1-xen-sparse/drivers/xen/blkback/common.h
|
||||
4087cf0dxlh29iw0w-9rxOCEGCjPcw linux-2.6.8.1-xen-sparse/drivers/xen/blkback/control.c
|
||||
4087cf0dbuoH20fMjNZjcgrRK-1msQ linux-2.6.8.1-xen-sparse/drivers/xen/blkback/interface.c
|
||||
4087cf0dk97tacDzxfByWV7JifUYqA linux-2.6.8.1-xen-sparse/drivers/xen/blkback/vbd.c
|
||||
40f56239Sfle6wGv5FS0wjS_HI150A linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/Kconfig
|
||||
40f562395atl9x4suKGhPkjqLOXESg linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/Makefile
|
||||
40f56239-JNIaTzlviVJohVdoYOUpw linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/blkfront.c
|
||||
40f56239y9naBTXe40Pi2J_z3p-d1g linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/block.h
|
||||
40f56239BVfPsXBiWQitXgDRtOsiqg linux-2.6.8.1-xen-sparse/drivers/xen/blkfront/vbd.c
|
||||
40f56239fsLjvtD8YBRAWphps4FDjg linux-2.6.8.1-xen-sparse/drivers/xen/console/Makefile
|
||||
3e5a4e651TH-SXHoufurnWjgl5bfOA linux-2.6.8.1-xen-sparse/drivers/xen/console/console.c
|
||||
40f56239KYxO0YabhPzCTeUuln-lnA linux-2.6.8.1-xen-sparse/drivers/xen/evtchn/Makefile
|
||||
40f56239DoibTX6R-ZYd3QTXAB8_TA linux-2.6.8.1-xen-sparse/drivers/xen/evtchn/evtchn.c
|
||||
410a9817HEVJvred5Oy_uKH3HFJC5Q linux-2.6.8.1-xen-sparse/drivers/xen/netback/Makefile
|
||||
4097ba831lpGeLlPg-bfV8XarVVuoQ linux-2.6.8.1-xen-sparse/drivers/xen/netback/common.h
|
||||
4097ba83wvv8yi5P5xugCUBAdb6O-A linux-2.6.8.1-xen-sparse/drivers/xen/netback/control.c
|
||||
4097ba83byY5bTSugJGZ1exTxIcMKw linux-2.6.8.1-xen-sparse/drivers/xen/netback/interface.c
|
||||
4087cf0dGmSbFhFZyIZBJzvqxY-qBw linux-2.6.8.1-xen-sparse/drivers/xen/netback/netback.c
|
||||
40f56239lrg_Ob0BJ8WBFS1zeg2CYw linux-2.6.8.1-xen-sparse/drivers/xen/netfront/Kconfig
|
||||
40f56239Wd4k_ycG_mFsSO1r5xKdtQ linux-2.6.8.1-xen-sparse/drivers/xen/netfront/Makefile
|
||||
405853f6nbeazrNyEWNHBuoSg2PiPA linux-2.6.8.1-xen-sparse/drivers/xen/netfront/netfront.c
|
||||
4108f5c1ppFXVpQzCOAZ6xXYubsjKA linux-2.6.8.1-xen-sparse/drivers/xen/privcmd/Makefile
|
||||
3e5a4e65IUfzzMu2kZFlGEB8-rpTaA linux-2.6.8.1-xen-sparse/drivers/xen/privcmd/privcmd.c
|
||||
412f47e4RKD-R5IS5gEXvcT8L4v8gA linux-2.6.8.1-xen-sparse/include/asm-generic/pgtable.h
|
||||
40f56239YAjS52QG2FIAQpHDZAdGHg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/desc.h
|
||||
4107adf1E5O4ztGHNGMzCCNhcvqNow linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h
|
||||
40f5623akIoBsQ3KxSB2kufkbgONXQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/fixmap.h
|
||||
4118b6a418gnL6AZsTdglC92YGqYTg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/highmem.h
|
||||
40f5623aJVXQwpJMOLE99XgvGsfQ8Q linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/io.h
|
||||
40f5623am9BzluYFuV6EQfTd-so3dA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/do_timer.h
|
||||
40f5623adZQ1IZGPxbDXONjyZGYuTA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/io_ports.h
|
||||
40f5623aKXkBBxgpLx2NcvkncQ1Yyw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h
|
||||
40f5623aMQZoYuf4ml9v69N3gu8ing linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_mpspec.h
|
||||
40f5623a8LroVMnZ5YRzJJmIc-zHlw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_reboot.h
|
||||
40f5623an3wOvFKmpIvqSxQfWzklVQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_resources.h
|
||||
40f5623ayR1vnzfF__htza35a8Ft-g linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_time.h
|
||||
40f5623a4YdRdVzYWJzOOoqe8mnrXA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_timer.h
|
||||
40f5623aDLxmbOtUHvkWztKjAO4EjA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_traps.h
|
||||
41062ab7HMSSuaUv3_Z4agLpjSO88A linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/pci-functions.h
|
||||
40f5623aDMCsWOFO0jktZ4e8sjwvEg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h
|
||||
40f5623arsFXkGdPvIqvFi3yFXGR0Q linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h
|
||||
4120f807GCO0uqsLqdZj9csxR1Wthw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/mmu_context.h
|
||||
40f5623aFTyFTR-vdiA-KaGxk5JOKQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/msr.h
|
||||
40f5623adgjZq9nAgCt0IXdWl7udSA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/page.h
|
||||
40f5623a54NuG-7qHihGYmw4wWQnMA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/param.h
|
||||
41137cc1kkvg0cg7uxddcEfjL7L67w linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pci.h
|
||||
40f5623atCokYc2uCysSJ8jFO8TEsw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgalloc.h
|
||||
412e01beTwiaC8sYY4XJP8PxLST5CA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable-2level-defs.h
|
||||
40f5623aEToIXouJgO-ao5d5pcEt1w linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h
|
||||
40f5623aCCXRPlGpNthVXstGz9ZV3A linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/pgtable.h
|
||||
40f5623aPCkQQfPtJSooGdhcatrvnQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/processor.h
|
||||
412ea0afQL2CAI-f522TbLjLPMibPQ linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/ptrace.h
|
||||
40f5623bzLvxr7WoJIxVf2OH4rCBJg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/segment.h
|
||||
40f5623bG_LzgG6-qwk292nTc5Wabw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/setup.h
|
||||
40f5623bgzm_9vwxpzJswlAxg298Gg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h
|
||||
40f5623bVdKP7Dt7qm8twu3NcnGNbA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/system.h
|
||||
40f5623bSgGrvrGRpD71K-lIYqaGgg linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/timer.h
|
||||
40f5623bc8LKPRO09wY5dGDnY_YCpw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/tlbflush.h
|
||||
41062ab7uFxnCq-KtPeAm-aV8CicgA linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/vga.h
|
||||
40f5623bxUbeGjkRrjDguCy_Gm8RLw linux-2.6.8.1-xen-sparse/include/asm-xen/asm-i386/xor.h
|
||||
40f5623bYNP7tHE2zX6YQxp9Zq2utQ linux-2.6.8.1-xen-sparse/include/asm-xen/ctrl_if.h
|
||||
40f5623b3Eqs8pAc5WpPX8_jTzV2qw linux-2.6.8.1-xen-sparse/include/asm-xen/evtchn.h
|
||||
412dfaeazclyNDM0cpnp60Yo4xulpQ linux-2.6.8.1-xen-sparse/include/asm-xen/gnttab.h
|
||||
40f5623aGPlsm0u1LTO-NVZ6AGzNRQ linux-2.6.8.1-xen-sparse/include/asm-xen/hypervisor.h
|
||||
40f5623cndVUFlkxpf7Lfx7xu8madQ linux-2.6.8.1-xen-sparse/include/asm-xen/multicall.h
|
||||
3f108af1ylCIm82H052FVTfXACBHrw linux-2.6.8.1-xen-sparse/include/asm-xen/proc_cmd.h
|
||||
4122466356eIBnC9ot44WSVVIFyhQA linux-2.6.8.1-xen-sparse/include/asm-xen/queues.h
|
||||
3fa8e3f0kBLeE4To2vpdi3cpJbIkbQ linux-2.6.8.1-xen-sparse/include/asm-xen/suspend.h
|
||||
3f689063BoW-HWV3auUJ-OqXfcGArw linux-2.6.8.1-xen-sparse/include/asm-xen/xen_proc.h
|
||||
4124d8c4aocX7A-jIbuGraWN84pxGQ linux-2.6.8.1-xen-sparse/include/linux/bio.h
|
||||
4124f66fp5QwbDHEfoUIa7pqO5Xhag linux-2.6.8.1-xen-sparse/include/linux/page-flags.h
|
||||
4124f66f4NaKNa0xPiGGykn9QaZk3w linux-2.6.8.1-xen-sparse/include/linux/skbuff.h
|
||||
40f56a0ddHCSs3501MY4hRf22tctOw linux-2.6.8.1-xen-sparse/mkbuildtree
|
||||
412f46c0LJuKAgSPGoC0Z1DEkLfuLA linux-2.6.8.1-xen-sparse/mm/memory.c
|
||||
410a94a4KT6I6X0LVc7djB39tRDp4g linux-2.6.8.1-xen-sparse/mm/page_alloc.c
|
||||
41505c572m-s9ATiO1LiD1GPznTTIg linux-2.6.8.1-xen-sparse/net/core/skbuff.c
|
||||
4149ec79wMpIHdvbntxqVGLRZZjPxw linux-2.6.8.1-xen-sparse/net/ipv4/raw.c
|
||||
413aa1d0oNP8HXLvfPuMe6cSroUfSA linux-2.6.9-patches/agpgart.patch
|
||||
413aa1d0ewvSv-ohnNnQQNGsbPTTNA linux-2.6.9-patches/drm.patch
|
||||
40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.9-xen-sparse/arch/xen/Kconfig
|
||||
40f56237utH41NPukqHksuNf29IC9A linux-2.6.9-xen-sparse/arch/xen/Kconfig.drivers
|
||||
40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.9-xen-sparse/arch/xen/Makefile
|
||||
40f56237JTc60m1FRlUxkUaGSQKrNw linux-2.6.9-xen-sparse/arch/xen/boot/Makefile
|
||||
40f56237hRxbacU_3PdoAl6DjZ3Jnw linux-2.6.9-xen-sparse/arch/xen/configs/xen0_defconfig
|
||||
40f56237wubfjJKlfIzZlI3ZM2VgGA linux-2.6.9-xen-sparse/arch/xen/configs/xenU_defconfig
|
||||
40f56237Mta0yHNaMS_qtM2rge0qYA linux-2.6.9-xen-sparse/arch/xen/i386/Kconfig
|
||||
40f56238u2CJdXNpjsZgHBxeVyY-2g linux-2.6.9-xen-sparse/arch/xen/i386/Makefile
|
||||
40f56238eczveJ86k_4hNxCLRQIF-g linux-2.6.9-xen-sparse/arch/xen/i386/kernel/Makefile
|
||||
40f56238rXVTJQKbBuXXLH52qEArcg linux-2.6.9-xen-sparse/arch/xen/i386/kernel/cpu/Makefile
|
||||
40f562385s4lr6Zg92gExe7UQ4A76Q linux-2.6.9-xen-sparse/arch/xen/i386/kernel/cpu/common.c
|
||||
40f56238XDtHSijkAFlbv1PT8Bhw_Q linux-2.6.9-xen-sparse/arch/xen/i386/kernel/entry.S
|
||||
40f56238bnvciAuyzAiMkdzGErYt1A linux-2.6.9-xen-sparse/arch/xen/i386/kernel/head.S
|
||||
40f58a0d31M2EkuPbG94ns_nOi0PVA linux-2.6.9-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c
|
||||
40faa751_zbZlAmLyQgCXdYekVFdWA linux-2.6.9-xen-sparse/arch/xen/i386/kernel/ioport.c
|
||||
40f562382aC3_Gt4RG-4ZsfvDRUg3Q linux-2.6.9-xen-sparse/arch/xen/i386/kernel/irq.c
|
||||
40f56238ue3YRsK52HG7iccNzP1AwQ linux-2.6.9-xen-sparse/arch/xen/i386/kernel/ldt.c
|
||||
4107adf1cNtsuOxOB4T6paAoY2R2PA linux-2.6.9-xen-sparse/arch/xen/i386/kernel/pci-dma.c
|
||||
40f56238a8iOVDEoostsbun_sy2i4g linux-2.6.9-xen-sparse/arch/xen/i386/kernel/process.c
|
||||
40f56238YQIJoYG2ehDGEcdTgLmGbg linux-2.6.9-xen-sparse/arch/xen/i386/kernel/setup.c
|
||||
40f56238nWMQg7CKbyTy0KJNvCzbtg linux-2.6.9-xen-sparse/arch/xen/i386/kernel/signal.c
|
||||
40f56238UL9uv78ODDzMwLL9yryeFw linux-2.6.9-xen-sparse/arch/xen/i386/kernel/sysenter.c
|
||||
40f56238qVGkpO_ycnQA8k03kQzAgA linux-2.6.9-xen-sparse/arch/xen/i386/kernel/time.c
|
||||
40f56238NzTgeO63RGoxHrW5NQeO3Q linux-2.6.9-xen-sparse/arch/xen/i386/kernel/timers/Makefile
|
||||
40f56238BMqG5PuSHufpjbvp_helBw linux-2.6.9-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c
|
||||
40f562389xNa78YBZciUibQjyRU_Lg linux-2.6.9-xen-sparse/arch/xen/i386/kernel/traps.c
|
||||
40f56238qASEI_IOhCKWNuwFKNZrKQ linux-2.6.9-xen-sparse/arch/xen/i386/kernel/vmlinux.lds.S
|
||||
40f56238JypKAUG01ZojFwH7qnZ5uA linux-2.6.9-xen-sparse/arch/xen/i386/kernel/vsyscall.S
|
||||
40f56238wi6AdNQjm0RT57bSkwb6hg linux-2.6.9-xen-sparse/arch/xen/i386/kernel/vsyscall.lds
|
||||
40f56238a3w6-byOzexIlMgni76Lcg linux-2.6.9-xen-sparse/arch/xen/i386/mm/Makefile
|
||||
40f56238ILx8xlbywNbzTdv5Zr4xXQ linux-2.6.9-xen-sparse/arch/xen/i386/mm/fault.c
|
||||
4118cc35CbY8rfGVspF5O-7EkXBEAA linux-2.6.9-xen-sparse/arch/xen/i386/mm/highmem.c
|
||||
40f562383SKvDStdtrvzr5fyCbW4rw linux-2.6.9-xen-sparse/arch/xen/i386/mm/hypervisor.c
|
||||
40f56239xcNylAxuGsQHwi1AyMLV8w linux-2.6.9-xen-sparse/arch/xen/i386/mm/init.c
|
||||
41062ab7CjxC1UBaFhOMWWdhHkIUyg linux-2.6.9-xen-sparse/arch/xen/i386/mm/ioremap.c
|
||||
413b5ab8LIowAnQrEmaOJSdmqm96jQ linux-2.6.9-xen-sparse/arch/xen/i386/mm/pageattr.c
|
||||
40f5623906UYHv1rsVUeRc0tFT0dWw linux-2.6.9-xen-sparse/arch/xen/i386/mm/pgtable.c
|
||||
4107adf12ndy94MidCaivDibJ3pPAg linux-2.6.9-xen-sparse/arch/xen/i386/pci/Makefile
|
||||
4107adf1WcCgkhsdLTRGX52cOG1vJg linux-2.6.9-xen-sparse/arch/xen/i386/pci/direct.c
|
||||
4107adf1s5u6249DNPUViX1YNagbUQ linux-2.6.9-xen-sparse/arch/xen/i386/pci/irq.c
|
||||
40f56239zOksGg_H4XD4ye6iZNtoZA linux-2.6.9-xen-sparse/arch/xen/kernel/Makefile
|
||||
40f56239bvOjuuuViZ0XMlNiREFC0A linux-2.6.9-xen-sparse/arch/xen/kernel/ctrl_if.c
|
||||
40f56239pYRq5yshPTkv3ujXKc8K6g linux-2.6.9-xen-sparse/arch/xen/kernel/empty.c
|
||||
40f56238xFQe9T7M_U_FItM-bZIpLw linux-2.6.9-xen-sparse/arch/xen/kernel/evtchn.c
|
||||
4110f478aeQWllIN7J4kouAHiAqrPw linux-2.6.9-xen-sparse/arch/xen/kernel/fixup.c
|
||||
412dfae9eA3_6e6bCGUtg1mj8b56fQ linux-2.6.9-xen-sparse/arch/xen/kernel/gnttab.c
|
||||
40f56239sFcjHiIRmnObRIDF-zaeKQ linux-2.6.9-xen-sparse/arch/xen/kernel/process.c
|
||||
40f562392LBhwmOxVPsYdkYXMxI_ZQ linux-2.6.9-xen-sparse/arch/xen/kernel/reboot.c
|
||||
414c113396tK1HTVeUalm3u-1DF16g linux-2.6.9-xen-sparse/arch/xen/kernel/skbuff.c
|
||||
3f68905c5eiA-lBMQSvXLMWS1ikDEA linux-2.6.9-xen-sparse/arch/xen/kernel/xen_proc.c
|
||||
41261688yS8eAyy-7kzG4KBs0xbYCA linux-2.6.9-xen-sparse/drivers/Makefile
|
||||
4108f5c1WfTIrs0HZFeV39sttekCTw linux-2.6.9-xen-sparse/drivers/char/mem.c
|
||||
4111308bZAIzwf_Kzu6x1TZYZ3E0_Q linux-2.6.9-xen-sparse/drivers/char/tty_io.c
|
||||
40f56239Dp_vMTgz8TEbvo1hjHGc3w linux-2.6.9-xen-sparse/drivers/xen/Makefile
|
||||
41768fbcncpBQf8s2l2-CwoSNIZ9uA linux-2.6.9-xen-sparse/drivers/xen/balloon/Makefile
|
||||
3e6377f8i5e9eGz7Pw6fQuhuTQ7DQg linux-2.6.9-xen-sparse/drivers/xen/balloon/balloon.c
|
||||
410d0893otFGghmv4dUXDUBBdY5aIA linux-2.6.9-xen-sparse/drivers/xen/blkback/Makefile
|
||||
4087cf0d1XgMkooTZAiJS6NrcpLQNQ linux-2.6.9-xen-sparse/drivers/xen/blkback/blkback.c
|
||||
4087cf0dZadZ8r6CEt4fNN350Yle3A linux-2.6.9-xen-sparse/drivers/xen/blkback/common.h
|
||||
4087cf0dxlh29iw0w-9rxOCEGCjPcw linux-2.6.9-xen-sparse/drivers/xen/blkback/control.c
|
||||
4087cf0dbuoH20fMjNZjcgrRK-1msQ linux-2.6.9-xen-sparse/drivers/xen/blkback/interface.c
|
||||
4087cf0dk97tacDzxfByWV7JifUYqA linux-2.6.9-xen-sparse/drivers/xen/blkback/vbd.c
|
||||
40f56239Sfle6wGv5FS0wjS_HI150A linux-2.6.9-xen-sparse/drivers/xen/blkfront/Kconfig
|
||||
40f562395atl9x4suKGhPkjqLOXESg linux-2.6.9-xen-sparse/drivers/xen/blkfront/Makefile
|
||||
40f56239-JNIaTzlviVJohVdoYOUpw linux-2.6.9-xen-sparse/drivers/xen/blkfront/blkfront.c
|
||||
40f56239y9naBTXe40Pi2J_z3p-d1g linux-2.6.9-xen-sparse/drivers/xen/blkfront/block.h
|
||||
40f56239BVfPsXBiWQitXgDRtOsiqg linux-2.6.9-xen-sparse/drivers/xen/blkfront/vbd.c
|
||||
40f56239fsLjvtD8YBRAWphps4FDjg linux-2.6.9-xen-sparse/drivers/xen/console/Makefile
|
||||
3e5a4e651TH-SXHoufurnWjgl5bfOA linux-2.6.9-xen-sparse/drivers/xen/console/console.c
|
||||
40f56239KYxO0YabhPzCTeUuln-lnA linux-2.6.9-xen-sparse/drivers/xen/evtchn/Makefile
|
||||
40f56239DoibTX6R-ZYd3QTXAB8_TA linux-2.6.9-xen-sparse/drivers/xen/evtchn/evtchn.c
|
||||
410a9817HEVJvred5Oy_uKH3HFJC5Q linux-2.6.9-xen-sparse/drivers/xen/netback/Makefile
|
||||
4097ba831lpGeLlPg-bfV8XarVVuoQ linux-2.6.9-xen-sparse/drivers/xen/netback/common.h
|
||||
4097ba83wvv8yi5P5xugCUBAdb6O-A linux-2.6.9-xen-sparse/drivers/xen/netback/control.c
|
||||
4097ba83byY5bTSugJGZ1exTxIcMKw linux-2.6.9-xen-sparse/drivers/xen/netback/interface.c
|
||||
4087cf0dGmSbFhFZyIZBJzvqxY-qBw linux-2.6.9-xen-sparse/drivers/xen/netback/netback.c
|
||||
40f56239lrg_Ob0BJ8WBFS1zeg2CYw linux-2.6.9-xen-sparse/drivers/xen/netfront/Kconfig
|
||||
40f56239Wd4k_ycG_mFsSO1r5xKdtQ linux-2.6.9-xen-sparse/drivers/xen/netfront/Makefile
|
||||
405853f6nbeazrNyEWNHBuoSg2PiPA linux-2.6.9-xen-sparse/drivers/xen/netfront/netfront.c
|
||||
4108f5c1ppFXVpQzCOAZ6xXYubsjKA linux-2.6.9-xen-sparse/drivers/xen/privcmd/Makefile
|
||||
3e5a4e65IUfzzMu2kZFlGEB8-rpTaA linux-2.6.9-xen-sparse/drivers/xen/privcmd/privcmd.c
|
||||
412f47e4RKD-R5IS5gEXvcT8L4v8gA linux-2.6.9-xen-sparse/include/asm-generic/pgtable.h
|
||||
40f56239YAjS52QG2FIAQpHDZAdGHg linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/desc.h
|
||||
4107adf1E5O4ztGHNGMzCCNhcvqNow linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h
|
||||
40f5623akIoBsQ3KxSB2kufkbgONXQ linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/fixmap.h
|
||||
4118b6a418gnL6AZsTdglC92YGqYTg linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/highmem.h
|
||||
40f5623aJVXQwpJMOLE99XgvGsfQ8Q linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/io.h
|
||||
40f5623am9BzluYFuV6EQfTd-so3dA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/do_timer.h
|
||||
40f5623adZQ1IZGPxbDXONjyZGYuTA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/io_ports.h
|
||||
40f5623aKXkBBxgpLx2NcvkncQ1Yyw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h
|
||||
40f5623aMQZoYuf4ml9v69N3gu8ing linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_mpspec.h
|
||||
40f5623a8LroVMnZ5YRzJJmIc-zHlw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_reboot.h
|
||||
40f5623ayR1vnzfF__htza35a8Ft-g linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_time.h
|
||||
40f5623a4YdRdVzYWJzOOoqe8mnrXA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_timer.h
|
||||
40f5623aDLxmbOtUHvkWztKjAO4EjA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/mach_traps.h
|
||||
41062ab7HMSSuaUv3_Z4agLpjSO88A linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/pci-functions.h
|
||||
40f5623aDMCsWOFO0jktZ4e8sjwvEg linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h
|
||||
40f5623arsFXkGdPvIqvFi3yFXGR0Q linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h
|
||||
4120f807GCO0uqsLqdZj9csxR1Wthw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mmu_context.h
|
||||
40f5623aFTyFTR-vdiA-KaGxk5JOKQ linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/msr.h
|
||||
40f5623adgjZq9nAgCt0IXdWl7udSA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/page.h
|
||||
40f5623a54NuG-7qHihGYmw4wWQnMA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/param.h
|
||||
41137cc1kkvg0cg7uxddcEfjL7L67w linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pci.h
|
||||
40f5623atCokYc2uCysSJ8jFO8TEsw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgalloc.h
|
||||
412e01beTwiaC8sYY4XJP8PxLST5CA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable-2level-defs.h
|
||||
40f5623aEToIXouJgO-ao5d5pcEt1w linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h
|
||||
40f5623aCCXRPlGpNthVXstGz9ZV3A linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable.h
|
||||
40f5623aPCkQQfPtJSooGdhcatrvnQ linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/processor.h
|
||||
412ea0afQL2CAI-f522TbLjLPMibPQ linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/ptrace.h
|
||||
40f5623bzLvxr7WoJIxVf2OH4rCBJg linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/segment.h
|
||||
40f5623bG_LzgG6-qwk292nTc5Wabw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/setup.h
|
||||
40f5623bgzm_9vwxpzJswlAxg298Gg linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h
|
||||
40f5623bVdKP7Dt7qm8twu3NcnGNbA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/system.h
|
||||
40f5623bSgGrvrGRpD71K-lIYqaGgg linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/timer.h
|
||||
40f5623bc8LKPRO09wY5dGDnY_YCpw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/tlbflush.h
|
||||
41062ab7uFxnCq-KtPeAm-aV8CicgA linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/vga.h
|
||||
40f5623bxUbeGjkRrjDguCy_Gm8RLw linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/xor.h
|
||||
40f5623bYNP7tHE2zX6YQxp9Zq2utQ linux-2.6.9-xen-sparse/include/asm-xen/ctrl_if.h
|
||||
40f5623b3Eqs8pAc5WpPX8_jTzV2qw linux-2.6.9-xen-sparse/include/asm-xen/evtchn.h
|
||||
412dfaeazclyNDM0cpnp60Yo4xulpQ linux-2.6.9-xen-sparse/include/asm-xen/gnttab.h
|
||||
40f5623aGPlsm0u1LTO-NVZ6AGzNRQ linux-2.6.9-xen-sparse/include/asm-xen/hypervisor.h
|
||||
40f5623cndVUFlkxpf7Lfx7xu8madQ linux-2.6.9-xen-sparse/include/asm-xen/multicall.h
|
||||
3f108af1ylCIm82H052FVTfXACBHrw linux-2.6.9-xen-sparse/include/asm-xen/proc_cmd.h
|
||||
4122466356eIBnC9ot44WSVVIFyhQA linux-2.6.9-xen-sparse/include/asm-xen/queues.h
|
||||
3fa8e3f0kBLeE4To2vpdi3cpJbIkbQ linux-2.6.9-xen-sparse/include/asm-xen/suspend.h
|
||||
3f689063BoW-HWV3auUJ-OqXfcGArw linux-2.6.9-xen-sparse/include/asm-xen/xen_proc.h
|
||||
4124d8c4aocX7A-jIbuGraWN84pxGQ linux-2.6.9-xen-sparse/include/linux/bio.h
|
||||
4124f66fp5QwbDHEfoUIa7pqO5Xhag linux-2.6.9-xen-sparse/include/linux/page-flags.h
|
||||
4124f66f4NaKNa0xPiGGykn9QaZk3w linux-2.6.9-xen-sparse/include/linux/skbuff.h
|
||||
40f56a0ddHCSs3501MY4hRf22tctOw linux-2.6.9-xen-sparse/mkbuildtree
|
||||
412f46c0LJuKAgSPGoC0Z1DEkLfuLA linux-2.6.9-xen-sparse/mm/memory.c
|
||||
410a94a4KT6I6X0LVc7djB39tRDp4g linux-2.6.9-xen-sparse/mm/page_alloc.c
|
||||
41505c572m-s9ATiO1LiD1GPznTTIg linux-2.6.9-xen-sparse/net/core/skbuff.c
|
||||
4149ec79wMpIHdvbntxqVGLRZZjPxw linux-2.6.9-xen-sparse/net/ipv4/raw.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
|
||||
|
||||
@@ -1,106 +0,0 @@
|
||||
/*
|
||||
* Dynamic DMA mapping support.
|
||||
*
|
||||
* On i386 there is no hardware dynamic DMA address translation,
|
||||
* so consistent alloc/free are merely page allocation/freeing.
|
||||
* The rest of the dynamic DMA mapping interface is implemented
|
||||
* in asm/pci.h.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/version.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
|
||||
#define pte_offset_kernel pte_offset
|
||||
void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
|
||||
dma_addr_t *dma_handle)
|
||||
#else
|
||||
void *dma_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, int gfp)
|
||||
#endif
|
||||
{
|
||||
void *ret;
|
||||
unsigned int order = get_order(size);
|
||||
unsigned long vstart;
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
|
||||
int gfp = GFP_ATOMIC;
|
||||
|
||||
if (hwdev == NULL || ((u32)hwdev->dma_mask < 0xffffffff))
|
||||
gfp |= GFP_DMA;
|
||||
#else
|
||||
/* ignore region specifiers */
|
||||
gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);
|
||||
|
||||
if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff))
|
||||
gfp |= GFP_DMA;
|
||||
#endif
|
||||
|
||||
vstart = __get_free_pages(gfp, order);
|
||||
ret = (void *)vstart;
|
||||
if (ret == NULL)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Ensure multi-page extents are contiguous in machine memory.
|
||||
* This code could be cleaned up some, and the number of
|
||||
* hypercalls reduced.
|
||||
*/
|
||||
if (size > PAGE_SIZE) {
|
||||
pgd_t *pgd;
|
||||
pmd_t *pmd;
|
||||
pte_t *pte;
|
||||
unsigned long pfn, i;
|
||||
scrub_pages(vstart, 1 << order);
|
||||
/* 1. Zap current PTEs, giving away the underlying pages. */
|
||||
for (i = 0; i < (1<<order); i++) {
|
||||
pgd = pgd_offset_k( (vstart + (i*PAGE_SIZE)));
|
||||
pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE)));
|
||||
pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
|
||||
pfn = pte->pte_low >> PAGE_SHIFT;
|
||||
queue_l1_entry_update(pte, 0);
|
||||
phys_to_machine_mapping[(__pa(ret)>>PAGE_SHIFT)+i] =
|
||||
INVALID_P2M_ENTRY;
|
||||
flush_page_update_queue();
|
||||
if (HYPERVISOR_dom_mem_op(MEMOP_decrease_reservation,
|
||||
&pfn, 1, 0) != 1) BUG();
|
||||
}
|
||||
/* 2. Get a new contiguous memory extent. */
|
||||
if (HYPERVISOR_dom_mem_op(MEMOP_increase_reservation,
|
||||
&pfn, 1, order) != 1) BUG();
|
||||
/* 3. Map the new extent in place of old pages. */
|
||||
for (i = 0; i < (1<<order); i++) {
|
||||
pgd = pgd_offset_k( (vstart + (i*PAGE_SIZE)));
|
||||
pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE)));
|
||||
pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
|
||||
queue_l1_entry_update(
|
||||
pte, ((pfn+i)<<PAGE_SHIFT)|__PAGE_KERNEL);
|
||||
queue_machphys_update(
|
||||
pfn+i, (__pa(ret)>>PAGE_SHIFT)+i);
|
||||
phys_to_machine_mapping[(__pa(ret)>>PAGE_SHIFT)+i] =
|
||||
pfn+i;
|
||||
}
|
||||
/* Flush updates through and flush the TLB. */
|
||||
xen_tlb_flush();
|
||||
}
|
||||
|
||||
memset(ret, 0, size);
|
||||
*dma_handle = virt_to_bus(ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
|
||||
void pci_free_consistent(struct pci_dev *hwdev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle)
|
||||
#else
|
||||
void dma_free_coherent(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle)
|
||||
#endif
|
||||
{
|
||||
free_pages((unsigned long)vaddr, get_order(size));
|
||||
}
|
||||
@@ -1,106 +0,0 @@
|
||||
/*
|
||||
* include/asm-i386/mach-default/mach_resources.h
|
||||
*
|
||||
* Machine specific resource allocation for generic.
|
||||
* Split out from setup.c by Osamu Tomita <tomita@cinet.co.jp>
|
||||
*/
|
||||
#ifndef _MACH_RESOURCES_H
|
||||
#define _MACH_RESOURCES_H
|
||||
|
||||
struct resource standard_io_resources[] = {
|
||||
{ "dma1", 0x00, 0x1f, IORESOURCE_BUSY },
|
||||
{ "pic1", 0x20, 0x21, IORESOURCE_BUSY },
|
||||
{ "timer", 0x40, 0x5f, IORESOURCE_BUSY },
|
||||
{ "keyboard", 0x60, 0x6f, IORESOURCE_BUSY },
|
||||
{ "dma page reg", 0x80, 0x8f, IORESOURCE_BUSY },
|
||||
{ "pic2", 0xa0, 0xa1, IORESOURCE_BUSY },
|
||||
{ "dma2", 0xc0, 0xdf, IORESOURCE_BUSY },
|
||||
{ "fpu", 0xf0, 0xff, IORESOURCE_BUSY }
|
||||
};
|
||||
|
||||
#define STANDARD_IO_RESOURCES (sizeof(standard_io_resources)/sizeof(struct resource))
|
||||
|
||||
static struct resource vram_resource = { "Video RAM area", 0xa0000, 0xbffff, IORESOURCE_BUSY };
|
||||
|
||||
/* System ROM resources */
|
||||
#define MAXROMS 6
|
||||
static struct resource rom_resources[MAXROMS] = {
|
||||
{ "System ROM", 0xF0000, 0xFFFFF, IORESOURCE_BUSY },
|
||||
{ "Video ROM", 0xc0000, 0xc7fff, IORESOURCE_BUSY }
|
||||
};
|
||||
|
||||
#define romsignature(x) (*(unsigned short *)(x) == 0xaa55)
|
||||
|
||||
static inline void probe_video_rom(int roms)
|
||||
{
|
||||
unsigned long base;
|
||||
unsigned char *romstart;
|
||||
|
||||
|
||||
/* Video ROM is standard at C000:0000 - C7FF:0000, check signature */
|
||||
for (base = 0xC0000; base < 0xE0000; base += 2048) {
|
||||
romstart = isa_bus_to_virt(base);
|
||||
if (!romsignature(romstart))
|
||||
continue;
|
||||
request_resource(&iomem_resource, rom_resources + roms);
|
||||
roms++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void probe_extension_roms(int roms)
|
||||
{
|
||||
unsigned long base;
|
||||
unsigned char *romstart;
|
||||
|
||||
/* Extension roms at C800:0000 - DFFF:0000 */
|
||||
for (base = 0xC8000; base < 0xE0000; base += 2048) {
|
||||
unsigned long length;
|
||||
|
||||
romstart = isa_bus_to_virt(base);
|
||||
if (!romsignature(romstart))
|
||||
continue;
|
||||
length = romstart[2] * 512;
|
||||
if (length) {
|
||||
unsigned int i;
|
||||
unsigned char chksum;
|
||||
|
||||
chksum = 0;
|
||||
for (i = 0; i < length; i++)
|
||||
chksum += romstart[i];
|
||||
|
||||
/* Good checksum? */
|
||||
if (!chksum) {
|
||||
rom_resources[roms].start = base;
|
||||
rom_resources[roms].end = base + length - 1;
|
||||
rom_resources[roms].name = "Extension ROM";
|
||||
rom_resources[roms].flags = IORESOURCE_BUSY;
|
||||
|
||||
request_resource(&iomem_resource, rom_resources + roms);
|
||||
roms++;
|
||||
if (roms >= MAXROMS)
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Final check for motherboard extension rom at E000:0000 */
|
||||
base = 0xE0000;
|
||||
romstart = isa_bus_to_virt(base);
|
||||
|
||||
if (romsignature(romstart)) {
|
||||
rom_resources[roms].start = base;
|
||||
rom_resources[roms].end = base + 65535;
|
||||
rom_resources[roms].name = "Extension ROM";
|
||||
rom_resources[roms].flags = IORESOURCE_BUSY;
|
||||
|
||||
request_resource(&iomem_resource, rom_resources + roms);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void request_graphics_resource(void)
|
||||
{
|
||||
request_resource(&iomem_resource, &vram_resource);
|
||||
}
|
||||
|
||||
#endif /* !_MACH_RESOURCES_H */
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+15
-15
@@ -24,31 +24,31 @@ CHECK := $(CHECK) -D__i386__=1
|
||||
CFLAGS += -pipe -msoft-float
|
||||
|
||||
# prevent gcc from keeping the stack 16 byte aligned
|
||||
CFLAGS += $(call check_gcc,-mpreferred-stack-boundary=2,)
|
||||
CFLAGS += $(call cc-option,-mpreferred-stack-boundary=2,)
|
||||
|
||||
align := $(subst -functions=0,,$(call check_gcc,-falign-functions=0,-malign-functions=0))
|
||||
align := $(subst -functions=0,,$(call cc-option,-falign-functions=0,-malign-functions=0))
|
||||
|
||||
cflags-$(CONFIG_M386) += -march=i386
|
||||
cflags-$(CONFIG_M486) += -march=i486
|
||||
cflags-$(CONFIG_M586) += -march=i586
|
||||
cflags-$(CONFIG_M586TSC) += -march=i586
|
||||
cflags-$(CONFIG_M586MMX) += $(call check_gcc,-march=pentium-mmx,-march=i586)
|
||||
cflags-$(CONFIG_M586MMX) += $(call cc-option,-march=pentium-mmx,-march=i586)
|
||||
cflags-$(CONFIG_M686) += -march=i686
|
||||
cflags-$(CONFIG_MPENTIUMII) += $(call check_gcc,-march=pentium2,-march=i686)
|
||||
cflags-$(CONFIG_MPENTIUMIII) += $(call check_gcc,-march=pentium3,-march=i686)
|
||||
cflags-$(CONFIG_MPENTIUMM) += $(call check_gcc,-march=pentium3,-march=i686)
|
||||
cflags-$(CONFIG_MPENTIUM4) += $(call check_gcc,-march=pentium4,-march=i686)
|
||||
cflags-$(CONFIG_MPENTIUMII) += $(call cc-option,-march=pentium2,-march=i686)
|
||||
cflags-$(CONFIG_MPENTIUMIII) += $(call cc-option,-march=pentium3,-march=i686)
|
||||
cflags-$(CONFIG_MPENTIUMM) += $(call cc-option,-march=pentium3,-march=i686)
|
||||
cflags-$(CONFIG_MPENTIUM4) += $(call cc-option,-march=pentium4,-march=i686)
|
||||
cflags-$(CONFIG_MK6) += -march=k6
|
||||
# Please note, that patches that add -march=athlon-xp and friends are pointless.
|
||||
# They make zero difference whatsosever to performance at this time.
|
||||
cflags-$(CONFIG_MK7) += $(call check_gcc,-march=athlon,-march=i686 $(align)-functions=4)
|
||||
cflags-$(CONFIG_MK8) += $(call check_gcc,-march=k8,$(call check_gcc,-march=athlon,-march=i686 $(align)-functions=4))
|
||||
cflags-$(CONFIG_MK7) += $(call cc-option,-march=athlon,-march=i686 $(align)-functions=4)
|
||||
cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8,$(call cc-option,-march=athlon,-march=i686 $(align)-functions=4))
|
||||
cflags-$(CONFIG_MCRUSOE) += -march=i686 $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0
|
||||
cflags-$(CONFIG_MWINCHIPC6) += $(call check_gcc,-march=winchip-c6,-march=i586)
|
||||
cflags-$(CONFIG_MWINCHIP2) += $(call check_gcc,-march=winchip2,-march=i586)
|
||||
cflags-$(CONFIG_MWINCHIP3D) += $(call check_gcc,-march=winchip2,-march=i586)
|
||||
cflags-$(CONFIG_MCYRIXIII) += $(call check_gcc,-march=c3,-march=i486) $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0
|
||||
cflags-$(CONFIG_MVIAC3_2) += $(call check_gcc,-march=c3-2,-march=i686)
|
||||
cflags-$(CONFIG_MWINCHIPC6) += $(call cc-option,-march=winchip-c6,-march=i586)
|
||||
cflags-$(CONFIG_MWINCHIP2) += $(call cc-option,-march=winchip2,-march=i586)
|
||||
cflags-$(CONFIG_MWINCHIP3D) += $(call cc-option,-march=winchip2,-march=i586)
|
||||
cflags-$(CONFIG_MCYRIXIII) += $(call cc-option,-march=c3,-march=i486) $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0
|
||||
cflags-$(CONFIG_MVIAC3_2) += $(call cc-option,-march=c3-2,-march=i686)
|
||||
|
||||
# AMD Elan support
|
||||
cflags-$(CONFIG_X86_ELAN) += -march=i486
|
||||
@@ -60,7 +60,7 @@ cflags-$(CONFIG_REGPARM) += $(shell if [ $(GCC_VERSION) -ge 0300 ] ; then echo
|
||||
|
||||
# Disable unit-at-a-time mode, it makes gcc use a lot more stack
|
||||
# due to the lack of sharing of stacklots.
|
||||
CFLAGS += $(call check_gcc,-fno-unit-at-a-time,)
|
||||
CFLAGS += $(call cc-option,-fno-unit-at-a-time,)
|
||||
|
||||
CFLAGS += $(cflags-y)
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@ XENARCH := $(subst ",,$(CONFIG_XENARCH))
|
||||
|
||||
CFLAGS += -Iarch/$(XENARCH)/kernel
|
||||
|
||||
extra-y := head.o init_task.o vmlinux.lds.s
|
||||
extra-y := head.o init_task.o vmlinux.lds
|
||||
|
||||
obj-y := traps.o irq.o ldt.o setup.o entry.o time.o pci-dma.o process.o \
|
||||
ioport.o signal.o i386_ksyms.o
|
||||
@@ -45,7 +45,7 @@ EXTRA_AFLAGS := -traditional
|
||||
|
||||
c-obj-$(CONFIG_SCx200) += scx200.o
|
||||
|
||||
AFLAGS_vmlinux.lds.o += -U$(XENARCH)
|
||||
CPPFLAGS_vmlinux.lds += -U$(XENARCH)
|
||||
|
||||
# vsyscall.o contains the vsyscall DSO images as __initdata.
|
||||
# We must build both images before we can assemble it.
|
||||
File renamed without changes.
+6
-1
@@ -2,6 +2,8 @@
|
||||
#include <linux/string.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <asm/semaphore.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/i387.h>
|
||||
@@ -12,6 +14,9 @@
|
||||
|
||||
#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;
|
||||
@@ -525,7 +530,7 @@ void __init cpu_gdt_init(struct Xgt_desc_struct *gdt_descr)
|
||||
void __init cpu_init (void)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
struct tss_struct * t = init_tss + cpu;
|
||||
struct tss_struct * t = &per_cpu(init_tss, cpu);
|
||||
struct thread_struct *thread = ¤t->thread;
|
||||
|
||||
if (test_and_set_bit(cpu, &cpu_initialized)) {
|
||||
File renamed without changes.
File renamed without changes.
+12
-11
@@ -23,7 +23,6 @@
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/checksum.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/hardirq.h>
|
||||
#include <asm/delay.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mmx.h>
|
||||
@@ -32,6 +31,7 @@
|
||||
#include <asm/tlbflush.h>
|
||||
#include <asm/nmi.h>
|
||||
#include <asm/ist.h>
|
||||
#include <asm/kdebug.h>
|
||||
|
||||
extern void dump_thread(struct pt_regs *, struct user *);
|
||||
extern spinlock_t rtc_lock;
|
||||
@@ -89,10 +89,10 @@ EXPORT_SYMBOL(get_cmos_time);
|
||||
EXPORT_SYMBOL(cpu_khz);
|
||||
EXPORT_SYMBOL(apm_info);
|
||||
|
||||
EXPORT_SYMBOL_NOVERS(__down_failed);
|
||||
EXPORT_SYMBOL_NOVERS(__down_failed_interruptible);
|
||||
EXPORT_SYMBOL_NOVERS(__down_failed_trylock);
|
||||
EXPORT_SYMBOL_NOVERS(__up_wakeup);
|
||||
EXPORT_SYMBOL(__down_failed);
|
||||
EXPORT_SYMBOL(__down_failed_interruptible);
|
||||
EXPORT_SYMBOL(__down_failed_trylock);
|
||||
EXPORT_SYMBOL(__up_wakeup);
|
||||
/* Networking helper routines. */
|
||||
EXPORT_SYMBOL(csum_partial_copy_generic);
|
||||
/* Delay loops */
|
||||
@@ -101,9 +101,9 @@ EXPORT_SYMBOL(__udelay);
|
||||
EXPORT_SYMBOL(__delay);
|
||||
EXPORT_SYMBOL(__const_udelay);
|
||||
|
||||
EXPORT_SYMBOL_NOVERS(__get_user_1);
|
||||
EXPORT_SYMBOL_NOVERS(__get_user_2);
|
||||
EXPORT_SYMBOL_NOVERS(__get_user_4);
|
||||
EXPORT_SYMBOL(__get_user_1);
|
||||
EXPORT_SYMBOL(__get_user_2);
|
||||
EXPORT_SYMBOL(__get_user_4);
|
||||
|
||||
EXPORT_SYMBOL(strpbrk);
|
||||
EXPORT_SYMBOL(strstr);
|
||||
@@ -144,8 +144,8 @@ EXPORT_SYMBOL(cpu_sibling_map);
|
||||
EXPORT_SYMBOL(cpu_data);
|
||||
EXPORT_SYMBOL(cpu_online_map);
|
||||
EXPORT_SYMBOL(cpu_callout_map);
|
||||
EXPORT_SYMBOL_NOVERS(__write_lock_failed);
|
||||
EXPORT_SYMBOL_NOVERS(__read_lock_failed);
|
||||
EXPORT_SYMBOL(__write_lock_failed);
|
||||
EXPORT_SYMBOL(__read_lock_failed);
|
||||
|
||||
/* Global SMP stuff */
|
||||
EXPORT_SYMBOL(synchronize_irq);
|
||||
@@ -177,8 +177,9 @@ EXPORT_SYMBOL_GPL(unset_nmi_callback);
|
||||
|
||||
#undef memcmp
|
||||
extern int memcmp(const void *,const void *,__kernel_size_t);
|
||||
EXPORT_SYMBOL_NOVERS(memcmp);
|
||||
EXPORT_SYMBOL(memcmp);
|
||||
|
||||
EXPORT_SYMBOL(register_die_notifier);
|
||||
#ifdef CONFIG_HAVE_DEC_LOCK
|
||||
EXPORT_SYMBOL(atomic_dec_and_lock);
|
||||
#endif
|
||||
File renamed without changes.
+6
-44
@@ -220,14 +220,16 @@ asmlinkage int handle_IRQ_event(unsigned int irq,
|
||||
struct pt_regs *regs, struct irqaction *action)
|
||||
{
|
||||
int status = 1; /* Force the "do bottom halves" bit */
|
||||
int retval = 0;
|
||||
int ret, retval = 0;
|
||||
|
||||
if (!(action->flags & SA_INTERRUPT))
|
||||
local_irq_enable();
|
||||
|
||||
do {
|
||||
status |= action->flags;
|
||||
retval |= action->handler(irq, action->dev_id, regs);
|
||||
ret = action->handler(irq, action->dev_id, regs);
|
||||
if (ret == IRQ_HANDLED)
|
||||
status |= action->flags;
|
||||
retval |= ret;
|
||||
action = action->next;
|
||||
} while (action);
|
||||
if (status & SA_SAMPLE_RANDOM)
|
||||
@@ -1028,32 +1030,6 @@ static int irq_affinity_write_proc(struct file *file, const char __user *buffer,
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
|
||||
int count, int *eof, void *data)
|
||||
{
|
||||
int len = cpumask_scnprintf(page, count, *(cpumask_t *)data);
|
||||
if (count - len < 2)
|
||||
return -EINVAL;
|
||||
len += sprintf(page + len, "\n");
|
||||
return len;
|
||||
}
|
||||
|
||||
static int prof_cpu_mask_write_proc (struct file *file, const char __user *buffer,
|
||||
unsigned long count, void *data)
|
||||
{
|
||||
cpumask_t *mask = (cpumask_t *)data;
|
||||
unsigned long full_count = count, err;
|
||||
cpumask_t new_value;
|
||||
|
||||
err = cpumask_parse(buffer, count, new_value);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
*mask = new_value;
|
||||
return full_count;
|
||||
}
|
||||
|
||||
#define MAX_NAMELEN 10
|
||||
|
||||
static void register_irq_proc (unsigned int irq)
|
||||
@@ -1089,27 +1065,13 @@ static void register_irq_proc (unsigned int irq)
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned long prof_cpu_mask = -1;
|
||||
|
||||
void init_irq_proc (void)
|
||||
{
|
||||
struct proc_dir_entry *entry;
|
||||
int i;
|
||||
|
||||
/* create /proc/irq */
|
||||
root_irq_dir = proc_mkdir("irq", NULL);
|
||||
|
||||
/* create /proc/irq/prof_cpu_mask */
|
||||
entry = create_proc_entry("prof_cpu_mask", 0600, root_irq_dir);
|
||||
|
||||
if (!entry)
|
||||
return;
|
||||
|
||||
entry->nlink = 1;
|
||||
entry->data = (void *)&prof_cpu_mask;
|
||||
entry->read_proc = prof_cpu_mask_read_proc;
|
||||
entry->write_proc = prof_cpu_mask_write_proc;
|
||||
|
||||
create_prof_cpu_mask(root_irq_dir);
|
||||
/*
|
||||
* Create entries for all existing IRQs.
|
||||
*/
|
||||
+7
-2
@@ -157,12 +157,17 @@ static int read_ldt(void __user * ptr, unsigned long bytecount)
|
||||
err = -EFAULT;
|
||||
up(&mm->context.sem);
|
||||
if (err < 0)
|
||||
return err;
|
||||
goto error_return;
|
||||
if (size != bytecount) {
|
||||
/* zero-fill the rest */
|
||||
clear_user(ptr+size, bytecount-size);
|
||||
if (clear_user(ptr+size, bytecount-size) != 0) {
|
||||
err = -EFAULT;
|
||||
goto error_return;
|
||||
}
|
||||
}
|
||||
return bytecount;
|
||||
error_return:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int read_default_ldt(void __user * ptr, unsigned long bytecount)
|
||||
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
* Dynamic DMA mapping support.
|
||||
*
|
||||
* On i386 there is no hardware dynamic DMA address translation,
|
||||
* so consistent alloc/free are merely page allocation/freeing.
|
||||
* The rest of the dynamic DMA mapping interface is implemented
|
||||
* in asm/pci.h.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/version.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
struct dma_coherent_mem {
|
||||
void *virt_base;
|
||||
u32 device_base;
|
||||
int size;
|
||||
int flags;
|
||||
unsigned long *bitmap;
|
||||
};
|
||||
|
||||
void
|
||||
dma_contig_memory(unsigned long vstart, unsigned int order)
|
||||
{
|
||||
/*
|
||||
* Ensure multi-page extents are contiguous in machine memory.
|
||||
* This code could be cleaned up some, and the number of
|
||||
* hypercalls reduced.
|
||||
*/
|
||||
pgd_t *pgd;
|
||||
pmd_t *pmd;
|
||||
pte_t *pte;
|
||||
unsigned long pfn, i;
|
||||
|
||||
scrub_pages(vstart, 1 << order);
|
||||
/* 1. Zap current PTEs, giving away the underlying pages. */
|
||||
for (i = 0; i < (1<<order); i++) {
|
||||
pgd = pgd_offset_k( (vstart + (i*PAGE_SIZE)));
|
||||
pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE)));
|
||||
pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
|
||||
pfn = pte->pte_low >> PAGE_SHIFT;
|
||||
queue_l1_entry_update(pte, 0);
|
||||
phys_to_machine_mapping[(__pa(vstart)>>PAGE_SHIFT)+i] =
|
||||
INVALID_P2M_ENTRY;
|
||||
flush_page_update_queue();
|
||||
if (HYPERVISOR_dom_mem_op(MEMOP_decrease_reservation,
|
||||
&pfn, 1, 0) != 1) BUG();
|
||||
}
|
||||
/* 2. Get a new contiguous memory extent. */
|
||||
if (HYPERVISOR_dom_mem_op(MEMOP_increase_reservation,
|
||||
&pfn, 1, order) != 1) BUG();
|
||||
/* 3. Map the new extent in place of old pages. */
|
||||
for (i = 0; i < (1<<order); i++) {
|
||||
pgd = pgd_offset_k( (vstart + (i*PAGE_SIZE)));
|
||||
pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE)));
|
||||
pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
|
||||
queue_l1_entry_update(
|
||||
pte, ((pfn+i)<<PAGE_SHIFT)|__PAGE_KERNEL);
|
||||
queue_machphys_update(
|
||||
pfn+i, (__pa(vstart)>>PAGE_SHIFT)+i);
|
||||
phys_to_machine_mapping[(__pa(vstart)>>PAGE_SHIFT)+i] =
|
||||
pfn+i;
|
||||
}
|
||||
/* Flush updates through and flush the TLB. */
|
||||
xen_tlb_flush();
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
|
||||
#define pte_offset_kernel pte_offset
|
||||
void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
|
||||
dma_addr_t *dma_handle)
|
||||
#else
|
||||
void *dma_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, int gfp)
|
||||
#endif
|
||||
{
|
||||
void *ret;
|
||||
unsigned int order = get_order(size);
|
||||
unsigned long vstart;
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
|
||||
int gfp = GFP_ATOMIC;
|
||||
|
||||
if (hwdev == NULL || ((u32)hwdev->dma_mask < 0xffffffff))
|
||||
gfp |= GFP_DMA;
|
||||
#else
|
||||
struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL;
|
||||
|
||||
/* ignore region specifiers */
|
||||
gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);
|
||||
|
||||
if (mem) {
|
||||
int page = bitmap_find_free_region(mem->bitmap, mem->size,
|
||||
order);
|
||||
if (page >= 0) {
|
||||
*dma_handle = mem->device_base + (page << PAGE_SHIFT);
|
||||
ret = mem->virt_base + (page << PAGE_SHIFT);
|
||||
memset(ret, 0, size);
|
||||
return ret;
|
||||
}
|
||||
if (mem->flags & DMA_MEMORY_EXCLUSIVE)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff))
|
||||
gfp |= GFP_DMA;
|
||||
#endif
|
||||
|
||||
vstart = __get_free_pages(gfp, order);
|
||||
ret = (void *)vstart;
|
||||
if (ret == NULL)
|
||||
return ret;
|
||||
|
||||
dma_contig_memory(vstart, order);
|
||||
|
||||
memset(ret, 0, size);
|
||||
*dma_handle = virt_to_bus(ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
|
||||
void pci_free_consistent(struct pci_dev *hwdev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle)
|
||||
#else
|
||||
void dma_free_coherent(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle)
|
||||
#endif
|
||||
{
|
||||
struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL;
|
||||
int order = get_order(size);
|
||||
|
||||
if (mem && vaddr >= mem->virt_base && vaddr < (mem->virt_base + (mem->size << PAGE_SHIFT))) {
|
||||
int page = (vaddr - mem->virt_base) >> PAGE_SHIFT;
|
||||
|
||||
bitmap_release_region(mem->bitmap, page, order);
|
||||
} else
|
||||
free_pages((unsigned long)vaddr, order);
|
||||
}
|
||||
|
||||
int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
|
||||
dma_addr_t device_addr, size_t size, int flags)
|
||||
{
|
||||
void __iomem *mem_base;
|
||||
int pages = size >> PAGE_SHIFT;
|
||||
int bitmap_size = (pages + 31)/32;
|
||||
|
||||
if ((flags & (DMA_MEMORY_MAP | DMA_MEMORY_IO)) == 0)
|
||||
goto out;
|
||||
if (!size)
|
||||
goto out;
|
||||
if (dev->dma_mem)
|
||||
goto out;
|
||||
|
||||
/* FIXME: this routine just ignores DMA_MEMORY_INCLUDES_CHILDREN */
|
||||
|
||||
mem_base = ioremap(bus_addr, size);
|
||||
if (!mem_base)
|
||||
goto out;
|
||||
|
||||
dev->dma_mem = kmalloc(GFP_KERNEL, sizeof(struct dma_coherent_mem));
|
||||
if (!dev->dma_mem)
|
||||
goto out;
|
||||
memset(dev->dma_mem, 0, sizeof(struct dma_coherent_mem));
|
||||
dev->dma_mem->bitmap = kmalloc(GFP_KERNEL, bitmap_size);
|
||||
if (!dev->dma_mem->bitmap)
|
||||
goto free1_out;
|
||||
memset(dev->dma_mem->bitmap, 0, bitmap_size);
|
||||
|
||||
dev->dma_mem->virt_base = mem_base;
|
||||
dev->dma_mem->device_base = device_addr;
|
||||
dev->dma_mem->size = pages;
|
||||
dev->dma_mem->flags = flags;
|
||||
|
||||
if (flags & DMA_MEMORY_MAP)
|
||||
return DMA_MEMORY_MAP;
|
||||
|
||||
return DMA_MEMORY_IO;
|
||||
|
||||
free1_out:
|
||||
kfree(dev->dma_mem->bitmap);
|
||||
out:
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(dma_declare_coherent_memory);
|
||||
|
||||
void dma_release_declared_memory(struct device *dev)
|
||||
{
|
||||
struct dma_coherent_mem *mem = dev->dma_mem;
|
||||
|
||||
if(!mem)
|
||||
return;
|
||||
dev->dma_mem = NULL;
|
||||
kfree(mem->bitmap);
|
||||
kfree(mem);
|
||||
}
|
||||
EXPORT_SYMBOL(dma_release_declared_memory);
|
||||
|
||||
void *dma_mark_declared_memory_occupied(struct device *dev,
|
||||
dma_addr_t device_addr, size_t size)
|
||||
{
|
||||
struct dma_coherent_mem *mem = dev->dma_mem;
|
||||
int pages = (size + (device_addr & ~PAGE_MASK) + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
||||
int pos, err;
|
||||
|
||||
if (!mem)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
pos = (device_addr - mem->device_base) >> PAGE_SHIFT;
|
||||
err = bitmap_allocate_region(mem->bitmap, pos, get_order(pages));
|
||||
if (err != 0)
|
||||
return ERR_PTR(err);
|
||||
return mem->virt_base + (pos << PAGE_SHIFT);
|
||||
}
|
||||
EXPORT_SYMBOL(dma_mark_declared_memory_occupied);
|
||||
+65
-38
@@ -144,13 +144,21 @@ void cpu_idle (void)
|
||||
/* endless idle loop with no priority at all */
|
||||
while (1) {
|
||||
while (!need_resched()) {
|
||||
void (*idle)(void) = pm_idle;
|
||||
void (*idle)(void);
|
||||
/*
|
||||
* Mark this as an RCU critical section so that
|
||||
* synchronize_kernel() in the unload path waits
|
||||
* for our completion.
|
||||
*/
|
||||
rcu_read_lock();
|
||||
idle = pm_idle;
|
||||
|
||||
if (!idle)
|
||||
idle = default_idle;
|
||||
|
||||
irq_stat[smp_processor_id()].idle_timestamp = jiffies;
|
||||
idle();
|
||||
rcu_read_unlock();
|
||||
}
|
||||
schedule();
|
||||
}
|
||||
@@ -185,19 +193,13 @@ void __init select_idle_routine(const struct cpuinfo_x86 *c)
|
||||
printk("monitor/mwait feature present.\n");
|
||||
/*
|
||||
* Skip, if setup has overridden idle.
|
||||
* Also, take care of system with asymmetric CPUs.
|
||||
* Use, mwait_idle only if all cpus support it.
|
||||
* If not, we fallback to default_idle()
|
||||
* One CPU supports mwait => All CPUs supports mwait
|
||||
*/
|
||||
if (!pm_idle) {
|
||||
printk("using mwait in idle threads.\n");
|
||||
pm_idle = mwait_idle;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (!pm_idle)
|
||||
pm_idle = default_idle;
|
||||
return;
|
||||
}
|
||||
|
||||
static int __init idle_setup (char *str)
|
||||
@@ -284,13 +286,22 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
|
||||
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 != tsk->thread.io_bitmap_ptr)) {
|
||||
if (unlikely(NULL != t->io_bitmap_ptr)) {
|
||||
int cpu = get_cpu();
|
||||
struct tss_struct *tss = init_tss + cpu;
|
||||
kfree(tsk->thread.io_bitmap_ptr);
|
||||
tsk->thread.io_bitmap_ptr = NULL;
|
||||
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();
|
||||
}
|
||||
@@ -360,8 +371,10 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
|
||||
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)
|
||||
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);
|
||||
}
|
||||
@@ -396,8 +409,10 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
|
||||
|
||||
err = 0;
|
||||
out:
|
||||
if (err && p->thread.io_bitmap_ptr)
|
||||
if (err && p->thread.io_bitmap_ptr) {
|
||||
kfree(p->thread.io_bitmap_ptr);
|
||||
p->thread.io_bitmap_max = 0;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -462,6 +477,37 @@ int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
|
||||
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
|
||||
*/
|
||||
@@ -501,7 +547,7 @@ struct task_struct fastcall * __switch_to(struct task_struct *prev_p, struct tas
|
||||
struct thread_struct *prev = &prev_p->thread,
|
||||
*next = &next_p->thread;
|
||||
int cpu = smp_processor_id();
|
||||
struct tss_struct *tss = init_tss + cpu;
|
||||
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 */
|
||||
@@ -600,28 +646,9 @@ struct task_struct fastcall * __switch_to(struct task_struct *prev_p, struct tas
|
||||
loaddebug(next, 7);
|
||||
}
|
||||
|
||||
if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr)) {
|
||||
if (next->io_bitmap_ptr) {
|
||||
/*
|
||||
* 4 cachelines copy ... not good, but not that
|
||||
* bad either. Anyone got something better?
|
||||
* This only affects processes which use ioperm().
|
||||
* [Putting the TSSs into 4k-tlb mapped regions
|
||||
* and playing VM tricks to switch the IO bitmap
|
||||
* is not really acceptable.]
|
||||
*/
|
||||
memcpy(tss->io_bitmap, next->io_bitmap_ptr,
|
||||
IO_BITMAP_BYTES);
|
||||
tss->io_bitmap_base = IO_BITMAP_OFFSET;
|
||||
} else
|
||||
/*
|
||||
* a bitmap offset pointing outside of the TSS limit
|
||||
* causes a nicely controllable SIGSEGV if a process
|
||||
* tries to use a port IO instruction. The first
|
||||
* sys_ioperm() call sets up the bitmap properly.
|
||||
*/
|
||||
tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET;
|
||||
}
|
||||
if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr))
|
||||
handle_io_bitmap(next, tss);
|
||||
|
||||
return prev_p;
|
||||
}
|
||||
|
||||
@@ -642,7 +669,7 @@ asmlinkage int sys_clone(struct pt_regs regs)
|
||||
child_tidptr = (int __user *)regs.edi;
|
||||
if (!newsp)
|
||||
newsp = regs.esp;
|
||||
return do_fork(clone_flags & ~CLONE_IDLETASK, newsp, ®s, 0, parent_tidptr, child_tidptr);
|
||||
return do_fork(clone_flags, newsp, ®s, 0, parent_tidptr, child_tidptr);
|
||||
}
|
||||
|
||||
/*
|
||||
+40
-3
@@ -50,6 +50,7 @@
|
||||
#include <asm/io.h>
|
||||
#include <asm-xen/hypervisor.h>
|
||||
#include "setup_arch_pre.h"
|
||||
#include <bios_ebda.h>
|
||||
|
||||
int disable_pse __initdata = 0;
|
||||
|
||||
@@ -216,9 +217,14 @@ static struct resource standard_io_resources[] = { {
|
||||
.end = 0x0021,
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_IO
|
||||
}, {
|
||||
.name = "timer",
|
||||
.name = "timer0",
|
||||
.start = 0x0040,
|
||||
.end = 0x005f,
|
||||
.end = 0x0043,
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_IO
|
||||
}, {
|
||||
.name = "timer1",
|
||||
.start = 0x0050,
|
||||
.end = 0x0053,
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_IO
|
||||
}, {
|
||||
.name = "keyboard",
|
||||
@@ -830,6 +836,14 @@ static void __init parse_cmdline_early (char ** cmdline_p)
|
||||
if (c == ' ' && !memcmp(from, "highmem=", 8))
|
||||
highmem_pages = memparse(from+8, &from) >> PAGE_SHIFT;
|
||||
|
||||
/*
|
||||
* vmalloc=size forces the vmalloc area to be exactly 'size'
|
||||
* bytes. This can be used to increase (or decrease) the
|
||||
* vmalloc area - the default is 128m.
|
||||
*/
|
||||
if (c == ' ' && !memcmp(from, "vmalloc=", 8))
|
||||
__VMALLOC_RESERVE = memparse(from+8, &from);
|
||||
|
||||
c = *(from++);
|
||||
if (!c)
|
||||
break;
|
||||
@@ -1012,6 +1026,17 @@ static void __init register_bootmem_low_pages(unsigned long max_low_pfn)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* workaround for Dell systems that neglect to reserve EBDA
|
||||
*/
|
||||
static void __init reserve_ebda_region(void)
|
||||
{
|
||||
unsigned int addr;
|
||||
addr = get_bios_ebda();
|
||||
if (addr)
|
||||
reserve_bootmem(addr, PAGE_SIZE);
|
||||
}
|
||||
|
||||
static unsigned long __init setup_memory(void)
|
||||
{
|
||||
unsigned long bootmap_size, start_pfn, max_low_pfn;
|
||||
@@ -1052,6 +1077,9 @@ static unsigned long __init setup_memory(void)
|
||||
reserve_bootmem(HIGH_MEMORY, (PFN_PHYS(start_pfn) +
|
||||
bootmap_size + PAGE_SIZE-1) - (HIGH_MEMORY));
|
||||
|
||||
/* reserve EBDA region, it's a 4K region */
|
||||
reserve_ebda_region();
|
||||
|
||||
/* could be an AMD 768MPX chipset. Reserve a page before VGA to prevent
|
||||
PCI prefetch into it (errata #56). Usually the page is reserved anyways,
|
||||
unless you have no PS/2 mouse plugged in. */
|
||||
@@ -1371,7 +1399,12 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
/*
|
||||
* NOTE: before this point _nobody_ is allowed to allocate
|
||||
* any memory using the bootmem allocator.
|
||||
* any memory using the bootmem allocator. Although the
|
||||
* alloctor is now initialised only the first 8Mb of the kernel
|
||||
* virtual address space has been mapped. All allocations before
|
||||
* paging_init() has completed must use the alloc_bootmem_low_pages()
|
||||
* variant (which allocates DMA'able memory) and care must be taken
|
||||
* not to exceed the 8Mb limit.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
@@ -1389,6 +1422,10 @@ void __init setup_arch(char **cmdline_p)
|
||||
virt_to_machine(pfn_to_mfn_frame_list) >> PAGE_SHIFT;
|
||||
|
||||
|
||||
/*
|
||||
* NOTE: at this point the bootmem allocator is fully available.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_EARLY_PRINTK
|
||||
{
|
||||
char *s = strstr(*cmdline_p, "earlyprintk=");
|
||||
+50
-30
@@ -19,6 +19,7 @@
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/personality.h>
|
||||
#include <linux/suspend.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/elf.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/ucontext.h>
|
||||
@@ -269,6 +270,7 @@ setup_sigcontext(struct sigcontext __user *sc, struct _fpstate __user *fpstate,
|
||||
struct pt_regs *regs, unsigned long mask)
|
||||
{
|
||||
int tmp, err = 0;
|
||||
unsigned long eflags;
|
||||
|
||||
tmp = 0;
|
||||
__asm__("movl %%gs,%0" : "=r"(tmp): "0"(tmp));
|
||||
@@ -290,7 +292,11 @@ setup_sigcontext(struct sigcontext __user *sc, struct _fpstate __user *fpstate,
|
||||
err |= __put_user(current->thread.error_code, &sc->err);
|
||||
err |= __put_user(regs->eip, &sc->eip);
|
||||
err |= __put_user(regs->xcs, (unsigned int __user *)&sc->cs);
|
||||
err |= __put_user(regs->eflags, &sc->eflags);
|
||||
eflags = regs->eflags;
|
||||
if (current->ptrace & PT_PTRACED) {
|
||||
eflags &= ~TF_MASK;
|
||||
}
|
||||
err |= __put_user(eflags, &sc->eflags);
|
||||
err |= __put_user(regs->esp, &sc->esp_at_signal);
|
||||
err |= __put_user(regs->xss, (unsigned int __user *)&sc->ss);
|
||||
|
||||
@@ -345,18 +351,20 @@ static void setup_frame(int sig, struct k_sigaction *ka,
|
||||
void __user *restorer;
|
||||
struct sigframe __user *frame;
|
||||
int err = 0;
|
||||
int usig;
|
||||
|
||||
frame = get_sigframe(ka, regs, sizeof(*frame));
|
||||
|
||||
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
|
||||
goto give_sigsegv;
|
||||
|
||||
err |= __put_user((current_thread_info()->exec_domain
|
||||
&& current_thread_info()->exec_domain->signal_invmap
|
||||
&& sig < 32
|
||||
? current_thread_info()->exec_domain->signal_invmap[sig]
|
||||
: sig),
|
||||
&frame->sig);
|
||||
usig = current_thread_info()->exec_domain
|
||||
&& current_thread_info()->exec_domain->signal_invmap
|
||||
&& sig < 32
|
||||
? current_thread_info()->exec_domain->signal_invmap[sig]
|
||||
: sig;
|
||||
|
||||
err |= __put_user(usig, &frame->sig);
|
||||
if (err)
|
||||
goto give_sigsegv;
|
||||
|
||||
@@ -395,13 +403,22 @@ static void setup_frame(int sig, struct k_sigaction *ka,
|
||||
/* Set up registers for signal handler */
|
||||
regs->esp = (unsigned long) frame;
|
||||
regs->eip = (unsigned long) ka->sa.sa_handler;
|
||||
regs->eax = (unsigned long) sig;
|
||||
regs->edx = (unsigned long) 0;
|
||||
regs->ecx = (unsigned long) 0;
|
||||
|
||||
set_fs(USER_DS);
|
||||
regs->xds = __USER_DS;
|
||||
regs->xes = __USER_DS;
|
||||
regs->xss = __USER_DS;
|
||||
regs->xcs = __USER_CS;
|
||||
regs->eflags &= ~TF_MASK;
|
||||
if (regs->eflags & TF_MASK) {
|
||||
if (current->ptrace & PT_PTRACED) {
|
||||
ptrace_notify(SIGTRAP);
|
||||
} else {
|
||||
regs->eflags &= ~TF_MASK;
|
||||
}
|
||||
}
|
||||
|
||||
#if DEBUG_SIG
|
||||
printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
|
||||
@@ -411,9 +428,7 @@ static void setup_frame(int sig, struct k_sigaction *ka,
|
||||
return;
|
||||
|
||||
give_sigsegv:
|
||||
if (sig == SIGSEGV)
|
||||
ka->sa.sa_handler = SIG_DFL;
|
||||
force_sig(SIGSEGV, current);
|
||||
force_sigsegv(sig, current);
|
||||
}
|
||||
|
||||
static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
||||
@@ -422,18 +437,20 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
||||
void __user *restorer;
|
||||
struct rt_sigframe __user *frame;
|
||||
int err = 0;
|
||||
int usig;
|
||||
|
||||
frame = get_sigframe(ka, regs, sizeof(*frame));
|
||||
|
||||
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
|
||||
goto give_sigsegv;
|
||||
|
||||
err |= __put_user((current_thread_info()->exec_domain
|
||||
&& current_thread_info()->exec_domain->signal_invmap
|
||||
&& sig < 32
|
||||
? current_thread_info()->exec_domain->signal_invmap[sig]
|
||||
: sig),
|
||||
&frame->sig);
|
||||
usig = current_thread_info()->exec_domain
|
||||
&& current_thread_info()->exec_domain->signal_invmap
|
||||
&& sig < 32
|
||||
? current_thread_info()->exec_domain->signal_invmap[sig]
|
||||
: sig;
|
||||
|
||||
err |= __put_user(usig, &frame->sig);
|
||||
err |= __put_user(&frame->info, &frame->pinfo);
|
||||
err |= __put_user(&frame->uc, &frame->puc);
|
||||
err |= copy_siginfo_to_user(&frame->info, info);
|
||||
@@ -476,13 +493,22 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
||||
/* Set up registers for signal handler */
|
||||
regs->esp = (unsigned long) frame;
|
||||
regs->eip = (unsigned long) ka->sa.sa_handler;
|
||||
regs->eax = (unsigned long) usig;
|
||||
regs->edx = (unsigned long) &frame->info;
|
||||
regs->ecx = (unsigned long) &frame->uc;
|
||||
|
||||
set_fs(USER_DS);
|
||||
regs->xds = __USER_DS;
|
||||
regs->xes = __USER_DS;
|
||||
regs->xss = __USER_DS;
|
||||
regs->xcs = __USER_CS;
|
||||
regs->eflags &= ~TF_MASK;
|
||||
if (regs->eflags & TF_MASK) {
|
||||
if (current->ptrace & PT_PTRACED) {
|
||||
ptrace_notify(SIGTRAP);
|
||||
} else {
|
||||
regs->eflags &= ~TF_MASK;
|
||||
}
|
||||
}
|
||||
|
||||
#if DEBUG_SIG
|
||||
printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
|
||||
@@ -492,9 +518,7 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
||||
return;
|
||||
|
||||
give_sigsegv:
|
||||
if (sig == SIGSEGV)
|
||||
ka->sa.sa_handler = SIG_DFL;
|
||||
force_sig(SIGSEGV, current);
|
||||
force_sigsegv(sig, current);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -502,11 +526,9 @@ give_sigsegv:
|
||||
*/
|
||||
|
||||
static void
|
||||
handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset,
|
||||
struct pt_regs * regs)
|
||||
handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
|
||||
sigset_t *oldset, struct pt_regs * regs)
|
||||
{
|
||||
struct k_sigaction *ka = ¤t->sighand->action[sig-1];
|
||||
|
||||
/* Are we from a system call? */
|
||||
if (regs->orig_eax >= 0) {
|
||||
/* If so, check system call restarting.. */
|
||||
@@ -534,9 +556,6 @@ handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset,
|
||||
else
|
||||
setup_frame(sig, ka, oldset, regs);
|
||||
|
||||
if (ka->sa.sa_flags & SA_ONESHOT)
|
||||
ka->sa.sa_handler = SIG_DFL;
|
||||
|
||||
if (!(ka->sa.sa_flags & SA_NODEFER)) {
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask);
|
||||
@@ -555,6 +574,7 @@ int fastcall do_signal(struct pt_regs *regs, sigset_t *oldset)
|
||||
{
|
||||
siginfo_t info;
|
||||
int signr;
|
||||
struct k_sigaction ka;
|
||||
|
||||
/*
|
||||
* We want the common case to go fast, which
|
||||
@@ -573,7 +593,7 @@ int fastcall do_signal(struct pt_regs *regs, sigset_t *oldset)
|
||||
if (!oldset)
|
||||
oldset = ¤t->blocked;
|
||||
|
||||
signr = get_signal_to_deliver(&info, regs, NULL);
|
||||
signr = get_signal_to_deliver(&info, &ka, regs, NULL);
|
||||
if (signr > 0) {
|
||||
/* Reenable any watchpoints before delivering the
|
||||
* signal to user space. The processor register will
|
||||
@@ -585,7 +605,7 @@ int fastcall do_signal(struct pt_regs *regs, sigset_t *oldset)
|
||||
current->thread.debugreg[7]);
|
||||
|
||||
/* Whee! Actually deliver the signal. */
|
||||
handle_signal(signr, &info, oldset, regs);
|
||||
handle_signal(signr, &info, &ka, oldset, regs);
|
||||
return 1;
|
||||
}
|
||||
|
||||
+4
-4
@@ -24,7 +24,7 @@ extern asmlinkage void sysenter_entry(void);
|
||||
void enable_sep_cpu(void *info)
|
||||
{
|
||||
int cpu = get_cpu();
|
||||
struct tss_struct *tss = init_tss + cpu;
|
||||
struct tss_struct *tss = &per_cpu(init_tss, cpu);
|
||||
|
||||
tss->ss1 = __KERNEL_CS;
|
||||
tss->esp1 = sizeof(struct tss_struct) + (unsigned long) tss;
|
||||
@@ -43,18 +43,18 @@ extern const char vsyscall_sysenter_start, vsyscall_sysenter_end;
|
||||
|
||||
static int __init sysenter_setup(void)
|
||||
{
|
||||
unsigned long page = get_zeroed_page(GFP_ATOMIC);
|
||||
void *page = (void *)get_zeroed_page(GFP_ATOMIC);
|
||||
|
||||
__set_fixmap(FIX_VSYSCALL, __pa(page), PAGE_READONLY_EXEC);
|
||||
|
||||
if (1 /* XXXcl not yet */ || !boot_cpu_has(X86_FEATURE_SEP)) {
|
||||
memcpy((void *) page,
|
||||
memcpy(page,
|
||||
&vsyscall_int80_start,
|
||||
&vsyscall_int80_end - &vsyscall_int80_start);
|
||||
return 0;
|
||||
}
|
||||
|
||||
memcpy((void *) page,
|
||||
memcpy(page,
|
||||
&vsyscall_sysenter_start,
|
||||
&vsyscall_sysenter_end - &vsyscall_sysenter_start);
|
||||
|
||||
+15
-2
@@ -355,6 +355,18 @@ unsigned long long monotonic_clock(void)
|
||||
}
|
||||
EXPORT_SYMBOL(monotonic_clock);
|
||||
|
||||
#if defined(CONFIG_SMP) && defined(CONFIG_FRAME_POINTER)
|
||||
unsigned long profile_pc(struct pt_regs *regs)
|
||||
{
|
||||
unsigned long pc = instruction_pointer(regs);
|
||||
|
||||
if (in_lock_functions(pc))
|
||||
return *(unsigned long *)(regs->ebp + 4);
|
||||
|
||||
return pc;
|
||||
}
|
||||
EXPORT_SYMBOL(profile_pc);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* timer_interrupt() needs to keep up the real-time clock,
|
||||
@@ -533,11 +545,12 @@ static int __time_suspend(struct sys_device *dev, u32 state)
|
||||
|
||||
static int __time_resume(struct sys_device *dev)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned long sec = get_cmos_time() + clock_cmos_diff;
|
||||
write_seqlock_irq(&xtime_lock);
|
||||
write_seqlock_irqsave(&xtime_lock, flags);
|
||||
xtime.tv_sec = sec;
|
||||
xtime.tv_nsec = 0;
|
||||
write_sequnlock_irq(&xtime_lock);
|
||||
write_sequnlock_irqrestore(&xtime_lock, flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
File renamed without changes.
+5
-2
@@ -274,7 +274,8 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
|
||||
{
|
||||
struct cpufreq_freqs *freq = data;
|
||||
|
||||
write_seqlock_irq(&xtime_lock);
|
||||
if (val != CPUFREQ_RESUMECHANGE)
|
||||
write_seqlock_irq(&xtime_lock);
|
||||
if (!ref_freq) {
|
||||
ref_freq = freq->old;
|
||||
loops_per_jiffy_ref = cpu_data[freq->cpu].loops_per_jiffy;
|
||||
@@ -300,7 +301,9 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
|
||||
}
|
||||
#endif
|
||||
}
|
||||
write_sequnlock_irq(&xtime_lock);
|
||||
|
||||
if (val != CPUFREQ_RESUMECHANGE)
|
||||
write_sequnlock_irq(&xtime_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
+130
-32
@@ -26,6 +26,7 @@
|
||||
#include <linux/kallsyms.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/version.h>
|
||||
#include <linux/kprobes.h>
|
||||
|
||||
#ifdef CONFIG_EISA
|
||||
#include <linux/ioport.h>
|
||||
@@ -48,6 +49,7 @@
|
||||
|
||||
#include <asm/smp.h>
|
||||
#include <asm/arch_hooks.h>
|
||||
#include <asm/kdebug.h>
|
||||
|
||||
#include <linux/irq.h>
|
||||
#include <linux/module.h>
|
||||
@@ -92,6 +94,18 @@ asmlinkage void fixup_4gb_segment(void);
|
||||
asmlinkage void machine_check(void);
|
||||
|
||||
static int kstack_depth_to_print = 24;
|
||||
struct notifier_block *i386die_chain;
|
||||
static spinlock_t die_notifier_lock = SPIN_LOCK_UNLOCKED;
|
||||
|
||||
int register_die_notifier(struct notifier_block *nb)
|
||||
{
|
||||
int err = 0;
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&die_notifier_lock, flags);
|
||||
err = notifier_chain_register(&i386die_chain, nb);
|
||||
spin_unlock_irqrestore(&die_notifier_lock, flags);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int valid_stack_ptr(struct task_struct *task, void *p)
|
||||
{
|
||||
@@ -216,7 +230,7 @@ void show_registers(struct pt_regs *regs)
|
||||
ss = regs->xss & 0xffff;
|
||||
}
|
||||
print_modules();
|
||||
printk("CPU: %d\nEIP: %04x:[<%08lx>] %s\nEFLAGS: %08lx"
|
||||
printk("CPU: %d\nEIP: %04x:[<%08lx>] %s VLI\nEFLAGS: %08lx"
|
||||
" (%s) \n",
|
||||
smp_processor_id(), 0xffff & regs->xcs, regs->eip,
|
||||
print_tainted(), regs->eflags, UTS_RELEASE);
|
||||
@@ -234,23 +248,25 @@ void show_registers(struct pt_regs *regs)
|
||||
* time of the fault..
|
||||
*/
|
||||
if (in_kernel) {
|
||||
u8 *eip;
|
||||
|
||||
printk("\nStack: ");
|
||||
show_stack(NULL, (unsigned long*)esp);
|
||||
|
||||
printk("Code: ");
|
||||
if(regs->eip < PAGE_OFFSET)
|
||||
goto bad;
|
||||
|
||||
for(i=0;i<20;i++)
|
||||
{
|
||||
eip = (u8 *)regs->eip - 43;
|
||||
for (i = 0; i < 64; i++, eip++) {
|
||||
unsigned char c;
|
||||
if(__get_user(c, &((unsigned char*)regs->eip)[i])) {
|
||||
bad:
|
||||
|
||||
if (eip < (u8 *)PAGE_OFFSET || __get_user(c, eip)) {
|
||||
printk(" Bad EIP value.");
|
||||
break;
|
||||
}
|
||||
printk("%02x ", c);
|
||||
if (eip == (u8 *)regs->eip)
|
||||
printk("<%02x> ", c);
|
||||
else
|
||||
printk("%02x ", c);
|
||||
}
|
||||
}
|
||||
printk("\n");
|
||||
@@ -292,35 +308,53 @@ bug:
|
||||
printk("Kernel BUG\n");
|
||||
}
|
||||
|
||||
spinlock_t die_lock = SPIN_LOCK_UNLOCKED;
|
||||
|
||||
void die(const char * str, struct pt_regs * regs, long err)
|
||||
{
|
||||
static struct {
|
||||
spinlock_t lock;
|
||||
u32 lock_owner;
|
||||
int lock_owner_depth;
|
||||
} die = {
|
||||
.lock = SPIN_LOCK_UNLOCKED,
|
||||
.lock_owner = -1,
|
||||
.lock_owner_depth = 0
|
||||
};
|
||||
static int die_counter;
|
||||
int nl = 0;
|
||||
|
||||
console_verbose();
|
||||
spin_lock_irq(&die_lock);
|
||||
bust_spinlocks(1);
|
||||
handle_BUG(regs);
|
||||
printk(KERN_ALERT "%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
|
||||
if (die.lock_owner != smp_processor_id()) {
|
||||
console_verbose();
|
||||
spin_lock_irq(&die.lock);
|
||||
die.lock_owner = smp_processor_id();
|
||||
die.lock_owner_depth = 0;
|
||||
bust_spinlocks(1);
|
||||
}
|
||||
|
||||
if (++die.lock_owner_depth < 3) {
|
||||
int nl = 0;
|
||||
handle_BUG(regs);
|
||||
printk(KERN_ALERT "%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
|
||||
#ifdef CONFIG_PREEMPT
|
||||
printk("PREEMPT ");
|
||||
nl = 1;
|
||||
printk("PREEMPT ");
|
||||
nl = 1;
|
||||
#endif
|
||||
#ifdef CONFIG_SMP
|
||||
printk("SMP ");
|
||||
nl = 1;
|
||||
printk("SMP ");
|
||||
nl = 1;
|
||||
#endif
|
||||
#ifdef CONFIG_DEBUG_PAGEALLOC
|
||||
printk("DEBUG_PAGEALLOC");
|
||||
nl = 1;
|
||||
printk("DEBUG_PAGEALLOC");
|
||||
nl = 1;
|
||||
#endif
|
||||
if (nl)
|
||||
printk("\n");
|
||||
show_registers(regs);
|
||||
if (nl)
|
||||
printk("\n");
|
||||
notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV);
|
||||
show_registers(regs);
|
||||
} else
|
||||
printk(KERN_ERR "Recursive die() failure, output suppressed\n");
|
||||
|
||||
bust_spinlocks(0);
|
||||
spin_unlock_irq(&die_lock);
|
||||
die.lock_owner = -1;
|
||||
spin_unlock_irq(&die.lock);
|
||||
if (in_interrupt())
|
||||
panic("Fatal exception in interrupt");
|
||||
|
||||
@@ -387,6 +421,9 @@ static inline void do_trap(int trapnr, int signr, char *str, int vm86,
|
||||
#define DO_ERROR(trapnr, signr, str, name) \
|
||||
asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
|
||||
{ \
|
||||
if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
|
||||
== NOTIFY_STOP) \
|
||||
return; \
|
||||
do_trap(trapnr, signr, str, 0, regs, error_code, NULL); \
|
||||
}
|
||||
|
||||
@@ -398,12 +435,18 @@ asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
|
||||
info.si_errno = 0; \
|
||||
info.si_code = sicode; \
|
||||
info.si_addr = (void __user *)siaddr; \
|
||||
if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
|
||||
== NOTIFY_STOP) \
|
||||
return; \
|
||||
do_trap(trapnr, signr, str, 0, regs, error_code, &info); \
|
||||
}
|
||||
|
||||
#define DO_VM86_ERROR(trapnr, signr, str, name) \
|
||||
asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
|
||||
{ \
|
||||
if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
|
||||
== NOTIFY_STOP) \
|
||||
return; \
|
||||
do_trap(trapnr, signr, str, 1, regs, error_code, NULL); \
|
||||
}
|
||||
|
||||
@@ -415,11 +458,16 @@ asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
|
||||
info.si_errno = 0; \
|
||||
info.si_code = sicode; \
|
||||
info.si_addr = (void __user *)siaddr; \
|
||||
if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
|
||||
== NOTIFY_STOP) \
|
||||
return; \
|
||||
do_trap(trapnr, signr, str, 1, regs, error_code, &info); \
|
||||
}
|
||||
|
||||
DO_VM86_ERROR_INFO( 0, SIGFPE, "divide error", divide_error, FPE_INTDIV, regs->eip)
|
||||
#ifndef CONFIG_KPROBES
|
||||
DO_VM86_ERROR( 3, SIGTRAP, "int3", int3)
|
||||
#endif
|
||||
DO_VM86_ERROR( 4, SIGSEGV, "overflow", overflow)
|
||||
DO_VM86_ERROR( 5, SIGSEGV, "bounds", bounds)
|
||||
DO_ERROR_INFO( 6, SIGILL, "invalid operand", invalid_op, ILL_ILLOPN, regs->eip)
|
||||
@@ -457,11 +505,6 @@ asmlinkage void do_general_protection(struct pt_regs * regs, long error_code)
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (regs->eflags & X86_EFLAGS_IF)
|
||||
local_irq_enable();
|
||||
#endif
|
||||
|
||||
if (regs->eflags & VM_MASK)
|
||||
goto gp_in_vm86;
|
||||
|
||||
@@ -479,8 +522,12 @@ gp_in_vm86:
|
||||
return;
|
||||
|
||||
gp_in_kernel:
|
||||
if (!fixup_exception(regs))
|
||||
if (!fixup_exception(regs)) {
|
||||
if (notify_die(DIE_GPF, "general protection fault", regs,
|
||||
error_code, 13, SIGSEGV) == NOTIFY_STOP);
|
||||
return;
|
||||
die("general protection fault", regs, error_code);
|
||||
}
|
||||
}
|
||||
|
||||
static void mem_parity_error(unsigned char reason, struct pt_regs * regs)
|
||||
@@ -524,11 +571,35 @@ static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
|
||||
printk("Do you have a strange power saving mode enabled?\n");
|
||||
}
|
||||
|
||||
static spinlock_t nmi_print_lock = SPIN_LOCK_UNLOCKED;
|
||||
|
||||
void die_nmi (struct pt_regs *regs, const char *msg)
|
||||
{
|
||||
spin_lock(&nmi_print_lock);
|
||||
/*
|
||||
* We are in trouble anyway, lets at least try
|
||||
* to get a message out.
|
||||
*/
|
||||
bust_spinlocks(1);
|
||||
printk(msg);
|
||||
printk(" on CPU%d, eip %08lx, registers:\n",
|
||||
smp_processor_id(), regs->eip);
|
||||
show_registers(regs);
|
||||
printk("console shuts up ...\n");
|
||||
console_silent();
|
||||
spin_unlock(&nmi_print_lock);
|
||||
bust_spinlocks(0);
|
||||
do_exit(SIGSEGV);
|
||||
}
|
||||
|
||||
static void default_do_nmi(struct pt_regs * regs)
|
||||
{
|
||||
unsigned char reason = get_nmi_reason();
|
||||
|
||||
if (!(reason & 0xc0)) {
|
||||
if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 0, SIGINT)
|
||||
== NOTIFY_STOP)
|
||||
return;
|
||||
#ifdef CONFIG_X86_LOCAL_APIC
|
||||
/*
|
||||
* Ok, so this is none of the documented NMI sources,
|
||||
@@ -542,6 +613,8 @@ static void default_do_nmi(struct pt_regs * regs)
|
||||
unknown_nmi_error(reason, regs);
|
||||
return;
|
||||
}
|
||||
if (notify_die(DIE_NMI, "nmi", regs, reason, 0, SIGINT) == NOTIFY_STOP)
|
||||
return;
|
||||
if (reason & 0x80)
|
||||
mem_parity_error(reason, regs);
|
||||
if (reason & 0x40)
|
||||
@@ -585,6 +658,20 @@ void unset_nmi_callback(void)
|
||||
nmi_callback = dummy_nmi_callback;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_KPROBES
|
||||
asmlinkage int do_int3(struct pt_regs *regs, long error_code)
|
||||
{
|
||||
if (notify_die(DIE_INT3, "int3", regs, error_code, 3, SIGTRAP)
|
||||
== NOTIFY_STOP)
|
||||
return 1;
|
||||
/* This is an interrupt gate, because kprobes wants interrupts
|
||||
disabled. Normal trap handlers don't. */
|
||||
restore_interrupts(regs);
|
||||
do_trap(3, SIGTRAP, "int3", 1, regs, error_code, NULL);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Our handling of the processor debug registers is non-trivial.
|
||||
* We do not clear them on entry and exit from the kernel. Therefore
|
||||
@@ -615,6 +702,9 @@ asmlinkage void do_debug(struct pt_regs * regs, long error_code)
|
||||
|
||||
condition = HYPERVISOR_get_debugreg(6);
|
||||
|
||||
if (notify_die(DIE_DEBUG, "debug", regs, condition, error_code,
|
||||
SIGTRAP) == NOTIFY_STOP)
|
||||
return;
|
||||
#if 0
|
||||
/* It's safe to allow irq's after DR6 has been saved */
|
||||
if (regs->eflags & X86_EFLAGS_IF)
|
||||
@@ -903,6 +993,14 @@ void set_intr_gate(unsigned int n, void *addr)
|
||||
}
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* This routine sets up an interrupt gate at directory privilege level 3.
|
||||
*/
|
||||
static inline void set_system_intr_gate(unsigned int n, void *addr)
|
||||
{
|
||||
_set_gate(idt_table+n, 14, 3, addr, __KERNEL_CS);
|
||||
}
|
||||
|
||||
static void __init set_trap_gate(unsigned int n, void *addr)
|
||||
{
|
||||
_set_gate(idt_table+n,15,0,addr,__KERNEL_CS);
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
+2
-2
@@ -6,8 +6,8 @@ XENARCH := $(subst ",,$(CONFIG_XENARCH))
|
||||
|
||||
CFLAGS += -Iarch/$(XENARCH)/mm
|
||||
|
||||
obj-y := init.o fault.o ioremap.o pgtable.o hypervisor.o pageattr.o
|
||||
c-obj-y := extable.o
|
||||
obj-y := init.o pgtable.o fault.o ioremap.o pageattr.o hypervisor.o
|
||||
c-obj-y := extable.o mmap.o
|
||||
|
||||
c-obj-$(CONFIG_DISCONTIGMEM) += discontig.o
|
||||
c-obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
|
||||
+4
-1
@@ -24,8 +24,8 @@
|
||||
|
||||
#include <asm/system.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/hardirq.h>
|
||||
#include <asm/desc.h>
|
||||
#include <asm/kdebug.h>
|
||||
|
||||
extern void die(const char *,struct pt_regs *,long);
|
||||
|
||||
@@ -229,6 +229,9 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code,
|
||||
error_code &= 3;
|
||||
error_code |= (regs->xcs & 2) << 1;
|
||||
|
||||
if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
|
||||
SIGSEGV) == NOTIFY_STOP)
|
||||
return;
|
||||
#if 0
|
||||
/* It's safe to allow irq's after cr2 has been saved */
|
||||
if (regs->eflags & (X86_EFLAGS_IF|VM_MASK))
|
||||
File renamed without changes.
File renamed without changes.
+4
-2
@@ -41,10 +41,12 @@
|
||||
#include <asm/sections.h>
|
||||
#include <asm-xen/hypervisor.h>
|
||||
|
||||
unsigned int __VMALLOC_RESERVE = 128 << 20;
|
||||
|
||||
DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
|
||||
unsigned long highstart_pfn, highend_pfn;
|
||||
|
||||
static int do_test_wp_bit(void);
|
||||
static int noinline do_test_wp_bit(void);
|
||||
|
||||
/*
|
||||
* Creates a middle page table and puts a pointer to it in the
|
||||
@@ -762,7 +764,7 @@ void __init pgtable_cache_init(void)
|
||||
* This function cannot be __init, since exceptions don't work in that
|
||||
* section. Put this after the callers, so that it cannot be inlined.
|
||||
*/
|
||||
static int do_test_wp_bit(void)
|
||||
static int noinline do_test_wp_bit(void)
|
||||
{
|
||||
char tmp_reg;
|
||||
int flag;
|
||||
+11
-11
@@ -129,9 +129,9 @@ static int remap_area_pages(unsigned long address, unsigned long phys_addr,
|
||||
* have to convert them into an offset in a page-aligned mapping, but the
|
||||
* caller shouldn't need to know that small detail.
|
||||
*/
|
||||
void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
|
||||
void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
|
||||
{
|
||||
void * addr;
|
||||
void __iomem * addr;
|
||||
struct vm_struct * area;
|
||||
unsigned long offset, last_addr;
|
||||
|
||||
@@ -147,7 +147,7 @@ void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flag
|
||||
* Don't remap the low PCI/ISA area, it's always mapped..
|
||||
*/
|
||||
if (phys_addr >= 0xA0000 && last_addr < 0x100000)
|
||||
return phys_to_virt(phys_addr);
|
||||
return (void __iomem *) phys_to_virt(phys_addr);
|
||||
|
||||
/*
|
||||
* Don't allow anybody to remap normal RAM that we're using..
|
||||
@@ -178,12 +178,12 @@ void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flag
|
||||
if (!area)
|
||||
return NULL;
|
||||
area->phys_addr = phys_addr;
|
||||
addr = area->addr;
|
||||
addr = (void __iomem *) area->addr;
|
||||
if (remap_area_pages((unsigned long) addr, phys_addr, size, flags)) {
|
||||
vunmap(addr);
|
||||
vunmap((void __force *) addr);
|
||||
return NULL;
|
||||
}
|
||||
return (void *) (offset + (char *)addr);
|
||||
return (void __iomem *) (offset + (char __iomem *)addr);
|
||||
}
|
||||
|
||||
|
||||
@@ -209,10 +209,10 @@ void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flag
|
||||
* Must be freed with iounmap.
|
||||
*/
|
||||
|
||||
void *ioremap_nocache (unsigned long phys_addr, unsigned long size)
|
||||
void __iomem *ioremap_nocache (unsigned long phys_addr, unsigned long size)
|
||||
{
|
||||
unsigned long last_addr;
|
||||
void *p = __ioremap(phys_addr, size, _PAGE_PCD);
|
||||
void __iomem *p = __ioremap(phys_addr, size, _PAGE_PCD);
|
||||
if (!p)
|
||||
return p;
|
||||
|
||||
@@ -243,14 +243,14 @@ void *ioremap_nocache (unsigned long phys_addr, unsigned long size)
|
||||
return p;
|
||||
}
|
||||
|
||||
void iounmap(void *addr)
|
||||
void iounmap(volatile void __iomem *addr)
|
||||
{
|
||||
struct vm_struct *p;
|
||||
if ((unsigned long)addr <= 0x100000)
|
||||
return;
|
||||
if (addr <= high_memory)
|
||||
if ((void __force *) addr <= high_memory)
|
||||
return;
|
||||
p = remove_vm_area((void *) (PAGE_MASK & (unsigned long) addr));
|
||||
p = remove_vm_area((void *) (PAGE_MASK & (unsigned long __force) addr));
|
||||
if (!p) {
|
||||
printk("__iounmap: bad address %p\n", addr);
|
||||
return;
|
||||
+1
-1
@@ -114,7 +114,7 @@ __change_page_attr(struct page *page, pgprot_t prot)
|
||||
kpte = lookup_address(address);
|
||||
if (!kpte)
|
||||
return -EINVAL;
|
||||
kpte_page = virt_to_page(((unsigned long)kpte) & PAGE_MASK);
|
||||
kpte_page = virt_to_page(kpte);
|
||||
if (pgprot_val(prot) != pgprot_val(PAGE_KERNEL)) {
|
||||
if ((pte_val(*kpte) & _PAGE_PSE) == 0) {
|
||||
pte_t old = *kpte;
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+3
-3
@@ -4,10 +4,10 @@
|
||||
|
||||
XENARCH := $(subst ",,$(CONFIG_XENARCH))
|
||||
|
||||
$(obj)/vmlinux.lds.s:
|
||||
@ln -fsn $(srctree)/arch/$(ARCH)/$(XENARCH)/kernel/vmlinux.lds.s $@
|
||||
$(obj)/vmlinux.lds:
|
||||
@ln -fsn $(srctree)/arch/$(ARCH)/$(XENARCH)/kernel/vmlinux.lds $@
|
||||
|
||||
extra-y += vmlinux.lds.s
|
||||
extra-y += vmlinux.lds
|
||||
|
||||
obj-y := ctrl_if.o evtchn.o fixup.o process.o reboot.o xen_proc.o empty.o \
|
||||
gnttab.o skbuff.o
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+2
-2
@@ -12,10 +12,10 @@ extern int set_timeout_timer(void);
|
||||
|
||||
void xen_cpu_idle (void)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
struct rcu_data *rdp = &__get_cpu_var(rcu_bh_data);
|
||||
|
||||
local_irq_disable();
|
||||
if (need_resched() || RCU_curlist(cpu)) {
|
||||
if (need_resched() || rdp->curlist) {
|
||||
local_irq_enable();
|
||||
return;
|
||||
}
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
+10
-2
@@ -7,6 +7,7 @@
|
||||
|
||||
obj-$(CONFIG_PCI) += pci/
|
||||
obj-$(CONFIG_PARISC) += parisc/
|
||||
obj-y += video/
|
||||
obj-$(CONFIG_ACPI_BOOT) += acpi/
|
||||
# PnP must come after ACPI since it will eventually need to check if acpi
|
||||
# was used and do nothing if so
|
||||
@@ -15,6 +16,13 @@ obj-$(CONFIG_PNP) += pnp/
|
||||
# char/ comes before serial/ etc so that the VT console is the boot-time
|
||||
# default.
|
||||
obj-y += char/
|
||||
|
||||
# i810fb depends on char/agp/
|
||||
obj-$(CONFIG_FB_I810) += video/i810/
|
||||
|
||||
# we also need input/serio early so serio bus is initialized by the time
|
||||
# serial drivers start registering their serio ports
|
||||
obj-$(CONFIG_SERIO) += input/serio/
|
||||
obj-y += serial/
|
||||
obj-$(CONFIG_PARPORT) += parport/
|
||||
obj-y += base/ block/ misc/ net/ media/
|
||||
@@ -27,7 +35,7 @@ obj-$(CONFIG_FC4) += fc4/
|
||||
obj-$(CONFIG_SCSI) += scsi/
|
||||
obj-$(CONFIG_FUSION) += message/
|
||||
obj-$(CONFIG_IEEE1394) += ieee1394/
|
||||
obj-y += cdrom/ video/
|
||||
obj-y += cdrom/
|
||||
obj-$(CONFIG_MTD) += mtd/
|
||||
obj-$(CONFIG_PCMCIA) += pcmcia/
|
||||
obj-$(CONFIG_DIO) += dio/
|
||||
@@ -40,7 +48,6 @@ obj-$(CONFIG_USB) += usb/
|
||||
obj-$(CONFIG_USB_GADGET) += usb/gadget/
|
||||
obj-$(CONFIG_INPUT) += input/
|
||||
obj-$(CONFIG_GAMEPORT) += input/gameport/
|
||||
obj-$(CONFIG_SERIO) += input/serio/
|
||||
obj-$(CONFIG_I2O) += message/
|
||||
obj-$(CONFIG_I2C) += i2c/
|
||||
obj-$(CONFIG_W1) += w1/
|
||||
@@ -51,4 +58,5 @@ obj-$(CONFIG_ISDN) += isdn/
|
||||
obj-$(CONFIG_MCA) += mca/
|
||||
obj-$(CONFIG_EISA) += eisa/
|
||||
obj-$(CONFIG_CPU_FREQ) += cpufreq/
|
||||
obj-$(CONFIG_MMC) += mmc/
|
||||
obj-y += firmware/
|
||||
+2
-8
@@ -32,9 +32,6 @@
|
||||
# include <linux/efi.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FB
|
||||
extern void fbmem_init(void);
|
||||
#endif
|
||||
#if defined(CONFIG_S390_TAPE) && defined(CONFIG_S390_TAPE_CHAR)
|
||||
extern void tapechar_init(void);
|
||||
#endif
|
||||
@@ -87,7 +84,7 @@ static inline int uncached_access(struct file *file, unsigned long addr)
|
||||
* above the IO hole... Ah, and of course, XFree86 doesn't pass
|
||||
* O_SYNC when mapping us to tap IO space. Surprised ?
|
||||
*/
|
||||
return !page_is_ram(addr);
|
||||
return !page_is_ram(addr >> PAGE_SHIFT);
|
||||
#else
|
||||
/*
|
||||
* Accessing memory above the top the kernel knows about or through a file pointer
|
||||
@@ -436,7 +433,7 @@ static inline size_t read_zero_pagealigned(char __user * buf, size_t size)
|
||||
|
||||
if (vma->vm_start > addr || (vma->vm_flags & VM_WRITE) == 0)
|
||||
goto out_up;
|
||||
if (vma->vm_flags & VM_SHARED)
|
||||
if (vma->vm_flags & (VM_SHARED | VM_HUGETLB))
|
||||
break;
|
||||
count = vma->vm_end - addr;
|
||||
if (count > size)
|
||||
@@ -750,9 +747,6 @@ static int __init chr_dev_init(void)
|
||||
S_IFCHR | devlist[i].mode, devlist[i].name);
|
||||
}
|
||||
|
||||
#if defined (CONFIG_FB)
|
||||
fbmem_init();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
+653
-170
File diff suppressed because it is too large.
Load diff
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+8
@@ -13,11 +13,19 @@
|
||||
* Note: the old pte is known to not be writable, so we don't need to
|
||||
* worry about dirty bits etc getting lost.
|
||||
*/
|
||||
#ifndef __HAVE_ARCH_SET_PTE_ATOMIC
|
||||
#define ptep_establish(__vma, __address, __ptep, __entry) \
|
||||
do { \
|
||||
set_pte(__ptep, __entry); \
|
||||
flush_tlb_page(__vma, __address); \
|
||||
} while (0)
|
||||
#else /* __HAVE_ARCH_SET_PTE_ATOMIC */
|
||||
#define ptep_establish(__vma, __address, __ptep, __entry) \
|
||||
do { \
|
||||
set_pte_atomic(__ptep, __entry); \
|
||||
flush_tlb_page(__vma, __address); \
|
||||
} while (0)
|
||||
#endif /* __HAVE_ARCH_SET_PTE_ATOMIC */
|
||||
#endif
|
||||
|
||||
#ifndef __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS
|
||||
File renamed without changes.
+12
-1
@@ -1,7 +1,6 @@
|
||||
#ifndef _ASM_I386_DMA_MAPPING_H
|
||||
#define _ASM_I386_DMA_MAPPING_H
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
#include <asm/cache.h>
|
||||
@@ -163,4 +162,16 @@ dma_cache_sync(void *vaddr, size_t size,
|
||||
flush_write_buffers();
|
||||
}
|
||||
|
||||
#define ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY
|
||||
extern int
|
||||
dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
|
||||
dma_addr_t device_addr, size_t size, int flags);
|
||||
|
||||
extern void
|
||||
dma_release_declared_memory(struct device *dev);
|
||||
|
||||
extern void *
|
||||
dma_mark_declared_memory_occupied(struct device *dev,
|
||||
dma_addr_t device_addr, size_t size);
|
||||
|
||||
#endif
|
||||
+13
-8
@@ -14,6 +14,15 @@
|
||||
#define _ASM_FIXMAP_H
|
||||
|
||||
#include <linux/config.h>
|
||||
|
||||
/* used by vmalloc.c, vsyscall.lds.S.
|
||||
*
|
||||
* Leave one empty page between vmalloc'ed areas and
|
||||
* the start of the fixmap.
|
||||
*/
|
||||
#define __FIXADDR_TOP (HYPERVISOR_VIRT_START - 2 * PAGE_SIZE)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/acpi.h>
|
||||
#include <asm/apicdef.h>
|
||||
@@ -110,13 +119,8 @@ extern void __set_fixmap_ma (enum fixed_addresses idx,
|
||||
#define clear_fixmap(idx) \
|
||||
__set_fixmap(idx, 0, __pgprot(0))
|
||||
|
||||
/*
|
||||
* used by vmalloc.c.
|
||||
*
|
||||
* Leave one empty page between vmalloc'ed areas and
|
||||
* the start of the fixmap.
|
||||
*/
|
||||
#define FIXADDR_TOP (HYPERVISOR_VIRT_START - 2 * PAGE_SIZE)
|
||||
#define FIXADDR_TOP ((unsigned long)__FIXADDR_TOP)
|
||||
|
||||
#define __FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT)
|
||||
#define FIXADDR_START (FIXADDR_TOP - __FIXADDR_SIZE)
|
||||
|
||||
@@ -138,7 +142,7 @@ extern void __this_fixmap_does_not_exist(void);
|
||||
* directly without tranlation, we catch the bug with a NULL-deference
|
||||
* kernel oops. Illegal ranges of incoming indices are caught too.
|
||||
*/
|
||||
static inline unsigned long fix_to_virt(const unsigned int idx)
|
||||
static __always_inline unsigned long fix_to_virt(const unsigned int idx)
|
||||
{
|
||||
/*
|
||||
* this branch gets completely eliminated after inlining,
|
||||
@@ -161,4 +165,5 @@ static inline unsigned long virt_to_fix(const unsigned long vaddr)
|
||||
return __virt_to_fix(vaddr);
|
||||
}
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif
|
||||
File renamed without changes.
+48
-17
@@ -2,6 +2,8 @@
|
||||
#define _ASM_IO_H
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/compiler.h>
|
||||
|
||||
/*
|
||||
* This file contains the definitions for the x86 IO instructions
|
||||
@@ -43,6 +45,8 @@
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <asm-generic/iomap.h>
|
||||
|
||||
#include <linux/vmalloc.h>
|
||||
#include <asm/fixmap.h>
|
||||
|
||||
@@ -95,7 +99,7 @@ static inline void * phys_to_virt(unsigned long address)
|
||||
(((bvec_to_phys((vec1)) + (vec1)->bv_len) == bvec_to_phys((vec2))) && \
|
||||
((bvec_to_pseudophys((vec1)) + (vec1)->bv_len) == bvec_to_pseudophys((vec2))))
|
||||
|
||||
extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags);
|
||||
extern void __iomem * __ioremap(unsigned long offset, unsigned long size, unsigned long flags);
|
||||
|
||||
/**
|
||||
* ioremap - map bus memory into CPU space
|
||||
@@ -109,13 +113,13 @@ extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long
|
||||
* address.
|
||||
*/
|
||||
|
||||
static inline void * ioremap (unsigned long offset, unsigned long size)
|
||||
static inline void __iomem * ioremap(unsigned long offset, unsigned long size)
|
||||
{
|
||||
return __ioremap(offset, size, 0);
|
||||
}
|
||||
|
||||
extern void * ioremap_nocache (unsigned long offset, unsigned long size);
|
||||
extern void iounmap(void *addr);
|
||||
extern void __iomem * ioremap_nocache(unsigned long offset, unsigned long size);
|
||||
extern void iounmap(volatile void __iomem *addr);
|
||||
|
||||
/*
|
||||
* bt_ioremap() and bt_iounmap() are for temporary early boot-time
|
||||
@@ -152,9 +156,18 @@ extern void bt_iounmap(void *addr, unsigned long size);
|
||||
* memory location directly.
|
||||
*/
|
||||
|
||||
#define readb(addr) (*(volatile unsigned char *) (addr))
|
||||
#define readw(addr) (*(volatile unsigned short *) (addr))
|
||||
#define readl(addr) (*(volatile unsigned int *) (addr))
|
||||
static inline unsigned char readb(const volatile void __iomem *addr)
|
||||
{
|
||||
return *(volatile unsigned char __force *) addr;
|
||||
}
|
||||
static inline unsigned short readw(const volatile void __iomem *addr)
|
||||
{
|
||||
return *(volatile unsigned short __force *) addr;
|
||||
}
|
||||
static inline unsigned int readl(const volatile void __iomem *addr)
|
||||
{
|
||||
return *(volatile unsigned int __force *) addr;
|
||||
}
|
||||
#define readb_relaxed(addr) readb(addr)
|
||||
#define readw_relaxed(addr) readw(addr)
|
||||
#define readl_relaxed(addr) readl(addr)
|
||||
@@ -162,16 +175,34 @@ extern void bt_iounmap(void *addr, unsigned long size);
|
||||
#define __raw_readw readw
|
||||
#define __raw_readl readl
|
||||
|
||||
#define writeb(b,addr) (*(volatile unsigned char *) (addr) = (b))
|
||||
#define writew(b,addr) (*(volatile unsigned short *) (addr) = (b))
|
||||
#define writel(b,addr) (*(volatile unsigned int *) (addr) = (b))
|
||||
static inline void writeb(unsigned char b, volatile void __iomem *addr)
|
||||
{
|
||||
*(volatile unsigned char __force *) addr = b;
|
||||
}
|
||||
static inline void writew(unsigned short b, volatile void __iomem *addr)
|
||||
{
|
||||
*(volatile unsigned short __force *) addr = b;
|
||||
}
|
||||
static inline void writel(unsigned int b, volatile void __iomem *addr)
|
||||
{
|
||||
*(volatile unsigned int __force *) addr = b;
|
||||
}
|
||||
#define __raw_writeb writeb
|
||||
#define __raw_writew writew
|
||||
#define __raw_writel writel
|
||||
|
||||
#define memset_io(a,b,c) memset((void *)(a),(b),(c))
|
||||
#define memcpy_fromio(a,b,c) __memcpy((a),(void *)(b),(c))
|
||||
#define memcpy_toio(a,b,c) __memcpy((void *)(a),(b),(c))
|
||||
static inline void memset_io(volatile void __iomem *addr, unsigned char val, int count)
|
||||
{
|
||||
memset((void __force *) addr, val, count);
|
||||
}
|
||||
static inline void memcpy_fromio(void *dst, volatile void __iomem *src, int count)
|
||||
{
|
||||
__memcpy(dst, (void __force *) src, count);
|
||||
}
|
||||
static inline void memcpy_toio(volatile void __iomem *dst, const void *src, int count)
|
||||
{
|
||||
__memcpy((void __force *) dst, src, count);
|
||||
}
|
||||
|
||||
/*
|
||||
* ISA space is 'always mapped' on a typical x86 system, no need to
|
||||
@@ -181,7 +212,7 @@ extern void bt_iounmap(void *addr, unsigned long size);
|
||||
* used as the IO-area pointer (it can be iounmapped as well, so the
|
||||
* analogy with PCI is quite large):
|
||||
*/
|
||||
#define __ISA_IO_base ((char *)(PAGE_OFFSET))
|
||||
#define __ISA_IO_base ((char __iomem *)(PAGE_OFFSET))
|
||||
|
||||
#define isa_readb(a) readb(__ISA_IO_base + (a))
|
||||
#define isa_readw(a) readw(__ISA_IO_base + (a))
|
||||
@@ -198,8 +229,8 @@ extern void bt_iounmap(void *addr, unsigned long size);
|
||||
* Again, i386 does not require mem IO specific function.
|
||||
*/
|
||||
|
||||
#define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void *)(b),(c),(d))
|
||||
#define isa_eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void *)(__ISA_IO_base + (b)),(c),(d))
|
||||
#define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void __force *)(b),(c),(d))
|
||||
#define isa_eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void __force *)(__ISA_IO_base + (b)),(c),(d))
|
||||
|
||||
/**
|
||||
* check_signature - find BIOS signatures
|
||||
@@ -212,7 +243,7 @@ extern void bt_iounmap(void *addr, unsigned long size);
|
||||
* Returns 1 on a match.
|
||||
*/
|
||||
|
||||
static inline int check_signature(unsigned long io_addr,
|
||||
static inline int check_signature(volatile void __iomem * io_addr,
|
||||
const unsigned char *signature, int length)
|
||||
{
|
||||
int retval = 0;
|
||||
+1
-1
@@ -23,7 +23,7 @@ static inline void do_timer_interrupt_hook(struct pt_regs *regs)
|
||||
*/
|
||||
#ifndef CONFIG_X86_LOCAL_APIC
|
||||
if (regs)
|
||||
x86_do_profile(regs);
|
||||
profile_tick(CPU_PROFILING, regs);
|
||||
#else
|
||||
if (regs && !using_apic_timer)
|
||||
smp_local_timer_interrupt(regs);
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loaded 100 of 139 files, more files were not shown because too many files have changed in this diff.
Show more