Re: [PATCH] [26/31] CPA: Fix reference counting when changing already changed pages

Jan Beulich
2008-01-15T12:00:02Z

>>> Andi Kleen <ak@suse.de> 15.01.08 11:04 >>>
>On Tuesday 15 January 2008 10:05:44 Jan Beulich wrote:
>> >+ ref_prot = canon_pgprot(ref_prot);
>> >+ prot = canon_pgprot(prot);
>> >+
>> > if (pgprot_val(prot) != pgprot_val(ref_prot)) {
>> >...
>> > } else if (level == 4) {
>> >...
>> > } else {
>> > /*
>> > * When you're here you either set the same page to PAGE_KERNEL
>>
>> Doesn't this change require modifying the BUG() here into a BUG_ON() so
>> that it doesn't trigger if pgprot_val(prot) == pgprot_val(ref_prot) and
>> level != 4?
>
>I addressed this in the comment
>
>+ /*
>+ * When you're here you either set the same page to PAGE_KERNEL
>+ * two times in a row or the page table reference counting is
>+ * broken again. To catch the later bug for now (sorry)
>+ */
>
>Do you think it's important to handle? The function already has too many
>special cases and setting something several times in a row to PAGE_KERNEL
>is usually a bug in the caller anyways (or a cpa bug)

It definitely is when making ref_prot variable (as discussed in an earlier
reply regarding a different patch), but I think it's even inconsistent given
the possible presence/absence of _PAGE_NX.

Jan