|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 4/8] mm: Scrub memory from idle loop
On 07/31/2017 11:20 AM, Jan Beulich wrote:
>>>> Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> 07/23/17 4:14 AM >>>
>>>> @@ -1050,17 +1120,42 @@ static void scrub_free_pages(unsigned int node)
>>>> - if ( node_need_scrub[node] == 0 )
>>>> - return;
>>>> + if ( preempt || (node_need_scrub[node] == 0) )
>>>> + goto out;
>>>> }
>>>> } while ( order-- != 0 );
>>>> }
>>>> +
>>>> + out:
>>>> + spin_unlock(&heap_lock);
>>>> + node_clear(node, node_scrubbing);
>>>> + return softirq_pending(cpu) || (node_to_scrub(false) != NUMA_NO_NODE);
>>> While I can see why you use it here, the softirq_pending() looks sort of
>>> misplaced: While invoking it twice in the caller will look a little odd too,
>>> I still think that's where the check belongs.
>>
>> scrub_free_pages is called from idle loop as
>>
>> else if ( !softirq_pending(cpu) && !scrub_free_pages() )
>> pm_idle();
>>
>> so softirq_pending() is unnecessary here.
>>
>> (Not sure why you are saying it would be invoked twice)
> That was sort of implicit - the caller would want to become
>
>
> else if ( !softirq_pending(cpu) && !scrub_free_pages() &&
> !softirq_pending(cpu) )
> pm_idle();
>
> to account for the fact that a softirq may become pending while scrubbing.
That would look really odd IMO.
Would
else if ( !softirq_pending(cpu) )
if ( !scrub_free_pages() && !softirq_pending(cpu) )
pm_idle();
or
else if ( !softirq_pending(cpu) && !scrub_free_pages() )
if ( !softirq_pending(cpu) )
pm_idle();
be better? (I'd prefer the first)
-boris
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |