From patchwork Mon May 13 18:28:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: dann frazier X-Patchwork-Id: 1099076 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 452q8Z6xZtz9sML; Tue, 14 May 2019 04:29:00 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1hQFgx-0005Aa-N5; Mon, 13 May 2019 18:28:51 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.86_2) (envelope-from ) id 1hQFgw-0005AS-8i for kernel-team@lists.ubuntu.com; Mon, 13 May 2019 18:28:50 +0000 Received: from mail-io1-f72.google.com ([209.85.166.72]) by youngberry.canonical.com with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1hQFgv-00027v-Rv for kernel-team@lists.ubuntu.com; Mon, 13 May 2019 18:28:49 +0000 Received: by mail-io1-f72.google.com with SMTP id i20so5047646ioo.18 for ; Mon, 13 May 2019 11:28:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=lenHHpjw88Gtxc2F7NfX+IR6gf6zs7XT4KlfE0hqyBI=; b=IkXG4iucmx52NpdVVvtdvY8Zgo2vFdQlRNkF60KKT+qcAS9uyPflzPb2N3bg28x6TW CVheGUcWUyRXUqMb5zpPRxQHOu3xwYBODhtjncLgFOMK9BjTqSa4/13/Wmcj63Ywi7UK cXeF59bIMHQ3thRPZ5thUHqvu3hHUvtBUoylseiat7evHLHky5aSoP3BELrvLI31v0Cr KJ2xgvHPFr07Z4JVJpJ9HVxqc9PnglhSoQUUR7I3HjZa6lTiyrauOfecgaCRMeuHVhZ3 rhb3Pec/QpEeimtI5Jg4MPEA7/0HeZIHIO1FQ36TcJSzxfdG0pRL9KOV+3X1kod5yVVY A2+A== X-Gm-Message-State: APjAAAV6mOaS3Z7I9rSBbskiL7WOsjRSkW3Q9zh3I1chjxalRs6yryX1 dulUZyWO2PHy4tkn74S1YKbCr2uTxa6cOOstXe1icaTm8+O/D9QTTYLtdMMyrpfS3uMtpAxogb1 RxXWOv9X9Gg6D/Axqmi48er1SvtGb7Td0m+CVfZAkPg== X-Received: by 2002:a5d:9bcb:: with SMTP id d11mr11450072ion.247.1557772128619; Mon, 13 May 2019 11:28:48 -0700 (PDT) X-Google-Smtp-Source: APXvYqyj+hNk2p+2/s7cSA2v9cLleYMIqBDVLxDJqIUbSPBEEPsKqdw6BK88wzpX1vdn8dhYgy12DA== X-Received: by 2002:a5d:9bcb:: with SMTP id d11mr11450052ion.247.1557772128131; Mon, 13 May 2019 11:28:48 -0700 (PDT) Received: from xps13.canonical.com (c-71-56-235-36.hsd1.co.comcast.net. [71.56.235.36]) by smtp.gmail.com with ESMTPSA id t26sm4889445ioc.66.2019.05.13.11.28.47 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 May 2019 11:28:47 -0700 (PDT) From: dann frazier To: kernel-team@lists.ubuntu.com Subject: [PATCH][Unstable][SRU Disco] iommu/arm-smmu-v3: Don't disable SMMU in kdump kernel Date: Mon, 13 May 2019 12:28:23 -0600 Message-Id: <20190513182823.11804-1-dann.frazier@canonical.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Will Deacon BugLink: https://bugs.launchpad.net/bugs/1828868 Disabling the SMMU when probing from within a kdump kernel so that all incoming transactions are terminated can prevent the core of the crashed kernel from being transferred off the machine if all I/O devices are behind the SMMU. Instead, continue to probe the SMMU after it is disabled so that we can reinitialise it entirely and re-attach the DMA masters as they are reset. Since the kdump kernel may not have drivers for all of the active DMA masters, we suppress fault reporting to avoid spamming the console and swamping the IRQ threads. Reported-by: "Leizhen (ThunderTown)" Tested-by: "Leizhen (ThunderTown)" Tested-by: Bhupesh Sharma Signed-off-by: Will Deacon (cherry picked from commit 3f54c447df34ff9efac7809a4a80fd3208efc619) Signed-off-by: dann frazier Acked-by: Stefan Bader Acked-by: Seth Forshee --- drivers/iommu/arm-smmu-v3.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c index 0d284029dc735..e6baf509bc07d 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c @@ -2455,13 +2455,9 @@ static int arm_smmu_device_reset(struct arm_smmu_device *smmu, bool bypass) /* Clear CR0 and sync (disables SMMU and queue processing) */ reg = readl_relaxed(smmu->base + ARM_SMMU_CR0); if (reg & CR0_SMMUEN) { - if (is_kdump_kernel()) { - arm_smmu_update_gbpa(smmu, GBPA_ABORT, 0); - arm_smmu_device_disable(smmu); - return -EBUSY; - } - dev_warn(smmu->dev, "SMMU currently enabled! Resetting...\n"); + WARN_ON(is_kdump_kernel() && !disable_bypass); + arm_smmu_update_gbpa(smmu, GBPA_ABORT, 0); } ret = arm_smmu_device_disable(smmu); @@ -2554,6 +2550,8 @@ static int arm_smmu_device_reset(struct arm_smmu_device *smmu, bool bypass) return ret; } + if (is_kdump_kernel()) + enables &= ~(CR0_EVTQEN | CR0_PRIQEN); /* Enable the SMMU interface, or ensure bypass */ if (!bypass || disable_bypass) {