Messages in this thread | | | Subject | Re: [PATCH v2 17/19] powerpc: book3s64: convert to pin_user_pages() and put_user_page() | From | John Hubbard <> | Date | Fri, 29 Nov 2019 13:44:53 -0800 |
| |
On 11/29/19 3:23 AM, Jan Kara wrote: > On Mon 25-11-19 15:10:33, John Hubbard wrote: >> 1. Convert from get_user_pages() to pin_user_pages(). >> >> 2. As required by pin_user_pages(), release these pages via >> put_user_page(). In this case, do so via put_user_pages_dirty_lock(). >> >> That has the side effect of calling set_page_dirty_lock(), instead >> of set_page_dirty(). This is probably more accurate. > > Maybe more accurate but it doesn't work for mm_iommu_unpin(). As I'm > checking mm_iommu_unpin() gets called from RCU callback which is executed > interrupt context and you cannot lock pages from such context. So you need > to queue work from the RCU callback and then do the real work from the > workqueue... > > Honza
ah yes, fixed locally. (In order to avoid distracting people during the merge window, I won't post any more versions of the series until the merge window is over, unless a maintainer tells me that any of these patches are desired for 5.5.)
With that, we are back to a one-line diff for this part:
@@ -215,7 +214,7 @@ static void mm_iommu_unpin(struct mm_iommu_table_group_mem_t *mem) if (mem->hpas[i] & MM_IOMMU_TABLE_GROUP_PAGE_DIRTY) SetPageDirty(page); - put_page(page); + put_user_page(page); mem->hpas[i] = 0; } }
btw, I'm also working on your feedback for patch 17 (mm/gup: track FOLL_PIN pages [1]), from a few days earlier, it's not being ignored, I'm just trying to avoid distracting people during the merge window.
[1] https://lore.kernel.org/r/20191121093941.GA18190@quack2.suse.cz
thanks, -- John Hubbard NVIDIA
| |