aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>2004-05-03 21:36:57 +0000
committeriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>2004-05-03 21:36:57 +0000
commitb168f3ecf092f5060a25adbd628f911615064ec9 (patch)
treece3cdb6f3cd80924b171625a32343bc13a4bf869
parent3882a78594317ddcaeb97e585080a998ab8a17fe (diff)
downloadxen-b168f3ecf092f5060a25adbd628f911615064ec9.tar.gz
xen-b168f3ecf092f5060a25adbd628f911615064ec9.tar.bz2
xen-b168f3ecf092f5060a25adbd628f911615064ec9.zip
bitkeeper revision 1.886 (4096bb79FO21T0jG8TqB3XBOZ5eOpw)
save/restore bug fixes, extra debug
-rwxr-xr-xtools/examples/xc_dom_create.py2
-rw-r--r--tools/xend/lib/utils.c4
-rw-r--r--xen/common/dom0_ops.c5
-rw-r--r--xen/common/domain.c4
-rw-r--r--xen/include/xen/mm.h4
-rw-r--r--xenolinux-2.4.26-sparse/arch/xen/drivers/dom0/core.c16
-rw-r--r--xenolinux-2.4.26-sparse/arch/xen/mm/ioremap.c4
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;