From ef7e3122b69b9fabf373452523dfdfcb49cd9f72 Mon Sep 17 00:00:00 2001 From: Miod Vallat Date: Sun, 16 Jul 2006 21:50:59 +0000 Subject: 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 --- sys/dev/ic/ibm561.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'sys/dev') 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); -- cgit v1.2.3