|
[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 |