ia64/xen-unstable

changeset 9524:05d8c51c7550

Merged.
author emellor@leeni.uk.xensource.com
date Wed Mar 29 18:41:30 2006 +0100 (2006-03-29)
parents de30faffd672
children c7020299facc
files linux-2.6-xen-sparse/drivers/xen/blkback/xenbus.c xen/arch/x86/domain.c xen/arch/x86/smpboot.c xen/include/asm-x86/shadow.h
line diff
     1.1 --- a/linux-2.6-xen-sparse/drivers/xen/blkback/xenbus.c	Wed Mar 29 18:07:36 2006 +0100
     1.2 +++ b/linux-2.6-xen-sparse/drivers/xen/blkback/xenbus.c	Wed Mar 29 18:41:30 2006 +0100
     1.3 @@ -253,6 +253,7 @@ static void frontend_changed(struct xenb
     1.4  
     1.5  	switch (frontend_state) {
     1.6  	case XenbusStateInitialising:
     1.7 +	case XenbusStateConnected:
     1.8  		break;
     1.9  
    1.10  	case XenbusStateInitialised:
     2.1 --- a/xen/arch/x86/domain.c	Wed Mar 29 18:07:36 2006 +0100
     2.2 +++ b/xen/arch/x86/domain.c	Wed Mar 29 18:41:30 2006 +0100
     2.3 @@ -226,6 +226,13 @@ struct vcpu *alloc_vcpu_struct(struct do
     2.4  
     2.5      v->arch.schedule_tail = is_idle_domain(d) ?
     2.6          continue_idle_domain : continue_nonidle_domain;
     2.7 +        percpu_ctxt[vcpu_id].curr_vcpu = v;
     2.8 +        v->arch.schedule_tail = continue_idle_domain;
     2.9 +    }
    2.10 +    else
    2.11 +    {
    2.12 +        v->arch.schedule_tail = continue_nonidle_domain;
    2.13 +    }
    2.14  
    2.15      v->arch.ctxt_switch_from = paravirt_ctxt_switch_from;
    2.16      v->arch.ctxt_switch_to   = paravirt_ctxt_switch_to;
     3.1 --- a/xen/arch/x86/smpboot.c	Wed Mar 29 18:07:36 2006 +0100
     3.2 +++ b/xen/arch/x86/smpboot.c	Wed Mar 29 18:41:30 2006 +0100
     3.3 @@ -881,6 +881,7 @@ static int __devinit do_boot_cpu(int api
     3.4   * Returns zero if CPU booted OK, else error code from wakeup_secondary_cpu.
     3.5   */
     3.6  {
     3.7 +	struct vcpu *v;
     3.8  	unsigned long boot_error;
     3.9  	int timeout;
    3.10  	unsigned long start_eip;
     4.1 --- a/xen/include/asm-x86/shadow.h	Wed Mar 29 18:07:36 2006 +0100
     4.2 +++ b/xen/include/asm-x86/shadow.h	Wed Mar 29 18:41:30 2006 +0100
     4.3 @@ -662,10 +662,14 @@ static inline void shadow_sync_and_drop_
     4.4      if ( likely(!shadow_mode_refcounts(d)) )
     4.5          return;
     4.6  
     4.7 +    shadow_lock(d);
     4.8 +
     4.9      if ( page_out_of_sync(page) )
    4.10          __shadow_sync_mfn(d, page_to_mfn(page));
    4.11  
    4.12      shadow_remove_all_access(d, page_to_mfn(page));
    4.13 +
    4.14 +    shadow_unlock(d);
    4.15  }
    4.16  #endif
    4.17  
    4.18 @@ -699,6 +703,46 @@ get_shadow_ref(unsigned long smfn)
    4.19      return 1;
    4.20  }
    4.21  
    4.22 +    shadow_sync_and_drop_references(d, mfn_to_page(mfn));
    4.23 +    set_p2m_entry(d, gpfn, -1, &c1, &c2);
    4.24 +    set_gpfn_from_mfn(mfn, INVALID_M2P_ENTRY);
    4.25 +    shadow_unlock(d);
    4.26 +    domain_mmap_cache_destroy(&c1);
    4.27 +    domain_mmap_cache_destroy(&c2);
    4.28 +}
    4.29 +
    4.30 +/************************************************************************/
    4.31 +
    4.32 +/*
    4.33 + * Add another shadow reference to smfn.
    4.34 + */
    4.35 +static inline int
    4.36 +get_shadow_ref(unsigned long smfn)
    4.37 +{
    4.38 +    u32 x, nx;
    4.39 +
    4.40 +    ASSERT(mfn_valid(smfn));
    4.41 +
    4.42 +    x = mfn_to_page(smfn)->count_info;
    4.43 +    nx = x + 1;
    4.44 +
    4.45 +    if ( unlikely(nx == 0) )
    4.46 +    {
    4.47 +        printk("get_shadow_ref overflow, gmfn=%" PRtype_info  " smfn=%lx\n",
    4.48 +               mfn_to_page(smfn)->u.inuse.type_info & PGT_mfn_mask,
    4.49 +               smfn);
    4.50 +        BUG();
    4.51 +    }
    4.52 +    
    4.53 +    // Guarded by the shadow lock...
    4.54 +    //
    4.55 +    mfn_to_page(smfn)->count_info = nx;
    4.56 +
    4.57 +    return 1;
    4.58 +}
    4.59 +
    4.60 +extern void free_shadow_page(unsigned long smfn);
    4.61 +
    4.62  /*
    4.63   * Drop a shadow reference to smfn.
    4.64   */