diff mbox series

scsi: ufs: Fix the build for gcc 9 and before

Message ID 20230801201337.1007617-1-bvanassche@acm.org
State New
Headers show
Series scsi: ufs: Fix the build for gcc 9 and before | expand

Commit Message

Bart Van Assche Aug. 1, 2023, 8:13 p.m. UTC
gcc compilers before version 10 cannot do constant-folding for sub-byte
bitfields. This makes the compiler layout tests fail. Hence skip the
layout checks for gcc 9 and before.

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Naresh Kamboju <naresh.kamboju@linaro.org>
Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org>
Suggested-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/ufs/core/ufshcd.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Bart Van Assche Aug. 1, 2023, 11:23 p.m. UTC | #1
On 8/1/23 14:52, Nathan Chancellor wrote:
> On Tue, Aug 01, 2023 at 01:13:23PM -0700, Bart Van Assche wrote:
>>   static void ufshcd_check_header_layout(void)
>>   {
>> +#if defined(__GNUC__) && __GNUC__ -0 < 10
> 
> clang defines __GNUC__ and it does not sound like it is impacted by this
> issue? I just built with LLVM 11 through 17 and did not see it. Can this
> be made more specific?
> 
> Also, can we use IS_ENABLED() and not rely on the preprocessor? This
> appears to work for me.
> 
>      if (IS_ENABLED(CONFIG_CC_IS_GCC) && CONFIG_GCC_VERSION < 100000)
>          return;

Thanks for the feedback. A new version of this patch has been posted.

Bart.
diff mbox series

Patch

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 23335aaa6a66..875c860bcc05 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -10564,6 +10564,15 @@  static const struct dev_pm_ops ufshcd_wl_pm_ops = {
 
 static void ufshcd_check_header_layout(void)
 {
+#if defined(__GNUC__) && __GNUC__ -0 < 10
+	/*
+	 * gcc compilers before version 10 cannot do constant-folding for
+	 * sub-byte bitfields. Hence skip the layout checks for gcc 9 and
+	 * before.
+	 */
+	return;
+#endif
+
 	BUILD_BUG_ON(((u8 *)&(struct request_desc_header){
 				.cci = 3})[0] != 3);