diff options
Diffstat (limited to 'arch/m68k')
| -rw-r--r-- | arch/m68k/Kconfig | 2 | ||||
| -rw-r--r-- | arch/m68k/include/asm/Kbuild | 2 | ||||
| -rw-r--r-- | arch/m68k/include/asm/m528xsim.h | 2 | ||||
| -rw-r--r-- | arch/m68k/include/asm/uaccess_mm.h | 11 | ||||
| -rw-r--r-- | arch/m68k/kernel/ptrace.c | 2 | ||||
| -rw-r--r-- | arch/m68k/kernel/time.c | 4 | ||||
| -rw-r--r-- | arch/m68k/lib/uaccess.c | 74 | ||||
| -rw-r--r-- | arch/m68k/platform/68328/timers.c | 6 | ||||
| -rw-r--r-- | arch/m68k/platform/68360/config.c | 7 | 
9 files changed, 24 insertions, 86 deletions
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index cac5b6be572..14712012826 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig @@ -7,6 +7,8 @@ config M68K  	select GENERIC_IRQ_SHOW  	select ARCH_HAVE_NMI_SAFE_CMPXCHG if RMW_INSNS  	select GENERIC_CPU_DEVICES +	select GENERIC_STRNCPY_FROM_USER if MMU +	select GENERIC_STRNLEN_USER if MMU  	select FPU if MMU  	select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index 1a922fad76f..eafa2539a8e 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -1,2 +1,4 @@  include include/asm-generic/Kbuild.asm  header-y += cachectl.h + +generic-y += word-at-a-time.h diff --git a/arch/m68k/include/asm/m528xsim.h b/arch/m68k/include/asm/m528xsim.h index d63b99ff7ff..497c31c803f 100644 --- a/arch/m68k/include/asm/m528xsim.h +++ b/arch/m68k/include/asm/m528xsim.h @@ -86,7 +86,7 @@  /*   *	QSPI module.   */ -#define	MCFQSPI_IOBASE		(MCF_IPSBAR + 0x340) +#define	MCFQSPI_BASE		(MCF_IPSBAR + 0x340)  #define	MCFQSPI_SIZE		0x40  #define	MCFQSPI_CS0		147 diff --git a/arch/m68k/include/asm/uaccess_mm.h b/arch/m68k/include/asm/uaccess_mm.h index 9c80cd515b2..472c891a4ae 100644 --- a/arch/m68k/include/asm/uaccess_mm.h +++ b/arch/m68k/include/asm/uaccess_mm.h @@ -379,12 +379,15 @@ __constant_copy_to_user(void __user *to, const void *from, unsigned long n)  #define copy_from_user(to, from, n)	__copy_from_user(to, from, n)  #define copy_to_user(to, from, n)	__copy_to_user(to, from, n) -long strncpy_from_user(char *dst, const char __user *src, long count); -long strnlen_user(const char __user *src, long n); +#define user_addr_max() \ +	(segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL) + +extern long strncpy_from_user(char *dst, const char __user *src, long count); +extern __must_check long strlen_user(const char __user *str); +extern __must_check long strnlen_user(const char __user *str, long n); +  unsigned long __clear_user(void __user *to, unsigned long n);  #define clear_user	__clear_user -#define strlen_user(str) strnlen_user(str, 32767) -  #endif /* _M68K_UACCESS_H */ diff --git a/arch/m68k/kernel/ptrace.c b/arch/m68k/kernel/ptrace.c index 8b4a2222e65..1bc10e62b9a 100644 --- a/arch/m68k/kernel/ptrace.c +++ b/arch/m68k/kernel/ptrace.c @@ -286,7 +286,7 @@ asmlinkage void syscall_trace(void)  	}  } -#ifdef CONFIG_COLDFIRE +#if defined(CONFIG_COLDFIRE) || !defined(CONFIG_MMU)  asmlinkage int syscall_trace_enter(void)  {  	int ret = 0; diff --git a/arch/m68k/kernel/time.c b/arch/m68k/kernel/time.c index d7deb7fc7eb..707f0573ec6 100644 --- a/arch/m68k/kernel/time.c +++ b/arch/m68k/kernel/time.c @@ -85,7 +85,7 @@ void __init time_init(void)  	mach_sched_init(timer_interrupt);  } -#ifdef CONFIG_M68KCLASSIC +#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET  u32 arch_gettimeoffset(void)  { @@ -108,4 +108,4 @@ static int __init rtc_init(void)  module_init(rtc_init); -#endif /* CONFIG_M68KCLASSIC */ +#endif /* CONFIG_ARCH_USES_GETTIMEOFFSET */ diff --git a/arch/m68k/lib/uaccess.c b/arch/m68k/lib/uaccess.c index 5664386338d..5e97f2ee7c1 100644 --- a/arch/m68k/lib/uaccess.c +++ b/arch/m68k/lib/uaccess.c @@ -104,80 +104,6 @@ unsigned long __generic_copy_to_user(void __user *to, const void *from,  EXPORT_SYMBOL(__generic_copy_to_user);  /* - * Copy a null terminated string from userspace. - */ -long strncpy_from_user(char *dst, const char __user *src, long count) -{ -	long res; -	char c; - -	if (count <= 0) -		return count; - -	asm volatile ("\n" -		"1:	"MOVES".b	(%2)+,%4\n" -		"	move.b	%4,(%1)+\n" -		"	jeq	2f\n" -		"	subq.l	#1,%3\n" -		"	jne	1b\n" -		"2:	sub.l	%3,%0\n" -		"3:\n" -		"	.section .fixup,\"ax\"\n" -		"	.even\n" -		"10:	move.l	%5,%0\n" -		"	jra	3b\n" -		"	.previous\n" -		"\n" -		"	.section __ex_table,\"a\"\n" -		"	.align	4\n" -		"	.long	1b,10b\n" -		"	.previous" -		: "=d" (res), "+a" (dst), "+a" (src), "+r" (count), "=&d" (c) -		: "i" (-EFAULT), "0" (count)); - -	return res; -} -EXPORT_SYMBOL(strncpy_from_user); - -/* - * Return the size of a string (including the ending 0) - * - * Return 0 on exception, a value greater than N if too long - */ -long strnlen_user(const char __user *src, long n) -{ -	char c; -	long res; - -	asm volatile ("\n" -		"1:	subq.l	#1,%1\n" -		"	jmi	3f\n" -		"2:	"MOVES".b	(%0)+,%2\n" -		"	tst.b	%2\n" -		"	jne	1b\n" -		"	jra	4f\n" -		"\n" -		"3:	addq.l	#1,%0\n" -		"4:	sub.l	%4,%0\n" -		"5:\n" -		"	.section .fixup,\"ax\"\n" -		"	.even\n" -		"20:	sub.l	%0,%0\n" -		"	jra	5b\n" -		"	.previous\n" -		"\n" -		"	.section __ex_table,\"a\"\n" -		"	.align	4\n" -		"	.long	2b,20b\n" -		"	.previous\n" -		: "=&a" (res), "+d" (n), "=&d" (c) -		: "0" (src), "r" (src)); - -	return res; -} -EXPORT_SYMBOL(strnlen_user); - -/*   * Zero Userspace   */ diff --git a/arch/m68k/platform/68328/timers.c b/arch/m68k/platform/68328/timers.c index c801c172b82..f4dc9b29560 100644 --- a/arch/m68k/platform/68328/timers.c +++ b/arch/m68k/platform/68328/timers.c @@ -53,6 +53,7 @@  #endif  static u32 m68328_tick_cnt; +static irq_handler_t timer_interrupt;  /***************************************************************************/ @@ -62,7 +63,7 @@ static irqreturn_t hw_tick(int irq, void *dummy)  	TSTAT &= 0;  	m68328_tick_cnt += TICKS_PER_JIFFY; -	return arch_timer_interrupt(irq, dummy); +	return timer_interrupt(irq, dummy);  }  /***************************************************************************/ @@ -99,7 +100,7 @@ static struct clocksource m68328_clk = {  /***************************************************************************/ -void hw_timer_init(void) +void hw_timer_init(irq_handler_t handler)  {  	/* disable timer 1 */  	TCTL = 0; @@ -115,6 +116,7 @@ void hw_timer_init(void)  	/* Enable timer 1 */  	TCTL |= TCTL_TEN;  	clocksource_register_hz(&m68328_clk, TICKS_PER_JIFFY*HZ); +	timer_interrupt = handler;  }  /***************************************************************************/ diff --git a/arch/m68k/platform/68360/config.c b/arch/m68k/platform/68360/config.c index 255fc03913e..9877cefad1e 100644 --- a/arch/m68k/platform/68360/config.c +++ b/arch/m68k/platform/68360/config.c @@ -35,6 +35,7 @@ extern void m360_cpm_reset(void);  #define OSCILLATOR  (unsigned long int)33000000  #endif +static irq_handler_t timer_interrupt;  unsigned long int system_clock;  extern QUICC *pquicc; @@ -52,7 +53,7 @@ static irqreturn_t hw_tick(int irq, void *dummy)    pquicc->timer_ter1 = 0x0002; /* clear timer event */ -  return arch_timer_interrupt(irq, dummy); +  return timer_interrupt(irq, dummy);  }  static struct irqaction m68360_timer_irq = { @@ -61,7 +62,7 @@ static struct irqaction m68360_timer_irq = {  	.handler = hw_tick,  }; -void hw_timer_init(void) +void hw_timer_init(irq_handler_t handler)  {    unsigned char prescaler;    unsigned short tgcr_save; @@ -94,6 +95,8 @@ void hw_timer_init(void)    pquicc->timer_ter1 = 0x0003; /* clear timer events */ +  timer_interrupt = handler; +    /* enable timer 1 interrupt in CIMR */    setup_irq(CPMVEC_TIMER1, &m68360_timer_irq);  |