* hmm_range_fault related fixes and legacy API removal v2
@ 2019-07-03 22:02 Christoph Hellwig
[not found] ` <20190703220214.28319-1-hch-jcswGhMUV9g@public.gmane.org>
` (3 more replies)
0 siblings, 4 replies; 18+ messages in thread
From: Christoph Hellwig @ 2019-07-03 22:02 UTC (permalink / raw)
To: Jérôme Glisse, Jason Gunthorpe, Ben Skeggs
Cc: linux-mm-Bw31MaZKKs3YtjvyW6yDsg, Ralph Campbell,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Hi Jérôme, Ben and Jason,
below is a series against the hmm tree which fixes up the mmap_sem
locking in nouveau and while at it also removes leftover legacy HMM APIs
only used by nouveau.
Changes since v1:
- don't return the valid state from hmm_range_unregister
- additional nouveau cleanups
_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau
^ permalink raw reply [flat|nested] 18+ messages in thread[parent not found: <20190703220214.28319-1-hch-jcswGhMUV9g@public.gmane.org>]
* [PATCH 1/6] mm: always return EBUSY for invalid ranges in hmm_range_{fault, snapshot} [not found] ` <20190703220214.28319-1-hch-jcswGhMUV9g@public.gmane.org> @ 2019-07-03 22:02 ` Christoph Hellwig 2019-07-03 22:02 ` [PATCH 2/6] mm: move hmm_vma_range_done and hmm_vma_fault to nouveau Christoph Hellwig ` (3 subsequent siblings) 4 siblings, 0 replies; 18+ messages in thread From: Christoph Hellwig @ 2019-07-03 22:02 UTC (permalink / raw) To: Jérôme Glisse, Jason Gunthorpe, Ben Skeggs Cc: Ralph Campbell, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, Felix Kuehling, linux-kernel-u79uwXL29TY76Z2rM5mHXA, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, linux-mm-Bw31MaZKKs3YtjvyW6yDsg We should not have two different error codes for the same condition. In addition this really complicates the code due to the special handling of EAGAIN that drops the mmap_sem due to the FAULT_FLAG_ALLOW_RETRY logic in the core vm. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Ralph Campbell <rcampbell@nvidia.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> --- Documentation/vm/hmm.rst | 2 +- mm/hmm.c | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Documentation/vm/hmm.rst b/Documentation/vm/hmm.rst index 7d90964abbb0..710ce1c701bf 100644 --- a/Documentation/vm/hmm.rst +++ b/Documentation/vm/hmm.rst @@ -237,7 +237,7 @@ The usage pattern is:: ret = hmm_range_snapshot(&range); if (ret) { up_read(&mm->mmap_sem); - if (ret == -EAGAIN) { + if (ret == -EBUSY) { /* * No need to check hmm_range_wait_until_valid() return value * on retry we will get proper error with hmm_range_snapshot() diff --git a/mm/hmm.c b/mm/hmm.c index d48b9283725a..1d57c39c1d8b 100644 --- a/mm/hmm.c +++ b/mm/hmm.c @@ -946,7 +946,7 @@ EXPORT_SYMBOL(hmm_range_unregister); * @range: range * Return: -EINVAL if invalid argument, -ENOMEM out of memory, -EPERM invalid * permission (for instance asking for write and range is read only), - * -EAGAIN if you need to retry, -EFAULT invalid (ie either no valid + * -EBUSY if you need to retry, -EFAULT invalid (ie either no valid * vma or it is illegal to access that range), number of valid pages * in range->pfns[] (from range start address). * @@ -967,7 +967,7 @@ long hmm_range_snapshot(struct hmm_range *range) do { /* If range is no longer valid force retry. */ if (!range->valid) - return -EAGAIN; + return -EBUSY; vma = find_vma(hmm->mm, start); if (vma == NULL || (vma->vm_flags & device_vma)) @@ -1062,10 +1062,8 @@ long hmm_range_fault(struct hmm_range *range, bool block) do { /* If range is no longer valid force retry. */ - if (!range->valid) { - up_read(&hmm->mm->mmap_sem); - return -EAGAIN; - } + if (!range->valid) + return -EBUSY; vma = find_vma(hmm->mm, start); if (vma == NULL || (vma->vm_flags & device_vma)) -- 2.20.1 _______________________________________________ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 2/6] mm: move hmm_vma_range_done and hmm_vma_fault to nouveau [not found] ` <20190703220214.28319-1-hch-jcswGhMUV9g@public.gmane.org> 2019-07-03 22:02 ` [PATCH 1/6] mm: always return EBUSY for invalid ranges in hmm_range_{fault, snapshot} Christoph Hellwig @ 2019-07-03 22:02 ` Christoph Hellwig 2019-07-03 22:02 ` [PATCH 3/6] nouveau: remove the block parameter to nouveau_range_fault Christoph Hellwig ` (2 subsequent siblings) 4 siblings, 0 replies; 18+ messages in thread From: Christoph Hellwig @ 2019-07-03 22:02 UTC (permalink / raw) To: Jérôme Glisse, Jason Gunthorpe, Ben Skeggs Cc: linux-mm-Bw31MaZKKs3YtjvyW6yDsg, Ralph Campbell, linux-kernel-u79uwXL29TY76Z2rM5mHXA, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW These two functions are marked as a legacy APIs to get rid of, but seem to suit the current nouveau flow. Move it to the only user in preparation for fixing a locking bug involving caller and callee. All comments referring to the old API have been removed as this now is a driver private helper. Signed-off-by: Christoph Hellwig <hch@lst.de> --- drivers/gpu/drm/nouveau/nouveau_svm.c | 52 +++++++++++++++++++++- include/linux/hmm.h | 63 --------------------------- 2 files changed, 50 insertions(+), 65 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_svm.c b/drivers/gpu/drm/nouveau/nouveau_svm.c index 8c92374afcf2..033a9241a14a 100644 --- a/drivers/gpu/drm/nouveau/nouveau_svm.c +++ b/drivers/gpu/drm/nouveau/nouveau_svm.c @@ -36,6 +36,13 @@ #include <linux/sort.h> #include <linux/hmm.h> +/* + * When waiting for mmu notifiers we need some kind of time out otherwise we + * could potentialy wait for ever, 1000ms ie 1s sounds like a long time to + * wait already. + */ +#define NOUVEAU_RANGE_FAULT_TIMEOUT 1000 + struct nouveau_svm { struct nouveau_drm *drm; struct mutex mutex; @@ -475,6 +482,47 @@ nouveau_svm_fault_cache(struct nouveau_svm *svm, fault->inst, fault->addr, fault->access); } +static inline bool nouveau_range_done(struct hmm_range *range) +{ + bool ret = hmm_range_valid(range); + + hmm_range_unregister(range); + return ret; +} + +static int +nouveau_range_fault(struct hmm_mirror *mirror, struct hmm_range *range, + bool block) +{ + long ret; + + range->default_flags = 0; + range->pfn_flags_mask = -1UL; + + ret = hmm_range_register(range, mirror, + range->start, range->end, + PAGE_SHIFT); + if (ret) + return (int)ret; + + if (!hmm_range_wait_until_valid(range, NOUVEAU_RANGE_FAULT_TIMEOUT)) { + up_read(&range->vma->vm_mm->mmap_sem); + return -EAGAIN; + } + + ret = hmm_range_fault(range, block); + if (ret <= 0) { + if (ret == -EBUSY || !ret) { + up_read(&range->vma->vm_mm->mmap_sem); + ret = -EBUSY; + } else if (ret == -EAGAIN) + ret = -EBUSY; + hmm_range_unregister(range); + return ret; + } + return 0; +} + static int nouveau_svm_fault(struct nvif_notify *notify) { @@ -649,10 +697,10 @@ nouveau_svm_fault(struct nvif_notify *notify) range.values = nouveau_svm_pfn_values; range.pfn_shift = NVIF_VMM_PFNMAP_V0_ADDR_SHIFT; again: - ret = hmm_vma_fault(&svmm->mirror, &range, true); + ret = nouveau_range_fault(&svmm->mirror, &range, true); if (ret == 0) { mutex_lock(&svmm->mutex); - if (!hmm_vma_range_done(&range)) { + if (!nouveau_range_done(&range)) { mutex_unlock(&svmm->mutex); goto again; } diff --git a/include/linux/hmm.h b/include/linux/hmm.h index b8a08b2a10ca..fa43a9f53833 100644 --- a/include/linux/hmm.h +++ b/include/linux/hmm.h @@ -475,69 +475,6 @@ long hmm_range_dma_unmap(struct hmm_range *range, dma_addr_t *daddrs, bool dirty); -/* - * HMM_RANGE_DEFAULT_TIMEOUT - default timeout (ms) when waiting for a range - * - * When waiting for mmu notifiers we need some kind of time out otherwise we - * could potentialy wait for ever, 1000ms ie 1s sounds like a long time to - * wait already. - */ -#define HMM_RANGE_DEFAULT_TIMEOUT 1000 - -/* This is a temporary helper to avoid merge conflict between trees. */ -static inline bool hmm_vma_range_done(struct hmm_range *range) -{ - bool ret = hmm_range_valid(range); - - hmm_range_unregister(range); - return ret; -} - -/* This is a temporary helper to avoid merge conflict between trees. */ -static inline int hmm_vma_fault(struct hmm_mirror *mirror, - struct hmm_range *range, bool block) -{ - long ret; - - /* - * With the old API the driver must set each individual entries with - * the requested flags (valid, write, ...). So here we set the mask to - * keep intact the entries provided by the driver and zero out the - * default_flags. - */ - range->default_flags = 0; - range->pfn_flags_mask = -1UL; - - ret = hmm_range_register(range, mirror, - range->start, range->end, - PAGE_SHIFT); - if (ret) - return (int)ret; - - if (!hmm_range_wait_until_valid(range, HMM_RANGE_DEFAULT_TIMEOUT)) { - /* - * The mmap_sem was taken by driver we release it here and - * returns -EAGAIN which correspond to mmap_sem have been - * drop in the old API. - */ - up_read(&range->vma->vm_mm->mmap_sem); - return -EAGAIN; - } - - ret = hmm_range_fault(range, block); - if (ret <= 0) { - if (ret == -EBUSY || !ret) { - /* Same as above, drop mmap_sem to match old API. */ - up_read(&range->vma->vm_mm->mmap_sem); - ret = -EBUSY; - } else if (ret == -EAGAIN) - ret = -EBUSY; - hmm_range_unregister(range); - return ret; - } - return 0; -} - /* Below are for HMM internal use only! Not to be used by device driver! */ static inline void hmm_mm_init(struct mm_struct *mm) { -- 2.20.1 _______________________________________________ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 3/6] nouveau: remove the block parameter to nouveau_range_fault [not found] ` <20190703220214.28319-1-hch-jcswGhMUV9g@public.gmane.org> 2019-07-03 22:02 ` [PATCH 1/6] mm: always return EBUSY for invalid ranges in hmm_range_{fault, snapshot} Christoph Hellwig 2019-07-03 22:02 ` [PATCH 2/6] mm: move hmm_vma_range_done and hmm_vma_fault to nouveau Christoph Hellwig @ 2019-07-03 22:02 ` Christoph Hellwig 2019-07-03 22:02 ` [PATCH 5/6] nouveau: return -EBUSY when hmm_range_wait_until_valid fails Christoph Hellwig 2019-07-03 22:02 ` [PATCH 6/6] mm: remove the legacy hmm_pfn_* APIs Christoph Hellwig 4 siblings, 0 replies; 18+ messages in thread From: Christoph Hellwig @ 2019-07-03 22:02 UTC (permalink / raw) To: Jérôme Glisse, Jason Gunthorpe, Ben Skeggs Cc: linux-mm-Bw31MaZKKs3YtjvyW6yDsg, Ralph Campbell, linux-kernel-u79uwXL29TY76Z2rM5mHXA, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW The parameter is always false, so remove it as well as the -EAGAIN handling that can only happen for the non-blocking case. Signed-off-by: Christoph Hellwig <hch@lst.de> --- drivers/gpu/drm/nouveau/nouveau_svm.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_svm.c b/drivers/gpu/drm/nouveau/nouveau_svm.c index 033a9241a14a..9a9f71e4be29 100644 --- a/drivers/gpu/drm/nouveau/nouveau_svm.c +++ b/drivers/gpu/drm/nouveau/nouveau_svm.c @@ -491,8 +491,7 @@ static inline bool nouveau_range_done(struct hmm_range *range) } static int -nouveau_range_fault(struct hmm_mirror *mirror, struct hmm_range *range, - bool block) +nouveau_range_fault(struct hmm_mirror *mirror, struct hmm_range *range) { long ret; @@ -510,7 +509,7 @@ nouveau_range_fault(struct hmm_mirror *mirror, struct hmm_range *range, return -EAGAIN; } - ret = hmm_range_fault(range, block); + ret = hmm_range_fault(range, true); if (ret <= 0) { if (ret == -EBUSY || !ret) { up_read(&range->vma->vm_mm->mmap_sem); @@ -697,7 +696,7 @@ nouveau_svm_fault(struct nvif_notify *notify) range.values = nouveau_svm_pfn_values; range.pfn_shift = NVIF_VMM_PFNMAP_V0_ADDR_SHIFT; again: - ret = nouveau_range_fault(&svmm->mirror, &range, true); + ret = nouveau_range_fault(&svmm->mirror, &range); if (ret == 0) { mutex_lock(&svmm->mutex); if (!nouveau_range_done(&range)) { -- 2.20.1 _______________________________________________ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 5/6] nouveau: return -EBUSY when hmm_range_wait_until_valid fails [not found] ` <20190703220214.28319-1-hch-jcswGhMUV9g@public.gmane.org> ` (2 preceding siblings ...) 2019-07-03 22:02 ` [PATCH 3/6] nouveau: remove the block parameter to nouveau_range_fault Christoph Hellwig @ 2019-07-03 22:02 ` Christoph Hellwig 2019-07-03 22:02 ` [PATCH 6/6] mm: remove the legacy hmm_pfn_* APIs Christoph Hellwig 4 siblings, 0 replies; 18+ messages in thread From: Christoph Hellwig @ 2019-07-03 22:02 UTC (permalink / raw) To: Jérôme Glisse, Jason Gunthorpe, Ben Skeggs Cc: linux-mm-Bw31MaZKKs3YtjvyW6yDsg, Ralph Campbell, linux-kernel-u79uwXL29TY76Z2rM5mHXA, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW -EAGAIN has a magic meaning for non-blocking faults, so don't overload it. Given that the caller doesn't check for specific error codes this change is purely cosmetic. Signed-off-by: Christoph Hellwig <hch@lst.de> --- drivers/gpu/drm/nouveau/nouveau_svm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_svm.c b/drivers/gpu/drm/nouveau/nouveau_svm.c index d97d862e8b7d..26853f59b0f4 100644 --- a/drivers/gpu/drm/nouveau/nouveau_svm.c +++ b/drivers/gpu/drm/nouveau/nouveau_svm.c @@ -508,7 +508,7 @@ nouveau_range_fault(struct hmm_mirror *mirror, struct hmm_range *range) if (!hmm_range_wait_until_valid(range, NOUVEAU_RANGE_FAULT_TIMEOUT)) { up_read(&range->vma->vm_mm->mmap_sem); - return -EAGAIN; + return -EBUSY; } ret = hmm_range_fault(range, true); -- 2.20.1 _______________________________________________ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 6/6] mm: remove the legacy hmm_pfn_* APIs [not found] ` <20190703220214.28319-1-hch-jcswGhMUV9g@public.gmane.org> ` (3 preceding siblings ...) 2019-07-03 22:02 ` [PATCH 5/6] nouveau: return -EBUSY when hmm_range_wait_until_valid fails Christoph Hellwig @ 2019-07-03 22:02 ` Christoph Hellwig 4 siblings, 0 replies; 18+ messages in thread From: Christoph Hellwig @ 2019-07-03 22:02 UTC (permalink / raw) To: Jérôme Glisse, Jason Gunthorpe, Ben Skeggs Cc: linux-mm-Bw31MaZKKs3YtjvyW6yDsg, Ralph Campbell, linux-kernel-u79uwXL29TY76Z2rM5mHXA, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW Switch the one remaining user in nouveau over to its replacement, and remove all the wrappers. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Ralph Campbell <rcampbell@nvidia.com> Reviewed-by: Jason Gunthorpe <jgg@mellanox.com> --- drivers/gpu/drm/nouveau/nouveau_dmem.c | 2 +- include/linux/hmm.h | 34 -------------------------- 2 files changed, 1 insertion(+), 35 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_dmem.c b/drivers/gpu/drm/nouveau/nouveau_dmem.c index 42c026010938..b9ced2e61667 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dmem.c +++ b/drivers/gpu/drm/nouveau/nouveau_dmem.c @@ -844,7 +844,7 @@ nouveau_dmem_convert_pfn(struct nouveau_drm *drm, struct page *page; uint64_t addr; - page = hmm_pfn_to_page(range, range->pfns[i]); + page = hmm_device_entry_to_page(range, range->pfns[i]); if (page == NULL) continue; diff --git a/include/linux/hmm.h b/include/linux/hmm.h index fa43a9f53833..bf641bbecc7e 100644 --- a/include/linux/hmm.h +++ b/include/linux/hmm.h @@ -290,40 +290,6 @@ static inline uint64_t hmm_device_entry_from_pfn(const struct hmm_range *range, range->flags[HMM_PFN_VALID]; } -/* - * Old API: - * hmm_pfn_to_page() - * hmm_pfn_to_pfn() - * hmm_pfn_from_page() - * hmm_pfn_from_pfn() - * - * This are the OLD API please use new API, it is here to avoid cross-tree - * merge painfullness ie we convert things to new API in stages. - */ -static inline struct page *hmm_pfn_to_page(const struct hmm_range *range, - uint64_t pfn) -{ - return hmm_device_entry_to_page(range, pfn); -} - -static inline unsigned long hmm_pfn_to_pfn(const struct hmm_range *range, - uint64_t pfn) -{ - return hmm_device_entry_to_pfn(range, pfn); -} - -static inline uint64_t hmm_pfn_from_page(const struct hmm_range *range, - struct page *page) -{ - return hmm_device_entry_from_page(range, page); -} - -static inline uint64_t hmm_pfn_from_pfn(const struct hmm_range *range, - unsigned long pfn) -{ - return hmm_device_entry_from_pfn(range, pfn); -} - /* * Mirroring: how to synchronize device page table with CPU page table. * -- 2.20.1 _______________________________________________ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 4/6] nouveau: unlock mmap_sem on all errors from nouveau_range_fault 2019-07-03 22:02 hmm_range_fault related fixes and legacy API removal v2 Christoph Hellwig [not found] ` <20190703220214.28319-1-hch-jcswGhMUV9g@public.gmane.org> @ 2019-07-03 22:02 ` Christoph Hellwig 2019-07-04 16:42 ` hmm_range_fault related fixes and legacy API removal v2 Jason Gunthorpe 2019-07-05 12:33 ` Jason Gunthorpe 3 siblings, 0 replies; 18+ messages in thread From: Christoph Hellwig @ 2019-07-03 22:02 UTC (permalink / raw) To: Jérôme Glisse, Jason Gunthorpe, Ben Skeggs Cc: Ralph Campbell, linux-mm, nouveau, dri-devel, linux-kernel Currently nouveau_svm_fault expects nouveau_range_fault to never unlock mmap_sem, but the latter unlocks it for a random selection of error codes. Fix this up by always unlocking mmap_sem for non-zero return values in nouveau_range_fault, and only unlocking it in the caller for successful returns. Signed-off-by: Christoph Hellwig <hch@lst.de> --- drivers/gpu/drm/nouveau/nouveau_svm.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_svm.c b/drivers/gpu/drm/nouveau/nouveau_svm.c index 9a9f71e4be29..d97d862e8b7d 100644 --- a/drivers/gpu/drm/nouveau/nouveau_svm.c +++ b/drivers/gpu/drm/nouveau/nouveau_svm.c @@ -501,8 +501,10 @@ nouveau_range_fault(struct hmm_mirror *mirror, struct hmm_range *range) ret = hmm_range_register(range, mirror, range->start, range->end, PAGE_SHIFT); - if (ret) + if (ret) { + up_read(&range->vma->vm_mm->mmap_sem); return (int)ret; + } if (!hmm_range_wait_until_valid(range, NOUVEAU_RANGE_FAULT_TIMEOUT)) { up_read(&range->vma->vm_mm->mmap_sem); @@ -511,11 +513,9 @@ nouveau_range_fault(struct hmm_mirror *mirror, struct hmm_range *range) ret = hmm_range_fault(range, true); if (ret <= 0) { - if (ret == -EBUSY || !ret) { - up_read(&range->vma->vm_mm->mmap_sem); - ret = -EBUSY; - } else if (ret == -EAGAIN) + if (ret == 0) ret = -EBUSY; + up_read(&range->vma->vm_mm->mmap_sem); hmm_range_unregister(range); return ret; } @@ -713,8 +713,8 @@ nouveau_svm_fault(struct nvif_notify *notify) NULL); svmm->vmm->vmm.object.client->super = false; mutex_unlock(&svmm->mutex); + up_read(&svmm->mm->mmap_sem); } - up_read(&svmm->mm->mmap_sem); /* Cancel any faults in the window whose pages didn't manage * to keep their valid bit, or stay writeable when required. -- 2.20.1 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: hmm_range_fault related fixes and legacy API removal v2 2019-07-03 22:02 hmm_range_fault related fixes and legacy API removal v2 Christoph Hellwig [not found] ` <20190703220214.28319-1-hch-jcswGhMUV9g@public.gmane.org> 2019-07-03 22:02 ` [PATCH 4/6] nouveau: unlock mmap_sem on all errors from nouveau_range_fault Christoph Hellwig @ 2019-07-04 16:42 ` Jason Gunthorpe 2019-07-08 17:30 ` Ralph Campbell 2019-07-05 12:33 ` Jason Gunthorpe 3 siblings, 1 reply; 18+ messages in thread From: Jason Gunthorpe @ 2019-07-04 16:42 UTC (permalink / raw) To: Christoph Hellwig Cc: Jérôme Glisse, Ben Skeggs, Ralph Campbell, linux-mm@kvack.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org On Wed, Jul 03, 2019 at 03:02:08PM -0700, Christoph Hellwig wrote: > Hi Jérôme, Ben and Jason, > > below is a series against the hmm tree which fixes up the mmap_sem > locking in nouveau and while at it also removes leftover legacy HMM APIs > only used by nouveau. > > Changes since v1: > - don't return the valid state from hmm_range_unregister > - additional nouveau cleanups Ralph, since most of this is nouveau could you contribute a Tested-by? Thanks Jason ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: hmm_range_fault related fixes and legacy API removal v2 2019-07-04 16:42 ` hmm_range_fault related fixes and legacy API removal v2 Jason Gunthorpe @ 2019-07-08 17:30 ` Ralph Campbell [not found] ` <41dbb308-fc9e-d730-ffb0-6ce051dff1e1-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 18+ messages in thread From: Ralph Campbell @ 2019-07-08 17:30 UTC (permalink / raw) To: Jason Gunthorpe, Christoph Hellwig Cc: Jérôme Glisse, Ben Skeggs, linux-mm@kvack.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org On 7/4/19 9:42 AM, Jason Gunthorpe wrote: > On Wed, Jul 03, 2019 at 03:02:08PM -0700, Christoph Hellwig wrote: >> Hi Jérôme, Ben and Jason, >> >> below is a series against the hmm tree which fixes up the mmap_sem >> locking in nouveau and while at it also removes leftover legacy HMM APIs >> only used by nouveau. >> >> Changes since v1: >> - don't return the valid state from hmm_range_unregister >> - additional nouveau cleanups > > Ralph, since most of this is nouveau could you contribute a > Tested-by? Thanks > > Jason > I can test things fairly easily but with all the different patches, conflicts, and personal git trees, can you specify the git tree and branch with everything applied that you want me to test? ^ permalink raw reply [flat|nested] 18+ messages in thread
[parent not found: <41dbb308-fc9e-d730-ffb0-6ce051dff1e1-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* Re: hmm_range_fault related fixes and legacy API removal v2 [not found] ` <41dbb308-fc9e-d730-ffb0-6ce051dff1e1-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2019-07-08 17:32 ` Jason Gunthorpe 0 siblings, 0 replies; 18+ messages in thread From: Jason Gunthorpe @ 2019-07-08 17:32 UTC (permalink / raw) To: Ralph Campbell Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, Ben Skeggs, Christoph Hellwig On Mon, Jul 08, 2019 at 10:30:55AM -0700, Ralph Campbell wrote: > > On 7/4/19 9:42 AM, Jason Gunthorpe wrote: > > On Wed, Jul 03, 2019 at 03:02:08PM -0700, Christoph Hellwig wrote: > > > Hi Jérôme, Ben and Jason, > > > > > > below is a series against the hmm tree which fixes up the mmap_sem > > > locking in nouveau and while at it also removes leftover legacy HMM APIs > > > only used by nouveau. > > > > > > Changes since v1: > > > - don't return the valid state from hmm_range_unregister > > > - additional nouveau cleanups > > > > Ralph, since most of this is nouveau could you contribute a > > Tested-by? Thanks > > > > Jason > > > > I can test things fairly easily but with all the different patches, > conflicts, and personal git trees, can you specify the git tree > and branch with everything applied that you want me to test? This series will be pushed to the next cycle, so if you test v5.3-rc1 + this series you'd get the right coverage. Thanks, Jason _______________________________________________ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: hmm_range_fault related fixes and legacy API removal v2 2019-07-03 22:02 hmm_range_fault related fixes and legacy API removal v2 Christoph Hellwig ` (2 preceding siblings ...) 2019-07-04 16:42 ` hmm_range_fault related fixes and legacy API removal v2 Jason Gunthorpe @ 2019-07-05 12:33 ` Jason Gunthorpe 2019-07-09 14:30 ` Christoph Hellwig 3 siblings, 1 reply; 18+ messages in thread From: Jason Gunthorpe @ 2019-07-05 12:33 UTC (permalink / raw) To: Christoph Hellwig Cc: Jérôme Glisse, Ben Skeggs, Ralph Campbell, linux-mm, nouveau, dri-devel, linux-kernel On Wed, Jul 03, 2019 at 03:02:08PM -0700, Christoph Hellwig wrote: > Hi Jérôme, Ben and Jason, > > below is a series against the hmm tree which fixes up the mmap_sem > locking in nouveau and while at it also removes leftover legacy HMM APIs > only used by nouveau. As much as I like this series, it won't make it to this merge window, sorry. Let's revisit it in a few weeks at rc1. Regards, Jason ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: hmm_range_fault related fixes and legacy API removal v2 2019-07-05 12:33 ` Jason Gunthorpe @ 2019-07-09 14:30 ` Christoph Hellwig [not found] ` <20190709143038.GA3092-jcswGhMUV9g@public.gmane.org> 0 siblings, 1 reply; 18+ messages in thread From: Christoph Hellwig @ 2019-07-09 14:30 UTC (permalink / raw) To: Jason Gunthorpe Cc: Christoph Hellwig, Jérôme Glisse, Ben Skeggs, Ralph Campbell, linux-mm, nouveau, dri-devel, linux-kernel On Fri, Jul 05, 2019 at 09:33:36AM -0300, Jason Gunthorpe wrote: > On Wed, Jul 03, 2019 at 03:02:08PM -0700, Christoph Hellwig wrote: > > Hi Jérôme, Ben and Jason, > > > > below is a series against the hmm tree which fixes up the mmap_sem > > locking in nouveau and while at it also removes leftover legacy HMM APIs > > only used by nouveau. > > As much as I like this series, it won't make it to this merge window, > sorry. Note that patch 4 fixes a pretty severe locking bug, and 1-3 is just preparation for that. ^ permalink raw reply [flat|nested] 18+ messages in thread
[parent not found: <20190709143038.GA3092-jcswGhMUV9g@public.gmane.org>]
* Re: hmm_range_fault related fixes and legacy API removal v2 [not found] ` <20190709143038.GA3092-jcswGhMUV9g@public.gmane.org> @ 2019-07-09 19:33 ` Jason Gunthorpe 0 siblings, 0 replies; 18+ messages in thread From: Jason Gunthorpe @ 2019-07-09 19:33 UTC (permalink / raw) To: Christoph Hellwig Cc: Ralph Campbell, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, linux-kernel-u79uwXL29TY76Z2rM5mHXA, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, linux-mm-Bw31MaZKKs3YtjvyW6yDsg, Ben Skeggs On Tue, Jul 09, 2019 at 04:30:38PM +0200, Christoph Hellwig wrote: > On Fri, Jul 05, 2019 at 09:33:36AM -0300, Jason Gunthorpe wrote: > > On Wed, Jul 03, 2019 at 03:02:08PM -0700, Christoph Hellwig wrote: > > > Hi Jérôme, Ben and Jason, > > > > > > below is a series against the hmm tree which fixes up the mmap_sem > > > locking in nouveau and while at it also removes leftover legacy HMM APIs > > > only used by nouveau. > > > > As much as I like this series, it won't make it to this merge window, > > sorry. > > Note that patch 4 fixes a pretty severe locking bug, and 1-3 is just > preparation for that. Yes, I know, but that code is all marked STAGING last I saw, so I don't feel an urgency to get severe bug fixes in for it after the merge window opens. I'd like to apply it to hmm.git when rc1 comes out with Ralph's test result.. Jason _______________________________________________ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau ^ permalink raw reply [flat|nested] 18+ messages in thread
* hmm_range_fault related fixes and legacy API removal v2
@ 2019-07-22 9:44 Christoph Hellwig
[not found] ` <20190722094426.18563-1-hch-jcswGhMUV9g@public.gmane.org>
2019-07-23 15:27 ` Jason Gunthorpe
0 siblings, 2 replies; 18+ messages in thread
From: Christoph Hellwig @ 2019-07-22 9:44 UTC (permalink / raw)
To: Jérôme Glisse, Jason Gunthorpe, Ben Skeggs
Cc: Ralph Campbell, linux-mm, nouveau, dri-devel, linux-kernel
Hi Jérôme, Ben and Jason,
below is a series against the hmm tree which fixes up the mmap_sem
locking in nouveau and while at it also removes leftover legacy HMM APIs
only used by nouveau.
The first 4 patches are a bug fix for nouveau, which I suspect should
go into this merge window even if the code is marked as staging, just
to avoid people copying the breakage.
Changes since v1:
- don't return the valid state from hmm_range_unregister
- additional nouveau cleanups
^ permalink raw reply [flat|nested] 18+ messages in thread[parent not found: <20190722094426.18563-1-hch-jcswGhMUV9g@public.gmane.org>]
* Re: hmm_range_fault related fixes and legacy API removal v2 [not found] ` <20190722094426.18563-1-hch-jcswGhMUV9g@public.gmane.org> @ 2019-07-23 1:11 ` Ralph Campbell [not found] ` <7e1f33d4-4d3b-7927-38d1-b98b22ed4d78-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 18+ messages in thread From: Ralph Campbell @ 2019-07-23 1:11 UTC (permalink / raw) To: Christoph Hellwig, Jérôme Glisse, Jason Gunthorpe, Ben Skeggs Cc: linux-mm-Bw31MaZKKs3YtjvyW6yDsg, linux-kernel-u79uwXL29TY76Z2rM5mHXA, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW On 7/22/19 2:44 AM, Christoph Hellwig wrote: > Hi Jérôme, Ben and Jason, > > below is a series against the hmm tree which fixes up the mmap_sem > locking in nouveau and while at it also removes leftover legacy HMM APIs > only used by nouveau. > > The first 4 patches are a bug fix for nouveau, which I suspect should > go into this merge window even if the code is marked as staging, just > to avoid people copying the breakage. > > Changes since v1: > - don't return the valid state from hmm_range_unregister > - additional nouveau cleanups > I ran some OpenCL tests from Jerome with nouveau and this series, 5.3.0-rc1, and my two HMM fixes: ("mm/hmm: fix ZONE_DEVICE anon page mapping reuse") ("mm/hmm: Fix bad subpage pointer in try_to_unmap_one") You can add for the series: Tested-by: Ralph Campbell <rcampbell@nvidia.com> _______________________________________________ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau ^ permalink raw reply [flat|nested] 18+ messages in thread
[parent not found: <7e1f33d4-4d3b-7927-38d1-b98b22ed4d78-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* Re: hmm_range_fault related fixes and legacy API removal v2 [not found] ` <7e1f33d4-4d3b-7927-38d1-b98b22ed4d78-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2019-07-23 15:20 ` Jason Gunthorpe 0 siblings, 0 replies; 18+ messages in thread From: Jason Gunthorpe @ 2019-07-23 15:20 UTC (permalink / raw) To: Ralph Campbell Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, Ben Skeggs, Christoph Hellwig On Mon, Jul 22, 2019 at 06:11:04PM -0700, Ralph Campbell wrote: > > On 7/22/19 2:44 AM, Christoph Hellwig wrote: > > Hi Jérôme, Ben and Jason, > > > > below is a series against the hmm tree which fixes up the mmap_sem > > locking in nouveau and while at it also removes leftover legacy HMM APIs > > only used by nouveau. > > > > The first 4 patches are a bug fix for nouveau, which I suspect should > > go into this merge window even if the code is marked as staging, just > > to avoid people copying the breakage. > > > > Changes since v1: > > - don't return the valid state from hmm_range_unregister > > - additional nouveau cleanups > > > > I ran some OpenCL tests from Jerome with nouveau and this series, > 5.3.0-rc1, and my two HMM fixes: > ("mm/hmm: fix ZONE_DEVICE anon page mapping reuse") > ("mm/hmm: Fix bad subpage pointer in try_to_unmap_one") > > You can add for the series: > Tested-by: Ralph Campbell <rcampbell@nvidia.com> Thanks, would you also rebase and resend the patch deleting struct hmm_update ? Jason _______________________________________________ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: hmm_range_fault related fixes and legacy API removal v2 2019-07-22 9:44 Christoph Hellwig [not found] ` <20190722094426.18563-1-hch-jcswGhMUV9g@public.gmane.org> @ 2019-07-23 15:27 ` Jason Gunthorpe 2019-07-23 16:32 ` Christoph Hellwig 1 sibling, 1 reply; 18+ messages in thread From: Jason Gunthorpe @ 2019-07-23 15:27 UTC (permalink / raw) To: Christoph Hellwig Cc: Jérôme Glisse, Ben Skeggs, Ralph Campbell, linux-mm@kvack.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org On Mon, Jul 22, 2019 at 11:44:20AM +0200, Christoph Hellwig wrote: > Hi Jérôme, Ben and Jason, > > below is a series against the hmm tree which fixes up the mmap_sem > locking in nouveau and while at it also removes leftover legacy HMM APIs > only used by nouveau. > > The first 4 patches are a bug fix for nouveau, which I suspect should > go into this merge window even if the code is marked as staging, just > to avoid people copying the breakage. Ignoring the STAGING issue I've tried to use the same guideline as for -stable for -rc .. So this is a real problem, we definitely hit the locking bugs if we retry/etc under stress, so I would be OK to send it to Linus for early-rc. However, it doesn't look like the 1st patch is fixing a current bug though, the only callers uses blocking = true, so just the middle three are -rc? Thanks, Jason ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: hmm_range_fault related fixes and legacy API removal v2 2019-07-23 15:27 ` Jason Gunthorpe @ 2019-07-23 16:32 ` Christoph Hellwig 0 siblings, 0 replies; 18+ messages in thread From: Christoph Hellwig @ 2019-07-23 16:32 UTC (permalink / raw) To: Jason Gunthorpe Cc: Christoph Hellwig, Jérôme Glisse, Ben Skeggs, Ralph Campbell, linux-mm@kvack.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org On Tue, Jul 23, 2019 at 03:27:41PM +0000, Jason Gunthorpe wrote: > Ignoring the STAGING issue I've tried to use the same guideline as for > -stable for -rc .. > > So this is a real problem, we definitely hit the locking bugs if we > retry/etc under stress, so I would be OK to send it to Linus for > early-rc. > > However, it doesn't look like the 1st patch is fixing a current bug > though, the only callers uses blocking = true, so just the middle > three are -rc? nonblocking isn't used anywher, but it is a major, major API bug. Your call, but if it was my tree I'd probably send it to Linus. ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2019-07-23 16:32 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-07-03 22:02 hmm_range_fault related fixes and legacy API removal v2 Christoph Hellwig
[not found] ` <20190703220214.28319-1-hch-jcswGhMUV9g@public.gmane.org>
2019-07-03 22:02 ` [PATCH 1/6] mm: always return EBUSY for invalid ranges in hmm_range_{fault, snapshot} Christoph Hellwig
2019-07-03 22:02 ` [PATCH 2/6] mm: move hmm_vma_range_done and hmm_vma_fault to nouveau Christoph Hellwig
2019-07-03 22:02 ` [PATCH 3/6] nouveau: remove the block parameter to nouveau_range_fault Christoph Hellwig
2019-07-03 22:02 ` [PATCH 5/6] nouveau: return -EBUSY when hmm_range_wait_until_valid fails Christoph Hellwig
2019-07-03 22:02 ` [PATCH 6/6] mm: remove the legacy hmm_pfn_* APIs Christoph Hellwig
2019-07-03 22:02 ` [PATCH 4/6] nouveau: unlock mmap_sem on all errors from nouveau_range_fault Christoph Hellwig
2019-07-04 16:42 ` hmm_range_fault related fixes and legacy API removal v2 Jason Gunthorpe
2019-07-08 17:30 ` Ralph Campbell
[not found] ` <41dbb308-fc9e-d730-ffb0-6ce051dff1e1-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2019-07-08 17:32 ` Jason Gunthorpe
2019-07-05 12:33 ` Jason Gunthorpe
2019-07-09 14:30 ` Christoph Hellwig
[not found] ` <20190709143038.GA3092-jcswGhMUV9g@public.gmane.org>
2019-07-09 19:33 ` Jason Gunthorpe
-- strict thread matches above, loose matches on Subject: below --
2019-07-22 9:44 Christoph Hellwig
[not found] ` <20190722094426.18563-1-hch-jcswGhMUV9g@public.gmane.org>
2019-07-23 1:11 ` Ralph Campbell
[not found] ` <7e1f33d4-4d3b-7927-38d1-b98b22ed4d78-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2019-07-23 15:20 ` Jason Gunthorpe
2019-07-23 15:27 ` Jason Gunthorpe
2019-07-23 16:32 ` Christoph Hellwig
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox