From patchwork Thu May 20 09:21:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Kroah-Hartman X-Patchwork-Id: 443197 Delivered-To: patch@linaro.org Received: by 2002:a02:7a1b:0:0:0:0:0 with SMTP id a27csp2139235jac; Thu, 20 May 2021 03:06:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwXQvyVb3TT0sRzVixnZ3FUxvegHWxXpSyrpsbzWtlCo33Fcie9Dk+weGxoZi/qX5rVSsSi X-Received: by 2002:a92:cd0c:: with SMTP id z12mr4413347iln.79.1621505180402; Thu, 20 May 2021 03:06:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621505180; cv=none; d=google.com; s=arc-20160816; b=niJnL49X4Pl/ezVK9ZE9UM3ahysuAOXS7lAU+ONVRXn+UFe2Yeuom53HuCIM6dzazj PnyxHc1PSQmHZ6z9rSktKznnPqNLEyTwjF88W3ewr3TS3YBeDFJ/khfGiSFMTGyxNErk f+GTknerj0pBXoNRhndfsBcvmuR/QwIheo2+1/4FbqNSVtWYrVKAZIEuef+sqGQAhHpY cVCcEhtYInoidqeYcyUhd16E5hxf84PBqV/+W5RRhNykoOcW7OPW9Z4PE9bkXptqiSLW GxQh+UNbzs9/zQvgeRUxmxMM/oEJrEGFy5VGlzs/fNLz4LwHMG8+/xHZ7ucTE/D+dsGP oBvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=s7srUWn+0iwyeQ9Opaj/ACqWOEvkELZ/5uHxUw+MnjE=; b=akQxVSKiRRba4ZJadM5W6dyQ7zie2Xm1lJvKOXcn7aW732txkGG0Z4FRUMPekY6nX0 tbhUdiOyUVyuvY+RQ+ec6r9z2aI5Y8Tyr4yjmq6TYlsJOV/dLHxpREegfkZ/DKfxHBYO fRVy5WnknjSpsiQWC+AZRx7tKp1pXfpVmCn0J9zlHxO5aGWigwNxr3EX634jrbtmk19q CUOXCgsXSbXLN0qpPNCnbzu+iSQqAHXSb+KUmVJRZJTGGUasOFJ4kzi7kg5lnUM270Rk 32yg1qBmURu7O6Vk5qBE32WL2J+ctwILwJFVCqe/cx9nNcKm8xtldUJH20s1NXEI6hBD rhQQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vRGT+tF0; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f6si1896468ioh.32.2021.05.20.03.06.20; Thu, 20 May 2021 03:06:20 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vRGT+tF0; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235044AbhETKHh (ORCPT + 12 others); Thu, 20 May 2021 06:07:37 -0400 Received: from mail.kernel.org ([198.145.29.99]:37792 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232100AbhETKFb (ORCPT ); Thu, 20 May 2021 06:05:31 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id A257D6193B; Thu, 20 May 2021 09:41:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621503679; bh=qURO246+2vAK3TsFBzpTuXJeHrY/IQ9PWRX/GYoR+bI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vRGT+tF02Pfszt/RDfI9hGBeNoFZXNyjaJfb2AjB4L5GnPLQyHHXJP3WR8nE2dsgP u1vktXqRkSJoD0Ripw5vphPDuP8F7xwROe+bB4GhG2K0DIQwOJl9HByrZc6Oq3lZSu o6VuG6DZXI6RqQIc3nPZucoU+CcbW4SxgCEYMENU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Arnd Bergmann , "Peter Zijlstra (Intel)" , Jens Axboe , Nathan Chancellor Subject: [PATCH 4.19 296/425] smp: Fix smp_call_function_single_async prototype Date: Thu, 20 May 2021 11:21:05 +0200 Message-Id: <20210520092141.176698236@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210520092131.308959589@linuxfoundation.org> References: <20210520092131.308959589@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Arnd Bergmann commit 1139aeb1c521eb4a050920ce6c64c36c4f2a3ab7 upstream. As of commit 966a967116e6 ("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 4ccafe032005 ("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 Signed-off-by: Peter Zijlstra (Intel) Acked-by: Jens Axboe Link: https://lkml.kernel.org/r/20210505211300.3174456-1-arnd@kernel.org [nc: Fix conflicts] Signed-off-by: Nathan Chancellor Signed-off-by: Greg Kroah-Hartman --- include/linux/smp.h | 2 +- kernel/smp.c | 10 +++++----- kernel/up.c | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) --- a/include/linux/smp.h +++ b/include/linux/smp.h @@ -53,7 +53,7 @@ void on_each_cpu_cond(bool (*cond_func)( smp_call_func_t func, void *info, bool wait, gfp_t gfp_flags); -int smp_call_function_single_async(int cpu, call_single_data_t *csd); +int smp_call_function_single_async(int cpu, struct __call_single_data *csd); #ifdef CONFIG_SMP --- a/kernel/smp.c +++ b/kernel/smp.c @@ -103,12 +103,12 @@ void __init call_function_init(void) * previous function call. For multi-cpu calls its even more interesting * as we'll have to ensure no other cpu is observing our csd. */ -static __always_inline void csd_lock_wait(call_single_data_t *csd) +static __always_inline void csd_lock_wait(struct __call_single_data *csd) { smp_cond_load_acquire(&csd->flags, !(VAL & CSD_FLAG_LOCK)); } -static __always_inline void csd_lock(call_single_data_t *csd) +static __always_inline void csd_lock(struct __call_single_data *csd) { csd_lock_wait(csd); csd->flags |= CSD_FLAG_LOCK; @@ -121,7 +121,7 @@ static __always_inline void csd_lock(cal smp_wmb(); } -static __always_inline void csd_unlock(call_single_data_t *csd) +static __always_inline void csd_unlock(struct __call_single_data *csd) { WARN_ON(!(csd->flags & CSD_FLAG_LOCK)); @@ -138,7 +138,7 @@ static DEFINE_PER_CPU_SHARED_ALIGNED(cal * for execution on the given CPU. data must already have * ->func, ->info, and ->flags set. */ -static int generic_exec_single(int cpu, call_single_data_t *csd, +static int generic_exec_single(int cpu, struct __call_single_data *csd, smp_call_func_t func, void *info) { if (cpu == smp_processor_id()) { @@ -323,7 +323,7 @@ EXPORT_SYMBOL(smp_call_function_single); * NOTE: Be careful, there is unfortunately no current debugging facility to * validate the correctness of this serialization. */ -int smp_call_function_single_async(int cpu, call_single_data_t *csd) +int smp_call_function_single_async(int cpu, struct __call_single_data *csd) { int err = 0; --- a/kernel/up.c +++ b/kernel/up.c @@ -23,7 +23,7 @@ int smp_call_function_single(int cpu, vo } EXPORT_SYMBOL(smp_call_function_single); -int smp_call_function_single_async(int cpu, call_single_data_t *csd) +int smp_call_function_single_async(int cpu, struct __call_single_data *csd) { unsigned long flags;