Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp4055690rwd; Mon, 29 May 2023 23:04:28 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7WEzlaZd900sv2cCTrsrIhU3XKrOQ4hmw7dmnERwiCSnqMqFIEAO6a0FEuuvIpMehXmOF/ X-Received: by 2002:a05:6a20:7d96:b0:10c:ef9f:ddbd with SMTP id v22-20020a056a207d9600b0010cef9fddbdmr1629667pzj.8.1685426667730; Mon, 29 May 2023 23:04:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685426667; cv=none; d=google.com; s=arc-20160816; b=y5PAKo8ubcYcQlyM3O+QX6byYArs7YomHTRlVHhABRLs5hnODID1vCFMkRXdBKB9tk 4TS0AyNhxnf7QfKMKa5F9Ci5EnCWGuUtIK2tNSfDlEZPPa6nGT6z3Jfr2T20I1Klru0Q 4FZmL4ezJIjywK3JPppT04IY6sI09kHMpE13KyHcXtPAla/QauYTqrS5axCJSNYiaZ0P vRIqniztfV6vv4YNkDSdFWvQ0vPAaxJ28j5uS9ClEW96uyrbzOxtI1L7y71qLgwfmZpE Htdc+l+bjaa42V4Zw/L4Cvfli4CWGod5n894vIGEkKlUbGxhagnHSwJ/qKDYfGSVyvHy OKdg== 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=IWqc0LkXCG0otrlAgLeg7p/RG2euoxDAGCH9seC84Is=; b=ghG906AItcFMy/LjrYOA5SG78HLnDA/jDxeyI9Qz3VTTvnBSIiWh02XE10+4TIKl5X wphuKZnbaHctOUvSYrmy61Ynfu6pmWbecRFQLWcKxesa9IwN+97dkafdBGZ2F6j1EGG2 3ipz/dkMfq+SzNtw9o1RUc2fDKv1J9fNKuJR0BsWA90bqzITnN6SGtZ1oDN7B21WvRKq 7TdYjR2yHT8hjTTSAER0cSelGHXVvaYUe79kZAhaMw4GK81kvRlxQgDy6SD06aQLk5vq y2Di0J2WuAZco6FOBIhXmo3xgtfdMm+rxMNykEEWeZwM0aN0OIYos4gqNgxHGB2MPmsC 4L6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=GtToZCRE; 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 71-20020a63004a000000b0053fb51b3d65si688044pga.504.2023.05.29.23.04.12; Mon, 29 May 2023 23:04:27 -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=GtToZCRE; 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 S229961AbjE3Fiu (ORCPT + 99 others); Tue, 30 May 2023 01:38:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42384 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229540AbjE3Fip (ORCPT ); Tue, 30 May 2023 01:38:45 -0400 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5DDEF10A; Mon, 29 May 2023 22:38:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1685425119; x=1716961119; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=h1z/1a3RfZ5jKSl5h5yWsantwr32xIn20gPZtjOFYMo=; b=GtToZCREpNKxc5SOl7DuRNoIq/Tp6XopyV242inU8cT6RZgUVSrCpZf1 UqJCSWpsu4+ZyuG66lcsUcbWy+Ctzv+9YUjzKSq9hf/4DkMVhuQqiA2zh w6Tz8F/FEb7jw2SVTGM/Kh9PbLQnkRcrqRAL5TCE0Nc8hiP84UZ5M1KDz R8SozzEY4ctEx6K62Byy0FLHVqrRUia214D/gVtKm4jyOFYeCdLuOwYVU u4NaPJFsBfboRpXzXI2YpW6ydK0krBeKjUJbMA2A2aMyA9jc7QP52aBwl xeYpVyXvyvM6mxVmmi0ByJ7ShEaQVh0IQV7EBtU6amqHzVNNfrwJl36RJ A==; X-IronPort-AV: E=McAfee;i="6600,9927,10725"; a="420579666" X-IronPort-AV: E=Sophos;i="6.00,203,1681196400"; d="scan'208";a="420579666" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 May 2023 22:38:39 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10725"; a="739369506" X-IronPort-AV: E=Sophos;i="6.00,203,1681196400"; d="scan'208";a="739369506" Received: from allen-box.sh.intel.com ([10.239.159.127]) by orsmga001.jf.intel.com with ESMTP; 29 May 2023 22:38:36 -0700 From: Lu Baolu To: Jason Gunthorpe , Kevin Tian , Joerg Roedel , Will Deacon , Robin Murphy , Jean-Philippe Brucker , Nicolin Chen , Yi Liu , Jacob Pan Cc: iommu@lists.linux.dev, linux-kselftest@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, Lu Baolu Subject: [RFC PATCHES 04/17] iommu: Pass device parameter to iopf handler Date: Tue, 30 May 2023 13:37:11 +0800 Message-Id: <20230530053724.232765-5-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230530053724.232765-1-baolu.lu@linux.intel.com> References: <20230530053724.232765-1-baolu.lu@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.5 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 So that IOMMUFD can route the io page fault to the user space with the device id, which was generated when the user space bound the device to an IOAS. Signed-off-by: Lu Baolu --- include/linux/iommu.h | 2 ++ drivers/iommu/iommu-sva.h | 5 +++-- drivers/iommu/io-pgfault.c | 2 +- drivers/iommu/iommu-sva.c | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/include/linux/iommu.h b/include/linux/iommu.h index f554328528bc..f69ac54dc583 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -254,6 +254,7 @@ struct iommu_domain { struct iommu_domain_geometry geometry; struct iommu_dma_cookie *iova_cookie; enum iommu_page_response_code (*iopf_handler)(struct iommu_fault *fault, + struct device *dev, void *data); void *fault_data; union { @@ -276,6 +277,7 @@ static inline bool iommu_is_dma_domain(struct iommu_domain *domain) static inline void iommu_domain_set_iopf_handler(struct iommu_domain *domain, enum iommu_page_response_code (*handler)(struct iommu_fault *fault, + struct device *dev, void *data), void *data) { diff --git a/drivers/iommu/iommu-sva.h b/drivers/iommu/iommu-sva.h index 54946b5a7caf..5333d6a26047 100644 --- a/drivers/iommu/iommu-sva.h +++ b/drivers/iommu/iommu-sva.h @@ -23,7 +23,8 @@ struct iopf_queue *iopf_queue_alloc(const char *name); void iopf_queue_free(struct iopf_queue *queue); int iopf_queue_discard_partial(struct iopf_queue *queue); enum iommu_page_response_code -iommu_sva_handle_iopf(struct iommu_fault *fault, void *data); +iommu_sva_handle_iopf(struct iommu_fault *fault, + struct device *dev, void *data); #else /* CONFIG_IOMMU_SVA */ static inline int iommu_queue_iopf(struct iommu_fault *fault, void *cookie) @@ -63,7 +64,7 @@ static inline int iopf_queue_discard_partial(struct iopf_queue *queue) } static inline enum iommu_page_response_code -iommu_sva_handle_iopf(struct iommu_fault *fault, void *data) +iommu_sva_handle_iopf(struct iommu_fault *fault, struct device *dev, void *data) { return IOMMU_PAGE_RESP_INVALID; } diff --git a/drivers/iommu/io-pgfault.c b/drivers/iommu/io-pgfault.c index 83f8055a0e09..dedc2ea70970 100644 --- a/drivers/iommu/io-pgfault.c +++ b/drivers/iommu/io-pgfault.c @@ -88,7 +88,7 @@ static void iopf_handler(struct work_struct *work) * faults in the group if there is an error. */ if (status == IOMMU_PAGE_RESP_SUCCESS) - status = domain->iopf_handler(&iopf->fault, + status = domain->iopf_handler(&iopf->fault, group->dev, domain->fault_data); if (!(iopf->fault.prm.flags & diff --git a/drivers/iommu/iommu-sva.c b/drivers/iommu/iommu-sva.c index 9821bc44f5ac..02574a49275a 100644 --- a/drivers/iommu/iommu-sva.c +++ b/drivers/iommu/iommu-sva.c @@ -157,7 +157,7 @@ EXPORT_SYMBOL_GPL(iommu_sva_get_pasid); * I/O page fault handler for SVA */ enum iommu_page_response_code -iommu_sva_handle_iopf(struct iommu_fault *fault, void *data) +iommu_sva_handle_iopf(struct iommu_fault *fault, struct device *dev, void *data) { vm_fault_t ret; struct vm_area_struct *vma; -- 2.34.1