diff options
author | iap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk> | 2004-05-03 21:36:57 +0000 |
---|---|---|
committer | iap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk> | 2004-05-03 21:36:57 +0000 |
commit | b168f3ecf092f5060a25adbd628f911615064ec9 (patch) | |
tree | ce3cdb6f3cd80924b171625a32343bc13a4bf869 | |
parent | 3882a78594317ddcaeb97e585080a998ab8a17fe (diff) | |
download | xen-b168f3ecf092f5060a25adbd628f911615064ec9.tar.gz xen-b168f3ecf092f5060a25adbd628f911615064ec9.tar.bz2 xen-b168f3ecf092f5060a25adbd628f911615064ec9.zip |
bitkeeper revision 1.886 (4096bb79FO21T0jG8TqB3XBOZ5eOpw)
save/restore bug fixes, extra debug
-rwxr-xr-x | tools/examples/xc_dom_create.py | 2 | ||||
-rw-r--r-- | tools/xend/lib/utils.c | 4 | ||||
-rw-r--r-- | xen/common/dom0_ops.c | 5 | ||||
-rw-r--r-- | xen/common/domain.c | 4 | ||||
-rw-r--r-- | xen/include/xen/mm.h | 4 | ||||
-rw-r--r-- | xenolinux-2.4.26-sparse/arch/xen/drivers/dom0/core.c | 16 | ||||
-rw-r--r-- | xenolinux-2.4.26-sparse/arch/xen/mm/ioremap.c | 4 |
7 files changed, 22 insertions, 17 deletions
diff --git a/tools/examples/xc_dom_create.py b/tools/examples/xc_dom_create.py index 0fae2b251b..382d580032 100755 --- a/tools/examples/xc_dom_create.py +++ b/tools/examples/xc_dom_create.py @@ -253,7 +253,7 @@ def make_domain(): else: io_priv = False if restore: - ret = eval('xc.%s_restore ( dom=id, state_file=state_file, progress=1, io_priv=%d )' % (builder_fn, io_priv)) + ret = eval('xc.%s_restore ( dom=id, state_file=state_file, progress=1)' % (builder_fn) ) if ret < 0: print "Error restoring domain" print "Return code = " + str(ret) diff --git a/tools/xend/lib/utils.c b/tools/xend/lib/utils.c index c28d682ec9..297976e9be 100644 --- a/tools/xend/lib/utils.c +++ b/tools/xend/lib/utils.c @@ -22,11 +22,11 @@ #include <signal.h> #include <xc.h> -#include <asm-xen/proc_cmd.h> - #include <hypervisor-if.h> #include "domain_controller.h" +#include <asm-xen/proc_cmd.h> + /* Needed for Python versions earlier than 2.3. */ #ifndef PyMODINIT_FUNC #define PyMODINIT_FUNC DL_EXPORT(void) diff --git a/xen/common/dom0_ops.c b/xen/common/dom0_ops.c index 67c26e303a..55a024435b 100644 --- a/xen/common/dom0_ops.c +++ b/xen/common/dom0_ops.c @@ -274,7 +274,6 @@ long do_dom0_op(dom0_op_t *u_dom0_op) } else { -printk("AAAA %p\n",op->u.getdomaininfo.ctxt); op->u.getdomaininfo.domain = p->domain; strcpy (op->u.getdomaininfo.name, p->name); op->u.getdomaininfo.processor = p->processor; @@ -349,7 +348,6 @@ printk("AAAA %p\n",op->u.getdomaininfo.ctxt); if( copy_to_user(op->u.getdomaininfo.ctxt, c, sizeof(*c)) ) { -printk("URGHT %p\n",op->u.getdomaininfo.ctxt); ret = -EINVAL; } @@ -546,6 +544,7 @@ printk("URGHT %p\n",op->u.getdomaininfo.ctxt); if ( p ) { strncpy(p->name, op->u.setdomainname.name, MAX_DOMAIN_NAME); + put_task_struct(p); } else ret = -ESRCH; @@ -565,6 +564,7 @@ printk("URGHT %p\n",op->u.getdomaininfo.ctxt); p, op->u.setdomaininitialmem.initial_memkb ); else ret = -EINVAL; + put_task_struct(p); } } break; @@ -577,6 +577,7 @@ printk("URGHT %p\n",op->u.getdomaininfo.ctxt); { p->max_pages = (op->u.setdomainmaxmem.max_memkb+PAGE_SIZE-1)>> PAGE_SHIFT; + put_task_struct(p); } else ret = -ESRCH; diff --git a/xen/common/domain.c b/xen/common/domain.c index 24f15e886b..a9c40ae98f 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -214,6 +214,10 @@ void __kill_domain(struct task_struct *p) *pp = p->next_hash; write_unlock_irqrestore(&tasklist_lock, flags); + if ( atomic_read(&p->refcnt) >2 ) + DPRINTK("Domain refcnt>1 so kil deferred. Missing put_task? p=%p cur=%p cnt=%d\n",p,current,atomic_read(&p->refcnt)); + + if ( p == current ) { __enter_scheduler(); diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h index 15629e5f51..628d20c17e 100644 --- a/xen/include/xen/mm.h +++ b/xen/include/xen/mm.h @@ -164,8 +164,8 @@ static inline int get_page(struct pfn_info *page, unlikely(x & PGC_zombie) || /* Zombie? */ unlikely(p != domain) ) /* Wrong owner? */ { - DPRINTK("Error pfn %08lx: ed=%p,sd=%p,caf=%08x\n", - page_to_pfn(page), domain, p, x); + DPRINTK("Error pfn %08lx: ed=%p(%lld), sd=%p(%lld), caf=%08x\n", + page_to_pfn(page), domain, (domain)?domain->domain:1234, p, (p)?p->domain:1234, x); return 0; } __asm__ __volatile__( diff --git a/xenolinux-2.4.26-sparse/arch/xen/drivers/dom0/core.c b/xenolinux-2.4.26-sparse/arch/xen/drivers/dom0/core.c index 98eff63453..ccda2c2022 100644 --- a/xenolinux-2.4.26-sparse/arch/xen/drivers/dom0/core.c +++ b/xenolinux-2.4.26-sparse/arch/xen/drivers/dom0/core.c @@ -62,6 +62,14 @@ static int privcmd_ioctl(struct inode *inode, struct file *file, } break; + case IOCTL_PRIVCMD_INITDOMAIN_EVTCHN: + { + extern int initdom_ctrlif_domcontroller_port; + ret = initdom_ctrlif_domcontroller_port; + } + break; + + case IOCTL_PRIVCMD_MMAP: { #define PRIVCMD_MMAP_SZ 32 @@ -108,13 +116,6 @@ static int privcmd_ioctl(struct inode *inode, struct file *file, } break; - case IOCTL_PRIVCMD_INITDOMAIN_EVTCHN: - { - extern int initdom_ctrlif_domcontroller_port; - ret = initdom_ctrlif_domcontroller_port; - } - break; - default: ret = -EINVAL; break; @@ -124,7 +125,6 @@ static int privcmd_ioctl(struct inode *inode, struct file *file, static int privcmd_mmap(struct file * file, struct vm_area_struct * vma) { -printk(KERN_ALERT"privcmd_mmap\n"); /* DONTCOPY is essential for Xen as copy_page_range is broken. */ vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY; diff --git a/xenolinux-2.4.26-sparse/arch/xen/mm/ioremap.c b/xenolinux-2.4.26-sparse/arch/xen/mm/ioremap.c index 773a1f83c3..07524e01aa 100644 --- a/xenolinux-2.4.26-sparse/arch/xen/mm/ioremap.c +++ b/xenolinux-2.4.26-sparse/arch/xen/mm/ioremap.c @@ -35,7 +35,7 @@ static inline int direct_remap_area_pte(pte_t *pte, domid_t domid) { unsigned long end; -#define MAX_DIRECTMAP_MMU_QUEUE 64 +#define MAX_DIRECTMAP_MMU_QUEUE 130 mmu_update_t u[MAX_DIRECTMAP_MMU_QUEUE], *v; address &= ~PMD_MASK; @@ -70,7 +70,7 @@ static inline int direct_remap_area_pte(pte_t *pte, #endif v->ptr = virt_to_machine(pte); v->val = (machine_addr & PAGE_MASK) | pgprot_val(prot) | _PAGE_IO; - if ( ++v == MAX_DIRECTMAP_MMU_QUEUE ) + if ( ( ++v - u )== MAX_DIRECTMAP_MMU_QUEUE ) { if ( HYPERVISOR_mmu_update(u, MAX_DIRECTMAP_MMU_QUEUE) < 0 ) return -EFAULT; |