* Re: [PATCH] drm/radeon: avoid segfault on device open when accel is not working.
@ 2014-05-18 2:16 Dieter Nützel
2014-05-19 14:36 ` Alex Deucher
0 siblings, 1 reply; 5+ messages in thread
From: Dieter Nützel @ 2014-05-18 2:16 UTC (permalink / raw)
To: Christian König; +Cc: Dri Devel
Hello Christian,
no one has picked this.
http://lists.freedesktop.org/archives/dri-devel/2014-May/059189.html
Even Alex ACKed it.
http://lists.freedesktop.org/archives/dri-devel/2014-May/059191.html
Greetings,
Dieter
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] drm/radeon: avoid segfault on device open when accel is not working.
@ 2014-05-07 20:35 j.glisse
2014-05-07 21:42 ` Alex Deucher
0 siblings, 1 reply; 5+ messages in thread
From: j.glisse @ 2014-05-07 20:35 UTC (permalink / raw)
To: dri-devel; +Cc: Jérôme Glisse, stable
From: Jérôme Glisse <jglisse@redhat.com>
When accel is not working on device with virtual address space radeon
segfault because the ib buffer is NULL and trying to map it inside the
virtual address space trigger segfault. This patch only map the ib
buffer if accel is working.
Cc: <stable@vger.kernel.org>
Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
---
drivers/gpu/drm/radeon/radeon_kms.c | 55 +++++++++++++++++++------------------
1 file changed, 29 insertions(+), 26 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
index 0cc47f1..eaaedba 100644
--- a/drivers/gpu/drm/radeon/radeon_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
@@ -577,28 +577,29 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
return r;
}
- r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false);
- if (r) {
- radeon_vm_fini(rdev, &fpriv->vm);
- kfree(fpriv);
- return r;
- }
+ if (rdev->accel_working) {
+ r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false);
+ if (r) {
+ radeon_vm_fini(rdev, &fpriv->vm);
+ kfree(fpriv);
+ return r;
+ }
- /* map the ib pool buffer read only into
- * virtual address space */
- bo_va = radeon_vm_bo_add(rdev, &fpriv->vm,
- rdev->ring_tmp_bo.bo);
- r = radeon_vm_bo_set_addr(rdev, bo_va, RADEON_VA_IB_OFFSET,
- RADEON_VM_PAGE_READABLE |
- RADEON_VM_PAGE_SNOOPED);
+ /* map the ib pool buffer read only into
+ * virtual address space */
+ bo_va = radeon_vm_bo_add(rdev, &fpriv->vm,
+ rdev->ring_tmp_bo.bo);
+ r = radeon_vm_bo_set_addr(rdev, bo_va, RADEON_VA_IB_OFFSET,
+ RADEON_VM_PAGE_READABLE |
+ RADEON_VM_PAGE_SNOOPED);
- radeon_bo_unreserve(rdev->ring_tmp_bo.bo);
- if (r) {
- radeon_vm_fini(rdev, &fpriv->vm);
- kfree(fpriv);
- return r;
+ radeon_bo_unreserve(rdev->ring_tmp_bo.bo);
+ if (r) {
+ radeon_vm_fini(rdev, &fpriv->vm);
+ kfree(fpriv);
+ return r;
+ }
}
-
file_priv->driver_priv = fpriv;
}
@@ -626,13 +627,15 @@ void radeon_driver_postclose_kms(struct drm_device *dev,
struct radeon_bo_va *bo_va;
int r;
- r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false);
- if (!r) {
- bo_va = radeon_vm_bo_find(&fpriv->vm,
- rdev->ring_tmp_bo.bo);
- if (bo_va)
- radeon_vm_bo_rmv(rdev, bo_va);
- radeon_bo_unreserve(rdev->ring_tmp_bo.bo);
+ if (rdev->accel_working) {
+ r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false);
+ if (!r) {
+ bo_va = radeon_vm_bo_find(&fpriv->vm,
+ rdev->ring_tmp_bo.bo);
+ if (bo_va)
+ radeon_vm_bo_rmv(rdev, bo_va);
+ radeon_bo_unreserve(rdev->ring_tmp_bo.bo);
+ }
}
radeon_vm_fini(rdev, &fpriv->vm);
--
1.9.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] drm/radeon: avoid segfault on device open when accel is not working.
2014-05-07 20:35 j.glisse
@ 2014-05-07 21:42 ` Alex Deucher
0 siblings, 0 replies; 5+ messages in thread
From: Alex Deucher @ 2014-05-07 21:42 UTC (permalink / raw)
To: Jerome Glisse
Cc: Jérôme Glisse, for 3.8, Maling list - DRI developers
On Wed, May 7, 2014 at 4:35 PM, <j.glisse@gmail.com> wrote:
> From: Jérôme Glisse <jglisse@redhat.com>
>
> When accel is not working on device with virtual address space radeon
> segfault because the ib buffer is NULL and trying to map it inside the
> virtual address space trigger segfault. This patch only map the ib
> buffer if accel is working.
>
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
Probably also fixes:
https://bugzilla.kernel.org/show_bug.cgi?id=73931
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/radeon/radeon_kms.c | 55 +++++++++++++++++++------------------
> 1 file changed, 29 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
> index 0cc47f1..eaaedba 100644
> --- a/drivers/gpu/drm/radeon/radeon_kms.c
> +++ b/drivers/gpu/drm/radeon/radeon_kms.c
> @@ -577,28 +577,29 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
> return r;
> }
>
> - r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false);
> - if (r) {
> - radeon_vm_fini(rdev, &fpriv->vm);
> - kfree(fpriv);
> - return r;
> - }
> + if (rdev->accel_working) {
> + r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false);
> + if (r) {
> + radeon_vm_fini(rdev, &fpriv->vm);
> + kfree(fpriv);
> + return r;
> + }
>
> - /* map the ib pool buffer read only into
> - * virtual address space */
> - bo_va = radeon_vm_bo_add(rdev, &fpriv->vm,
> - rdev->ring_tmp_bo.bo);
> - r = radeon_vm_bo_set_addr(rdev, bo_va, RADEON_VA_IB_OFFSET,
> - RADEON_VM_PAGE_READABLE |
> - RADEON_VM_PAGE_SNOOPED);
> + /* map the ib pool buffer read only into
> + * virtual address space */
> + bo_va = radeon_vm_bo_add(rdev, &fpriv->vm,
> + rdev->ring_tmp_bo.bo);
> + r = radeon_vm_bo_set_addr(rdev, bo_va, RADEON_VA_IB_OFFSET,
> + RADEON_VM_PAGE_READABLE |
> + RADEON_VM_PAGE_SNOOPED);
>
> - radeon_bo_unreserve(rdev->ring_tmp_bo.bo);
> - if (r) {
> - radeon_vm_fini(rdev, &fpriv->vm);
> - kfree(fpriv);
> - return r;
> + radeon_bo_unreserve(rdev->ring_tmp_bo.bo);
> + if (r) {
> + radeon_vm_fini(rdev, &fpriv->vm);
> + kfree(fpriv);
> + return r;
> + }
> }
> -
> file_priv->driver_priv = fpriv;
> }
>
> @@ -626,13 +627,15 @@ void radeon_driver_postclose_kms(struct drm_device *dev,
> struct radeon_bo_va *bo_va;
> int r;
>
> - r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false);
> - if (!r) {
> - bo_va = radeon_vm_bo_find(&fpriv->vm,
> - rdev->ring_tmp_bo.bo);
> - if (bo_va)
> - radeon_vm_bo_rmv(rdev, bo_va);
> - radeon_bo_unreserve(rdev->ring_tmp_bo.bo);
> + if (rdev->accel_working) {
> + r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false);
> + if (!r) {
> + bo_va = radeon_vm_bo_find(&fpriv->vm,
> + rdev->ring_tmp_bo.bo);
> + if (bo_va)
> + radeon_vm_bo_rmv(rdev, bo_va);
> + radeon_bo_unreserve(rdev->ring_tmp_bo.bo);
> + }
> }
>
> radeon_vm_fini(rdev, &fpriv->vm);
> --
> 1.9.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-05-19 14:38 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-18 2:16 [PATCH] drm/radeon: avoid segfault on device open when accel is not working Dieter Nützel
2014-05-19 14:36 ` Alex Deucher
2014-05-19 14:38 ` Christian König
-- strict thread matches above, loose matches on Subject: below --
2014-05-07 20:35 j.glisse
2014-05-07 21:42 ` Alex Deucher
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.