lib/scatterlist: Add support in dynamic allocation of SG table from pages
authorMaor Gottlieb <maorg@nvidia.com>
Sun, 4 Oct 2020 15:43:37 +0000 (18:43 +0300)
committerJason Gunthorpe <jgg@nvidia.com>
Mon, 5 Oct 2020 23:45:45 +0000 (20:45 -0300)
commit07da1223ec939982497db3caccd6215b55acc35c
tree1082e684f27ab2b2750aba537ecbf075242d429d
parent29d88681fb49f1e8225addd1e783bad1f7d95afc
lib/scatterlist: Add support in dynamic allocation of SG table from pages

Extend __sg_alloc_table_from_pages to support dynamic allocation of
SG table from pages. It should be used by drivers that can't supply
all the pages at one time.

This function returns the last populated SGE in the table. Users should
pass it as an argument to the function from the second call and forward.
As before, nents will be equal to the number of populated SGEs (chunks).

With this new extension, drivers can benefit the optimization of merging
contiguous pages without a need to allocate all pages in advance and
hold them in a large buffer.

E.g. with the Infiniband driver that allocates a single page for hold the
pages. For 1TB memory registration, the temporary buffer would consume only
4KB, instead of 2GB.

Link: https://lore.kernel.org/r/20201004154340.1080481-2-leon@kernel.org
Signed-off-by: Maor Gottlieb <maorg@nvidia.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/gpu/drm/i915/gem/i915_gem_userptr.c
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
include/linux/scatterlist.h
lib/scatterlist.c
tools/testing/scatterlist/main.c