mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
bitkeeper revision 1.1159.83.10 (41544e88xdk28a2dPYKcImhs23irug)
Only free_page_type() on a page that is not yet invalid.
This commit is contained in:
1 parent
1569997010
commit
38277cb617
1 file changed
+11
-2
+11
-2
@@ -820,14 +820,23 @@ void put_page_type(struct pfn_info *page)
|
||||
nx = x - 1;
|
||||
|
||||
ASSERT((x & PGT_count_mask) != 0);
|
||||
ASSERT(x & PGT_validated);
|
||||
|
||||
/*
|
||||
* The page should always be validated while a reference is held. The
|
||||
* exception is during domain destruction, when we forcibly invalidate
|
||||
* page-table pages if we detect a referential loop.
|
||||
* See domain.c:relinquish_list().
|
||||
*/
|
||||
ASSERT((x & PGT_validated) ||
|
||||
test_bit(DF_DYING, &page->u.inuse.domain->flags));
|
||||
|
||||
if ( unlikely((nx & PGT_count_mask) == 0) )
|
||||
{
|
||||
/* Record TLB information for flush later. Races are harmless. */
|
||||
page->tlbflush_timestamp = tlbflush_clock;
|
||||
|
||||
if ( unlikely((nx & PGT_type_mask) <= PGT_l4_page_table) )
|
||||
if ( unlikely((nx & PGT_type_mask) <= PGT_l4_page_table) &&
|
||||
likely(nx & PGT_validated) )
|
||||
{
|
||||
/*
|
||||
* Page-table pages must be unvalidated when count is zero. The
|
||||
|
||||