[Freedreno] [PATCH 00/14] drm/msm: de-struct_mutex-ification

2020-10-04 Thread Rob Clark
From: Rob Clark This doesn't remove *all* the struct_mutex, but it covers the worst of it, ie. shrinker/madvise/free/retire. The submit path still uses struct_mutex, but it still needs *something* serialize a portion of the submit path, and lock_stat mostly just shows the lock contention

[Freedreno] [PATCH 01/14] drm/msm: Use correct drm_gem_object_put() in fail case

2020-10-04 Thread Rob Clark
From: Rob Clark We only want to use the _unlocked() variant in the unlocked case. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 6 +- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index

[Freedreno] [PATCH 04/14] drm/msm: Add priv->mm_lock to protect active/inactive lists

2020-10-04 Thread Rob Clark
From: Rob Clark Rather than relying on the big dev->struct_mutex hammer, introduce a more specific lock for protecting the bo lists. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_debugfs.c | 7 +++ drivers/gpu/drm/msm/msm_drv.c | 1 + drivers/gpu/drm/msm/msm_dr

[Freedreno] [PATCH 03/14] drm/msm: Move update_fences()

2020-10-04 Thread Rob Clark
From: Rob Clark Small cleanup, update_fences() is used in the hangcheck path, but also in the normal retire path. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gpu.c | 28 ++-- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/msm

[Freedreno] [PATCH 02/14] drm/msm: Drop chatty trace

2020-10-04 Thread Rob Clark
From: Rob Clark It is somewhat redundant with the gpu tracepoints, and anyways not too useful to justify spamming the log when debug traces are enabled. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gpu.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/gpu/drm/msm/msm_gpu.c

[Freedreno] [PATCH 06/14] drm/msm: Protect ring->submits with it's own lock

2020-10-04 Thread Rob Clark
From: Rob Clark One less place to rely on dev->struct_mutex. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem_submit.c | 2 ++ drivers/gpu/drm/msm/msm_gpu.c| 37 ++-- drivers/gpu/drm/msm/msm_ringbuffer.c | 1 + drivers/gpu/drm/msm/msm_ringbuffe

[Freedreno] [PATCH 05/14] drm/msm: Document and rename preempt_lock

2020-10-04 Thread Rob Clark
From: Rob Clark Before adding another lock, give ring->lock a more descriptive name. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 4 ++-- drivers/gpu/drm/msm/adreno/a5xx_preempt.c | 12 ++-- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 4 ++-- drivers/

[Freedreno] [PATCH 10/14] drm/msm: Drop struct_mutex in free_object() path

2020-10-04 Thread Rob Clark
From: Rob Clark Now that active_list/inactive_list is protected by mm_lock, we no longer need dev->struct_mutex in the free_object() path. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 8 1 file changed, 8 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem.

[Freedreno] [PATCH 12/14] drm/msm: drop struct_mutex in madvise path

2020-10-04 Thread Rob Clark
From: Rob Clark The obj->lock is sufficient for what we need. This *does* have the implication that userspace can try to shoot themselves in the foot by racing madvise(DONTNEED) with submit. But the result will be about the same if they did madvise(DONTNEED) before the submit ioctl, ie. t

[Freedreno] [PATCH 07/14] drm/msm: Refcount submits

2020-10-04 Thread Rob Clark
From: Rob Clark Before we remove dev->struct_mutex from the retire path, we have to deal with the situation of a submit retiring before the submit ioctl returns. To deal with this, ring->submits will hold a reference to the submit, which is dropped when the submit is retired. And the

[Freedreno] [PATCH 11/14] drm/msm: remove msm_gem_free_work

2020-10-04 Thread Rob Clark
From: Rob Clark Now that we don't need struct_mutex in the free path, we can get rid of the asynchronous free altogether. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_drv.c | 3 --- drivers/gpu/drm/msm/msm_drv.h | 5 - drivers/gpu/drm/msm/msm_gem.c

[Freedreno] [PATCH 13/14] drm/msm: Drop struct_mutex in shrinker path

2020-10-04 Thread Rob Clark
From: Rob Clark Now that the inactive_list is protected by mm_lock, and everything else on per-obj basis is protected by obj->lock, we no longer depend on struct_mutex. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 1 - drivers/gpu/drm/msm/msm_gem_shrinker.c |

[Freedreno] [PATCH 14/14] drm/msm: Don't implicit-sync if only a single ring

2020-10-04 Thread Rob Clark
From: Rob Clark Any cross-device sync use-cases *must* use explicit sync. And if there is only a single ring (no-preemption), everything is FIFO order and there is no need to implicit-sync. Mesa should probably just always use MSM_SUBMIT_NO_IMPLICIT, as behavior is undefined when fences are

[Freedreno] [PATCH 08/14] drm/msm: Remove obj->gpu

2020-10-04 Thread Rob Clark
From: Rob Clark It cannot be atomically updated with obj->active_count, and the only purpose is a useless WARN_ON() (which becomes a buggy WARN_ON() once retire_submits() is not serialized with incoming submits via struct_mutex) Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c

[Freedreno] [PATCH 09/14] drm/msm: Drop struct_mutex from the retire path

2020-10-04 Thread Rob Clark
From: Rob Clark Now that we are not relying on dev->struct_mutex to protect the ring->submits lists, drop the struct_mutex lock. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gpu.c | 8 +--- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/gpu/drm/msm/msm

Re: [Freedreno] [PATCH 04/14] drm/msm: Add priv->mm_lock to protect active/inactive lists

2020-10-04 Thread Rob Clark
On Sun, Oct 4, 2020 at 3:15 PM Daniel Vetter wrote: > > On Sun, Oct 4, 2020 at 9:21 PM Rob Clark wrote: > > > > From: Rob Clark > > > > Rather than relying on the big dev->struct_mutex hammer, introduce a > > more specific lock for protecting the bo

Re: [Freedreno] [PATCH 07/14] drm/msm: Refcount submits

2020-10-05 Thread Rob Clark
On Mon, Oct 5, 2020 at 6:56 AM Daniel Vetter wrote: > > On Sun, Oct 04, 2020 at 12:21:39PM -0700, Rob Clark wrote: > > From: Rob Clark > > > > Before we remove dev->struct_mutex from the retire path, we have to deal > > with the situation of a submit retirin

Re: [Freedreno] [PATCH 13/14] drm/msm: Drop struct_mutex in shrinker path

2020-10-05 Thread Rob Clark
On Mon, Oct 5, 2020 at 7:02 AM Daniel Vetter wrote: > > On Mon, Oct 05, 2020 at 05:24:19PM +0800, Hillf Danton wrote: > > > > On Sun, 4 Oct 2020 12:21:45 > > > From: Rob Clark > > > > > > Now that the inactive_list is protected by mm_lock, and everyt

Re: [Freedreno] [PATCH 00/14] drm/msm: de-struct_mutex-ification

2020-10-05 Thread Rob Clark
On Mon, Oct 5, 2020 at 11:20 AM Daniel Vetter wrote: > > On Mon, Oct 5, 2020 at 6:24 PM Kristian Høgsberg wrote: > > > > On Sun, Oct 4, 2020 at 9:21 PM Rob Clark wrote: > > > > > > From: Rob Clark > > > > > > This doesn't remove *all

Re: [Freedreno] [PATCH 13/14] drm/msm: Drop struct_mutex in shrinker path

2020-10-05 Thread Rob Clark
gt; > > > > > On Sun, 4 Oct 2020 12:21:45 > > > > > From: Rob Clark > > > > > > > > > > Now that the inactive_list is protected by mm_lock, and everything > > > > > else on per-obj basis is protected by obj->lock, we no longer

[Freedreno] [PATCH v2 01/22] drm/msm/gem: Add obj->lock wrappers

2020-10-11 Thread Rob Clark
From: Rob Clark This will make it easier to transition over to obj->resv locking for everything that is per-bo locking. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 99 --- drivers/gpu/drm/msm/msm_gem.h | 28 ++ 2 files changed,

[Freedreno] [PATCH v2 08/22] drm/msm/gem: Switch over to obj->resv for locking

2020-10-11 Thread Rob Clark
From: Rob Clark Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c| 4 +--- drivers/gpu/drm/msm/msm_gem.h| 16 +--- drivers/gpu/drm/msm/msm_gem_submit.c | 4 ++-- drivers/gpu/drm/msm/msm_gpu.c| 2 +- 4 files changed, 9 insertions(+), 17 deletions

[Freedreno] [PATCH v2 05/22] drm/msm/gem: Move locking in shrinker path

2020-10-11 Thread Rob Clark
From: Rob Clark Move grabbing the bo lock into shrinker, with a msm_gem_trylock() to skip over bo's that are already locked. This gets rid of the nested lock classes. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 24 + drivers/gpu/drm/msm/msm_

[Freedreno] [PATCH v2 09/22] drm/msm: Use correct drm_gem_object_put() in fail case

2020-10-11 Thread Rob Clark
From: Rob Clark We only want to use the _unlocked() variant in the unlocked case. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 6 +- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index

[Freedreno] [PATCH v2 04/22] drm/msm/gem: Add some _locked() helpers

2020-10-11 Thread Rob Clark
From: Rob Clark When we cut-over to using dma_resv_lock/etc instead of msm_obj->lock, we'll need these for the submit path (where resv->lock is already held). Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 50 +++ drivers/gpu/drm/ms

[Freedreno] [PATCH 00/14] drm/msm: de-struct_mutex-ification

2020-10-11 Thread Rob Clark
From: Rob Clark This doesn't remove *all* the struct_mutex, but it covers the worst of it, ie. shrinker/madvise/free/retire. The submit path still uses struct_mutex, but it still needs *something* serialize a portion of the submit path, and lock_stat mostly just shows the lock contention

[Freedreno] [PATCH v2 21/22] drm/msm: Drop struct_mutex in shrinker path

2020-10-11 Thread Rob Clark
From: Rob Clark Now that the inactive_list is protected by mm_lock, and everything else on per-obj basis is protected by obj->lock, we no longer depend on struct_mutex. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 1 - drivers/gpu/drm/msm/msm_gem_shrinker.c |

[Freedreno] [PATCH v2 19/22] drm/msm: remove msm_gem_free_work

2020-10-11 Thread Rob Clark
From: Rob Clark Now that we don't need struct_mutex in the free path, we can get rid of the asynchronous free altogether. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_drv.c | 3 --- drivers/gpu/drm/msm/msm_drv.h | 5 - drivers/gpu/drm/msm/msm_gem.c

[Freedreno] [PATCH v2 06/22] drm/msm/submit: Move copy_from_user ahead of locking bos

2020-10-11 Thread Rob Clark
From: Rob Clark We cannot switch to using obj->resv for locking without first moving all the copy_from_user() ahead of submit_lock_objects(). Otherwise in the mm fault path we aquire mm->mmap_sem before obj lock, but in the submit path the order is reversed. Signed-off-by: Rob

[Freedreno] [PATCH v2 11/22] drm/msm: Move update_fences()

2020-10-11 Thread Rob Clark
From: Rob Clark Small cleanup, update_fences() is used in the hangcheck path, but also in the normal retire path. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_gpu.c | 28 ++-- 1 file changed, 14 insertions(+), 14 deletions(-) diff

[Freedreno] [PATCH v2 13/22] drm/msm: Document and rename preempt_lock

2020-10-11 Thread Rob Clark
From: Rob Clark Before adding another lock, give ring->lock a more descriptive name. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 4 ++-- drivers/gpu/drm/msm/adreno/a5xx_preempt.c | 12 ++-- drivers/gpu/drm/msm/adreno/a6xx_gp

[Freedreno] [PATCH v2 22/22] drm/msm: Don't implicit-sync if only a single ring

2020-10-11 Thread Rob Clark
From: Rob Clark Any cross-device sync use-cases *must* use explicit sync. And if there is only a single ring (no-preemption), everything is FIFO order and there is no need to implicit-sync. Mesa should probably just always use MSM_SUBMIT_NO_IMPLICIT, as behavior is undefined when fences are

[Freedreno] [PATCH v2 14/22] drm/msm: Protect ring->submits with it's own lock

2020-10-11 Thread Rob Clark
From: Rob Clark One less place to rely on dev->struct_mutex. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_gem_submit.c | 2 ++ drivers/gpu/drm/msm/msm_gpu.c| 37 ++-- drivers/gpu/drm/msm/msm_ringbuffer.c | 1 + drivers/

[Freedreno] [PATCH v2 20/22] drm/msm: drop struct_mutex in madvise path

2020-10-11 Thread Rob Clark
From: Rob Clark The obj->lock is sufficient for what we need. This *does* have the implication that userspace can try to shoot themselves in the foot by racing madvise(DONTNEED) with submit. But the result will be about the same if they did madvise(DONTNEED) before the submit ioctl, ie. t

[Freedreno] [PATCH v2 17/22] drm/msm: Drop struct_mutex from the retire path

2020-10-11 Thread Rob Clark
From: Rob Clark Now that we are not relying on dev->struct_mutex to protect the ring->submits lists, drop the struct_mutex lock. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_gpu.c | 8 +--- 1 file changed, 1 insertion(+), 7 deletions(-) diff -

[Freedreno] [PATCH v2 10/22] drm/msm: Drop chatty trace

2020-10-11 Thread Rob Clark
From: Rob Clark It is somewhat redundant with the gpu tracepoints, and anyways not too useful to justify spamming the log when debug traces are enabled. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_gpu.c | 1 - 1 file changed, 1 deletion(-) diff --git a

[Freedreno] [PATCH v2 16/22] drm/msm: Remove obj->gpu

2020-10-11 Thread Rob Clark
From: Rob Clark It cannot be atomically updated with obj->active_count, and the only purpose is a useless WARN_ON() (which becomes a buggy WARN_ON() once retire_submits() is not serialized with incoming submits via struct_mutex) Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c

[Freedreno] [PATCH v2 02/22] drm/msm/gem: Rename internal get_iova_locked helper

2020-10-11 Thread Rob Clark
From: Rob Clark We'll need to introduce a _locked() version of msm_gem_get_iova(), so we need to make that name available. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_ge

[Freedreno] [PATCH v2 18/22] drm/msm: Drop struct_mutex in free_object() path

2020-10-11 Thread Rob Clark
From: Rob Clark Now that active_list/inactive_list is protected by mm_lock, we no longer need dev->struct_mutex in the free_object() path. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 8 1 file changed, 8 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem.

[Freedreno] [PATCH v2 15/22] drm/msm: Refcount submits

2020-10-11 Thread Rob Clark
From: Rob Clark Before we remove dev->struct_mutex from the retire path, we have to deal with the situation of a submit retiring before the submit ioctl returns. To deal with this, ring->submits will hold a reference to the submit, which is dropped when the submit is retired. And the

[Freedreno] [PATCH v2 07/22] drm/msm: Do rpm get sooner in the submit path

2020-10-11 Thread Rob Clark
From: Rob Clark Unfortunately, due to an dev_pm_opp locking interaction with mm->mmap_sem, we need to do pm get before aquiring obj locks, otherwise we can have anger lockdep with the chain: opp_table_lock --> &mm->mmap_sem --> reservation_ww_class_mutex For an explicit f

[Freedreno] [PATCH v2 12/22] drm/msm: Add priv->mm_lock to protect active/inactive lists

2020-10-11 Thread Rob Clark
From: Rob Clark Rather than relying on the big dev->struct_mutex hammer, introduce a more specific lock for protecting the bo lists. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_debugfs.c | 7 +++ drivers/gpu/drm/msm/msm_drv.c |

[Freedreno] [PATCH v2 03/22] drm/msm/gem: Move prototypes to msm_gem.h

2020-10-11 Thread Rob Clark
From: Rob Clark Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c | 1 + drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 1 + drivers/gpu/drm/msm/dsi/dsi_host.c| 1 + drivers/gpu/drm/msm/msm_drv.h | 54 -- drivers/gpu/drm/msm

Re: [Freedreno] [PATCH v2 22/22] drm/msm: Don't implicit-sync if only a single ring

2020-10-12 Thread Rob Clark
On Mon, Oct 12, 2020 at 7:40 AM Daniel Vetter wrote: > > On Sun, Oct 11, 2020 at 07:09:49PM -0700, Rob Clark wrote: > > From: Rob Clark > > > > Any cross-device sync use-cases *must* use explicit sync. And if there > > is only a single ring (no-preemption)

Re: [Freedreno] [PATCH v2 07/22] drm/msm: Do rpm get sooner in the submit path

2020-10-12 Thread Rob Clark
On Mon, Oct 12, 2020 at 7:35 AM Daniel Vetter wrote: > > On Sun, Oct 11, 2020 at 07:09:34PM -0700, Rob Clark wrote: > > From: Rob Clark > > > > Unfortunately, due to an dev_pm_opp locking interaction with > > mm->mmap_sem, we need to do pm get before aquiring obj

Re: [Freedreno] [PATCH 2/3] drm/msm: add DRM_MSM_GEM_SYNC_CACHE for non-coherent cache maintenance

2020-10-13 Thread Rob Clark
On Tue, Oct 13, 2020 at 6:42 AM Robin Murphy wrote: > > On 2020-10-07 07:25, Christoph Hellwig wrote: > > On Tue, Oct 06, 2020 at 09:19:32AM -0400, Jonathan Marek wrote: > >> One example why drm/msm can't use DMA API is multiple page table support > >> (that is landing in 5.10), which is something

Re: [Freedreno] [PATCH v2 22/22] drm/msm: Don't implicit-sync if only a single ring

2020-10-13 Thread Rob Clark
On Tue, Oct 13, 2020 at 4:08 AM Daniel Vetter wrote: > > On Mon, Oct 12, 2020 at 08:07:38AM -0700, Rob Clark wrote: > > On Mon, Oct 12, 2020 at 7:40 AM Daniel Vetter wrote: > > > > > > On Sun, Oct 11, 2020 at 07:09:49PM -0700, Rob Clark wrote: > > > >

Re: [Freedreno] [v1] drm/msm: Fix race condition in msm driver with async layer updates

2020-10-14 Thread Rob Clark
On Wed, Oct 14, 2020 at 5:58 AM Krishna Manikandan wrote: > > When there are back to back commits with async cursor update, > there is a case where second commit can program the DPU hw > blocks while first didn't complete flushing config to HW. > > Synchronize the compositions such that second com

Re: [Freedreno] [v2] drm/msm: Fix race condition in msm driver with async layer updates

2020-10-15 Thread Rob Clark
itions such that second commit waits > until first commit flushes the composition. > > This change also introduces per crtc commit lock, such that > commits on different crtcs are not blocked by each other. > > Changes in v2: > - Use an array of mutexes in kms to handle

Re: [Freedreno] [v3] drm/msm: Fix race condition in msm driver with async layer updates

2020-10-16 Thread Rob Clark
itions such that second commit waits > until first commit flushes the composition. > > This change also introduces per crtc commit lock, such that > commits on different crtcs are not blocked by each other. > > Changes in v2: > - Use an array of mutexes in kms to handle

[Freedreno] [PATCH v3 06/23] drm/msm/gem: Move locking in shrinker path

2020-10-19 Thread Rob Clark
From: Rob Clark Move grabbing the bo lock into shrinker, with a msm_gem_trylock() to skip over bo's that are already locked. This gets rid of the nested lock classes. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 24 + drivers/gpu/drm/msm/msm_

[Freedreno] [PATCH v3 04/23] drm/msm/gem: Move prototypes to msm_gem.h

2020-10-19 Thread Rob Clark
From: Rob Clark Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c | 1 + drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 1 + drivers/gpu/drm/msm/dsi/dsi_host.c| 1 + drivers/gpu/drm/msm/msm_drv.h | 54 -- drivers/gpu/drm/msm

[Freedreno] [PATCH v3 05/23] drm/msm/gem: Add some _locked() helpers

2020-10-19 Thread Rob Clark
From: Rob Clark When we cut-over to using dma_resv_lock/etc instead of msm_obj->lock, we'll need these for the submit path (where resv->lock is already held). Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 89 +++ drivers/gpu/drm/ms

[Freedreno] [PATCH v3 10/23] drm/msm: Use correct drm_gem_object_put() in fail case

2020-10-19 Thread Rob Clark
From: Rob Clark We only want to use the _unlocked() variant in the unlocked case. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 6 +- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index

[Freedreno] [PATCH v3 01/23] drm/msm: Fix a couple incorrect usages of get_vaddr_active()

2020-10-19 Thread Rob Clark
From: Rob Clark The microcode bo's should never be madvise(WONTNEED), so these should not be using msm_gem_get_vaddr_active(). Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 2 +- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 2 +- 2 files changed, 2 insertions(+), 2 dele

[Freedreno] [PATCH v3 09/23] drm/msm/gem: Switch over to obj->resv for locking

2020-10-19 Thread Rob Clark
From: Rob Clark This also converts the special msm_gem_get_vaddr_active() to expect the lock to already be held. There are two call-sites for this, one already has the lock held, so it is more straightforward to just open-code the locking for the other caller. Signed-off-by: Rob Clark

[Freedreno] [PATCH v3 00/23] drm/msm: de-struct_mutex-ification

2020-10-19 Thread Rob Clark
From: Rob Clark This doesn't remove *all* the struct_mutex, but it covers the worst of it, ie. shrinker/madvise/free/retire. The submit path still uses struct_mutex, but it still needs *something* serialize a portion of the submit path, and lock_stat mostly just shows the lock contention

[Freedreno] [PATCH v3 03/23] drm/msm/gem: Rename internal get_iova_locked helper

2020-10-19 Thread Rob Clark
From: Rob Clark We'll need to introduce a _locked() version of msm_gem_get_iova(), so we need to make that name available. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_ge

[Freedreno] [PATCH v3 12/23] drm/msm: Move update_fences()

2020-10-19 Thread Rob Clark
From: Rob Clark Small cleanup, update_fences() is used in the hangcheck path, but also in the normal retire path. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_gpu.c | 28 ++-- 1 file changed, 14 insertions(+), 14 deletions(-) diff

[Freedreno] [PATCH v3 02/23] drm/msm/gem: Add obj->lock wrappers

2020-10-19 Thread Rob Clark
From: Rob Clark This will make it easier to transition over to obj->resv locking for everything that is per-bo locking. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 99 --- drivers/gpu/drm/msm/msm_gem.h | 28 ++ 2 files changed,

[Freedreno] [PATCH v3 11/23] drm/msm: Drop chatty trace

2020-10-19 Thread Rob Clark
From: Rob Clark It is somewhat redundant with the gpu tracepoints, and anyways not too useful to justify spamming the log when debug traces are enabled. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_gpu.c | 1 - 1 file changed, 1 deletion(-) diff --git a

[Freedreno] [PATCH v3 08/23] drm/msm: Do rpm get sooner in the submit path

2020-10-19 Thread Rob Clark
From: Rob Clark Unfortunately, due to an dev_pm_opp locking interaction with mm->mmap_sem, we need to do pm get before aquiring obj locks, otherwise we can have anger lockdep with the chain: opp_table_lock --> &mm->mmap_sem --> reservation_ww_class_mutex For an explicit f

[Freedreno] [PATCH v3 07/23] drm/msm/submit: Move copy_from_user ahead of locking bos

2020-10-19 Thread Rob Clark
From: Rob Clark We cannot switch to using obj->resv for locking without first moving all the copy_from_user() ahead of submit_lock_objects(). Otherwise in the mm fault path we aquire mm->mmap_sem before obj lock, but in the submit path the order is reversed. Signed-off-by: Rob

[Freedreno] [PATCH v3 21/23] drm/msm: Drop struct_mutex in madvise path

2020-10-19 Thread Rob Clark
From: Rob Clark The obj->lock is sufficient for what we need. This *does* have the implication that userspace can try to shoot themselves in the foot by racing madvise(DONTNEED) with submit. But the result will be about the same if they did madvise(DONTNEED) before the submit ioctl, ie. t

[Freedreno] [PATCH v3 20/23] drm/msm: Remove msm_gem_free_work

2020-10-19 Thread Rob Clark
From: Rob Clark Now that we don't need struct_mutex in the free path, we can get rid of the asynchronous free altogether. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_drv.c | 3 --- drivers/gpu/drm/msm/msm_drv.h | 5 - drivers/gpu/drm/msm/msm_gem.c

[Freedreno] [PATCH v3 19/23] drm/msm: Drop struct_mutex in free_object() path

2020-10-19 Thread Rob Clark
From: Rob Clark Now that active_list/inactive_list is protected by mm_lock, we no longer need dev->struct_mutex in the free_object() path. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 8 1 file changed, 8 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem.

[Freedreno] [PATCH v3 23/23] drm/msm: Don't implicit-sync if only a single ring

2020-10-19 Thread Rob Clark
From: Rob Clark If there is only a single ring (no-preemption), everything is FIFO order and there is no need to implicit-sync. Mesa should probably just always use MSM_SUBMIT_NO_IMPLICIT, as behavior is undefined when fences are not used to synchronize buffer usage across contexts (which is

[Freedreno] [PATCH v3 17/23] drm/msm: Remove obj->gpu

2020-10-19 Thread Rob Clark
From: Rob Clark It cannot be atomically updated with obj->active_count, and the only purpose is a useless WARN_ON() (which becomes a buggy WARN_ON() once retire_submits() is not serialized with incoming submits via struct_mutex) Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c

[Freedreno] [PATCH v3 15/23] drm/msm: Protect ring->submits with it's own lock

2020-10-19 Thread Rob Clark
From: Rob Clark One less place to rely on dev->struct_mutex. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_gem_submit.c | 2 ++ drivers/gpu/drm/msm/msm_gpu.c| 37 ++-- drivers/gpu/drm/msm/msm_ringbuffer.c | 1 + drivers/

[Freedreno] [PATCH v3 13/23] drm/msm: Add priv->mm_lock to protect active/inactive lists

2020-10-19 Thread Rob Clark
From: Rob Clark Rather than relying on the big dev->struct_mutex hammer, introduce a more specific lock for protecting the bo lists. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_debugfs.c | 7 +++ drivers/gpu/drm/msm/msm_drv.c |

[Freedreno] [PATCH v3 14/23] drm/msm: Document and rename preempt_lock

2020-10-19 Thread Rob Clark
From: Rob Clark Before adding another lock, give ring->lock a more descriptive name. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 4 ++-- drivers/gpu/drm/msm/adreno/a5xx_preempt.c | 12 ++-- drivers/gpu/drm/msm/adreno/a6xx_gp

[Freedreno] [PATCH v3 18/23] drm/msm: Drop struct_mutex from the retire path

2020-10-19 Thread Rob Clark
From: Rob Clark Now that we are not relying on dev->struct_mutex to protect the ring->submits lists, drop the struct_mutex lock. Signed-off-by: Rob Clark Reviewed-by: Jordan Crouse --- drivers/gpu/drm/msm/msm_gpu.c | 8 +--- 1 file changed, 1 insertion(+), 7 deletions(-) diff -

[Freedreno] [PATCH v3 22/23] drm/msm: Drop struct_mutex in shrinker path

2020-10-19 Thread Rob Clark
From: Rob Clark Now that the inactive_list is protected by mm_lock, and everything else on per-obj basis is protected by obj->lock, we no longer depend on struct_mutex. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 1 - drivers/gpu/drm/msm/msm_gem_shrinker.c |

[Freedreno] [PATCH v3 16/23] drm/msm: Refcount submits

2020-10-19 Thread Rob Clark
From: Rob Clark Before we remove dev->struct_mutex from the retire path, we have to deal with the situation of a submit retiring before the submit ioctl returns. To deal with this, ring->submits will hold a reference to the submit, which is dropped when the submit is retired. And the

[Freedreno] [PATCH 1/3] drm/msm/gpu: Convert retire/recover work to kthread_worker

2020-10-19 Thread Rob Clark
From: Rob Clark Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 3 +-- drivers/gpu/drm/msm/adreno/a5xx_preempt.c | 6 ++--- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 4 +-- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 4 +-- drivers/gpu/drm/msm/msm_gpu.c

[Freedreno] [PATCH 0/3] drm/msm: kthread_worker conversion

2020-10-19 Thread Rob Clark
From: Rob Clark In particular, converting the async atomic commit (for cursor updates, etc) to SCHED_FIFO kthread_worker helps with some cases where we wouldn't manage to flush the updates within the 1ms-before-vblank deadline resulting in fps drops when there is cursor movement. Rob Cla

[Freedreno] [PATCH 3/3] drm/msm/atomic: Convert to per-CRTC kthread_work

2020-10-19 Thread Rob Clark
From: Rob Clark Use a SCHED_FIFO kthread_worker for async atomic commits. We have a hard deadline if we don't want to miss a frame. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_atomic.c | 25 - drivers/gpu/drm/msm/msm_drv.h| 3 ++- drivers/gpu/dr

[Freedreno] [PATCH 2/3] drm/msm/kms: Update msm_kms_init/destroy

2020-10-19 Thread Rob Clark
From: Rob Clark Add msm_kms_destroy() and add err return from msm_kms_init(). Prep work for next patch. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 8 +++- drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c | 8 +++- drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 11

Re: [Freedreno] [PATCH 0/3] drm/msm: kthread_worker conversion

2020-10-20 Thread Rob Clark
On Tue, Oct 20, 2020 at 1:24 AM Daniel Vetter wrote: > > On Mon, Oct 19, 2020 at 02:10:50PM -0700, Rob Clark wrote: > > From: Rob Clark > > > > In particular, converting the async atomic commit (for cursor updates, > > etc) to SCHED_FIFO kthread_worker helps with so

Re: [Freedreno] [PATCH v2 07/22] drm/msm: Do rpm get sooner in the submit path

2020-10-20 Thread Rob Clark
On Tue, Oct 20, 2020 at 4:24 AM Viresh Kumar wrote: > > On 20-10-20, 12:56, Daniel Vetter wrote: > > Yeah that's bad practice. Generally you shouldn't need to hold locks > > in setup/teardown code, since there's no other thread which can > > possible hold a reference to anything your touching anym

Re: [Freedreno] [PATCH 0/3] drm/msm: kthread_worker conversion

2020-10-20 Thread Rob Clark
On Tue, Oct 20, 2020 at 7:29 AM Daniel Vetter wrote: > > On Tue, Oct 20, 2020 at 4:01 PM Rob Clark wrote: > > > > On Tue, Oct 20, 2020 at 1:24 AM Daniel Vetter wrote: > > > > > > On Mon, Oct 19, 2020 at 02:10:50PM -0700, Rob Clark wrote: > > > >

Re: [Freedreno] [PATCH 0/3] drm/msm: kthread_worker conversion

2020-10-20 Thread Rob Clark
On Tue, Oct 20, 2020 at 10:02 AM Daniel Vetter wrote: > > On Tue, Oct 20, 2020 at 5:08 PM Rob Clark wrote: > > > > On Tue, Oct 20, 2020 at 7:29 AM Daniel Vetter wrote: > > > > > > On Tue, Oct 20, 2020 at 4:01 PM Rob Clark wrote: > > > > >

[Freedreno] [pull] drm/msm: msm-next for 4.7

2016-05-08 Thread Rob Clark
kernel warnings drm/msm: Centralize connector registration/unregistration drm/msm: Drop load/unload drm_driver ops Arnd Bergmann (1): drm: msm: remove unused variable Rob Clark (16): drm/msm: make HDCP support optional reservation: add reservation_object_get_excl_rcu()

[Freedreno] tilers and out-of-order rendering..

2016-05-19 Thread Rob Clark
So some rendering patterns that I've seen in apps turn out to be somewhat evil for tiling gpu's.. couple cases I've seen: 1) stk has some silliness where it binds an fbo, clears, binds other fbo clears, binds previous fbo and draws, and so on. This one is probably not too hard to just fix in stk.

Re: [Freedreno] tilers and out-of-order rendering..

2016-05-19 Thread Rob Clark
On Thu, May 19, 2016 at 6:21 PM, Eric Anholt wrote: > Rob Clark writes: > >> So some rendering patterns that I've seen in apps turn out to be >> somewhat evil for tiling gpu's.. couple cases I've seen: >> >> 1) stk has some silliness where it bi

Re: [Freedreno] [Mesa-dev] tilers and out-of-order rendering..

2016-05-20 Thread Rob Clark
On Fri, May 20, 2016 at 3:35 AM, Jose Fonseca wrote: > On 20/05/16 00:34, Rob Clark wrote: >> >> On Thu, May 19, 2016 at 6:21 PM, Eric Anholt wrote: >>> >>> Rob Clark writes: >>> >>>> So some rendering patterns that I've seen in apps

Re: [Freedreno] [Mesa-dev] tilers and out-of-order rendering..

2016-06-03 Thread Rob Clark
-> tile transfer). (Hell, there might even be some use to apps to expose the "this draw discards previous contents" type extension.. given some of the wonky vendor extensions I've seen, I wouldn't be surprised if it already existed.) Thoughts? BR, -R On Fri, May 20, 2016

Re: [Freedreno] [Mesa-dev] tilers and out-of-order rendering..

2016-06-04 Thread Rob Clark
On Fri, Jun 3, 2016 at 8:53 AM, Rob Clark wrote: > Ok, so I had a really evil thought that I wanted to bounce off > people.. it's a quite different approach from the more obvious one > discussed below (and which I've already started implementing) > > Basically, idea

Re: [Freedreno] [Mesa-dev] tilers and out-of-order rendering..

2016-06-06 Thread Rob Clark
On Mon, Jun 6, 2016 at 5:19 AM, Jose Fonseca wrote: > On 04/06/16 20:36, Rob Clark wrote: >> >> On Fri, Jun 3, 2016 at 8:53 AM, Rob Clark wrote: >>> >>> Ok, so I had a really evil thought that I wanted to bounce off >>> people.. it's a qui

[Freedreno] [pull] drm/msm: fixes for 4.7

2016-06-09 Thread Rob Clark
a9e26cab40ecfd4a0d718f22fa30db4dd1edbf60: drm/msm: fix potential submit error path issue (2016-06-04 14:45:50 -0400) Rob Clark (3): drm/msm: deal with exhausted vmap space better drm/msm: fix some crashes in submit fail path

Re: [Freedreno] linux-4.7-rc3/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c: 2 * pointless tests ?

2016-06-13 Thread Rob Clark
yup, looks like we can drop the two pipe<0 checks. Care to send a patch? BR, -R On Mon, Jun 13, 2016 at 10:51 AM, David Binderman wrote: > Hello there, > > 1. > > linux-4.7-rc3/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c:545]: (style) > Checking if unsigned variable 'pipe' is less than zero. > > So

[Freedreno] [PATCH 05/10] drm/msm: change gem->vmap() to get/put

2016-06-16 Thread Rob Clark
Before we can add vmap shrinking, we really need to know which vmap'ings are currently being used. So switch to get/put interface. Stubbed put fxns for now. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 6 +- drivers/gpu/drm/msm/dsi/dsi_host.c

[Freedreno] [PATCH 03/10] drm/msm: add put_iova() helper

2016-06-16 Thread Rob Clark
We'll need this too for shrinker/purging. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 30 +- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index c40db08..2636c27 1

[Freedreno] [PATCH 04/10] drm/msm: shrinker support

2016-06-16 Thread Rob Clark
For a first step, only purge obj->madv==DONTNEED objects. We could be more agressive and next try unpinning inactive objects.. but that is only useful if you have swap. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/Makefile | 1 + drivers/gpu/drm/msm/msm_drv.c |

[Freedreno] [PATCH 07/10] drm/msm: deal with arbitrary # of cmd buffers

2016-06-16 Thread Rob Clark
For some optimizations coming on the userspace side, splitting larger draw or gmem cmds into multiple cmdstream buffers, we need to support much more than the previous small/arbitrary limit. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.h| 4 +--- drivers/gpu/drm/msm

[Freedreno] [PATCH 01/10] drm/msm: use mutex_lock_interruptible for submit ioctl

2016-06-16 Thread Rob Clark
Be kinder to things that do lots of signal handling (ie. Xorg) Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem_submit.c | 13 + 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c index

[Freedreno] [PATCH 00/10] drm/msm: some stuff I'm working on for 4.8

2016-06-16 Thread Rob Clark
and keeping vmap's from being a problem on 32b systems. Rob Clark (10): drm/msm: use mutex_lock_interruptible for submit ioctl drm/msm: add madvise ioctl drm/msm: add put_iova() helper drm/msm: shrinker support drm/msm: change gem->vmap() to get/put drm/msm: wire up vmap shr

[Freedreno] [PATCH 06/10] drm/msm: wire up vmap shrinker

2016-06-16 Thread Rob Clark
Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_drv.h | 2 ++ drivers/gpu/drm/msm/msm_gem.c | 25 - drivers/gpu/drm/msm/msm_gem.h | 10 + drivers/gpu/drm/msm/msm_gem_shrinker.c | 40 ++ 4 files changed

[Freedreno] [PATCH 02/10] drm/msm: add madvise ioctl

2016-06-16 Thread Rob Clark
Doesn't do anything too interesting until we wire up shrinker. Pretty much lifted from i915. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_drv.c | 39 +++ drivers/gpu/drm/msm/msm_drv.h | 1 + drivers/gpu/drm/msm/msm_gem.c

[Freedreno] [PATCH 10/10] drm/msm/rd: add module param to dump all bo's

2016-06-16 Thread Rob Clark
By default, if using $debugfs/.../rd to log cmdstream, only the cmdstream buffers themselves are logged. But in some cases we want to capture other buffers in the submit (to see VBO's or shaders). So add a mod-param knob to control this. Signed-off-by: Rob Clark --- drivers/gpu/dr

<    8   9   10   11   12   13   14   15   16   17   >