|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH MM-PART3 v2 10/12] xen/arm: mm: Rework Xen page-tables walk during update
Hi Stefano,
On 13/06/2019 18:59, Stefano Stabellini wrote:
> On Thu, 13 Jun 2019, Julien Grall wrote: >>>> + * Return values:
>>>> + * XEN_TABLE_MAP_FAILED: Either read_only was set and the entry
>>>> + * was empty, or allocating a new page failed.
>>>> + * XEN_TABLE_NORMAL_PAGE: next level mapped normally
>>>> + * XEN_TABLE_SUPER_PAGE: The next entry points to a superpage.
>>>> + */
>>>> +static int xen_pt_next_level(bool read_only, unsigned int level,
>>>> + lpae_t **table, unsigned int offset)
>>>> +{
>>>> + lpae_t *entry;
>>>> + int ret;
>>>> +
>>>> + entry = *table + offset;
>>>> +
>>>> + if ( !lpae_is_valid(*entry) )
>>>> + {
>>>> + if ( read_only )
>>>> + return XEN_TABLE_MAP_FAILED;
>>>> +
>>>> + ret = create_xen_table(entry);
>>>> + if ( ret )
>>>> + return XEN_TABLE_MAP_FAILED;
>>>> + }
>>>> +
>>>> + ASSERT(lpae_is_valid(*entry));
>>>
>>> Why the ASSERT just after the lpae_is_valid check above?
>>
>> When the entry is invalid, the new page table will be allocated and the entry
>> will be generated. The rest of the function will then be executed. The
>> ASSERT() here confirms the entry we have in hand is valid in all the cases.
>
> So it's to double-check that after getting into the `if' statement, the
> entry becomes valid, which is kind of redundant due to the two errors
> check above but it is still valid. OK.
While I agree that we have 2 ifs above, we only check "rc" and not "entry".
I ought to think I wrote perfect code, sadly this is not always the case ;).
Here, it would catch any mistake if "rc" is zero but "entry" is still
invalid. The risk here is the "entry" would be invalid but the mistake
may be spotted a long time after (i.e any access to the mapping will
fault). This would potentially cost a lot of debug.
I agree this is probably over cautious, I can't remember if I hit the
problem before. Anyway, I am happy to drop the ASSERT() if you think it
is too redundant.
Regardless that, are you happy with the rest of the patch? If so, can I
get your acked-by/reviewed-by?
Cheers,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |