ia64/xen-unstable

changeset 3364:0cba03559c5b

bitkeeper revision 1.1159.209.1 (41d559d4GzyJ3WvVnHx_oB2IlXZPuw)

temporary fix for BIGLOCK deadlock & tools fix
author smh22@tempest.cl.cam.ac.uk
date Fri Dec 31 13:53:24 2004 +0000 (2004-12-31)
parents bdac3ae67e39
children 9cee424e24de
files tools/libxc/xc_domain.c xen/include/xen/sched.h
line diff
     1.1 --- a/tools/libxc/xc_domain.c	Fri Dec 31 00:24:44 2004 +0000
     1.2 +++ b/tools/libxc/xc_domain.c	Fri Dec 31 13:53:24 2004 +0000
     1.3 @@ -69,6 +69,7 @@ int xc_domain_pincpu(int xc_handle,
     1.4      dom0_op_t op;
     1.5      op.cmd = DOM0_PINCPUDOMAIN;
     1.6      op.u.pincpudomain.domain = (domid_t)domid;
     1.7 +    op.u.pincpudomain.exec_domain = 0; 
     1.8      op.u.pincpudomain.cpu  = cpu;
     1.9      return do_dom0_op(xc_handle, &op);
    1.10  }
     2.1 --- a/xen/include/xen/sched.h	Fri Dec 31 00:24:44 2004 +0000
     2.2 +++ b/xen/include/xen/sched.h	Fri Dec 31 13:53:24 2004 +0000
     2.3 @@ -87,12 +87,18 @@ struct exec_domain
     2.4  
     2.5  };
     2.6  
     2.7 -#if 01
     2.8 +/*
     2.9 +** SMH: do_mmu_update() grabs big_lock and subsequently can fault 
    2.10 +** on map_ldt_shadow_page(), enter do_page_fault() and then deadlock 
    2.11 +** trying to reacquire big_lock. A temporary fix is to make big_lock
    2.12 +** recursive; overall probably needs more thought. 
    2.13 +*/
    2.14 +#if 0
    2.15  #define LOCK_BIGLOCK(_d) spin_lock(&(_d)->big_lock)
    2.16  #define UNLOCK_BIGLOCK(_d) spin_unlock(&(_d)->big_lock)
    2.17  #else
    2.18 -#define LOCK_BIGLOCK(_d) (void)(_d)
    2.19 -#define UNLOCK_BIGLOCK(_d)
    2.20 +#define LOCK_BIGLOCK(_d) spin_lock_recursive(&(_d)->big_lock)
    2.21 +#define UNLOCK_BIGLOCK(_d) spin_unlock_recursive(&(_d)->big_lock)
    2.22  #endif
    2.23  
    2.24  struct domain {