[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 2/9] mm: Place unscrubbed pages at the end of pagelist
>> @@ -851,11 +867,14 @@ static int reserve_offlined_page(struct page_info >> *head) >> int zone = page_to_zone(head), i, head_order = PFN_ORDER(head), count = >> 0; >> struct page_info *cur_head; >> int cur_order; >> + bool need_scrub; >> >> ASSERT(spin_is_locked(&heap_lock)); >> >> cur_head = head; >> >> + head->u.free.dirty_head = false; >> + >> page_list_del(head, &heap(node, zone, head_order)); >> >> while ( cur_head < (head + (1 << head_order)) ) >> @@ -892,8 +911,16 @@ static int reserve_offlined_page(struct page_info *head) >> { >> merge: >> /* We don't consider merging outside the head_order. */ >> - page_list_add_tail(cur_head, &heap(node, zone, cur_order)); >> - PFN_ORDER(cur_head) = cur_order; >> + >> + /* See if any of the pages need scrubbing. */ >> + need_scrub = false; >> + for ( i = 0; i < (1 << cur_order); i++ ) >> + if ( test_bit(_PGC_need_scrub, &cur_head[i].count_info) >> ) >> + { >> + need_scrub = true; >> + break; >> + } >> + page_list_add_scrub(cur_head, node, zone, cur_order, >> need_scrub); > This thing with clearing dirty_head, then setting it again in > page_list_add_scrub() could use some explanation -- either near one of > these loops, or in mm.h preferrably. This is done because we are merging/splitting buddies and dirty_head should only be set on buddy's head. So we clear it before any such operation and then, as we merge/split things, we see if there are any dirty pages in the buddy. If there are, we set dirty_head. I will add something. (Note that at Jan's suggestion I will replace boolean dirty_head with an int that hints where the first dirty page in the buddy is) > > >> cur_head += (1 << cur_order); >> break; >> } >> @@ -922,10 +949,13 @@ static int reserve_offlined_page(struct page_info >> *head) >> /* Returns new buddy head. */ >> static struct page_info * >> merge_and_free_buddy(struct page_info *pg, unsigned int node, >> - unsigned int zone, unsigned int order) >> + unsigned int zone, unsigned int order, >> + bool need_scrub) > What is the meaning of "need_scrub" here? Does this mean that pg needs > to be scrubbed? It means that the buddy needs (or, more precisely, may need) scrubbing. -boris _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |