Files
linux/include/linux
Dan Williams 795ee30648 lib/genalloc: introduce chunk owners
The p2pdma facility enables a provider to publish a pool of dma
addresses for a consumer to allocate.  A genpool is used internally by
p2pdma to collect dma resources, 'chunks', to be handed out to
consumers.  Whenever a consumer allocates a resource it needs to pin the
'struct dev_pagemap' instance that backs the chunk selected by
pci_alloc_p2pmem().

Currently that reference is taken globally on the entire provider
device.  That sets up a lifetime mismatch whereby the p2pdma core needs
to maintain hacks to make sure the percpu_ref is not released twice.

This lifetime mismatch also stands in the way of a fix to
devm_memremap_pages() whereby devm_memremap_pages_release() must wait for
the percpu_ref ->release() callback to complete before it can proceed to
teardown pages.

So, towards fixing this situation, introduce the ability to store a 'chunk
owner' at gen_pool_add() time, and a facility to retrieve the owner at
gen_pool_{alloc,free}() time.  For p2pdma this will be used to store and
recall individual dev_pagemap reference counter instances per-chunk.

Link: http://lkml.kernel.org/r/155727338118.292046.13407378933221579644.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: "Jérôme Glisse" <jglisse@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2019-06-13 17:34:56 -10:00
..
2019-05-14 19:52:50 -07:00
2019-04-09 17:05:46 -07:00
2019-05-07 08:39:02 -06:00
2019-05-09 15:25:13 -04:00
2019-02-28 03:28:53 -05:00
2019-02-28 08:24:23 -07:00
2018-12-19 10:42:08 +01:00
2019-04-22 09:48:12 -06:00
2019-02-15 16:54:38 +01:00
2019-03-22 14:36:02 +01:00
2019-05-01 07:47:37 -07:00
2019-04-08 22:56:14 +02:00
2019-03-07 18:32:03 -08:00
2019-01-30 20:51:47 -05:00
2019-02-20 07:22:17 -07:00
2019-02-20 07:22:10 -07:00
2019-02-08 15:02:49 -08:00
2019-03-05 21:07:19 -08:00
2019-05-14 09:47:51 -07:00
2019-05-07 14:31:03 +02:00
2019-03-12 10:04:03 -07:00
2019-05-14 19:52:51 -07:00
2019-05-14 19:52:48 -07:00
2019-04-02 17:57:35 +02:00
2019-05-08 22:14:36 +02:00
2019-05-16 15:51:55 -07:00
2019-03-15 15:29:47 -07:00
2019-02-07 16:38:35 +01:00
2019-02-07 00:13:27 +01:00
2019-04-06 10:48:35 -06:00
2019-01-11 18:05:40 -08:00
2019-05-15 17:35:54 +01:00
2019-04-09 15:14:49 -06:00
2018-12-22 12:15:29 +01:00