|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 3/9] mm: Scrub pages in alloc_heap_pages() if needed
On 05/04/2017 10:44 AM, Jan Beulich wrote:
>>>> On 14.04.17 at 17:37, <boris.ostrovsky@xxxxxxxxxx> wrote:
>> When allocating pages in alloc_heap_pages() first look for clean pages.
> As expressed before, there are cases when we don't really need
> scrubbed pages. Hence the local variable "use_unscrubbed" below
> should really be some form of input to alloc_heap_pages().
That would be alloc_xenheap_pages() only, in which case can I just
initialize the still local use_unscrubbed
as
use_unscrubbed = (zone_lo == MEMZONE_XEN)
Or do you prefer this to be explicit?
>
>> --- a/xen/common/page_alloc.c
>> +++ b/xen/common/page_alloc.c
>> @@ -700,34 +700,17 @@ static struct page_info *alloc_heap_pages(
>> unsigned int order, unsigned int memflags,
>> struct domain *d)
>> {
>> - unsigned int i, j, zone = 0, nodemask_retry = 0;
>> - nodeid_t first_node, node = MEMF_get_node(memflags), req_node = node;
>> + unsigned int i, j, zone, nodemask_retry;
>> + nodeid_t first_node, node, req_node;
>> unsigned long request = 1UL << order;
>> struct page_info *pg;
>> - nodemask_t nodemask = (d != NULL ) ? d->node_affinity : node_online_map;
>> - bool_t need_tlbflush = 0;
>> + nodemask_t nodemask;
>> + bool need_scrub, need_tlbflush = false, use_unscrubbed = false;
>> uint32_t tlbflush_timestamp = 0;
>>
>> /* Make sure there are enough bits in memflags for nodeID. */
>> BUILD_BUG_ON((_MEMF_bits - _MEMF_node) < (8 * sizeof(nodeid_t)));
>>
>> - if ( node == NUMA_NO_NODE )
>> - {
>> - if ( d != NULL )
>> - {
>> - node = next_node(d->last_alloc_node, nodemask);
>> - if ( node >= MAX_NUMNODES )
>> - node = first_node(nodemask);
>> - }
>> - if ( node >= MAX_NUMNODES )
>> - node = cpu_to_node(smp_processor_id());
>> - }
>> - first_node = node;
>> -
>> - ASSERT(node < MAX_NUMNODES);
>> - ASSERT(zone_lo <= zone_hi);
>> - ASSERT(zone_hi < NR_ZONES);
> The last two can remain where they are (but see also below).
>
>> @@ -754,6 +740,28 @@ static struct page_info *alloc_heap_pages(
>> tmem_freeable_pages() )
>> goto try_tmem;
>>
>> + again:
> Is there any hope to get away without such an ugly pseudo loop?
> E.g. by making this function a helper function of a relatively thin
> wrapper named alloc_heap_pages(), invoking this helper twice
> unless use_unscrubbed is true (as said, this ought to be an input)?
OK, let me see if I can beautify this.
-boris
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |