Received: by 2002:a25:f815:0:0:0:0:0 with SMTP id u21csp2410368ybd; Thu, 27 Jun 2019 11:50:44 -0700 (PDT) X-Google-Smtp-Source: APXvYqytfNXEt3Trb8gcqJ0en+HxlS3bVnIuJcsjQTsGqWicXIhPy7RkuiZMaxuoQeXwdDyX4tRf X-Received: by 2002:a65:41c5:: with SMTP id b5mr5323543pgq.128.1561661444448; Thu, 27 Jun 2019 11:50:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561661444; cv=none; d=google.com; s=arc-20160816; b=Ug2yvBysH5pmWVG58PcC1pV1/ohK7TVsGYoBYTngJxUUiRC1pBQtQvbNZh47cYoSGT zrl/vfsADUSXRciAVypk2ryAQNRWYhpINI/pZv6nbGYw8TaC8auRCJhaKrOY03OiKWg5 mb0T9g6HZT2XXNAqkw88M14xKY+7OHa6yi4AE/30HNeOhwiErCCur56O1tOikyuI8Ebe qp7+fl1aH5PopBgmgN6uhIPPG/PZA7w4uHXlUtEQbUFx/6ZXI+arzkgO7995zRAHfej9 JixLo1Iz3cTQCFfQBvDPpfHlumqeWnSPB5k6VVt3VXfrPHylb8kSDXNS0dUGvhuneut/ z70g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:subject:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to; bh=6K6g+obhxWmhbEx3WhFMIJ4bLzgnM3IuGyXdgFEaFJY=; b=dpkuXyq8lm3oOVEtFzvcp5TD/LYchLiCUfxthH2B61YRTuVZzRi3T2+OwCTBEDOhST 9aCanY3fGkhExMVYGxAGHWK9VhPu7Ve2jAdX1rAh2jvUsWCBm6VZyjpsCfxgaMuYjWTK 38IMm72NRFiHh8fMTKE+37LkWdwYIt2LICH/vYwRk9en+bhibe8StdkTFkefXLf9AVQc 7/Xynn/Bu2QHJnNBP4zXvJ7FudREhMR8vAXg8csiyqZ7E9bKMKof84Yij9rCThPk9Xvi CzsNjUxzVDeQ7kCcykS/vNzNemDzPHyZ8NE31E3b1FkzZ0slq0fU8CaxZ8TLIY847WQE TfCA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h125si326120pfb.176.2019.06.27.11.50.28; Thu, 27 Jun 2019 11:50:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726597AbfF0St4 (ORCPT + 99 others); Thu, 27 Jun 2019 14:49:56 -0400 Received: from ale.deltatee.com ([207.54.116.67]:39894 "EHLO ale.deltatee.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726465AbfF0St4 (ORCPT ); Thu, 27 Jun 2019 14:49:56 -0400 Received: from s01061831bf6ec98c.cg.shawcable.net ([68.147.80.180] helo=[192.168.6.132]) by ale.deltatee.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1hgZSz-0004rJ-D3; Thu, 27 Jun 2019 12:49:54 -0600 To: Christoph Hellwig , Dan Williams , =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , Jason Gunthorpe , Ben Skeggs Cc: linux-nvdimm@lists.01.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-mm@kvack.org, nouveau@lists.freedesktop.org References: <20190626122724.13313-1-hch@lst.de> <20190626122724.13313-18-hch@lst.de> From: Logan Gunthorpe Message-ID: <580609fd-5ef2-bae4-e8f8-adc1eb0314a1@deltatee.com> Date: Thu, 27 Jun 2019 12:49:47 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 MIME-Version: 1.0 In-Reply-To: <20190626122724.13313-18-hch@lst.de> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-SA-Exim-Connect-IP: 68.147.80.180 X-SA-Exim-Rcpt-To: nouveau@lists.freedesktop.org, linux-mm@kvack.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvdimm@lists.01.org, bskeggs@redhat.com, jgg@mellanox.com, jglisse@redhat.com, dan.j.williams@intel.com, hch@lst.de X-SA-Exim-Mail-From: logang@deltatee.com X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com X-Spam-Level: X-Spam-Status: No, score=-8.7 required=5.0 tests=ALL_TRUSTED,BAYES_00, GREYLIST_ISWHITE,MYRULES_FREE autolearn=ham autolearn_force=no version=3.4.2 Subject: Re: [PATCH 17/25] PCI/P2PDMA: use the dev_pagemap internal refcount X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: Yes (on ale.deltatee.com) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2019-06-26 6:27 a.m., Christoph Hellwig wrote: > The functionality is identical to the one currently open coded in > p2pdma.c. > > Signed-off-by: Christoph Hellwig Reviewed-by: Logan Gunthorpe Also, for the P2PDMA changes in this series: Tested-by: Logan Gunthorpe I've ran this series through my simple P2PDMA tests. Logan > --- > drivers/pci/p2pdma.c | 57 ++++---------------------------------------- > 1 file changed, 4 insertions(+), 53 deletions(-) > > diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c > index ebd8ce3bba2e..608f84df604a 100644 > --- a/drivers/pci/p2pdma.c > +++ b/drivers/pci/p2pdma.c > @@ -24,12 +24,6 @@ struct pci_p2pdma { > bool p2pmem_published; > }; > > -struct p2pdma_pagemap { > - struct dev_pagemap pgmap; > - struct percpu_ref ref; > - struct completion ref_done; > -}; > - > static ssize_t size_show(struct device *dev, struct device_attribute *attr, > char *buf) > { > @@ -78,32 +72,6 @@ static const struct attribute_group p2pmem_group = { > .name = "p2pmem", > }; > > -static struct p2pdma_pagemap *to_p2p_pgmap(struct percpu_ref *ref) > -{ > - return container_of(ref, struct p2pdma_pagemap, ref); > -} > - > -static void pci_p2pdma_percpu_release(struct percpu_ref *ref) > -{ > - struct p2pdma_pagemap *p2p_pgmap = to_p2p_pgmap(ref); > - > - complete(&p2p_pgmap->ref_done); > -} > - > -static void pci_p2pdma_percpu_kill(struct dev_pagemap *pgmap) > -{ > - percpu_ref_kill(pgmap->ref); > -} > - > -static void pci_p2pdma_percpu_cleanup(struct dev_pagemap *pgmap) > -{ > - struct p2pdma_pagemap *p2p_pgmap = > - container_of(pgmap, struct p2pdma_pagemap, pgmap); > - > - wait_for_completion(&p2p_pgmap->ref_done); > - percpu_ref_exit(&p2p_pgmap->ref); > -} > - > static void pci_p2pdma_release(void *data) > { > struct pci_dev *pdev = data; > @@ -153,11 +121,6 @@ static int pci_p2pdma_setup(struct pci_dev *pdev) > return error; > } > > -static const struct dev_pagemap_ops pci_p2pdma_pagemap_ops = { > - .kill = pci_p2pdma_percpu_kill, > - .cleanup = pci_p2pdma_percpu_cleanup, > -}; > - > /** > * pci_p2pdma_add_resource - add memory for use as p2p memory > * @pdev: the device to add the memory to > @@ -171,7 +134,6 @@ static const struct dev_pagemap_ops pci_p2pdma_pagemap_ops = { > int pci_p2pdma_add_resource(struct pci_dev *pdev, int bar, size_t size, > u64 offset) > { > - struct p2pdma_pagemap *p2p_pgmap; > struct dev_pagemap *pgmap; > void *addr; > int error; > @@ -194,26 +156,15 @@ int pci_p2pdma_add_resource(struct pci_dev *pdev, int bar, size_t size, > return error; > } > > - p2p_pgmap = devm_kzalloc(&pdev->dev, sizeof(*p2p_pgmap), GFP_KERNEL); > - if (!p2p_pgmap) > + pgmap = devm_kzalloc(&pdev->dev, sizeof(*pgmap), GFP_KERNEL); > + if (!pgmap) > return -ENOMEM; > - > - init_completion(&p2p_pgmap->ref_done); > - error = percpu_ref_init(&p2p_pgmap->ref, > - pci_p2pdma_percpu_release, 0, GFP_KERNEL); > - if (error) > - goto pgmap_free; > - > - pgmap = &p2p_pgmap->pgmap; > - > pgmap->res.start = pci_resource_start(pdev, bar) + offset; > pgmap->res.end = pgmap->res.start + size - 1; > pgmap->res.flags = pci_resource_flags(pdev, bar); > - pgmap->ref = &p2p_pgmap->ref; > pgmap->type = MEMORY_DEVICE_PCI_P2PDMA; > pgmap->pci_p2pdma_bus_offset = pci_bus_address(pdev, bar) - > pci_resource_start(pdev, bar); > - pgmap->ops = &pci_p2pdma_pagemap_ops; > > addr = devm_memremap_pages(&pdev->dev, pgmap); > if (IS_ERR(addr)) { > @@ -224,7 +175,7 @@ int pci_p2pdma_add_resource(struct pci_dev *pdev, int bar, size_t size, > error = gen_pool_add_owner(pdev->p2pdma->pool, (unsigned long)addr, > pci_bus_address(pdev, bar) + offset, > resource_size(&pgmap->res), dev_to_node(&pdev->dev), > - &p2p_pgmap->ref); > + pgmap->ref); > if (error) > goto pages_free; > > @@ -236,7 +187,7 @@ int pci_p2pdma_add_resource(struct pci_dev *pdev, int bar, size_t size, > pages_free: > devm_memunmap_pages(&pdev->dev, pgmap); > pgmap_free: > - devm_kfree(&pdev->dev, p2p_pgmap); > + devm_kfree(&pdev->dev, pgmap); > return error; > } > EXPORT_SYMBOL_GPL(pci_p2pdma_add_resource); >