Re: [PATCH] drm/radeon: fix semaphore value init

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 07.09.2014 um 19:41 schrieb Grigori Goronzy:
On 07.09.2014 12:06, Christian König wrote:
From: Christian König <christian.koenig@xxxxxxx>

Semaphore values have 64 bits, not 32. This fixes a very subtle bug
that disables synchronization when the upper 32bits wasn't zero.

So essentially, half the semaphore values were never properly
initialized and some loads with a lot of semaphore synchronization going
on tried to use the uninitialized semaphores. I think the description in
the commit could be improved according to that.
Thinking about it that's actually not correct either.

What we did here was allocating space for four semaphores, but only initializing the first two because the pointer didn't had the correct size.

Needing more than two semaphores is rather unlikely anyway and even then we would have only messed up the syncing to UVD or VCE which wouldn't cause a lockup. I don't think we ever hit this bug in practice.

I didn't get any DMA L2T copy hangs with semaphores disabled completely,
but unfortunately this doesn't fix the hangs.

As expected, I just found it while going over the code once more. My suspicion with your L2T copy problems is that we either do something wrong with the tilling setup on the DMA engines or that we still do something wrong with the VM setup, but since you don't see any VM related messages it's not very likely that it's a VM issue.

We should probably try to get a bit more infos from the DMA status registers, but I'm not sure if we have released the documentation for those yet.

Anyway,
Reviewed-By: Grigori Goronzy <greg@xxxxxxxxxxxx>

Thanks,
Christian.


Grigori

Signed-off-by: Christian König <christian.koenig@xxxxxxx>
Cc: stable@xxxxxxxxxxxxxxx
---
  drivers/gpu/drm/radeon/radeon_semaphore.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/radeon/radeon_semaphore.c b/drivers/gpu/drm/radeon/radeon_semaphore.c
index 56d9fd6..abd6753 100644
--- a/drivers/gpu/drm/radeon/radeon_semaphore.c
+++ b/drivers/gpu/drm/radeon/radeon_semaphore.c
@@ -34,7 +34,7 @@
  int radeon_semaphore_create(struct radeon_device *rdev,
  			    struct radeon_semaphore **semaphore)
  {
-	uint32_t *cpu_addr;
+	uint64_t *cpu_addr;
  	int i, r;
*semaphore = kmalloc(sizeof(struct radeon_semaphore), GFP_KERNEL);



_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel





[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux