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)
#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)
}
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;
if( copy_to_user(op->u.getdomaininfo.ctxt, c, sizeof(*c)) )
{
-printk("URGHT %p\n",op->u.getdomaininfo.ctxt);
ret = -EINVAL;
}
if ( p )
{
strncpy(p->name, op->u.setdomainname.name, MAX_DOMAIN_NAME);
+ put_task_struct(p);
}
else
ret = -ESRCH;
p, op->u.setdomaininitialmem.initial_memkb );
else
ret = -EINVAL;
+ put_task_struct(p);
}
}
break;
{
p->max_pages =
(op->u.setdomainmaxmem.max_memkb+PAGE_SIZE-1)>> PAGE_SHIFT;
+ put_task_struct(p);
}
else
ret = -ESRCH;
*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();
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__(
}
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
}
break;
- case IOCTL_PRIVCMD_INITDOMAIN_EVTCHN:
- {
- extern int initdom_ctrlif_domcontroller_port;
- ret = initdom_ctrlif_domcontroller_port;
- }
- break;
-
default:
ret = -EINVAL;
break;
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;
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;
#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;