summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2006-07-16 21:50:59 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2006-07-16 21:50:59 +0000
commitef7e3122b69b9fabf373452523dfdfcb49cd9f72 (patch)
tree33317504bb81c4fded51a4a251de68bb012c1ccf /sys/dev
parent4323463cc9ee7772047d6fe389dbe4113061d09d (diff)
Use a global variable for the console ibm561 state, and use it when the
real device attach, instead of using malloc (we can not use malloc at console initialization time). This gets rid of the following stack offense: /usr/src/sys/dev/ic/ibm561.c: In function `ibm561_cninit': /usr/src/sys/dev/ic/ibm561.c:193: warning: stack usage is 4768 bytes
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ic/ibm561.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/sys/dev/ic/ibm561.c b/sys/dev/ic/ibm561.c
index 4b27812b80c..f8892d4bd55 100644
--- a/sys/dev/ic/ibm561.c
+++ b/sys/dev/ic/ibm561.c
@@ -1,5 +1,5 @@
/* $NetBSD: ibm561.c,v 1.1 2001/12/12 07:46:48 elric Exp $ */
-/* $OpenBSD: ibm561.c,v 1.3 2002/11/09 22:51:48 miod Exp $ */
+/* $OpenBSD: ibm561.c,v 1.4 2006/07/16 21:50:58 miod Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -147,6 +147,8 @@ ibm561_funcs(void)
return &ibm561_funcsstruct;
}
+struct ibm561data ibm561_console_data;
+
struct ramdac_cookie *
ibm561_register(v, sched_update, wr, rd)
void *v;
@@ -156,7 +158,11 @@ ibm561_register(v, sched_update, wr, rd)
{
struct ibm561data *data;
- data = malloc(sizeof *data, M_DEVBUF, M_WAITOK); // XXX |M_ZERO);
+ if (ibm561_console_data.cookie == NULL) {
+ data = malloc(sizeof *data, M_DEVBUF, M_WAITOK);
+ bzero(data, sizeof *data);
+ } else
+ data = &ibm561_console_data;
data->cookie = v;
data->ramdac_sched_update = sched_update;
data->ramdac_wr = wr;
@@ -170,8 +176,6 @@ ibm561_register(v, sched_update, wr, rd)
* initializing the console early on.
*/
-struct ibm561data *saved_console_data;
-
void
ibm561_cninit(v, sched_update, wr, rd, dotclock)
void *v;
@@ -180,16 +184,13 @@ ibm561_cninit(v, sched_update, wr, rd, dotclock)
u_int8_t (*rd)(void *, u_int);
u_int dotclock;
{
- struct ibm561data tmp, *data = &tmp;
- memset(data, 0x0, sizeof *data);
+ struct ibm561data *data = &ibm561_console_data;
data->cookie = v;
data->ramdac_sched_update = sched_update;
data->ramdac_wr = wr;
data->ramdac_rd = rd;
ibm561_set_dotclock((struct ramdac_cookie *)data, dotclock);
- saved_console_data = data;
ibm561_init((struct ramdac_cookie *)data);
- saved_console_data = NULL;
}
void
@@ -426,7 +427,7 @@ ibm561_update(vp)
/* XXX see comment above ibm561_cninit() */
if (!data)
- data = saved_console_data;
+ data = &ibm561_console_data;
if (data->changed & CHANGED_WTYPE) {
ibm561_regbegin(data, IBM561_FB_WINTYPE);