diff options
author | jhb <jhb@FreeBSD.org> | 2001-03-28 01:54:06 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2001-03-28 01:54:06 +0000 |
commit | 8106ecf771594b73f3f0ce4c8f0ae0d71c07ce46 (patch) | |
tree | b69762fb851de83b8c9705a92450c32828f26d0c | |
parent | 2f970352f7b2a33caad161f95721021750494718 (diff) | |
download | FreeBSD-src-8106ecf771594b73f3f0ce4c8f0ae0d71c07ce46.zip FreeBSD-src-8106ecf771594b73f3f0ce4c8f0ae0d71c07ce46.tar.gz |
- Include <machine/prom.h> to get the prototype for prom_halt().
- If there is no gdb device, just return without trying to return any
value since gdb_handle_exception() returns void.
- When calling prom_halt(), pass in a value telling it to actually halt
and not to randomly choose whether or not to halt or reboot depending on
whatever value happened to be in a0 when the call was made.
-rw-r--r-- | sys/alpha/alpha/alpha-gdbstub.c | 5 | ||||
-rw-r--r-- | sys/alpha/alpha/autoconf.c | 1 | ||||
-rw-r--r-- | sys/alpha/alpha/clock.c | 37 | ||||
-rw-r--r-- | sys/alpha/alpha/db_interface.c | 11 | ||||
-rw-r--r-- | sys/alpha/alpha/genassym.c | 2 | ||||
-rw-r--r-- | sys/alpha/alpha/interrupt.c | 2 | ||||
-rw-r--r-- | sys/alpha/alpha/machdep.c | 28 | ||||
-rw-r--r-- | sys/alpha/alpha/prom.c | 27 | ||||
-rw-r--r-- | sys/powerpc/powerpc/genassym.c | 2 |
9 files changed, 57 insertions, 58 deletions
diff --git a/sys/alpha/alpha/alpha-gdbstub.c b/sys/alpha/alpha/alpha-gdbstub.c index 3e480f7..02efd28 100644 --- a/sys/alpha/alpha/alpha-gdbstub.c +++ b/sys/alpha/alpha/alpha-gdbstub.c @@ -99,6 +99,7 @@ #include <sys/signal.h> #include <sys/cons.h> +#include <machine/prom.h> #include <machine/reg.h> #include <ddb/ddb.h> @@ -625,7 +626,7 @@ gdb_handle_exception (db_regs_t *raw_regs, int type, int code) while (1) { if (gdbdev == NODEV) /* somebody's removed it */ - return 1; /* get out of here */ + return; /* get out of here */ remcomOutBuffer[0] = 0; getpacket (remcomInBuffer); @@ -644,7 +645,7 @@ gdb_handle_exception (db_regs_t *raw_regs, int type, int code) return; case 'k': - prom_halt(); + prom_halt(1); /*NOTREACHED*/ break; diff --git a/sys/alpha/alpha/autoconf.c b/sys/alpha/alpha/autoconf.c index 42696df..648d2a7 100644 --- a/sys/alpha/alpha/autoconf.c +++ b/sys/alpha/alpha/autoconf.c @@ -210,7 +210,6 @@ configure(void *dummy) void cpu_rootconf() { - int order = 0; #if defined(NFS) && defined(NFS_ROOT) #if !defined(BOOTP_NFSROOT) if (nfs_diskless_valid) diff --git a/sys/alpha/alpha/clock.c b/sys/alpha/alpha/clock.c index b74dc5b..d986ea0 100644 --- a/sys/alpha/alpha/clock.c +++ b/sys/alpha/alpha/clock.c @@ -267,10 +267,9 @@ static int getit(void) { int high, low; - int s; + critical_t s; - s = save_intr(); - disable_intr(); + s = critical_enter(); /* Select timer0 and latch counter value. */ outb(TIMER_MODE, TIMER_SEL0 | TIMER_LATCH); @@ -278,7 +277,7 @@ getit(void) low = inb(TIMER_CNTR0); high = inb(TIMER_CNTR0); - restore_intr(s); + critical_exit(s); return ((high << 8) | low); } @@ -369,10 +368,9 @@ static void set_timer_freq(u_int freq, int intr_freq) { int new_timer0_max_count; - int s; + critical_t s; - s = save_intr(); - disable_intr(); + s = critical_enter(); timer_freq = freq; new_timer0_max_count = TIMER_DIV(intr_freq); if (new_timer0_max_count != timer0_max_count) { @@ -381,15 +379,16 @@ set_timer_freq(u_int freq, int intr_freq) outb(TIMER_CNTR0, timer0_max_count & 0xff); outb(TIMER_CNTR0, timer0_max_count >> 8); } - restore_intr(s); + critical_exit(s); } static void handleclock(void* arg) { if (timecounter->tc_get_timecount == i8254_get_timecount) { - int s = save_intr(); - disable_intr(); + critical_t s; + + s = critical_enter(); if (i8254_ticked) i8254_ticked = 0; else { @@ -397,7 +396,7 @@ handleclock(void* arg) i8254_lastcount = 0; } clkintr_pending = 0; - restore_intr(s); + critical_exit(s); } hardclock(arg); @@ -567,10 +566,9 @@ i8254_get_timecount(struct timecounter *tc) { u_int count; u_int high, low; - int s; + critical_t s; - s = save_intr(); - disable_intr(); + s = critical_enter(); /* Select timer0 and latch counter value. */ outb(TIMER_MODE, TIMER_SEL0 | TIMER_LATCH); @@ -588,7 +586,7 @@ i8254_get_timecount(struct timecounter *tc) i8254_lastcount = count; count += i8254_offset; - restore_intr(s); + critical_exit(s); return (count); } @@ -640,13 +638,14 @@ sysbeepstop(void *chan) int sysbeep(int pitch, int period) { - int s = save_intr(); - disable_intr(); + critical_t s; + + s = critical_enter(); if (acquire_timer2(TIMER_SQWAVE|TIMER_16BIT)) if (!beeping) { /* Something else owns it. */ - restore_intr(s); + critical_exit(s); return (-1); /* XXX Should be EBUSY, but nobody cares anyway. */ } @@ -660,7 +659,7 @@ sysbeep(int pitch, int period) beeping = period; timeout(sysbeepstop, (void *)NULL, period); } - restore_intr(s); + critical_exit(s); return (0); } diff --git a/sys/alpha/alpha/db_interface.c b/sys/alpha/alpha/db_interface.c index f04cbe1..304e353 100644 --- a/sys/alpha/alpha/db_interface.c +++ b/sys/alpha/alpha/db_interface.c @@ -154,7 +154,7 @@ kdb_trap(a0, a1, a2, entry, regs) db_regs_t *regs; { int ddb_mode = !(boothowto & RB_GDB); - int s; + critical_t s; /* * Don't bother checking for usermode, since a benign entry @@ -191,8 +191,7 @@ kdb_trap(a0, a1, a2, entry, regs) ddb_regs = *regs; - s = save_intr(); - disable_intr(); + s = critical_enter(); #if 0 db_printf("stopping %x\n", PCPU_GET(other_cpus)); @@ -215,7 +214,7 @@ kdb_trap(a0, a1, a2, entry, regs) restart_cpus(stopped_cpus); #endif - restore_intr(s); + critical_exit(s); *regs = ddb_regs; @@ -269,8 +268,12 @@ db_write_bytes(addr, size, data) void Debugger(const char* msg) { + u_int saveintr; + printf("%s\n", msg); + saveintr = alpha_pal_swpipl(ALPHA_PSL_IPL_HIGH); __asm("call_pal 0x81"); /* XXX bugchk */ + alpha_pal_swpipl(saveintr); } /* diff --git a/sys/alpha/alpha/genassym.c b/sys/alpha/alpha/genassym.c index e649ad2..dc301ee 100644 --- a/sys/alpha/alpha/genassym.c +++ b/sys/alpha/alpha/genassym.c @@ -76,7 +76,7 @@ ASSYM(GD_IDLEPCBPHYS, offsetof(struct globaldata, gd_idlepcbphys)); ASSYM(MTX_LOCK, offsetof(struct mtx, mtx_lock)); ASSYM(MTX_RECURSE, offsetof(struct mtx, mtx_recurse)); -ASSYM(MTX_SAVEINTR, offsetof(struct mtx, mtx_saveintr)); +ASSYM(MTX_SAVECRIT, offsetof(struct mtx, mtx_savecrit)); ASSYM(MTX_UNOWNED, MTX_UNOWNED); ASSYM(P_ADDR, offsetof(struct proc, p_addr)); diff --git a/sys/alpha/alpha/interrupt.c b/sys/alpha/alpha/interrupt.c index e33f9d5..c4b60b7 100644 --- a/sys/alpha/alpha/interrupt.c +++ b/sys/alpha/alpha/interrupt.c @@ -116,7 +116,7 @@ interrupt(a0, a1, a2, framep) #endif case ALPHA_INTR_CLOCK: /* clock interrupt */ - CTR0(KTR_INTR, "clock interrupt"); + /* CTR0(KTR_INTR, "clock interrupt"); */ if (PCPU_GET(cpuid) != hwrpb->rpb_primary_cpu_id) { CTR0(KTR_INTR, "ignoring clock on secondary"); atomic_subtract_int(&p->p_intr_nesting_level, 1); diff --git a/sys/alpha/alpha/machdep.c b/sys/alpha/alpha/machdep.c index ad8d116..20c529a 100644 --- a/sys/alpha/alpha/machdep.c +++ b/sys/alpha/alpha/machdep.c @@ -2100,14 +2100,13 @@ alpha_fpstate_check(struct proc *p) * For SMP, we should check the fpcurproc of each cpu. */ #ifndef SMP - int s; + critical_t s; - s = save_intr(); - disable_intr(); + s = critical_enter(); if (p->p_addr->u_pcb.pcb_hw.apcb_flags & ALPHA_PCB_FLAGS_FEN) if (p != PCPU_GET(fpcurproc)) panic("alpha_check_fpcurproc: bogus"); - restore_intr(s); + critical_exit(s); #endif } @@ -2127,10 +2126,9 @@ alpha_fpstate_check(struct proc *p) void alpha_fpstate_save(struct proc *p, int write) { - int s; + critical_t s; - s = save_intr(); - disable_intr(); + s = critical_enter(); if (p == PCPU_GET(fpcurproc)) { /* * If curproc != fpcurproc, then we need to enable FEN @@ -2165,7 +2163,7 @@ alpha_fpstate_save(struct proc *p, int write) alpha_pal_wrfen(0); } } - restore_intr(s); + critical_exit(s); } /* @@ -2176,10 +2174,9 @@ alpha_fpstate_save(struct proc *p, int write) void alpha_fpstate_drop(struct proc *p) { - int s; + critical_t s; - s = save_intr(); - disable_intr(); + s = critical_enter(); if (p == PCPU_GET(fpcurproc)) { if (p == curproc) { /* @@ -2195,7 +2192,7 @@ alpha_fpstate_drop(struct proc *p) } PCPU_SET(fpcurproc, NULL); } - restore_intr(s); + critical_exit(s); } /* @@ -2205,13 +2202,12 @@ alpha_fpstate_drop(struct proc *p) void alpha_fpstate_switch(struct proc *p) { - int s; + critical_t s; /* * Enable FEN so that we can access the fp registers. */ - s = save_intr(); - disable_intr(); + s = critical_enter(); alpha_pal_wrfen(1); if (PCPU_GET(fpcurproc)) { /* @@ -2238,7 +2234,7 @@ alpha_fpstate_switch(struct proc *p) } p->p_md.md_flags |= MDP_FPUSED; - restore_intr(s); + critical_exit(s); } /* diff --git a/sys/alpha/alpha/prom.c b/sys/alpha/alpha/prom.c index 2ddf62d..48ea93f 100644 --- a/sys/alpha/alpha/prom.c +++ b/sys/alpha/alpha/prom.c @@ -113,8 +113,8 @@ init_bootstrap_console() promcnattach(alpha_console); } -static int enter_prom __P((void)); -static void leave_prom __P((int)); +static critical_t enter_prom __P((void)); +static void leave_prom __P((critical_t)); /* @@ -134,16 +134,16 @@ promcnputc(dev, c) { prom_return_t ret; unsigned char *to = (unsigned char *)0x20000000; - int s; + critical_t s; - s = enter_prom(); /* disable_intr() and map prom */ + s = enter_prom(); /* critical_enter() and map prom */ *to = c; do { ret.bits = prom_putstr(alpha_console, to, 1); } while ((ret.u.retval & 1) == 0); - leave_prom(s); /* unmap prom and restore_intr(s) */ + leave_prom(s); /* unmap prom and critical_exit(s) */ } /* @@ -188,12 +188,13 @@ promcncheckc(dev) return (-1); } -static int +static critical_t enter_prom() { pt_entry_t *lev1map; - int s = save_intr(); - disable_intr(); + critical_t s; + + s = critical_enter(); if (!prom_mapped) { #ifdef SIMOS @@ -219,8 +220,8 @@ enter_prom() } static void -leave_prom __P((s)) - int s; +leave_prom(s) + critical_t s; { pt_entry_t *lev1map; @@ -232,11 +233,11 @@ leave_prom __P((s)) lev1map[0] = saved_pte[0]; /* XXX */ prom_cache_sync(); /* XXX */ } - restore_intr(s); + critical_exit(s); } static void -prom_cache_sync __P((void)) +prom_cache_sync(void) { ALPHA_TBIA(); alpha_pal_imb(); @@ -272,7 +273,7 @@ prom_halt(halt) /* * Turn off interrupts, for sanity. */ - disable_intr(); + critical_enter(); /* * Set "boot request" part of the CPU state depending on what diff --git a/sys/powerpc/powerpc/genassym.c b/sys/powerpc/powerpc/genassym.c index e649ad2..dc301ee 100644 --- a/sys/powerpc/powerpc/genassym.c +++ b/sys/powerpc/powerpc/genassym.c @@ -76,7 +76,7 @@ ASSYM(GD_IDLEPCBPHYS, offsetof(struct globaldata, gd_idlepcbphys)); ASSYM(MTX_LOCK, offsetof(struct mtx, mtx_lock)); ASSYM(MTX_RECURSE, offsetof(struct mtx, mtx_recurse)); -ASSYM(MTX_SAVEINTR, offsetof(struct mtx, mtx_saveintr)); +ASSYM(MTX_SAVECRIT, offsetof(struct mtx, mtx_savecrit)); ASSYM(MTX_UNOWNED, MTX_UNOWNED); ASSYM(P_ADDR, offsetof(struct proc, p_addr)); |