diff options
| author | Ken Smith <kensmith@FreeBSD.org> | 2004-02-27 19:30:46 +0000 |
|---|---|---|
| committer | Ken Smith <kensmith@FreeBSD.org> | 2004-02-27 19:30:46 +0000 |
| commit | 44bacdd9bc31c10b13f4e22b37e1de0eec1473e6 (patch) | |
| tree | aaba1e753029dd44f37c1a7429da4e024293cd1a /sys/alpha | |
| parent | 853bd372d1d567d9eb3d833918ba2e51f7d008e4 (diff) | |
Notes
Diffstat (limited to 'sys/alpha')
| -rw-r--r-- | sys/alpha/alpha/machdep.c | 11 | ||||
| -rw-r--r-- | sys/alpha/alpha/promcons.c | 20 |
2 files changed, 29 insertions, 2 deletions
diff --git a/sys/alpha/alpha/machdep.c b/sys/alpha/alpha/machdep.c index 9bd1f5b38d630..227c7fb676c31 100644 --- a/sys/alpha/alpha/machdep.c +++ b/sys/alpha/alpha/machdep.c @@ -201,6 +201,9 @@ long unusedmem; /* amount of memory for OS that we don't use */ long unknownmem; /* amount of memory with an unknown use */ int ncpus; /* number of cpus */ +int promcons_dly_mkdev = 1; /* need to delay call to make_dev() */ +void promcons_delayed_makedev(void); + vm_offset_t phys_avail[10]; /* must be 2 less so 0 0 can signal end of chunks */ @@ -889,6 +892,14 @@ alpha_init(pfn, ptb, bim, bip, biv) } /* + * Check to see if promcons needs to make_dev() now, + * doing it before now crashes with kernel stack issues. + */ + if (promcons_dly_mkdev > 1) + promcons_delayed_makedev(); + promcons_dly_mkdev = 0; + + /* * Initialize the virtual memory system, and set the * page table base register in proc 0's PCB. */ diff --git a/sys/alpha/alpha/promcons.c b/sys/alpha/alpha/promcons.c index 4d41abced4f0a..35cda1b6db925 100644 --- a/sys/alpha/alpha/promcons.c +++ b/sys/alpha/alpha/promcons.c @@ -83,6 +83,9 @@ void promtimeout(void *); int promparam(struct tty *, struct termios *); void promstop(struct tty *, int); +extern int promcons_dly_mkdev; +void promcons_delayed_makedev(void); + int promopen(dev, flag, mode, td) dev_t dev; @@ -248,12 +251,25 @@ promcnattach(int alpha_console) { prom_consdev.cn_pri = CN_NORMAL; sprintf(prom_consdev.cn_name, "promcons"); - make_dev(&prom_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, "promcons"); - cnadd(&prom_consdev); + if (promcons_dly_mkdev) + promcons_dly_mkdev++; + else { + make_dev(&prom_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, "promcons"); + cnadd(&prom_consdev); + } promcn_attached = 1; } void +promcons_delayed_makedev(void) +{ + if (promcn_attached) { + make_dev(&prom_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, "promcons"); + cnadd(&prom_consdev); + } +} + +void promcndetach(void) { if (promcn_attached) { |
