diff mbox series

[v1] mt76: mt7615: Fix build with older compilers

Message ID 20191201181716.61892-1-pgreco@centosproject.org (mailing list archive)
State Accepted
Delegated to: Felix Fietkau
Headers show
Series [v1] mt76: mt7615: Fix build with older compilers | expand

Commit Message

Pablo Sebastián Greco Dec. 1, 2019, 6:17 p.m. UTC
Some compilers (tested with 4.8.5 from CentOS 7) fail properly process
FIELD_GET inside an inline function, which ends up in a BUILD_BUG_ON.
Convert inline function to a macro.

Fixes commit bf92e7685100 ("mt76: mt7615: add support for per-chain
signal strength reporting")
Reported in https://lkml.org/lkml/2019/9/21/146

Reported-by: kbuild test robot <lkp@intel.com>
Signed-off-by: Pablo Greco <pgreco@centosproject.org>
---
 drivers/net/wireless/mediatek/mt76/mt7615/mac.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

Comments

Sergei Shtylyov Dec. 2, 2019, 9:18 a.m. UTC | #1
Hello!

On 01.12.2019 21:17, Pablo Greco wrote:

> Some compilers (tested with 4.8.5 from CentOS 7) fail properly process

    Fail to?

> FIELD_GET inside an inline function, which ends up in a BUILD_BUG_ON.
> Convert inline function to a macro.
> 
> Fixes commit bf92e7685100 ("mt76: mt7615: add support for per-chain
> signal strength reporting")

    Should be:

Fixes: bf92e7685100 ("mt76: mt7615: add support for per-chain signal strength 
reporting")

    Do not ever break up the Fixes: line and don't insert empty lines between 
it and other tags.

> Reported in https://lkml.org/lkml/2019/9/21/146
> 
> Reported-by: kbuild test robot <lkp@intel.com>
> Signed-off-by: Pablo Greco <pgreco@centosproject.org>
[...]

MBR, Sergei
Kalle Valo Dec. 2, 2019, 9:25 a.m. UTC | #2
Pablo Greco <pgreco@centosproject.org> writes:

> Some compilers (tested with 4.8.5 from CentOS 7) fail properly process
> FIELD_GET inside an inline function, which ends up in a BUILD_BUG_ON.
> Convert inline function to a macro.
>
> Fixes commit bf92e7685100 ("mt76: mt7615: add support for per-chain
> signal strength reporting")
> Reported in https://lkml.org/lkml/2019/9/21/146
>
> Reported-by: kbuild test robot <lkp@intel.com>
> Signed-off-by: Pablo Greco <pgreco@centosproject.org>
> ---
>  drivers/net/wireless/mediatek/mt76/mt7615/mac.c | 5 +----
>  1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
> index c77adc5d2552..77e395ca2c6a 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
> @@ -13,10 +13,7 @@
>  #include "../dma.h"
>  #include "mac.h"
>  
> -static inline s8 to_rssi(u32 field, u32 rxv)
> -{
> -	return (FIELD_GET(field, rxv) - 220) / 2;
> -}
> +#define to_rssi(field, rxv)		((FIELD_GET(field, rxv) - 220) / 2)

What about u32_get_bits() instead of FIELD_GET(), would that work? I
guess chances for that is slim, but it's always a shame to convert a
function to a macro so we should try other methods first.

Or even better if we could fix FIELD_GET() to work with older compilers.
Pablo Sebastián Greco Dec. 2, 2019, 10:30 a.m. UTC | #3
On 2/12/19 06:18, Sergei Shtylyov wrote:
> Hello!
>
> On 01.12.2019 21:17, Pablo Greco wrote:
>
>> Some compilers (tested with 4.8.5 from CentOS 7) fail properly process
>
>    Fail to?
Right
>
>> FIELD_GET inside an inline function, which ends up in a BUILD_BUG_ON.
>> Convert inline function to a macro.
>>
>> Fixes commit bf92e7685100 ("mt76: mt7615: add support for per-chain
>> signal strength reporting")
>
>    Should be:
>
> Fixes: bf92e7685100 ("mt76: mt7615: add support for per-chain signal 
> strength reporting")
>
>    Do not ever break up the Fixes: line and don't insert empty lines 
> between it and other tags.
Ack, I'll fix those for v2
>
>> Reported in https://lkml.org/lkml/2019/9/21/146
>>
>> Reported-by: kbuild test robot <lkp@intel.com>
>> Signed-off-by: Pablo Greco <pgreco@centosproject.org>
> [...]
>
> MBR, Sergei


Thanks, Pablo
Pablo Sebastián Greco Dec. 2, 2019, 10:42 a.m. UTC | #4
On 2/12/19 06:25, Kalle Valo wrote:
> Pablo Greco <pgreco@centosproject.org> writes:
>
>> Some compilers (tested with 4.8.5 from CentOS 7) fail properly process
>> FIELD_GET inside an inline function, which ends up in a BUILD_BUG_ON.
>> Convert inline function to a macro.
>>
>> Fixes commit bf92e7685100 ("mt76: mt7615: add support for per-chain
>> signal strength reporting")
>> Reported in https://lkml.org/lkml/2019/9/21/146
>>
>> Reported-by: kbuild test robot <lkp@intel.com>
>> Signed-off-by: Pablo Greco <pgreco@centosproject.org>
>> ---
>>   drivers/net/wireless/mediatek/mt76/mt7615/mac.c | 5 +----
>>   1 file changed, 1 insertion(+), 4 deletions(-)
>>
>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
>> index c77adc5d2552..77e395ca2c6a 100644
>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
>> @@ -13,10 +13,7 @@
>>   #include "../dma.h"
>>   #include "mac.h"
>>   
>> -static inline s8 to_rssi(u32 field, u32 rxv)
>> -{
>> -	return (FIELD_GET(field, rxv) - 220) / 2;
>> -}
>> +#define to_rssi(field, rxv)		((FIELD_GET(field, rxv) - 220) / 2)
> What about u32_get_bits() instead of FIELD_GET(), would that work? I
> guess chances for that is slim, but it's always a shame to convert a
> function to a macro so we should try other methods first.
Anything that doesn't check field at build time should work, but between 
losing a check, or turning an inline into a macro, I'd rather use the macro.
> Or even better if we could fix FIELD_GET() to work with older compilers.
>
The problem is not FIELD_GET itself, is that the compiler is trying to 
use "field" as a variable, instead as the macro expansion of GENMASK, as 
if the function wasn't inline.
In the linked page you can see this message

BUILD_BUG_ON failed: (((field) + (1ULL << (__builtin_ffsll(field) - 1))) 
& (((field) + (1ULL << (__builtin_ffsll(field) - 1))) - 1)) != 0
      _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)

which is is not right, because "field" should never be used for that check.



Pablo.
diff mbox series

Patch

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
index c77adc5d2552..77e395ca2c6a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
@@ -13,10 +13,7 @@ 
 #include "../dma.h"
 #include "mac.h"
 
-static inline s8 to_rssi(u32 field, u32 rxv)
-{
-	return (FIELD_GET(field, rxv) - 220) / 2;
-}
+#define to_rssi(field, rxv)		((FIELD_GET(field, rxv) - 220) / 2)
 
 static struct mt76_wcid *mt7615_rx_get_wcid(struct mt7615_dev *dev,
 					    u8 idx, bool unicast)