]> git.baikalelectronics.ru Git - kernel.git/commit
smp: Fix smp_call_function_single_async prototype
authorArnd Bergmann <arnd@arndb.de>
Wed, 5 May 2021 21:12:42 +0000 (23:12 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 6 May 2021 13:33:49 +0000 (15:33 +0200)
commit97a872b5a5522f8492ad7a2df8541f4d51ca415e
tree8c78df882fe9a6daac3e0566edb5e1f8bce7fdce
parenta06af6a929075f40ecd7a93229c4ea81eb68dcac
smp: Fix smp_call_function_single_async prototype

As of commit 6b327ac4d75c ("smp: Avoid using two cache lines for struct
call_single_data"), the smp code prefers 32-byte aligned call_single_data
objects for performance reasons, but the block layer includes an instance
of this structure in the main 'struct request' that is more senstive
to size than to performance here, see 3b90626904fa ("block: unalign
call_single_data in struct request").

The result is a violation of the calling conventions that clang correctly
points out:

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);

It does seem that the usage of the call_single_data without cache line
alignment should still be allowed by the smp code, so just change the
function prototype so it accepts both, but leave the default alignment
unchanged for the other users. This seems better to me than adding
a local hack to shut up an otherwise correct warning in the caller.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Jens Axboe <axboe@kernel.dk>
Link: https://lkml.kernel.org/r/20210505211300.3174456-1-arnd@kernel.org
include/linux/smp.h
kernel/smp.c
kernel/up.c