On 06/08/14 16:35, Nathan Whitehorn wrote:
> 
> 
> On 2014-08-06 02:35, Roger Pau Monné wrote:
>> On 06/08/14 02:37, Nathan Whitehorn wrote:
>>> Kernels with r269580 will panic when loading the radeonkms driver in
>>> pmap_page_set_memattr(). This probably indicates a bug in radeonkms, but
>>> the system is unusable in the meantime.
>>> -Nathan
>>
>> I seem to be able to load radeonkms just fine after r269580:
> 
> It's possible that it is related to actually using it, rather than
> loading the module. I was only testing them together. I'm using vt and
> the panic (page fault in kernel mode) occurs when TTM tries to set
> memory attributes on some page while starting X. Before the panic, I see
> all the normal Radeon module messages as you do, so the module seems to
> have actually loaded correctly.  The KMS console also seems to be
> functional enough to display the panic message, so I suspect it's X that
> triggers it.
> -Nathan

Please try the attached patch, it seems to solve the panic for me. It
also includes a fix for Intel i915 gem, which I'm not able to test
because I don't have the hardware.

Roger.

From 9dd3a21d99ff2fc7bf3299359751d2399eee912a Mon Sep 17 00:00:00 2001
From: Roger Pau Monne <roger....@citrix.com>
Date: Wed, 6 Aug 2014 18:16:53 +0200
Subject: [PATCH] drm: fix usage of vm_phys_fictitious_to_vm_page

vm_phys_fictitious_to_vm_page should not be called directly, even when
operating on a range that has been registered using
vm_phys_fictitious_reg_range. PHYS_TO_VM_PAGE should be used instead
because on arches that use VM_PHYSSEG_DENSE the page might come
directly from vm_page_array.

Reported by: nwhitehorn
Sponsored by: Citrix Systems R&D
---
 sys/dev/drm2/i915/i915_gem.c |    6 ++++--
 sys/dev/drm2/ttm/ttm_bo_vm.c |    8 ++++++--
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/sys/dev/drm2/i915/i915_gem.c b/sys/dev/drm2/i915/i915_gem.c
index a3acb60..6d46207 100644
--- a/sys/dev/drm2/i915/i915_gem.c
+++ b/sys/dev/drm2/i915/i915_gem.c
@@ -1428,8 +1428,10 @@ retry:
 
        obj->fault_mappable = true;
        VM_OBJECT_WLOCK(vm_obj);
-       m = vm_phys_fictitious_to_vm_page(dev->agp->base + obj->gtt_offset +
-           offset);
+       m = PHYS_TO_VM_PAGE(dev->agp->base + obj->gtt_offset + offset);
+       KASSERT((m->flags & PG_FICTITIOUS) != 0,
+           ("physical address %#jx not fictitious",
+           (uintmax_t)(dev->agp->base + obj->gtt_offset + offset)));
        if (m == NULL) {
                VM_OBJECT_WUNLOCK(vm_obj);
                cause = 60;
diff --git a/sys/dev/drm2/ttm/ttm_bo_vm.c b/sys/dev/drm2/ttm/ttm_bo_vm.c
index 83ec76c..7aa1ac0 100644
--- a/sys/dev/drm2/ttm/ttm_bo_vm.c
+++ b/sys/dev/drm2/ttm/ttm_bo_vm.c
@@ -216,8 +216,12 @@ reserve:
        }
 
        if (bo->mem.bus.is_iomem) {
-               m = vm_phys_fictitious_to_vm_page(bo->mem.bus.base +
-                   bo->mem.bus.offset + offset);
+               m = PHYS_TO_VM_PAGE(bo->mem.bus.base + bo->mem.bus.offset +
+                   offset);
+               KASSERT((m->flags & PG_FICTITIOUS) != 0,
+                   ("physical address %#jx not fictitious",
+                   (uintmax_t)(bo->mem.bus.base + bo->mem.bus.offset
+                   + offset)));
                pmap_page_set_memattr(m, ttm_io_prot(bo->mem.placement));
        } else {
                ttm = bo->ttm;
-- 
1.7.7.5 (Apple Git-26)

_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to