mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
Merged.
This commit is contained in:
1 parent
f9bdf89a1b
commit
f61bc4e0b8
4 files changed
+53
No files matched your search
@@ -253,6 +253,7 @@ static void frontend_changed(struct xenbus_device *dev,
|
||||
|
||||
switch (frontend_state) {
|
||||
case XenbusStateInitialising:
|
||||
case XenbusStateConnected:
|
||||
break;
|
||||
|
||||
case XenbusStateInitialised:
|
||||
|
||||
@@ -226,6 +226,13 @@ struct vcpu *alloc_vcpu_struct(struct domain *d, unsigned int vcpu_id)
|
||||
|
||||
v->arch.schedule_tail = is_idle_domain(d) ?
|
||||
continue_idle_domain : continue_nonidle_domain;
|
||||
percpu_ctxt[vcpu_id].curr_vcpu = v;
|
||||
v->arch.schedule_tail = continue_idle_domain;
|
||||
}
|
||||
else
|
||||
{
|
||||
v->arch.schedule_tail = continue_nonidle_domain;
|
||||
}
|
||||
|
||||
v->arch.ctxt_switch_from = paravirt_ctxt_switch_from;
|
||||
v->arch.ctxt_switch_to = paravirt_ctxt_switch_to;
|
||||
|
||||
@@ -881,6 +881,7 @@ static int __devinit do_boot_cpu(int apicid, int cpu)
|
||||
* Returns zero if CPU booted OK, else error code from wakeup_secondary_cpu.
|
||||
*/
|
||||
{
|
||||
struct vcpu *v;
|
||||
unsigned long boot_error;
|
||||
int timeout;
|
||||
unsigned long start_eip;
|
||||
|
||||
@@ -662,10 +662,14 @@ static inline void shadow_sync_and_drop_references(
|
||||
if ( likely(!shadow_mode_refcounts(d)) )
|
||||
return;
|
||||
|
||||
shadow_lock(d);
|
||||
|
||||
if ( page_out_of_sync(page) )
|
||||
__shadow_sync_mfn(d, page_to_mfn(page));
|
||||
|
||||
shadow_remove_all_access(d, page_to_mfn(page));
|
||||
|
||||
shadow_unlock(d);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -699,6 +703,46 @@ get_shadow_ref(unsigned long smfn)
|
||||
return 1;
|
||||
}
|
||||
|
||||
shadow_sync_and_drop_references(d, mfn_to_page(mfn));
|
||||
set_p2m_entry(d, gpfn, -1, &c1, &c2);
|
||||
set_gpfn_from_mfn(mfn, INVALID_M2P_ENTRY);
|
||||
shadow_unlock(d);
|
||||
domain_mmap_cache_destroy(&c1);
|
||||
domain_mmap_cache_destroy(&c2);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
/*
|
||||
* Add another shadow reference to smfn.
|
||||
*/
|
||||
static inline int
|
||||
get_shadow_ref(unsigned long smfn)
|
||||
{
|
||||
u32 x, nx;
|
||||
|
||||
ASSERT(mfn_valid(smfn));
|
||||
|
||||
x = mfn_to_page(smfn)->count_info;
|
||||
nx = x + 1;
|
||||
|
||||
if ( unlikely(nx == 0) )
|
||||
{
|
||||
printk("get_shadow_ref overflow, gmfn=%" PRtype_info " smfn=%lx\n",
|
||||
mfn_to_page(smfn)->u.inuse.type_info & PGT_mfn_mask,
|
||||
smfn);
|
||||
BUG();
|
||||
}
|
||||
|
||||
// Guarded by the shadow lock...
|
||||
//
|
||||
mfn_to_page(smfn)->count_info = nx;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
extern void free_shadow_page(unsigned long smfn);
|
||||
|
||||
/*
|
||||
* Drop a shadow reference to smfn.
|
||||
*/
|
||||
|
||||