linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv2 0/2] register-field manipulation macros
@ 2016-06-14 11:44 Jakub Kicinski
  2016-06-14 11:44 ` [PATCHv2 1/2] add basic " Jakub Kicinski
  2016-06-14 11:44 ` [PATCHv2 2/2] mt7601u: use linux/bitfield.h Jakub Kicinski
  0 siblings, 2 replies; 6+ messages in thread
From: Jakub Kicinski @ 2016-06-14 11:44 UTC (permalink / raw)
  To: netdev; +Cc: hannes, nbd, linux-kernel, kvalo, linux-wireless, Jakub Kicinski

Hi!

This set moves to a global header file macros which I find
very useful and worth popularising.  The basic problem is
that since C bitfields are not very dependable accessing
subfields of registers becomes slightly inconvenient.
It is nice to have the necessary mask and shift operations
wrapped in a macro.  It is also nice to have that macro
compute the shift amount based on the mask automatically.

My implementation follows what Felix Fietkau has done in
mt76.  Hannes Frederic Sowa suggested more use of standard
Linux/GCC functions.  Since the RFC I've also added a 
compile-time check to validate that the value passed to
setters fits in the mask.

I attempted the use of static inlines instead of macros
but it makes GCC < 6.0 barf at the BUILD_BUG_ON()s.
I also noticed that forcing arguments to be u32 for inlines
makes the compiler use 32bit arithmetic where it could
get away with 64bit before (on 64bit machines, obviously).
That's a potential performance concern but probably not
a very practical one today.  Apart from looking "cleaner"
static inlines would have the advantage that we could #undef
the auxiliary macros at the end of the header.

Please review and advise on improvements.

If accepted I think would be best to push this through
Kalle's tree, since the only existing user is in
drivers/net/wireless/.

v2:
 - change Felix's email address.

Jakub Kicinski (2):
  add basic register-field manipulation macros
  mt7601u: use linux/bitfield.h

 drivers/net/wireless/mediatek/mt7601u/dma.h     |  2 -
 drivers/net/wireless/mediatek/mt7601u/mt7601u.h |  5 +-
 drivers/net/wireless/mediatek/mt7601u/util.h    | 77 -------------------------
 include/linux/bitfield.h                        | 58 +++++++++++++++++++
 include/linux/log2.h                            |  6 ++
 5 files changed, 68 insertions(+), 80 deletions(-)
 delete mode 100644 drivers/net/wireless/mediatek/mt7601u/util.h
 create mode 100644 include/linux/bitfield.h

-- 
1.9.1

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCHv2 1/2] add basic register-field manipulation macros
  2016-06-14 11:44 [PATCHv2 0/2] register-field manipulation macros Jakub Kicinski
@ 2016-06-14 11:44 ` Jakub Kicinski
  2016-06-14 18:53   ` Arend van Spriel
  2016-06-14 11:44 ` [PATCHv2 2/2] mt7601u: use linux/bitfield.h Jakub Kicinski
  1 sibling, 1 reply; 6+ messages in thread
From: Jakub Kicinski @ 2016-06-14 11:44 UTC (permalink / raw)
  To: netdev; +Cc: hannes, nbd, linux-kernel, kvalo, linux-wireless, Jakub Kicinski

C bitfields are problematic and best avoided.  Developers
interacting with hardware registers find themselves searching
for easy-to-use alternatives.  Common approach is to define
structures or sets of macros containing mask and shift pair.
Operations on the register are then performed as follows:

 field = (reg >> shift) & mask;

 reg &= ~(mask << shift);
 reg |= (field & mask) << shift;

Defining shift and mask separately is tedious.  Ivo van Doorn
came up with an idea of computing them at compilation time
based on a single shifted mask (later refined by Felix) which
can be used like this:

 #define X_REG_FIELD 0x000ff000

 field = FIELD_GET(X_REG_FIELD, reg);

 reg &= ~X_REG_FIELD;
 reg |= FIELD_PUT(X_REG_FIELD, field);

FIELD_{GET,PUT} macros take care of finding out what the
appropriate shift is based on compilation time ffs operation.

GENMASK can be used to define registers (which is usually
less error-prone and easier to match with datasheets).

This approach is the most convenient I've seen so to limit code
multiplication let's move the macros to a global header file.

Compared to Felix Fietkau's implementation from mt76 this one
uses standard Linux and GCC functions such as is_power_of_2()
and __builtin_ffsll().

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
---
v2:
 - change Felix's email address.

 include/linux/bitfield.h | 58 ++++++++++++++++++++++++++++++++++++++++++++++++
 include/linux/log2.h     |  6 +++++
 2 files changed, 64 insertions(+)
 create mode 100644 include/linux/bitfield.h

diff --git a/include/linux/bitfield.h b/include/linux/bitfield.h
new file mode 100644
index 000000000000..9560d1877cbc
--- /dev/null
+++ b/include/linux/bitfield.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@nbd.name>
+ * Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _LINUX_BITFIELD_H
+#define _LINUX_BITFIELD_H
+
+#include <asm/types.h>
+#include <linux/bug.h>
+#include <linux/log2.h>
+
+#define _bf_shf(x) (__builtin_ffsll(x) - 1)
+
+#define _BF_FIELD_CHECK(_mask, _val)					\
+	({								\
+		const u64 hi = (_mask) + (1ULL << _bf_shf(_mask));	\
+									\
+		BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
+		BUILD_BUG_ON(__builtin_constant_p(_val) ?		\
+			     ~((_mask) >> _bf_shf(_mask)) & (_val) :	\
+			     0);					\
+	})
+
+#define FIELD_PUT(_mask, _val)					\
+	({							\
+		_BF_FIELD_CHECK(_mask, _val);			\
+		((u32)(_val) << _bf_shf(_mask)) & (_mask);	\
+	})
+
+#define FIELD_GET(_mask, _val)					\
+	({							\
+		_BF_FIELD_CHECK(_mask, 0);			\
+		(u32)(((_val) & (_mask)) >> _bf_shf(_mask));	\
+	})
+
+#define FIELD_PUT64(_mask, _val)				\
+	({							\
+		_BF_FIELD_CHECK(_mask, _val);			\
+		((u64)(_val) << _bf_shf(_mask)) & (_mask);	\
+	})
+
+#define FIELD_GET64(_mask, _val)				\
+	({							\
+		_BF_FIELD_CHECK(_mask, 0);			\
+		(u64)(((_val) & (_mask)) >> _bf_shf(_mask));	\
+	})
+
+#endif
diff --git a/include/linux/log2.h b/include/linux/log2.h
index fd7ff3d91e6a..1b5e1f4da043 100644
--- a/include/linux/log2.h
+++ b/include/linux/log2.h
@@ -54,6 +54,12 @@ bool is_power_of_2(unsigned long n)
 	return (n != 0 && ((n & (n - 1)) == 0));
 }
 
+static inline __attribute__((const))
+bool is_power_of_2_u64(u64 n)
+{
+	return (n != 0 && ((n & (n - 1)) == 0));
+}
+
 /*
  * round up to nearest power of two
  */
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCHv2 2/2] mt7601u: use linux/bitfield.h
  2016-06-14 11:44 [PATCHv2 0/2] register-field manipulation macros Jakub Kicinski
  2016-06-14 11:44 ` [PATCHv2 1/2] add basic " Jakub Kicinski
@ 2016-06-14 11:44 ` Jakub Kicinski
  2016-06-18 22:08   ` kbuild test robot
  1 sibling, 1 reply; 6+ messages in thread
From: Jakub Kicinski @ 2016-06-14 11:44 UTC (permalink / raw)
  To: netdev; +Cc: hannes, nbd, linux-kernel, kvalo, linux-wireless, Jakub Kicinski

Use the newly added linux/bitfield.h.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
---
 drivers/net/wireless/mediatek/mt7601u/dma.h     |  2 -
 drivers/net/wireless/mediatek/mt7601u/mt7601u.h |  5 +-
 drivers/net/wireless/mediatek/mt7601u/util.h    | 77 -------------------------
 3 files changed, 4 insertions(+), 80 deletions(-)
 delete mode 100644 drivers/net/wireless/mediatek/mt7601u/util.h

diff --git a/drivers/net/wireless/mediatek/mt7601u/dma.h b/drivers/net/wireless/mediatek/mt7601u/dma.h
index 978e8a90b87f..166ac71905d2 100644
--- a/drivers/net/wireless/mediatek/mt7601u/dma.h
+++ b/drivers/net/wireless/mediatek/mt7601u/dma.h
@@ -18,8 +18,6 @@
 #include <asm/unaligned.h>
 #include <linux/skbuff.h>
 
-#include "util.h"
-
 #define MT_DMA_HDR_LEN			4
 #define MT_RX_INFO_LEN			4
 #define MT_FCE_INFO_LEN			4
diff --git a/drivers/net/wireless/mediatek/mt7601u/mt7601u.h b/drivers/net/wireless/mediatek/mt7601u/mt7601u.h
index 428bd2f10b7b..5ef62e02ce66 100644
--- a/drivers/net/wireless/mediatek/mt7601u/mt7601u.h
+++ b/drivers/net/wireless/mediatek/mt7601u/mt7601u.h
@@ -15,6 +15,7 @@
 #ifndef MT7601U_H
 #define MT7601U_H
 
+#include <linux/bitfield.h>
 #include <linux/kernel.h>
 #include <linux/device.h>
 #include <linux/mutex.h>
@@ -24,7 +25,6 @@
 #include <linux/debugfs.h>
 
 #include "regs.h"
-#include "util.h"
 
 #define MT_CALIBRATE_INTERVAL		(4 * HZ)
 
@@ -282,6 +282,9 @@ struct mt7601u_rxwi;
 
 extern const struct ieee80211_ops mt7601u_ops;
 
+#define MT76_SET	FIELD_PUT
+#define MT76_GET	FIELD_GET
+
 void mt7601u_init_debugfs(struct mt7601u_dev *dev);
 
 u32 mt7601u_rr(struct mt7601u_dev *dev, u32 offset);
diff --git a/drivers/net/wireless/mediatek/mt7601u/util.h b/drivers/net/wireless/mediatek/mt7601u/util.h
deleted file mode 100644
index b89140bf1210..000000000000
--- a/drivers/net/wireless/mediatek/mt7601u/util.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
- * Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-
-#ifndef __MT76_UTIL_H
-#define __MT76_UTIL_H
-
-/*
- * Power of two check, this will check
- * if the mask that has been given contains and contiguous set of bits.
- * Note that we cannot use the is_power_of_2() function since this
- * check must be done at compile-time.
- */
-#define is_power_of_two(x)	( !((x) & ((x)-1)) )
-#define low_bit_mask(x)		( ((x)-1) & ~(x) )
-#define is_valid_mask(x)	is_power_of_two(1LU + (x) + low_bit_mask(x))
-
-/*
- * Macros to find first set bit in a variable.
- * These macros behave the same as the __ffs() functions but
- * the most important difference that this is done during
- * compile-time rather then run-time.
- */
-#define compile_ffs2(__x) \
-	__builtin_choose_expr(((__x) & 0x1), 0, 1)
-
-#define compile_ffs4(__x) \
-	__builtin_choose_expr(((__x) & 0x3), \
-			      (compile_ffs2((__x))), \
-			      (compile_ffs2((__x) >> 2) + 2))
-
-#define compile_ffs8(__x) \
-	__builtin_choose_expr(((__x) & 0xf), \
-			      (compile_ffs4((__x))), \
-			      (compile_ffs4((__x) >> 4) + 4))
-
-#define compile_ffs16(__x) \
-	__builtin_choose_expr(((__x) & 0xff), \
-			      (compile_ffs8((__x))), \
-			      (compile_ffs8((__x) >> 8) + 8))
-
-#define compile_ffs32(__x) \
-	__builtin_choose_expr(((__x) & 0xffff), \
-			      (compile_ffs16((__x))), \
-			      (compile_ffs16((__x) >> 16) + 16))
-
-/*
- * This macro will check the requirements for the FIELD{8,16,32} macros
- * The mask should be a constant non-zero contiguous set of bits which
- * does not exceed the given typelimit.
- */
-#define FIELD_CHECK(__mask) \
-	BUILD_BUG_ON(!(__mask) || !is_valid_mask(__mask))
-
-#define MT76_SET(_mask, _val)						\
-	({								\
-		FIELD_CHECK(_mask);					\
-		(((u32) (_val)) << compile_ffs32(_mask)) & _mask;	\
-	})
-
-#define MT76_GET(_mask, _val)						\
-	({								\
-		FIELD_CHECK(_mask);					\
-		(u32) (((_val) & _mask) >> compile_ffs32(_mask));	\
-	})
-
-#endif
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCHv2 1/2] add basic register-field manipulation macros
  2016-06-14 11:44 ` [PATCHv2 1/2] add basic " Jakub Kicinski
@ 2016-06-14 18:53   ` Arend van Spriel
  2016-06-14 19:18     ` Jakub Kicinski
  0 siblings, 1 reply; 6+ messages in thread
From: Arend van Spriel @ 2016-06-14 18:53 UTC (permalink / raw)
  To: Jakub Kicinski, netdev; +Cc: hannes, nbd, linux-kernel, kvalo, linux-wireless

On 14-06-16 13:44, Jakub Kicinski wrote:
> C bitfields are problematic and best avoided.  Developers
> interacting with hardware registers find themselves searching
> for easy-to-use alternatives.  Common approach is to define
> structures or sets of macros containing mask and shift pair.
> Operations on the register are then performed as follows:

[...]

> Compared to Felix Fietkau's implementation from mt76 this one
> uses standard Linux and GCC functions such as is_power_of_2()
> and __builtin_ffsll().
> 
> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
> ---
> v2:
>  - change Felix's email address.
> 
>  include/linux/bitfield.h | 58 ++++++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/log2.h     |  6 +++++
>  2 files changed, 64 insertions(+)
>  create mode 100644 include/linux/bitfield.h
> 
> diff --git a/include/linux/bitfield.h b/include/linux/bitfield.h
> new file mode 100644
> index 000000000000..9560d1877cbc
> --- /dev/null
> +++ b/include/linux/bitfield.h
> @@ -0,0 +1,58 @@
> +/*
> + * Copyright (C) 2014 Felix Fietkau <nbd@nbd.name>
> + * Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2
> + * as published by the Free Software Foundation
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#ifndef _LINUX_BITFIELD_H
> +#define _LINUX_BITFIELD_H
> +
> +#include <asm/types.h>
> +#include <linux/bug.h>
> +#include <linux/log2.h>
> +
> +#define _bf_shf(x) (__builtin_ffsll(x) - 1)
> +
> +#define _BF_FIELD_CHECK(_mask, _val)					\
> +	({								\
> +		const u64 hi = (_mask) + (1ULL << _bf_shf(_mask));	\
> +									\
> +		BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
> +		BUILD_BUG_ON(__builtin_constant_p(_val) ?		\
> +			     ~((_mask) >> _bf_shf(_mask)) & (_val) :	\
> +			     0);					\
> +	})

I am sceptic whether it is useful to have 64-bit used here and there is
a price to pay on (many) 32-bit architectures for using 64-bit
operations. Maybe it is not an issue because it is inside BUILD_BUG_ON()
macro.

> +#define FIELD_PUT(_mask, _val)					\
> +	({							\
> +		_BF_FIELD_CHECK(_mask, _val);			\
> +		((u32)(_val) << _bf_shf(_mask)) & (_mask);	\
> +	})
> +
> +#define FIELD_GET(_mask, _val)					\
> +	({							\
> +		_BF_FIELD_CHECK(_mask, 0);			\
> +		(u32)(((_val) & (_mask)) >> _bf_shf(_mask));	\
> +	})
> +
> +#define FIELD_PUT64(_mask, _val)				\
> +	({							\
> +		_BF_FIELD_CHECK(_mask, _val);			\
> +		((u64)(_val) << _bf_shf(_mask)) & (_mask);	\
> +	})
> +
> +#define FIELD_GET64(_mask, _val)				\
> +	({							\
> +		_BF_FIELD_CHECK(_mask, 0);			\
> +		(u64)(((_val) & (_mask)) >> _bf_shf(_mask));	\
> +	})

Is there really hardware out there that exposes 64-bit wide hardware
registers?

Regards,
Arend

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCHv2 1/2] add basic register-field manipulation macros
  2016-06-14 18:53   ` Arend van Spriel
@ 2016-06-14 19:18     ` Jakub Kicinski
  0 siblings, 0 replies; 6+ messages in thread
From: Jakub Kicinski @ 2016-06-14 19:18 UTC (permalink / raw)
  To: Arend van Spriel; +Cc: netdev, hannes, nbd, linux-kernel, kvalo, linux-wireless

On Tue, 14 Jun 2016 20:53:28 +0200, Arend van Spriel wrote:
> On 14-06-16 13:44, Jakub Kicinski wrote:
> > +#ifndef _LINUX_BITFIELD_H
> > +#define _LINUX_BITFIELD_H
> > +
> > +#include <asm/types.h>
> > +#include <linux/bug.h>
> > +#include <linux/log2.h>
> > +
> > +#define _bf_shf(x) (__builtin_ffsll(x) - 1)
> > +
> > +#define _BF_FIELD_CHECK(_mask, _val)					\
> > +	({								\
> > +		const u64 hi = (_mask) + (1ULL << _bf_shf(_mask));	\
> > +									\
> > +		BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
> > +		BUILD_BUG_ON(__builtin_constant_p(_val) ?		\
> > +			     ~((_mask) >> _bf_shf(_mask)) & (_val) :	\
> > +			     0);					\
> > +	})  
> 
> I am sceptic whether it is useful to have 64-bit used here and there is
> a price to pay on (many) 32-bit architectures for using 64-bit
> operations. Maybe it is not an issue because it is inside BUILD_BUG_ON()
> macro.

It's a trade-off between having a separate set of macros for 32-bit
machines and risking someone potentially loosing cycles when using the
macros in a non-standard way.  Note that all 64 bit operations are
performed on the mask which I expect to be compile time constant.

> > +#define FIELD_PUT(_mask, _val)					\
> > +	({							\
> > +		_BF_FIELD_CHECK(_mask, _val);			\
> > +		((u32)(_val) << _bf_shf(_mask)) & (_mask);	\
> > +	})
> > +
> > +#define FIELD_GET(_mask, _val)					\
> > +	({							\
> > +		_BF_FIELD_CHECK(_mask, 0);			\
> > +		(u32)(((_val) & (_mask)) >> _bf_shf(_mask));	\
> > +	})
> > +
> > +#define FIELD_PUT64(_mask, _val)				\
> > +	({							\
> > +		_BF_FIELD_CHECK(_mask, _val);			\
> > +		((u64)(_val) << _bf_shf(_mask)) & (_mask);	\
> > +	})
> > +
> > +#define FIELD_GET64(_mask, _val)				\
> > +	({							\
> > +		_BF_FIELD_CHECK(_mask, 0);			\
> > +		(u64)(((_val) & (_mask)) >> _bf_shf(_mask));	\
> > +	})  
> 
> Is there really hardware out there that exposes 64-bit wide hardware
> registers?

I need this for encoding 64-bit wide RISC instructions [1] to be honest.

[1] http://thread.gmane.org/gmane.linux.network/414538

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCHv2 2/2] mt7601u: use linux/bitfield.h
  2016-06-14 11:44 ` [PATCHv2 2/2] mt7601u: use linux/bitfield.h Jakub Kicinski
@ 2016-06-18 22:08   ` kbuild test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kbuild test robot @ 2016-06-18 22:08 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: kbuild-all, netdev, hannes, nbd, linux-kernel, kvalo,
	linux-wireless, Jakub Kicinski

[-- Attachment #1: Type: text/plain, Size: 28933 bytes --]

Hi,

[auto build test ERROR on wireless-drivers-next/master]
[also build test ERROR on v4.7-rc3 next-20160617]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Jakub-Kicinski/register-field-manipulation-macros/20160614-195149
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git master
config: x86_64-randconfig-s4-06190511 (attached as .config)
compiler: gcc-6 (Debian 6.1.1-1) 6.1.1 20160430
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

   In file included from include/asm-generic/bug.h:4:0,
                    from arch/x86/include/asm/bug.h:35,
                    from include/linux/bug.h:4,
                    from include/linux/bitfield.h:19,
                    from drivers/net/wireless/mediatek/mt7601u/mt7601u.h:18,
                    from drivers/net/wireless/mediatek/mt7601u/init.c:16:
   In function 'mt7601u_init_usb_dma',
       inlined from 'mt7601u_init_hardware' at drivers/net/wireless/mediatek/mt7601u/init.c:359:2:
>> include/linux/compiler.h:510:38: error: call to '__compiletime_assert_111' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(0x80) ? ~(((((~0UL) << (0)) & (~0UL >> (64 - 1 - (7))))) >> _bf_shf((((~0UL) << (0)) & (~0UL >> (64 - 1 - (7)))))) & (0x80) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:493:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
>> include/linux/bitfield.h:36:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, _val);   \
      ^~~~~~~~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/mt7601u.h:285:18: note: in expansion of macro 'FIELD_PUT'
    #define MT76_SET FIELD_PUT
                     ^~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/init.c:111:8: note: in expansion of macro 'MT76_SET'
     val = MT76_SET(MT_USB_DMA_CFG_RX_BULK_AGG_TOUT, MT_USB_AGGR_TIMEOUT) |
           ^~~~~~~~
   include/linux/compiler.h:510:38: error: call to '__compiletime_assert_112' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(28) ? ~(((((~0UL) << (8)) & (~0UL >> (64 - 1 - (15))))) >> _bf_shf((((~0UL) << (8)) & (~0UL >> (64 - 1 - (15)))))) & (28) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:493:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
>> include/linux/bitfield.h:36:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, _val);   \
      ^~~~~~~~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/mt7601u.h:285:18: note: in expansion of macro 'FIELD_PUT'
    #define MT76_SET FIELD_PUT
                     ^~~~~~~~~
   drivers/net/wireless/mediatek/mt7601u/init.c:112:8: note: in expansion of macro 'MT76_SET'
           MT76_SET(MT_USB_DMA_CFG_RX_BULK_AGG_LMT, MT_USB_AGGR_SIZE_LIMIT) |
           ^~~~~~~~
   drivers/net/wireless/mediatek/mt7601u/init.c: In function 'mt7601u_init_hardware':
   include/linux/compiler.h:510:38: error: call to '__compiletime_assert_399' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(0x3f) ? ~(((((~0UL) << (0)) & (~0UL >> (64 - 1 - (5))))) >> _bf_shf((((~0UL) << (0)) & (~0UL >> (64 - 1 - (5)))))) & (0x3f) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:493:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
>> include/linux/bitfield.h:36:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, _val);   \
      ^~~~~~~~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/mt7601u.h:285:18: note: in expansion of macro 'FIELD_PUT'
    #define MT76_SET FIELD_PUT
                     ^~~~~~~~~
   drivers/net/wireless/mediatek/mt7601u/init.c:399:36: note: in expansion of macro 'MT76_SET'
     mt7601u_wr(dev, MT_TXOP_CTRL_CFG, MT76_SET(MT_TXOP_TRUN_EN, 0x3f) |
                                       ^~~~~~~~
   include/linux/compiler.h:510:38: error: call to '__compiletime_assert_400' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(0x58) ? ~(((((~0UL) << (8)) & (~0UL >> (64 - 1 - (15))))) >> _bf_shf((((~0UL) << (8)) & (~0UL >> (64 - 1 - (15)))))) & (0x58) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:493:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
>> include/linux/bitfield.h:36:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, _val);   \
      ^~~~~~~~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/mt7601u.h:285:18: note: in expansion of macro 'FIELD_PUT'
    #define MT76_SET FIELD_PUT
                     ^~~~~~~~~
   drivers/net/wireless/mediatek/mt7601u/init.c:400:8: note: in expansion of macro 'MT76_SET'
           MT76_SET(MT_TXOP_EXT_CCA_DLY, 0x58));
           ^~~~~~~~
--
   In file included from include/linux/byteorder/little_endian.h:4:0,
                    from arch/x86/include/uapi/asm/byteorder.h:4,
                    from include/asm-generic/bitops/le.h:5,
                    from arch/x86/include/asm/bitops.h:504,
                    from include/linux/bitops.h:36,
                    from include/linux/kernel.h:10,
                    from drivers/net/wireless/mediatek/mt7601u/mcu.c:16:
   drivers/net/wireless/mediatek/mt7601u/mcu.c: In function '__mt7601u_dma_fw':
>> include/linux/compiler.h:510:38: error: call to '__compiletime_assert_294' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(len) ? ~(((((~0UL) << (0)) & (~0UL >> (64 - 1 - (15))))) >> _bf_shf((((~0UL) << (0)) & (~0UL >> (64 - 1 - (15)))))) & (len) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/uapi/linux/byteorder/little_endian.h:32:51: note: in definition of macro '__cpu_to_le32'
    #define __cpu_to_le32(x) ((__force __le32)(__u32)(x))
                                                      ^
>> include/linux/compiler.h:498:2: note: in expansion of macro '__compiletime_assert'
     __compiletime_assert(condition, msg, prefix, suffix)
     ^~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
>> include/linux/bitfield.h:36:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, _val);   \
      ^~~~~~~~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/mt7601u.h:285:18: note: in expansion of macro 'FIELD_PUT'
    #define MT76_SET FIELD_PUT
                     ^~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/mcu.c:294:20: note: in expansion of macro 'MT76_SET'
     reg = cpu_to_le32(MT76_SET(MT_TXD_INFO_TYPE, DMA_PACKET) |
                       ^~~~~~~~
>> include/linux/compiler.h:510:38: error: call to '__compiletime_assert_294' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(len) ? ~(((((~0UL) << (0)) & (~0UL >> (64 - 1 - (15))))) >> _bf_shf((((~0UL) << (0)) & (~0UL >> (64 - 1 - (15)))))) & (len) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/uapi/linux/byteorder/little_endian.h:32:51: note: in definition of macro '__cpu_to_le32'
    #define __cpu_to_le32(x) ((__force __le32)(__u32)(x))
                                                      ^
>> include/linux/compiler.h:498:2: note: in expansion of macro '__compiletime_assert'
     __compiletime_assert(condition, msg, prefix, suffix)
     ^~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
>> include/linux/bitfield.h:36:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, _val);   \
      ^~~~~~~~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/mt7601u.h:285:18: note: in expansion of macro 'FIELD_PUT'
    #define MT76_SET FIELD_PUT
                     ^~~~~~~~~
   drivers/net/wireless/mediatek/mt7601u/mcu.c:295:6: note: in expansion of macro 'MT76_SET'
         MT76_SET(MT_TXD_INFO_D_PORT, CPU_TX_PORT) |
         ^~~~~~~~
>> include/linux/compiler.h:510:38: error: call to '__compiletime_assert_294' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(len) ? ~(((((~0UL) << (0)) & (~0UL >> (64 - 1 - (15))))) >> _bf_shf((((~0UL) << (0)) & (~0UL >> (64 - 1 - (15)))))) & (len) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/uapi/linux/byteorder/little_endian.h:32:51: note: in definition of macro '__cpu_to_le32'
    #define __cpu_to_le32(x) ((__force __le32)(__u32)(x))
                                                      ^
>> include/linux/compiler.h:498:2: note: in expansion of macro '__compiletime_assert'
     __compiletime_assert(condition, msg, prefix, suffix)
     ^~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
>> include/linux/bitfield.h:36:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, _val);   \
      ^~~~~~~~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/mt7601u.h:285:18: note: in expansion of macro 'FIELD_PUT'
    #define MT76_SET FIELD_PUT
                     ^~~~~~~~~
   drivers/net/wireless/mediatek/mt7601u/mcu.c:296:6: note: in expansion of macro 'MT76_SET'
         MT76_SET(MT_TXD_INFO_LEN, len));
         ^~~~~~~~
   In file included from arch/x86/include/asm/bug.h:35:0,
                    from include/linux/bug.h:4,
                    from include/linux/mmdebug.h:4,
                    from include/linux/gfp.h:4,
                    from include/linux/firmware.h:6,
                    from drivers/net/wireless/mediatek/mt7601u/mcu.c:17:
   In function 'mt7601u_dma_skb_wrap_cmd',
       inlined from 'mt7601u_mcu_msg_send' at drivers/net/wireless/mediatek/mt7601u/mcu.c:135:2:
>> include/linux/compiler.h:510:38: error: call to '__compiletime_assert_47' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(cmd) ? ~(((((~0UL) << (20)) & (~0UL >> (64 - 1 - (26))))) >> _bf_shf((((~0UL) << (20)) & (~0UL >> (64 - 1 - (26)))))) & (cmd) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/asm-generic/bug.h:92:25: note: in definition of macro 'WARN_ON'
     int __ret_warn_on = !!(condition);    \
                            ^~~~~~~~~
>> include/linux/compiler.h:498:2: note: in expansion of macro '__compiletime_assert'
     __compiletime_assert(condition, msg, prefix, suffix)
     ^~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
>> include/linux/bitfield.h:36:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, _val);   \
      ^~~~~~~~~~~~~~~
--
   In file included from include/asm-generic/bug.h:4:0,
                    from arch/x86/include/asm/bug.h:35,
                    from include/linux/bug.h:4,
                    from include/linux/bitfield.h:19,
                    from drivers/net/wireless/mediatek/mt7601u/mt7601u.h:18,
                    from drivers/net/wireless/mediatek/mt7601u/dma.c:14:
   In function 'mt7601u_rx_process_seg',
       inlined from 'mt7601u_rx_process_entry' at drivers/net/wireless/mediatek/mt7601u/dma.c:151:3,
       inlined from 'mt7601u_rx_tasklet' at drivers/net/wireless/mediatek/mt7601u/dma.c:219:3:
   include/linux/compiler.h:510:38: error: call to '__compiletime_assert_106' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(0) ? ~(((((~0UL) << (30)) & (~0UL >> (64 - 1 - (31))))) >> _bf_shf((((~0UL) << (30)) & (~0UL >> (64 - 1 - (31)))))) & (0) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:170:42: note: in definition of macro 'unlikely'
    # define unlikely(x) __builtin_expect(!!(x), 0)
                                             ^
>> include/linux/compiler.h:498:2: note: in expansion of macro '__compiletime_assert'
     __compiletime_assert(condition, msg, prefix, suffix)
     ^~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
   include/linux/bitfield.h:42:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, 0);   \
      ^~~~~~~~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/mt7601u.h:286:18: note: in expansion of macro 'FIELD_GET'
    #define MT76_GET FIELD_GET
                     ^~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/dma.c:106:15: note: in expansion of macro 'MT76_GET'
     if (unlikely(MT76_GET(MT_RXD_INFO_TYPE, fce_info)))
                  ^~~~~~~~
   In file included from include/asm-generic/bug.h:4:0,
                    from arch/x86/include/asm/bug.h:35,
                    from include/linux/bug.h:4,
                    from include/linux/bitfield.h:19,
                    from drivers/net/wireless/mediatek/mt7601u/mt7601u.h:18,
                    from drivers/net/wireless/mediatek/mt7601u/dma.c:14:
   In function 'mt7601u_dma_skb_wrap_pkt',
       inlined from 'mt7601u_dma_enqueue_tx' at drivers/net/wireless/mediatek/mt7601u/dma.c:350:6:
>> include/linux/compiler.h:510:38: error: call to '__compiletime_assert_91' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(qsel) ? ~(((((~0UL) << (25)) & (~0UL >> (64 - 1 - (26))))) >> _bf_shf((((~0UL) << (25)) & (~0UL >> (64 - 1 - (26)))))) & (qsel) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:493:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
>> include/linux/bitfield.h:36:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, _val);   \
      ^~~~~~~~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/mt7601u.h:285:18: note: in expansion of macro 'FIELD_PUT'
    #define MT76_SET FIELD_PUT
                     ^~~~~~~~~
   drivers/net/wireless/mediatek/mt7601u/dma.h:91:11: note: in expansion of macro 'MT76_SET'
     flags |= MT76_SET(MT_TXD_PKT_INFO_QSEL, qsel);
              ^~~~~~~~
   In function 'mt7601u_dma_skb_wrap.constprop',
       inlined from 'mt7601u_dma_skb_wrap_pkt' at drivers/net/wireless/mediatek/mt7601u/dma.h:92:9,
       inlined from 'mt7601u_dma_enqueue_tx' at drivers/net/wireless/mediatek/mt7601u/dma.c:350:6:
>> include/linux/compiler.h:510:38: error: call to '__compiletime_assert_80' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(((((skb->len)-1) | ((__typeof__(skb->len))((4)-1)))+1)) ? ~(((((~0UL) << (0)) & (~0UL >> (64 - 1 - (15))))) >> _bf_shf((((~0UL) << (0)) & (~0UL >> (64 - 1 - (15)))))) & (((((skb->len)-1) | ((__typeof__(skb->len))((4)-1)))+1)) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:493:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
>> include/linux/bitfield.h:36:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, _val);   \
      ^~~~~~~~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/mt7601u.h:285:18: note: in expansion of macro 'FIELD_PUT'
    #define MT76_SET FIELD_PUT
                     ^~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/dma.h:80:3: note: in expansion of macro 'MT76_SET'
      MT76_SET(MT_TXD_INFO_LEN, round_up(skb->len, 4)) |
      ^~~~~~~~
>> include/linux/compiler.h:510:38: error: call to '__compiletime_assert_81' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(d_port) ? ~(((((~0UL) << (27)) & (~0UL >> (64 - 1 - (29))))) >> _bf_shf((((~0UL) << (27)) & (~0UL >> (64 - 1 - (29)))))) & (d_port) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:493:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
>> include/linux/bitfield.h:36:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, _val);   \
      ^~~~~~~~~~~~~~~
>> drivers/net/wireless/mediatek/mt7601u/mt7601u.h:285:18: note: in expansion of macro 'FIELD_PUT'
    #define MT76_SET FIELD_PUT
                     ^~~~~~~~~
   drivers/net/wireless/mediatek/mt7601u/dma.h:81:3: note: in expansion of macro 'MT76_SET'
      MT76_SET(MT_TXD_INFO_D_PORT, d_port) |
      ^~~~~~~~
>> include/linux/compiler.h:510:38: error: call to '__compiletime_assert_82' declared with attribute error: BUILD_BUG_ON failed: __builtin_constant_p(type) ? ~(((((~0UL) << (30)) & (~0UL >> (64 - 1 - (31))))) >> _bf_shf((((~0UL) << (30)) & (~0UL >> (64 - 1 - (31)))))) & (type) : 0
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:493:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:510:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/bug.h:51:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/bug.h:75:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
     ^~~~~~~~~~~~~~~~
>> include/linux/bitfield.h:28:3: note: in expansion of macro 'BUILD_BUG_ON'
      BUILD_BUG_ON(!(_mask) || (hi && !is_power_of_2_u64(hi))); \
      ^~~~~~~~~~~~
>> include/linux/bitfield.h:36:3: note: in expansion of macro '_BF_FIELD_CHECK'
      _BF_FIELD_CHECK(_mask, _val);   \
      ^~~~~~~~~~~~~~~
..

vim +/__compiletime_assert_111 +510 include/linux/compiler.h

9a8ab1c3 Daniel Santos  2013-02-21  492  		if (__cond)						\
9a8ab1c3 Daniel Santos  2013-02-21  493  			prefix ## suffix();				\
9a8ab1c3 Daniel Santos  2013-02-21  494  		__compiletime_error_fallback(__cond);			\
9a8ab1c3 Daniel Santos  2013-02-21  495  	} while (0)
9a8ab1c3 Daniel Santos  2013-02-21  496  
9a8ab1c3 Daniel Santos  2013-02-21  497  #define _compiletime_assert(condition, msg, prefix, suffix) \
9a8ab1c3 Daniel Santos  2013-02-21 @498  	__compiletime_assert(condition, msg, prefix, suffix)
9a8ab1c3 Daniel Santos  2013-02-21  499  
9a8ab1c3 Daniel Santos  2013-02-21  500  /**
9a8ab1c3 Daniel Santos  2013-02-21  501   * compiletime_assert - break build and emit msg if condition is false
9a8ab1c3 Daniel Santos  2013-02-21  502   * @condition: a compile-time constant condition to check
9a8ab1c3 Daniel Santos  2013-02-21  503   * @msg:       a message to emit if condition is false
9a8ab1c3 Daniel Santos  2013-02-21  504   *
9a8ab1c3 Daniel Santos  2013-02-21  505   * In tradition of POSIX assert, this macro will break the build if the
9a8ab1c3 Daniel Santos  2013-02-21  506   * supplied condition is *false*, emitting the supplied error message if the
9a8ab1c3 Daniel Santos  2013-02-21  507   * compiler has support to do so.
9a8ab1c3 Daniel Santos  2013-02-21  508   */
9a8ab1c3 Daniel Santos  2013-02-21  509  #define compiletime_assert(condition, msg) \
9a8ab1c3 Daniel Santos  2013-02-21 @510  	_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
9a8ab1c3 Daniel Santos  2013-02-21  511  
47933ad4 Peter Zijlstra 2013-11-06  512  #define compiletime_assert_atomic_type(t)				\
47933ad4 Peter Zijlstra 2013-11-06  513  	compiletime_assert(__native_word(t),				\

:::::: The code at line 510 was first introduced by commit
:::::: 9a8ab1c39970a4938a72d94e6fd13be88a797590 bug.h, compiler.h: introduce compiletime_assert & BUILD_BUG_ON_MSG

:::::: TO: Daniel Santos <daniel.santos@pobox.com>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 34952 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-06-18 22:08 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-14 11:44 [PATCHv2 0/2] register-field manipulation macros Jakub Kicinski
2016-06-14 11:44 ` [PATCHv2 1/2] add basic " Jakub Kicinski
2016-06-14 18:53   ` Arend van Spriel
2016-06-14 19:18     ` Jakub Kicinski
2016-06-14 11:44 ` [PATCHv2 2/2] mt7601u: use linux/bitfield.h Jakub Kicinski
2016-06-18 22:08   ` kbuild test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).