From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 82C7FC4BA24 for ; Wed, 26 Feb 2020 19:34:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5C5A024672 for ; Wed, 26 Feb 2020 19:34:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727258AbgBZTeb (ORCPT ); Wed, 26 Feb 2020 14:34:31 -0500 Received: from mga18.intel.com ([134.134.136.126]:6427 "EHLO mga18.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727238AbgBZTea (ORCPT ); Wed, 26 Feb 2020 14:34:30 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 Feb 2020 11:34:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,489,1574150400"; d="scan'208";a="231514911" Received: from jacob-builder.jf.intel.com (HELO jacob-builder) ([10.7.199.155]) by orsmga008.jf.intel.com with ESMTP; 26 Feb 2020 11:34:29 -0800 Date: Wed, 26 Feb 2020 11:39:59 -0800 From: Jacob Pan To: Jean-Philippe Brucker Cc: iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org, linux-mm@kvack.org, joro@8bytes.org, robh+dt@kernel.org, mark.rutland@arm.com, catalin.marinas@arm.com, will@kernel.org, robin.murphy@arm.com, kevin.tian@intel.com, baolu.lu@linux.intel.com, Jonathan.Cameron@huawei.com, christian.koenig@amd.com, yi.l.liu@intel.com, zhangfei.gao@linaro.org, Jean-Philippe Brucker , jacob.jun.pan@linux.intel.com Subject: Re: [PATCH v4 06/26] iommu/sva: Register page fault handler Message-ID: <20200226113959.62621098@jacob-builder> In-Reply-To: <20200224182401.353359-7-jean-philippe@linaro.org> References: <20200224182401.353359-1-jean-philippe@linaro.org> <20200224182401.353359-7-jean-philippe@linaro.org> Organization: OTC X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.30; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org On Mon, 24 Feb 2020 19:23:41 +0100 Jean-Philippe Brucker wrote: > From: Jean-Philippe Brucker > > When enabling SVA, register the fault handler. Device driver will > register an I/O page fault queue before or after calling > iommu_sva_enable. The fault queue must be flushed before any io_mm is > freed, to make sure that its PASID isn't used in any fault queue, and > can be reallocated. Add iopf_queue_flush() calls in a few strategic > locations. > > Signed-off-by: Jean-Philippe Brucker > --- > drivers/iommu/Kconfig | 1 + > drivers/iommu/iommu-sva.c | 16 ++++++++++++++++ > 2 files changed, 17 insertions(+) > > diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig > index e4a42e1708b4..211684e785ea 100644 > --- a/drivers/iommu/Kconfig > +++ b/drivers/iommu/Kconfig > @@ -106,6 +106,7 @@ config IOMMU_DMA > config IOMMU_SVA > bool > select IOASID > + select IOMMU_PAGE_FAULT > select IOMMU_API > select MMU_NOTIFIER > > diff --git a/drivers/iommu/iommu-sva.c b/drivers/iommu/iommu-sva.c > index bfd0c477f290..494ca0824e4b 100644 > --- a/drivers/iommu/iommu-sva.c > +++ b/drivers/iommu/iommu-sva.c > @@ -366,6 +366,8 @@ static void io_mm_release(struct mmu_notifier > *mn, struct mm_struct *mm) dev_WARN(dev, "possible leak of PASID %u", > io_mm->pasid); > > + iopf_queue_flush_dev(dev, io_mm->pasid); > + > /* unbind() frees the bond, we just detach it */ > io_mm_detach_locked(bond); > } > @@ -442,11 +444,20 @@ static void iommu_sva_unbind_locked(struct > iommu_bond *bond) > void iommu_sva_unbind_generic(struct iommu_sva *handle) > { > + int pasid; > struct iommu_param *param = handle->dev->iommu_param; > > if (WARN_ON(!param)) > return; > > + /* > + * Caller stopped the device from issuing PASIDs, now make > sure they are > + * out of the fault queue. > + */ > + pasid = iommu_sva_get_pasid_generic(handle); > + if (pasid != IOMMU_PASID_INVALID) > + iopf_queue_flush_dev(handle->dev, pasid); > + I have an ordering concern. The caller can only stop the device issuing page request but there will be in-flight request inside the IOMMU. If we flush here before clearing the PASID context, there might be new request coming in before the detach. How about detach first then flush? Then anything come after the detach would be faults. Flush will be clean. > mutex_lock(¶m->sva_lock); > mutex_lock(&iommu_sva_lock); > iommu_sva_unbind_locked(to_iommu_bond(handle)); > @@ -484,6 +495,10 @@ int iommu_sva_enable(struct device *dev, struct > iommu_sva_param *sva_param) goto err_unlock; > } > > + ret = iommu_register_device_fault_handler(dev, > iommu_queue_iopf, dev); > + if (ret) > + goto err_unlock; > + > dev->iommu_param->sva_param = new_param; > mutex_unlock(¶m->sva_lock); > return 0; > @@ -521,6 +536,7 @@ int iommu_sva_disable(struct device *dev) > goto out_unlock; > } > > + iommu_unregister_device_fault_handler(dev); > kfree(param->sva_param); > param->sva_param = NULL; > out_unlock: [Jacob Pan] From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 91752C4BA24 for ; Wed, 26 Feb 2020 19:34:34 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6274024672 for ; Wed, 26 Feb 2020 19:34:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6274024672 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 395568492B; Wed, 26 Feb 2020 19:34:34 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id g81j+pgHndQC; Wed, 26 Feb 2020 19:34:33 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by hemlock.osuosl.org (Postfix) with ESMTP id 6F8C987B0E; Wed, 26 Feb 2020 19:34:33 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 62E5DC08A0; Wed, 26 Feb 2020 19:34:33 +0000 (UTC) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id BDEFEC0177 for ; Wed, 26 Feb 2020 19:34:31 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id AC54185132 for ; Wed, 26 Feb 2020 19:34:31 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RtVnWZOfZ59S for ; Wed, 26 Feb 2020 19:34:31 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by fraxinus.osuosl.org (Postfix) with ESMTPS id EF8A184D24 for ; Wed, 26 Feb 2020 19:34:30 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 Feb 2020 11:34:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,489,1574150400"; d="scan'208";a="231514911" Received: from jacob-builder.jf.intel.com (HELO jacob-builder) ([10.7.199.155]) by orsmga008.jf.intel.com with ESMTP; 26 Feb 2020 11:34:29 -0800 Date: Wed, 26 Feb 2020 11:39:59 -0800 From: Jacob Pan To: Jean-Philippe Brucker Subject: Re: [PATCH v4 06/26] iommu/sva: Register page fault handler Message-ID: <20200226113959.62621098@jacob-builder> In-Reply-To: <20200224182401.353359-7-jean-philippe@linaro.org> References: <20200224182401.353359-1-jean-philippe@linaro.org> <20200224182401.353359-7-jean-philippe@linaro.org> Organization: OTC X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.30; x86_64-pc-linux-gnu) MIME-Version: 1.0 Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, kevin.tian@intel.com, Jean-Philippe Brucker , linux-pci@vger.kernel.org, robin.murphy@arm.com, linux-mm@kvack.org, iommu@lists.linux-foundation.org, robh+dt@kernel.org, catalin.marinas@arm.com, zhangfei.gao@linaro.org, will@kernel.org, christian.koenig@amd.com, linux-arm-kernel@lists.infradead.org X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" On Mon, 24 Feb 2020 19:23:41 +0100 Jean-Philippe Brucker wrote: > From: Jean-Philippe Brucker > > When enabling SVA, register the fault handler. Device driver will > register an I/O page fault queue before or after calling > iommu_sva_enable. The fault queue must be flushed before any io_mm is > freed, to make sure that its PASID isn't used in any fault queue, and > can be reallocated. Add iopf_queue_flush() calls in a few strategic > locations. > > Signed-off-by: Jean-Philippe Brucker > --- > drivers/iommu/Kconfig | 1 + > drivers/iommu/iommu-sva.c | 16 ++++++++++++++++ > 2 files changed, 17 insertions(+) > > diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig > index e4a42e1708b4..211684e785ea 100644 > --- a/drivers/iommu/Kconfig > +++ b/drivers/iommu/Kconfig > @@ -106,6 +106,7 @@ config IOMMU_DMA > config IOMMU_SVA > bool > select IOASID > + select IOMMU_PAGE_FAULT > select IOMMU_API > select MMU_NOTIFIER > > diff --git a/drivers/iommu/iommu-sva.c b/drivers/iommu/iommu-sva.c > index bfd0c477f290..494ca0824e4b 100644 > --- a/drivers/iommu/iommu-sva.c > +++ b/drivers/iommu/iommu-sva.c > @@ -366,6 +366,8 @@ static void io_mm_release(struct mmu_notifier > *mn, struct mm_struct *mm) dev_WARN(dev, "possible leak of PASID %u", > io_mm->pasid); > > + iopf_queue_flush_dev(dev, io_mm->pasid); > + > /* unbind() frees the bond, we just detach it */ > io_mm_detach_locked(bond); > } > @@ -442,11 +444,20 @@ static void iommu_sva_unbind_locked(struct > iommu_bond *bond) > void iommu_sva_unbind_generic(struct iommu_sva *handle) > { > + int pasid; > struct iommu_param *param = handle->dev->iommu_param; > > if (WARN_ON(!param)) > return; > > + /* > + * Caller stopped the device from issuing PASIDs, now make > sure they are > + * out of the fault queue. > + */ > + pasid = iommu_sva_get_pasid_generic(handle); > + if (pasid != IOMMU_PASID_INVALID) > + iopf_queue_flush_dev(handle->dev, pasid); > + I have an ordering concern. The caller can only stop the device issuing page request but there will be in-flight request inside the IOMMU. If we flush here before clearing the PASID context, there might be new request coming in before the detach. How about detach first then flush? Then anything come after the detach would be faults. Flush will be clean. > mutex_lock(¶m->sva_lock); > mutex_lock(&iommu_sva_lock); > iommu_sva_unbind_locked(to_iommu_bond(handle)); > @@ -484,6 +495,10 @@ int iommu_sva_enable(struct device *dev, struct > iommu_sva_param *sva_param) goto err_unlock; > } > > + ret = iommu_register_device_fault_handler(dev, > iommu_queue_iopf, dev); > + if (ret) > + goto err_unlock; > + > dev->iommu_param->sva_param = new_param; > mutex_unlock(¶m->sva_lock); > return 0; > @@ -521,6 +536,7 @@ int iommu_sva_disable(struct device *dev) > goto out_unlock; > } > > + iommu_unregister_device_fault_handler(dev); > kfree(param->sva_param); > param->sva_param = NULL; > out_unlock: [Jacob Pan] _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8EECC4BA21 for ; Wed, 26 Feb 2020 19:34:39 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 988CC24672 for ; Wed, 26 Feb 2020 19:34:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="cLdLI3Ms" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 988CC24672 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=2b/vz9UwxJgxCEMUrmgecArhWNpft9/2s/6BlmKHFC4=; b=cLdLI3MsdQVDRG /KiqkRWBeySZja8y9J6NzG68YlUhyLNoHFk7bjUdrVgvwkTcMVwfHNktcKbgR6deW0nng/B778k2D YJr/aedvLiDHAKbxK87DyGt/zf/9sTYaQFn0OAdzdkaDoDPn00XnnMHDiozLQbMMcPVNA4iK+aww5 FdD28jITK6516XLw6Lo6NXYV98DgRnh2R3IcyLLDe2Fcl7RBUWLEClzOE9V8HOFtk9juFT4q6Xf9f u+7dgTfz4AYvZp8y75a8FPIn+dijeI/K8G0rQqIXOHEImblmd1qjDhWIBxDABgsvYiu85yczC6xyu J+nRkyPvn8NpC1sR1upQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j72S0-0006ye-TD; Wed, 26 Feb 2020 19:34:32 +0000 Received: from mga05.intel.com ([192.55.52.43]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j72Ry-0006yH-VM for linux-arm-kernel@lists.infradead.org; Wed, 26 Feb 2020 19:34:32 +0000 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 Feb 2020 11:34:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,489,1574150400"; d="scan'208";a="231514911" Received: from jacob-builder.jf.intel.com (HELO jacob-builder) ([10.7.199.155]) by orsmga008.jf.intel.com with ESMTP; 26 Feb 2020 11:34:29 -0800 Date: Wed, 26 Feb 2020 11:39:59 -0800 From: Jacob Pan To: Jean-Philippe Brucker Subject: Re: [PATCH v4 06/26] iommu/sva: Register page fault handler Message-ID: <20200226113959.62621098@jacob-builder> In-Reply-To: <20200224182401.353359-7-jean-philippe@linaro.org> References: <20200224182401.353359-1-jean-philippe@linaro.org> <20200224182401.353359-7-jean-philippe@linaro.org> Organization: OTC X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.30; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200226_113431_022882_A07B52AB X-CRM114-Status: GOOD ( 19.88 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, kevin.tian@intel.com, yi.l.liu@intel.com, jacob.jun.pan@linux.intel.com, Jean-Philippe Brucker , linux-pci@vger.kernel.org, joro@8bytes.org, Jonathan.Cameron@huawei.com, robin.murphy@arm.com, linux-mm@kvack.org, iommu@lists.linux-foundation.org, robh+dt@kernel.org, catalin.marinas@arm.com, zhangfei.gao@linaro.org, will@kernel.org, christian.koenig@amd.com, linux-arm-kernel@lists.infradead.org, baolu.lu@linux.intel.com Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Mon, 24 Feb 2020 19:23:41 +0100 Jean-Philippe Brucker wrote: > From: Jean-Philippe Brucker > > When enabling SVA, register the fault handler. Device driver will > register an I/O page fault queue before or after calling > iommu_sva_enable. The fault queue must be flushed before any io_mm is > freed, to make sure that its PASID isn't used in any fault queue, and > can be reallocated. Add iopf_queue_flush() calls in a few strategic > locations. > > Signed-off-by: Jean-Philippe Brucker > --- > drivers/iommu/Kconfig | 1 + > drivers/iommu/iommu-sva.c | 16 ++++++++++++++++ > 2 files changed, 17 insertions(+) > > diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig > index e4a42e1708b4..211684e785ea 100644 > --- a/drivers/iommu/Kconfig > +++ b/drivers/iommu/Kconfig > @@ -106,6 +106,7 @@ config IOMMU_DMA > config IOMMU_SVA > bool > select IOASID > + select IOMMU_PAGE_FAULT > select IOMMU_API > select MMU_NOTIFIER > > diff --git a/drivers/iommu/iommu-sva.c b/drivers/iommu/iommu-sva.c > index bfd0c477f290..494ca0824e4b 100644 > --- a/drivers/iommu/iommu-sva.c > +++ b/drivers/iommu/iommu-sva.c > @@ -366,6 +366,8 @@ static void io_mm_release(struct mmu_notifier > *mn, struct mm_struct *mm) dev_WARN(dev, "possible leak of PASID %u", > io_mm->pasid); > > + iopf_queue_flush_dev(dev, io_mm->pasid); > + > /* unbind() frees the bond, we just detach it */ > io_mm_detach_locked(bond); > } > @@ -442,11 +444,20 @@ static void iommu_sva_unbind_locked(struct > iommu_bond *bond) > void iommu_sva_unbind_generic(struct iommu_sva *handle) > { > + int pasid; > struct iommu_param *param = handle->dev->iommu_param; > > if (WARN_ON(!param)) > return; > > + /* > + * Caller stopped the device from issuing PASIDs, now make > sure they are > + * out of the fault queue. > + */ > + pasid = iommu_sva_get_pasid_generic(handle); > + if (pasid != IOMMU_PASID_INVALID) > + iopf_queue_flush_dev(handle->dev, pasid); > + I have an ordering concern. The caller can only stop the device issuing page request but there will be in-flight request inside the IOMMU. If we flush here before clearing the PASID context, there might be new request coming in before the detach. How about detach first then flush? Then anything come after the detach would be faults. Flush will be clean. > mutex_lock(¶m->sva_lock); > mutex_lock(&iommu_sva_lock); > iommu_sva_unbind_locked(to_iommu_bond(handle)); > @@ -484,6 +495,10 @@ int iommu_sva_enable(struct device *dev, struct > iommu_sva_param *sva_param) goto err_unlock; > } > > + ret = iommu_register_device_fault_handler(dev, > iommu_queue_iopf, dev); > + if (ret) > + goto err_unlock; > + > dev->iommu_param->sva_param = new_param; > mutex_unlock(¶m->sva_lock); > return 0; > @@ -521,6 +536,7 @@ int iommu_sva_disable(struct device *dev) > goto out_unlock; > } > > + iommu_unregister_device_fault_handler(dev); > kfree(param->sva_param); > param->sva_param = NULL; > out_unlock: [Jacob Pan] _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel