The domain structure maintains several shadow mode stats,

such as shadow page counts for l1 & l2, hl2 tables, snapshots,
etc.  These counts are not decremented properly when we
free shadow pages.  The following patch fixes this problem.

Signed-off-by: Khoa Huynh <khoa@us.ibm.com>
This commit is contained in:
kaf24@firebug.cl.cam.ac.uk committed 2005-09-19 09:00:26 +00:00
1 parent 2cc9268913
commit d7f655cb2a
2 files changed
+9 -5

No files matched your search

+4 -2
View File
@@ -399,22 +399,26 @@ void free_shadow_page(unsigned long smfn)
perfc_decr(shadow_l1_pages);
shadow_demote(d, gpfn, gmfn);
free_shadow_l1_table(d, smfn);
d->arch.shadow_page_count--;
break;
case PGT_l2_shadow:
perfc_decr(shadow_l2_pages);
shadow_demote(d, gpfn, gmfn);
free_shadow_l2_table(d, smfn, page->u.inuse.type_info);
d->arch.shadow_page_count--;
break;
case PGT_hl2_shadow:
perfc_decr(hl2_table_pages);
shadow_demote(d, gpfn, gmfn);
free_shadow_hl2_table(d, smfn);
d->arch.hl2_page_count--;
break;
case PGT_snapshot:
perfc_decr(snapshot_pages);
d->arch.snapshot_page_count--;
break;
default:
@@ -423,8 +427,6 @@ void free_shadow_page(unsigned long smfn)
break;
}
d->arch.shadow_page_count--;
// No TLB flushes are needed the next time this page gets allocated.
//
page->tlbflush_timestamp = 0;
+5 -3
View File
@@ -595,18 +595,21 @@ void free_shadow_page(unsigned long smfn)
perfc_decr(shadow_l1_pages);
shadow_demote(d, gpfn, gmfn);
free_shadow_l1_table(d, smfn);
d->arch.shadow_page_count--;
break;
#if defined (__i386__)
case PGT_l2_shadow:
perfc_decr(shadow_l2_pages);
shadow_demote(d, gpfn, gmfn);
free_shadow_l2_table(d, smfn, page->u.inuse.type_info);
d->arch.shadow_page_count--;
break;
case PGT_hl2_shadow:
perfc_decr(hl2_table_pages);
shadow_demote(d, gpfn, gmfn);
free_shadow_hl2_table(d, smfn);
d->arch.hl2_page_count--;
break;
#else
case PGT_l2_shadow:
@@ -614,12 +617,13 @@ void free_shadow_page(unsigned long smfn)
case PGT_l4_shadow:
shadow_demote(d, gpfn, gmfn);
free_shadow_tables(d, smfn, shadow_type_to_level(type));
d->arch.shadow_page_count--;
break;
case PGT_fl1_shadow:
free_shadow_fl1_table(d, smfn);
d->arch.shadow_page_count--;
break;
#endif
case PGT_snapshot:
@@ -632,8 +636,6 @@ void free_shadow_page(unsigned long smfn)
break;
}
d->arch.shadow_page_count--;
// No TLB flushes are needed the next time this page gets allocated.
//
page->tlbflush_timestamp = 0;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.