Re: [PATCH 1/3] drm/radeon: stop poisoning the GART TLB

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

 



Hi,

With my "force_gtt" patch, Cape Verde is unstable too, so all GCN
chips are affected.

I recommend applying that patch, because it will reproduce the problem
faster. Without it, the hangs are very rare and it may take a while
before they occur.

Marek

On Thu, Jun 12, 2014 at 1:23 PM, Christian König
<deathsimple@xxxxxxxxxxx> wrote:
> Please do so, and you might want to try 3.15.0 as well.
>
> I've tested multiple piglit runs over night with my Bonaire and 3.15.0 and
> that seemed to work perfectly fine.
>
> Going to test Alex drm-next-3.16 a bit more as well.
>
> Christian.
>
> Am 11.06.2014 12:56, schrieb Marek Olšák:
>
>> I only tested Bonaire. I can test Cape Verde if needed.
>>
>> Marek
>>
>> On Wed, Jun 11, 2014 at 11:29 AM, Christian König
>> <deathsimple@xxxxxxxxxxx> wrote:
>>>
>>> Crap, I already wanted to check back with you if that really fixes your
>>> problems.
>>>
>>> Thanks for the info, this crash also only happens on CIK doesn't it?
>>>
>>> Christian.
>>>
>>> Am 11.06.2014 01:30, schrieb Marek Olšák:
>>>
>>>> Sorry to tell you the bad news. This patch doesn't fix the hangs on my
>>>> machine.
>>>>
>>>> I tested drm-next-3.16 from Alex's tree. I also switched copying from
>>>> SDMA to CP DMA, which hung too.
>>>>
>>>> I also tried this:
>>>>
>>>> git checkout (the problematic commit):
>>>> 6d2f294 - drm/radeon: use normal BOs for the page tables v4
>>>>
>>>> git cherry-pick (fixes):
>>>> 0e97703c - drm/radeon: add define for flags used in R600+ GTT
>>>> 0986c1a5 - drm/radeon: stop poisoning the GART TLB
>>>> 4906f689 - drm/radeon: fix page directory update size estimation
>>>> 4b095566 - drm/radeon: fix buffer placement under memory pressure v2
>>>>
>>>> Then I tested both SDMA and CP DMA copying. Both were unstable.
>>>>
>>>> Testing was done with piglit / quick.tests.
>>>>
>>>> Marek
>>>>
>>>>
>>>> On Wed, Jun 4, 2014 at 3:29 PM, Christian König
>>>> <deathsimple@xxxxxxxxxxx>
>>>> wrote:
>>>>>
>>>>> From: Christian König <christian.koenig@xxxxxxx>
>>>>>
>>>>> When we set the valid bit on invalid GART entries they are
>>>>> loaded into the TLB when an adjacent entry is loaded. This
>>>>> poisons the TLB with invalid entries which are sometimes
>>>>> not correctly removed on TLB flush.
>>>>>
>>>>> For stable inclusion the patch probably needs to be modified a bit.
>>>>>
>>>>> Signed-off-by: Christian König <christian.koenig@xxxxxxx>
>>>>> Cc: stable@xxxxxxxxxxxxxxx
>>>>> ---
>>>>>    drivers/gpu/drm/radeon/rs600.c | 5 ++++-
>>>>>    1 file changed, 4 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/radeon/rs600.c
>>>>> b/drivers/gpu/drm/radeon/rs600.c
>>>>> index 0a8be63..e0465b2 100644
>>>>> --- a/drivers/gpu/drm/radeon/rs600.c
>>>>> +++ b/drivers/gpu/drm/radeon/rs600.c
>>>>> @@ -634,7 +634,10 @@ int rs600_gart_set_page(struct radeon_device
>>>>> *rdev,
>>>>> int i, uint64_t addr)
>>>>>                   return -EINVAL;
>>>>>           }
>>>>>           addr = addr & 0xFFFFFFFFFFFFF000ULL;
>>>>> -       addr |= R600_PTE_GART;
>>>>> +       if (addr == rdev->dummy_page.addr)
>>>>> +               addr |= R600_PTE_SYSTEM | R600_PTE_SNOOPED;
>>>>> +       else
>>>>> +               addr |= R600_PTE_GART;
>>>>>           writeq(addr, ptr + (i * 8));
>>>>>           return 0;
>>>>>    }
>>>>> --
>>>>> 1.9.1
>>>>>
>>>>> _______________________________________________
>>>>> dri-devel mailing list
>>>>> dri-devel@xxxxxxxxxxxxxxxxxxxxx
>>>>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>>>
>>>
>
From 504c27c21131f0a2b472e8531ed4630454fe1471 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@xxxxxxx>
Date: Fri, 13 Jun 2014 15:17:26 +0200
Subject: [PATCH] force_gtt

---
 drivers/gpu/drm/radeon/radeon_vm.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c
index c11b71d..67f7658 100644
--- a/drivers/gpu/drm/radeon/radeon_vm.c
+++ b/drivers/gpu/drm/radeon/radeon_vm.c
@@ -116,6 +116,19 @@ void radeon_vm_manager_fini(struct radeon_device *rdev)
 	rdev->vm_manager.enabled = false;
 }
 
+static void force_gtt(struct radeon_bo *bo)
+{
+	if (radeon_bo_reserve(bo, false))
+		return;
+
+	radeon_ttm_placement_from_domain(bo, RADEON_GEM_DOMAIN_GTT);
+
+	if (ttm_bo_validate(&bo->tbo, &bo->placement, true, false)) {
+		DRM_ERROR("failed to force a GTT placement\n");
+	}
+	radeon_bo_unreserve(bo);
+}
+
 /**
  * radeon_vm_get_bos - add the vm BOs to a validation list
  *
@@ -147,6 +160,8 @@ struct radeon_cs_reloc *radeon_vm_get_bos(struct radeon_device *rdev,
 	list[0].handle = 0;
 	list_add(&list[0].tv.head, head);
 
+	force_gtt(vm->page_directory);
+
 	for (i = 0, idx = 1; i <= vm->max_pde_used; i++) {
 		if (!vm->page_tables[i].bo)
 			continue;
@@ -159,6 +174,8 @@ struct radeon_cs_reloc *radeon_vm_get_bos(struct radeon_device *rdev,
 		list[idx].tiling_flags = 0;
 		list[idx].handle = 0;
 		list_add(&list[idx++].tv.head, head);
+
+		force_gtt(vm->page_tables[i].bo);
 	}
 
 	return list;
-- 
1.9.1

_______________________________________________
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