Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp1514319ybx; Thu, 7 Nov 2019 13:00:23 -0800 (PST) X-Google-Smtp-Source: APXvYqwCI0Yf36s5qQnaYFvmiuaYwg1SoeifK4Gmd7kPhAIwb4FrEfhyzNaHkJL0URr7k9f/7rlA X-Received: by 2002:aa7:dc1a:: with SMTP id b26mr6102499edu.139.1573160423284; Thu, 07 Nov 2019 13:00:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573160423; cv=none; d=google.com; s=arc-20160816; b=Ol9QI7fpzZxt5BcwAO8u485T3ZSV5H+qKg4D41K+7zMgm0VwkWxlUhW6z4DAIqOmau s03iLSHD4x5/Av09hLh5p2+fbkcT3qTPAMIhF4qCnZq2Y+9+m05GxXS+iTTFYmvdyRtx VDr9hZuWhwL8YgFw3uSIEgPR4IMrqUebn7xG3pPTzFY70rK4NUeO9XMb/R8iH7tg4GZW y9XmTpMQ8UitdUNvrF+8FenZd6dMzde9AYgJjvUZ/M+xXjvoNoqbE/QG787e8JmbT2sg KlTspB9z8xCXOA8wDQpT6E3U4h0yqHTSoLNU9OkAjP5Fp/2ZQg5rgdHLONQHRTniyOkk a/6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=nkNlMQRicaTR1gGQNB/Yzp0pHtByBTKEE9yOjF2k1pw=; b=J5nm9pjO1oTFipTjRZTuRJiNxmiEfOw5ECaeLARAGa5rkEUiTHzU4mIr4P8oQBC8iI Ew+svEldvgPquxYbMuYkBn94KXO8AIZ76xyGu3LVGMjRG6aFDP1AmpQJkFYpD6Vw6wDn Z34nsLe4G0wXlJv6HyaUOXXOLcpTo1ixn4cfhdyGn12mWQrpxYsz1NcnGP8OzQU/68h9 zmvx6sK2ePoZd9e91VM/tfYD3fgnLn8QNBIpdMtPugqyleDSeA4VFBU/vGagyMuFebHr /gsx2EemUeKW/L/sI5ciGWgT/SZ7omlDGLcxvU59MfBbUz+dpTUUcgQkyu4pL1QoRPvi RRzQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=LR41t2IH; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d6si2806736ede.119.2019.11.07.12.59.58; Thu, 07 Nov 2019 13:00:23 -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=@gmail.com header.s=20161025 header.b=LR41t2IH; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725940AbfKGU71 (ORCPT + 99 others); Thu, 7 Nov 2019 15:59:27 -0500 Received: from mail-pl1-f194.google.com ([209.85.214.194]:34679 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725828AbfKGU71 (ORCPT ); Thu, 7 Nov 2019 15:59:27 -0500 Received: by mail-pl1-f194.google.com with SMTP id k7so2451353pll.1 for ; Thu, 07 Nov 2019 12:59:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=nkNlMQRicaTR1gGQNB/Yzp0pHtByBTKEE9yOjF2k1pw=; b=LR41t2IHZuly8gLcZ6UlBM3E62/6+qVvM+opJvCHaLiISAgNP1pKb7G2FH2kWI2CdE m62M/ay9xo1VTApVdsTieVrf/lBa9CdDoPvCGx72us0Kan781R71Tb6wUUK9XZMelN6m uvXvOhSrL0qouhPwru8vpSazs4yzxb8wNNg2mRWIp2IPGsAKMByVmRVg2ucbrM7kZosY /IlrpkSSvCmMqK1OpHQyccRlApStn67UsOa4rPX3E+WAo20IBFFz8E8S0/hHV7El00QF 7AwSNyCipcN7xgYS1R2DLl/jqyKU6ADzOYVN9/jpJLW/HruToxlqjJg9Y1H+wGiownjt UvDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=nkNlMQRicaTR1gGQNB/Yzp0pHtByBTKEE9yOjF2k1pw=; b=h8vqwVTxXS83svKBvsEPqSEY7vjvh6FOz8AC5XK3isuAo7FWIqH+f046jdg1+g4b1X c/n67uG40g2u9m/JpNKJGEZYLeD/QAm1qilSVB+I9G7Oj+Kz0QzbkxPFgJ5sSrF1UrpJ aMW1DNrp918Ui0E/zAvT93KmeC8eco66lnktjwFXkH6IP5RzsQwLxBNNQ8KrEdyE8F9P YKVUUTTw96Ubs/Lned61pfawxeOUJmpwCZuJ1fE+WN8HN/ccKc0zy8pjukvHvTUGV2MF iuyrTUW7siNUd60+RY4NvdxDARisWyDzkUxenHvf/+MEjYKOc9Rvh3aiiFpwaS41Pkwk JfWg== X-Gm-Message-State: APjAAAW//xVOEEIseRL4MzhCGfzvZvyWogCPDXDmctnjenEmeACqxjoi Nht9/H8iasic4KRJbQmxV9skwv4I X-Received: by 2002:a17:90a:bf8d:: with SMTP id d13mr8239219pjs.89.1573160365293; Thu, 07 Nov 2019 12:59:25 -0800 (PST) Received: from deepa-ubuntu.lan (c-98-234-52-230.hsd1.ca.comcast.net. [98.234.52.230]) by smtp.gmail.com with ESMTPSA id r68sm3499652pfr.78.2019.11.07.12.59.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Nov 2019 12:59:24 -0800 (PST) From: Deepa Dinamani To: joro@8bytes.org, linux-kernel@vger.kernel.org Cc: dwmw2@infradead.org, iommu@lists.linux-foundation.org Subject: [PATCH] intel-iommu: Turn off translations at shutdown Date: Thu, 7 Nov 2019 12:59:14 -0800 Message-Id: <20191107205914.10611-1-deepa.kernel@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The intel-iommu driver assumes that the iommu state is cleaned up at the start of the new kernel. But, when we try to kexec boot something other than the Linux kernel, the cleanup cannot be relied upon. Hence, cleanup before we go down for reboot. Keeping the cleanup at initialization also, in case BIOS leaves the IOMMU enabled. I considered turning off iommu only during kexec reboot, but a clean shutdown seems always a good idea. But if someone wants to make it conditional, we can do that. Tested that before, the info message 'DMAR: Translation was enabled for but we are not in kdump mode' would be reported for each iommu. The message will not appear when the DMA-remapping is not enabled on entry to the kernel. Signed-off-by: Deepa Dinamani --- drivers/iommu/intel-iommu.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index fe8097078669..f0636b263722 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -4764,6 +4764,26 @@ static void intel_disable_iommus(void) iommu_disable_translation(iommu); } +static void intel_iommu_shutdown(void) +{ + struct dmar_drhd_unit *drhd; + struct intel_iommu *iommu = NULL; + + if (no_iommu || dmar_disabled) + return; + + down_write(&dmar_global_lock); + + /* Disable PMRs explicitly here. */ + for_each_iommu(iommu, drhd) + iommu_disable_protect_mem_regions(iommu); + + /* Make sure the IOMMUs are switched off */ + intel_disable_iommus(); + + up_write(&dmar_global_lock); +} + static inline struct intel_iommu *dev_to_intel_iommu(struct device *dev) { struct iommu_device *iommu_dev = dev_to_iommu_device(dev); @@ -5013,6 +5033,8 @@ int __init intel_iommu_init(void) } up_write(&dmar_global_lock); + x86_platform.iommu_shutdown = intel_iommu_shutdown; + #if defined(CONFIG_X86) && defined(CONFIG_SWIOTLB) /* * If the system has no untrusted device or the user has decided -- 2.17.1