Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp4276822rwb; Tue, 16 Aug 2022 18:44:38 -0700 (PDT) X-Google-Smtp-Source: AA6agR41pol95FSRGxuaiCW4XLyPk8LsdhUHMLxdw4fe5VuaB/zz/jpgJUl+oBk9FjX7Hn9kjOGl X-Received: by 2002:a05:6402:440f:b0:435:2e63:aca9 with SMTP id y15-20020a056402440f00b004352e63aca9mr20468423eda.162.1660700677787; Tue, 16 Aug 2022 18:44:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660700677; cv=none; d=google.com; s=arc-20160816; b=zigxh7pJNrFblb42Xr857BzcvGHCK3ADaJVaKjGAcz8YqPaZyh9LF9Hsbn+wSFF3OO ggBTDPQtjuV6FSnhWXx8Gz/oo5u63ElYS6X4oAlh6LFc318Jnk2fPKJKMaR/ydJMalj/ 6hDhZAKv9VyeNVLdznvGMNym5KBrkPuyCWK6diu0rz+uaTz7EofBLQhnKSpPfG6vbqIA uJ0nJXc6fd6F2VtRaWuKbidtIxF1qm81nzzIlPuVbJyNj5e5XkOb0G3lMHCF6gr31MiB Zv2/+2VNIsvMpDpZvrWAAoMOWPePmyaNS1K/+PYJ3u1Zvm6zXOimovWFc5suwSOpTBx5 ugpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=DXPIh+HsJ0fLHDUhZcuY9Ls63x+nFWYSwjHWXJyMxVM=; b=EDTX5Jkeoy9xpaHnGfW6iIpxmlVKnfJOrQ3HMSHBvoMKNywao4aM4ii5v9zdK0CuPL 8b8M5N9gB72T0qOKtf0hPce5SbHfR5+ojrKRKvJoeoySqEfgqR+Wxsv8lbwbtlP4hjOC WY8SvE1YM255z/q+u8M8l2kFy4ayTBCIjFUeXlxIMZfb1wirXVENkXG7dZjAZYg+UiCw wOfj/5n8IUCVy3kQWxztFDP0AKrYoVgbVUOc9OC7QVwBRpNhM/8WQX3Q3584h9sQU1p7 uXuP9HLCry7r7CMcDuxbNwo57obKeHC8H80uFDWLm+ZI3HD3m+ikw1LMEZWjmg3chl4d ZMKQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=iLACEwv1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id jg26-20020a170907971a00b0072b57c1f238si11250160ejc.291.2022.08.16.18.44.11; Tue, 16 Aug 2022 18:44:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=iLACEwv1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238149AbiHQB0M (ORCPT + 99 others); Tue, 16 Aug 2022 21:26:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52870 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232601AbiHQB0K (ORCPT ); Tue, 16 Aug 2022 21:26:10 -0400 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 743D175495; Tue, 16 Aug 2022 18:26:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1660699569; x=1692235569; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Do6sVtxouBaogNOhnjSvTVEDqqNan3ooGCy6TMbkYzE=; b=iLACEwv1iZoquRfbPKvdhcyrPzfUqp79d4BKExhubKTzErFZ+mvofVss JM02RkMf5XGMk1xRCJi3tUufe9pfu2XiEcCA+z2ssqzlfZMo05rhD9krc RQs5NynDbygIhj4CQgqGeSg3NAKuTL8ZJnrRPfe19oVnVeFHXY/iQURC+ ZfPv6bXwrJkS23fHE3e8XuaF2yNGqi73jPMxuyJm+pelDecXqZ0mxfVEL 72LtazBNORmaNRC+FiI6Uk+k54IeVce6K+pl+81+CqQkekeg1ANvcA3Kl PWYlNUghNvkXQprUh+Lr2lyixKYbfE32c2OhsQNbTGmK+Q2QJANBSC5H0 g==; X-IronPort-AV: E=McAfee;i="6400,9594,10441"; a="293649199" X-IronPort-AV: E=Sophos;i="5.93,242,1654585200"; d="scan'208";a="293649199" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Aug 2022 18:26:09 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,242,1654585200"; d="scan'208";a="696587895" Received: from allen-box.sh.intel.com ([10.239.159.48]) by FMSMGA003.fm.intel.com with ESMTP; 16 Aug 2022 18:26:03 -0700 From: Lu Baolu To: Joerg Roedel , Jason Gunthorpe , Christoph Hellwig , Bjorn Helgaas , Kevin Tian , Ashok Raj , Will Deacon , Robin Murphy , Jean-Philippe Brucker , Dave Jiang , Vinod Koul Cc: Eric Auger , Liu Yi L , Jacob jun Pan , Zhangfei Gao , Zhu Tony , iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Lu Baolu Subject: [PATCH v11 04/13] PCI: Allow PASID only when ACS enforced on upstreaming path Date: Wed, 17 Aug 2022 09:20:15 +0800 Message-Id: <20220817012024.3251276-5-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220817012024.3251276-1-baolu.lu@linux.intel.com> References: <20220817012024.3251276-1-baolu.lu@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some configurations of the PCI fabric will route device originated TLP packets based on the memory addresses. These configurations are incompatible with PASID as the PASID packets form a distinct address space. For instance, any configuration where switches are present without ACS enabled is incompatible. This enhances the pci_enable_pasid() interface by requiring the ACS to support Source Validation, Request Redirection, Completer Redirection, and Upstream Forwarding. This effectively means that devices cannot spoof their requester ID, requests and completions cannot be redirected, and all transactions are forwarded upstream, even as it passes through a bridge where the target device is downstream. Suggested-by: Jason Gunthorpe Suggested-by: Kevin Tian Signed-off-by: Lu Baolu --- drivers/pci/ats.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c index c967ad6e2626..0715e48e7973 100644 --- a/drivers/pci/ats.c +++ b/drivers/pci/ats.c @@ -382,6 +382,11 @@ int pci_enable_pasid(struct pci_dev *pdev, int features) if (!pasid) return -EINVAL; + if (!pci_acs_path_enabled(pdev, NULL, + PCI_ACS_SV | PCI_ACS_RR | + PCI_ACS_CR | PCI_ACS_UF)) + return -EINVAL; + pci_read_config_word(pdev, pasid + PCI_PASID_CAP, &supported); supported &= PCI_PASID_CAP_EXEC | PCI_PASID_CAP_PRIV; -- 2.25.1