Commit ad725933 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://kernel.bkbits.net/davem/sparc-2.5

into home.transmeta.com:/home/torvalds/v2.5/linux
parents 80981cbb 62cbd987
...@@ -1000,6 +1000,13 @@ config DEBUG_SPINLOCK_SLEEP ...@@ -1000,6 +1000,13 @@ config DEBUG_SPINLOCK_SLEEP
If you say Y here, various routines which may sleep will become very If you say Y here, various routines which may sleep will become very
noisy if they are called with a spinlock held. noisy if they are called with a spinlock held.
config DEBUG_BUGVERBOSE
bool "Verbose BUG() reporting (adds 70K)"
help
Say Y here to make BUG() panics output the file name and line number
of the BUG call as well as the EIP and oops trace. This aids
debugging but costs about 70-100K of memory.
endmenu endmenu
source "security/Kconfig" source "security/Kconfig"
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# #
CONFIG_MMU=y CONFIG_MMU=y
CONFIG_SWAP=y
CONFIG_UID16=y CONFIG_UID16=y
CONFIG_HIGHMEM=y CONFIG_HIGHMEM=y
CONFIG_GENERIC_ISA_DMA=y CONFIG_GENERIC_ISA_DMA=y
...@@ -15,10 +14,11 @@ CONFIG_EXPERIMENTAL=y ...@@ -15,10 +14,11 @@ CONFIG_EXPERIMENTAL=y
# #
# General setup # General setup
# #
CONFIG_NET=y CONFIG_SWAP=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=14
# #
# Loadable module support # Loadable module support
...@@ -26,6 +26,8 @@ CONFIG_SYSCTL=y ...@@ -26,6 +26,8 @@ CONFIG_SYSCTL=y
CONFIG_MODULES=y CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set # CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
CONFIG_KMOD=y CONFIG_KMOD=y
# #
...@@ -45,6 +47,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y ...@@ -45,6 +47,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_SUN_PM=y CONFIG_SUN_PM=y
# CONFIG_SUN4 is not set # CONFIG_SUN4 is not set
CONFIG_PCI=y CONFIG_PCI=y
# CONFIG_PCI_LEGACY_PROC is not set
# CONFIG_PCI_NAMES is not set # CONFIG_PCI_NAMES is not set
CONFIG_SUN_OPENPROMFS=m CONFIG_SUN_OPENPROMFS=m
CONFIG_KCORE_ELF=y CONFIG_KCORE_ELF=y
...@@ -59,15 +62,17 @@ CONFIG_SUNOS_EMUL=y ...@@ -59,15 +62,17 @@ CONFIG_SUNOS_EMUL=y
# CONFIG_PARPORT is not set # CONFIG_PARPORT is not set
# #
# Console drivers # Graphics support
# #
# CONFIG_PROM_CONSOLE is not set # CONFIG_FB is not set
CONFIG_DUMMY_CONSOLE=y
# #
# Frame-buffer support # Console display driver support
# #
# CONFIG_FB is not set # CONFIG_VGA_CONSOLE is not set
# CONFIG_MDA_CONSOLE is not set
# CONFIG_PROM_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
# #
# Memory Technology Devices (MTD) # Memory Technology Devices (MTD)
...@@ -130,13 +135,43 @@ CONFIG_BLK_DEV_INITRD=y ...@@ -130,13 +135,43 @@ CONFIG_BLK_DEV_INITRD=y
# #
# SCSI support # SCSI support
# #
# CONFIG_SCSI is not set CONFIG_SCSI=y
#
# SCSI support type (disk, tape, CDrom)
#
CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40
# CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not set
CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_SR_EXTRA_DEVS=2
CONFIG_CHR_DEV_SG=m
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
#
# SCSI low-level drivers
#
CONFIG_SCSI_SUNESP=y
CONFIG_SCSI_QLOGICPTI=m
# #
# Fibre Channel support # Fibre Channel support
# #
# CONFIG_FC4 is not set # CONFIG_FC4 is not set
#
# Networking support
#
CONFIG_NET=y
# #
# Networking options # Networking options
# #
...@@ -389,6 +424,7 @@ CONFIG_NLS_DEFAULT="iso8859-1" ...@@ -389,6 +424,7 @@ CONFIG_NLS_DEFAULT="iso8859-1"
# USB support # USB support
# #
# CONFIG_USB is not set # CONFIG_USB is not set
# CONFIG_USB_GADGET is not set
# #
# Bluetooth support # Bluetooth support
...@@ -407,6 +443,7 @@ CONFIG_DEBUG_SLAB=y ...@@ -407,6 +443,7 @@ CONFIG_DEBUG_SLAB=y
CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_SPINLOCK=y CONFIG_DEBUG_SPINLOCK=y
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
CONFIG_DEBUG_BUGVERBOSE=y
# #
# Security options # Security options
......
...@@ -22,8 +22,6 @@ ...@@ -22,8 +22,6 @@
int foo(void) int foo(void)
{ {
DEFINE(AOFF_task_thread, offsetof(struct task_struct, thread)); DEFINE(AOFF_task_thread, offsetof(struct task_struct, thread));
DEFINE(AOFF_task_ptrace, offsetof(struct task_struct, ptrace));
DEFINE(AOFF_task_blocked, offsetof(struct task_struct, blocked));
BLANK(); BLANK();
/* XXX This is the stuff for sclow.S, kill it. */ /* XXX This is the stuff for sclow.S, kill it. */
DEFINE(AOFF_task_pid, offsetof(struct task_struct, pid)); DEFINE(AOFF_task_pid, offsetof(struct task_struct, pid));
......
...@@ -359,11 +359,11 @@ maybe_smp4m_msg: ...@@ -359,11 +359,11 @@ maybe_smp4m_msg:
andcc %o1, %o4, %g0 andcc %o1, %o4, %g0
be,a smp4m_ticker be,a smp4m_ticker
cmp %l7, 14 cmp %l7, 14
cmp %l7, 13 sethi %hi(0x40000000), %o2
add %o5, %o3, %o5 add %o5, %o3, %o5
bne,a 1f andcc %o1, %o2, %g0
sethi %hi(0x40000000), %o2 be,a 1f
sethi %hi(0x20000000), %o2 sethi %hi(0x20000000), %o2
1: 1:
st %o2, [%o5 + 0x4] st %o2, [%o5 + 0x4]
WRITE_PAUSE WRITE_PAUSE
...@@ -374,7 +374,8 @@ maybe_smp4m_msg: ...@@ -374,7 +374,8 @@ maybe_smp4m_msg:
WRITE_PAUSE WRITE_PAUSE
wr %l4, PSR_ET, %psr wr %l4, PSR_ET, %psr
WRITE_PAUSE WRITE_PAUSE
cmp %l7, 13 srl %o2, (16+14), %o2
tst %o2
bne 2f bne 2f
nop nop
call C_LABEL(smp_reschedule_irq) call C_LABEL(smp_reschedule_irq)
...@@ -1245,9 +1246,8 @@ C_LABEL(sys_ptrace): ...@@ -1245,9 +1246,8 @@ C_LABEL(sys_ptrace):
call C_LABEL(do_ptrace) call C_LABEL(do_ptrace)
add %sp, STACKFRAME_SZ, %o0 add %sp, STACKFRAME_SZ, %o0
ld [%curptr + TI_TASK], %l5 ld [%curptr + TI_FLAGS], %l5
ld [%l5 + AOFF_task_ptrace], %l5 andcc %l5, _TIF_SYSCALL_TRACE, %g0
andcc %l5, 0x02, %g0
be 1f be 1f
nop nop
...@@ -1296,9 +1296,8 @@ C_LABEL(sys_sigpause): ...@@ -1296,9 +1296,8 @@ C_LABEL(sys_sigpause):
call C_LABEL(do_sigpause) call C_LABEL(do_sigpause)
add %sp, STACKFRAME_SZ, %o1 add %sp, STACKFRAME_SZ, %o1
ld [%curptr + TI_TASK], %l5 ld [%curptr + TI_FLAGS], %l5
ld [%l5 + AOFF_task_ptrace], %l5 andcc %l5, _TIF_SYSCALL_TRACE, %g0
andcc %l5, 0x02, %g0
be 1f be 1f
nop nop
...@@ -1315,9 +1314,8 @@ C_LABEL(sys_sigsuspend): ...@@ -1315,9 +1314,8 @@ C_LABEL(sys_sigsuspend):
call C_LABEL(do_sigsuspend) call C_LABEL(do_sigsuspend)
add %sp, STACKFRAME_SZ, %o0 add %sp, STACKFRAME_SZ, %o0
ld [%curptr + TI_TASK], %l5 ld [%curptr + TI_FLAGS], %l5
ld [%l5 + AOFF_task_ptrace], %l5 andcc %l5, _TIF_SYSCALL_TRACE, %g0
andcc %l5, 0x02, %g0
be 1f be 1f
nop nop
...@@ -1335,9 +1333,8 @@ C_LABEL(sys_rt_sigsuspend): ...@@ -1335,9 +1333,8 @@ C_LABEL(sys_rt_sigsuspend):
call C_LABEL(do_rt_sigsuspend) call C_LABEL(do_rt_sigsuspend)
add %sp, STACKFRAME_SZ, %o2 add %sp, STACKFRAME_SZ, %o2
ld [%curptr + TI_TASK], %l5 ld [%curptr + TI_FLAGS], %l5
ld [%l5 + AOFF_task_ptrace], %l5 andcc %l5, _TIF_SYSCALL_TRACE, %g0
andcc %l5, 0x02, %g0
be 1f be 1f
nop nop
...@@ -1354,9 +1351,8 @@ C_LABEL(sys_sigreturn): ...@@ -1354,9 +1351,8 @@ C_LABEL(sys_sigreturn):
call C_LABEL(do_sigreturn) call C_LABEL(do_sigreturn)
add %sp, STACKFRAME_SZ, %o0 add %sp, STACKFRAME_SZ, %o0
ld [%curptr + TI_TASK], %l5 ld [%curptr + TI_FLAGS], %l5
ld [%l5 + AOFF_task_ptrace], %l5 andcc %l5, _TIF_SYSCALL_TRACE, %g0
andcc %l5, 0x02, %g0
be 1f be 1f
nop nop
...@@ -1375,9 +1371,8 @@ C_LABEL(sys_rt_sigreturn): ...@@ -1375,9 +1371,8 @@ C_LABEL(sys_rt_sigreturn):
call C_LABEL(do_rt_sigreturn) call C_LABEL(do_rt_sigreturn)
add %sp, STACKFRAME_SZ, %o0 add %sp, STACKFRAME_SZ, %o0
ld [%curptr + TI_TASK], %l5 ld [%curptr + TI_FLAGS], %l5
ld [%l5 + AOFF_task_ptrace], %l5 andcc %l5, _TIF_SYSCALL_TRACE, %g0
andcc %l5, 0x02, %g0
be 1f be 1f
nop nop
...@@ -1511,10 +1506,9 @@ syscall_is_too_hard: ...@@ -1511,10 +1506,9 @@ syscall_is_too_hard:
mov %i1, %o1 mov %i1, %o1
mov %i2, %o2 mov %i2, %o2
ld [%curptr + TI_TASK], %l5 ld [%curptr + TI_FLAGS], %l5
ld [%l5 + AOFF_task_ptrace], %l5
mov %i3, %o3 mov %i3, %o3
andcc %l5, 0x02, %g0 andcc %l5, _TIF_SYSCALL_TRACE, %g0
mov %i4, %o4 mov %i4, %o4
bne linux_syscall_trace bne linux_syscall_trace
mov %i0, %l5 mov %i0, %l5
...@@ -1526,13 +1520,12 @@ syscall_is_too_hard: ...@@ -1526,13 +1520,12 @@ syscall_is_too_hard:
.globl C_LABEL(ret_sys_call) .globl C_LABEL(ret_sys_call)
C_LABEL(ret_sys_call): C_LABEL(ret_sys_call):
ld [%curptr + TI_TASK], %l6 ld [%curptr + TI_FLAGS], %l6
ld [%l6 + AOFF_task_ptrace], %l6
cmp %o0, -ENOIOCTLCMD cmp %o0, -ENOIOCTLCMD
ld [%sp + STACKFRAME_SZ + PT_PSR], %g3 ld [%sp + STACKFRAME_SZ + PT_PSR], %g3
set PSR_C, %g2 set PSR_C, %g2
bgeu 1f bgeu 1f
andcc %l6, 0x02, %l6 andcc %l6, _TIF_SYSCALL_TRACE, %g0
/* System call success, clear Carry condition code. */ /* System call success, clear Carry condition code. */
andn %g3, %g2, %g3 andn %g3, %g2, %g3
......
...@@ -403,7 +403,6 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags, ...@@ -403,7 +403,6 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags,
{ {
unsigned long parent_tid_ptr = 0; unsigned long parent_tid_ptr = 0;
unsigned long child_tid_ptr = 0; unsigned long child_tid_ptr = 0;
struct task_struct *p;
clone_flags &= ~CLONE_IDLETASK; clone_flags &= ~CLONE_IDLETASK;
...@@ -411,11 +410,10 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags, ...@@ -411,11 +410,10 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags,
parent_tid_ptr = regs->u_regs[UREG_G2]; parent_tid_ptr = regs->u_regs[UREG_G2];
child_tid_ptr = regs->u_regs[UREG_G3]; child_tid_ptr = regs->u_regs[UREG_G3];
} }
p = do_fork(clone_flags, stack_start, return do_fork(clone_flags, stack_start,
regs, stack_size, regs, stack_size,
(int *) parent_tid_ptr, (int *) parent_tid_ptr,
(int *) child_tid_ptr); (int *) child_tid_ptr);
return IS_ERR(p) ? PTR_ERR(p) : p->pid;
} }
/* Copy a Sparc thread. The fork() return value conventions /* Copy a Sparc thread. The fork() return value conventions
......
...@@ -521,7 +521,7 @@ asmlinkage void do_ptrace(struct pt_regs *regs) ...@@ -521,7 +521,7 @@ asmlinkage void do_ptrace(struct pt_regs *regs)
addr = 1; addr = 1;
case PTRACE_CONT: { /* restart after signal. */ case PTRACE_CONT: { /* restart after signal. */
if ((unsigned long) data > _NSIG) { if (data > _NSIG) {
pt_error_return(regs, EIO); pt_error_return(regs, EIO);
goto out_tsk; goto out_tsk;
} }
...@@ -545,11 +545,10 @@ asmlinkage void do_ptrace(struct pt_regs *regs) ...@@ -545,11 +545,10 @@ asmlinkage void do_ptrace(struct pt_regs *regs)
child->exit_code = data; child->exit_code = data;
#ifdef DEBUG_PTRACE #ifdef DEBUG_PTRACE
printk("CONT: %s [%d]: set exit_code = %x %x %x\n", child->comm, printk("CONT: %s [%d]: set exit_code = %x %lx %lx\n",
child->pid, child->exit_code, child->comm, child->pid, child->exit_code,
child->thread.kregs->pc, child->thread.kregs->pc,
child->thread.kregs->npc); child->thread.kregs->npc);
#endif #endif
wake_up_process(child); wake_up_process(child);
pt_succ_return(regs, 0); pt_succ_return(regs, 0);
......
...@@ -67,27 +67,6 @@ LABEL(sunosgdtsize): ...@@ -67,27 +67,6 @@ LABEL(sunosgdtsize):
mov 256, %i0 mov 256, %i0
CC_AND_RETT CC_AND_RETT
.globl LABEL(sunossblock)
LABEL(sunossblock):
LOAD_CURRENT(l4, l5)
ld [%l4 + TI_TASK], %l4
set -65793, %l5
and %i0, %l5, %l5
ld [%l4 + AOFF_task_blocked], %i0
or %i0, %l5, %l5
st %l5, [%l4 + AOFF_task_blocked]
CC_AND_RETT
.globl LABEL(sunossmask)
LABEL(sunossmask):
LOAD_CURRENT(l4, l5)
ld [%l4 + TI_TASK], %l4
set -65793, %l5
and %i0, %l5, %l5
ld [%l4 + AOFF_task_blocked], %i0
st %l5, [%l4 + AOFF_task_blocked]
CC_AND_RETT
.globl LABEL(getpagesize) .globl LABEL(getpagesize)
LABEL(getpagesize): LABEL(getpagesize):
set PAGE_SIZE, %i0 set PAGE_SIZE, %i0
......
...@@ -133,6 +133,16 @@ void __init smp_boot_cpus(void) ...@@ -133,6 +133,16 @@ void __init smp_boot_cpus(void)
smp4d_boot_cpus(); smp4d_boot_cpus();
} }
void smp_send_reschedule(int cpu)
{
smp_message_pass (cpu, MSG_RESCHEDULE, 0, 0);
}
void smp_send_stop(void)
{
smp_message_pass (MSG_ALL_BUT_SELF, MSG_STOP_CPU, 0, 0);
}
void smp_flush_cache_all(void) void smp_flush_cache_all(void)
{ {
xc0((smpfunc_t) BTFIXUP_CALL(local_flush_cache_all)); xc0((smpfunc_t) BTFIXUP_CALL(local_flush_cache_all));
......
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
#endif #endif
#include <asm/a.out.h> #include <asm/a.out.h>
#include <asm/io-unit.h> #include <asm/io-unit.h>
#include <asm/bug.h>
extern spinlock_t rtc_lock; extern spinlock_t rtc_lock;
...@@ -312,5 +313,9 @@ EXPORT_SYMBOL_DOT(umul); ...@@ -312,5 +313,9 @@ EXPORT_SYMBOL_DOT(umul);
EXPORT_SYMBOL_DOT(div); EXPORT_SYMBOL_DOT(div);
EXPORT_SYMBOL_DOT(udiv); EXPORT_SYMBOL_DOT(udiv);
#ifdef CONFIG_DEBUG_BUGVERBOSE
EXPORT_SYMBOL(do_BUG);
#endif
/* Sun Power Management Idle Handler */ /* Sun Power Management Idle Handler */
EXPORT_SYMBOL(pm_idle); EXPORT_SYMBOL(pm_idle);
...@@ -463,6 +463,14 @@ void handle_hw_divzero(struct pt_regs *regs, unsigned long pc, unsigned long npc ...@@ -463,6 +463,14 @@ void handle_hw_divzero(struct pt_regs *regs, unsigned long pc, unsigned long npc
send_sig_info(SIGFPE, &info, current); send_sig_info(SIGFPE, &info, current);
} }
#ifdef CONFIG_DEBUG_BUGVERBOSE
void do_BUG(const char *file, int line)
{
// bust_spinlocks(1); XXX Not in our original BUG()
printk("kernel BUG at %s:%d!\n", file, line);
}
#endif
/* Since we have our mappings set up, on multiprocessors we can spin them /* Since we have our mappings set up, on multiprocessors we can spin them
* up here so that timer interrupts work during initialization. * up here so that timer interrupts work during initialization.
*/ */
......
...@@ -568,7 +568,6 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags, ...@@ -568,7 +568,6 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags,
struct pt_regs *regs, struct pt_regs *regs,
unsigned long stack_size) unsigned long stack_size)
{ {
struct task_struct *p;
unsigned long parent_tid_ptr = 0; unsigned long parent_tid_ptr = 0;
unsigned long child_tid_ptr = 0; unsigned long child_tid_ptr = 0;
...@@ -583,12 +582,10 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags, ...@@ -583,12 +582,10 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags,
} }
} }
p = do_fork(clone_flags, stack_start, return do_fork(clone_flags, stack_start,
regs, stack_size, regs, stack_size,
(int *) parent_tid_ptr, (int *) parent_tid_ptr,
(int *) child_tid_ptr); (int *) child_tid_ptr);
return IS_ERR(p) ? PTR_ERR(p) : p->pid;
} }
/* Copy a Sparc thread. The fork() return value conventions /* Copy a Sparc thread. The fork() return value conventions
......
...@@ -1215,11 +1215,33 @@ static int __init esp_detect(Scsi_Host_Template *tpnt) ...@@ -1215,11 +1215,33 @@ static int __init esp_detect(Scsi_Host_Template *tpnt)
#endif /* !CONFIG_SUN4 */ #endif /* !CONFIG_SUN4 */
/*
*/
static int esp_release(struct Scsi_Host *host)
{
struct esp *esp = (struct esp *) host->hostdata;
ESP_INTSOFF(esp->dregs);
#if 0
esp_reset_dma(esp);
esp_reset_esp(esp);
#endif
free_irq(esp->ehost->irq, esp);
sbus_free_consistent(esp->sdev, 16,
(void *) esp->esp_command, esp->esp_command_dvma);
sbus_iounmap(esp->eregs, ESP_REG_SIZE);
esp->dma->allocated = 0;
esp_chain_del(esp);
return 0;
}
/* The info function will return whatever useful /* The info function will return whatever useful
* information the developer sees fit. If not provided, then * information the developer sees fit. If not provided, then
* the name field will be used instead. * the name field will be used instead.
*/ */
const char *esp_info(struct Scsi_Host *host) static const char *esp_info(struct Scsi_Host *host)
{ {
struct esp *esp; struct esp *esp;
...@@ -4370,6 +4392,7 @@ static Scsi_Host_Template driver_template = { ...@@ -4370,6 +4392,7 @@ static Scsi_Host_Template driver_template = {
.detect = esp_detect, .detect = esp_detect,
.slave_alloc = esp_slave_alloc, .slave_alloc = esp_slave_alloc,
.slave_destroy = esp_slave_destroy, .slave_destroy = esp_slave_destroy,
.release = esp_release,
.info = esp_info, .info = esp_info,
.command = esp_command, .command = esp_command,
.queuecommand = esp_queue, .queuecommand = esp_queue,
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
* within the first byte. Sparc is BIG-Endian. Unless noted otherwise * within the first byte. Sparc is BIG-Endian. Unless noted otherwise
* all bit-ops return 0 if bit was previously clear and != 0 otherwise. * all bit-ops return 0 if bit was previously clear and != 0 otherwise.
*/ */
static __inline__ int test_and_set_bit(unsigned long nr, volatile void *addr) static __inline__ int test_and_set_bit(unsigned long nr, volatile unsigned long *addr)
{ {
register unsigned long mask asm("g2"); register unsigned long mask asm("g2");
register unsigned long *ADDR asm("g1"); register unsigned long *ADDR asm("g1");
...@@ -39,7 +39,7 @@ static __inline__ int test_and_set_bit(unsigned long nr, volatile void *addr) ...@@ -39,7 +39,7 @@ static __inline__ int test_and_set_bit(unsigned long nr, volatile void *addr)
return mask != 0; return mask != 0;
} }
static __inline__ void set_bit(unsigned long nr, volatile void *addr) static __inline__ void set_bit(unsigned long nr, volatile unsigned long *addr)
{ {
register unsigned long mask asm("g2"); register unsigned long mask asm("g2");
register unsigned long *ADDR asm("g1"); register unsigned long *ADDR asm("g1");
...@@ -56,7 +56,7 @@ static __inline__ void set_bit(unsigned long nr, volatile void *addr) ...@@ -56,7 +56,7 @@ static __inline__ void set_bit(unsigned long nr, volatile void *addr)
: "g3", "g4", "g5", "g7", "cc"); : "g3", "g4", "g5", "g7", "cc");
} }
static __inline__ int test_and_clear_bit(unsigned long nr, volatile void *addr) static __inline__ int test_and_clear_bit(unsigned long nr, volatile unsigned long *addr)
{ {
register unsigned long mask asm("g2"); register unsigned long mask asm("g2");
register unsigned long *ADDR asm("g1"); register unsigned long *ADDR asm("g1");
...@@ -75,7 +75,7 @@ static __inline__ int test_and_clear_bit(unsigned long nr, volatile void *addr) ...@@ -75,7 +75,7 @@ static __inline__ int test_and_clear_bit(unsigned long nr, volatile void *addr)
return mask != 0; return mask != 0;
} }
static __inline__ void clear_bit(unsigned long nr, volatile void *addr) static __inline__ void clear_bit(unsigned long nr, volatile unsigned long *addr)
{ {
register unsigned long mask asm("g2"); register unsigned long mask asm("g2");
register unsigned long *ADDR asm("g1"); register unsigned long *ADDR asm("g1");
...@@ -92,7 +92,7 @@ static __inline__ void clear_bit(unsigned long nr, volatile void *addr) ...@@ -92,7 +92,7 @@ static __inline__ void clear_bit(unsigned long nr, volatile void *addr)
: "g3", "g4", "g5", "g7", "cc"); : "g3", "g4", "g5", "g7", "cc");
} }
static __inline__ int test_and_change_bit(unsigned long nr, volatile void *addr) static __inline__ int test_and_change_bit(unsigned long nr, volatile unsigned long *addr)
{ {
register unsigned long mask asm("g2"); register unsigned long mask asm("g2");
register unsigned long *ADDR asm("g1"); register unsigned long *ADDR asm("g1");
...@@ -111,7 +111,7 @@ static __inline__ int test_and_change_bit(unsigned long nr, volatile void *addr) ...@@ -111,7 +111,7 @@ static __inline__ int test_and_change_bit(unsigned long nr, volatile void *addr)
return mask != 0; return mask != 0;
} }
static __inline__ void change_bit(unsigned long nr, volatile void *addr) static __inline__ void change_bit(unsigned long nr, volatile unsigned long *addr)
{ {
register unsigned long mask asm("g2"); register unsigned long mask asm("g2");
register unsigned long *ADDR asm("g1"); register unsigned long *ADDR asm("g1");
...@@ -131,7 +131,7 @@ static __inline__ void change_bit(unsigned long nr, volatile void *addr) ...@@ -131,7 +131,7 @@ static __inline__ void change_bit(unsigned long nr, volatile void *addr)
/* /*
* non-atomic versions * non-atomic versions
*/ */
static __inline__ void __set_bit(int nr, volatile void *addr) static __inline__ void __set_bit(int nr, volatile unsigned long *addr)
{ {
unsigned long mask = 1UL << (nr & 0x1f); unsigned long mask = 1UL << (nr & 0x1f);
unsigned long *p = ((unsigned long *)addr) + (nr >> 5); unsigned long *p = ((unsigned long *)addr) + (nr >> 5);
...@@ -139,7 +139,7 @@ static __inline__ void __set_bit(int nr, volatile void *addr) ...@@ -139,7 +139,7 @@ static __inline__ void __set_bit(int nr, volatile void *addr)
*p |= mask; *p |= mask;
} }
static __inline__ void __clear_bit(int nr, volatile void *addr) static __inline__ void __clear_bit(int nr, volatile unsigned long *addr)
{ {
unsigned long mask = 1UL << (nr & 0x1f); unsigned long mask = 1UL << (nr & 0x1f);
unsigned long *p = ((unsigned long *)addr) + (nr >> 5); unsigned long *p = ((unsigned long *)addr) + (nr >> 5);
...@@ -147,7 +147,7 @@ static __inline__ void __clear_bit(int nr, volatile void *addr) ...@@ -147,7 +147,7 @@ static __inline__ void __clear_bit(int nr, volatile void *addr)
*p &= ~mask; *p &= ~mask;
} }
static __inline__ void __change_bit(int nr, volatile void *addr) static __inline__ void __change_bit(int nr, volatile unsigned long *addr)
{ {
unsigned long mask = 1UL << (nr & 0x1f); unsigned long mask = 1UL << (nr & 0x1f);
unsigned long *p = ((unsigned long *)addr) + (nr >> 5); unsigned long *p = ((unsigned long *)addr) + (nr >> 5);
...@@ -155,7 +155,7 @@ static __inline__ void __change_bit(int nr, volatile void *addr) ...@@ -155,7 +155,7 @@ static __inline__ void __change_bit(int nr, volatile void *addr)
*p ^= mask; *p ^= mask;
} }
static __inline__ int __test_and_set_bit(int nr, volatile void *addr) static __inline__ int __test_and_set_bit(int nr, volatile unsigned long *addr)
{ {
unsigned long mask = 1UL << (nr & 0x1f); unsigned long mask = 1UL << (nr & 0x1f);
unsigned long *p = ((unsigned long *)addr) + (nr >> 5); unsigned long *p = ((unsigned long *)addr) + (nr >> 5);
...@@ -165,7 +165,7 @@ static __inline__ int __test_and_set_bit(int nr, volatile void *addr) ...@@ -165,7 +165,7 @@ static __inline__ int __test_and_set_bit(int nr, volatile void *addr)
return (old & mask) != 0; return (old & mask) != 0;
} }
static __inline__ int __test_and_clear_bit(int nr, volatile void *addr) static __inline__ int __test_and_clear_bit(int nr, volatile unsigned long *addr)
{ {
unsigned long mask = 1UL << (nr & 0x1f); unsigned long mask = 1UL << (nr & 0x1f);
unsigned long *p = ((unsigned long *)addr) + (nr >> 5); unsigned long *p = ((unsigned long *)addr) + (nr >> 5);
...@@ -175,7 +175,7 @@ static __inline__ int __test_and_clear_bit(int nr, volatile void *addr) ...@@ -175,7 +175,7 @@ static __inline__ int __test_and_clear_bit(int nr, volatile void *addr)
return (old & mask) != 0; return (old & mask) != 0;
} }
static __inline__ int __test_and_change_bit(int nr, volatile void *addr) static __inline__ int __test_and_change_bit(int nr, volatile unsigned long *addr)
{ {
unsigned long mask = 1UL << (nr & 0x1f); unsigned long mask = 1UL << (nr & 0x1f);
unsigned long *p = ((unsigned long *)addr) + (nr >> 5); unsigned long *p = ((unsigned long *)addr) + (nr >> 5);
...@@ -189,9 +189,9 @@ static __inline__ int __test_and_change_bit(int nr, volatile void *addr) ...@@ -189,9 +189,9 @@ static __inline__ int __test_and_change_bit(int nr, volatile void *addr)
#define smp_mb__after_clear_bit() do { } while(0) #define smp_mb__after_clear_bit() do { } while(0)
/* The following routine need not be atomic. */ /* The following routine need not be atomic. */
static __inline__ int test_bit(int nr, __const__ void *addr) static __inline__ int test_bit(int nr, __const__ volatile unsigned long *addr)
{ {
return (1 & (((__const__ unsigned int *) addr)[nr >> 5] >> (nr & 31))) != 0; return (1UL & (((unsigned long *)addr)[nr >> 5] >> (nr & 31))) != 0UL;
} }
/* The easy/cheese version for now. */ /* The easy/cheese version for now. */
...@@ -288,9 +288,10 @@ static __inline__ int ffs(int x) ...@@ -288,9 +288,10 @@ static __inline__ int ffs(int x)
* 'size' bits, starting the search at bit 'offset'. This is largely based * 'size' bits, starting the search at bit 'offset'. This is largely based
* on Linus's ALPHA routines, which are pretty portable BTW. * on Linus's ALPHA routines, which are pretty portable BTW.
*/ */
static __inline__ unsigned long find_next_zero_bit(void *addr, unsigned long size, unsigned long offset) static __inline__ unsigned long find_next_zero_bit(unsigned long *addr,
unsigned long size, unsigned long offset)
{ {
unsigned long *p = ((unsigned long *) addr) + (offset >> 5); unsigned long *p = addr + (offset >> 5);
unsigned long result = offset & ~31UL; unsigned long result = offset & ~31UL;
unsigned long tmp; unsigned long tmp;
...@@ -361,7 +362,7 @@ static __inline__ int find_next_bit(unsigned long *addr, int size, int offset) ...@@ -361,7 +362,7 @@ static __inline__ int find_next_bit(unsigned long *addr, int size, int offset)
/* /*
*/ */
static __inline__ int test_le_bit(int nr, __const__ void * addr) static __inline__ int test_le_bit(int nr, __const__ unsigned long * addr)
{ {
__const__ unsigned char *ADDR = (__const__ unsigned char *) addr; __const__ unsigned char *ADDR = (__const__ unsigned char *) addr;
return (ADDR[nr >> 3] >> (nr & 7)) & 1; return (ADDR[nr >> 3] >> (nr & 7)) & 1;
...@@ -370,7 +371,7 @@ static __inline__ int test_le_bit(int nr, __const__ void * addr) ...@@ -370,7 +371,7 @@ static __inline__ int test_le_bit(int nr, __const__ void * addr)
/* /*
* non-atomic versions * non-atomic versions
*/ */
static __inline__ void __set_le_bit(int nr, void *addr) static __inline__ void __set_le_bit(int nr, unsigned long *addr)
{ {
unsigned char *ADDR = (unsigned char *)addr; unsigned char *ADDR = (unsigned char *)addr;
...@@ -378,7 +379,7 @@ static __inline__ void __set_le_bit(int nr, void *addr) ...@@ -378,7 +379,7 @@ static __inline__ void __set_le_bit(int nr, void *addr)
*ADDR |= 1 << (nr & 0x07); *ADDR |= 1 << (nr & 0x07);
} }
static __inline__ void __clear_le_bit(int nr, void *addr) static __inline__ void __clear_le_bit(int nr, unsigned long *addr)
{ {
unsigned char *ADDR = (unsigned char *)addr; unsigned char *ADDR = (unsigned char *)addr;
...@@ -386,7 +387,7 @@ static __inline__ void __clear_le_bit(int nr, void *addr) ...@@ -386,7 +387,7 @@ static __inline__ void __clear_le_bit(int nr, void *addr)
*ADDR &= ~(1 << (nr & 0x07)); *ADDR &= ~(1 << (nr & 0x07));
} }
static __inline__ int __test_and_set_le_bit(int nr, void *addr) static __inline__ int __test_and_set_le_bit(int nr, unsigned long *addr)
{ {
int mask, retval; int mask, retval;
unsigned char *ADDR = (unsigned char *)addr; unsigned char *ADDR = (unsigned char *)addr;
...@@ -398,7 +399,7 @@ static __inline__ int __test_and_set_le_bit(int nr, void *addr) ...@@ -398,7 +399,7 @@ static __inline__ int __test_and_set_le_bit(int nr, void *addr)
return retval; return retval;
} }
static __inline__ int __test_and_clear_le_bit(int nr, void *addr) static __inline__ int __test_and_clear_le_bit(int nr, unsigned long *addr)
{ {
int mask, retval; int mask, retval;
unsigned char *ADDR = (unsigned char *)addr; unsigned char *ADDR = (unsigned char *)addr;
...@@ -410,9 +411,10 @@ static __inline__ int __test_and_clear_le_bit(int nr, void *addr) ...@@ -410,9 +411,10 @@ static __inline__ int __test_and_clear_le_bit(int nr, void *addr)
return retval; return retval;
} }
static __inline__ unsigned long find_next_zero_le_bit(void *addr, unsigned long size, unsigned long offset) static __inline__ unsigned long find_next_zero_le_bit(unsigned long *addr,
unsigned long size, unsigned long offset)
{ {
unsigned long *p = ((unsigned long *) addr) + (offset >> 5); unsigned long *p = addr + (offset >> 5);
unsigned long result = offset & ~31UL; unsigned long result = offset & ~31UL;
unsigned long tmp; unsigned long tmp;
......
...@@ -2,24 +2,18 @@ ...@@ -2,24 +2,18 @@
#ifndef _SPARC_BUG_H #ifndef _SPARC_BUG_H
#define _SPARC_BUG_H #define _SPARC_BUG_H
/* #ifdef CONFIG_DEBUG_BUGVERBOSE
* XXX I am hitting compiler bugs with __builtin_trap. This has extern void do_BUG(const char *file, int line);
* hit me before and rusty was blaming his netfilter bugs on #define BUG() do { \
* this so lets disable it. - Anton do_BUG(__FILE__, __LINE__); \
*/ __builtin_trap(); \
#if 0
/* We need the mb()'s so we don't trigger a compiler bug - Anton */
#define BUG() do { \
mb(); \
__builtin_trap(); \
mb(); \
} while(0)
#else
#define BUG() do { \
printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); *(int *)0=0; \
} while (0) } while (0)
#else
#define BUG() __builtin_trap()
#endif #endif
#define PAGE_BUG(page) BUG() #define PAGE_BUG(page) do { \
BUG(); \
} while (0)
#endif #endif
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#define IOUPTE_PARITY 0x00000001 /* Parity is checked during DVMA */ #define IOUPTE_PARITY 0x00000001 /* Parity is checked during DVMA */
struct iounit_struct { struct iounit_struct {
unsigned int bmap[(IOUNIT_DMA_SIZE >> (PAGE_SHIFT + 3)) / sizeof(unsigned int)]; unsigned long bmap[(IOUNIT_DMA_SIZE >> (PAGE_SHIFT + 3)) / sizeof(unsigned long)];
spinlock_t lock; spinlock_t lock;
iopte_t *page_table; iopte_t *page_table;
unsigned long rotor[3]; unsigned long rotor[3];
......
...@@ -169,9 +169,6 @@ extern __inline__ int hard_smp_processor_id(void) ...@@ -169,9 +169,6 @@ extern __inline__ int hard_smp_processor_id(void)
#endif #endif
#define smp_processor_id() hard_smp_processor_id() #define smp_processor_id() hard_smp_processor_id()
/* XXX We really need to implement this now. -DaveM */
extern __inline__ void smp_send_reschedule(int cpu) { }
extern __inline__ void smp_send_stop(void) { }
#endif /* !(__ASSEMBLY__) */ #endif /* !(__ASSEMBLY__) */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment