|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 6/9] x86/shadow: re-work 4-level SHADOW_FOREACH_L2E()
On 17.01.2023 19:48, Andrew Cooper wrote:
> On 11/01/2023 1:54 pm, Jan Beulich wrote:
>> First of all move the almost loop-invariant condition out of the loop;
>> transform it into an altered loop boundary. Since the new local variable
>> wants to be "unsigned int" and named without violating name space rules,
>> convert the loop induction variable accordingly.
>
> I'm firmly -1 against using trailing underscores.
Well, I can undo that aspect, but just to get done with the change. I do
consider ...
> Mainly, I object to the attempt to justify doing so based on a rule we
> explicitly choose to violate for code consistency and legibility reasons.
... your view here at least questionable: I'm unaware of us doing so
explicitly, and I've pointed out numerous times that the C standard
specifies very clearly what underscore-prefixed names may be used for.
> But in this case, you're taking a block of logic which was cleanly in
> one style, and making it mixed, even amongst only the local variables.
That's simply the result of wanting to limit how much of a change I
make to the macro, such that the actual changes are easier to spot.
>> --- a/xen/arch/x86/mm/shadow/multi.c
>> +++ b/xen/arch/x86/mm/shadow/multi.c
>> @@ -863,23 +863,20 @@ do {
>> /* 64-bit l2: touch all entries except for PAE compat guests. */
>> #define SHADOW_FOREACH_L2E(_sl2mfn, _sl2e, _gl2p, _done, _dom, _code)
>> \
>> do {
>> \
>> - int _i;
>> \
>> - int _xen = !shadow_mode_external(_dom);
>> \
>> + unsigned int i_, end_ = SHADOW_L2_PAGETABLE_ENTRIES;
>> \
>> shadow_l2e_t *_sp = map_domain_page((_sl2mfn));
>> \
>> ASSERT_VALID_L2(mfn_to_page(_sl2mfn)->u.sh.type);
>> \
>> - for ( _i = 0; _i < SHADOW_L2_PAGETABLE_ENTRIES; _i++ )
>> \
>> + if ( !shadow_mode_external(_dom) &&
>> \
>> + is_pv_32bit_domain(_dom) &&
>> \
>
> The second clause here implies the first. Given that all we're trying
> to say here is "are there Xen entries to skip", I think we'd be fine
> dropping the external() check entirely.
Will do. I may retain this in some form of comment.
>> + mfn_to_page(_sl2mfn)->u.sh.type != SH_type_l2_64_shadow )
>> \
>> + end_ = COMPAT_L2_PAGETABLE_FIRST_XEN_SLOT(_dom);
>> \
>> + for ( i_ = 0; i_ < end_; ++i_ )
>> \
>> {
>> \
>> - if ( (!(_xen))
>> \
>> - || !is_pv_32bit_domain(_dom)
>> \
>> - || mfn_to_page(_sl2mfn)->u.sh.type == SH_type_l2_64_shadow
>> \
>> - || (_i < COMPAT_L2_PAGETABLE_FIRST_XEN_SLOT(_dom)) )
>> \
>> - {
>> \
>> - (_sl2e) = _sp + _i;
>> \
>> - if ( shadow_l2e_get_flags(*(_sl2e)) & _PAGE_PRESENT )
>> \
>> - {_code}
>> \
>> - if ( _done ) break;
>> \
>> - increment_ptr_to_guest_entry(_gl2p);
>> \
>> - }
>> \
>> + (_sl2e) = _sp + i_;
>> \
>> + if ( shadow_l2e_get_flags(*(_sl2e)) & _PAGE_PRESENT )
>> \
>> + { _code }
>> \
>
> This doesn't match either of our two styles.
Indeed, and I was unable to come up with good criteria whether to leave
it (for consistency with the other macros) or change it. Since you're
...
> if ( ... )
> { _code }
>
> would be closer to Xen's normal style, but ...
>
>> + if ( _done ) break;
>> \
>
> ... with this too, I think it would still be better to write it out
> fully, so:
>
> if ( ... )
> {
> _code
> }
> if ( _done )
> break;
>
> These macros are already big enough that trying to save 3 lines seems
> futile.
... explicitly asking for it, I'll change then. Would you mind if I then
also added a semicolon after _code, to make things look more sensible?
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |