diff options
| -rw-r--r-- | arch/sparc/Kconfig | 7 | ||||
| -rw-r--r-- | arch/sparc/defconfig | 53 | ||||
| -rw-r--r-- | arch/sparc/kernel/asm-offsets.c | 2 | ||||
| -rw-r--r-- | arch/sparc/kernel/entry.S | 51 | ||||
| -rw-r--r-- | arch/sparc/kernel/process.c | 10 | ||||
| -rw-r--r-- | arch/sparc/kernel/ptrace.c | 7 | ||||
| -rw-r--r-- | arch/sparc/kernel/sclow.S | 21 | ||||
| -rw-r--r-- | arch/sparc/kernel/smp.c | 10 | ||||
| -rw-r--r-- | arch/sparc/kernel/sparc_ksyms.c | 5 | ||||
| -rw-r--r-- | arch/sparc/kernel/traps.c | 8 | ||||
| -rw-r--r-- | arch/sparc64/kernel/process.c | 11 | ||||
| -rw-r--r-- | drivers/scsi/esp.c | 25 | ||||
| -rw-r--r-- | include/asm-sparc/bitops.h | 48 | ||||
| -rw-r--r-- | include/asm-sparc/bug.h | 26 | ||||
| -rw-r--r-- | include/asm-sparc/io-unit.h | 2 | ||||
| -rw-r--r-- | include/asm-sparc/smp.h | 3 |
16 files changed, 168 insertions, 121 deletions
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 97c736a6c668..c020ac0d729e 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -1000,6 +1000,13 @@ config DEBUG_SPINLOCK_SLEEP If you say Y here, various routines which may sleep will become very 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 source "security/Kconfig" diff --git a/arch/sparc/defconfig b/arch/sparc/defconfig index 1d8dc08cff90..38ed5c0e08fb 100644 --- a/arch/sparc/defconfig +++ b/arch/sparc/defconfig @@ -2,7 +2,6 @@ # Automatically generated make config: don't edit # CONFIG_MMU=y -CONFIG_SWAP=y CONFIG_UID16=y CONFIG_HIGHMEM=y CONFIG_GENERIC_ISA_DMA=y @@ -15,10 +14,11 @@ CONFIG_EXPERIMENTAL=y # # General setup # -CONFIG_NET=y +CONFIG_SWAP=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +CONFIG_LOG_BUF_SHIFT=14 # # Loadable module support @@ -26,6 +26,8 @@ CONFIG_SYSCTL=y CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y # CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_OBSOLETE_MODPARM=y +# CONFIG_MODVERSIONS is not set CONFIG_KMOD=y # @@ -45,6 +47,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_SUN_PM=y # CONFIG_SUN4 is not set CONFIG_PCI=y +# CONFIG_PCI_LEGACY_PROC is not set # CONFIG_PCI_NAMES is not set CONFIG_SUN_OPENPROMFS=m CONFIG_KCORE_ELF=y @@ -59,15 +62,17 @@ CONFIG_SUNOS_EMUL=y # CONFIG_PARPORT is not set # -# Console drivers +# Graphics support # -# CONFIG_PROM_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB is not set # -# 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) @@ -130,7 +135,32 @@ CONFIG_BLK_DEV_INITRD=y # # 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 @@ -138,6 +168,11 @@ CONFIG_BLK_DEV_INITRD=y # CONFIG_FC4 is not set # +# Networking support +# +CONFIG_NET=y + +# # Networking options # CONFIG_PACKET=y @@ -389,6 +424,7 @@ CONFIG_NLS_DEFAULT="iso8859-1" # USB support # # CONFIG_USB is not set +# CONFIG_USB_GADGET is not set # # Bluetooth support @@ -407,6 +443,7 @@ CONFIG_DEBUG_SLAB=y CONFIG_MAGIC_SYSRQ=y CONFIG_DEBUG_SPINLOCK=y # CONFIG_DEBUG_SPINLOCK_SLEEP is not set +CONFIG_DEBUG_BUGVERBOSE=y # # Security options diff --git a/arch/sparc/kernel/asm-offsets.c b/arch/sparc/kernel/asm-offsets.c index fa2e8a95ca45..74be5fd861a1 100644 --- a/arch/sparc/kernel/asm-offsets.c +++ b/arch/sparc/kernel/asm-offsets.c @@ -22,8 +22,6 @@ int foo(void) { 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(); /* XXX This is the stuff for sclow.S, kill it. */ DEFINE(AOFF_task_pid, offsetof(struct task_struct, pid)); diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index 42eaa7f01de7..952195a76fb5 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S @@ -359,11 +359,11 @@ maybe_smp4m_msg: andcc %o1, %o4, %g0 be,a smp4m_ticker cmp %l7, 14 - cmp %l7, 13 + sethi %hi(0x40000000), %o2 add %o5, %o3, %o5 - bne,a 1f - sethi %hi(0x40000000), %o2 - sethi %hi(0x20000000), %o2 + andcc %o1, %o2, %g0 + be,a 1f + sethi %hi(0x20000000), %o2 1: st %o2, [%o5 + 0x4] WRITE_PAUSE @@ -374,7 +374,8 @@ maybe_smp4m_msg: WRITE_PAUSE wr %l4, PSR_ET, %psr WRITE_PAUSE - cmp %l7, 13 + srl %o2, (16+14), %o2 + tst %o2 bne 2f nop call C_LABEL(smp_reschedule_irq) @@ -1245,9 +1246,8 @@ C_LABEL(sys_ptrace): call C_LABEL(do_ptrace) add %sp, STACKFRAME_SZ, %o0 - ld [%curptr + TI_TASK], %l5 - ld [%l5 + AOFF_task_ptrace], %l5 - andcc %l5, 0x02, %g0 + ld [%curptr + TI_FLAGS], %l5 + andcc %l5, _TIF_SYSCALL_TRACE, %g0 be 1f nop @@ -1296,9 +1296,8 @@ C_LABEL(sys_sigpause): call C_LABEL(do_sigpause) add %sp, STACKFRAME_SZ, %o1 - ld [%curptr + TI_TASK], %l5 - ld [%l5 + AOFF_task_ptrace], %l5 - andcc %l5, 0x02, %g0 + ld [%curptr + TI_FLAGS], %l5 + andcc %l5, _TIF_SYSCALL_TRACE, %g0 be 1f nop @@ -1315,9 +1314,8 @@ C_LABEL(sys_sigsuspend): call C_LABEL(do_sigsuspend) add %sp, STACKFRAME_SZ, %o0 - ld [%curptr + TI_TASK], %l5 - ld [%l5 + AOFF_task_ptrace], %l5 - andcc %l5, 0x02, %g0 + ld [%curptr + TI_FLAGS], %l5 + andcc %l5, _TIF_SYSCALL_TRACE, %g0 be 1f nop @@ -1335,9 +1333,8 @@ C_LABEL(sys_rt_sigsuspend): call C_LABEL(do_rt_sigsuspend) add %sp, STACKFRAME_SZ, %o2 - ld [%curptr + TI_TASK], %l5 - ld [%l5 + AOFF_task_ptrace], %l5 - andcc %l5, 0x02, %g0 + ld [%curptr + TI_FLAGS], %l5 + andcc %l5, _TIF_SYSCALL_TRACE, %g0 be 1f nop @@ -1354,9 +1351,8 @@ C_LABEL(sys_sigreturn): call C_LABEL(do_sigreturn) add %sp, STACKFRAME_SZ, %o0 - ld [%curptr + TI_TASK], %l5 - ld [%l5 + AOFF_task_ptrace], %l5 - andcc %l5, 0x02, %g0 + ld [%curptr + TI_FLAGS], %l5 + andcc %l5, _TIF_SYSCALL_TRACE, %g0 be 1f nop @@ -1375,9 +1371,8 @@ C_LABEL(sys_rt_sigreturn): call C_LABEL(do_rt_sigreturn) add %sp, STACKFRAME_SZ, %o0 - ld [%curptr + TI_TASK], %l5 - ld [%l5 + AOFF_task_ptrace], %l5 - andcc %l5, 0x02, %g0 + ld [%curptr + TI_FLAGS], %l5 + andcc %l5, _TIF_SYSCALL_TRACE, %g0 be 1f nop @@ -1511,10 +1506,9 @@ syscall_is_too_hard: mov %i1, %o1 mov %i2, %o2 - ld [%curptr + TI_TASK], %l5 - ld [%l5 + AOFF_task_ptrace], %l5 + ld [%curptr + TI_FLAGS], %l5 mov %i3, %o3 - andcc %l5, 0x02, %g0 + andcc %l5, _TIF_SYSCALL_TRACE, %g0 mov %i4, %o4 bne linux_syscall_trace mov %i0, %l5 @@ -1526,13 +1520,12 @@ syscall_is_too_hard: .globl C_LABEL(ret_sys_call) C_LABEL(ret_sys_call): - ld [%curptr + TI_TASK], %l6 - ld [%l6 + AOFF_task_ptrace], %l6 + ld [%curptr + TI_FLAGS], %l6 cmp %o0, -ENOIOCTLCMD ld [%sp + STACKFRAME_SZ + PT_PSR], %g3 set PSR_C, %g2 bgeu 1f - andcc %l6, 0x02, %l6 + andcc %l6, _TIF_SYSCALL_TRACE, %g0 /* System call success, clear Carry condition code. */ andn %g3, %g2, %g3 diff --git a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c index 37efbfbdd54a..3608f9408eb8 100644 --- a/arch/sparc/kernel/process.c +++ b/arch/sparc/kernel/process.c @@ -403,7 +403,6 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags, { unsigned long parent_tid_ptr = 0; unsigned long child_tid_ptr = 0; - struct task_struct *p; clone_flags &= ~CLONE_IDLETASK; @@ -411,11 +410,10 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags, parent_tid_ptr = regs->u_regs[UREG_G2]; child_tid_ptr = regs->u_regs[UREG_G3]; } - p = do_fork(clone_flags, stack_start, - regs, stack_size, - (int *) parent_tid_ptr, - (int *) child_tid_ptr); - return IS_ERR(p) ? PTR_ERR(p) : p->pid; + return do_fork(clone_flags, stack_start, + regs, stack_size, + (int *) parent_tid_ptr, + (int *) child_tid_ptr); } /* Copy a Sparc thread. The fork() return value conventions diff --git a/arch/sparc/kernel/ptrace.c b/arch/sparc/kernel/ptrace.c index fcc3fb80109e..1a14bf4c9cd7 100644 --- a/arch/sparc/kernel/ptrace.c +++ b/arch/sparc/kernel/ptrace.c @@ -521,7 +521,7 @@ asmlinkage void do_ptrace(struct pt_regs *regs) addr = 1; case PTRACE_CONT: { /* restart after signal. */ - if ((unsigned long) data > _NSIG) { + if (data > _NSIG) { pt_error_return(regs, EIO); goto out_tsk; } @@ -545,11 +545,10 @@ asmlinkage void do_ptrace(struct pt_regs *regs) child->exit_code = data; #ifdef DEBUG_PTRACE - printk("CONT: %s [%d]: set exit_code = %x %x %x\n", child->comm, - child->pid, child->exit_code, + printk("CONT: %s [%d]: set exit_code = %x %lx %lx\n", + child->comm, child->pid, child->exit_code, child->thread.kregs->pc, child->thread.kregs->npc); - #endif wake_up_process(child); pt_succ_return(regs, 0); diff --git a/arch/sparc/kernel/sclow.S b/arch/sparc/kernel/sclow.S index 4e60e5dcf628..cb9198302b8d 100644 --- a/arch/sparc/kernel/sclow.S +++ b/arch/sparc/kernel/sclow.S @@ -67,27 +67,6 @@ LABEL(sunosgdtsize): mov 256, %i0 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) LABEL(getpagesize): set PAGE_SIZE, %i0 diff --git a/arch/sparc/kernel/smp.c b/arch/sparc/kernel/smp.c index 330c8e9a8e3b..1e4d1597ef6c 100644 --- a/arch/sparc/kernel/smp.c +++ b/arch/sparc/kernel/smp.c @@ -133,6 +133,16 @@ void __init smp_boot_cpus(void) 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) { xc0((smpfunc_t) BTFIXUP_CALL(local_flush_cache_all)); diff --git a/arch/sparc/kernel/sparc_ksyms.c b/arch/sparc/kernel/sparc_ksyms.c index ad08eb2eddf9..58a369d72529 100644 --- a/arch/sparc/kernel/sparc_ksyms.c +++ b/arch/sparc/kernel/sparc_ksyms.c @@ -53,6 +53,7 @@ #endif #include <asm/a.out.h> #include <asm/io-unit.h> +#include <asm/bug.h> extern spinlock_t rtc_lock; @@ -312,5 +313,9 @@ EXPORT_SYMBOL_DOT(umul); EXPORT_SYMBOL_DOT(div); EXPORT_SYMBOL_DOT(udiv); +#ifdef CONFIG_DEBUG_BUGVERBOSE +EXPORT_SYMBOL(do_BUG); +#endif + /* Sun Power Management Idle Handler */ EXPORT_SYMBOL(pm_idle); diff --git a/arch/sparc/kernel/traps.c b/arch/sparc/kernel/traps.c index 17add64c9af2..f2fb91343b80 100644 --- a/arch/sparc/kernel/traps.c +++ b/arch/sparc/kernel/traps.c @@ -463,6 +463,14 @@ void handle_hw_divzero(struct pt_regs *regs, unsigned long pc, unsigned long npc 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 * up here so that timer interrupts work during initialization. */ diff --git a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c index 8c0f80c7835a..6326ab3761ea 100644 --- a/arch/sparc64/kernel/process.c +++ b/arch/sparc64/kernel/process.c @@ -568,7 +568,6 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags, struct pt_regs *regs, unsigned long stack_size) { - struct task_struct *p; unsigned long parent_tid_ptr = 0; unsigned long child_tid_ptr = 0; @@ -583,12 +582,10 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags, } } - p = do_fork(clone_flags, stack_start, - regs, stack_size, - (int *) parent_tid_ptr, - (int *) child_tid_ptr); - - return IS_ERR(p) ? PTR_ERR(p) : p->pid; + return do_fork(clone_flags, stack_start, + regs, stack_size, + (int *) parent_tid_ptr, + (int *) child_tid_ptr); } /* Copy a Sparc thread. The fork() return value conventions diff --git a/drivers/scsi/esp.c b/drivers/scsi/esp.c index f0bb5d3a065f..0995760533b8 100644 --- a/drivers/scsi/esp.c +++ b/drivers/scsi/esp.c @@ -1215,11 +1215,33 @@ static int __init esp_detect(Scsi_Host_Template *tpnt) #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 * information the developer sees fit. If not provided, then * 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; @@ -4370,6 +4392,7 @@ static Scsi_Host_Template driver_template = { .detect = esp_detect, .slave_alloc = esp_slave_alloc, .slave_destroy = esp_slave_destroy, + .release = esp_release, .info = esp_info, .command = esp_command, .queuecommand = esp_queue, diff --git a/include/asm-sparc/bitops.h b/include/asm-sparc/bitops.h index 5b3226834489..4340bddccabb 100644 --- a/include/asm-sparc/bitops.h +++ b/include/asm-sparc/bitops.h @@ -20,7 +20,7 @@ * within the first byte. Sparc is BIG-Endian. Unless noted 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 *ADDR asm("g1"); @@ -39,7 +39,7 @@ static __inline__ int test_and_set_bit(unsigned long nr, volatile void *addr) 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 *ADDR asm("g1"); @@ -56,7 +56,7 @@ static __inline__ void set_bit(unsigned long nr, volatile void *addr) : "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 *ADDR asm("g1"); @@ -75,7 +75,7 @@ static __inline__ int test_and_clear_bit(unsigned long nr, volatile void *addr) 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 *ADDR asm("g1"); @@ -92,7 +92,7 @@ static __inline__ void clear_bit(unsigned long nr, volatile void *addr) : "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 *ADDR asm("g1"); @@ -111,7 +111,7 @@ static __inline__ int test_and_change_bit(unsigned long nr, volatile void *addr) 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 *ADDR asm("g1"); @@ -131,7 +131,7 @@ static __inline__ void change_bit(unsigned long nr, volatile void *addr) /* * 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 *p = ((unsigned long *)addr) + (nr >> 5); @@ -139,7 +139,7 @@ static __inline__ void __set_bit(int nr, volatile void *addr) *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 *p = ((unsigned long *)addr) + (nr >> 5); @@ -147,7 +147,7 @@ static __inline__ void __clear_bit(int nr, volatile void *addr) *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 *p = ((unsigned long *)addr) + (nr >> 5); @@ -155,7 +155,7 @@ static __inline__ void __change_bit(int nr, volatile void *addr) *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 *p = ((unsigned long *)addr) + (nr >> 5); @@ -165,7 +165,7 @@ static __inline__ int __test_and_set_bit(int nr, volatile void *addr) 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 *p = ((unsigned long *)addr) + (nr >> 5); @@ -175,7 +175,7 @@ static __inline__ int __test_and_clear_bit(int nr, volatile void *addr) 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 *p = ((unsigned long *)addr) + (nr >> 5); @@ -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) /* 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. */ @@ -288,9 +288,10 @@ static __inline__ int ffs(int x) * 'size' bits, starting the search at bit 'offset'. This is largely based * 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 tmp; @@ -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; return (ADDR[nr >> 3] >> (nr & 7)) & 1; @@ -370,7 +371,7 @@ static __inline__ int test_le_bit(int nr, __const__ void * addr) /* * 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; @@ -378,7 +379,7 @@ static __inline__ void __set_le_bit(int nr, void *addr) *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; @@ -386,7 +387,7 @@ static __inline__ void __clear_le_bit(int nr, void *addr) *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; unsigned char *ADDR = (unsigned char *)addr; @@ -398,7 +399,7 @@ static __inline__ int __test_and_set_le_bit(int nr, void *addr) 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; unsigned char *ADDR = (unsigned char *)addr; @@ -410,9 +411,10 @@ static __inline__ int __test_and_clear_le_bit(int nr, void *addr) 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 tmp; diff --git a/include/asm-sparc/bug.h b/include/asm-sparc/bug.h index 2100cc50f97c..41dc0abaa624 100644 --- a/include/asm-sparc/bug.h +++ b/include/asm-sparc/bug.h @@ -2,24 +2,18 @@ #ifndef _SPARC_BUG_H #define _SPARC_BUG_H -/* - * XXX I am hitting compiler bugs with __builtin_trap. This has - * hit me before and rusty was blaming his netfilter bugs on - * this so lets disable it. - Anton - */ -#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; \ +#ifdef CONFIG_DEBUG_BUGVERBOSE +extern void do_BUG(const char *file, int line); +#define BUG() do { \ + do_BUG(__FILE__, __LINE__); \ + __builtin_trap(); \ } while (0) +#else +#define BUG() __builtin_trap() #endif -#define PAGE_BUG(page) BUG() +#define PAGE_BUG(page) do { \ + BUG(); \ +} while (0) #endif diff --git a/include/asm-sparc/io-unit.h b/include/asm-sparc/io-unit.h index bd5fc063444b..96823b47fd45 100644 --- a/include/asm-sparc/io-unit.h +++ b/include/asm-sparc/io-unit.h @@ -41,7 +41,7 @@ #define IOUPTE_PARITY 0x00000001 /* Parity is checked during DVMA */ 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; iopte_t *page_table; unsigned long rotor[3]; diff --git a/include/asm-sparc/smp.h b/include/asm-sparc/smp.h index f32a11f8a113..b9959928eabf 100644 --- a/include/asm-sparc/smp.h +++ b/include/asm-sparc/smp.h @@ -169,9 +169,6 @@ extern __inline__ int hard_smp_processor_id(void) #endif #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__) */ |
