[OpenBIOS] [commit] r872 - in trunk/openbios-devel: arch/ppc/mol arch/ppc/pearpc arch/sparc32 arch/x86/xbox include/libopenbios libopenbios packages
repository service
svn at openbios.org
Wed Sep 29 22:30:52 CEST 2010
Author: blueswirl
Date: Wed Sep 29 22:30:51 2010
New Revision: 872
URL: http://tracker.coreboot.org/trac/openbios/changeset/872
Log:
Avoid a lot of malloc/free traffic
Each console write caused temporary buffer allocation.
Avoid allocations by changing console_draw_str() to use Forth
string parameters, which are usually readily available.
Signed-off-by: Blue Swirl <blauwirbel at gmail.com>
Modified:
trunk/openbios-devel/arch/ppc/mol/methods.c
trunk/openbios-devel/arch/ppc/mol/mol.h
trunk/openbios-devel/arch/ppc/pearpc/methods.c
trunk/openbios-devel/arch/ppc/pearpc/pearpc.h
trunk/openbios-devel/arch/sparc32/console.c
trunk/openbios-devel/arch/x86/xbox/methods.c
trunk/openbios-devel/include/libopenbios/console.h
trunk/openbios-devel/libopenbios/console_common.c
trunk/openbios-devel/packages/video.c
Modified: trunk/openbios-devel/arch/ppc/mol/methods.c
==============================================================================
--- trunk/openbios-devel/arch/ppc/mol/methods.c Wed Sep 29 20:34:41 2010 (r871)
+++ trunk/openbios-devel/arch/ppc/mol/methods.c Wed Sep 29 22:30:51 2010 (r872)
@@ -85,14 +85,9 @@
{
int len = POP();
char *addr = (char*)POP();
- char *s = malloc( len + 1 );
-
- strncpy_nopad( s, addr, len );
- s[len]=0;
/* printk( "%s", s ); */
- console_draw_str( s );
- free( s );
+ console_draw_fstr(addr, len);
PUSH( len );
}
Modified: trunk/openbios-devel/arch/ppc/mol/mol.h
==============================================================================
--- trunk/openbios-devel/arch/ppc/mol/mol.h Wed Sep 29 20:34:41 2010 (r871)
+++ trunk/openbios-devel/arch/ppc/mol/mol.h Wed Sep 29 22:30:51 2010 (r872)
@@ -24,7 +24,7 @@
extern void set_color( int index, unsigned long color );
/* console.c */
-extern int console_draw_str( const char *str );
+extern int console_draw_fstr(const char *str, int len);
extern void console_close( void );
/* pseudodisk.c */
Modified: trunk/openbios-devel/arch/ppc/pearpc/methods.c
==============================================================================
--- trunk/openbios-devel/arch/ppc/pearpc/methods.c Wed Sep 29 20:34:41 2010 (r871)
+++ trunk/openbios-devel/arch/ppc/pearpc/methods.c Wed Sep 29 22:30:51 2010 (r872)
@@ -70,16 +70,10 @@
{
int len = POP();
char *addr = (char*)POP();
- char *s = malloc( len + 1 );
-
- strncpy_nopad( s, addr, len );
- s[len]=0;
printk( "%s", s );
//vfd_draw_str( s );
- console_draw_str( s );
-
- free( s );
+ console_draw_fstr(addr, len);
PUSH( len );
}
Modified: trunk/openbios-devel/arch/ppc/pearpc/pearpc.h
==============================================================================
--- trunk/openbios-devel/arch/ppc/pearpc/pearpc.h Wed Sep 29 20:34:41 2010 (r871)
+++ trunk/openbios-devel/arch/ppc/pearpc/pearpc.h Wed Sep 29 22:30:51 2010 (r872)
@@ -19,7 +19,7 @@
extern int vfd_draw_str( const char *str );
extern void vfd_close( void );
-extern int console_draw_str( const char *str );
+extern int console_draw_fstr(const char *str, int len);
#include "kernel.h"
Modified: trunk/openbios-devel/arch/sparc32/console.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/console.c Wed Sep 29 20:34:41 2010 (r871)
+++ trunk/openbios-devel/arch/sparc32/console.c Wed Sep 29 22:30:51 2010 (r872)
@@ -32,12 +32,11 @@
static void video_putchar(int c)
{
- char buf[2];
+ char buf;
- buf[0] = c & 0xff;
- buf[1] = 0;
+ buf = c & 0xff;
- console_draw_str(buf);
+ console_draw_fstr(&buf, 1);
}
static void video_cls(void)
Modified: trunk/openbios-devel/arch/x86/xbox/methods.c
==============================================================================
--- trunk/openbios-devel/arch/x86/xbox/methods.c Wed Sep 29 20:34:41 2010 (r871)
+++ trunk/openbios-devel/arch/x86/xbox/methods.c Wed Sep 29 22:30:51 2010 (r872)
@@ -35,16 +35,10 @@
{
int len = POP();
char *addr = (char*)POP();
- char *s = malloc( len + 1 );
-
- strncpy_nopad( s, addr, len );
- s[len]=0;
printk( "%s", s );
//vfd_draw_str( s );
- console_draw_str( s );
-
- free( s );
+ console_draw_fstr(addr, len);
PUSH( len );
}
Modified: trunk/openbios-devel/include/libopenbios/console.h
==============================================================================
--- trunk/openbios-devel/include/libopenbios/console.h Wed Sep 29 20:34:41 2010 (r871)
+++ trunk/openbios-devel/include/libopenbios/console.h Wed Sep 29 22:30:51 2010 (r872)
@@ -2,7 +2,7 @@
#define VIDEO_CONSOLE_H
/* libopenbios/console_common.c */
-int console_draw_str(const char *str);
+int console_draw_fstr(const char *str, int len);
int console_init(void);
void console_close(void);
Modified: trunk/openbios-devel/libopenbios/console_common.c
==============================================================================
--- trunk/openbios-devel/libopenbios/console_common.c Wed Sep 29 20:34:41 2010 (r871)
+++ trunk/openbios-devel/libopenbios/console_common.c Wed Sep 29 22:30:51 2010 (r872)
@@ -382,12 +382,12 @@
}
int
-console_draw_str( const char *str )
+console_draw_fstr(const char *str, int len)
{
unsigned int y, x;
unsigned char ch;
- if (!str) {
+ if (!str || len <= 0) {
return 0;
}
@@ -395,7 +395,7 @@
return -1;
show_cursor(0);
- while( (ch=*str++) ) {
+ while((ch = *str++) && len--) {
do_con_trol(ch);
if( cons.x >= cons.w ) {
Modified: trunk/openbios-devel/packages/video.c
==============================================================================
--- trunk/openbios-devel/packages/video.c Wed Sep 29 20:34:41 2010 (r871)
+++ trunk/openbios-devel/packages/video.c Wed Sep 29 22:30:51 2010 (r872)
@@ -288,11 +288,10 @@
char *addr;
int len;
- len = GETTOS();
- addr = pop_fstr_copy();
+ len = POP();
+ addr = (char *)POP();
- console_draw_str(addr);
- free(addr);
+ console_draw_fstr(addr, len);
PUSH(len);
}
More information about the OpenBIOS
mailing list