bitkeeper revision 1.886 (4096bb79FO21T0jG8TqB3XBOZ5eOpw)
authoriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>
Mon, 3 May 2004 21:36:57 +0000 (21:36 +0000)
committeriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>
Mon, 3 May 2004 21:36:57 +0000 (21:36 +0000)
save/restore bug fixes, extra debug

tools/examples/xc_dom_create.py
tools/xend/lib/utils.c
xen/common/dom0_ops.c
xen/common/domain.c
xen/include/xen/mm.h
xenolinux-2.4.26-sparse/arch/xen/drivers/dom0/core.c
xenolinux-2.4.26-sparse/arch/xen/mm/ioremap.c

index 0fae2b251bcd8e10f3109fb7650fde15a781a186..382d580032481c5513241f0167be7c4ce81606d4 100755 (executable)
@@ -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)
index c28d682ec9a9a39f4fee4768a491f5f6c704310c..297976e9bec8d3e6b926e293d30c2cd892668761 100644 (file)
 #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)
index 67c26e303a94e5d412c08cd69da8efb51525b616..55a024435b3ebcc349de4390146fe2e5501a6b26 100644 (file)
@@ -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;
index 24f15e886ba19bffa001384f7b70499c09dee44c..a9c40ae98f22451621ac31c55722cd79bbf7941f 100644 (file)
@@ -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();
index 15629e5f515386f8d72b1bcec220460810e7271f..628d20c17eff9f898001b6f2b859569a594003c9 100644 (file)
@@ -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__(
index 98eff634539d5a3bd6daaa27d051879b38cbb49b..ccda2c2022fd7fc0ebb617070923bec6d837e0c4 100644 (file)
@@ -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;
 
index 773a1f83c38cd6549f36a5c9f5f852189dbb053a..07524e01aa58195d53672116aa7c2ce8eb82be9d 100644 (file)
@@ -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;