| From 53dac830537b51df555ba5e7ebb236705b7eaa7c Mon Sep 17 00:00:00 2001 |
| From: Dave Airlie <airlied@redhat.com> |
| Date: Thu, 16 Jan 2014 14:28:22 +1000 |
| Subject: drm/mgag200: fix oops in cursor code. |
| |
| From: Dave Airlie <airlied@redhat.com> |
| |
| commit 53dac830537b51df555ba5e7ebb236705b7eaa7c upstream. |
| |
| In some cases we enter the cursor code with file_priv = NULL causing an oops, |
| we also can try to unpin something that isn't pinned, and this is a good fix for it. |
| |
| Signed-off-by: Dave Airlie <airlied@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/mgag200/mgag200_cursor.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/gpu/drm/mgag200/mgag200_cursor.c |
| +++ b/drivers/gpu/drm/mgag200/mgag200_cursor.c |
| @@ -22,8 +22,10 @@ static void mga_hide_cursor(struct mga_d |
| { |
| WREG8(MGA_CURPOSXL, 0); |
| WREG8(MGA_CURPOSXH, 0); |
| - mgag200_bo_unpin(mdev->cursor.pixels_1); |
| - mgag200_bo_unpin(mdev->cursor.pixels_2); |
| + if (mdev->cursor.pixels_1->pin_count) |
| + mgag200_bo_unpin(mdev->cursor.pixels_1); |
| + if (mdev->cursor.pixels_2->pin_count) |
| + mgag200_bo_unpin(mdev->cursor.pixels_2); |
| } |
| |
| int mga_crtc_cursor_set(struct drm_crtc *crtc, |
| @@ -32,7 +34,7 @@ int mga_crtc_cursor_set(struct drm_crtc |
| uint32_t width, |
| uint32_t height) |
| { |
| - struct drm_device *dev = (struct drm_device *)file_priv->minor->dev; |
| + struct drm_device *dev = crtc->dev; |
| struct mga_device *mdev = (struct mga_device *)dev->dev_private; |
| struct mgag200_bo *pixels_1 = mdev->cursor.pixels_1; |
| struct mgag200_bo *pixels_2 = mdev->cursor.pixels_2; |