public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* use persistent allocation for cursor blinking.
@ 2006-08-01 18:56 Dave Jones
  2006-08-01 19:15 ` Roland Dreier
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Dave Jones @ 2006-08-01 18:56 UTC (permalink / raw)
  To: Linux Kernel

Every time the console cursor blinks, we do a kmalloc/kfree pair.
This patch turns that into a single allocation.

This allocation was the most frequent kmalloc I saw on my test box.

Signed-off-by: Dave Jones <davej@redhat.com>


--- linux-2.6.14/drivers/video/console/softcursor.c~	2005-12-28 18:40:08.000000000 -0500
+++ linux-2.6.14/drivers/video/console/softcursor.c	2005-12-28 18:45:50.000000000 -0500
@@ -23,7 +23,9 @@ int soft_cursor(struct fb_info *info, st
 	unsigned int buf_align = info->pixmap.buf_align - 1;
 	unsigned int i, size, dsize, s_pitch, d_pitch;
 	struct fb_image *image;
-	u8 *dst, *src;
+	u8 *dst;
+	static u8 *src=NULL;
+	static int allocsize=0;
 
 	if (info->state != FBINFO_STATE_RUNNING)
 		return 0;
@@ -31,9 +33,15 @@ int soft_cursor(struct fb_info *info, st
 	s_pitch = (cursor->image.width + 7) >> 3;
 	dsize = s_pitch * cursor->image.height;
 
-	src = kmalloc(dsize + sizeof(struct fb_image), GFP_ATOMIC);
-	if (!src)
-		return -ENOMEM;
+	if (dsize + sizeof(struct fb_image) != allocsize) {
+		if (src != NULL)
+			kfree(src);
+		allocsize = dsize + sizeof(struct fb_image);
+
+		src = kmalloc(allocsize, GFP_ATOMIC);
+		if (!src)
+			return -ENOMEM;
+	}
 
 	image = (struct fb_image *) (src + dsize);
 	*image = cursor->image;
@@ -61,7 +69,6 @@ int soft_cursor(struct fb_info *info, st
 	fb_pad_aligned_buffer(dst, d_pitch, src, s_pitch, image->height);
 	image->data = dst;
 	info->fbops->fb_imageblit(info, image);
-	kfree(src);
 	return 0;
 }
 

-- 
http://www.codemonkey.org.uk

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

* Re: use persistent allocation for cursor blinking.
  2006-08-01 18:56 use persistent allocation for cursor blinking Dave Jones
@ 2006-08-01 19:15 ` Roland Dreier
  2006-08-01 19:31   ` Dave Jones
  2006-08-01 22:20   ` Alan Cox
  2006-08-01 22:17 ` use " Alan Cox
  2006-08-05 21:26 ` Pavel Machek
  2 siblings, 2 replies; 12+ messages in thread
From: Roland Dreier @ 2006-08-01 19:15 UTC (permalink / raw)
  To: Dave Jones; +Cc: Linux Kernel

 > Every time the console cursor blinks, we do a kmalloc/kfree pair.
 > This patch turns that into a single allocation.

A naive question from someone who knows nothing about this subsystem:
is there any possibility of concurrent calls into this function, for
example if there are multiple cursors on a multiheaded system?

 - R.

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

* Re: use persistent allocation for cursor blinking.
  2006-08-01 19:15 ` Roland Dreier
@ 2006-08-01 19:31   ` Dave Jones
  2006-08-01 22:20   ` Alan Cox
  1 sibling, 0 replies; 12+ messages in thread
From: Dave Jones @ 2006-08-01 19:31 UTC (permalink / raw)
  To: Roland Dreier; +Cc: Linux Kernel

On Tue, Aug 01, 2006 at 12:15:35PM -0700, Roland Dreier wrote:
 >  > Every time the console cursor blinks, we do a kmalloc/kfree pair.
 >  > This patch turns that into a single allocation.
 > 
 > A naive question from someone who knows nothing about this subsystem:
 > is there any possibility of concurrent calls into this function, for
 > example if there are multiple cursors on a multiheaded system?

It's all called under the console_sem iirc.

		Dave

-- 
http://www.codemonkey.org.uk

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

* Re: use persistent allocation for cursor blinking.
  2006-08-01 18:56 use persistent allocation for cursor blinking Dave Jones
  2006-08-01 19:15 ` Roland Dreier
@ 2006-08-01 22:17 ` Alan Cox
  2006-08-01 22:39   ` Dave Jones
  2006-08-05 21:26 ` Pavel Machek
  2 siblings, 1 reply; 12+ messages in thread
From: Alan Cox @ 2006-08-01 22:17 UTC (permalink / raw)
  To: Dave Jones; +Cc: Linux Kernel

Ar Maw, 2006-08-01 am 14:56 -0400, ysgrifennodd Dave Jones:
> +	static u8 *src=NULL;
> +	static int allocsize=0;

s/=/ = /

> +	if (dsize + sizeof(struct fb_image) != allocsize) {
> +		if (src != NULL)
> +			kfree(src);
> +		allocsize = dsize + sizeof(struct fb_image);
> +
> +		src = kmalloc(allocsize, GFP_ATOMIC);
> +		if (!src)
> +			return -ENOMEM;
> +	}

If the allocation fails we have allocsize = "somesize" and src = NULL.
The next time we enter the if is false and we fall through and Oops

Either check src in the if or set allocsize to something impossible (eg
0) on the error path.

NAK



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

* Re: use persistent allocation for cursor blinking.
  2006-08-01 19:15 ` Roland Dreier
  2006-08-01 19:31   ` Dave Jones
@ 2006-08-01 22:20   ` Alan Cox
  2006-08-02  1:20     ` [PATCH] fbcon: Use " Antonino A. Daplas
  1 sibling, 1 reply; 12+ messages in thread
From: Alan Cox @ 2006-08-01 22:20 UTC (permalink / raw)
  To: Roland Dreier; +Cc: Dave Jones, Linux Kernel

Ar Maw, 2006-08-01 am 12:15 -0700, ysgrifennodd Roland Dreier:
>  > Every time the console cursor blinks, we do a kmalloc/kfree pair.
>  > This patch turns that into a single allocation.
> 
> A naiive question from someone who knows nothing about this subsystem:
> is there any possibility of concurrent calls into this function, for
> example if there are multiple cursors on a multiheaded system?

We don't do console multihead so its basically OK. Moving all the
console globals into a struct so we can have multiple instances would be
a good thing [tm] and it would make sense for the variable to end up in
said structure if it was done.

Definitely a janitor job there.

Alan


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

* Re: use persistent allocation for cursor blinking.
  2006-08-01 22:17 ` use " Alan Cox
@ 2006-08-01 22:39   ` Dave Jones
  2006-08-01 23:12     ` Alan Cox
  0 siblings, 1 reply; 12+ messages in thread
From: Dave Jones @ 2006-08-01 22:39 UTC (permalink / raw)
  To: Alan Cox; +Cc: Linux Kernel

On Tue, Aug 01, 2006 at 11:17:40PM +0100, Alan Cox wrote:

 > If the allocation fails we have allocsize = "somesize" and src = NULL.
 > The next time we enter the if is false and we fall through and Oops
 > 
 > Either check src in the if or set allocsize to something impossible (eg
 > 0) on the error path.

Good catch.

Signed-off-by: Dave Jones <davej@redhat.com>

--- linux-2.6/drivers/video/console/softcursor.c~	2005-12-28 18:40:08.000000000 -0500
+++ linux-2.6/drivers/video/console/softcursor.c	2005-12-28 18:45:50.000000000 -0500
@@ -23,7 +23,9 @@ int soft_cursor(struct fb_info *info, st
 	unsigned int buf_align = info->pixmap.buf_align - 1;
 	unsigned int i, size, dsize, s_pitch, d_pitch;
 	struct fb_image *image;
-	u8 *dst, *src;
+	u8 *dst;
+	static u8 *src=NULL;
+	static int allocsize = 0;
 
 	if (info->state != FBINFO_STATE_RUNNING)
 		return 0;
@@ -31,9 +33,17 @@ int soft_cursor(struct fb_info *info, st
 	s_pitch = (cursor->image.width + 7) >> 3;
 	dsize = s_pitch * cursor->image.height;
 
-	src = kmalloc(dsize + sizeof(struct fb_image), GFP_ATOMIC);
-	if (!src)
-		return -ENOMEM;
+	if (dsize + sizeof(struct fb_image) != allocsize) {
+		if (src != NULL)
+			kfree(src);
+		allocsize = dsize + sizeof(struct fb_image);
+
+		src = kmalloc(allocsize, GFP_ATOMIC);
+		if (!src) {
+			allocsize = 0;
+			return -ENOMEM;
+		}
+	}
 
 	image = (struct fb_image *) (src + dsize);
 	*image = cursor->image;
@@ -61,7 +69,6 @@ int soft_cursor(struct fb_info *info, st
 	fb_pad_aligned_buffer(dst, d_pitch, src, s_pitch, image->height);
 	image->data = dst;
 	info->fbops->fb_imageblit(info, image);
-	kfree(src);
 	return 0;
 }
 

-- 
http://www.codemonkey.org.uk

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

* Re: use persistent allocation for cursor blinking.
  2006-08-01 22:39   ` Dave Jones
@ 2006-08-01 23:12     ` Alan Cox
  0 siblings, 0 replies; 12+ messages in thread
From: Alan Cox @ 2006-08-01 23:12 UTC (permalink / raw)
  To: Dave Jones; +Cc: Linux Kernel

Ar Maw, 2006-08-01 am 18:39 -0400, ysgrifennodd Dave Jones:
> On Tue, Aug 01, 2006 at 11:17:40PM +0100, Alan Cox wrote:
> 
>  > If the allocation fails we have allocsize = "somesize" and src = NULL.
>  > The next time we enter the if is false and we fall through and Oops
>  > 
>  > Either check src in the if or set allocsize to something impossible (eg
>  > 0) on the error path.
> 
> Good catch.
> 
> Signed-off-by: Dave Jones <davej@redhat.com>

Acked-by: Alan Cox <alan@redhat.com>


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

* [PATCH] fbcon: Use persistent allocation for cursor blinking.
  2006-08-01 22:20   ` Alan Cox
@ 2006-08-02  1:20     ` Antonino A. Daplas
  2006-08-02  1:28       ` [PATCH RESEND] " Antonino A. Daplas
  2006-08-02  1:28       ` [PATCH] " Dave Jones
  0 siblings, 2 replies; 12+ messages in thread
From: Antonino A. Daplas @ 2006-08-02  1:20 UTC (permalink / raw)
  To: Alan Cox; +Cc: Roland Dreier, Dave Jones, Linux Kernel, Andrew Morton

From: Dave Jones <davej@redhat.com>

Every time the console cursor blinks, we do a kmalloc/kfree pair.
This patch turns that into a single allocation.

This allocation was the most frequent kmalloc I saw on my test box.

[adaplas]
Per Alan's suggestion, move global variables to fbcon's private structure.
This would also avoid resource leaks when fbcon is unloaded.

Signed-off-by: Dave Jones <davej@redhat.com>
Acked-by: Alan Cox <alan@redhat.com>
Signed-off-by: Antonino Daplas <adaplas@pol.net>
---

Alan Cox wrote:
> Ar Maw, 2006-08-01 am 12:15 -0700, ysgrifennodd Roland Dreier:
>>  > Every time the console cursor blinks, we do a kmalloc/kfree pair.
>>  > This patch turns that into a single allocation.

Thanks for doing this.

>>
>> A naiive question from someone who knows nothing about this subsystem:
>> is there any possibility of concurrent calls into this function, for
>> example if there are multiple cursors on a multiheaded system?
> 
> We don't do console multihead so its basically OK. Moving all the
> console globals into a struct so we can have multiple instances would be
> a good thing [tm] and it would make sense for the variable to end up in
> said structure if it was done.
> 

Here's an update. Taking Alan's cue, I just moved the global variables
to struct fbcon_ops.

Tony


 drivers/video/console/fbcon.c      |    3 +++
 drivers/video/console/fbcon.h      |    2 ++
 drivers/video/console/softcursor.c |   31 +++++++++++++++++++++----------
 3 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 390439b..6165fd9 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -3225,7 +3225,10 @@ #endif
 			module_put(info->fbops->owner);
 
 			if (info->fbcon_par) {
+				struct fbcon_ops *ops = info->fbcon_par;
+
 				fbcon_del_cursor_timer(info);
+				kfree(ops->cursor_src);
 				kfree(info->fbcon_par);
 				info->fbcon_par = NULL;
 			}
diff --git a/drivers/video/console/fbcon.h b/drivers/video/console/fbcon.h
index f244ad0..0b73ae9 100644
--- a/drivers/video/console/fbcon.h
+++ b/drivers/video/console/fbcon.h
@@ -80,6 +80,8 @@ struct fbcon_ops {
 	char  *cursor_data;
 	u8    *fontbuffer;
 	u8    *fontdata;
+	u8    *cursor_src;
+	u8     cursor_size;
 	u32    fd_size;
 };
     /*
diff --git a/drivers/video/console/softcursor.c b/drivers/video/console/softcursor.c
index 557c563..7d07d83 100644
--- a/drivers/video/console/softcursor.c
+++ b/drivers/video/console/softcursor.c
@@ -20,11 +20,12 @@ #include "fbcon.h"
 
 int soft_cursor(struct fb_info *info, struct fb_cursor *cursor)
 {
+	struct fbcon_ops *ops = info->fbcon_par;
 	unsigned int scan_align = info->pixmap.scan_align - 1;
 	unsigned int buf_align = info->pixmap.buf_align - 1;
 	unsigned int i, size, dsize, s_pitch, d_pitch;
 	struct fb_image *image;
-	u8 *dst, *src;
+	u8 *dst;
 
 	if (info->state != FBINFO_STATE_RUNNING)
 		return 0;
@@ -32,11 +33,19 @@ int soft_cursor(struct fb_info *info, st
 	s_pitch = (cursor->image.width + 7) >> 3;
 	dsize = s_pitch * cursor->image.height;
 
-	src = kmalloc(dsize + sizeof(struct fb_image), GFP_ATOMIC);
-	if (!src)
-		return -ENOMEM;
+	if (dsize + sizeof(struct fb_image) != ops->cursor_size) {
+		if (ops->cursor_src != NULL)
+			kfree(ops->cursor_src);
+		ops->cursor_size = dsize + sizeof(struct fb_image);
 
-	image = (struct fb_image *) (src + dsize);
+		ops->cursor_src = kmalloc(ops->cursor_size, GFP_ATOMIC);
+		if (!ops->cursor_src) {
+			ops->cursor_size = 0;
+			return -ENOMEM;
+		}
+	}
+
+	image = (struct fb_image *) (ops->cursor_src + dsize);
 	*image = cursor->image;
 	d_pitch = (s_pitch + scan_align) & ~scan_align;
 
@@ -48,21 +57,23 @@ int soft_cursor(struct fb_info *info, st
 		switch (cursor->rop) {
 		case ROP_XOR:
 			for (i = 0; i < dsize; i++)
-				src[i] = image->data[i] ^ cursor->mask[i];
+				ops->cursor_src[i] = image->data[i] ^
+					cursor->mask[i];
 			break;
 		case ROP_COPY:
 		default:
 			for (i = 0; i < dsize; i++)
-				src[i] = image->data[i] & cursor->mask[i];
+				ops->cursor_src[i] = image->data[i] &
+					cursor->mask[i];
 			break;
 		}
 	} else
-		memcpy(src, image->data, dsize);
+		memcpy(ops->cursor_src, image->data, dsize);
 
-	fb_pad_aligned_buffer(dst, d_pitch, src, s_pitch, image->height);
+	fb_pad_aligned_buffer(dst, d_pitch, ops->cursor_src, s_pitch,
+			      image->height);
 	image->data = dst;
 	info->fbops->fb_imageblit(info, image);
-	kfree(src);
 	return 0;
 }
 



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

* [PATCH RESEND] fbcon: Use persistent allocation for cursor blinking.
  2006-08-02  1:20     ` [PATCH] fbcon: Use " Antonino A. Daplas
@ 2006-08-02  1:28       ` Antonino A. Daplas
  2006-08-02  1:28       ` [PATCH] " Dave Jones
  1 sibling, 0 replies; 12+ messages in thread
From: Antonino A. Daplas @ 2006-08-02  1:28 UTC (permalink / raw)
  To: Antonino A. Daplas
  Cc: Alan Cox, Roland Dreier, Dave Jones, Linux Kernel, Andrew Morton

From: Dave Jones <davej@redhat.com>

Every time the console cursor blinks, we do a kmalloc/kfree pair.
This patch turns that into a single allocation.

This allocation was the most frequent kmalloc I saw on my test box.

[adaplas]
Per Alan's suggestion, move global variables to fbcon's private structure.
This would also avoid resource leaks when fbcon is unloaded.

Signed-off-by: Dave Jones <davej@redhat.com>
Acked-by: Alan Cox <alan@redhat.com>
Signed-off-by: Antonino Daplas <adaplas@pol.net>
---

Oops, I used u8 for cursor_size.

Tony

 drivers/video/console/fbcon.c      |    3 +++
 drivers/video/console/fbcon.h      |    2 ++
 drivers/video/console/softcursor.c |   31 +++++++++++++++++++++----------
 3 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 390439b..6165fd9 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -3225,7 +3225,10 @@ #endif
 			module_put(info->fbops->owner);
 
 			if (info->fbcon_par) {
+				struct fbcon_ops *ops = info->fbcon_par;
+
 				fbcon_del_cursor_timer(info);
+				kfree(ops->cursor_src);
 				kfree(info->fbcon_par);
 				info->fbcon_par = NULL;
 			}
diff --git a/drivers/video/console/fbcon.h b/drivers/video/console/fbcon.h
index f244ad0..b9386d1 100644
--- a/drivers/video/console/fbcon.h
+++ b/drivers/video/console/fbcon.h
@@ -80,6 +80,8 @@ struct fbcon_ops {
 	char  *cursor_data;
 	u8    *fontbuffer;
 	u8    *fontdata;
+	u8    *cursor_src;
+	u32    cursor_size;
 	u32    fd_size;
 };
     /*
diff --git a/drivers/video/console/softcursor.c b/drivers/video/console/softcursor.c
index 557c563..7d07d83 100644
--- a/drivers/video/console/softcursor.c
+++ b/drivers/video/console/softcursor.c
@@ -20,11 +20,12 @@ #include "fbcon.h"
 
 int soft_cursor(struct fb_info *info, struct fb_cursor *cursor)
 {
+	struct fbcon_ops *ops = info->fbcon_par;
 	unsigned int scan_align = info->pixmap.scan_align - 1;
 	unsigned int buf_align = info->pixmap.buf_align - 1;
 	unsigned int i, size, dsize, s_pitch, d_pitch;
 	struct fb_image *image;
-	u8 *dst, *src;
+	u8 *dst;
 
 	if (info->state != FBINFO_STATE_RUNNING)
 		return 0;
@@ -32,11 +33,19 @@ int soft_cursor(struct fb_info *info, st
 	s_pitch = (cursor->image.width + 7) >> 3;
 	dsize = s_pitch * cursor->image.height;
 
-	src = kmalloc(dsize + sizeof(struct fb_image), GFP_ATOMIC);
-	if (!src)
-		return -ENOMEM;
+	if (dsize + sizeof(struct fb_image) != ops->cursor_size) {
+		if (ops->cursor_src != NULL)
+			kfree(ops->cursor_src);
+		ops->cursor_size = dsize + sizeof(struct fb_image);
 
-	image = (struct fb_image *) (src + dsize);
+		ops->cursor_src = kmalloc(ops->cursor_size, GFP_ATOMIC);
+		if (!ops->cursor_src) {
+			ops->cursor_size = 0;
+			return -ENOMEM;
+		}
+	}
+
+	image = (struct fb_image *) (ops->cursor_src + dsize);
 	*image = cursor->image;
 	d_pitch = (s_pitch + scan_align) & ~scan_align;
 
@@ -48,21 +57,23 @@ int soft_cursor(struct fb_info *info, st
 		switch (cursor->rop) {
 		case ROP_XOR:
 			for (i = 0; i < dsize; i++)
-				src[i] = image->data[i] ^ cursor->mask[i];
+				ops->cursor_src[i] = image->data[i] ^
+					cursor->mask[i];
 			break;
 		case ROP_COPY:
 		default:
 			for (i = 0; i < dsize; i++)
-				src[i] = image->data[i] & cursor->mask[i];
+				ops->cursor_src[i] = image->data[i] &
+					cursor->mask[i];
 			break;
 		}
 	} else
-		memcpy(src, image->data, dsize);
+		memcpy(ops->cursor_src, image->data, dsize);
 
-	fb_pad_aligned_buffer(dst, d_pitch, src, s_pitch, image->height);
+	fb_pad_aligned_buffer(dst, d_pitch, ops->cursor_src, s_pitch,
+			      image->height);
 	image->data = dst;
 	info->fbops->fb_imageblit(info, image);
-	kfree(src);
 	return 0;
 }
 

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

* Re: [PATCH] fbcon: Use persistent allocation for cursor blinking.
  2006-08-02  1:20     ` [PATCH] fbcon: Use " Antonino A. Daplas
  2006-08-02  1:28       ` [PATCH RESEND] " Antonino A. Daplas
@ 2006-08-02  1:28       ` Dave Jones
  1 sibling, 0 replies; 12+ messages in thread
From: Dave Jones @ 2006-08-02  1:28 UTC (permalink / raw)
  To: Antonino A. Daplas; +Cc: Alan Cox, Roland Dreier, Linux Kernel, Andrew Morton

On Wed, Aug 02, 2006 at 09:20:49AM +0800, Antonino A. Daplas wrote:

 > >> A naiive question from someone who knows nothing about this subsystem:
 > >> is there any possibility of concurrent calls into this function, for
 > >> example if there are multiple cursors on a multiheaded system?
 > > 
 > > We don't do console multihead so its basically OK. Moving all the
 > > console globals into a struct so we can have multiple instances would be
 > > a good thing [tm] and it would make sense for the variable to end up in
 > > said structure if it was done.
 > > 
 > 
 > Here's an update. Taking Alan's cue, I just moved the global variables
 > to struct fbcon_ops.

Good job.  Have another..

Signed-off-by: Dave Jones <davej@redhat.com>

		Dave

-- 
http://www.codemonkey.org.uk

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

* Re: use persistent allocation for cursor blinking.
  2006-08-01 18:56 use persistent allocation for cursor blinking Dave Jones
  2006-08-01 19:15 ` Roland Dreier
  2006-08-01 22:17 ` use " Alan Cox
@ 2006-08-05 21:26 ` Pavel Machek
  2006-08-06 23:46   ` Antonino A. Daplas
  2 siblings, 1 reply; 12+ messages in thread
From: Pavel Machek @ 2006-08-05 21:26 UTC (permalink / raw)
  To: Dave Jones, Linux Kernel

Hi!

> Every time the console cursor blinks, we do a kmalloc/kfree pair.
> This patch turns that into a single allocation.
> 
> This allocation was the most frequent kmalloc I saw on my test box.
> 
> Signed-off-by: Dave Jones <davej@redhat.com>
> 
> 
> --- linux-2.6.14/drivers/video/console/softcursor.c~	2005-12-28 18:40:08.000000000 -0500
> +++ linux-2.6.14/drivers/video/console/softcursor.c	2005-12-28 18:45:50.000000000 -0500
> @@ -23,7 +23,9 @@ int soft_cursor(struct fb_info *info, st
>  	unsigned int buf_align = info->pixmap.buf_align - 1;
>  	unsigned int i, size, dsize, s_pitch, d_pitch;
>  	struct fb_image *image;
> -	u8 *dst, *src;
> +	u8 *dst;
> +	static u8 *src=NULL;
> +	static int allocsize=0;
>  

Spaces around = ? And perhaps it does not need to be initialized when
it is static?

							Pavel
-- 
Thanks for all the (sleeping) penguins.

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

* Re: use persistent allocation for cursor blinking.
  2006-08-05 21:26 ` Pavel Machek
@ 2006-08-06 23:46   ` Antonino A. Daplas
  0 siblings, 0 replies; 12+ messages in thread
From: Antonino A. Daplas @ 2006-08-06 23:46 UTC (permalink / raw)
  To: Pavel Machek; +Cc: Dave Jones, Linux Kernel

Pavel Machek wrote:
> Hi!
> 
>> Every time the console cursor blinks, we do a kmalloc/kfree pair.
>> This patch turns that into a single allocation.
>>
>> This allocation was the most frequent kmalloc I saw on my test box.
>>
>> Signed-off-by: Dave Jones <davej@redhat.com>
>>
>>
>> --- linux-2.6.14/drivers/video/console/softcursor.c~	2005-12-28 18:40:08.000000000 -0500
>> +++ linux-2.6.14/drivers/video/console/softcursor.c	2005-12-28 18:45:50.000000000 -0500
>> @@ -23,7 +23,9 @@ int soft_cursor(struct fb_info *info, st
>>  	unsigned int buf_align = info->pixmap.buf_align - 1;
>>  	unsigned int i, size, dsize, s_pitch, d_pitch;
>>  	struct fb_image *image;
>> -	u8 *dst, *src;
>> +	u8 *dst;
>> +	static u8 *src=NULL;
>> +	static int allocsize=0;
>>  
> 
> Spaces around = ? And perhaps it does not need to be initialized when
> it is static?
> 

I already sent an updated patch, so your concerns are gone.

Tony



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

end of thread, other threads:[~2006-08-06 23:46 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-01 18:56 use persistent allocation for cursor blinking Dave Jones
2006-08-01 19:15 ` Roland Dreier
2006-08-01 19:31   ` Dave Jones
2006-08-01 22:20   ` Alan Cox
2006-08-02  1:20     ` [PATCH] fbcon: Use " Antonino A. Daplas
2006-08-02  1:28       ` [PATCH RESEND] " Antonino A. Daplas
2006-08-02  1:28       ` [PATCH] " Dave Jones
2006-08-01 22:17 ` use " Alan Cox
2006-08-01 22:39   ` Dave Jones
2006-08-01 23:12     ` Alan Cox
2006-08-05 21:26 ` Pavel Machek
2006-08-06 23:46   ` Antonino A. Daplas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox