Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3704148imu; Mon, 7 Jan 2019 08:02:29 -0800 (PST) X-Google-Smtp-Source: ALg8bN4gsqJkWRZhkNFvOogJ+oKim7Bp5yk8t/AQR1Vzn4by5MXQRNaWsFcXiPkl/JGB++OQB/6H X-Received: by 2002:a65:434d:: with SMTP id k13mr11496339pgq.269.1546876949600; Mon, 07 Jan 2019 08:02:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546876949; cv=none; d=google.com; s=arc-20160816; b=vFOr1UsF0BObprskNOQvZOqyTV8IFa/C/aJ5SxZ6dZsj3m+9E7ULND4z6WPLzOw2BL GsBgD+IZFj6u8CJY9Pc16AMflkimvDWUOU4yKBGjXXN7wcjC34ZYLUlKXDe17qEh8EzP B1n4w0eO1GEk9xXu6Wn0jodwyRV0bW5JIiImrxdLHGXf0f0fyuQiuZgJmQrHLk8nbBuG or3KjqAKkBbY85oPcZuxOO3/T2fvfKoAFCLMdHznqbwZNslxi26NbiT9mMFhhK8d1IGh hnLtR6kIltu4m2eTKC4AJk2O9dLC9Kxicw/YsBNUs8wnzwpOPo6RXrp1u/hvqWRGdoei Yo7A== 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=iKQz87htXaqw23xez0WepA0pFptf2Sv1hO1lOWqm+Ow=; b=YE3XWuqaGKwvKCd8biB5KzitzyxxS4rNPyWHPl6ZFLuemyZgoB56Jo7WCd8hSKkPXK xqeU9Yldwq7rtxdJhbRZxHtP+V3IpIFwREuNXOUePH4dJGJSiS3rd5KwZ8hOAVDY72UA 827B2cxS2b8yHEzmmgcHGOyiTLQQ4OOrOhejJhROM96uZySNkiX96BfQ0171b+xCJkIk INfTgXlCKAONcMU8BppctEpBIGESyCldCCgb9SlwqDPLTfmCdUjZKTQ+2kHLGbFuuNah 3ieihK2j3tbXh9cxpZQAoyqaSQeugVHOGRxfRGRIHOA4LHLLK24/WaJ/WfDOTH3Ze6b1 b39Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=nL4igtEI; 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 u21si56944211pgm.21.2019.01.07.08.02.12; Mon, 07 Jan 2019 08:02:29 -0800 (PST) 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=nL4igtEI; 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 S1728833AbfAGMpQ (ORCPT + 99 others); Mon, 7 Jan 2019 07:45:16 -0500 Received: from mail.kernel.org ([198.145.29.99]:34330 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728817AbfAGMpO (ORCPT ); Mon, 7 Jan 2019 07:45:14 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.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 3F96D218A1; Mon, 7 Jan 2019 12:45:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1546865113; bh=YmJC1Rz6n37un4lozmeKL4IOaLoK2csD3kk0FAxjE0A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nL4igtEIUNRoNg1DTd9jwYxJjLKONVhsG+TSVa6ZWyn51tc/LzvWNJFKAhXBYRKrv 2Yl8rP92q9gPaI618x1T1Cq3Abe4K5j3Hp4hCxGmsEZSv7Y0eEx+pJ2GC/B6xuRzd7 x7odE2cdijDByzcfYAQx/01xaBWHunIiOLCTvA7A= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Robin Murphy , Will Deacon Subject: [PATCH 4.20 140/145] iommu/arm-smmu-v3: Fix big-endian CMD_SYNC writes Date: Mon, 7 Jan 2019 13:32:57 +0100 Message-Id: <20190107104455.495848640@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190107104437.308206189@linuxfoundation.org> References: <20190107104437.308206189@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.20-stable review patch. If anyone has any objections, please let me know. ------------------ From: Robin Murphy commit 3cd508a8c1379427afb5e16c2e0a7c986d907853 upstream. When we insert the sync sequence number into the CMD_SYNC.MSIData field, we do so in CPU-native byte order, before writing out the whole command as explicitly little-endian dwords. Thus on big-endian systems, the SMMU will receive and write back a byteswapped version of sync_nr, which would be perfect if it were targeting a similarly-little-endian ITS, but since it's actually writing back to memory being polled by the CPUs, they're going to end up seeing the wrong thing. Since the SMMU doesn't care what the MSIData actually contains, the minimal-overhead solution is to simply add an extra byteswap initially, such that it then writes back the big-endian format directly. Cc: Fixes: 37de98f8f1cf ("iommu/arm-smmu-v3: Use CMD_SYNC completion MSI") Signed-off-by: Robin Murphy Signed-off-by: Will Deacon Signed-off-by: Greg Kroah-Hartman --- drivers/iommu/arm-smmu-v3.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c @@ -828,7 +828,13 @@ static int arm_smmu_cmdq_build_cmd(u64 * cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_CS, CMDQ_SYNC_0_CS_SEV); cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_MSH, ARM_SMMU_SH_ISH); cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_MSIATTR, ARM_SMMU_MEMATTR_OIWB); - cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_MSIDATA, ent->sync.msidata); + /* + * Commands are written little-endian, but we want the SMMU to + * receive MSIData, and thus write it back to memory, in CPU + * byte order, so big-endian needs an extra byteswap here. + */ + cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_MSIDATA, + cpu_to_le32(ent->sync.msidata)); cmd[1] |= ent->sync.msiaddr & CMDQ_SYNC_1_MSIADDR_MASK; break; default: