summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-03-28 01:54:06 +0000
committerjhb <jhb@FreeBSD.org>2001-03-28 01:54:06 +0000
commit8106ecf771594b73f3f0ce4c8f0ae0d71c07ce46 (patch)
treeb69762fb851de83b8c9705a92450c32828f26d0c
parent2f970352f7b2a33caad161f95721021750494718 (diff)
downloadFreeBSD-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.c5
-rw-r--r--sys/alpha/alpha/autoconf.c1
-rw-r--r--sys/alpha/alpha/clock.c37
-rw-r--r--sys/alpha/alpha/db_interface.c11
-rw-r--r--sys/alpha/alpha/genassym.c2
-rw-r--r--sys/alpha/alpha/interrupt.c2
-rw-r--r--sys/alpha/alpha/machdep.c28
-rw-r--r--sys/alpha/alpha/prom.c27
-rw-r--r--sys/powerpc/powerpc/genassym.c2
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));
OpenPOWER on IntegriCloud