Received: by 2002:a05:6358:bb9e:b0:b9:5105:a5b4 with SMTP id df30csp4639685rwb; Tue, 6 Sep 2022 10:14:37 -0700 (PDT) X-Google-Smtp-Source: AA6agR5zt9ZWSCKh1+UnRCK3zv7Rhoj0Ss08vuK/7tQkPQcd7ZPMjyraO8eKri4VKLTLhJxRijmf X-Received: by 2002:a05:6402:ea1:b0:443:d90a:5d31 with SMTP id h33-20020a0564020ea100b00443d90a5d31mr48834153eda.121.1662484477502; Tue, 06 Sep 2022 10:14:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662484477; cv=none; d=google.com; s=arc-20160816; b=nYxA2nqz5WzP7oQWdBjjkmcjqFoEGgGKz2b1exh0rQNZ5/HYckGwcAWTAxN+wKZ3j0 OYud6OSxwZgSuGO4viaFJH1xFK3FZFtSFUqz5oktTF4zP51Tsgmx1jNNOSEsAismjZGA Vb4kol5NF19em3WCWnIsbYS82cu2FHTdJP9NrMhLURes5gWks1/OtU+NevmB5x7gm6cD YuikDh+l/M+xervUX2SUNAAxY2U5p9no2lf0avm3EI5etvkPL5JdiNIRX1yqWQfAVOAA kkWWZsk7hSVp7mcsBZGU2y3RQKAPy1p0kYgCuC0f7Ld6Kfssfa8bot784gxL8s9kbHii VZ/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=u9aosksAPdNjDd0bmpKVWgEojLBbOI+Pi5HIfNyLBhA=; b=ImdDn3/CrrXL3fNjmDaypVTvBJoasfgSVsvkGHE6ToMhY0Fn0pVK/RbSSPfTrFzHGW ANnoLOrWjQ9BkjNkT1EjgP5sxka1GWxiQvgvwpV95bNjgQ1lPweJW3kU+/ta2+VwZthM i+Mh64oFqZcw0uQt+v8/uZHhh2wQBdErm/QFkxSebrwDEVlN3IZA/HJrzYuDXqxgreVR D9WH8rkT7tvA7zFgk9WsvcZS7TiKuzADzkmm919gsNFnw7I+Hk2wEvi8sbUJ6sUTp8Gh pWjJm9OATgrjrMH4Sn71c408aZ8WHkuvIi23e9mnn2VTFenuPVaxHYSOK33ULsqFUIJR ri3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=viV8ASe7; 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=linaro.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id sh43-20020a1709076eab00b0073d68839890si11100809ejc.771.2022.09.06.10.14.12; Tue, 06 Sep 2022 10:14: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=@linaro.org header.s=google header.b=viV8ASe7; 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=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238221AbiIFQum (ORCPT + 99 others); Tue, 6 Sep 2022 12:50:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40100 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234413AbiIFQuW (ORCPT ); Tue, 6 Sep 2022 12:50:22 -0400 Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E4CBE81B2D for ; Tue, 6 Sep 2022 09:36:15 -0700 (PDT) Received: by mail-wr1-x42f.google.com with SMTP id b5so16311645wrr.5 for ; Tue, 06 Sep 2022 09:36:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date; bh=u9aosksAPdNjDd0bmpKVWgEojLBbOI+Pi5HIfNyLBhA=; b=viV8ASe7i5je49B5m4Tc6eMD+h4fSi5v86IpkPQdT8vTn20Ob+X0CLIzxUxQRPbD0m znLDsEJmhmjPHYJuFrOlsvSBPhi9dX7dYWU2bfVvFkdlF63b/bYiP9aswCtWqTiyV2+I ghEt9I2FaI0YWWyi98dTvJ7iH5J31HH+sJn1Xl0A4GU1hHR7dPhClC0rbayb7j75aoEZ FTliPeRmqWowBGmc4o8F37OI2aXh5EQUkVpmWlVL9Gs7dvsPgsbm95GvFM6w4aENIJkR 0B5+Yi5eqnBVKvSd63yQCaZx1dVLIkV2vaZ0eGqALNT7v41HgzW/LHyzjRoPmxEF+fyC 73Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date; bh=u9aosksAPdNjDd0bmpKVWgEojLBbOI+Pi5HIfNyLBhA=; b=GzolEdOUEvEjg8/UWVoD7PH3DCZnZVMtXpOKJzOSfqjcw/ZhSdutp/wBkX58M5ICWj KyYrMT/FYC+Do6G/7B6ebUrrz/fwxz8n5ky1WX99O7r4H/a2gkyNkGu9A4mF62jBVGeo 6757q5LuterWDjWy2OoWCXwqDQpt2VG6itMN791sH24WsQIz7vCgq4KbHYHdgZA1PaYT ARPc1GPyd9J/iIsHIm510G3LNQo1F83IZTy5r5IpjkN413SUni8ZfbM6kpgLImnrIXlZ +T3lL77G/9trdtn3gRSwqpnLz+wPwWhTVHl7rME9bt79896rXXPiuo1itSzg8df74Ajt Ivew== X-Gm-Message-State: ACgBeo0KzcnRbbkIBA+chVJFqua2AgqJVYzBdyRBKBwfJsAS9PUEM/kp 414dzxMWGNTzMPJWrKiDA86rTw== X-Received: by 2002:a05:6000:184d:b0:220:8235:132 with SMTP id c13-20020a056000184d00b0022082350132mr28396554wri.178.1662482174493; Tue, 06 Sep 2022 09:36:14 -0700 (PDT) Received: from myrica (cpc92880-cmbg19-2-0-cust679.5-4.cable.virginm.net. [82.27.106.168]) by smtp.gmail.com with ESMTPSA id q10-20020adff78a000000b0021e6277bc50sm16009172wrp.36.2022.09.06.09.36.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Sep 2022 09:36:13 -0700 (PDT) Date: Tue, 6 Sep 2022 17:36:09 +0100 From: Jean-Philippe Brucker To: Lu Baolu Cc: Joerg Roedel , Jason Gunthorpe , Christoph Hellwig , Bjorn Helgaas , Kevin Tian , Ashok Raj , Will Deacon , Robin Murphy , Jean-Philippe Brucker , Dave Jiang , Fenghua Yu , Vinod Koul , 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 Subject: Re: [PATCH v13 09/13] iommu/sva: Refactoring iommu_sva_bind/unbind_device() Message-ID: References: <20220906124458.46461-1-baolu.lu@linux.intel.com> <20220906124458.46461-10-baolu.lu@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220906124458.46461-10-baolu.lu@linux.intel.com> X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE 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 On Tue, Sep 06, 2022 at 08:44:54PM +0800, Lu Baolu wrote: > +/** > + * iommu_sva_bind_device() - Bind a process address space to a device > + * @dev: the device > + * @mm: the mm to bind, caller must hold a reference to mm_users > + * > + * Create a bond between device and address space, allowing the device to access > + * the mm using the returned PASID. If a bond already exists between @device and > + * @mm, it is returned and an additional reference is taken. Caller must call > + * iommu_sva_unbind_device() to release each reference. This isn't true anymore. How about storing handle in the domain? (Maybe also drop my Reviewed-by tags since this has changed significantly, I tend to ignore patches that have them) Thanks, Jean > + * > + * iommu_dev_enable_feature(dev, IOMMU_DEV_FEAT_SVA) must be called first, to > + * initialize the required SVA features. > + * > + * On error, returns an ERR_PTR value. > + */ > +struct iommu_sva *iommu_sva_bind_device(struct device *dev, struct mm_struct *mm) > +{ > + struct iommu_domain *domain; > + struct iommu_sva *handle; > + ioasid_t max_pasids; > + int ret; > + > + max_pasids = dev->iommu->max_pasids; > + if (!max_pasids) > + return ERR_PTR(-EOPNOTSUPP); > + > + /* Allocate mm->pasid if necessary. */ > + ret = iommu_sva_alloc_pasid(mm, 1, max_pasids - 1); > + if (ret) > + return ERR_PTR(ret); > + > + handle = kzalloc(sizeof(*handle), GFP_KERNEL); > + if (!handle) > + return ERR_PTR(-ENOMEM); > + > + mutex_lock(&iommu_sva_lock); > + /* Search for an existing domain. */ > + domain = iommu_get_domain_for_dev_pasid(dev, mm->pasid, > + IOMMU_DOMAIN_SVA); > + if (IS_ERR(domain)) { > + ret = PTR_ERR(domain); > + goto out_unlock; > + } > + > + if (domain) { > + domain->users++; > + goto out; > + } > + > + /* Allocate a new domain and set it on device pasid. */ > + domain = iommu_sva_domain_alloc(dev, mm); > + if (!domain) { > + ret = -ENOMEM; > + goto out_unlock; > + } > + > + ret = iommu_attach_device_pasid(domain, dev, mm->pasid); > + if (ret) > + goto out_free_domain; > + domain->users = 1; > +out: > + mutex_unlock(&iommu_sva_lock); > + handle->dev = dev; > + handle->domain = domain; > + > + return handle; > + > +out_free_domain: > + iommu_domain_free(domain); > +out_unlock: > + mutex_unlock(&iommu_sva_lock); > + kfree(handle); > + > + return ERR_PTR(ret); > +} > +EXPORT_SYMBOL_GPL(iommu_sva_bind_device);