ia64/xen-unstable

changeset 6548:fa0754a9f64f

Merge.
author adsharma@los-vmm.sc.intel.com
date Wed Aug 24 13:29:21 2005 -0700 (2005-08-24)
parents cc5f88b719d0 b74c15e4dd4f
children e2025593f702 56dd9a7b37f9
files .hgignore Config.mk Makefile buildconfigs/Rules.mk buildconfigs/mk.linux-2.6-xen buildconfigs/mk.linux-2.6-xen0 buildconfigs/mk.linux-2.6-xenU docs/src/user.tex extras/mini-os/include/time.h extras/mini-os/kernel.c extras/mini-os/time.c linux-2.4-xen-sparse/arch/xen/Makefile linux-2.4-xen-sparse/arch/xen/config.in linux-2.4-xen-sparse/arch/xen/kernel/time.c linux-2.4-xen-sparse/include/asm-xen/bugs.h linux-2.4-xen-sparse/include/asm-xen/fixmap.h linux-2.4-xen-sparse/include/asm-xen/highmem.h linux-2.4-xen-sparse/include/asm-xen/hw_irq.h linux-2.4-xen-sparse/include/asm-xen/io.h linux-2.4-xen-sparse/include/asm-xen/irq.h linux-2.4-xen-sparse/include/asm-xen/mmu_context.h linux-2.4-xen-sparse/include/asm-xen/page.h linux-2.4-xen-sparse/include/asm-xen/pci.h linux-2.4-xen-sparse/include/asm-xen/pgalloc.h linux-2.4-xen-sparse/include/asm-xen/pgtable.h linux-2.4-xen-sparse/include/asm-xen/processor.h linux-2.4-xen-sparse/include/asm-xen/segment.h linux-2.4-xen-sparse/include/asm-xen/smp.h linux-2.4-xen-sparse/include/asm-xen/system.h linux-2.4-xen-sparse/include/asm-xen/vga.h linux-2.4-xen-sparse/include/linux/blk.h linux-2.4-xen-sparse/include/linux/highmem.h linux-2.4-xen-sparse/include/linux/irq.h linux-2.4-xen-sparse/include/linux/mm.h linux-2.4-xen-sparse/include/linux/sched.h linux-2.4-xen-sparse/include/linux/skbuff.h linux-2.4-xen-sparse/include/linux/timer.h linux-2.4-xen-sparse/mkbuildtree linux-2.6-xen-sparse/arch/xen/Kconfig linux-2.6-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32 linux-2.6-xen-sparse/arch/xen/configs/xen0_defconfig_x86_64 linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32 linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_64 linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32 linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_64 linux-2.6-xen-sparse/arch/xen/i386/Kconfig linux-2.6-xen-sparse/arch/xen/i386/kernel/Makefile linux-2.6-xen-sparse/arch/xen/i386/kernel/cpu/common.c linux-2.6-xen-sparse/arch/xen/i386/kernel/entry.S linux-2.6-xen-sparse/arch/xen/i386/kernel/head.S linux-2.6-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c linux-2.6-xen-sparse/arch/xen/i386/kernel/init_task.c linux-2.6-xen-sparse/arch/xen/i386/kernel/ioport.c linux-2.6-xen-sparse/arch/xen/i386/kernel/irq.c linux-2.6-xen-sparse/arch/xen/i386/kernel/ldt.c linux-2.6-xen-sparse/arch/xen/i386/kernel/mpparse.c linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c linux-2.6-xen-sparse/arch/xen/i386/kernel/process.c linux-2.6-xen-sparse/arch/xen/i386/kernel/setup.c linux-2.6-xen-sparse/arch/xen/i386/kernel/smp.c linux-2.6-xen-sparse/arch/xen/i386/kernel/smpboot.c linux-2.6-xen-sparse/arch/xen/i386/kernel/swiotlb.c linux-2.6-xen-sparse/arch/xen/i386/kernel/time.c linux-2.6-xen-sparse/arch/xen/i386/kernel/traps.c linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c linux-2.6-xen-sparse/arch/xen/i386/mm/highmem.c linux-2.6-xen-sparse/arch/xen/i386/mm/hypervisor.c linux-2.6-xen-sparse/arch/xen/i386/mm/init.c linux-2.6-xen-sparse/arch/xen/i386/mm/ioremap.c linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c linux-2.6-xen-sparse/arch/xen/i386/pci/Makefile linux-2.6-xen-sparse/arch/xen/i386/pci/irq.c linux-2.6-xen-sparse/arch/xen/kernel/evtchn.c linux-2.6-xen-sparse/arch/xen/kernel/gnttab.c linux-2.6-xen-sparse/arch/xen/kernel/reboot.c linux-2.6-xen-sparse/arch/xen/kernel/skbuff.c linux-2.6-xen-sparse/arch/xen/x86_64/Kconfig linux-2.6-xen-sparse/arch/xen/x86_64/Makefile linux-2.6-xen-sparse/arch/xen/x86_64/ia32/Makefile linux-2.6-xen-sparse/arch/xen/x86_64/ia32/syscall32.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/Makefile linux-2.6-xen-sparse/arch/xen/x86_64/kernel/apic.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/e820.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/entry.S linux-2.6-xen-sparse/arch/xen/x86_64/kernel/genapic.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/genapic_xen.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/head.S linux-2.6-xen-sparse/arch/xen/x86_64/kernel/head64.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/ioport.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/irq.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/pci-nommu.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/process.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/setup.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/setup64.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/smp.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/smpboot.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/traps.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/vsyscall.c linux-2.6-xen-sparse/arch/xen/x86_64/kernel/xen_entry.S linux-2.6-xen-sparse/arch/xen/x86_64/mm/Makefile linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c linux-2.6-xen-sparse/arch/xen/x86_64/mm/init.c linux-2.6-xen-sparse/arch/xen/x86_64/pci/Makefile linux-2.6-xen-sparse/drivers/xen/Makefile linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c linux-2.6-xen-sparse/drivers/xen/blkback/Makefile linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c linux-2.6-xen-sparse/drivers/xen/blkback/common.h linux-2.6-xen-sparse/drivers/xen/blkback/interface.c linux-2.6-xen-sparse/drivers/xen/blkback/vbd.c linux-2.6-xen-sparse/drivers/xen/blkback/xenbus.c linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c linux-2.6-xen-sparse/drivers/xen/blkfront/block.h linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c linux-2.6-xen-sparse/drivers/xen/blktap/blktap.h linux-2.6-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c linux-2.6-xen-sparse/drivers/xen/blktap/blktap_datapath.c linux-2.6-xen-sparse/drivers/xen/blktap/blktap_userdev.c linux-2.6-xen-sparse/drivers/xen/console/console.c linux-2.6-xen-sparse/drivers/xen/netback/common.h linux-2.6-xen-sparse/drivers/xen/netback/interface.c linux-2.6-xen-sparse/drivers/xen/netback/netback.c linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c linux-2.6-xen-sparse/drivers/xen/usbback/common.h linux-2.6-xen-sparse/drivers/xen/usbback/interface.c linux-2.6-xen-sparse/drivers/xen/usbback/usbback.c linux-2.6-xen-sparse/drivers/xen/usbfront/usbfront.c linux-2.6-xen-sparse/drivers/xen/usbfront/xhci.h linux-2.6-xen-sparse/drivers/xen/xenbus/Makefile linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_xs.c linux-2.6-xen-sparse/include/asm-generic/pgtable.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/desc.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/fixmap.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/hypercall.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/io.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/kmap_types.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/mmu_context.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/page.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/pci.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/pgalloc.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/pgtable-3level.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/pgtable.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/scatterlist.h linux-2.6-xen-sparse/include/asm-xen/asm-i386/swiotlb.h linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/desc.h linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/dma-mapping.h linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/hypercall.h linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/io.h linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/irq_vectors.h linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/page.h linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/pci.h linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/processor.h linux-2.6-xen-sparse/include/asm-xen/balloon.h linux-2.6-xen-sparse/include/asm-xen/ctrl_if.h linux-2.6-xen-sparse/include/asm-xen/evtchn.h linux-2.6-xen-sparse/include/asm-xen/gnttab.h linux-2.6-xen-sparse/include/asm-xen/hypervisor.h linux-2.6-xen-sparse/include/asm-xen/xenbus.h linux-2.6-xen-sparse/include/linux/highmem.h linux-2.6-xen-sparse/include/linux/mm.h linux-2.6-xen-sparse/kernel/irq/manage.c linux-2.6-xen-sparse/mkbuildtree linux-2.6-xen-sparse/mm/highmem.c linux-2.6-xen-sparse/mm/memory.c patches/linux-2.6.12/patch-2.6.12.5 patches/linux-2.6.12/smp-alts.patch patches/linux-2.6.12/workaround_double_br_del_if.patch tools/Makefile tools/Rules.mk tools/blktap/blktaplib.c tools/console/client/main.c tools/console/daemon/io.c tools/console/daemon/utils.c tools/debugger/gdb/gdbbuild tools/debugger/libxendebug/xendebug.c tools/debugger/libxendebug/xendebug.h tools/debugger/pdb/Domain.ml tools/debugger/pdb/Domain.mli tools/debugger/pdb/Makefile tools/debugger/pdb/PDB.ml tools/debugger/pdb/Process.ml tools/debugger/pdb/Process.mli tools/debugger/pdb/Util.ml tools/debugger/pdb/Xen_domain.ml tools/debugger/pdb/Xen_domain.mli tools/debugger/pdb/debugger.ml tools/debugger/pdb/linux-2.6-module/Makefile tools/debugger/pdb/linux-2.6-module/debug.c tools/debugger/pdb/linux-2.6-module/module.c tools/debugger/pdb/linux-2.6-module/pdb_debug.h tools/debugger/pdb/linux-2.6-module/pdb_module.h tools/debugger/pdb/linux-2.6-patches/Makefile tools/debugger/pdb/linux-2.6-patches/i386_ksyms.patch tools/debugger/pdb/linux-2.6-patches/kdebug.patch tools/debugger/pdb/linux-2.6-patches/makefile.patch tools/debugger/pdb/linux-2.6-patches/ptrace.patch tools/debugger/pdb/linux-2.6-patches/traps.patch tools/debugger/pdb/pdb_caml_domain.c tools/debugger/pdb/pdb_caml_process.c tools/debugger/pdb/pdb_caml_xcs.c tools/debugger/pdb/pdb_caml_xen.h tools/debugger/pdb/readme tools/debugger/pdb/server.ml tools/examples/Makefile tools/examples/network-bridge tools/examples/xend-config.sxp tools/examples/xmexample.vmx tools/firmware/rombios/rombios.c tools/firmware/vmxassist/vm86.c tools/ioemu/cpu-all.h tools/ioemu/exec.c tools/ioemu/hw/ide.c tools/ioemu/hw/pc.c tools/ioemu/hw/pckbd.c tools/ioemu/hw/vga.c tools/ioemu/monitor.c tools/ioemu/target-i386-dm/Makefile tools/ioemu/target-i386-dm/helper2.c tools/ioemu/target-i386-dm/qemu-dm.debug tools/ioemu/vl.c tools/ioemu/vl.h tools/ioemu/vnc.c tools/libxc/Makefile tools/libxc/linux_boot_params.h tools/libxc/xc.h tools/libxc/xc_core.c tools/libxc/xc_domain.c tools/libxc/xc_gnttab.c tools/libxc/xc_linux_build.c tools/libxc/xc_linux_restore.c tools/libxc/xc_linux_save.c tools/libxc/xc_load_elf.c tools/libxc/xc_private.c tools/libxc/xc_private.h tools/libxc/xc_ptrace.c tools/libxc/xc_vmx_build.c tools/misc/Makefile tools/misc/xend tools/python/setup.py tools/python/xen/lowlevel/xc/xc.c tools/python/xen/lowlevel/xs/xs.c tools/python/xen/lowlevel/xu/xu.c tools/python/xen/sv/CreateDomain.py tools/python/xen/sv/DomInfo.py tools/python/xen/sv/GenTabbed.py tools/python/xen/sv/HTMLBase.py tools/python/xen/sv/Main.py tools/python/xen/sv/NodeInfo.py tools/python/xen/sv/RestoreDomain.py tools/python/xen/sv/Wizard.py tools/python/xen/sv/__init__.py tools/python/xen/sv/util.py tools/python/xen/web/SrvBase.py tools/python/xen/web/SrvDir.py tools/python/xen/web/__init__.py tools/python/xen/web/connection.py tools/python/xen/web/httpserver.py tools/python/xen/web/protocol.py tools/python/xen/web/reactor.py tools/python/xen/web/resource.py tools/python/xen/web/static.py tools/python/xen/web/tcp.py tools/python/xen/web/unix.py tools/python/xen/xend/Args.py tools/python/xen/xend/EventServer.py tools/python/xen/xend/PrettyPrint.py tools/python/xen/xend/Vifctl.py tools/python/xen/xend/XendCheckpoint.py tools/python/xen/xend/XendClient.py tools/python/xen/xend/XendDB.py tools/python/xen/xend/XendDmesg.py tools/python/xen/xend/XendDomain.py tools/python/xen/xend/XendDomainInfo.py tools/python/xen/xend/XendError.py tools/python/xen/xend/XendLogging.py tools/python/xen/xend/XendNode.py tools/python/xen/xend/XendProtocol.py tools/python/xen/xend/XendRoot.py tools/python/xen/xend/XendVnet.py tools/python/xen/xend/encode.py tools/python/xen/xend/image.py tools/python/xen/xend/scheduler.py tools/python/xen/xend/server/SrvDaemon.py tools/python/xen/xend/server/SrvDmesg.py tools/python/xen/xend/server/SrvDomain.py tools/python/xen/xend/server/SrvDomainDir.py tools/python/xen/xend/server/SrvNode.py tools/python/xen/xend/server/SrvRoot.py tools/python/xen/xend/server/SrvServer.py tools/python/xen/xend/server/SrvVnetDir.py tools/python/xen/xend/server/SrvXendLog.py tools/python/xen/xend/server/blkif.py tools/python/xen/xend/server/channel.py tools/python/xen/xend/server/controller.py tools/python/xen/xend/server/event.py tools/python/xen/xend/server/messages.py tools/python/xen/xend/server/netif.py tools/python/xen/xend/server/params.py tools/python/xen/xend/server/pciif.py tools/python/xen/xend/server/relocate.py tools/python/xen/xend/sxp.py tools/python/xen/xend/uuid.py tools/python/xen/xend/xenstore/__init__.py tools/python/xen/xend/xenstore/xsnode.py tools/python/xen/xend/xenstore/xsobj.py tools/python/xen/xend/xenstore/xsresource.py tools/python/xen/xm/create.py tools/python/xen/xm/destroy.py tools/python/xen/xm/help.py tools/python/xen/xm/main.py tools/python/xen/xm/migrate.py tools/python/xen/xm/opts.py tools/python/xen/xm/shutdown.py tools/python/xen/xm/sysrq.py tools/security/Makefile tools/security/example.txt tools/security/install.txt tools/security/policies/chwall/chwall-security_label_template.xml tools/security/policies/chwall/chwall-security_policy.xml tools/security/policies/chwall_ste/chwall_ste-security_label_template.xml tools/security/policies/chwall_ste/chwall_ste-security_policy.xml tools/security/policies/null/null-security_label_template.xml tools/security/policies/null/null-security_policy.xml tools/security/policies/security_policy.xsd tools/security/policies/ste/ste-security_label_template.xml tools/security/policies/ste/ste-security_policy.xml tools/security/policy.txt tools/security/readme.txt tools/security/secpol_compat.h tools/security/secpol_tool.c tools/security/secpol_xml2bin.c tools/security/secpol_xml2bin.h tools/security/setlabel.sh tools/security/updategrub.sh tools/sv/Makefile tools/sv/images/destroy.png tools/sv/images/finish.png tools/sv/images/next.png tools/sv/images/pause.png tools/sv/images/previous.png tools/sv/images/reboot.png tools/sv/images/shutdown.png tools/sv/images/small-destroy.png tools/sv/images/small-pause.png tools/sv/images/small-unpause.png tools/sv/images/unpause.png tools/sv/images/xen.png tools/sv/inc/script.js tools/sv/inc/style.css tools/sv/index.psp tools/xcs/xcs.h tools/xcutils/xc_restore.c tools/xenstat/Makefile tools/xenstat/libxenstat/COPYING tools/xenstat/libxenstat/Makefile tools/xenstat/libxenstat/bindings/swig/perl/.empty tools/xenstat/libxenstat/bindings/swig/python/.empty tools/xenstat/libxenstat/bindings/swig/xenstat.i tools/xenstat/libxenstat/src/xen-interface.c tools/xenstat/libxenstat/src/xen-interface.h tools/xenstat/libxenstat/src/xenstat.c tools/xenstat/libxenstat/src/xenstat.h tools/xenstat/xentop/Makefile tools/xenstat/xentop/TODO tools/xenstat/xentop/xentop.1 tools/xenstat/xentop/xentop.c tools/xenstore/Makefile tools/xenstore/TODO tools/xenstore/testsuite/02directory.test tools/xenstore/testsuite/03write.test tools/xenstore/testsuite/06dirpermissions.test tools/xenstore/testsuite/test.sh tools/xenstore/utils.c tools/xenstore/utils.h tools/xenstore/xenstored.h tools/xenstore/xenstored_core.c tools/xenstore/xenstored_core.h tools/xenstore/xenstored_domain.c tools/xenstore/xenstored_domain.h tools/xenstore/xenstored_transaction.c tools/xenstore/xenstored_transaction.h tools/xenstore/xenstored_watch.c tools/xenstore/xenstored_watch.h tools/xenstore/xs.c tools/xenstore/xs.h tools/xenstore/xs_lib.c tools/xenstore/xs_lib.h tools/xenstore/xs_random.c tools/xenstore/xs_test.c tools/xentrace/xentrace.c xen/Makefile xen/Rules.mk xen/acm/acm_core.c xen/acm/acm_policy.c xen/arch/ia64/Makefile xen/arch/ia64/Rules.mk xen/arch/ia64/asm-offsets.c xen/arch/ia64/asm-xsi-offsets.c xen/arch/ia64/dom_fw.c xen/arch/ia64/domain.c xen/arch/ia64/grant_table.c xen/arch/ia64/hypercall.c xen/arch/ia64/hyperprivop.S xen/arch/ia64/mmio.c xen/arch/ia64/pal_emul.c xen/arch/ia64/patch/linux-2.6.11/irq_ia64.c xen/arch/ia64/patch/linux-2.6.11/kregs.h xen/arch/ia64/pcdp.c xen/arch/ia64/process.c xen/arch/ia64/regionreg.c xen/arch/ia64/tools/mkbuildtree xen/arch/ia64/vcpu.c xen/arch/ia64/vlsapic.c xen/arch/ia64/vmmu.c xen/arch/ia64/vmx_hypercall.c xen/arch/ia64/vmx_ivt.S xen/arch/ia64/vmx_support.c xen/arch/ia64/vmx_vcpu.c xen/arch/ia64/vmx_virt.c xen/arch/ia64/vtlb.c xen/arch/ia64/xenasm.S xen/arch/ia64/xenmem.c xen/arch/ia64/xenmisc.c xen/arch/ia64/xensetup.c xen/arch/ia64/xentime.c xen/arch/x86/Makefile xen/arch/x86/acpi/boot.c xen/arch/x86/apic.c xen/arch/x86/audit.c xen/arch/x86/cpu/amd.c xen/arch/x86/cpu/common.c xen/arch/x86/dom0_ops.c xen/arch/x86/domain.c xen/arch/x86/domain_build.c xen/arch/x86/genapic/es7000plat.c xen/arch/x86/i8259.c xen/arch/x86/io_apic.c xen/arch/x86/mm.c xen/arch/x86/mpparse.c xen/arch/x86/physdev.c xen/arch/x86/setup.c xen/arch/x86/shadow.c xen/arch/x86/shadow32.c xen/arch/x86/shadow_public.c xen/arch/x86/smpboot.c xen/arch/x86/time.c xen/arch/x86/traps.c xen/arch/x86/vmx.c xen/arch/x86/vmx_intercept.c xen/arch/x86/vmx_io.c xen/arch/x86/vmx_platform.c xen/arch/x86/vmx_vmcs.c xen/arch/x86/x86_32/entry.S xen/arch/x86/x86_32/mm.c xen/arch/x86/x86_32/traps.c xen/arch/x86/x86_64/entry.S xen/arch/x86/x86_64/mm.c xen/arch/x86/x86_64/traps.c xen/common/ac_timer.c xen/common/dom0_ops.c xen/common/dom_mem_ops.c xen/common/domain.c xen/common/event_channel.c xen/common/grant_table.c xen/common/lib.c xen/common/page_alloc.c xen/common/perfc.c xen/common/sched_sedf.c xen/common/schedule.c xen/common/symbols.c xen/common/trace.c xen/common/xmalloc.c xen/drivers/char/console.c xen/drivers/char/ns16550.c xen/include/acm/acm_core.h xen/include/acm/acm_hooks.h xen/include/asm-ia64/config.h xen/include/asm-ia64/domain.h xen/include/asm-ia64/event.h xen/include/asm-ia64/ia64_int.h xen/include/asm-ia64/privop.h xen/include/asm-ia64/regionreg.h xen/include/asm-ia64/regs.h xen/include/asm-ia64/vcpu.h xen/include/asm-ia64/vmx.h xen/include/asm-ia64/vmx_uaccess.h xen/include/asm-ia64/vmx_vcpu.h xen/include/asm-ia64/vmx_vpd.h xen/include/asm-ia64/xensystem.h xen/include/asm-x86/apicdef.h xen/include/asm-x86/config.h xen/include/asm-x86/e820.h xen/include/asm-x86/event.h xen/include/asm-x86/fixmap.h xen/include/asm-x86/genapic.h xen/include/asm-x86/hpet.h xen/include/asm-x86/io.h xen/include/asm-x86/mach-bigsmp/mach_apic.h xen/include/asm-x86/mach-default/mach_apic.h xen/include/asm-x86/mach-es7000/mach_apic.h xen/include/asm-x86/mach-generic/mach_apic.h xen/include/asm-x86/mach-summit/mach_apic.h xen/include/asm-x86/mach-summit/mach_mpparse.h xen/include/asm-x86/mm.h xen/include/asm-x86/page.h xen/include/asm-x86/shadow.h xen/include/asm-x86/shadow_64.h xen/include/asm-x86/shadow_public.h xen/include/asm-x86/time.h xen/include/asm-x86/types.h xen/include/asm-x86/uaccess.h xen/include/asm-x86/vmx.h xen/include/asm-x86/vmx_virpit.h xen/include/asm-x86/vmx_vmcs.h xen/include/asm-x86/x86_32/page-3level.h xen/include/asm-x86/x86_32/uaccess.h xen/include/asm-x86/x86_64/page.h xen/include/public/arch-ia64.h xen/include/public/arch-x86_32.h xen/include/public/arch-x86_64.h xen/include/public/dom0_ops.h xen/include/public/grant_table.h xen/include/public/io/blkif.h xen/include/public/io/domain_controller.h xen/include/public/io/netif.h xen/include/public/physdev.h xen/include/public/trace.h xen/include/public/xen.h xen/include/xen/ac_timer.h xen/include/xen/domain.h xen/include/xen/event.h xen/include/xen/grant_table.h xen/include/xen/mm.h xen/include/xen/perfc_defn.h xen/include/xen/sched.h xen/include/xen/serial.h xen/include/xen/symbols.h xen/include/xen/time.h xen/include/xen/trace.h xen/tools/Makefile xen/tools/symbols.c
line diff
     1.1 --- a/linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_64	Tue Aug 23 12:03:21 2005 -0700
     1.2 +++ b/linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_64	Wed Aug 24 13:29:21 2005 -0700
     1.3 @@ -674,10 +674,10 @@ CONFIG_EXT2_FS=y
     1.4  CONFIG_EXT2_FS_XATTR=y
     1.5  CONFIG_EXT2_FS_POSIX_ACL=y
     1.6  CONFIG_EXT2_FS_SECURITY=y
     1.7 -CONFIG_EXT3_FS=m
     1.8 +CONFIG_EXT3_FS=y
     1.9  CONFIG_EXT3_FS_XATTR=y
    1.10 -CONFIG_EXT3_FS_POSIX_ACL=y
    1.11 -CONFIG_EXT3_FS_SECURITY=y
    1.12 +# CONFIG_EXT3_FS_POSIX_ACL is not set
    1.13 +# CONFIG_EXT3_FS_SECURITY is not set
    1.14  CONFIG_JBD=m
    1.15  # CONFIG_JBD_DEBUG is not set
    1.16  CONFIG_FS_MBCACHE=y
     2.1 --- a/linux-2.6-xen-sparse/arch/xen/x86_64/ia32/syscall32.c	Tue Aug 23 12:03:21 2005 -0700
     2.2 +++ b/linux-2.6-xen-sparse/arch/xen/x86_64/ia32/syscall32.c	Wed Aug 24 13:29:21 2005 -0700
     2.3 @@ -128,8 +128,12 @@ static int __init init_syscall32(void)
     2.4  #endif
     2.5  	return 0;
     2.6  } 
     2.7 -	
     2.8 -__initcall(init_syscall32); 
     2.9 +
    2.10 +/*
    2.11 + * This must be done early in case we have an initrd containing 32-bit
    2.12 + * binaries (e.g., hotplug). This could be pushed upstream to arch/x86_64.
    2.13 + */	
    2.14 +core_initcall(init_syscall32); 
    2.15  
    2.16  /* May not be __init: called during resume */
    2.17  void syscall32_cpu_init(void)
     3.1 --- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/head.S	Tue Aug 23 12:03:21 2005 -0700
     3.2 +++ b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/head.S	Wed Aug 24 13:29:21 2005 -0700
     3.3 @@ -43,7 +43,7 @@ ENTRY(_start)
     3.4          cld                
     3.5  	/* Copy the necessary stuff from xen_start_info structure. */
     3.6  	movq  $xen_start_info_union,%rdi
     3.7 -	movq  $64,%rcx          /* sizeof (union xen_start_info_union) / sizeof (long) */
     3.8 +	movq  $256,%rcx
     3.9  	rep movsq
    3.10  
    3.11  #ifdef CONFIG_SMP
     4.1 --- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/setup.c	Tue Aug 23 12:03:21 2005 -0700
     4.2 +++ b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/setup.c	Wed Aug 24 13:29:21 2005 -0700
     4.3 @@ -428,8 +428,9 @@ static void __init contig_initmem_init(v
     4.4  {
     4.5          unsigned long bootmap_size = init_bootmem(start_pfn, end_pfn);
     4.6          free_bootmem(0, end_pfn << PAGE_SHIFT);   
     4.7 -        /* XXX KAF: Why can't we leave low 1MB of memory free? */
     4.8 -        reserve_bootmem(0, (PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE-1));
     4.9 +        reserve_bootmem(HIGH_MEMORY,
    4.10 +                        (PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE-1)
    4.11 +                        - HIGH_MEMORY);
    4.12  }
    4.13  #else
    4.14  static void __init contig_initmem_init(void)
     5.1 --- a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/init.c	Tue Aug 23 12:03:21 2005 -0700
     5.2 +++ b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/init.c	Wed Aug 24 13:29:21 2005 -0700
     5.3 @@ -441,6 +441,31 @@ static inline void __set_pte(pte_t *dst,
     5.4  	*dst = val;
     5.5  }
     5.6  
     5.7 +static inline int make_readonly(unsigned long paddr)
     5.8 +{
     5.9 +    int readonly = 0;
    5.10 +
    5.11 +    /* Make new page tables read-only. */
    5.12 +    if ((paddr < ((table_start << PAGE_SHIFT) + tables_space)) &&
    5.13 +        (paddr >= (table_start << PAGE_SHIFT)))
    5.14 +        readonly = 1;
    5.15 +
    5.16 +    /* Make old page tables read-only. */
    5.17 +    if ((paddr < ((xen_start_info.pt_base - __START_KERNEL_map) +
    5.18 +                  (xen_start_info.nr_pt_frames << PAGE_SHIFT))) &&
    5.19 +        (paddr >= (xen_start_info.pt_base - __START_KERNEL_map)))
    5.20 +        readonly = 1;
    5.21 +
    5.22 +    /*
    5.23 +     * No need for writable mapping of kernel image. This also ensures that
    5.24 +     * page and descriptor tables embedded inside don't have writable mappings.
    5.25 +     */
    5.26 +    if ((paddr >= __pa_symbol(&_text)) && (paddr < __pa_symbol(&_end)))
    5.27 +        readonly = 1;
    5.28 +
    5.29 +    return readonly;
    5.30 +}
    5.31 +
    5.32  void __init phys_pud_init(pud_t *pud, unsigned long address, unsigned long end)
    5.33  { 
    5.34          long i, j, k; 
    5.35 @@ -477,9 +502,7 @@ void __init phys_pud_init(pud_t *pud, un
    5.36                          pte = alloc_low_page(&pte_phys);
    5.37                          pte_save = pte;
    5.38                          for (k = 0; k < PTRS_PER_PTE; pte++, k++, paddr += PTE_SIZE) {
    5.39 -                                if (paddr < (table_start << PAGE_SHIFT) 
    5.40 -                                    + tables_space)
    5.41 -                                {
    5.42 +                                if (make_readonly(paddr)) {
    5.43                                          __set_pte(pte, 
    5.44                                                  __pte(paddr | (_KERNPG_TABLE & ~_PAGE_RW)));
    5.45                                          continue;
     6.1 --- a/linux-2.6-xen-sparse/drivers/xen/blkback/xenbus.c	Tue Aug 23 12:03:21 2005 -0700
     6.2 +++ b/linux-2.6-xen-sparse/drivers/xen/blkback/xenbus.c	Wed Aug 24 13:29:21 2005 -0700
     6.3 @@ -75,24 +75,12 @@ static void frontend_changed(struct xenb
     6.4  	err = xenbus_gather(be->frontpath, "grant-id", "%lu", &sharedmfn,
     6.5  			    "event-channel", "%u", &evtchn, NULL);
     6.6  	if (err) {
     6.7 -		xenbus_dev_error(be->dev, err, 
     6.8 +		xenbus_dev_error(be->dev, err,
     6.9  				 "reading %s/grant-id and event-channel",
    6.10  				 be->frontpath);
    6.11  		return;
    6.12  	}
    6.13  
    6.14 -	/* Domains must use same shared frame for all vbds. */
    6.15 -	if (evtchn != be->blkif->remote_evtchn ||
    6.16 -	    sharedmfn != be->blkif->shmem_frame) {
    6.17 -		xenbus_dev_error(be->dev, err,
    6.18 -				 "Shared frame/evtchn %li/%u not same as"
    6.19 -				 " old %li/%u",
    6.20 -				 sharedmfn, evtchn,
    6.21 -				 be->blkif->shmem_frame,
    6.22 -				 be->blkif->remote_evtchn);
    6.23 -		return;
    6.24 -	}
    6.25 -
    6.26  	/* Supply the information about the device the frontend needs */
    6.27  	err = xenbus_transaction_start(be->dev->nodename);
    6.28  	if (err) {
    6.29 @@ -189,6 +177,9 @@ static void backend_changed(struct xenbu
    6.30  		err = register_xenbus_watch(&be->watch);
    6.31  		if (err) {
    6.32  			be->watch.node = NULL;
    6.33 +			xenbus_dev_error(dev, err,
    6.34 +					 "adding frontend watch on %s",
    6.35 +					 be->frontpath);
    6.36  			goto device_fail;
    6.37  		}
    6.38  	}
    6.39 @@ -223,12 +214,15 @@ static void backend_changed(struct xenbu
    6.40  		if (IS_ERR(be->blkif)) {
    6.41  			err = PTR_ERR(be->blkif);
    6.42  			be->blkif = NULL;
    6.43 +			xenbus_dev_error(dev, err, "creating block interface");
    6.44  			goto device_fail;
    6.45  		}
    6.46  
    6.47  		err = vbd_create(be->blkif, handle, be->pdev, be->readonly);
    6.48 -		if (err)
    6.49 +		if (err) {
    6.50 +			xenbus_dev_error(dev, err, "creating vbd structure");
    6.51  			goto device_fail;
    6.52 +		}
    6.53  
    6.54  		frontend_changed(&be->watch, be->frontpath);
    6.55  	}
    6.56 @@ -250,8 +244,10 @@ static int blkback_probe(struct xenbus_d
    6.57  	int err;
    6.58  
    6.59  	be = kmalloc(sizeof(*be), GFP_KERNEL);
    6.60 -	if (!be)
    6.61 +	if (!be) {
    6.62 +		xenbus_dev_error(dev, -ENOMEM, "allocating backend structure");
    6.63  		return -ENOMEM;
    6.64 +	}
    6.65  
    6.66  	memset(be, 0, sizeof(*be));
    6.67  
    6.68 @@ -259,8 +255,11 @@ static int blkback_probe(struct xenbus_d
    6.69  	be->backend_watch.node = dev->nodename;
    6.70  	be->backend_watch.callback = backend_changed;
    6.71  	err = register_xenbus_watch(&be->backend_watch);
    6.72 -	if (err)
    6.73 +	if (err) {
    6.74 +		xenbus_dev_error(dev, err, "adding backend watch on %s",
    6.75 +				 dev->nodename);
    6.76  		goto free_be;
    6.77 +	}
    6.78  
    6.79  	dev->data = be;
    6.80  
     7.1 --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c	Tue Aug 23 12:03:21 2005 -0700
     7.2 +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c	Wed Aug 24 13:29:21 2005 -0700
     7.3 @@ -1165,8 +1165,10 @@ static int talk_to_backend(struct xenbus
     7.4  
     7.5  	/* Create shared ring, alloc event channel. */
     7.6  	err = setup_blkring(dev, info);
     7.7 -	if (err)
     7.8 +	if (err) {
     7.9 +		xenbus_dev_error(dev, err, "setting up block ring");
    7.10  		goto out;
    7.11 +	}
    7.12  
    7.13  	err = xenbus_transaction_start(dev->nodename);
    7.14  	if (err) {
    7.15 @@ -1329,9 +1331,9 @@ static int wait_for_blkif(void)
    7.16      int i;
    7.17  
    7.18      /*
    7.19 -     * We should read 'nr_interfaces' from response message and wait
    7.20 -     * for notifications before proceeding. For now we assume that we
    7.21 -     * will be notified of exactly one interface.
    7.22 +     * We should figure out how many and which devices we need to
    7.23 +     * proceed and only wait for those.  For now, continue once the
    7.24 +     * first device is around.
    7.25       */
    7.26      for ( i=0; blkif_state != BLKIF_STATE_CONNECTED && (i < 10*HZ); i++ )
    7.27      {
     8.1 --- a/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c	Tue Aug 23 12:03:21 2005 -0700
     8.2 +++ b/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c	Wed Aug 24 13:29:21 2005 -0700
     8.3 @@ -200,6 +200,7 @@ static char *be_state_name[] = {
     8.4      [BEST_CONNECTED]    = "connected",
     8.5  };
     8.6  
     8.7 +#define DEBUG
     8.8  #ifdef DEBUG
     8.9  #define DPRINTK(fmt, args...) \
    8.10      printk(KERN_ALERT "xen_net (%s:%d) " fmt, __FUNCTION__, __LINE__, ##args)
    8.11 @@ -919,6 +920,7 @@ static void vif_show(struct net_private 
    8.12  /* Send a connect message to xend to tell it to bring up the interface. */
    8.13  static void send_interface_connect(struct net_private *np)
    8.14  {
    8.15 +    int err;
    8.16      ctrl_msg_t cmsg = {
    8.17          .type    = CMSG_NETIF_FE,
    8.18          .subtype = CMSG_NETIF_FE_INTERFACE_CONNECT,
    8.19 @@ -929,24 +931,22 @@ static void send_interface_connect(struc
    8.20      msg->handle = np->handle;
    8.21      msg->tx_shmem_frame = virt_to_mfn(np->tx);
    8.22  #ifdef CONFIG_XEN_NETDEV_GRANT_TX
    8.23 -    msg->tx_shmem_ref   = (u32)gnttab_claim_grant_reference(&gref_tx_head);
    8.24 -    if(msg->tx_shmem_ref < 0) { 
    8.25 -        printk(KERN_ALERT "#### netfront can't claim tx_shmem reference\n");
    8.26 +    err = gnttab_grant_foreign_access(rdomid, msg->tx_shmem_frame, 0);
    8.27 +    if (err < 0) {
    8.28 +        printk(KERN_ALERT "#### netfront can't grant access to tx_shmem\n");
    8.29          BUG();
    8.30      }
    8.31 -    gnttab_grant_foreign_access_ref (msg->tx_shmem_ref, rdomid, 
    8.32 -                                     msg->tx_shmem_frame, 0);
    8.33 +    msg->tx_shmem_ref = err;
    8.34  #endif
    8.35  
    8.36      msg->rx_shmem_frame = virt_to_mfn(np->rx);
    8.37  #ifdef CONFIG_XEN_NETDEV_GRANT_RX
    8.38 -    msg->rx_shmem_ref   = (u32)gnttab_claim_grant_reference(&gref_rx_head);
    8.39 -    if(msg->rx_shmem_ref < 0) {
    8.40 -        printk(KERN_ALERT "#### netfront can't claim rx_shmem reference\n");
    8.41 +    err = gnttab_grant_foreign_access(rdomid, msg->rx_shmem_frame, 0);
    8.42 +    if (err < 0) {
    8.43 +        printk(KERN_ALERT "#### netfront can't grant access to rx_shmem\n");
    8.44          BUG();
    8.45      }
    8.46 -    gnttab_grant_foreign_access_ref (msg->rx_shmem_ref, rdomid, 
    8.47 -                                     msg->rx_shmem_frame, 0);
    8.48 +    msg->rx_shmem_ref = err;
    8.49  #endif
    8.50  
    8.51      ctrl_if_send_message_block(&cmsg, NULL, 0, TASK_UNINTERRUPTIBLE);
    8.52 @@ -1416,8 +1416,8 @@ static int __init netif_init(void)
    8.53      if (xen_start_info.flags & SIF_INITDOMAIN)
    8.54          return 0;
    8.55  #ifdef CONFIG_XEN_NETDEV_GRANT_TX
    8.56 -    /* A grant for every ring slot, plus one for the ring itself */
    8.57 -    if (gnttab_alloc_grant_references(NETIF_TX_RING_SIZE + 1,
    8.58 +    /* A grant for every ring slot */
    8.59 +    if (gnttab_alloc_grant_references(NETIF_TX_RING_SIZE,
    8.60                                        &gref_tx_head) < 0) {
    8.61          printk(KERN_ALERT "#### netfront can't alloc tx grant refs\n");
    8.62          return 1;
    8.63 @@ -1425,8 +1425,8 @@ static int __init netif_init(void)
    8.64      printk(KERN_ALERT "Netdev frontend (TX) is using grant tables.\n"); 
    8.65  #endif
    8.66  #ifdef CONFIG_XEN_NETDEV_GRANT_RX
    8.67 -    /* A grant for every ring slot, plus one for the ring itself */
    8.68 -    if (gnttab_alloc_grant_references(NETIF_RX_RING_SIZE + 1,
    8.69 +    /* A grant for every ring slot */
    8.70 +    if (gnttab_alloc_grant_references(NETIF_RX_RING_SIZE,
    8.71                                        &gref_rx_head) < 0) {
    8.72          printk(KERN_ALERT "#### netfront can't alloc rx grant refs\n");
    8.73          return 1;
     9.1 --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c	Tue Aug 23 12:03:21 2005 -0700
     9.2 +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c	Wed Aug 24 13:29:21 2005 -0700
     9.3 @@ -627,6 +627,8 @@ int do_xenbus_probe(void *unused)
     9.4  	/* Watch for changes. */
     9.5  	register_xenbus_watch(&fe_watch);
     9.6  	register_xenbus_watch(&be_watch);
     9.7 +	/* Notify others that xenstore is up */
     9.8 +	notifier_call_chain(&xenstore_chain, 0, 0);
     9.9  	up(&xenbus_lock);
    9.10  	return 0;
    9.11  }
    9.12 @@ -637,7 +639,7 @@ static int __init xenbus_probe_init(void
    9.13  	bus_register(&xenbus_backend.bus);
    9.14  	device_register(&xenbus_frontend.dev);
    9.15  	device_register(&xenbus_backend.dev);
    9.16 -	
    9.17 +
    9.18  	if (!xen_start_info.store_evtchn)
    9.19  		return 0;
    9.20  
    10.1 --- a/linux-2.6-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h	Tue Aug 23 12:03:21 2005 -0700
    10.2 +++ b/linux-2.6-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h	Wed Aug 24 13:29:21 2005 -0700
    10.3 @@ -8,23 +8,12 @@
    10.4  
    10.5  static char * __init machine_specific_memory_setup(void)
    10.6  {
    10.7 -	char *who;
    10.8 -	unsigned long start_pfn, max_pfn;
    10.9 -
   10.10 -	who = "Xen";
   10.11 -
   10.12 -	/* In dom0, we have to start the fake e820 map above the first
   10.13 -	 * 1MB, in other domains, it can start at 0. */
   10.14 -	if (xen_start_info.flags & SIF_INITDOMAIN)
   10.15 -		start_pfn = 0x100;
   10.16 -	else
   10.17 -		start_pfn = 0;
   10.18 -	max_pfn = xen_start_info.nr_pages;
   10.19 +	unsigned long max_pfn = xen_start_info.nr_pages;
   10.20  
   10.21  	e820.nr_map = 0;
   10.22 -	add_memory_region(PFN_PHYS(start_pfn), PFN_PHYS(max_pfn) - PFN_PHYS(start_pfn), E820_RAM);
   10.23 +	add_memory_region(0, PFN_PHYS(max_pfn), E820_RAM);
   10.24  
   10.25 -	return who;
   10.26 +	return "Xen";
   10.27  }
   10.28  
   10.29  void __init machine_specific_modify_cpu_capabilities(struct cpuinfo_x86 *c)
    11.1 --- a/tools/xenstore/testsuite/02directory.test	Tue Aug 23 12:03:21 2005 -0700
    11.2 +++ b/tools/xenstore/testsuite/02directory.test	Wed Aug 24 13:29:21 2005 -0700
    11.3 @@ -32,3 +32,16 @@ expect mkdir failed: File exists
    11.4  mkdir /dir
    11.5  expect mkdir failed: File exists
    11.6  mkdir /dir/test2
    11.7 +
    11.8 +# Mkdir implicitly creates directories.
    11.9 +mkdir /dir/1/2/3/4
   11.10 +expect test2
   11.11 +expect 1
   11.12 +dir /dir
   11.13 +expect 2
   11.14 +dir /dir/1
   11.15 +expect 3
   11.16 +dir /dir/1/2
   11.17 +expect 4
   11.18 +dir /dir/1/2/3
   11.19 +dir /dir/1/2/3/4
    12.1 --- a/tools/xenstore/testsuite/03write.test	Tue Aug 23 12:03:21 2005 -0700
    12.2 +++ b/tools/xenstore/testsuite/03write.test	Wed Aug 24 13:29:21 2005 -0700
    12.3 @@ -18,3 +18,22 @@ read /test
    12.4  write /test create contents3
    12.5  expect contents3
    12.6  read /test
    12.7 +
    12.8 +# Write should implicitly create directories
    12.9 +write /dir/test create contents
   12.10 +expect test
   12.11 +dir /dir
   12.12 +expect contents
   12.13 +read /dir/test
   12.14 +write /dir/1/2/3/4 excl contents4
   12.15 +expect test
   12.16 +expect 1
   12.17 +dir /dir
   12.18 +expect 2
   12.19 +dir /dir/1
   12.20 +expect 3
   12.21 +dir /dir/1/2
   12.22 +expect 4
   12.23 +dir /dir/1/2/3
   12.24 +expect contents4
   12.25 +read /dir/1/2/3/4
    13.1 --- a/tools/xenstore/testsuite/06dirpermissions.test	Tue Aug 23 12:03:21 2005 -0700
    13.2 +++ b/tools/xenstore/testsuite/06dirpermissions.test	Wed Aug 24 13:29:21 2005 -0700
    13.3 @@ -117,3 +117,11 @@ setid 3
    13.4  write /dir/subdir/subfile excl contents
    13.5  expect 3 READ/WRITE
    13.6  getperm /dir/subdir/subfile
    13.7 +
    13.8 +# Inheritence works through multiple directories, too.
    13.9 +write /dir/subdir/1/2/3/4 excl contents
   13.10 +expect 3 READ/WRITE
   13.11 +getperm /dir/subdir/1/2/3/4
   13.12 +mkdir /dir/subdir/a/b/c/d
   13.13 +expect 3 READ/WRITE
   13.14 +getperm /dir/subdir/a/b/c/d
    14.1 --- a/tools/xenstore/testsuite/test.sh	Tue Aug 23 12:03:21 2005 -0700
    14.2 +++ b/tools/xenstore/testsuite/test.sh	Wed Aug 24 13:29:21 2005 -0700
    14.3 @@ -8,7 +8,7 @@ run_test()
    14.4      rm -rf $XENSTORED_ROOTDIR
    14.5      mkdir $XENSTORED_ROOTDIR
    14.6      if [ $VALGRIND -eq 1 ]; then
    14.7 -	valgrind -q --logfile-fd=3 ./xenstored_test --output-pid --trace-file=testsuite/tmp/trace --no-fork 3>testsuite/tmp/vgout > /tmp/pid 2> testsuite/tmp/xenstored_errors &
    14.8 +	valgrind --suppressions=testsuite/vg-suppressions -q ./xenstored_test --output-pid --trace-file=testsuite/tmp/trace --no-fork > /tmp/pid 2> testsuite/tmp/xenstored_errors &
    14.9  	while [ ! -s /tmp/pid ]; do sleep 0; done
   14.10  	PID=`cat /tmp/pid`
   14.11  	rm /tmp/pid
   14.12 @@ -17,10 +17,10 @@ run_test()
   14.13  	PID=`./xenstored_test --output-pid --trace-file=testsuite/tmp/trace`
   14.14      fi
   14.15      if ./xs_test $2 $1; then
   14.16 -	if [ -s testsuite/tmp/vgout ]; then
   14.17 +	if [ -s testsuite/tmp/xenstored_errors ]; then
   14.18  	    kill $PID
   14.19 -	    echo VALGRIND errors:
   14.20 -	    cat testsuite/tmp/vgout
   14.21 +	    echo Errors:
   14.22 +	    cat testsuite/tmp/xenstored_errors
   14.23  	    return 1
   14.24  	fi
   14.25  	echo shutdown | ./xs_test
   14.26 @@ -52,11 +52,10 @@ for f in testsuite/[0-9]*.test $SLOWTEST
   14.27      case `basename $f` in $MATCH) RUN=1;; esac
   14.28      [ -n "$RUN" ] || continue
   14.29  
   14.30 -    if run_test $f > /dev/null; then
   14.31 +    if run_test $f -x >/tmp/out; then
   14.32  	echo -n .
   14.33      else
   14.34 -	echo Test $f failed, running verbosely...
   14.35 -	run_test $f -x || true
   14.36 +	cat /tmp/out
   14.37  	# That will have filled the screen, repeat message.
   14.38  	echo Test $f failed
   14.39  	exit 1
    15.1 --- a/tools/xenstore/xenstored_core.c	Tue Aug 23 12:03:21 2005 -0700
    15.2 +++ b/tools/xenstore/xenstored_core.c	Wed Aug 24 13:29:21 2005 -0700
    15.3 @@ -423,14 +423,24 @@ static char *node_dir(struct transaction
    15.4  	return node_dir_inside_transaction(trans, node);
    15.5  }
    15.6  
    15.7 +static char *datafile(const char *dir)
    15.8 +{
    15.9 +	return talloc_asprintf(dir, "%s/.data", dir);
   15.10 +}
   15.11 +
   15.12  static char *node_datafile(struct transaction *trans, const char *node)
   15.13  {
   15.14 -	return talloc_asprintf(node, "%s/.data", node_dir(trans, node));
   15.15 +	return datafile(node_dir(trans, node));
   15.16 +}
   15.17 +
   15.18 +static char *permfile(const char *dir)
   15.19 +{
   15.20 +	return talloc_asprintf(dir, "%s/.perms", dir);
   15.21  }
   15.22  
   15.23  static char *node_permfile(struct transaction *trans, const char *node)
   15.24  {
   15.25 -	return talloc_asprintf(node, "%s/.perms", node_dir(trans, node));
   15.26 +	return permfile(node_dir(trans, node));
   15.27  }
   15.28  
   15.29  struct buffered_data *new_buffer(void *ctx)
   15.30 @@ -557,15 +567,14 @@ static const char *onearg(struct buffere
   15.31  }
   15.32  
   15.33  /* If it fails, returns NULL and sets errno. */
   15.34 -static struct xs_permissions *get_perms(struct transaction *transaction,
   15.35 -					const char *node, unsigned int *num)
   15.36 +static struct xs_permissions *get_perms(const char *dir, unsigned int *num)
   15.37  {
   15.38  	unsigned int size;
   15.39  	char *strings;
   15.40  	struct xs_permissions *ret;
   15.41  	int *fd;
   15.42  
   15.43 -	fd = talloc_open(node_permfile(transaction, node), O_RDONLY, 0);
   15.44 +	fd = talloc_open(permfile(dir), O_RDONLY, 0);
   15.45  	if (!fd)
   15.46  		return NULL;
   15.47  	strings = read_all(fd, &size);
   15.48 @@ -573,14 +582,14 @@ static struct xs_permissions *get_perms(
   15.49  		return NULL;
   15.50  
   15.51  	*num = xs_count_strings(strings, size);
   15.52 -	ret = talloc_array(node, struct xs_permissions, *num);
   15.53 +	ret = talloc_array(dir, struct xs_permissions, *num);
   15.54  	if (!xs_strings_to_perms(ret, *num, strings))
   15.55 -		corrupt(NULL, "Permissions corrupt for %s", node);
   15.56 +		corrupt(NULL, "Permissions corrupt for %s", dir);
   15.57  
   15.58  	return ret;
   15.59  }
   15.60  
   15.61 -static char *perms_to_strings(const char *node,
   15.62 +static char *perms_to_strings(const void *ctx,
   15.63  			      struct xs_permissions *perms, unsigned int num,
   15.64  			      unsigned int *len)
   15.65  {
   15.66 @@ -592,7 +601,7 @@ static char *perms_to_strings(const char
   15.67  		if (!xs_perm_to_string(&perms[i], buffer))
   15.68  			return NULL;
   15.69  
   15.70 -		strings = talloc_realloc(node, strings, char,
   15.71 +		strings = talloc_realloc(ctx, strings, char,
   15.72  					 *len + strlen(buffer) + 1);
   15.73  		strcpy(strings + *len, buffer);
   15.74  		*len += strlen(buffer) + 1;
   15.75 @@ -625,16 +634,23 @@ int destroy_path(void *path)
   15.76  	return 0;
   15.77  }
   15.78  
   15.79 +/* Create a self-destructing temporary path */
   15.80 +static char *temppath(const char *path)
   15.81 +{
   15.82 +	char *tmppath = talloc_asprintf(path, "%s.tmp", path);
   15.83 +	talloc_set_destructor(tmppath, destroy_path);
   15.84 +	return tmppath;
   15.85 +}
   15.86 +
   15.87  /* Create a self-destructing temporary file */
   15.88  static char *tempfile(const char *path, void *contents, unsigned int len)
   15.89  {
   15.90  	int *fd;
   15.91 -	char *tmppath = talloc_asprintf(path, "%s.tmp", path);
   15.92 +	char *tmppath = temppath(path);
   15.93  
   15.94  	fd = talloc_open(tmppath, O_WRONLY|O_CREAT|O_EXCL, 0640);
   15.95  	if (!fd)
   15.96  		return NULL;
   15.97 -	talloc_set_destructor(tmppath, destroy_path);
   15.98  	if (!xs_write_all(*fd, contents, len))
   15.99  		return NULL;
  15.100  
  15.101 @@ -732,7 +748,7 @@ static enum xs_perm_type ask_parents(str
  15.102  
  15.103  	do {
  15.104  		node = get_parent(node);
  15.105 -		perms = get_perms(conn->transaction, node, &num);
  15.106 +		perms = get_perms(node_dir(conn->transaction, node), &num);
  15.107  		if (perms)
  15.108  			break;
  15.109  	} while (!streq(node, "/"));
  15.110 @@ -788,7 +804,7 @@ bool check_node_perms(struct connection 
  15.111  		return false;
  15.112  	}
  15.113  
  15.114 -	perms = get_perms(conn->transaction, node, &num);
  15.115 +	perms = get_perms(node_dir(conn->transaction, node), &num);
  15.116  
  15.117  	if (perms) {
  15.118  		if (perm_for_id(conn->id, perms, num) & perm)
  15.119 @@ -875,44 +891,64 @@ static void do_read(struct connection *c
  15.120  		send_reply(conn, XS_READ, value, size);
  15.121  }
  15.122  
  15.123 -/* Create a new directory.  Optionally put data in it (if data != NULL) */
  15.124 -static bool new_directory(struct connection *conn,
  15.125 -			  const char *node, void *data, unsigned int datalen)
  15.126 +/* Commit this directory, eg. comitting a/b.tmp/c causes a/b.tmp -> a.b */
  15.127 +static bool commit_dir(char *dir)
  15.128 +{
  15.129 +	char *dot, *slash, *dest;
  15.130 +
  15.131 +	dot = strrchr(dir, '.');
  15.132 +	slash = strchr(dot, '/');
  15.133 +	if (slash)
  15.134 +		*slash = '\0';
  15.135 +
  15.136 +	dest = talloc_asprintf(dir, "%.*s", dot - dir, dir);
  15.137 +	return rename(dir, dest) == 0;
  15.138 +}
  15.139 +
  15.140 +/* Create a temporary directory.  Put data in it (if data != NULL) */
  15.141 +static char *tempdir(struct connection *conn,
  15.142 +		     const char *node, void *data, unsigned int datalen)
  15.143  {
  15.144  	struct xs_permissions *perms;
  15.145  	char *permstr;
  15.146  	unsigned int num, len;
  15.147  	int *fd;
  15.148 -	char *dir = node_dir(conn->transaction, node);
  15.149 +	char *dir;
  15.150  
  15.151 -	if (mkdir(dir, 0750) != 0)
  15.152 -		return false;
  15.153 +	dir = temppath(node_dir(conn->transaction, node));
  15.154 +	if (mkdir(dir, 0750) != 0) {
  15.155 +		if (errno != ENOENT)
  15.156 +			return NULL;
  15.157  
  15.158 -	/* Set destructor so we clean up if neccesary. */
  15.159 -	talloc_set_destructor(dir, destroy_path);
  15.160 +		dir = tempdir(conn, get_parent(node), NULL, 0);
  15.161 +		if (!dir)
  15.162 +			return NULL;
  15.163  
  15.164 -	perms = get_perms(conn->transaction, get_parent(node), &num);
  15.165 +		dir = talloc_asprintf(dir, "%s%s", dir, strrchr(node, '/'));
  15.166 +		if (mkdir(dir, 0750) != 0)
  15.167 +			return NULL;
  15.168 +		talloc_set_destructor(dir, destroy_path);
  15.169 +	}
  15.170 +
  15.171 +	perms = get_perms(get_parent(dir), &num);
  15.172 +	assert(perms);
  15.173  	/* Domains own what they create. */
  15.174  	if (conn->id)
  15.175  		perms->id = conn->id;
  15.176  
  15.177  	permstr = perms_to_strings(dir, perms, num, &len);
  15.178 -	fd = talloc_open(node_permfile(conn->transaction, node),
  15.179 -			 O_WRONLY|O_CREAT|O_EXCL, 0640);
  15.180 +	fd = talloc_open(permfile(dir), O_WRONLY|O_CREAT|O_EXCL, 0640);
  15.181  	if (!fd || !xs_write_all(*fd, permstr, len))
  15.182 -		return false;
  15.183 +		return NULL;
  15.184  
  15.185  	if (data) {
  15.186 -		char *datapath = node_datafile(conn->transaction, node);
  15.187 +		char *datapath = datafile(dir);
  15.188  
  15.189  		fd = talloc_open(datapath, O_WRONLY|O_CREAT|O_EXCL, 0640);
  15.190  		if (!fd || !xs_write_all(*fd, data, datalen))
  15.191 -			return false;
  15.192 +			return NULL;
  15.193  	}
  15.194 -
  15.195 -	/* Finished! */
  15.196 -	talloc_set_destructor(dir, NULL);
  15.197 -	return true;
  15.198 +	return dir;
  15.199  }
  15.200  
  15.201  /* path, flags, data... */
  15.202 @@ -959,6 +995,8 @@ static void do_write(struct connection *
  15.203  	}
  15.204  
  15.205  	if (lstat(node_dir(conn->transaction, node), &st) != 0) {
  15.206 +		char *dir;
  15.207 +
  15.208  		/* Does not exist... */
  15.209  		if (errno != ENOENT) {
  15.210  			send_error(conn, errno);
  15.211 @@ -971,10 +1009,12 @@ static void do_write(struct connection *
  15.212  			return;
  15.213  		}
  15.214  
  15.215 -		if (!new_directory(conn, node, in->buffer + offset, datalen)) {
  15.216 +		dir = tempdir(conn, node, in->buffer + offset, datalen);
  15.217 +		if (!dir || !commit_dir(dir)) {
  15.218  			send_error(conn, errno);
  15.219  			return;
  15.220  		}
  15.221 +		
  15.222  	} else {
  15.223  		/* Exists... */
  15.224  		if (streq(vec[1], XS_WRITE_CREATE_EXCL)) {
  15.225 @@ -999,6 +1039,9 @@ static void do_write(struct connection *
  15.226  
  15.227  static void do_mkdir(struct connection *conn, const char *node)
  15.228  {
  15.229 +	char *dir;
  15.230 +	struct stat st;
  15.231 +
  15.232  	node = canonicalize(conn, node);
  15.233  	if (!check_node_perms(conn, node, XS_PERM_WRITE|XS_PERM_ENOENT_OK)) {
  15.234  		send_error(conn, errno);
  15.235 @@ -1013,7 +1056,14 @@ static void do_mkdir(struct connection *
  15.236  	if (transaction_block(conn, node))
  15.237  		return;
  15.238  
  15.239 -	if (!new_directory(conn, node, NULL, 0)) {
  15.240 +	/* Must not already exist. */
  15.241 +	if (lstat(node_dir(conn->transaction, node), &st) == 0) {
  15.242 +		send_error(conn, EEXIST);
  15.243 +		return;
  15.244 +	}
  15.245 +
  15.246 +	dir = tempdir(conn, node, NULL, 0);
  15.247 +	if (!dir || !commit_dir(dir)) {
  15.248  		send_error(conn, errno);
  15.249  		return;
  15.250  	}
  15.251 @@ -1073,7 +1123,7 @@ static void do_get_perms(struct connecti
  15.252  		return;
  15.253  	}
  15.254  
  15.255 -	perms = get_perms(conn->transaction, node, &num);
  15.256 +	perms = get_perms(node_dir(conn->transaction, node), &num);
  15.257  	if (!perms) {
  15.258  		send_error(conn, errno);
  15.259  		return;
    16.1 --- a/tools/xenstore/xs_random.c	Tue Aug 23 12:03:21 2005 -0700
    16.2 +++ b/tools/xenstore/xs_random.c	Wed Aug 24 13:29:21 2005 -0700
    16.3 @@ -303,6 +303,34 @@ static bool file_set_perms(struct file_o
    16.4  	return true;
    16.5  }
    16.6  
    16.7 +static char *parent_filename(const char *name)
    16.8 +{
    16.9 +	char *slash = strrchr(name + 1, '/');
   16.10 +	if (!slash)
   16.11 +		return talloc_strdup(name, "/");
   16.12 +	return talloc_asprintf(name, "%.*s", slash-name, name);
   16.13 +}
   16.14 +
   16.15 +static void make_dirs(const char *filename)
   16.16 +{
   16.17 +	struct stat st;
   16.18 +
   16.19 +	if (lstat(filename, &st) == 0 && S_ISREG(st.st_mode))
   16.20 +		convert_to_dir(filename);
   16.21 +
   16.22 +	if (mkdir(filename, 0700) == 0) {
   16.23 +		init_perms(filename);
   16.24 +		return;
   16.25 +	}
   16.26 +	if (errno == EEXIST)
   16.27 +		return;
   16.28 +
   16.29 +	make_dirs(parent_filename(filename));
   16.30 +	if (mkdir(filename, 0700) != 0)
   16.31 +		barf_perror("Failed to mkdir %s", filename);
   16.32 +	init_perms(filename);
   16.33 +}
   16.34 +
   16.35  static bool file_write(struct file_ops_info *info,
   16.36  		       const char *path, const void *data,
   16.37  		       unsigned int len, int createflags)
   16.38 @@ -329,6 +357,9 @@ static bool file_write(struct file_ops_i
   16.39  		}
   16.40  	}
   16.41  
   16.42 +	if (createflags & O_CREAT)
   16.43 +		make_dirs(parent_filename(filename));
   16.44 +
   16.45  	fd = open(filename, createflags|O_TRUNC|O_WRONLY, 0600);
   16.46  	if (fd < 0) {
   16.47  		/* FIXME: Another hack. */
   16.48 @@ -352,6 +383,7 @@ static bool file_mkdir(struct file_ops_i
   16.49  	if (!write_ok(info, path))
   16.50  		return false;
   16.51  
   16.52 +	make_dirs(parent_filename(dirname));
   16.53  	if (mkdir(dirname, 0700) != 0)
   16.54  		return false;
   16.55  
   16.56 @@ -420,7 +452,7 @@ static bool file_transaction_end(struct 
   16.57  	}
   16.58  
   16.59  	if (abort) {
   16.60 -		cmd = talloc_asprintf(NULL, "rm -r %s", info->transact_base);
   16.61 +		cmd = talloc_asprintf(NULL, "rm -rf %s", info->transact_base);
   16.62  		do_command(cmd);
   16.63  		goto success;
   16.64  	}
   16.65 @@ -1004,8 +1036,8 @@ static void setup_xs_ops(void)
   16.66  	} else {
   16.67  		dup2(fds[1], STDOUT_FILENO);
   16.68  		close(fds[0]);
   16.69 -#if 0
   16.70 -		execlp("valgrind", "valgrind", "xenstored_test", "--output-pid",
   16.71 +#if 1
   16.72 +		execlp("valgrind", "valgrind", "-q", "--suppressions=testsuite/vg-suppressions", "xenstored_test", "--output-pid",
   16.73  		       "--no-fork", NULL);
   16.74  #else
   16.75  		execlp("./xenstored_test", "xenstored_test", "--output-pid",
    17.1 --- a/xen/arch/x86/cpu/amd.c	Tue Aug 23 12:03:21 2005 -0700
    17.2 +++ b/xen/arch/x86/cpu/amd.c	Wed Aug 24 13:29:21 2005 -0700
    17.3 @@ -9,6 +9,20 @@
    17.4  
    17.5  #include "cpu.h"
    17.6  
    17.7 +/*
    17.8 + * amd_flush_filter={on,off}. Forcibly Enable or disable the TLB flush
    17.9 + * filter on AMD 64-bit processors.
   17.10 + */
   17.11 +static int flush_filter_force;
   17.12 +static void flush_filter(char *s)
   17.13 +{
   17.14 +	if (!strcmp(s, "off"))
   17.15 +		flush_filter_force = -1;
   17.16 +	if (!strcmp(s, "on"))
   17.17 +		flush_filter_force = 1;
   17.18 +}
   17.19 +custom_param("amd_flush_filter", flush_filter);
   17.20 +
   17.21  #define num_physpages 0
   17.22  
   17.23  /*
   17.24 @@ -192,6 +206,21 @@ static void __init init_amd(struct cpuin
   17.25  		break;
   17.26  	}
   17.27  
   17.28 +	if (c->x86 == 15) {
   17.29 +		rdmsr(MSR_K7_HWCR, l, h);
   17.30 +		printk(KERN_INFO "CPU%d: AMD Flush Filter %sabled",
   17.31 +		       smp_processor_id(), (l & (1<<6)) ? "dis" : "en");
   17.32 +		if ((flush_filter_force > 0) && (l & (1<<6))) {
   17.33 +			l &= ~(1<<6);
   17.34 +			printk(" -> Forcibly enabled");
   17.35 +		} else if ((flush_filter_force < 0) && !(l & (1<<6))) {
   17.36 +			l |= 1<<6;
   17.37 +			printk(" -> Forcibly disabled");
   17.38 +		}
   17.39 +		wrmsr(MSR_K7_HWCR, l, h);
   17.40 +		printk("\n");
   17.41 +	}
   17.42 +
   17.43  	display_cacheinfo(c);
   17.44  
   17.45  	if (cpuid_eax(0x80000000) >= 0x80000008) {
    18.1 --- a/xen/arch/x86/mm.c	Tue Aug 23 12:03:21 2005 -0700
    18.2 +++ b/xen/arch/x86/mm.c	Wed Aug 24 13:29:21 2005 -0700
    18.3 @@ -1449,8 +1449,10 @@ int get_page_type(struct pfn_info *page,
    18.4                      if ( ((x & PGT_type_mask) != PGT_l2_page_table) ||
    18.5                           ((type & PGT_type_mask) != PGT_l1_page_table) )
    18.6                          MEM_LOG("Bad type (saw %" PRtype_info
    18.7 -                                "!= exp %" PRtype_info ") for pfn %lx",
    18.8 -                                x, type, page_to_pfn(page));
    18.9 +                                "!= exp %" PRtype_info ") "
   18.10 +                                "for mfn %lx (pfn %x)",
   18.11 +                                x, type, page_to_pfn(page),
   18.12 +                                machine_to_phys_mapping[page_to_pfn(page)]);
   18.13                      return 0;
   18.14                  }
   18.15                  else if ( (x & PGT_va_mask) == PGT_va_mutable )