Received: by 2002:a05:7412:b995:b0:f9:9502:5bb8 with SMTP id it21csp3149618rdb; Tue, 26 Dec 2023 19:10:44 -0800 (PST) X-Google-Smtp-Source: AGHT+IFKqsUkJJ1c1c8Atp+Y7ns/Z6m/qUdqQwx/s2P9TDCBkhZKQfuX96Qof6OzurV3oc8/3Gu7 X-Received: by 2002:a05:6512:969:b0:50e:30b3:b905 with SMTP id v9-20020a056512096900b0050e30b3b905mr2543756lft.44.1703646644196; Tue, 26 Dec 2023 19:10:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703646644; cv=none; d=google.com; s=arc-20160816; b=0l9HVi9pZL3faX4ba3PrHSLCUVFvhV7MHlOdl60Gd75i6DC3ae6Ct3MNRe5zSvkkbr u/ZAoPKSOTIY3VMOqRAiddLeymjnjjgIjgX6DU+jFXHCZmk7T0vgMRHAodkH38LkS8iQ NtRxVTZIi9rfZTumZ3TR0lPu+JQjwWczCaWPMJriB6MauRFPUmoZodsz2Yb+nVdTcgsh ASrf9JP0hjm6ejjdQyNqg1fOF5wNBFjJHWu3uh/jvuw9qRXKNj07rK0HXkG9/QZWZ9By 8fLFVcpYWLESgVfXDXbFzZLdHYYKA9b8duiJaDuelXH7YRFySRvXDqfqJavj1NEzKnVX AnoA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=XW0OX8z5K1UjkVyKaF1Sy1WLJYpebt+CLrJdKW4ZbsM=; fh=cQTxynQ7rGExgmbyXq8tNmd/VmE1Fzgt9QW51hABj2c=; b=hjo9ICtDYVBFEAMHO/iBjlKAxXvVaob84ewjny6eCph2SSx803OHnjG4uBuaXN7EsT ikLGPewDNDhmtWTpOC2gqcq7Y3HB2XNM0UPcJXqJH9DLyqIwwLyEbkZ6KElpulNZLw9b MPyDFNrmeZlQx1Wi4yl0pRuGruigl1X2g8DshqWRGfgUXUeQqXvpk8J233KGsiUNIryk AsMxgrXeHaTJuu1hjU6MtxAJDloZcKis9wFKL6ivpWGV9xRKtDpvzLzUvkMpLfiM93OE WqxhhCXnHGU8syEkBdZUqedprz8doRMLCV7I4ofxAnYp3NdvurIMf5rg7khCmP6XVb8Z 3Bmw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=O9UeWasN; spf=pass (google.com: domain of linux-kernel+bounces-11798-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-11798-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id p4-20020a50cd84000000b0055330313114si5634617edi.620.2023.12.26.19.10.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Dec 2023 19:10:44 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-11798-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=O9UeWasN; spf=pass (google.com: domain of linux-kernel+bounces-11798-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-11798-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id EA1BD1F22CBE for ; Wed, 27 Dec 2023 03:10:43 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A13CF63DC; Wed, 27 Dec 2023 03:09:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="O9UeWasN" X-Original-To: linux-kernel@vger.kernel.org Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E30663B1; Wed, 27 Dec 2023 03:09:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1703646575; x=1735182575; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=WG21CSSwsE/85hwPEnEufidCuVnAVIKF6sagH3cxk1U=; b=O9UeWasNkgsK5ysNWoiEPaZujDT9kHXFz75wQyX9j6MPShiCWd8bUyL2 HEtIZAOuoNuuxrDOTOJzGjEdZNuovItdzSHIDz0LBqMXqAmfAsl/rOZSX K7ncIhda7Hs1qTRBmqYUG8CGeAXtM2dWJF0XKsq4VmO+e8LRoV2bxFH5B V4I+cUk0xbgmwXY6V5auCrJFYBJUKGRvjB/tAGAJcGxeDbGY4J1KCR7Oc 6QKYYfZaPeNCVjaGb23/3KmL9C79I4d9rgM6RFgRB7rJkzU931c23bIjm SMiEieYsGDCCTlVz9ftXO4JLPeFGqBPPb8+u11xuKM5lSGwVeecZSKgHQ Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10935"; a="15077247" X-IronPort-AV: E=Sophos;i="6.04,307,1695711600"; d="scan'208";a="15077247" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Dec 2023 19:09:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.04,307,1695711600"; d="scan'208";a="19839131" Received: from ply01-vm-store.bj.intel.com ([10.238.153.201]) by orviesa002.jf.intel.com with ESMTP; 26 Dec 2023 19:09:32 -0800 From: Ethan Zhao To: bhelgaas@google.com, baolu.lu@linux.intel.com, dwmw2@infradead.org, will@kernel.org, robin.murphy@arm.com, lukas@wunner.de Cc: linux-pci@vger.kernel.org, iommu@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [RFC PATCH v8 4/5] iommu/vt-d: don't issue device-TLB invalidate request when device is disconnected Date: Tue, 26 Dec 2023 22:09:17 -0500 Message-Id: <20231227030918.536413-5-haifeng.zhao@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231227030918.536413-1-haifeng.zhao@linux.intel.com> References: <20231227030918.536413-1-haifeng.zhao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Except those aggressive hotplug cases - surprise remove a hotplug device while its safe removal is requested and handled in process by: 1. pull it out directly. 2. turn off its power. 3. bring the link down. 4. just died there that moment. etc, in a word, 'gone' or 'disconnected'. Mostly are regular normal safe removal and surprise removal unplug. these hot unplug handling process could be optimized for fix the ATS invalidation hang issue by calling pci_dev_is_disconnected() in function devtlb_invalidation_with_pasid() to check target device state to avoid sending meaningless ATS invalidation request to iommu when device is gone. (see IMPLEMENTATION NOTE in PCIe spec r6.1 section 10.3.1) For safe removal, device wouldn't be removed untill the whole software handling process is done, it wouldn't trigger the hard lock up issue caused by too long ATS invalidation timeout wait. in safe removal path, device state isn't set to pci_channel_io_perm_failure in pciehp_unconfigure_device() by checking 'presence' parameter, calling pci_dev_is_disconnected() in devtlb_invalidation_with_pasid() will return false there, wouldn't break the function. For surprise removal, device state is set to pci_channel_io_perm_failure in pciehp_unconfigure_device(), means device is already gone (disconnected) call pci_dev_is_disconnected() in devtlb_invalidation_with_pasid() will return true to break the function not to send ATS invalidation request to the disconnected device blindly, thus avoid the further long time waiting triggers the hard lockup. safe removal & surprise removal pciehp_ist() pciehp_handle_presence_or_link_change() pciehp_disable_slot() remove_board() pciehp_unconfigure_device(presence) Tested-by: Haorong Ye Signed-off-by: Ethan Zhao --- drivers/iommu/intel/pasid.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/iommu/intel/pasid.c b/drivers/iommu/intel/pasid.c index 1c87fb1b1039..a08bdbec90eb 100644 --- a/drivers/iommu/intel/pasid.c +++ b/drivers/iommu/intel/pasid.c @@ -481,6 +481,9 @@ devtlb_invalidation_with_pasid(struct intel_iommu *iommu, if (!info || !info->ats_enabled) return; + if (pci_dev_is_disconnected(to_pci_dev(dev))) + return; + sid = info->bus << 8 | info->devfn; qdep = info->ats_qdep; pfsid = info->pfsid; -- 2.31.1