[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] x86: fix domain cleanup

>>> Keir Fraser <keir.fraser@xxxxxxxxxxxxx> 28.10.08 10:36 >>>
>On 28/10/08 09:26, "Jan Beulich" <jbeulich@xxxxxxxxxx> wrote:
>> But how would one distinguish the two (or three at present, due to
>I'm not sure. Do they need to be distinguished?

At least the PGT_partial case needs to be, especially if we agree that
leaving a type reference without a page reference pending in that case
is broken. Luckily, that case *is* easily recognizable.

>> Also, where is the
>> matching put_page() for the type refcount decrement in free_page_type()
>> in the circular case (in  free_page_type(A) -> put_page_and_type(B) ->
>> free_page_type(B) -> put_page_and_type(A) we'll have the type refcount
>> decremented twice, but the page refcount just once)? Or is this decrement
>> invalid in that case (I don't think it is, as get_lN_linear_pagetable()
>> increments it along with keeping the page reference it obtained in the
>> success case, but if it is, it again poses the question of how to recognize
>> that case)?
>Ah, looks like it's been broken since the preemptible page_type patch went
>in. Perhaps the tail of free_page_type() should go into __put_page_type(),
>as it's not needed by the call site in relinquish_memory(): the caller
>doesn't really hold a type reference to be dropped; and the logic for being
>preempted doesn't apply since relinquish_memory() requests no preemption.

It doesn't at present, but it should (in favor of 
including the put_page_and_type() earlier in that function. But of course,
it may still turn out that cleaning up after preemption here must be handled
differently from the __put_page_type() case. I'll give moving that part
(and removing the put_page() added yesterday) a try.


Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.