From patchwork Thu Oct 3 15:51:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg KH X-Patchwork-Id: 175148 Delivered-To: patch@linaro.org Received: by 2002:a92:7e96:0:0:0:0:0 with SMTP id q22csp572943ill; Thu, 3 Oct 2019 09:42:41 -0700 (PDT) X-Google-Smtp-Source: APXvYqxX5PMcUxNqt18SF6N96U+jWvru6O9s19NQBpwlmvKWraabS4Wllk+Y1sb+Gy0val+vkpeK X-Received: by 2002:a17:906:6bca:: with SMTP id t10mr8671126ejs.64.1570120961064; Thu, 03 Oct 2019 09:42:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570120961; cv=none; d=google.com; s=arc-20160816; b=BvxvXXes2rKBVS/nWmGd2ovOFDSZ1W8hR6UM6egemVn2BFLTg8JFz4qWIGLhFYcnxq JrMormhMkP1v/kemjBBeDkuH1HThROpBQfB9XeK4yJMkFXowRayFSKQ59hIpnzM0wHqh Z15SD5rn2V8yEAK/OsBWHkWcR5aYZbwCYPkjNZS+/P78+nvkJDBtTBcxqrJ61phVAKvQ z5rIVDxJImRwBmMa5q4ONlYAdNcuw4OTV0OrAAOV1PXIhZoyIdN3+UdQwRmR3Z2EBgR4 LidzpOPrDowApK7hSLD4Mxryo83BjTA2speEKGkV8Jm14tLwppjXKIHdbuZVXeTXP9q7 svFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=QysHqyJiNaBe1m1gUMpqTANmqSNRouVizu+qOvBPryA=; b=qh8kDgkeDQ2i1kRklu9qXvItYRnnyR7ZY/o0CX3kElDX2ESGT1TD1coj9NfYqSR1Lj Rudp/2WAROtCz2rWWSUBbLe7F90DzzdP7q6KylAz5s2W1rM0ucd2M8jbeCLc8IKQGTpd DZpJ/3LQE/e3XEU6b+vW8zkGbbq8ehMgMg2dRGX1idHOPlxTr6ML3idcuus9xOkzCwtm FBL3a3XDwnn4dgOFnCMbhjJpjM+fSO1H+rCVEHzy9eYSpfpqSY86lKqi75YXUK5xvn55 Ks2Isphkm+NNNHlIuiHXYp24Tm3LGSgYnRNmi7QwZkyFLZ9Xx4ayHH30pjEYt3/O70AJ hP9A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="RBuHG/Fy"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z35si1771241edd.340.2019.10.03.09.42.40; Thu, 03 Oct 2019 09:42:41 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="RBuHG/Fy"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392686AbfJCQmj (ORCPT + 27 others); Thu, 3 Oct 2019 12:42:39 -0400 Received: from mail.kernel.org ([198.145.29.99]:53686 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404062AbfJCQmg (ORCPT ); Thu, 3 Oct 2019 12:42:36 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 066A92054F; Thu, 3 Oct 2019 16:42:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1570120955; bh=iupxWFpcY6/cgaLlrAWuYCcnrImMYlOV5CQiGwgF2WE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RBuHG/FykYr7PhTKBry71DQslStZ69w8+4i0DAUO3kUYrZrpIbU9dDiRY335ymg1X EPgVQYKcbRuINLh6OloU7/6FyvU0PIQV2g47KHqTYoIri5G7N4B+H925vaEhzUMc9z D9TAdw/x9j8dBrCCuD5OlqgNw6mkTtItCdgaDKXw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jim Quinlan , Sudeep Holla , Sasha Levin Subject: [PATCH 5.3 099/344] firmware: arm_scmi: Check if platform has released shmem before using Date: Thu, 3 Oct 2019 17:51:04 +0200 Message-Id: <20191003154549.966139872@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191003154540.062170222@linuxfoundation.org> References: <20191003154540.062170222@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sudeep Holla [ Upstream commit 9dc34d635c67e57051853855c43249408641a5ab ] Sometimes platfom may take too long to respond to the command and OS might timeout before platform transfer the ownership of the shared memory region to the OS with the response. Since the mailbox channel associated with the channel is freed and new commands are dispatch on the same channel, OS needs to wait until it gets back the ownership. If not, either OS may end up overwriting the platform response for the last command(which is fine as OS timed out that command) or platform might overwrite the payload for the next command with the response for the old. The latter is problematic as platform may end up interpretting the response as the payload. In order to avoid such race, let's wait until the OS gets back the ownership before we prepare the shared memory with the payload for the next command. Reported-by: Jim Quinlan Signed-off-by: Sudeep Holla Signed-off-by: Sasha Levin --- drivers/firmware/arm_scmi/driver.c | 8 ++++++++ 1 file changed, 8 insertions(+) -- 2.20.1 diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index b5bc4c7a8fab2..b49c9e6f4bf10 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -271,6 +271,14 @@ static void scmi_tx_prepare(struct mbox_client *cl, void *m) struct scmi_chan_info *cinfo = client_to_scmi_chan_info(cl); struct scmi_shared_mem __iomem *mem = cinfo->payload; + /* + * Ideally channel must be free by now unless OS timeout last + * request and platform continued to process the same, wait + * until it releases the shared memory, otherwise we may endup + * overwriting its response with new message payload or vice-versa + */ + spin_until_cond(ioread32(&mem->channel_status) & + SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE); /* Mark channel busy + clear error */ iowrite32(0x0, &mem->channel_status); iowrite32(t->hdr.poll_completion ? 0 : SCMI_SHMEM_FLAG_INTR_ENABLED,