Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp1876147rwl; Wed, 12 Apr 2023 21:08:25 -0700 (PDT) X-Google-Smtp-Source: AKy350YUTY1vSLRPbVI66gjWjmud27r1Y2i8qtfrQRNNl4jXtyvFxfcHMRgAULUjad8moLm9nzxq X-Received: by 2002:a17:906:7d86:b0:94a:62d4:91b8 with SMTP id v6-20020a1709067d8600b0094a62d491b8mr1120062ejo.11.1681358905392; Wed, 12 Apr 2023 21:08:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681358905; cv=none; d=google.com; s=arc-20160816; b=FioNjRb5qQqDqd0RqcjougRQ5VZjYk/haDlAy40T/W9cZRNcWqRipJXN4LPTzifBML B3YT/g9v/1T47xpjv72HlIRwnYHUVRRAcXhieUke5SubrlMfnOs+KtRRN1rf/YSebGxF VjXnQasNGkXRzXjwCeM174jg7/6DdTcuhhhUgLgapzqiGWzVMRsBl0zw7J/CXwmap8q/ 3nQgO1wSFUeaKTBIMz3Nrs9SQC0/Oij2NoaKfToVzk7DHz7dHM7ugLPwRsiA3V0nYU2+ vBaoGpyZ02pTvMau6c4D6n+UU1EUCsEbGJAmaKeOmrkTWVGpnmjuSwk0HdU1pdbvWZXI BobQ== 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=HzKsz7jNlWnzWgPd2vx0mLE6A+aXguSuShUgDyco2Cg=; b=sC15QCRbDItrlT7pqtAEPdwzqbKIhC2PbDS0unsX1vC+Ra89aBibiOxy0IlHANVHIw bbsPyAGK2J6jGmpmwDFm5quiDBPnYLENGw/IaTur3WGRHJ4VUkkCwCugjT2FYyZl+8vr IJVpwxI1M6ZCcxCADfOzFgLPgaMXGSlz23glNMelAZjujFQXNw0kODKYl8JOgAf5h/x5 nQretUnWs/PvEczZr7zvnjtvytNriYOugp3RpZtgU2oVfqDB98MyOcWEanWQg837yzGA JnM6rNE2SghP8mioVJoyBoWivLBFO9LOhY/0J1YS7Zh1SzvqFVpjAsCAw93O2Cp7xbYs BNwg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="TiB2xdO/"; 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 p21-20020a170906229500b0094a8493b52fsi737252eja.821.2023.04.12.21.07.59; Wed, 12 Apr 2023 21:08:25 -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="TiB2xdO/"; 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 S229739AbjDMEGy (ORCPT + 99 others); Thu, 13 Apr 2023 00:06:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36666 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229451AbjDMEGu (ORCPT ); Thu, 13 Apr 2023 00:06:50 -0400 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0F3A372BB for ; Wed, 12 Apr 2023 21:06:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1681358808; x=1712894808; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=rMHo8yYSBVXvdzGdpugvYObeZKKcdE/cMZKOA3T4vNU=; b=TiB2xdO/59MGPxxW+IIvYDZZAlJAgiE9qtG7sVXEwmpp5rQI73VnnwSC 1t57xhgWAOs7cn5K7h0f7eIDazrS2XywubqG7b/U0Qf9SeP6HASTG7e3x ZtXcubuNXuXPCmWnu5ynFjXjtRLBSx+ECkkvNs89tBLgzp+7eDu30dlZp IyEEH3znnQykle675V1lBheMWYbb/ynt184M4UOWTJw7HGo6HQdqcgcf7 opt/OoiU89vgY7rGlCGjkpr5ssEkpKnNi4J3+lrK4r4Apu5PSjRe/fDfv 7MiHqDOCZGYlwqDJ3QGEruE5aZ4e784HC2bWtf+N/YkrJ3yfwN7CKWyAW Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10678"; a="332786512" X-IronPort-AV: E=Sophos;i="5.98,339,1673942400"; d="scan'208";a="332786512" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Apr 2023 21:06:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10678"; a="935360969" X-IronPort-AV: E=Sophos;i="5.98,339,1673942400"; d="scan'208";a="935360969" Received: from allen-box.sh.intel.com ([10.239.159.127]) by fmsmga006.fm.intel.com with ESMTP; 12 Apr 2023 21:06:45 -0700 From: Lu Baolu To: Joerg Roedel Cc: Tina Zhang , Jacob Pan , Christophe JAILLET , iommu@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v2 02/17] iommu/vt-d: Allow SVA with device-specific IOPF Date: Thu, 13 Apr 2023 12:06:30 +0800 Message-Id: <20230413040645.46157-3-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230413040645.46157-1-baolu.lu@linux.intel.com> References: <20230413040645.46157-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, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, 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 Currently enabling SVA requires IOPF support from the IOMMU and device PCI PRI. However, some devices can handle IOPF by itself without ever sending PCI page requests nor advertising PRI capability. Allow SVA support with IOPF handled either by IOMMU (PCI PRI) or device driver (device-specific IOPF). As long as IOPF could be handled, SVA should continue to work. Reviewed-by: Kevin Tian Signed-off-by: Lu Baolu Link: https://lore.kernel.org/r/20230324120234.313643-3-baolu.lu@linux.intel.com --- drivers/iommu/intel/iommu.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 7c2f4bd33582..caf664448ee9 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -4650,7 +4650,21 @@ static int intel_iommu_enable_sva(struct device *dev) if (!(iommu->flags & VTD_FLAG_SVM_CAPABLE)) return -ENODEV; - if (!info->pasid_enabled || !info->pri_enabled || !info->ats_enabled) + if (!info->pasid_enabled || !info->ats_enabled) + return -EINVAL; + + /* + * Devices having device-specific I/O fault handling should not + * support PCI/PRI. The IOMMU side has no means to check the + * capability of device-specific IOPF. Therefore, IOMMU can only + * default that if the device driver enables SVA on a non-PRI + * device, it will handle IOPF in its own way. + */ + if (!info->pri_supported) + return 0; + + /* Devices supporting PRI should have it enabled. */ + if (!info->pri_enabled) return -EINVAL; ret = iopf_queue_add_device(iommu->iopf_queue, dev); -- 2.34.1