All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] gma500: Fix hardware cursor support for poulsbo
@ 2012-05-13 13:07 Patrik Jakobsson
  2012-05-13 13:53 ` Paul Menzel
  2012-05-16 21:01 ` Guillaume Clément
  0 siblings, 2 replies; 6+ messages in thread
From: Patrik Jakobsson @ 2012-05-13 13:07 UTC (permalink / raw)
  To: alan, airlied, dri-devel

Poulsbo needs a physical address in the cursor base register. We allocate a
stolen memory buffer and copy the cursor image provided by userspace into it.
When/If we get our own userspace driver we can map this stolen memory directly.
The patch also adds a mark in chip ops so we can identify devices that has this
requirement.

Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
 drivers/gpu/drm/gma500/cdv_device.c        |    1 +
 drivers/gpu/drm/gma500/mdfld_device.c      |    1 +
 drivers/gpu/drm/gma500/oaktrail_device.c   |    1 +
 drivers/gpu/drm/gma500/psb_device.c        |    1 +
 drivers/gpu/drm/gma500/psb_drv.h           |    1 +
 drivers/gpu/drm/gma500/psb_intel_display.c |   62 ++++++++++++++++++++++++----
 drivers/gpu/drm/gma500/psb_intel_drv.h     |    6 +--
 7 files changed, 61 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/gma500/cdv_device.c b/drivers/gpu/drm/gma500/cdv_device.c
index 8e39330..9764045 100644
--- a/drivers/gpu/drm/gma500/cdv_device.c
+++ b/drivers/gpu/drm/gma500/cdv_device.c
@@ -563,6 +563,7 @@ const struct psb_ops cdv_chip_ops = {
 	.crtcs = 2,
 	.hdmi_mask = (1 << 0) | (1 << 1),
 	.lvds_mask = (1 << 1),
+	.cursor_needs_phys = 0,
 	.sgx_offset = MRST_SGX_OFFSET,
 	.chip_setup = cdv_chip_setup,
 	.errata = cdv_errata,
diff --git a/drivers/gpu/drm/gma500/mdfld_device.c b/drivers/gpu/drm/gma500/mdfld_device.c
index 2d8e741..265ad0d 100644
--- a/drivers/gpu/drm/gma500/mdfld_device.c
+++ b/drivers/gpu/drm/gma500/mdfld_device.c
@@ -531,6 +531,7 @@ const struct psb_ops mdfld_chip_ops = {
 	.crtcs = 3,
 	.lvds_mask = (1 << 1),
 	.hdmi_mask = (1 << 1),
+	.cursor_needs_phys = 0,
 	.sgx_offset = MRST_SGX_OFFSET,
 
 	.chip_setup = mdfld_chip_setup,
diff --git a/drivers/gpu/drm/gma500/oaktrail_device.c b/drivers/gpu/drm/gma500/oaktrail_device.c
index 7a8ff8e..0f9b7db 100644
--- a/drivers/gpu/drm/gma500/oaktrail_device.c
+++ b/drivers/gpu/drm/gma500/oaktrail_device.c
@@ -544,6 +544,7 @@ const struct psb_ops oaktrail_chip_ops = {
 	.crtcs = 2,
 	.hdmi_mask = (1 << 0),
 	.lvds_mask = (1 << 0),
+	.cursor_needs_phys = 0,
 	.sgx_offset = MRST_SGX_OFFSET,
 
 	.chip_setup = oaktrail_chip_setup,
diff --git a/drivers/gpu/drm/gma500/psb_device.c b/drivers/gpu/drm/gma500/psb_device.c
index 651af67..614d730 100644
--- a/drivers/gpu/drm/gma500/psb_device.c
+++ b/drivers/gpu/drm/gma500/psb_device.c
@@ -364,6 +364,7 @@ const struct psb_ops psb_chip_ops = {
 	.crtcs = 2,
 	.hdmi_mask = (1 << 0),
 	.lvds_mask = (1 << 1),
+	.cursor_needs_phys = 1,
 	.sgx_offset = PSB_SGX_OFFSET,
 	.chip_setup = psb_chip_setup,
 	.chip_teardown = psb_chip_teardown,
diff --git a/drivers/gpu/drm/gma500/psb_drv.h b/drivers/gpu/drm/gma500/psb_drv.h
index fd1bc8f..4a70824 100644
--- a/drivers/gpu/drm/gma500/psb_drv.h
+++ b/drivers/gpu/drm/gma500/psb_drv.h
@@ -654,6 +654,7 @@ struct psb_ops {
 	int sgx_offset;		/* Base offset of SGX device */
 	int hdmi_mask;		/* Mask of HDMI CRTCs */
 	int lvds_mask;		/* Mask of LVDS CRTCs */
+	int cursor_needs_phys;  /* If cursor base reg need physical address */
 
 	/* Sub functions */
 	struct drm_crtc_helper_funcs const *crtc_helper;
diff --git a/drivers/gpu/drm/gma500/psb_intel_display.c b/drivers/gpu/drm/gma500/psb_intel_display.c
index f3a3160..c079525 100644
--- a/drivers/gpu/drm/gma500/psb_intel_display.c
+++ b/drivers/gpu/drm/gma500/psb_intel_display.c
@@ -928,6 +928,7 @@ static int psb_intel_crtc_cursor_set(struct drm_crtc *crtc,
 				 uint32_t width, uint32_t height)
 {
 	struct drm_device *dev = crtc->dev;
+	struct drm_psb_private *dev_priv = dev->dev_private;
 	struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc);
 	int pipe = psb_intel_crtc->pipe;
 	uint32_t control = (pipe == 0) ? CURACNTR : CURBCNTR;
@@ -935,8 +936,10 @@ static int psb_intel_crtc_cursor_set(struct drm_crtc *crtc,
 	uint32_t temp;
 	size_t addr = 0;
 	struct gtt_range *gt;
+	struct gtt_range *cursor_gt = psb_intel_crtc->cursor_gt;
 	struct drm_gem_object *obj;
-	int ret;
+	void *tmp_dst, *tmp_src;
+	int ret, i, cursor_pages;
 
 	/* if we want to turn of the cursor ignore width and height */
 	if (!handle) {
@@ -985,10 +988,32 @@ static int psb_intel_crtc_cursor_set(struct drm_crtc *crtc,
 		return ret;
 	}
 
+	if (dev_priv->ops->cursor_needs_phys) {
+		if (cursor_gt == NULL) {
+			dev_err(dev->dev, "No hardware cursor mem available");
+			return -ENOMEM;
+		}
 
-	addr = gt->offset;	/* Or resource.start ??? */
+		/* Prevent overflow */
+		if (gt->npage > 4)
+			cursor_pages = 4;
+		else
+			cursor_pages = gt->npage;
+
+		/* Copy the cursor to cursor mem */
+		tmp_dst = dev_priv->vram_addr + cursor_gt->offset;
+		for (i = 0; i < cursor_pages; i++) {
+			tmp_src = kmap(gt->pages[i]);
+			memcpy(tmp_dst, tmp_src, PAGE_SIZE);
+			kunmap(tmp_src);
+			tmp_dst += PAGE_SIZE;
+		}
 
-	psb_intel_crtc->cursor_addr = addr;
+		addr = psb_intel_crtc->cursor_addr;
+	} else {
+		addr = gt->offset;      /* Or resource.start ??? */
+		psb_intel_crtc->cursor_addr = addr;
+	}
 
 	temp = 0;
 	/* set the pipe for the cursor */
@@ -1213,6 +1238,9 @@ void psb_intel_crtc_destroy(struct drm_crtc *crtc)
 		drm_gem_object_unreference(psb_intel_crtc->cursor_obj);
 		psb_intel_crtc->cursor_obj = NULL;
 	}
+
+	if (psb_intel_crtc->cursor_gt != NULL)
+		psb_gtt_free_range(crtc->dev, psb_intel_crtc->cursor_gt);
 	kfree(psb_intel_crtc->crtc_state);
 	drm_crtc_cleanup(crtc);
 	kfree(psb_intel_crtc);
@@ -1241,13 +1269,33 @@ const struct drm_crtc_funcs psb_intel_crtc_funcs = {
  * Set the default value of cursor control and base register
  * to zero. This is a workaround for h/w defect on Oaktrail
  */
-static void psb_intel_cursor_init(struct drm_device *dev, int pipe)
+static void psb_intel_cursor_init(struct drm_device *dev,
+				  struct psb_intel_crtc *psb_intel_crtc)
 {
+	struct drm_psb_private *dev_priv = dev->dev_private;
 	u32 control[3] = { CURACNTR, CURBCNTR, CURCCNTR };
 	u32 base[3] = { CURABASE, CURBBASE, CURCBASE };
+	struct gtt_range *cursor_gt;
+
+	if (dev_priv->ops->cursor_needs_phys) {
+		/* Allocate 4 pages of stolen mem for a hardware cursor. That
+		 * is enough for the 64 x 64 ARGB cursors we support.
+		 */
+		cursor_gt = psb_gtt_alloc_range(dev, 4 * PAGE_SIZE, "cursor", 1);
+		if (!cursor_gt) {
+			psb_intel_crtc->cursor_gt = NULL;
+			goto out;
+		}
+		psb_intel_crtc->cursor_gt = cursor_gt;
+		psb_intel_crtc->cursor_addr = dev_priv->stolen_base +
+							cursor_gt->offset;
+	} else {
+		psb_intel_crtc->cursor_gt = NULL;
+	}
 
-	REG_WRITE(control[pipe], 0);
-	REG_WRITE(base[pipe], 0);
+out:
+	REG_WRITE(control[psb_intel_crtc->pipe], 0);
+	REG_WRITE(base[psb_intel_crtc->pipe], 0);
 }
 
 void psb_intel_crtc_init(struct drm_device *dev, int pipe,
@@ -1313,7 +1361,7 @@ void psb_intel_crtc_init(struct drm_device *dev, int pipe,
 	psb_intel_crtc->mode_set.connectors =
 	    (struct drm_connector **) (psb_intel_crtc + 1);
 	psb_intel_crtc->mode_set.num_connectors = 0;
-	psb_intel_cursor_init(dev, pipe);
+	psb_intel_cursor_init(dev, psb_intel_crtc);
 }
 
 int psb_intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
diff --git a/drivers/gpu/drm/gma500/psb_intel_drv.h b/drivers/gpu/drm/gma500/psb_intel_drv.h
index 81852b4..2515f83 100644
--- a/drivers/gpu/drm/gma500/psb_intel_drv.h
+++ b/drivers/gpu/drm/gma500/psb_intel_drv.h
@@ -106,11 +106,6 @@ struct psb_intel_mode_device {
 	 size_t(*bo_offset) (struct drm_device *dev, void *bo);
 
 	/*
-	 * Cursor (Can go ?)
-	 */
-	int cursor_needs_physical;
-
-	/*
 	 * LVDS info
 	 */
 	int backlight_duty_cycle;	/* restore backlight to this value */
@@ -176,6 +171,7 @@ struct psb_intel_crtc {
 	int pipe;
 	int plane;
 	uint32_t cursor_addr;
+	struct gtt_range *cursor_gt;
 	u8 lut_r[256], lut_g[256], lut_b[256];
 	u8 lut_adj[256];
 	struct psb_intel_framebuffer *fbdev_fb;
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] gma500: Fix hardware cursor support for poulsbo
  2012-05-13 13:07 [PATCH] gma500: Fix hardware cursor support for poulsbo Patrik Jakobsson
@ 2012-05-13 13:53 ` Paul Menzel
  2012-05-13 14:03   ` Alan Cox
  2012-05-13 15:02   ` Patrik Jakobsson
  2012-05-16 21:01 ` Guillaume Clément
  1 sibling, 2 replies; 6+ messages in thread
From: Paul Menzel @ 2012-05-13 13:53 UTC (permalink / raw)
  To: Patrik Jakobsson; +Cc: dri-devel, alan


[-- Attachment #1.1: Type: text/plain, Size: 1546 bytes --]

Dear Patrik,


Am Sonntag, den 13.05.2012, 15:07 +0200 schrieb Patrik Jakobsson:
> Poulsbo needs a physical address in the cursor base register. We allocate a
> stolen memory buffer and copy the cursor image provided by userspace into it.
> When/If we get our own userspace driver we can map this stolen memory directly.
> The patch also adds a mark in chip ops so we can identify devices that has this

s,has,have,

> requirement.

How can it be verified, that the hardware cursor is working?

> Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
> ---
>  drivers/gpu/drm/gma500/cdv_device.c        |    1 +
>  drivers/gpu/drm/gma500/mdfld_device.c      |    1 +
>  drivers/gpu/drm/gma500/oaktrail_device.c   |    1 +
>  drivers/gpu/drm/gma500/psb_device.c        |    1 +
>  drivers/gpu/drm/gma500/psb_drv.h           |    1 +
>  drivers/gpu/drm/gma500/psb_intel_display.c |   62 ++++++++++++++++++++++++----
>  drivers/gpu/drm/gma500/psb_intel_drv.h     |    6 +--
>  7 files changed, 61 insertions(+), 12 deletions(-)


[…]

> --- a/drivers/gpu/drm/gma500/psb_drv.h
> +++ b/drivers/gpu/drm/gma500/psb_drv.h
> @@ -654,6 +654,7 @@ struct psb_ops {
>  	int sgx_offset;		/* Base offset of SGX device */
>  	int hdmi_mask;		/* Mask of HDMI CRTCs */
>  	int lvds_mask;		/* Mask of LVDS CRTCs */
> +	int cursor_needs_phys;  /* If cursor base reg need physical address */

s,need,needs,

>  	/* Sub functions */
>  	struct drm_crtc_helper_funcs const *crtc_helper;

[…]


Thanks,

Paul

[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] gma500: Fix hardware cursor support for poulsbo
  2012-05-13 13:53 ` Paul Menzel
@ 2012-05-13 14:03   ` Alan Cox
  2012-05-13 15:02   ` Patrik Jakobsson
  1 sibling, 0 replies; 6+ messages in thread
From: Alan Cox @ 2012-05-13 14:03 UTC (permalink / raw)
  To: Paul Menzel; +Cc: dri-devel, alan

> How can it be verified, that the hardware cursor is working?

Use the mode setting X server with cursor support.

Alan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] gma500: Fix hardware cursor support for poulsbo
  2012-05-13 13:53 ` Paul Menzel
  2012-05-13 14:03   ` Alan Cox
@ 2012-05-13 15:02   ` Patrik Jakobsson
  1 sibling, 0 replies; 6+ messages in thread
From: Patrik Jakobsson @ 2012-05-13 15:02 UTC (permalink / raw)
  To: Paul Menzel; +Cc: dri-devel, alan

On Sun, May 13, 2012 at 3:53 PM, Paul Menzel
<paulepanter@users.sourceforge.net> wrote:
>> The patch also adds a mark in chip ops so we can identify devices that has this
>
> s,has,have,

Noted...

> How can it be verified, that the hardware cursor is working?

As Alan says, use the modesetting driver from:
git://anongit.freedesktop.org/xorg/driver/xf86-video-modesetting

Make sure you add the "DefaultFbBpp 32" option to your xorg.conf
bpp probing is currently broken when used with gma500.

> s,need,needs,

You should see my German grammar. They lost me at durch, für, gegen, ohne, um.

Patrik

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] gma500: Fix hardware cursor support for poulsbo
  2012-05-13 13:07 [PATCH] gma500: Fix hardware cursor support for poulsbo Patrik Jakobsson
  2012-05-13 13:53 ` Paul Menzel
@ 2012-05-16 21:01 ` Guillaume Clément
  2012-05-16 22:09   ` Patrik Jakobsson
  1 sibling, 1 reply; 6+ messages in thread
From: Guillaume Clément @ 2012-05-16 21:01 UTC (permalink / raw)
  To: dri-devel; +Cc: alan

Le dimanche 13 mai 2012 15:07:46 Patrik Jakobsson a écrit :
> Poulsbo needs a physical address in the cursor base register. We allocate a
> stolen memory buffer and copy the cursor image provided by userspace into
> it. When/If we get our own userspace driver we can map this stolen memory
> directly. The patch also adds a mark in chip ops so we can identify devices
> that has this requirement.
> 

Hello,


This patch works overall for me, (applied it to linux-3.4-rc7) but I'm 
experiencing a kernel error if I do some specific actions (like beginning a 
drag&drop from the KDE menu)

The error corresponds to 
	BUG_ON(!vaddr);
on kunmap (see below for the full stack trace).

It looks like on others parts of the kernel, kunmap is fed the same input as 
kmap and not the return value of kmap.

By switching in psb_intel_crtc_cursor_set : 

+                       kunmap(tmp_src);

to :

+                       kunmap(gt->pages[i]);


I don't experience the problem anymore.




The stack trace for reference :



ay 16 22:35:55 thor kernel: [   98.169193] ------------[ cut here 
]------------
May 16 22:35:55 thor kernel: [   98.169212] kernel BUG at mm/highmem.c:268!
May 16 22:35:55 thor kernel: [   98.169227] invalid opcode: 0000 [#1] PREEMPT 
SMP 
May 16 22:35:55 thor kernel: [   98.169248] Modules linked in: nfsd exportfs 
nfs nfs_acl lockd auth_rpcgss fscache sunrpc joydev hid_multitouch usbhid hid 
arc4 eeepc_wmi asus_wmi pci_hotplug sparse_keymap ath9k ath9k_common 
snd_hda_codec_realtek ath9k_hw ath mac80211 gma500_gfx(O) snd_hda_intel 
i2c_algo_bit drm_kms_helper snd_hda_codec drm snd_pcm snd_page_alloc snd_hwdep 
snd_timer uhci_hcd serio_raw cfg80211 snd agpgart acpi_cpufreq microcode 
ehci_hcd coretemp usbcore psmouse pcspkr rfkill atl1c lpc_sch i2c_core 
usb_common soundcore thermal evdev mperf battery processor wmi video ac ext4 
jbd2 mbcache crc16 sd_mod pata_acpi ata_generic pata_sch libata scsi_mod 
button
May 16 22:35:55 thor kernel: [   98.169529] 
May 16 22:35:55 thor kernel: [   98.169549] Pid: 641, comm: X Tainted: G           
O 3.4.0-1-mainline #1 ASUSTeK Computer INC. T91MT/T91MT
May 16 22:35:55 thor kernel: [   98.169578] EIP: 0060:[<c01fce99>] EFLAGS: 
00013246 CPU: 1                                                                                                          
May 16 22:35:55 thor kernel: [   98.169603] EIP is at kunmap_high+0xa9/0xb0                                                                                                                         
May 16 22:35:55 thor kernel: [   98.169618] EAX: 00000000 EBX: ff9c8000 ECX: 
c0777680 EDX: 00003206                                                                                                 
May 16 22:35:55 thor kernel: [   98.169634] ESI: ff9c9000 EDI: f9405000 EBP: 
f4237d94 ESP: f4237d8c                                                                                                 
May 16 22:35:55 thor kernel: [   98.169652]  DS: 007b ES: 007b FS: 00d8 GS: 
00e0 SS: 0068
May 16 22:35:55 thor kernel: [   98.169669] CR0: 80050033 CR2: b622a680 CR3: 
3733b000 CR4: 000007d0
May 16 22:35:55 thor kernel: [   98.169686] DR0: 00000000 DR1: 00000000 DR2: 
00000000 DR3: 00000000
May 16 22:35:55 thor kernel: [   98.169700] DR6: ffff0ff0 DR7: 00000400
May 16 22:35:55 thor kernel: [   98.169717] Process X (pid: 641, ti=f4236000 
task=f4215500 task.ti=f4236000)
May 16 22:35:55 thor kernel: [   98.169731] Stack:
May 16 22:35:55 thor kernel: [   98.169740]  c03894bb ff9c8000 f4237d9c 
c012fccd f4237dec f896fc60 f8985201 f4c39860
May 16 22:35:55 thor kernel: [   98.169784]  f8985237 00000000 ff9c8000 
00000000 00000001 00000004 000700c0 000700c4
May 16 22:35:55 thor kernel: [   98.169827]  f72b11a0 f73e3800 f6c9c800 
f9404000 00000000 f4237e74 f73e380c f896faf0
May 16 22:35:55 thor kernel: [   98.169873] Call Trace:
May 16 22:35:55 thor kernel: [   98.169901]  [<c03894bb>] ? 
dev_printk+0x2b/0x30
May 16 22:35:55 thor kernel: [   98.169928]  [<c012fccd>] kunmap+0x3d/0x50
May 16 22:35:55 thor kernel: [   98.169980]  [<f896fc60>] 
psb_intel_crtc_cursor_set+0x170/0x480 [gma500_gfx]
May 16 22:35:55 thor kernel: [   98.170027]  [<f896faf0>] ? 
psb_intel_crtc_cursor_move+0x100/0x100 [gma500_gfx]
May 16 22:35:55 thor kernel: [   98.170066]  [<f87a798f>] 
drm_mode_cursor_ioctl+0xdf/0x140 [drm]
May 16 22:35:55 thor kernel: [   98.170096]  [<f896faf0>] ? 
psb_intel_crtc_cursor_move+0x100/0x100 [gma500_gfx]
May 16 22:35:55 thor kernel: [   98.170130]  [<f87a78b0>] ? 
drm_mode_setcrtc+0x540/0x540 [drm]
May 16 22:35:55 thor kernel: [   98.170160]  [<f8799cd2>] 
drm_ioctl+0x422/0x480 [drm]
May 16 22:35:55 thor kernel: [   98.170183]  [<c01c64a3>] ? 
wakeup_graph_return+0x43/0x70
May 16 22:35:55 thor kernel: [   98.170217]  [<f87a78b0>] ? 
drm_mode_setcrtc+0x540/0x540 [drm]
May 16 22:35:55 thor kernel: [   98.170237]  [<c01c64a3>] ? 
wakeup_graph_return+0x43/0x70
May 16 22:35:55 thor kernel: [   98.170256]  [<c0265254>] ? 
inotify_free_event_priv+0x14/0x20
May 16 22:35:55 thor kernel: [   98.170273]  [<c0265254>] ? 
inotify_free_event_priv+0x14/0x20
May 16 22:35:55 thor kernel: [   98.170290]  [<c026535a>] ? 
inotify_handle_event+0x7a/0xc0
May 16 22:35:55 thor kernel: [   98.170306]  [<c0265190>] ? 
inotify_free_group_priv+0x50/0x50
May 16 22:35:55 thor kernel: [   98.170324]  [<c02466d0>] ? 
mntput_no_expire+0x30/0x100
May 16 22:35:55 thor kernel: [   98.170340]  [<c0263594>] ? 
fsnotify_put_event+0x44/0x60
May 16 22:35:55 thor kernel: [   98.170356]  [<c0263594>] ? 
fsnotify_put_event+0x44/0x60
May 16 22:35:55 thor kernel: [   98.170385]  [<f896f065>] 
psb_unlocked_ioctl+0x35/0x80 [gma500_gfx]
May 16 22:35:55 thor kernel: [   98.170413]  [<f896f030>] ? 
psb_driver_preclose+0x10/0x10 [gma500_gfx]
May 16 22:35:55 thor kernel: [   98.170431]  [<c023c36a>] 
do_vfs_ioctl+0x7a/0x560
May 16 22:35:55 thor kernel: [   98.170449]  [<c022c7ef>] ? 
vfs_write+0x11f/0x160
May 16 22:35:55 thor kernel: [   98.170465]  [<c022dd7f>] ? 
fget_light+0x7f/0xe0
May 16 22:35:55 thor kernel: [   98.170480]  [<c023c8b8>] sys_ioctl+0x68/0x80
May 16 22:35:55 thor kernel: [   98.170498]  [<c04b30df>] 
sysenter_do_call+0x12/0x28
May 16 22:35:55 thor kernel: [   98.170515]  [<c01c64a3>] ? 
wakeup_graph_return+0x43/0x70
May 16 22:35:55 thor kernel: [   98.170531]  [<c01c64a3>] ? 
wakeup_graph_return+0x43/0x70
May 16 22:35:55 thor kernel: [   98.170541] Code: 2b 00 81 fb 50 04 5f c0 74 
da c7 04 24 00 00 00 00 b9 01 00 00 00 ba 03 00 00 00 b8 4c 04 5f c0 e8 4d 09 
f6 ff 83 c4 04 5b 5d c3 <0f> 0b 90 8d 74 26 00 55 89 e5 56 53 3e 8d 74 26 00 31 
db e8 ef 
May 16 22:35:55 thor kernel: [   98.170664] EIP: [<c01fce99>] 
kunmap_high+0xa9/0xb0 SS:ESP 0068:f4237d8c
May 16 22:35:55 thor kernel: [   98.170824] ---[ end trace aef0fd1f8e847917 
]---
May 16 22:35:55 thor kernel: [   98.170848] note: X[641] exited with 
preempt_count 1

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] gma500: Fix hardware cursor support for poulsbo
  2012-05-16 21:01 ` Guillaume Clément
@ 2012-05-16 22:09   ` Patrik Jakobsson
  0 siblings, 0 replies; 6+ messages in thread
From: Patrik Jakobsson @ 2012-05-16 22:09 UTC (permalink / raw)
  To: Guillaume Clément; +Cc: dri-devel, alan

On Wed, May 16, 2012 at 11:01 PM, Guillaume Clément <gclement@baobob.org> wrote:
> It looks like on others parts of the kernel, kunmap is fed the same input as
> kmap and not the return value of kmap.

Good catch and thank you for testing, I blindly assumed the alloc /
free semantics.

Alan, I'll send you a new version with the fix included.

Thanks
Patrik

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-05-16 22:09 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-13 13:07 [PATCH] gma500: Fix hardware cursor support for poulsbo Patrik Jakobsson
2012-05-13 13:53 ` Paul Menzel
2012-05-13 14:03   ` Alan Cox
2012-05-13 15:02   ` Patrik Jakobsson
2012-05-16 21:01 ` Guillaume Clément
2012-05-16 22:09   ` Patrik Jakobsson

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.