2021-03-30 23:05:08

by Jian Cai

[permalink] [raw]
Subject: [PATCH] blk-mq: fix alignment mismatch.

This fixes the mismatch of alignments between csd and its use as an
argument to smp_call_function_single_async, which causes build failure
when -Walign-mismatch in Clang is used.

Link:
http://crrev.com/c/1193732

Suggested-by: Guenter Roeck <[email protected]>
Signed-off-by: Jian Cai <[email protected]>
---
include/linux/blkdev.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index bc6bc8383b43..3b92330d95ad 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -231,7 +231,7 @@ struct request {
unsigned long deadline;

union {
- struct __call_single_data csd;
+ call_single_data_t csd;
u64 fifo_time;
};

--
2.31.0.291.g576ba9dcdaf-goog


2021-03-30 23:17:18

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] blk-mq: fix alignment mismatch.

On Tue, Mar 30, 2021 at 04:02:49PM -0700, Jian Cai wrote:
> This fixes the mismatch of alignments between csd and its use as an
> argument to smp_call_function_single_async, which causes build failure
> when -Walign-mismatch in Clang is used.
>
> Link:
> http://crrev.com/c/1193732

That link does not work. You probably meant
http://crbug.com/1193732

You'll probably want drop the link and to copy the relevant information
directly into the patch description. Generate the error with an upstream
kernel and cut-and-paste the output here.

For others, the observed error message is:

block/blk-mq.c:622:44: error: passing 8-byte aligned argument to 32-byte
aligned parameter 2 of 'smp_call_function_single_async' may result
in an unaligned pointer access [-Werror,-Walign-mismatch]

Thanks,
Guenter

>
> Suggested-by: Guenter Roeck <[email protected]>
> Signed-off-by: Jian Cai <[email protected]>
> ---
> include/linux/blkdev.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> index bc6bc8383b43..3b92330d95ad 100644
> --- a/include/linux/blkdev.h
> +++ b/include/linux/blkdev.h
> @@ -231,7 +231,7 @@ struct request {
> unsigned long deadline;
>
> union {
> - struct __call_single_data csd;
> + call_single_data_t csd;
> u64 fifo_time;
> };
>
> --
> 2.31.0.291.g576ba9dcdaf-goog
>

2021-03-30 23:36:08

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH] blk-mq: fix alignment mismatch.

Hi Jian,

On Tue, Mar 30, 2021 at 04:02:49PM -0700, Jian Cai wrote:
> This fixes the mismatch of alignments between csd and its use as an
> argument to smp_call_function_single_async, which causes build failure
> when -Walign-mismatch in Clang is used.
>
> Link:
> http://crrev.com/c/1193732
>
> Suggested-by: Guenter Roeck <[email protected]>
> Signed-off-by: Jian Cai <[email protected]>

Thanks for the patch. This is effectively a revert of commit
4ccafe032005 ("block: unalign call_single_data in struct request"),
which I had brought up in this thread:

https://lore.kernel.org/r/[email protected]/

This is obviously a correct fix, I am not just sure what the impact to
'struct request' will be.

Cheers,
Nathan

> ---
> include/linux/blkdev.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> index bc6bc8383b43..3b92330d95ad 100644
> --- a/include/linux/blkdev.h
> +++ b/include/linux/blkdev.h
> @@ -231,7 +231,7 @@ struct request {
> unsigned long deadline;
>
> union {
> - struct __call_single_data csd;
> + call_single_data_t csd;
> u64 fifo_time;
> };
>
> --
> 2.31.0.291.g576ba9dcdaf-goog
>

2021-03-31 00:28:13

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] blk-mq: fix alignment mismatch.

On 3/30/21 4:29 PM, Nathan Chancellor wrote:
> Hi Jian,
>
> On Tue, Mar 30, 2021 at 04:02:49PM -0700, Jian Cai wrote:
>> This fixes the mismatch of alignments between csd and its use as an
>> argument to smp_call_function_single_async, which causes build failure
>> when -Walign-mismatch in Clang is used.
>>
>> Link:
>> http://crrev.com/c/1193732
>>
>> Suggested-by: Guenter Roeck <[email protected]>
>> Signed-off-by: Jian Cai <[email protected]>
>
> Thanks for the patch. This is effectively a revert of commit
> 4ccafe032005 ("block: unalign call_single_data in struct request"),
> which I had brought up in this thread:
>
> https://lore.kernel.org/r/[email protected]/
>
> This is obviously a correct fix, I am not just sure what the impact to
> 'struct request' will be.
>

As commit 4ccafe032005 states, it increases the request structure size.
Given the exchange referenced above, I think we'll need to disable
the warning in the block code.

Thanks,
Guenter

> Cheers,
> Nathan
>
>> ---
>> include/linux/blkdev.h | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
>> index bc6bc8383b43..3b92330d95ad 100644
>> --- a/include/linux/blkdev.h
>> +++ b/include/linux/blkdev.h
>> @@ -231,7 +231,7 @@ struct request {
>> unsigned long deadline;
>>
>> union {
>> - struct __call_single_data csd;
>> + call_single_data_t csd;
>> u64 fifo_time;
>> };
>>
>> --
>> 2.31.0.291.g576ba9dcdaf-goog
>>

2021-03-31 01:33:43

by Jian Cai

[permalink] [raw]
Subject: Re: [PATCH] blk-mq: fix alignment mismatch.

Thanks for all the information. I'll check for similar instances and
send an updated version.


On Tue, Mar 30, 2021 at 5:26 PM Guenter Roeck <[email protected]> wrote:
>
> On 3/30/21 4:29 PM, Nathan Chancellor wrote:
> > Hi Jian,
> >
> > On Tue, Mar 30, 2021 at 04:02:49PM -0700, Jian Cai wrote:
> >> This fixes the mismatch of alignments between csd and its use as an
> >> argument to smp_call_function_single_async, which causes build failure
> >> when -Walign-mismatch in Clang is used.
> >>
> >> Link:
> >> http://crrev.com/c/1193732
> >>
> >> Suggested-by: Guenter Roeck <[email protected]>
> >> Signed-off-by: Jian Cai <[email protected]>
> >
> > Thanks for the patch. This is effectively a revert of commit
> > 4ccafe032005 ("block: unalign call_single_data in struct request"),
> > which I had brought up in this thread:
> >
> > https://lore.kernel.org/r/[email protected]/
> >
> > This is obviously a correct fix, I am not just sure what the impact to
> > 'struct request' will be.
> >
>
> As commit 4ccafe032005 states, it increases the request structure size.
> Given the exchange referenced above, I think we'll need to disable
> the warning in the block code.
>
> Thanks,
> Guenter
>
> > Cheers,
> > Nathan
> >
> >> ---
> >> include/linux/blkdev.h | 2 +-
> >> 1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> >> index bc6bc8383b43..3b92330d95ad 100644
> >> --- a/include/linux/blkdev.h
> >> +++ b/include/linux/blkdev.h
> >> @@ -231,7 +231,7 @@ struct request {
> >> unsigned long deadline;
> >>
> >> union {
> >> - struct __call_single_data csd;
> >> + call_single_data_t csd;
> >> u64 fifo_time;
> >> };
> >>
> >> --
> >> 2.31.0.291.g576ba9dcdaf-goog
> >>
>

2021-03-31 10:40:21

by David Laight

[permalink] [raw]
Subject: RE: [PATCH] blk-mq: fix alignment mismatch.

From: Nathan Chancellor
> Sent: 31 March 2021 00:30
>
> Hi Jian,
>
> On Tue, Mar 30, 2021 at 04:02:49PM -0700, Jian Cai wrote:
> > This fixes the mismatch of alignments between csd and its use as an
> > argument to smp_call_function_single_async, which causes build failure
> > when -Walign-mismatch in Clang is used.
> >
> > Link:
> > http://crrev.com/c/1193732
> >
> > Suggested-by: Guenter Roeck <[email protected]>
> > Signed-off-by: Jian Cai <[email protected]>
>
> Thanks for the patch. This is effectively a revert of commit
> 4ccafe032005 ("block: unalign call_single_data in struct request"),
> which I had brought up in this thread:
>
> https://lore.kernel.org/r/[email protected]/
>
> This is obviously a correct fix, I am not just sure what the impact to
> 'struct request' will be.

If the structure is allocated on-stack then aligning it
requires the compiler generate the rather horrid
'double stack frame' for the function.

Possibly the unaligned 'struct' should be used by all
the code except for a few places where it makes sense
to allocate an aligned item?

David

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

2021-03-31 21:31:00

by Jian Cai

[permalink] [raw]
Subject: Re: [PATCH] blk-mq: fix alignment mismatch.

Hi Nathan,

I just realized you already proposed solutions for skipping the check
in https://lore.kernel.org/linux-block/[email protected]/#t.
Do you have any plans to send them for review?

Thanks,
Jian

On Tue, Mar 30, 2021 at 6:31 PM Jian Cai <[email protected]> wrote:
>
> Thanks for all the information. I'll check for similar instances and
> send an updated version.
>
>
> On Tue, Mar 30, 2021 at 5:26 PM Guenter Roeck <[email protected]> wrote:
> >
> > On 3/30/21 4:29 PM, Nathan Chancellor wrote:
> > > Hi Jian,
> > >
> > > On Tue, Mar 30, 2021 at 04:02:49PM -0700, Jian Cai wrote:
> > >> This fixes the mismatch of alignments between csd and its use as an
> > >> argument to smp_call_function_single_async, which causes build failure
> > >> when -Walign-mismatch in Clang is used.
> > >>
> > >> Link:
> > >> http://crrev.com/c/1193732
> > >>
> > >> Suggested-by: Guenter Roeck <[email protected]>
> > >> Signed-off-by: Jian Cai <[email protected]>
> > >
> > > Thanks for the patch. This is effectively a revert of commit
> > > 4ccafe032005 ("block: unalign call_single_data in struct request"),
> > > which I had brought up in this thread:
> > >
> > > https://lore.kernel.org/r/[email protected]/
> > >
> > > This is obviously a correct fix, I am not just sure what the impact to
> > > 'struct request' will be.
> > >
> >
> > As commit 4ccafe032005 states, it increases the request structure size.
> > Given the exchange referenced above, I think we'll need to disable
> > the warning in the block code.
> >
> > Thanks,
> > Guenter
> >
> > > Cheers,
> > > Nathan
> > >
> > >> ---
> > >> include/linux/blkdev.h | 2 +-
> > >> 1 file changed, 1 insertion(+), 1 deletion(-)
> > >>
> > >> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> > >> index bc6bc8383b43..3b92330d95ad 100644
> > >> --- a/include/linux/blkdev.h
> > >> +++ b/include/linux/blkdev.h
> > >> @@ -231,7 +231,7 @@ struct request {
> > >> unsigned long deadline;
> > >>
> > >> union {
> > >> - struct __call_single_data csd;
> > >> + call_single_data_t csd;
> > >> u64 fifo_time;
> > >> };
> > >>
> > >> --
> > >> 2.31.0.291.g576ba9dcdaf-goog
> > >>
> >

2021-03-31 21:59:37

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH] blk-mq: fix alignment mismatch.

Hi Jian,

On Wed, Mar 31, 2021 at 02:27:03PM -0700, Jian Cai wrote:
> Hi Nathan,
>
> I just realized you already proposed solutions for skipping the check
> in https://lore.kernel.org/linux-block/[email protected]/#t.
> Do you have any plans to send them for review?
>
> Thanks,
> Jian

I was hoping to gather some feedback on which option would be preferred
by Jens and the other ClangBuiltLinux folks before I sent them along. I
can send the first just to see what kind of feedback I can gather.

Cheers,
Nathan

> On Tue, Mar 30, 2021 at 6:31 PM Jian Cai <[email protected]> wrote:
> >
> > Thanks for all the information. I'll check for similar instances and
> > send an updated version.
> >
> >
> > On Tue, Mar 30, 2021 at 5:26 PM Guenter Roeck <[email protected]> wrote:
> > >
> > > On 3/30/21 4:29 PM, Nathan Chancellor wrote:
> > > > Hi Jian,
> > > >
> > > > On Tue, Mar 30, 2021 at 04:02:49PM -0700, Jian Cai wrote:
> > > >> This fixes the mismatch of alignments between csd and its use as an
> > > >> argument to smp_call_function_single_async, which causes build failure
> > > >> when -Walign-mismatch in Clang is used.
> > > >>
> > > >> Link:
> > > >> http://crrev.com/c/1193732
> > > >>
> > > >> Suggested-by: Guenter Roeck <[email protected]>
> > > >> Signed-off-by: Jian Cai <[email protected]>
> > > >
> > > > Thanks for the patch. This is effectively a revert of commit
> > > > 4ccafe032005 ("block: unalign call_single_data in struct request"),
> > > > which I had brought up in this thread:
> > > >
> > > > https://lore.kernel.org/r/[email protected]/
> > > >
> > > > This is obviously a correct fix, I am not just sure what the impact to
> > > > 'struct request' will be.
> > > >
> > >
> > > As commit 4ccafe032005 states, it increases the request structure size.
> > > Given the exchange referenced above, I think we'll need to disable
> > > the warning in the block code.
> > >
> > > Thanks,
> > > Guenter
> > >
> > > > Cheers,
> > > > Nathan
> > > >
> > > >> ---
> > > >> include/linux/blkdev.h | 2 +-
> > > >> 1 file changed, 1 insertion(+), 1 deletion(-)
> > > >>
> > > >> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> > > >> index bc6bc8383b43..3b92330d95ad 100644
> > > >> --- a/include/linux/blkdev.h
> > > >> +++ b/include/linux/blkdev.h
> > > >> @@ -231,7 +231,7 @@ struct request {
> > > >> unsigned long deadline;
> > > >>
> > > >> union {
> > > >> - struct __call_single_data csd;
> > > >> + call_single_data_t csd;
> > > >> u64 fifo_time;
> > > >> };
> > > >>
> > > >> --
> > > >> 2.31.0.291.g576ba9dcdaf-goog
> > > >>
> > >

2021-03-31 22:08:19

by Nick Desaulniers

[permalink] [raw]
Subject: Re: [PATCH] blk-mq: fix alignment mismatch.

On Wed, Mar 31, 2021 at 2:58 PM Nathan Chancellor <[email protected]> wrote:
>
> On Wed, Mar 31, 2021 at 02:27:03PM -0700, Jian Cai wrote:
> >
> > I just realized you already proposed solutions for skipping the check
> > in https://lore.kernel.org/linux-block/[email protected]/#t.
> > Do you have any plans to send them for review?
>
> I was hoping to gather some feedback on which option would be preferred
> by Jens and the other ClangBuiltLinux folks before I sent them along. I
> can send the first just to see what kind of feedback I can gather.

Either approach is fine by me. The smaller might be easier to get
accepted into stable. The larger approach will probably become more
useful in the future (having the diag infra work properly with clang).
I think the ball is kind of in Jens' court to decide. Would doing
both be appropriate, Jens? Have the smaller patch tagged for stable
disabling it for the whole file, then another commit on top not tagged
for stable that adds the diag infra, and a third on top replacing the
file level warning disablement with local diags to isolate this down
to one case? It's a fair but small amount of churn IMO; but if Jens
is not opposed it seems fine?
--
Thanks,
~Nick Desaulniers

2021-04-08 17:59:34

by Jian Cai

[permalink] [raw]
Subject: Re: [PATCH] blk-mq: fix alignment mismatch.

So this issue is blocking the LLVM upgrading on ChromeOS. Nathan, do
you mind sending out the smaller patch like Nick suggested just to see
what feedback we could get? I could send it for you if you are busy,
and please let me know what tags I should use in that case.

Thanks,
Jian

On Wed, Mar 31, 2021 at 3:06 PM Nick Desaulniers
<[email protected]> wrote:
>
> On Wed, Mar 31, 2021 at 2:58 PM Nathan Chancellor <[email protected]> wrote:
> >
> > On Wed, Mar 31, 2021 at 02:27:03PM -0700, Jian Cai wrote:
> > >
> > > I just realized you already proposed solutions for skipping the check
> > > in https://lore.kernel.org/linux-block/[email protected]/#t.
> > > Do you have any plans to send them for review?
> >
> > I was hoping to gather some feedback on which option would be preferred
> > by Jens and the other ClangBuiltLinux folks before I sent them along. I
> > can send the first just to see what kind of feedback I can gather.
>
> Either approach is fine by me. The smaller might be easier to get
> accepted into stable. The larger approach will probably become more
> useful in the future (having the diag infra work properly with clang).
> I think the ball is kind of in Jens' court to decide. Would doing
> both be appropriate, Jens? Have the smaller patch tagged for stable
> disabling it for the whole file, then another commit on top not tagged
> for stable that adds the diag infra, and a third on top replacing the
> file level warning disablement with local diags to isolate this down
> to one case? It's a fair but small amount of churn IMO; but if Jens
> is not opposed it seems fine?
> --
> Thanks,
> ~Nick Desaulniers

2021-04-08 18:44:26

by Jian Cai

[permalink] [raw]
Subject: Re: [PATCH] blk-mq: fix alignment mismatch.

Sounds good! Thanks for the help and the link.

On Thu, Apr 8, 2021 at 11:12 AM Nathan Chancellor <[email protected]> wrote:
>
> Hi Jian,
>
> On Thu, Apr 08, 2021 at 10:57:54AM -0700, Jian Cai wrote:
> > So this issue is blocking the LLVM upgrading on ChromeOS. Nathan, do
> > you mind sending out the smaller patch like Nick suggested just to see
> > what feedback we could get? I could send it for you if you are busy,
> > and please let me know what tags I should use in that case.
> >
> > Thanks,
> > Jian
>
> I will go ahead and send the smaller patch at some point today.
>
> For what it's worth, Nick brought up https://reviews.llvm.org/D100037,
> which may be relevant here.
>
> Cheers,
> Nathan
>
> > On Wed, Mar 31, 2021 at 3:06 PM Nick Desaulniers
> > <[email protected]> wrote:
> > >
> > > On Wed, Mar 31, 2021 at 2:58 PM Nathan Chancellor <[email protected]> wrote:
> > > >
> > > > On Wed, Mar 31, 2021 at 02:27:03PM -0700, Jian Cai wrote:
> > > > >
> > > > > I just realized you already proposed solutions for skipping the check
> > > > > in https://lore.kernel.org/linux-block/[email protected]/#t.
> > > > > Do you have any plans to send them for review?
> > > >
> > > > I was hoping to gather some feedback on which option would be preferred
> > > > by Jens and the other ClangBuiltLinux folks before I sent them along. I
> > > > can send the first just to see what kind of feedback I can gather.
> > >
> > > Either approach is fine by me. The smaller might be easier to get
> > > accepted into stable. The larger approach will probably become more
> > > useful in the future (having the diag infra work properly with clang).
> > > I think the ball is kind of in Jens' court to decide. Would doing
> > > both be appropriate, Jens? Have the smaller patch tagged for stable
> > > disabling it for the whole file, then another commit on top not tagged
> > > for stable that adds the diag infra, and a third on top replacing the
> > > file level warning disablement with local diags to isolate this down
> > > to one case? It's a fair but small amount of churn IMO; but if Jens
> > > is not opposed it seems fine?
> > > --
> > > Thanks,
> > > ~Nick Desaulniers

2021-04-08 19:15:34

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH] blk-mq: fix alignment mismatch.

Hi Jian,

On Thu, Apr 08, 2021 at 10:57:54AM -0700, Jian Cai wrote:
> So this issue is blocking the LLVM upgrading on ChromeOS. Nathan, do
> you mind sending out the smaller patch like Nick suggested just to see
> what feedback we could get? I could send it for you if you are busy,
> and please let me know what tags I should use in that case.
>
> Thanks,
> Jian

I will go ahead and send the smaller patch at some point today.

For what it's worth, Nick brought up https://reviews.llvm.org/D100037,
which may be relevant here.

Cheers,
Nathan

> On Wed, Mar 31, 2021 at 3:06 PM Nick Desaulniers
> <[email protected]> wrote:
> >
> > On Wed, Mar 31, 2021 at 2:58 PM Nathan Chancellor <[email protected]> wrote:
> > >
> > > On Wed, Mar 31, 2021 at 02:27:03PM -0700, Jian Cai wrote:
> > > >
> > > > I just realized you already proposed solutions for skipping the check
> > > > in https://lore.kernel.org/linux-block/[email protected]/#t.
> > > > Do you have any plans to send them for review?
> > >
> > > I was hoping to gather some feedback on which option would be preferred
> > > by Jens and the other ClangBuiltLinux folks before I sent them along. I
> > > can send the first just to see what kind of feedback I can gather.
> >
> > Either approach is fine by me. The smaller might be easier to get
> > accepted into stable. The larger approach will probably become more
> > useful in the future (having the diag infra work properly with clang).
> > I think the ball is kind of in Jens' court to decide. Would doing
> > both be appropriate, Jens? Have the smaller patch tagged for stable
> > disabling it for the whole file, then another commit on top not tagged
> > for stable that adds the diag infra, and a third on top replacing the
> > file level warning disablement with local diags to isolate this down
> > to one case? It's a fair but small amount of churn IMO; but if Jens
> > is not opposed it seems fine?
> > --
> > Thanks,
> > ~Nick Desaulniers

2021-04-08 19:46:53

by Nathan Chancellor

[permalink] [raw]
Subject: [PATCH] block: Disable -Walign-mismatch for blk-mq.c

LLVM 13 adds a new warning, -Walign-mismatch, which has an instance in
blk_mq_complete_send_ipi():

block/blk-mq.c:630:39: warning: passing 8-byte aligned argument to
32-byte aligned parameter 2 of 'smp_call_function_single_async' may
result in an unaligned pointer access [-Walign-mismatch]
smp_call_function_single_async(cpu, &rq->csd);
^
1 warning generated.

This is expected after commit 4ccafe032005 ("block: unalign
call_single_data in struct request"), which purposefully unaligned the
structure to save space. Given that there is no real alignment
requirement and there have been no reports of issues since that change,
it should be safe to disable the warning for this one translation unit.

Link: https://github.com/ClangBuiltLinux/linux/issues/1328
Link: https://lore.kernel.org/r/[email protected]/
Link: https://lore.kernel.org/r/[email protected]/
Signed-off-by: Nathan Chancellor <[email protected]>
---
block/Makefile | 1 +
1 file changed, 1 insertion(+)

diff --git a/block/Makefile b/block/Makefile
index 8d841f5f986f..d69ac0bd8e61 100644
--- a/block/Makefile
+++ b/block/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_BLOCK) := bio.o elevator.o blk-core.o blk-sysfs.o \
blk-mq-sysfs.o blk-mq-cpumap.o blk-mq-sched.o ioctl.o \
genhd.o ioprio.o badblocks.o partitions/ blk-rq-qos.o

+CFLAGS_blk-mq.o := $(call cc-disable-warning, align-mismatch)
obj-$(CONFIG_BOUNCE) += bounce.o
obj-$(CONFIG_BLK_SCSI_REQUEST) += scsi_ioctl.o
obj-$(CONFIG_BLK_DEV_BSG) += bsg.o

base-commit: e49d033bddf5b565044e2abe4241353959bc9120
--
2.31.1.189.g2e36527f23

2021-04-08 19:54:05

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] block: Disable -Walign-mismatch for blk-mq.c

On 4/8/21 12:44 PM, Nathan Chancellor wrote:
> LLVM 13 adds a new warning, -Walign-mismatch, which has an instance in
> blk_mq_complete_send_ipi():
>
> block/blk-mq.c:630:39: warning: passing 8-byte aligned argument to
> 32-byte aligned parameter 2 of 'smp_call_function_single_async' may
> result in an unaligned pointer access [-Walign-mismatch]
> smp_call_function_single_async(cpu, &rq->csd);
> ^
> 1 warning generated.
>
> This is expected after commit 4ccafe032005 ("block: unalign
> call_single_data in struct request"), which purposefully unaligned the
> structure to save space. Given that there is no real alignment
> requirement and there have been no reports of issues since that change,
> it should be safe to disable the warning for this one translation unit.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/1328
> Link: https://lore.kernel.org/r/[email protected]/
> Link: https://lore.kernel.org/r/[email protected]/
> Signed-off-by: Nathan Chancellor <[email protected]>

Reviewed-by: Guenter Roeck <[email protected]>

> ---
> block/Makefile | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/block/Makefile b/block/Makefile
> index 8d841f5f986f..d69ac0bd8e61 100644
> --- a/block/Makefile
> +++ b/block/Makefile
> @@ -10,6 +10,7 @@ obj-$(CONFIG_BLOCK) := bio.o elevator.o blk-core.o blk-sysfs.o \
> blk-mq-sysfs.o blk-mq-cpumap.o blk-mq-sched.o ioctl.o \
> genhd.o ioprio.o badblocks.o partitions/ blk-rq-qos.o
>
> +CFLAGS_blk-mq.o := $(call cc-disable-warning, align-mismatch)
> obj-$(CONFIG_BOUNCE) += bounce.o
> obj-$(CONFIG_BLK_SCSI_REQUEST) += scsi_ioctl.o
> obj-$(CONFIG_BLK_DEV_BSG) += bsg.o
>
> base-commit: e49d033bddf5b565044e2abe4241353959bc9120
>