On 01.03.2024 15:37, Juergen Gross wrote:
> On 29.02.24 16:32, Jan Beulich wrote:
>> On 12.12.2023 10:47, Juergen Gross wrote:
>>> +#define nrspin_lock_irqsave(l, f) \
>>> + ({ \
>>> + BUILD_BUG_ON(sizeof(f) != sizeof(unsigned long)); \
>>> + ((f) = __nrspin_lock_irqsave(l)); \
>>
>> I don't think the outer pair of parentheses is needed here.
>
> Turns out it is needed. Otherwise something like:
>
>
> if ( a )
> nrspin_lock_irqsave(l, f);
> else
> ...
>
> will fail with "else without a previous if".
That's for "outer" in the whole #define I suppose, when I commented on
just a specific line inside the construct. The ({ ... }) may better be
avoided here too, for there being no reason to use a compiler
extension when do { ... } while ( false ) would also do. Things would
be different in the construct "returned" the flags value, in a more
function-like manner. But that would be inconsistent with related
similar functions.
Jan