On Thu, Jun 24, 2021 at 10:48:14AM -0700, ira.weiny@xxxxxxxxx wrote: > From: Ira Weiny <ira.weiny@xxxxxxxxx> > > kmap() is being deprecated and will break uses of device dax after PKS > protection is introduced.[1] > > The use of kmap() in siw_tx_hdt() is all thread local therefore > kmap_local_page() is a sufficient replacement and will work with pgmap > protected pages when those are implemented. > > siw_tx_hdt() tracks pages used in a page_array. It uses that array to > unmap pages which were mapped on function exit. Not all entries in the > array are mapped and this is tracked in kmap_mask. > > kunmap_local() takes a mapped address rather than a page. Alter > siw_unmap_pages() to take the iov array to reuse the iov_base address of > each mapping. Use PAGE_MASK to get the proper address for > kunmap_local(). > > kmap_local_page() mappings are tracked in a stack and must be unmapped > in the opposite order they were mapped in. Because segments are mapped > into the page array in increasing index order, modify siw_unmap_pages() > to unmap pages in decreasing order. > > Use kmap_local_page() instead of kmap() to map pages in the page_array. > > [1] https://lore.kernel.org/lkml/20201009195033.3208459-59-ira.weiny@xxxxxxxxx/ > > Signed-off-by: Ira Weiny <ira.weiny@xxxxxxxxx> > Reviewed-by: Bernard Metzler <bmt@xxxxxxxxxxxxxx> > --- > Changes for V4: > From Bernard > Further optimize siw_unmap_pages() by eliminating the > CRC page from the iov array. > > Changes for V3: > From Bernard > Use 'p' in kmap_local_page() > Use seg as length to siw_unmap_pages() > > Changes for V2: > From Bernard > Reuse iov[].iov_base rather than declaring another array > of pointers and preserve the use of kmap_mask to know > which iov's were kmapped. > --- > drivers/infiniband/sw/siw/siw_qp_tx.c | 30 +++++++++++++++++---------- > 1 file changed, 19 insertions(+), 11 deletions(-) Applied to for-next, thanks Jason