Linux-PCI Archive on lore.kernel.org
 help / color / Atom feed
From: John Hubbard <jhubbard@nvidia.com>
To: "Christoph Hellwig" <hch@lst.de>,
	"Dan Williams" <dan.j.williams@intel.com>,
	"Jérôme Glisse" <jglisse@redhat.com>,
	"Jason Gunthorpe" <jgg@mellanox.com>,
	"Ben Skeggs" <bskeggs@redhat.com>
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>
Subject: Re: [Nouveau] [PATCH 02/22] mm: remove the struct hmm_device infrastructure
Date: Thu, 13 Jun 2019 16:06:47 -0700
Message-ID: <5a11b5a1-cfb2-f9a1-493e-ed153de7f00b@nvidia.com> (raw)
In-Reply-To: <20190613094326.24093-3-hch@lst.de>

On 6/13/19 2:43 AM, Christoph Hellwig wrote:
> This code is a trivial wrapper around device model helpers, which
> should have been integrated into the driver device model usage from
> the start.  Assuming it actually had users, which it never had since
> the code was added more than 1 1/2 years ago.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  include/linux/hmm.h | 20 ------------
>  mm/hmm.c            | 80 ---------------------------------------------
>  2 files changed, 100 deletions(-)
> 

Yes. This code is definitely unnecessary, and it's a good housecleaning here.

(As to the history: I know that there was some early "HMM dummy device" 
testing when the HMM code was much younger, but such testing has long since
been superseded by more elaborate testing with real drivers.)


Reviewed-by: John Hubbard <jhubbard@nvidia.com> 


thanks,
-- 
John Hubbard
NVIDIA

> diff --git a/include/linux/hmm.h b/include/linux/hmm.h
> index 0fa8ea34ccef..4867b9da1b6c 100644
> --- a/include/linux/hmm.h
> +++ b/include/linux/hmm.h
> @@ -717,26 +717,6 @@ static inline unsigned long hmm_devmem_page_get_drvdata(const struct page *page)
>  {
>  	return page->hmm_data;
>  }
> -
> -
> -/*
> - * struct hmm_device - fake device to hang device memory onto
> - *
> - * @device: device struct
> - * @minor: device minor number
> - */
> -struct hmm_device {
> -	struct device		device;
> -	unsigned int		minor;
> -};
> -
> -/*
> - * A device driver that wants to handle multiple devices memory through a
> - * single fake device can use hmm_device to do so. This is purely a helper and
> - * it is not strictly needed, in order to make use of any HMM functionality.
> - */
> -struct hmm_device *hmm_device_new(void *drvdata);
> -void hmm_device_put(struct hmm_device *hmm_device);
>  #endif /* CONFIG_DEVICE_PRIVATE || CONFIG_DEVICE_PUBLIC */
>  #else /* IS_ENABLED(CONFIG_HMM) */
>  static inline void hmm_mm_destroy(struct mm_struct *mm) {}
> diff --git a/mm/hmm.c b/mm/hmm.c
> index 886b18695b97..ff2598eb7377 100644
> --- a/mm/hmm.c
> +++ b/mm/hmm.c
> @@ -1499,84 +1499,4 @@ struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
>  	return devmem;
>  }
>  EXPORT_SYMBOL_GPL(hmm_devmem_add_resource);
> -
> -/*
> - * A device driver that wants to handle multiple devices memory through a
> - * single fake device can use hmm_device to do so. This is purely a helper
> - * and it is not needed to make use of any HMM functionality.
> - */
> -#define HMM_DEVICE_MAX 256
> -
> -static DECLARE_BITMAP(hmm_device_mask, HMM_DEVICE_MAX);
> -static DEFINE_SPINLOCK(hmm_device_lock);
> -static struct class *hmm_device_class;
> -static dev_t hmm_device_devt;
> -
> -static void hmm_device_release(struct device *device)
> -{
> -	struct hmm_device *hmm_device;
> -
> -	hmm_device = container_of(device, struct hmm_device, device);
> -	spin_lock(&hmm_device_lock);
> -	clear_bit(hmm_device->minor, hmm_device_mask);
> -	spin_unlock(&hmm_device_lock);
> -
> -	kfree(hmm_device);
> -}
> -
> -struct hmm_device *hmm_device_new(void *drvdata)
> -{
> -	struct hmm_device *hmm_device;
> -
> -	hmm_device = kzalloc(sizeof(*hmm_device), GFP_KERNEL);
> -	if (!hmm_device)
> -		return ERR_PTR(-ENOMEM);
> -
> -	spin_lock(&hmm_device_lock);
> -	hmm_device->minor = find_first_zero_bit(hmm_device_mask, HMM_DEVICE_MAX);
> -	if (hmm_device->minor >= HMM_DEVICE_MAX) {
> -		spin_unlock(&hmm_device_lock);
> -		kfree(hmm_device);
> -		return ERR_PTR(-EBUSY);
> -	}
> -	set_bit(hmm_device->minor, hmm_device_mask);
> -	spin_unlock(&hmm_device_lock);
> -
> -	dev_set_name(&hmm_device->device, "hmm_device%d", hmm_device->minor);
> -	hmm_device->device.devt = MKDEV(MAJOR(hmm_device_devt),
> -					hmm_device->minor);
> -	hmm_device->device.release = hmm_device_release;
> -	dev_set_drvdata(&hmm_device->device, drvdata);
> -	hmm_device->device.class = hmm_device_class;
> -	device_initialize(&hmm_device->device);
> -
> -	return hmm_device;
> -}
> -EXPORT_SYMBOL(hmm_device_new);
> -
> -void hmm_device_put(struct hmm_device *hmm_device)
> -{
> -	put_device(&hmm_device->device);
> -}
> -EXPORT_SYMBOL(hmm_device_put);
> -
> -static int __init hmm_init(void)
> -{
> -	int ret;
> -
> -	ret = alloc_chrdev_region(&hmm_device_devt, 0,
> -				  HMM_DEVICE_MAX,
> -				  "hmm_device");
> -	if (ret)
> -		return ret;
> -
> -	hmm_device_class = class_create(THIS_MODULE, "hmm_device");
> -	if (IS_ERR(hmm_device_class)) {
> -		unregister_chrdev_region(hmm_device_devt, HMM_DEVICE_MAX);
> -		return PTR_ERR(hmm_device_class);
> -	}
> -	return 0;
> -}
> -
> -device_initcall(hmm_init);
>  #endif /* CONFIG_DEVICE_PRIVATE || CONFIG_DEVICE_PUBLIC */
> 

  parent reply index

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-13  9:43 dev_pagemap related cleanups Christoph Hellwig
2019-06-13  9:43 ` [PATCH 01/22] mm: remove the unused ARCH_HAS_HMM_DEVICE Kconfig option Christoph Hellwig
2019-06-13 18:30   ` Jason Gunthorpe
2019-06-13  9:43 ` [PATCH 02/22] mm: remove the struct hmm_device infrastructure Christoph Hellwig
2019-06-13 18:46   ` Jason Gunthorpe
2019-06-13 23:06   ` John Hubbard [this message]
2019-06-13  9:43 ` [PATCH 03/22] mm: remove hmm_devmem_add_resource Christoph Hellwig
2019-06-13 18:52   ` Jason Gunthorpe
2019-06-14  6:19     ` Christoph Hellwig
2019-06-14  0:54   ` [Nouveau] " John Hubbard
2019-06-20 19:32   ` Michal Hocko
2019-06-13  9:43 ` [PATCH 04/22] mm: don't clear ->mapping in hmm_devmem_free Christoph Hellwig
2019-06-13 19:05   ` Jason Gunthorpe
2019-06-14  6:21     ` Christoph Hellwig
2019-06-14  1:46   ` John Hubbard
2019-06-20 19:36   ` Michal Hocko
2019-06-13  9:43 ` [PATCH 05/22] mm: export alloc_pages_vma Christoph Hellwig
2019-06-14  1:47   ` John Hubbard
2019-06-14  6:23     ` Christoph Hellwig
2019-06-20 19:17   ` Michal Hocko
2019-06-24 18:24     ` Dan Williams
2019-06-25  7:23       ` Christoph Hellwig
2019-06-25 15:00         ` Michal Hocko
2019-06-25 18:03           ` Dan Williams
2019-06-25 19:00             ` Michal Hocko
2019-06-25 19:52               ` Dan Williams
2019-06-26  5:46                 ` Michal Hocko
2019-06-26 16:14                   ` Dan Williams
2019-06-27  6:41                     ` Michal Hocko
2019-06-13  9:43 ` [PATCH 06/22] mm: factor out a devm_request_free_mem_region helper Christoph Hellwig
2019-06-13 19:16   ` Jason Gunthorpe
2019-06-14  6:24     ` Christoph Hellwig
2019-06-15  2:21   ` John Hubbard
2019-06-15 14:30     ` Christoph Hellwig
2019-06-13  9:43 ` [PATCH 07/22] memremap: move dev_pagemap callbacks into a separate structure Christoph Hellwig
2019-06-13 19:18   ` Jason Gunthorpe
2019-06-13 20:14   ` Logan Gunthorpe
2019-06-13  9:43 ` [PATCH 08/22] memremap: pass a struct dev_pagemap to ->kill Christoph Hellwig
2019-06-13 19:26   ` Jason Gunthorpe
2019-06-13 20:12   ` Logan Gunthorpe
2019-06-13 20:15     ` Dan Williams
2019-06-13  9:43 ` [PATCH 09/22] memremap: lift the devmap_enable manipulation into devm_memremap_pages Christoph Hellwig
2019-06-13 19:34   ` Jason Gunthorpe
2019-06-13 20:13     ` Dan Williams
2019-06-14  6:28     ` Christoph Hellwig
2019-06-13  9:43 ` [PATCH 10/22] memremap: add a migrate callback to struct dev_pagemap_ops Christoph Hellwig
2019-06-13 23:42   ` Ralph Campbell
2019-06-14  6:33     ` Christoph Hellwig
2019-06-13  9:43 ` [PATCH 11/22] memremap: remove the data field in struct dev_pagemap Christoph Hellwig
2019-06-13 19:37   ` Jason Gunthorpe
2019-06-13  9:43 ` [PATCH 12/22] memremap: provide an optional internal refcount " Christoph Hellwig
2019-06-13  9:43 ` [PATCH 13/22] device-dax: use the dev_pagemap internal refcount Christoph Hellwig
2019-06-14  0:22   ` Ira Weiny
2019-06-14  6:35     ` Christoph Hellwig
2019-06-13  9:43 ` [PATCH 14/22] nouveau: use alloc_page_vma directly Christoph Hellwig
2019-06-13 19:39   ` Jason Gunthorpe
2019-06-13  9:43 ` [PATCH 15/22] nouveau: use devm_memremap_pages directly Christoph Hellwig
2019-06-13  9:43 ` [PATCH 16/22] mm: remove hmm_vma_alloc_locked_page Christoph Hellwig
2019-06-13  9:43 ` [PATCH 17/22] mm: remove hmm_devmem_add Christoph Hellwig
2019-06-13 19:42   ` Jason Gunthorpe
2019-06-14  6:39     ` Christoph Hellwig
2019-06-13  9:43 ` [PATCH 18/22] mm: mark DEVICE_PUBLIC as broken Christoph Hellwig
2019-06-13 19:44   ` Jason Gunthorpe
2019-06-13 19:53     ` Ralph Campbell
2019-06-13 19:58       ` Jason Gunthorpe
2019-06-14  0:43         ` Ira Weiny
2019-06-14  1:23           ` John Hubbard
2019-06-19 19:27             ` Jason Gunthorpe
2019-06-19 19:46               ` Dan Williams
2019-06-26  3:15               ` John Hubbard
2019-06-26  5:45                 ` Michal Hocko
2019-06-26  6:07                   ` John Hubbard
2019-06-14  6:43           ` Christoph Hellwig
2019-06-20 19:26   ` Michal Hocko
2019-06-25  7:29     ` Christoph Hellwig
2019-06-25 11:44       ` Jason Gunthorpe
2019-06-25 11:59         ` Christoph Hellwig
2019-06-13  9:43 ` [PATCH 19/22] mm: simplify ZONE_DEVICE page private data Christoph Hellwig
2019-06-13  9:43 ` [PATCH 20/22] mm: sort out the DEVICE_PRIVATE Kconfig mess Christoph Hellwig
2019-06-13 19:55   ` Jason Gunthorpe
2019-06-13  9:43 ` [PATCH 21/22] mm: remove the HMM config option Christoph Hellwig
2019-06-13 20:01   ` Jason Gunthorpe
2019-06-14  6:47     ` Christoph Hellwig
2019-06-13  9:43 ` [PATCH 22/22] mm: don't select MIGRATE_VMA_HELPER from HMM_MIRROR Christoph Hellwig
2019-06-13 20:04   ` Jason Gunthorpe
2019-06-14  1:53   ` [Nouveau] " John Hubbard
2019-06-14  6:48     ` Christoph Hellwig
2019-06-13 14:16 ` dev_pagemap related cleanups Jason Gunthorpe
2019-06-14  6:12   ` Christoph Hellwig
2019-06-13 18:27 ` Dan Williams
2019-06-13 20:17   ` Logan Gunthorpe
2019-06-13 20:21     ` Dan Williams
2019-06-13 20:24       ` Logan Gunthorpe
2019-06-13 20:48         ` Andrew Morton
2019-06-13 20:40   ` Jason Gunthorpe
2019-06-13 21:21     ` Christoph Hellwig
2019-06-13 23:10       ` Jason Gunthorpe
2019-06-14  6:14         ` Christoph Hellwig
2019-06-14  0:31     ` Ira Weiny
2019-06-14  6:13   ` Christoph Hellwig
2019-06-15  1:14     ` Dan Williams
2019-06-15  8:33       ` Christoph Hellwig
2019-06-15 18:09         ` Dan Williams

Reply instructions:

You may reply publically to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5a11b5a1-cfb2-f9a1-493e-ed153de7f00b@nvidia.com \
    --to=jhubbard@nvidia.com \
    --cc=bskeggs@redhat.com \
    --cc=dan.j.williams@intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=hch@lst.de \
    --cc=jgg@mellanox.com \
    --cc=jglisse@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=nouveau@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-PCI Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-pci/0 linux-pci/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-pci linux-pci/ https://lore.kernel.org/linux-pci \
		linux-pci@vger.kernel.org
	public-inbox-index linux-pci

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-pci


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git