[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Merged.
# HG changeset patch # User emellor@xxxxxxxxxxxxxxxxxxxxxx # Node ID 50dcb6266990fa932e9952037940fddf7424017b # Parent 725bf42d4713eaee5c12cd39752e86ca56dee4ce # Parent fb50fba1895c3954f7d7bcecbc37221c58f235ff Merged. diff -r 725bf42d4713 -r 50dcb6266990 docs/man/xm.pod.1 --- a/docs/man/xm.pod.1 Wed Nov 16 11:36:47 2005 +++ b/docs/man/xm.pod.1 Wed Nov 16 11:37:29 2005 @@ -645,10 +645,6 @@ =item B<network-detach> I<domain-id> I<devid> -=item B<network-limit> I<domain-id> I<vif> I<credit> I<period> - -Limit the transmission rate of a virtual network interface. - =item B<network-list> I<domain-id> List virtual network interfaces for a domain. The returned output is diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c --- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c Wed Nov 16 11:37:29 2005 @@ -15,6 +15,7 @@ #include <asm/io.h> #include <asm-xen/balloon.h> #include <asm/tlbflush.h> +#include <asm/swiotlb.h> struct dma_coherent_mem { void *virt_base; diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/arch/xen/kernel/devmem.c --- a/linux-2.6-xen-sparse/arch/xen/kernel/devmem.c Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/arch/xen/kernel/devmem.c Wed Nov 16 11:37:29 2005 @@ -79,7 +79,7 @@ if ((v = ioremap(p, count)) == NULL) return -EFAULT; - if (copy_to_user(v, buf, count)) + if (copy_from_user(v, buf, count)) goto out; written = count; diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/arch/xen/kernel/evtchn.c --- a/linux-2.6-xen-sparse/arch/xen/kernel/evtchn.c Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/arch/xen/kernel/evtchn.c Wed Nov 16 11:37:29 2005 @@ -752,7 +752,7 @@ irq_bindcount[dynirq_to_irq(i)] = 0; irq_desc[dynirq_to_irq(i)].status = IRQ_DISABLED; - irq_desc[dynirq_to_irq(i)].action = 0; + irq_desc[dynirq_to_irq(i)].action = NULL; irq_desc[dynirq_to_irq(i)].depth = 1; irq_desc[dynirq_to_irq(i)].handler = &dynirq_type; } @@ -770,7 +770,7 @@ #endif irq_desc[pirq_to_irq(i)].status = IRQ_DISABLED; - irq_desc[pirq_to_irq(i)].action = 0; + irq_desc[pirq_to_irq(i)].action = NULL; irq_desc[pirq_to_irq(i)].depth = 1; irq_desc[pirq_to_irq(i)].handler = &pirq_type; } diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/arch/xen/kernel/reboot.c --- a/linux-2.6-xen-sparse/arch/xen/kernel/reboot.c Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/arch/xen/kernel/reboot.c Wed Nov 16 11:37:29 2005 @@ -15,6 +15,7 @@ #include <asm-xen/xenbus.h> #include <linux/cpu.h> #include <linux/kthread.h> +#include <asm-xen/xencons.h> #define SHUTDOWN_INVALID -1 #define SHUTDOWN_POWEROFF 0 @@ -29,7 +30,6 @@ void machine_restart(char * __unused) { /* We really want to get pending console data out before we die. */ - extern void xencons_force_flush(void); xencons_force_flush(); HYPERVISOR_sched_op(SCHEDOP_shutdown, SHUTDOWN_reboot); } @@ -42,7 +42,6 @@ void machine_power_off(void) { /* We really want to get pending console data out before we die. */ - extern void xencons_force_flush(void); xencons_force_flush(); HYPERVISOR_sched_op(SCHEDOP_shutdown, SHUTDOWN_poweroff); } @@ -84,8 +83,6 @@ cpumask_t prev_online_cpus; int vcpu_prepare(int vcpu); #endif - - extern void xencons_resume(void); int err = 0; diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/arch/xen/kernel/xen_proc.c --- a/linux-2.6-xen-sparse/arch/xen/kernel/xen_proc.c Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/arch/xen/kernel/xen_proc.c Wed Nov 16 11:37:29 2005 @@ -1,6 +1,7 @@ #include <linux/config.h> #include <linux/proc_fs.h> +#include <asm-xen/xen_proc.h> static struct proc_dir_entry *xen_base; diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/drivers/acpi/tables.c --- a/linux-2.6-xen-sparse/drivers/acpi/tables.c Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/drivers/acpi/tables.c Wed Nov 16 11:37:29 2005 @@ -565,7 +565,7 @@ * * result: sdt_entry[] is initialized */ -#ifdef CONFIG_XEN_X86 +#if defined(CONFIG_XEN_X86) || defined(CONFIG_XEN_X86_64) #define acpi_rsdp_phys_to_va(rsdp_phys) (__fix_to_virt(FIX_ACPI_RSDP_PAGE) + \ (rsdp_phys & ~PAGE_MASK)) #else diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/drivers/char/tpm/tpm_xen.c --- a/linux-2.6-xen-sparse/drivers/char/tpm/tpm_xen.c Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/drivers/char/tpm/tpm_xen.c Wed Nov 16 11:37:29 2005 @@ -438,7 +438,7 @@ &dev_attr_pcrs.attr, &dev_attr_caps.attr, &dev_attr_cancel.attr, - 0, + NULL, }; static struct attribute_group xen_attr_grp = { .attrs = xen_attrs }; diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c --- a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c Wed Nov 16 11:37:29 2005 @@ -381,9 +381,9 @@ } -int balloon_init_watcher(struct notifier_block *notifier, - unsigned long event, - void *data) +static int balloon_init_watcher(struct notifier_block *notifier, + unsigned long event, + void *data) { int err; diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c --- a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c Wed Nov 16 11:37:29 2005 @@ -543,7 +543,7 @@ spin_lock_init(&blkio_schedule_list_lock); INIT_LIST_HEAD(&blkio_schedule_list); - ret = kernel_thread(blkio_schedule, 0, CLONE_FS | CLONE_FILES); + ret = kernel_thread(blkio_schedule, NULL, CLONE_FS | CLONE_FILES); BUG_ON(ret < 0); blkif_xenbus_init(); diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c Wed Nov 16 11:37:29 2005 @@ -679,7 +679,7 @@ int j; /* Stage 1: Make a safe copy of the shadow state. */ - copy = (struct blk_shadow *)kmalloc(sizeof(info->shadow), GFP_KERNEL); + copy = kmalloc(sizeof(info->shadow), GFP_KERNEL); BUG_ON(copy == NULL); memcpy(copy, info->shadow, sizeof(info->shadow)); diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/drivers/xen/console/console.c --- a/linux-2.6-xen-sparse/drivers/xen/console/console.c Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/console/console.c Wed Nov 16 11:37:29 2005 @@ -53,6 +53,7 @@ #include <asm-xen/xen-public/event_channel.h> #include <asm/hypervisor.h> #include <asm-xen/evtchn.h> +#include <asm-xen/xencons.h> #include "xencons_ring.h" /* diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c Wed Nov 16 11:37:29 2005 @@ -854,7 +854,7 @@ { int ret = 0; - if(xenstored_ready > 0) + if (xenstored_ready > 0) ret = nb->notifier_call(nb, 0, NULL); else notifier_chain_register(&xenstore_chain, nb); @@ -884,7 +884,7 @@ register_xenbus_watch(&be_watch); /* Notify others that xenstore is up */ - notifier_call_chain(&xenstore_chain, 0, 0); + notifier_call_chain(&xenstore_chain, 0, NULL); } diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/include/asm-xen/asm-i386/io.h --- a/linux-2.6-xen-sparse/include/asm-xen/asm-i386/io.h Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/include/asm-xen/asm-i386/io.h Wed Nov 16 11:37:29 2005 @@ -228,7 +228,7 @@ * 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 __iomem *)(PAGE_OFFSET)) +#define __ISA_IO_base ((char __iomem *)(fix_to_virt(FIX_ISAMAP_BEGIN))) #define isa_readb(a) readb(__ISA_IO_base + (a)) #define isa_readw(a) readw(__ISA_IO_base + (a)) diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/io.h --- a/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/io.h Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/io.h Wed Nov 16 11:37:29 2005 @@ -298,7 +298,7 @@ * 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 __iomem *)(PAGE_OFFSET)) +#define __ISA_IO_base ((char __iomem *)(fix_to_virt(FIX_ISAMAP_BEGIN))) #define isa_readb(a) readb(__ISA_IO_base + (a)) #define isa_readw(a) readw(__ISA_IO_base + (a)) diff -r 725bf42d4713 -r 50dcb6266990 tools/libxc/xc_linux_build.c --- a/tools/libxc/xc_linux_build.c Wed Nov 16 11:36:47 2005 +++ b/tools/libxc/xc_linux_build.c Wed Nov 16 11:37:29 2005 @@ -351,7 +351,7 @@ xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, page_array[0]); memset(start_info, 0, sizeof(*start_info)); rc = xc_version(xc_handle, XENVER_version, NULL); - sprintf(start_info->magic, "xen-%i.%i", rc >> 16, rc & (0xFFFF)); + sprintf(start_info->magic, "xen-%i.%i-ia64", rc >> 16, rc & (0xFFFF)); start_info->flags = flags; start_info->store_mfn = nr_pages - 2; start_info->store_evtchn = store_evtchn; @@ -628,7 +628,9 @@ page_array[(vstartinfo_start-dsi.v_start)>>PAGE_SHIFT]); memset(start_info, 0, sizeof(*start_info)); rc = xc_version(xc_handle, XENVER_version, NULL); - sprintf(start_info->magic, "xen-%i.%i", rc >> 16, rc & (0xFFFF)); + sprintf(start_info->magic, "xen-%i.%i-x86_%d%s", + rc >> 16, rc & (0xFFFF), sizeof(long)*8, + dsi.pae_kernel ? "p" : ""); start_info->nr_pages = nr_pages; start_info->shared_info = shared_info_frame << PAGE_SHIFT; start_info->flags = flags; diff -r 725bf42d4713 -r 50dcb6266990 tools/python/xen/xend/XendClient.py --- a/tools/python/xen/xend/XendClient.py Wed Nov 16 11:36:47 2005 +++ b/tools/python/xen/xend/XendClient.py Wed Nov 16 11:37:29 2005 @@ -301,13 +301,6 @@ return self.xendPost(self.domainurl(dom), {'op' : 'set_vcpus', 'vcpus' : vcpus }) - - def xend_domain_vif_limit(self, id, vif, credit, period): - return self.xendPost(self.domainurl(id), - { 'op' : 'vif_limit_set', - 'vif' : vif, - 'credit' : credit, - 'period' : period }) def xend_domain_devices(self, id, type): return self.xendPost(self.domainurl(id), diff -r 725bf42d4713 -r 50dcb6266990 tools/python/xen/xend/XendDomain.py --- a/tools/python/xen/xend/XendDomain.py Wed Nov 16 11:36:47 2005 +++ b/tools/python/xen/xend/XendDomain.py Wed Nov 16 11:37:29 2005 @@ -466,17 +466,6 @@ except Exception, ex: raise XendError(str(ex)) - - def domain_vif_limit_set(self, domid, vif, credit, period): - """Limit the vif's transmission rate - """ - dominfo = self.domain_lookup(domid) - dev = dominfo.getDevice('vif', vif) - if not dev: - raise XendError("invalid vif") - return dev.setCreditLimit(credit, period) - - def domain_maxmem_set(self, domid, mem): """Set the memory limit for a domain. diff -r 725bf42d4713 -r 50dcb6266990 tools/python/xen/xm/main.py --- a/tools/python/xen/xm/main.py Wed Nov 16 11:36:47 2005 +++ b/tools/python/xen/xm/main.py Wed Nov 16 11:37:29 2005 @@ -118,8 +118,6 @@ Create a new virtual network device network-detach <DomId> <DevId> Destroy a domain's virtual network device, where <DevId> is the device ID. - network-limit <DomId> <Vif> <Credit> <Period> - Limit the transmission rate of a virtual network interface network-list <DomId> List virtual network interfaces for a domain Vnet commands: @@ -556,13 +554,6 @@ def xm_log(args): from xen.xend.XendClient import server print server.xend_node_log() - -def xm_network_limit(args): - arg_check(args,4,"network-limit") - dom = args[0] - v = map(int, args[1:4]) - from xen.xend.XendClient import server - server.xend_domain_vif_limit(dom, *v) def xm_network_list(args): arg_check(args,1,"network-list") @@ -716,7 +707,6 @@ # network "network-attach": xm_network_attach, "network-detach": xm_network_detach, - "network-limit": xm_network_limit, "network-list": xm_network_list, # vnet "vnet-list": xm_vnet_list, @@ -739,7 +729,6 @@ aliases = { "balloon": "mem-set", "vif-list": "network-list", - "vif-limit": "network-limit", "vbd-create": "block-create", "vbd-destroy": "block-destroy", "vbd-list": "block-list", diff -r 725bf42d4713 -r 50dcb6266990 xen/arch/ia64/xen/domain.c --- a/xen/arch/ia64/xen/domain.c Wed Nov 16 11:36:47 2005 +++ b/xen/arch/ia64/xen/domain.c Wed Nov 16 11:37:29 2005 @@ -952,7 +952,7 @@ si = (start_info_t *)alloc_xenheap_page(); memset(si, 0, PAGE_SIZE); d->shared_info->arch.start_info_pfn = __pa(si) >> PAGE_SHIFT; - sprintf(si->magic, "Xen-%i.%i", XEN_VERSION, XEN_SUBVERSION); + sprintf(si->magic, "xen-%i.%i-ia64", XEN_VERSION, XEN_SUBVERSION); #if 0 si->nr_pages = d->tot_pages; diff -r 725bf42d4713 -r 50dcb6266990 xen/arch/x86/domain_build.c --- a/xen/arch/x86/domain_build.c Wed Nov 16 11:36:47 2005 +++ b/xen/arch/x86/domain_build.c Wed Nov 16 11:37:29 2005 @@ -639,7 +639,8 @@ si->pt_base = vpt_start; si->nr_pt_frames = nr_pt_pages; si->mfn_list = vphysmap_start; - sprintf(si->magic, "Xen-%i.%i", XEN_VERSION, XEN_SUBVERSION); + sprintf(si->magic, "xen-%i.%i-x86_%d%s", + XEN_VERSION, XEN_SUBVERSION, BITS_PER_LONG, xen_pae ? "p" : ""); /* Write the phys->machine and machine->phys table entries. */ for ( pfn = 0; pfn < d->tot_pages; pfn++ ) diff -r 725bf42d4713 -r 50dcb6266990 xen/arch/x86/shadow.c --- a/xen/arch/x86/shadow.c Wed Nov 16 11:36:47 2005 +++ b/xen/arch/x86/shadow.c Wed Nov 16 11:37:29 2005 @@ -873,7 +873,7 @@ } static struct out_of_sync_entry * -mark_mfn_out_of_sync(struct vcpu *v, unsigned long gpfn, +__mark_mfn_out_of_sync(struct vcpu *v, unsigned long gpfn, unsigned long mfn) { struct domain *d = v->domain; @@ -909,7 +909,6 @@ entry->v = v; entry->gpfn = gpfn; entry->gmfn = mfn; - entry->snapshot_mfn = shadow_make_snapshot(d, gpfn, mfn); entry->writable_pl1e = -1; #if 0 // this code has not been updated for 32pae & 64 bit modes @@ -923,20 +922,34 @@ // get_page(page, d); + return entry; +} + +static struct out_of_sync_entry * +mark_mfn_out_of_sync(struct vcpu *v, unsigned long gpfn, + unsigned long mfn) +{ + struct out_of_sync_entry *entry = + __mark_mfn_out_of_sync(v, gpfn, mfn); + struct domain *d = v->domain; + + entry->snapshot_mfn = shadow_make_snapshot(d, gpfn, mfn); // Add to the out-of-sync list // entry->next = d->arch.out_of_sync; d->arch.out_of_sync = entry; return entry; + } static void shadow_mark_va_out_of_sync( struct vcpu *v, unsigned long gpfn, unsigned long mfn, unsigned long va) { struct out_of_sync_entry *entry = - shadow_mark_mfn_out_of_sync(v, gpfn, mfn); + __mark_mfn_out_of_sync(v, gpfn, mfn); l2_pgentry_t sl2e; + struct domain *d = v->domain; #if CONFIG_PAGING_LEVELS >= 4 { @@ -971,6 +984,7 @@ } ASSERT(l2e_get_flags(sl2e) & _PAGE_PRESENT); + entry->snapshot_mfn = shadow_make_snapshot(d, gpfn, mfn); // NB: this is stored as a machine address. entry->writable_pl1e = l2e_get_paddr(sl2e) | (sizeof(l1_pgentry_t) * l1_table_offset(va)); @@ -982,6 +996,11 @@ // if ( !get_shadow_ref(l2e_get_pfn(sl2e)) ) BUG(); + + // Add to the out-of-sync list + // + entry->next = d->arch.out_of_sync; + d->arch.out_of_sync = entry; FSH_LOG("mark_out_of_sync(va=%lx -> writable_pl1e=%lx)", va, entry->writable_pl1e); diff -r 725bf42d4713 -r 50dcb6266990 xen/arch/x86/shadow32.c --- a/xen/arch/x86/shadow32.c Wed Nov 16 11:36:47 2005 +++ b/xen/arch/x86/shadow32.c Wed Nov 16 11:37:29 2005 @@ -1826,7 +1826,7 @@ } struct out_of_sync_entry * -shadow_mark_mfn_out_of_sync(struct vcpu *v, unsigned long gpfn, +__shadow_mark_mfn_out_of_sync(struct vcpu *v, unsigned long gpfn, unsigned long mfn) { struct domain *d = v->domain; @@ -1862,7 +1862,6 @@ entry->v = v; entry->gpfn = gpfn; entry->gmfn = mfn; - entry->snapshot_mfn = shadow_make_snapshot(d, gpfn, mfn); entry->writable_pl1e = -1; #if SHADOW_DEBUG @@ -1874,6 +1873,18 @@ // get_page(page, d); + return entry; +} + +struct out_of_sync_entry * +shadow_mark_mfn_out_of_sync(struct vcpu *v, unsigned long gpfn, + unsigned long mfn) +{ + struct out_of_sync_entry *entry = + __shadow_mark_mfn_out_of_sync(v, gpfn, mfn); + struct domain *d = v->domain; + + entry->snapshot_mfn = shadow_make_snapshot(d, gpfn, mfn); // Add to the out-of-sync list // entry->next = d->arch.out_of_sync; @@ -1886,8 +1897,9 @@ struct vcpu *v, unsigned long gpfn, unsigned long mfn, unsigned long va) { struct out_of_sync_entry *entry = - shadow_mark_mfn_out_of_sync(v, gpfn, mfn); + __shadow_mark_mfn_out_of_sync(v, gpfn, mfn); l2_pgentry_t sl2e; + struct domain *d = v->domain; // We need the address of shadow PTE that maps @va. // It might not exist yet. Make sure it's there. @@ -1902,6 +1914,7 @@ } ASSERT(l2e_get_flags(sl2e) & _PAGE_PRESENT); + entry->snapshot_mfn = shadow_make_snapshot(d, gpfn, mfn); // NB: this is stored as a machine address. entry->writable_pl1e = l2e_get_paddr(sl2e) | (sizeof(l1_pgentry_t) * l1_table_offset(va)); @@ -1913,6 +1926,11 @@ // if ( !get_shadow_ref(l2e_get_pfn(sl2e)) ) BUG(); + + // Add to the out-of-sync list + // + entry->next = d->arch.out_of_sync; + d->arch.out_of_sync = entry; FSH_LOG("mark_out_of_sync(va=%lx -> writable_pl1e=%lx)", va, entry->writable_pl1e); diff -r 725bf42d4713 -r 50dcb6266990 xen/include/public/xen.h --- a/xen/include/public/xen.h Wed Nov 16 11:36:47 2005 +++ b/xen/include/public/xen.h Wed Nov 16 11:37:29 2005 @@ -408,7 +408,7 @@ #define MAX_GUEST_CMDLINE 1024 typedef struct start_info { /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME. */ - char magic[32]; /* "Xen-<version>.<subversion>". */ + char magic[32]; /* "xen-<version>-<platform>". */ unsigned long nr_pages; /* Total pages allocated to this domain. */ unsigned long shared_info; /* MACHINE address of shared info struct. */ uint32_t flags; /* SIF_xxx flags. */ diff -r 725bf42d4713 -r 50dcb6266990 linux-2.6-xen-sparse/include/asm-xen/xencons.h --- /dev/null Wed Nov 16 11:36:47 2005 +++ b/linux-2.6-xen-sparse/include/asm-xen/xencons.h Wed Nov 16 11:37:29 2005 @@ -0,0 +1,7 @@ +#ifndef __ASM_XENCONS_H__ +#define __ASM_XENCONS_H__ + +void xencons_force_flush(void); +void xencons_resume(void); + +#endif /* __ASM_XENCONS_H__ */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |