|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] slightly consolidate code in free_domheap_pages()
>>> On 20.06.14 at 15:16, <andrew.cooper3@xxxxxxxxxx> wrote:
> On 20/06/14 13:40, Jan Beulich wrote:
>> ... to combine the three scrubbing paths into a single one.
>>
>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>>
>> --- a/xen/common/page_alloc.c
>> +++ b/xen/common/page_alloc.c
>> @@ -1724,47 +1724,45 @@ void free_domheap_pages(struct page_info
>>
>> spin_unlock_recursive(&d->page_alloc_lock);
>> }
>> - else if ( likely(d != NULL) && likely(d != dom_cow) )
>> + else
>> {
>> - /* NB. May recursively lock from relinquish_memory(). */
>> - spin_lock_recursive(&d->page_alloc_lock);
>> + bool_t scrub;
>>
>> - for ( i = 0; i < (1 << order); i++ )
>> + if ( likely(d) && likely(d != dom_cow) )
>> {
>> - BUG_ON((pg[i].u.inuse.type_info & PGT_count_mask) != 0);
>> - page_list_del2(&pg[i], &d->page_list, &d->arch.relmem_list);
>> - }
>> + /* NB. May recursively lock from relinquish_memory(). */
>> + spin_lock_recursive(&d->page_alloc_lock);
>>
>> - drop_dom_ref = !domain_adjust_tot_pages(d, -(1 << order));
>> -
>> - spin_unlock_recursive(&d->page_alloc_lock);
>> + for ( i = 0; i < (1 << order); i++ )
>> + {
>> + BUG_ON((pg[i].u.inuse.type_info & PGT_count_mask) != 0);
>> + page_list_del2(&pg[i], &d->page_list, &d->arch.relmem_list);
>> + }
>> +
>> + drop_dom_ref = !domain_adjust_tot_pages(d, -(1 << order));
>> +
>> + spin_unlock_recursive(&d->page_alloc_lock);
>> +
>> + /*
>> + * Normally we expect a domain to clear pages before freeing
>> them,
>> + * if it cares about the secrecy of their contents. However,
>> after
>> + * a domain has died we assume responsibility for erasure.
>> + */
>> + scrub = !!d->is_dying;
>
> d->is_dying is technically protected by d->page_alloc_lock, and one
> extra boolean read isn't going to extend the critical region too much.
Right, but this isn't the subject of the patch - the check got moved
from further down (i.e. even farther outside the locked region) up
here. Moving it into the locked region ought to probably be a
separate (potentially backportable) patch. Otoh this is a read, and
we don't really care for races here as is_dying would never get
cleared once it was set.
> Unrelated to the content of the patch, I can't see a codepath where we
> would relinquish domain memory from a clean shutdown without setting
> d->is_dying. Does this mean that we are even scrubbing pages from
> cleanly shut down domains?
Yes, just like the comment says.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |