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

Re: [PATCH v2] xen/arm: gnttab: cast unused macro arguments to void



Hi Julien,

On 03.05.2022 19:44, Julien Grall wrote:
> Hi,
> 
> On 28/04/2022 10:46, Michal Orzel wrote:
>> Function unmap_common_complete (common/grant_table.c) defines and sets
>> a variable ld that is later on passed to a macro:
>> gnttab_host_mapping_get_page_type().
>> On Arm this macro does not make use of any arguments causing a compiler
>> to warn about unused-but-set variable (when -Wunused-but-set-variable
>> is enabled). Fix it by casting the arguments to void in macro's body.
>>
>> While there, take the opportunity to modify other macros in this file
>> that do not make use of all the arguments to prevent similar issues in
>> the future.
>>
>> Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
>> ---
>> Changes since v1:
>> -standalone patch carved out from a series (other patches already merged)
>> -v1 was ([3/8] gnttab: Remove unused-but-set variable)
>> -modify macro on Arm instead of removing ld variable
>> ---
>>   xen/arch/arm/include/asm/grant_table.h | 13 ++++++++-----
>>   1 file changed, 8 insertions(+), 5 deletions(-)
>>
>> diff --git a/xen/arch/arm/include/asm/grant_table.h 
>> b/xen/arch/arm/include/asm/grant_table.h
>> index d31a4d6805..5bcd1ec528 100644
>> --- a/xen/arch/arm/include/asm/grant_table.h
>> +++ b/xen/arch/arm/include/asm/grant_table.h
>> @@ -31,10 +31,11 @@ static inline void gnttab_mark_dirty(struct domain *d, 
>> mfn_t mfn)
>>     int create_grant_host_mapping(unsigned long gpaddr, mfn_t mfn,
>>                                 unsigned int flags, unsigned int 
>> cache_flags);
>> -#define gnttab_host_mapping_get_page_type(ro, ld, rd) (0)
>> +#define gnttab_host_mapping_get_page_type(ro, ld, rd) \
>> +    ((void)(ro), (void)(ld), (void)(rd), 0)
> 
> I would switch to a static inline helper:
> 
> static inline bool
> gnttab_host_mapping_get_page_type(bool ro, struct domain *ld,
>                       struct domian *rd)
> {
>     return false;
> }
> 
> Note the switch from 0 to false as the function is technically returning a 
> boolean (see the x86 implementation).
> 
>>   int replace_grant_host_mapping(unsigned long gpaddr, mfn_t mfn,
>>                                  unsigned long new_gpaddr, unsigned int 
>> flags);
>> -#define gnttab_release_host_mappings(domain) 1
>> +#define gnttab_release_host_mappings(domain) ((void)(domain), 1)
> 
> Same here.
> 
Ok, sounds right.

>>     /*
>>    * The region used by Xen on the memory will never be mapped in DOM0
>> @@ -89,10 +90,12 @@ int replace_grant_host_mapping(unsigned long gpaddr, 
>> mfn_t mfn,
>>   })
>>     #define gnttab_shared_gfn(d, t, i)                                       
>> \
>> -    (((i) >= nr_grant_frames(t)) ? INVALID_GFN : (t)->arch.shared_gfn[i])
>> +    ((void)(d),                                                          \
>> +     ((i) >= nr_grant_frames(t)) ? INVALID_GFN : (t)->arch.shared_gfn[i])
>>   -#define gnttab_status_gfn(d, t, i)                                       \
>> -    (((i) >= nr_status_frames(t)) ? INVALID_GFN : (t)->arch.status_gfn[i])
>> +#define gnttab_status_gfn(d, t, i)                                        \
>> +    ((void)(d),                                                           \
>> +     ((i) >= nr_status_frames(t)) ? INVALID_GFN : (t)->arch.status_gfn[i])
> 
> I share Jan's opinion here. If we want to evaluate d, then we should make 
> sure t and i should be also evaluated once. However, IIRC, they can't be 
> turned to static inline because the type of t (struct grant_table) is not 
> fully defined yet.
> 
Then, we could do like this:

#define gnttab_shared_gfn(d, t, i)                                       \
    ({                                                                   \
        const unsigned int _i = (i);                                     \
        const struct grant_table *_t = (t);                              \
        (void)(d);                                                       \
        (_i >= nr_grant_frames(_t)) ? INVALID_GFN                        \
                                    : _t->arch.shared_gfn[_i];           \
    })

However, if we start modifying the macros to evaluate args only once, shouldn't 
we also take care of the following macros in this file?:
gnttab_set_frame_gfn
gnttab_init_arch

I'm ok to do these changes but I'm afriad we are losing the origin of this 
patch as we are focusing on macros not related to the issue.

> Cheers
> 

Cheers,
Michal



 


Rackspace

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