All of lore.kernel.org
 help / color / mirror / Atom feed
* [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

* 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

* Re: [PATCH] drm/radeon: avoid segfault on device open when accel is not working.
  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
  0 siblings, 1 reply; 5+ messages in thread
From: Alex Deucher @ 2014-05-19 14:36 UTC (permalink / raw)
  To: Dieter Nützel; +Cc: Dri Devel

On Sat, May 17, 2014 at 10:16 PM, Dieter Nützel <Dieter@nuetzel-hh.de> wrote:
> 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

Christian, can you grab this for 3.15?

Alex
_______________________________________________
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

* Re: [PATCH] drm/radeon: avoid segfault on device open when accel is not working.
  2014-05-19 14:36 ` Alex Deucher
@ 2014-05-19 14:38   ` Christian König
  0 siblings, 0 replies; 5+ messages in thread
From: Christian König @ 2014-05-19 14:38 UTC (permalink / raw)
  To: Alex Deucher, Dieter Nützel; +Cc: Dri Devel

Am 19.05.2014 16:36, schrieb Alex Deucher:
> On Sat, May 17, 2014 at 10:16 PM, Dieter Nützel <Dieter@nuetzel-hh.de> wrote:
>> 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
> Christian, can you grab this for 3.15?
Wasn't sure if it's urgent enough for 3.15, just added it to my queue.

Christian.

>
> Alex

_______________________________________________
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.