summaryrefslogtreecommitdiffstats
path: root/kernel/arch/m68k/include/asm
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/arch/m68k/include/asm')
-rw-r--r--kernel/arch/m68k/include/asm/Kbuild2
-rw-r--r--kernel/arch/m68k/include/asm/atomic.h18
-rw-r--r--kernel/arch/m68k/include/asm/cmpxchg.h1
-rw-r--r--kernel/arch/m68k/include/asm/io_mm.h8
-rw-r--r--kernel/arch/m68k/include/asm/io_no.h4
-rw-r--r--kernel/arch/m68k/include/asm/irq.h3
-rw-r--r--kernel/arch/m68k/include/asm/irqflags.h3
-rw-r--r--kernel/arch/m68k/include/asm/linkage.h30
-rw-r--r--kernel/arch/m68k/include/asm/mac_via.h2
-rw-r--r--kernel/arch/m68k/include/asm/serial.h2
-rw-r--r--kernel/arch/m68k/include/asm/unistd.h2
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