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

Re: [Xen-ia64-devel] [Patch] Fix for re-enabling PV-on-HVM on IPF



You (yamahata) said:
>>>> +
>>>>              guest_physmap_remove_page(d, gpfn, mfn);
>>>> +
>>>> +            /* post-set PGC_allocated flag */
>>>> +            do {
>>>> +                x = mfn_to_page(mfn)->count_info;
>>>> +                if ((x & PGC_count_mask) == 0)
>>>> +                    goto out;
>>>> +                nx = x | PGC_allocated;
>>>> +            } while (cmpxchg_acq(&mfn_to_page(mfn)->count_info, x, nx)
>>>>  != x);
>>>> +        }
>>> 
>>> checking == 0 is non-sense because we incremented it.
>>> Probably you want to 
>>>    if (!test_and_set_bit(page->count_info, _PGC_allocated)) {
>>>     put_page(page);
>>>     goto out;
>>>    }
>> 
>>   guest_physmap_remove_page() unsets PGC_allocated flag, thus
>> this test_and_set_bit() returns zero allways, I think.
> 
> Sorry, I was somewhat confused.
> Probably it should looks like the following.
> if (page->count_info != 1) { /* no one but us is using this page */
>       put_page(page);
>       goto out;
> }
> __set_bit(&page->count_info, _PGC_allocated);

  Does `page->count_info' have to be operated with atomic ?

>>   In this code, I assumed that hypervisor might be destructing the
>> domain. In this case, the page counter might be zero.
> 
> Such case doesn't occur because we called get_page().
> It is the reason that the page reference counter exists for, isn't it?

  I understand it.

Thanks,
- Tsunehisa Doi

_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel


 


Rackspace

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