Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp444425ybl; Tue, 28 Jan 2020 06:06:46 -0800 (PST) X-Google-Smtp-Source: APXvYqwSozuPwWMMbDbw63h31njHvQpm4uSUa6WT9zWHifmCMc80yZY53jpqpO2TSRUZ71EvhWX+ X-Received: by 2002:a9d:7852:: with SMTP id c18mr15557294otm.247.1580220405904; Tue, 28 Jan 2020 06:06:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580220405; cv=none; d=google.com; s=arc-20160816; b=Hep4kYMlAXgYWUABzFZHUQlJ+SCk2qPfr6FFqoJy4X3bLqNCULnWnGElLUQjHbnl4k Il5Xt1rimVDm/+Zp3NU3fNBDuESmUmC6TUdM+nv8sFlYUKOnVhmO8AMuoHun/YdMKc9e yYeP7yyxpawmvPYcntPCg2hKlma/tDuJ7uhkWnnktlOARWRHn9fnqwyY6EQ4Rf3MqcR0 5ftnjAoONc7NXO0cAegvNeqwbr9N/L2yMehyRqbqyshJ17BihzIELpXxUV9yUBdQZg1O MkDayikV88anMbQ4+G18d4VWi/jt2rr7/ll4ZSJSOurdWeo8JBJIQBchATbEniuO32yu rHjw== 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=8UnG8bRsupQHYSD9+vPPoXG9u4OKl8k+UjaHoitJPN8=; b=Hs3HNNOh4s1KKLRqLfreUODYFdEY6sV4jE1g5pUkVjdUr+vInm2Dh6CVyDLmMGaNmZ xiEq+f52NmBovcnyQIW85CnHtPJ3gIfbeTnvEt2nKaRBJfbrDM2wnZQkMyFzT4iMVYAO 16Zy0w6ZEBpxgpRlE5HO2OfYGO4xbZ01z52SAXGcuxtkvWU3bl9JMuYIy653c21WqNV4 6UMTFAN2E361n+me9AG3eqJ4uEtgwofZCEED80phiE+bo3VEzUZhF5QWr4vaTR5zenrI 1xwI/ZviplXHjGRaxrTrHiYwvplV8UPjDvA/OoFbM1TX3C/Aa63MsSUR5MeVmT43LLbI ifxA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="CS/zbQ+8"; 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 w18si6197134otp.48.2020.01.28.06.06.26; Tue, 28 Jan 2020 06:06:45 -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="CS/zbQ+8"; 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 S1728002AbgA1OEF (ORCPT + 99 others); Tue, 28 Jan 2020 09:04:05 -0500 Received: from mail.kernel.org ([198.145.29.99]:50972 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726696AbgA1OEC (ORCPT ); Tue, 28 Jan 2020 09:04:02 -0500 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 73C4124683; Tue, 28 Jan 2020 14:04:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1580220242; bh=hw6VUbMIkXnUvUwxwEKXR4DH0FlJ/jYXMi4EMMPRASg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CS/zbQ+84avg1+CNcVCMMRhRN5MooH9AiYJgt5S5KKTS81thsPP9PlSEOcbsn/LUK 9kJZ/lsVGUepVv6Adhq9MHJjddU0Qh1LyTSgxXq5jReuFZifGqzPpa6O09NBg4WT2r WVNzY1V8Fj5/ZJYWW+P0wDKVc252dyaoOfv9u06k= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Shuah Khan , Suravee Suthikulpanit , Joerg Roedel Subject: [PATCH 5.4 072/104] iommu/amd: Fix IOMMU perf counter clobbering during init Date: Tue, 28 Jan 2020 15:00:33 +0100 Message-Id: <20200128135827.267393392@linuxfoundation.org> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200128135817.238524998@linuxfoundation.org> References: <20200128135817.238524998@linuxfoundation.org> User-Agent: quilt/0.66 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 From: Shuah Khan commit 8c17bbf6c8f70058a66305f2e1982552e6ea7f47 upstream. init_iommu_perf_ctr() clobbers the register when it checks write access to IOMMU perf counters and fails to restore when they are writable. Add save and restore to fix it. Signed-off-by: Shuah Khan Fixes: 30861ddc9cca4 ("perf/x86/amd: Add IOMMU Performance Counter resource management") Reviewed-by: Suravee Suthikulpanit Tested-by: Suravee Suthikulpanit Signed-off-by: Joerg Roedel Signed-off-by: Greg Kroah-Hartman --- drivers/iommu/amd_iommu_init.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) --- a/drivers/iommu/amd_iommu_init.c +++ b/drivers/iommu/amd_iommu_init.c @@ -1655,27 +1655,39 @@ static int iommu_pc_get_set_reg(struct a static void init_iommu_perf_ctr(struct amd_iommu *iommu) { struct pci_dev *pdev = iommu->dev; - u64 val = 0xabcd, val2 = 0; + u64 val = 0xabcd, val2 = 0, save_reg = 0; if (!iommu_feature(iommu, FEATURE_PC)) return; amd_iommu_pc_present = true; + /* save the value to restore, if writable */ + if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &save_reg, false)) + goto pc_false; + /* Check if the performance counters can be written to */ if ((iommu_pc_get_set_reg(iommu, 0, 0, 0, &val, true)) || (iommu_pc_get_set_reg(iommu, 0, 0, 0, &val2, false)) || - (val != val2)) { - pci_err(pdev, "Unable to write to IOMMU perf counter.\n"); - amd_iommu_pc_present = false; - return; - } + (val != val2)) + goto pc_false; + + /* restore */ + if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &save_reg, true)) + goto pc_false; pci_info(pdev, "IOMMU performance counters supported\n"); val = readl(iommu->mmio_base + MMIO_CNTR_CONF_OFFSET); iommu->max_banks = (u8) ((val >> 12) & 0x3f); iommu->max_counters = (u8) ((val >> 7) & 0xf); + + return; + +pc_false: + pci_err(pdev, "Unable to read/write to IOMMU perf counter.\n"); + amd_iommu_pc_present = false; + return; } static ssize_t amd_iommu_show_cap(struct device *dev,