diff options
Diffstat (limited to 'kernel/arch/m68k/include/asm')
-rw-r--r-- | kernel/arch/m68k/include/asm/Kbuild | 2 | ||||
-rw-r--r-- | kernel/arch/m68k/include/asm/atomic.h | 18 | ||||
-rw-r--r-- | kernel/arch/m68k/include/asm/cmpxchg.h | 1 | ||||
-rw-r--r-- | kernel/arch/m68k/include/asm/io_mm.h | 8 | ||||
-rw-r--r-- | kernel/arch/m68k/include/asm/io_no.h | 4 | ||||
-rw-r--r-- | kernel/arch/m68k/include/asm/irq.h | 3 | ||||
-rw-r--r-- | kernel/arch/m68k/include/asm/irqflags.h | 3 | ||||
-rw-r--r-- | kernel/arch/m68k/include/asm/linkage.h | 30 | ||||
-rw-r--r-- | kernel/arch/m68k/include/asm/mac_via.h | 2 | ||||
-rw-r--r-- | kernel/arch/m68k/include/asm/serial.h | 2 | ||||
-rw-r--r-- | kernel/arch/m68k/include/asm/unistd.h | 2 |
11 files changed, 50 insertions, 25 deletions
diff --git a/kernel/arch/m68k/include/asm/Kbuild b/kernel/arch/m68k/include/asm/Kbuild index 1517ed1c6..eb85bd9c6 100644 --- a/kernel/arch/m68k/include/asm/Kbuild +++ b/kernel/arch/m68k/include/asm/Kbuild @@ -18,12 +18,12 @@ generic-y += kvm_para.h generic-y += local.h generic-y += local64.h generic-y += mcs_spinlock.h +generic-y += mm-arch-hooks.h generic-y += mman.h generic-y += mutex.h generic-y += percpu.h generic-y += preempt.h generic-y += resource.h -generic-y += scatterlist.h generic-y += sections.h generic-y += shmparam.h generic-y += siginfo.h diff --git a/kernel/arch/m68k/include/asm/atomic.h b/kernel/arch/m68k/include/asm/atomic.h index e85f047fb..485817826 100644 --- a/kernel/arch/m68k/include/asm/atomic.h +++ b/kernel/arch/m68k/include/asm/atomic.h @@ -17,8 +17,8 @@ #define ATOMIC_INIT(i) { (i) } -#define atomic_read(v) ACCESS_ONCE((v)->counter) -#define atomic_set(v, i) (((v)->counter) = i) +#define atomic_read(v) READ_ONCE((v)->counter) +#define atomic_set(v, i) WRITE_ONCE(((v)->counter), (i)) /* * The ColdFire parts cannot do some immediate to memory operations, @@ -77,6 +77,10 @@ static inline int atomic_##op##_return(int i, atomic_t * v) \ ATOMIC_OPS(add, +=, add) ATOMIC_OPS(sub, -=, sub) +ATOMIC_OP(and, &=, and) +ATOMIC_OP(or, |=, or) +ATOMIC_OP(xor, ^=, eor) + #undef ATOMIC_OPS #undef ATOMIC_OP_RETURN #undef ATOMIC_OP @@ -170,16 +174,6 @@ static inline int atomic_add_negative(int i, atomic_t *v) return c != 0; } -static inline void atomic_clear_mask(unsigned long mask, unsigned long *v) -{ - __asm__ __volatile__("andl %1,%0" : "+m" (*v) : ASM_DI (~(mask))); -} - -static inline void atomic_set_mask(unsigned long mask, unsigned long *v) -{ - __asm__ __volatile__("orl %1,%0" : "+m" (*v) : ASM_DI (mask)); -} - static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) { int c, old; diff --git a/kernel/arch/m68k/include/asm/cmpxchg.h b/kernel/arch/m68k/include/asm/cmpxchg.h index bc755bc62..83b1df80f 100644 --- a/kernel/arch/m68k/include/asm/cmpxchg.h +++ b/kernel/arch/m68k/include/asm/cmpxchg.h @@ -90,7 +90,6 @@ extern unsigned long __invalid_cmpxchg_size(volatile void *, * indicated by comparing RETURN with OLD. */ #ifdef CONFIG_RMW_INSNS -#define __HAVE_ARCH_CMPXCHG 1 static inline unsigned long __cmpxchg(volatile void *p, unsigned long old, unsigned long new, int size) diff --git a/kernel/arch/m68k/include/asm/io_mm.h b/kernel/arch/m68k/include/asm/io_mm.h index 8955b40a5..c98ac8158 100644 --- a/kernel/arch/m68k/include/asm/io_mm.h +++ b/kernel/arch/m68k/include/asm/io_mm.h @@ -20,6 +20,8 @@ #ifdef __KERNEL__ +#define ARCH_HAS_IOREMAP_WT + #include <linux/compiler.h> #include <asm/raw_io.h> #include <asm/virtconvert.h> @@ -411,7 +413,8 @@ static inline void isa_delay(void) #define writew(val, addr) out_le16((addr), (val)) #endif /* CONFIG_ATARI_ROM_ISA */ -#if !defined(CONFIG_ISA) && !defined(CONFIG_ATARI_ROM_ISA) +#if !defined(CONFIG_ISA) && !defined(CONFIG_ATARI_ROM_ISA) && \ + !(defined(CONFIG_PCI) && defined(CONFIG_COLDFIRE)) /* * We need to define dummy functions for GENERIC_IOMAP support. */ @@ -465,7 +468,8 @@ static inline void __iomem *ioremap_nocache(unsigned long physaddr, unsigned lon { return __ioremap(physaddr, size, IOMAP_NOCACHE_SER); } -static inline void __iomem *ioremap_writethrough(unsigned long physaddr, +#define ioremap_uc ioremap_nocache +static inline void __iomem *ioremap_wt(unsigned long physaddr, unsigned long size) { return __ioremap(physaddr, size, IOMAP_WRITETHROUGH); diff --git a/kernel/arch/m68k/include/asm/io_no.h b/kernel/arch/m68k/include/asm/io_no.h index a93c8cde4..ad7bd40e6 100644 --- a/kernel/arch/m68k/include/asm/io_no.h +++ b/kernel/arch/m68k/include/asm/io_no.h @@ -3,6 +3,8 @@ #ifdef __KERNEL__ +#define ARCH_HAS_IOREMAP_WT + #include <asm/virtconvert.h> #include <asm-generic/iomap.h> @@ -153,7 +155,7 @@ static inline void *ioremap_nocache(unsigned long physaddr, unsigned long size) { return __ioremap(physaddr, size, IOMAP_NOCACHE_SER); } -static inline void *ioremap_writethrough(unsigned long physaddr, unsigned long size) +static inline void *ioremap_wt(unsigned long physaddr, unsigned long size) { return __ioremap(physaddr, size, IOMAP_WRITETHROUGH); } diff --git a/kernel/arch/m68k/include/asm/irq.h b/kernel/arch/m68k/include/asm/irq.h index 81ca118d5..a644f4a53 100644 --- a/kernel/arch/m68k/include/asm/irq.h +++ b/kernel/arch/m68k/include/asm/irq.h @@ -64,8 +64,7 @@ extern void m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)); extern void m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt); extern void m68k_setup_irq_controller(struct irq_chip *, - void (*handle)(unsigned int irq, - struct irq_desc *desc), + void (*handle)(struct irq_desc *desc), unsigned int irq, unsigned int cnt); extern unsigned int irq_canonicalize(unsigned int irq); diff --git a/kernel/arch/m68k/include/asm/irqflags.h b/kernel/arch/m68k/include/asm/irqflags.h index a823cd73d..b59418183 100644 --- a/kernel/arch/m68k/include/asm/irqflags.h +++ b/kernel/arch/m68k/include/asm/irqflags.h @@ -2,9 +2,6 @@ #define _M68K_IRQFLAGS_H #include <linux/types.h> -#ifdef CONFIG_MMU -#include <linux/preempt_mask.h> -#endif #include <linux/preempt.h> #include <asm/thread_info.h> #include <asm/entry.h> diff --git a/kernel/arch/m68k/include/asm/linkage.h b/kernel/arch/m68k/include/asm/linkage.h index 5a822bb79..066e74f66 100644 --- a/kernel/arch/m68k/include/asm/linkage.h +++ b/kernel/arch/m68k/include/asm/linkage.h @@ -4,4 +4,34 @@ #define __ALIGN .align 4 #define __ALIGN_STR ".align 4" +/* + * Make sure the compiler doesn't do anything stupid with the + * arguments on the stack - they are owned by the *caller*, not + * the callee. This just fools gcc into not spilling into them, + * and keeps it from doing tailcall recursion and/or using the + * stack slots for temporaries, since they are live and "used" + * all the way to the end of the function. + */ +#define asmlinkage_protect(n, ret, args...) \ + __asmlinkage_protect##n(ret, ##args) +#define __asmlinkage_protect_n(ret, args...) \ + __asm__ __volatile__ ("" : "=r" (ret) : "0" (ret), ##args) +#define __asmlinkage_protect0(ret) \ + __asmlinkage_protect_n(ret) +#define __asmlinkage_protect1(ret, arg1) \ + __asmlinkage_protect_n(ret, "m" (arg1)) +#define __asmlinkage_protect2(ret, arg1, arg2) \ + __asmlinkage_protect_n(ret, "m" (arg1), "m" (arg2)) +#define __asmlinkage_protect3(ret, arg1, arg2, arg3) \ + __asmlinkage_protect_n(ret, "m" (arg1), "m" (arg2), "m" (arg3)) +#define __asmlinkage_protect4(ret, arg1, arg2, arg3, arg4) \ + __asmlinkage_protect_n(ret, "m" (arg1), "m" (arg2), "m" (arg3), \ + "m" (arg4)) +#define __asmlinkage_protect5(ret, arg1, arg2, arg3, arg4, arg5) \ + __asmlinkage_protect_n(ret, "m" (arg1), "m" (arg2), "m" (arg3), \ + "m" (arg4), "m" (arg5)) +#define __asmlinkage_protect6(ret, arg1, arg2, arg3, arg4, arg5, arg6) \ + __asmlinkage_protect_n(ret, "m" (arg1), "m" (arg2), "m" (arg3), \ + "m" (arg4), "m" (arg5), "m" (arg6)) + #endif diff --git a/kernel/arch/m68k/include/asm/mac_via.h b/kernel/arch/m68k/include/asm/mac_via.h index fe3fc9ae1..53c632c85 100644 --- a/kernel/arch/m68k/include/asm/mac_via.h +++ b/kernel/arch/m68k/include/asm/mac_via.h @@ -261,7 +261,7 @@ extern void via_irq_enable(int); extern void via_irq_disable(int); extern void via_nubus_irq_startup(int irq); extern void via_nubus_irq_shutdown(int irq); -extern void via1_irq(unsigned int irq, struct irq_desc *desc); +extern void via1_irq(struct irq_desc *desc); extern void via1_set_head(int); extern int via2_scsi_drq_pending(void); diff --git a/kernel/arch/m68k/include/asm/serial.h b/kernel/arch/m68k/include/asm/serial.h index 7267536ad..06d0cb19b 100644 --- a/kernel/arch/m68k/include/asm/serial.h +++ b/kernel/arch/m68k/include/asm/serial.h @@ -17,7 +17,7 @@ #define BASE_BAUD ( 1843200 / 16 ) /* Standard COM flags (except for COM4, because of the 8514 problem) */ -#ifdef CONFIG_SERIAL_DETECT_IRQ +#ifdef CONFIG_SERIAL_8250_DETECT_IRQ #define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ) #define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ) #else diff --git a/kernel/arch/m68k/include/asm/unistd.h b/kernel/arch/m68k/include/asm/unistd.h index 244e0dbe4..f9d96bf86 100644 --- a/kernel/arch/m68k/include/asm/unistd.h +++ b/kernel/arch/m68k/include/asm/unistd.h @@ -4,7 +4,7 @@ #include <uapi/asm/unistd.h> -#define NR_syscalls 356 +#define NR_syscalls 376 #define __ARCH_WANT_OLD_READDIR #define __ARCH_WANT_OLD_STAT |