RE: s390: block/blk-iocost.c:1101:11: error: call to '__compiletime_assert_557' declared with 'error' attribute: clamp() low limit 1 greater than high limit active

From: David Laight
Date: Wed Dec 04 2024 - 12:05:18 EST


From: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> Sent: 04 December 2024 14:39
>
> Let's add David to the Cc list because he's the expert on clamp().

The traceback info misses the important point.
I can't see the 'inlined from line 2225' message.

We have (line 1084):
static void __propagate_weights(struct ioc_gq *iocg, u32 active, u32 inuse,
bool save, struct ioc_now *now)
followed by:
inuse = clamp_t(u32, inuse, 1, active);

But line 2225 has:
__propagate_weights(iocg, 0, 0, false, now);

With aggressive inlining the compiler sees 'active == 0'
and the lo > hi test correctly triggers.

The previous version only verified 'lo <= hi' if it was a constant
integer expression - which it isn't here.

No idea what the code is trying to do, nor what value it expects
clamp(val, 1, 0) to generate - likely to be 0 or 1 depending on
the order of the comparisons.

David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)