diff options
Diffstat (limited to 'arch/frv')
113 files changed, 1093 insertions, 1898 deletions
diff --git a/arch/frv/Kconfig b/arch/frv/Kconfig index f6bcb039cd6..34aa19352dc 100644 --- a/arch/frv/Kconfig +++ b/arch/frv/Kconfig @@ -3,8 +3,17 @@ config FRV  	default y  	select HAVE_IDE  	select HAVE_ARCH_TRACEHOOK -	select HAVE_IRQ_WORK  	select HAVE_PERF_EVENTS +	select HAVE_UID16 +	select VIRT_TO_BUS +	select GENERIC_IRQ_SHOW +	select HAVE_DEBUG_BUGVERBOSE +	select ARCH_HAVE_NMI_SAFE_CMPXCHG +	select GENERIC_CPU_DEVICES +	select ARCH_WANT_IPC_PARSE_VERSION +	select OLD_SIGSUSPEND3 +	select OLD_SIGACTION +	select HAVE_DEBUG_STACKOVERFLOW  config ZONE_DMA  	bool @@ -17,10 +26,6 @@ config RWSEM_GENERIC_SPINLOCK  config RWSEM_XCHGADD_ALGORITHM  	bool -config GENERIC_FIND_NEXT_BIT -	bool -	default y -  config GENERIC_HWEIGHT  	bool  	default y @@ -29,14 +34,6 @@ config GENERIC_CALIBRATE_DELAY  	bool  	default n -config GENERIC_HARDIRQS -	bool -	default y - -config GENERIC_HARDIRQS_NO__DO_IRQ -	bool -	default y -  config TIME_LOW_RES  	bool  	default y @@ -326,6 +323,7 @@ config PCI  	bool "Use PCI"  	depends on MB93090_MB00  	default y +	select GENERIC_PCI_IOMAP  	help  	  Some FR-V systems (such as the MB93090-MB00 VDK) have PCI  	  onboard. If you have one of these boards and you wish to use the PCI @@ -350,21 +348,10 @@ source "drivers/pci/Kconfig"  source "drivers/pcmcia/Kconfig" -#config MATH_EMULATION -#	bool "Math emulation support (EXPERIMENTAL)" -#	depends on EXPERIMENTAL -#	help -#	  At some point in the future, this will cause floating-point math -#	  instructions to be emulated by the kernel on machines that lack a -#	  floating-point math coprocessor.  Thrill-seekers and chronically -#	  sleep-deprived psychotic hacker types can say Y now, everyone else -#	  should probably wait a while. -  menu "Power management options"  config ARCH_SUSPEND_POSSIBLE  	def_bool y -	depends on !SMP  source kernel/power/Kconfig  endmenu diff --git a/arch/frv/Kconfig.debug b/arch/frv/Kconfig.debug index 211f01bc4ca..98c99a3ed2b 100644 --- a/arch/frv/Kconfig.debug +++ b/arch/frv/Kconfig.debug @@ -2,10 +2,6 @@ menu "Kernel hacking"  source "lib/Kconfig.debug" -config DEBUG_STACKOVERFLOW -	bool "Check for stack overflows" -	depends on DEBUG_KERNEL -  config GDBSTUB  	bool "Remote GDB kernel debugging"  	depends on DEBUG_KERNEL diff --git a/arch/frv/Makefile b/arch/frv/Makefile index 7ff84575b18..2a8fb730d1c 100644 --- a/arch/frv/Makefile +++ b/arch/frv/Makefile @@ -74,14 +74,7 @@ KBUILD_CFLAGS	+= -mno-fdpic -mgpr-32 -msoft-float -mno-media  KBUILD_CFLAGS	+= -ffixed-fcc3 -ffixed-cc3 -ffixed-gr15 -ffixed-icc2  KBUILD_AFLAGS	+= -mno-fdpic -# make sure the .S files get compiled with debug info -# and disable optimisations that are unhelpful whilst debugging -ifdef CONFIG_DEBUG_INFO -#KBUILD_CFLAGS	+= -O1 -KBUILD_AFLAGS	+= -Wa,--gdwarf2 -endif - -head-y		:= arch/frv/kernel/head.o arch/frv/kernel/init_task.o +head-y		:= arch/frv/kernel/head.o  core-y		+= arch/frv/kernel/ arch/frv/mm/  libs-y		+= arch/frv/lib/ diff --git a/arch/frv/boot/Makefile b/arch/frv/boot/Makefile index 6ae3254da01..636d5bbcd53 100644 --- a/arch/frv/boot/Makefile +++ b/arch/frv/boot/Makefile @@ -17,6 +17,8 @@ PARAMS_PHYS	 = 0x0207c000  INITRD_PHYS	 = 0x02180000  INITRD_VIRT	 = 0x02180000 +OBJCOPYFLAGS	:=-O binary -R .note -R .note.gnu.build-id -R .comment +  #  # If you don't define ZRELADDR above,  # then it defaults to ZTEXTADDR @@ -32,18 +34,18 @@ Image: $(obj)/Image  targets: $(obj)/Image  $(obj)/Image: vmlinux FORCE -	$(OBJCOPY) -O binary -R .note -R .comment -S vmlinux $@ +	$(OBJCOPY) $(OBJCOPYFLAGS) -S vmlinux $@  #$(obj)/Image:	$(CONFIGURE) $(SYSTEM) -#	$(OBJCOPY) -O binary -R .note -R .comment -g -S $(SYSTEM) $@ +#	$(OBJCOPY) $(OBJCOPYFLAGS) -g -S $(SYSTEM) $@  bzImage: zImage  zImage:	$(CONFIGURE) compressed/$(LINUX) -	$(OBJCOPY) -O binary -R .note -R .comment -S compressed/$(LINUX) $@ +	$(OBJCOPY) $(OBJCOPYFLAGS) -S compressed/$(LINUX) $@  bootpImage: bootp/bootp -	$(OBJCOPY) -O binary -R .note -R .comment -S bootp/bootp $@ +	$(OBJCOPY) $(OBJCOPYFLAGS) -S bootp/bootp $@  compressed/$(LINUX): $(LINUX) dep  	@$(MAKE) -C compressed $(LINUX) diff --git a/arch/frv/defconfig b/arch/frv/defconfig index b8ebe9e8a49..b1b792610fd 100644 --- a/arch/frv/defconfig +++ b/arch/frv/defconfig @@ -3,7 +3,7 @@ CONFIG_SYSVIPC=y  CONFIG_POSIX_MQUEUE=y  CONFIG_LOG_BUF_SHIFT=14  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -CONFIG_EMBEDDED=y +CONFIG_EXPERT=y  # CONFIG_HOTPLUG is not set  CONFIG_MMU=y  CONFIG_FRV_OUTOFLINE_ATOMIC_OPS=y diff --git a/arch/frv/include/asm/Kbuild b/arch/frv/include/asm/Kbuild index 5be6663cfee..87b95eb8aee 100644 --- a/arch/frv/include/asm/Kbuild +++ b/arch/frv/include/asm/Kbuild @@ -1,4 +1,8 @@ -include include/asm-generic/Kbuild.asm -header-y += registers.h -header-y += termios.h +generic-y += clkdev.h +generic-y += cputime.h +generic-y += exec.h +generic-y += hash.h +generic-y += mcs_spinlock.h +generic-y += preempt.h +generic-y += trace_clock.h diff --git a/arch/frv/include/asm/atomic.h b/arch/frv/include/asm/atomic.h index fae32c7fdcb..f6c3a169010 100644 --- a/arch/frv/include/asm/atomic.h +++ b/arch/frv/include/asm/atomic.h @@ -16,7 +16,8 @@  #include <linux/types.h>  #include <asm/spr-regs.h> -#include <asm/system.h> +#include <asm/cmpxchg.h> +#include <asm/barrier.h>  #ifdef CONFIG_SMP  #error not SMP safe @@ -29,12 +30,6 @@   * We do not have SMP systems, so we don't have to deal with that.   */ -/* Atomic operations are already serializing */ -#define smp_mb__before_atomic_dec()	barrier() -#define smp_mb__after_atomic_dec()	barrier() -#define smp_mb__before_atomic_inc()	barrier() -#define smp_mb__after_atomic_inc()	barrier() -  #define ATOMIC_INIT(i)		{ (i) }  #define atomic_read(v)		(*(volatile int *)&(v)->counter)  #define atomic_set(v, i)	(((v)->counter) = (i)) @@ -181,67 +176,12 @@ static inline void atomic64_dec(atomic64_t *v)  #define atomic64_dec_and_test(v)	(atomic64_dec_return((v)) == 0)  #define atomic64_inc_and_test(v)	(atomic64_inc_return((v)) == 0) -/*****************************************************************************/ -/* - * exchange value with memory - */ -extern uint64_t __xchg_64(uint64_t i, volatile void *v); - -#ifndef CONFIG_FRV_OUTOFLINE_ATOMIC_OPS - -#define xchg(ptr, x)								\ -({										\ -	__typeof__(ptr) __xg_ptr = (ptr);					\ -	__typeof__(*(ptr)) __xg_orig;						\ -										\ -	switch (sizeof(__xg_orig)) {						\ -	case 4:									\ -		asm volatile(							\ -			"swap%I0 %M0,%1"					\ -			: "+m"(*__xg_ptr), "=r"(__xg_orig)			\ -			: "1"(x)						\ -			: "memory"						\ -			);							\ -		break;								\ -										\ -	default:								\ -		__xg_orig = (__typeof__(__xg_orig))0;				\ -		asm volatile("break");						\ -		break;								\ -	}									\ -										\ -	__xg_orig;								\ -}) - -#else - -extern uint32_t __xchg_32(uint32_t i, volatile void *v); - -#define xchg(ptr, x)										\ -({												\ -	__typeof__(ptr) __xg_ptr = (ptr);							\ -	__typeof__(*(ptr)) __xg_orig;								\ -												\ -	switch (sizeof(__xg_orig)) {								\ -	case 4: __xg_orig = (__typeof__(*(ptr))) __xchg_32((uint32_t) x, __xg_ptr);	break;	\ -	default:										\ -		__xg_orig = (__typeof__(__xg_orig))0;									\ -		asm volatile("break");								\ -		break;										\ -	}											\ -	__xg_orig;										\ -}) - -#endif - -#define tas(ptr) (xchg((ptr), 1)) -  #define atomic_cmpxchg(v, old, new)	(cmpxchg(&(v)->counter, old, new))  #define atomic_xchg(v, new)		(xchg(&(v)->counter, new))  #define atomic64_cmpxchg(v, old, new)	(__cmpxchg_64(old, new, &(v)->counter))  #define atomic64_xchg(v, new)		(__xchg_64(new, &(v)->counter)) -static __inline__ int atomic_add_unless(atomic_t *v, int a, int u) +static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)  {  	int c, old;  	c = atomic_read(v); @@ -253,10 +193,8 @@ static __inline__ int atomic_add_unless(atomic_t *v, int a, int u)  			break;  		c = old;  	} -	return c != (u); +	return c;  } -#define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) -#include <asm-generic/atomic-long.h>  #endif /* _ASM_ATOMIC_H */ diff --git a/arch/frv/include/asm/barrier.h b/arch/frv/include/asm/barrier.h new file mode 100644 index 00000000000..abbef470154 --- /dev/null +++ b/arch/frv/include/asm/barrier.h @@ -0,0 +1,23 @@ +/* FR-V CPU memory barrier definitions + * + * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ + +#ifndef _ASM_BARRIER_H +#define _ASM_BARRIER_H + +#define nop()			asm volatile ("nop"::) + +#define mb()			asm volatile ("membar" : : :"memory") +#define rmb()			asm volatile ("membar" : : :"memory") +#define wmb()			asm volatile ("membar" : : :"memory") + +#include <asm-generic/barrier.h> + +#endif /* _ASM_BARRIER_H */ diff --git a/arch/frv/include/asm/bitops.h b/arch/frv/include/asm/bitops.h index 50ae91b2967..96de220ef13 100644 --- a/arch/frv/include/asm/bitops.h +++ b/arch/frv/include/asm/bitops.h @@ -25,12 +25,6 @@  #include <asm-generic/bitops/ffz.h> -/* - * clear_bit() doesn't provide any barrier for the compiler. - */ -#define smp_mb__before_clear_bit()	barrier() -#define smp_mb__after_clear_bit()	barrier() -  #ifndef CONFIG_FRV_OUTOFLINE_ATOMIC_OPS  static inline  unsigned long atomic_test_and_ANDNOT_mask(unsigned long mask, volatile unsigned long *v) @@ -401,12 +395,9 @@ int __ilog2_u64(u64 n)  #include <asm-generic/bitops/hweight.h>  #include <asm-generic/bitops/lock.h> -#include <asm-generic/bitops/ext2-non-atomic.h> - -#define ext2_set_bit_atomic(lock,nr,addr)	test_and_set_bit  ((nr) ^ 0x18, (addr)) -#define ext2_clear_bit_atomic(lock,nr,addr)	test_and_clear_bit((nr) ^ 0x18, (addr)) +#include <asm-generic/bitops/le.h> -#include <asm-generic/bitops/minix-le.h> +#include <asm-generic/bitops/ext2-atomic-setbit.h>  #endif /* __KERNEL__ */ diff --git a/arch/frv/include/asm/bug.h b/arch/frv/include/asm/bug.h index 2e054508a2f..dd01bcf42ee 100644 --- a/arch/frv/include/asm/bug.h +++ b/arch/frv/include/asm/bug.h @@ -51,4 +51,6 @@ do {						\  #include <asm-generic/bug.h> +extern void die_if_kernel(const char *, ...) __attribute__((format(printf, 1, 2))); +  #endif diff --git a/arch/frv/include/asm/system.h b/arch/frv/include/asm/cmpxchg.h index 0a6d8d9ca45..5b04dd0aeca 100644 --- a/arch/frv/include/asm/system.h +++ b/arch/frv/include/asm/cmpxchg.h @@ -1,6 +1,9 @@ -/* system.h: FR-V CPU control definitions +/* xchg and cmpxchg operation emulation for FR-V   * - * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved. + * For an explanation of how atomic ops work in this arch, see: + *   Documentation/frv/atomic-ops.txt + * + * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.   * Written by David Howells (dhowells@redhat.com)   *   * This program is free software; you can redistribute it and/or @@ -8,63 +11,65 @@   * as published by the Free Software Foundation; either version   * 2 of the License, or (at your option) any later version.   */ - -#ifndef _ASM_SYSTEM_H -#define _ASM_SYSTEM_H +#ifndef _ASM_CMPXCHG_H +#define _ASM_CMPXCHG_H  #include <linux/types.h> -#include <linux/linkage.h> -#include <linux/kernel.h> - -struct thread_struct; +/*****************************************************************************/  /* - * switch_to(prev, next) should switch from task `prev' to `next' - * `prev' will never be the same as `next'. - * The `mb' is to tell GCC not to cache `current' across this call. + * exchange value with memory   */ -extern asmlinkage -struct task_struct *__switch_to(struct thread_struct *prev_thread, -				struct thread_struct *next_thread, -				struct task_struct *prev); - -#define switch_to(prev, next, last)					\ -do {									\ -	(prev)->thread.sched_lr =					\ -		(unsigned long) __builtin_return_address(0);		\ -	(last) = __switch_to(&(prev)->thread, &(next)->thread, (prev));	\ -	mb();								\ -} while(0) +extern uint64_t __xchg_64(uint64_t i, volatile void *v); + +#ifndef CONFIG_FRV_OUTOFLINE_ATOMIC_OPS + +#define xchg(ptr, x)								\ +({										\ +	__typeof__(ptr) __xg_ptr = (ptr);					\ +	__typeof__(*(ptr)) __xg_orig;						\ +										\ +	switch (sizeof(__xg_orig)) {						\ +	case 4:									\ +		asm volatile(							\ +			"swap%I0 %M0,%1"					\ +			: "+m"(*__xg_ptr), "=r"(__xg_orig)			\ +			: "1"(x)						\ +			: "memory"						\ +			);							\ +		break;								\ +										\ +	default:								\ +		__xg_orig = (__typeof__(__xg_orig))0;				\ +		asm volatile("break");						\ +		break;								\ +	}									\ +										\ +	__xg_orig;								\ +}) -/* - * Force strict CPU ordering. - */ -#define nop()			asm volatile ("nop"::) -#define mb()			asm volatile ("membar" : : :"memory") -#define rmb()			asm volatile ("membar" : : :"memory") -#define wmb()			asm volatile ("membar" : : :"memory") -#define read_barrier_depends()	do { } while (0) - -#ifdef CONFIG_SMP -#define smp_mb()			mb() -#define smp_rmb()			rmb() -#define smp_wmb()			wmb() -#define smp_read_barrier_depends()	read_barrier_depends() -#define set_mb(var, value) \ -	do { xchg(&var, (value)); } while (0)  #else -#define smp_mb()			barrier() -#define smp_rmb()			barrier() -#define smp_wmb()			barrier() -#define smp_read_barrier_depends()	do {} while(0) -#define set_mb(var, value) \ -	do { var = (value); barrier(); } while (0) -#endif -extern void die_if_kernel(const char *, ...) __attribute__((format(printf, 1, 2))); -extern void free_initmem(void); +extern uint32_t __xchg_32(uint32_t i, volatile void *v); + +#define xchg(ptr, x)										\ +({												\ +	__typeof__(ptr) __xg_ptr = (ptr);							\ +	__typeof__(*(ptr)) __xg_orig;								\ +												\ +	switch (sizeof(__xg_orig)) {								\ +	case 4: __xg_orig = (__typeof__(*(ptr))) __xchg_32((uint32_t) x, __xg_ptr);	break;	\ +	default:										\ +		__xg_orig = (__typeof__(__xg_orig))0;									\ +		asm volatile("break");								\ +		break;										\ +	}											\ +	__xg_orig;										\ +}) + +#endif -#define arch_align_stack(x) (x) +#define tas(ptr) (xchg((ptr), 1))  /*****************************************************************************/  /* @@ -164,4 +169,4 @@ static inline unsigned long __cmpxchg_local(volatile void *ptr,  			(unsigned long)(n), sizeof(*(ptr))))  #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) -#endif /* _ASM_SYSTEM_H */ +#endif /* _ASM_CMPXCHG_H */ diff --git a/arch/frv/include/asm/cpumask.h b/arch/frv/include/asm/cpumask.h deleted file mode 100644 index d999c20c84d..00000000000 --- a/arch/frv/include/asm/cpumask.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_CPUMASK_H -#define _ASM_CPUMASK_H - -#include <asm-generic/cpumask.h> - -#endif /* _ASM_CPUMASK_H */ diff --git a/arch/frv/include/asm/cputime.h b/arch/frv/include/asm/cputime.h deleted file mode 100644 index f6c373ad2b8..00000000000 --- a/arch/frv/include/asm/cputime.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_CPUTIME_H -#define _ASM_CPUTIME_H - -#include <asm-generic/cputime.h> - -#endif /* _ASM_CPUTIME_H */ diff --git a/arch/frv/include/asm/dma-mapping.h b/arch/frv/include/asm/dma-mapping.h index dfb811002c6..1746a2b8e6e 100644 --- a/arch/frv/include/asm/dma-mapping.h +++ b/arch/frv/include/asm/dma-mapping.h @@ -132,4 +132,19 @@ void dma_cache_sync(struct device *dev, void *vaddr, size_t size,  	flush_write_buffers();  } +/* Not supported for now */ +static inline int dma_mmap_coherent(struct device *dev, +				    struct vm_area_struct *vma, void *cpu_addr, +				    dma_addr_t dma_addr, size_t size) +{ +	return -EINVAL; +} + +static inline int dma_get_sgtable(struct device *dev, struct sg_table *sgt, +				  void *cpu_addr, dma_addr_t dma_addr, +				  size_t size) +{ +	return -EINVAL; +} +  #endif  /* _ASM_DMA_MAPPING_H */ diff --git a/arch/frv/include/asm/elf.h b/arch/frv/include/asm/elf.h index c3819804a74..2bac6446db4 100644 --- a/arch/frv/include/asm/elf.h +++ b/arch/frv/include/asm/elf.h @@ -137,6 +137,4 @@ do {											\  #define ELF_PLATFORM  (NULL) -#define SET_PERSONALITY(ex) set_personality(PER_LINUX) -  #endif diff --git a/arch/frv/include/asm/futex.h b/arch/frv/include/asm/futex.h index 08b3d1da358..4bea27f50a7 100644 --- a/arch/frv/include/asm/futex.h +++ b/arch/frv/include/asm/futex.h @@ -7,10 +7,11 @@  #include <asm/errno.h>  #include <asm/uaccess.h> -extern int futex_atomic_op_inuser(int encoded_op, int __user *uaddr); +extern int futex_atomic_op_inuser(int encoded_op, u32 __user *uaddr);  static inline int -futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval) +futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, +			      u32 oldval, u32 newval)  {  	return -ENOSYS;  } diff --git a/arch/frv/include/asm/hardirq.h b/arch/frv/include/asm/hardirq.h index 5fc8b6f5bc5..c62833d6ebb 100644 --- a/arch/frv/include/asm/hardirq.h +++ b/arch/frv/include/asm/hardirq.h @@ -12,7 +12,7 @@  #ifndef __ASM_HARDIRQ_H  #define __ASM_HARDIRQ_H -#include <asm/atomic.h> +#include <linux/atomic.h>  extern atomic_t irq_err_count;  static inline void ack_bad_irq(int irq) diff --git a/arch/frv/include/asm/highmem.h b/arch/frv/include/asm/highmem.h index a8d6565d415..b3adc93611f 100644 --- a/arch/frv/include/asm/highmem.h +++ b/arch/frv/include/asm/highmem.h @@ -76,15 +76,16 @@ extern struct page *kmap_atomic_to_page(void *ptr);  #ifndef __ASSEMBLY__ -#define __kmap_atomic_primary(type, paddr, ampr)						\ +#define __kmap_atomic_primary(cached, paddr, ampr)						\  ({												\  	unsigned long damlr, dampr;								\  												\  	dampr = paddr | xAMPRx_L | xAMPRx_M | xAMPRx_S | xAMPRx_SS_16Kb | xAMPRx_V;		\  												\ -	if (type != __KM_CACHE)									\ +	if (!cached)										\  		asm volatile("movgs %0,dampr"#ampr :: "r"(dampr) : "memory");			\  	else											\ +		/* cache flush page attachment point */						\  		asm volatile("movgs %0,iampr"#ampr"\n"						\  			     "movgs %0,dampr"#ampr"\n"						\  			     :: "r"(dampr) : "memory"						\ @@ -112,29 +113,20 @@ extern struct page *kmap_atomic_to_page(void *ptr);  	(void *) damlr;										  \  }) -static inline void *kmap_atomic_primary(struct page *page, enum km_type type) +static inline void *kmap_atomic_primary(struct page *page)  {  	unsigned long paddr;  	pagefault_disable();  	paddr = page_to_phys(page); -	switch (type) { -        case 0:		return __kmap_atomic_primary(0, paddr, 2); -        case 1:		return __kmap_atomic_primary(1, paddr, 3); -        case 2:		return __kmap_atomic_primary(2, paddr, 4); -        case 3:		return __kmap_atomic_primary(3, paddr, 5); - -	default: -		BUG(); -		return NULL; -	} +        return __kmap_atomic_primary(1, paddr, 2);  } -#define __kunmap_atomic_primary(type, ampr)				\ +#define __kunmap_atomic_primary(cached, ampr)				\  do {									\  	asm volatile("movgs gr0,dampr"#ampr"\n" ::: "memory");		\ -	if (type == __KM_CACHE)						\ +	if (cached)							\  		asm volatile("movgs gr0,iampr"#ampr"\n" ::: "memory");	\  } while(0) @@ -143,21 +135,13 @@ do {									\  	asm volatile("tlbpr %0,gr0,#4,#1" : : "r"(vaddr) : "memory");	\  } while(0) -static inline void kunmap_atomic_primary(void *kvaddr, enum km_type type) +static inline void kunmap_atomic_primary(void *kvaddr)  { -	switch (type) { -        case 0:		__kunmap_atomic_primary(0, 2);	break; -        case 1:		__kunmap_atomic_primary(1, 3);	break; -        case 2:		__kunmap_atomic_primary(2, 4);	break; -        case 3:		__kunmap_atomic_primary(3, 5);	break; - -	default: -		BUG(); -	} +        __kunmap_atomic_primary(1, 2);  	pagefault_enable();  } -void *__kmap_atomic(struct page *page); +void *kmap_atomic(struct page *page);  void __kunmap_atomic(void *kvaddr);  #endif /* !__ASSEMBLY__ */ diff --git a/arch/frv/include/asm/io.h b/arch/frv/include/asm/io.h index ca7475e73b5..8cb50a2fbcb 100644 --- a/arch/frv/include/asm/io.h +++ b/arch/frv/include/asm/io.h @@ -21,6 +21,7 @@  #include <asm/virtconvert.h>  #include <asm/string.h>  #include <asm/mb-regs.h> +#include <asm-generic/pci_iomap.h>  #include <linux/delay.h>  /* @@ -370,7 +371,6 @@ static inline void iowrite32_rep(void __iomem *p, const void *src, unsigned long  /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */  struct pci_dev; -extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);  static inline void pci_iounmap(struct pci_dev *dev, void __iomem *p)  {  } diff --git a/arch/frv/include/asm/ipcbuf.h b/arch/frv/include/asm/ipcbuf.h deleted file mode 100644 index b546f67e455..00000000000 --- a/arch/frv/include/asm/ipcbuf.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef __ASM_IPCBUF_H__ -#define __ASM_IPCBUF_H__ - -/* - * The user_ipc_perm structure for FR-V architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 32-bit mode_t and seq - * - 2 miscellaneous 32-bit values - */ - -struct ipc64_perm -{ -	__kernel_key_t		key; -	__kernel_uid32_t	uid; -	__kernel_gid32_t	gid; -	__kernel_uid32_t	cuid; -	__kernel_gid32_t	cgid; -	__kernel_mode_t		mode; -	unsigned short		__pad1; -	unsigned short		seq; -	unsigned short		__pad2; -	unsigned long		__unused1; -	unsigned long		__unused2; -}; - -#endif /* __ASM_IPCBUF_H__ */ - diff --git a/arch/frv/include/asm/kmap_types.h b/arch/frv/include/asm/kmap_types.h index f8e16b2a580..43901f22096 100644 --- a/arch/frv/include/asm/kmap_types.h +++ b/arch/frv/include/asm/kmap_types.h @@ -2,28 +2,6 @@  #ifndef _ASM_KMAP_TYPES_H  #define _ASM_KMAP_TYPES_H -enum km_type { -	/* arch specific kmaps - change the numbers attached to these at your peril */ -	__KM_CACHE,		/* cache flush page attachment point */ -	__KM_PGD,		/* current page directory */ -	__KM_ITLB_PTD,		/* current instruction TLB miss page table lookup */ -	__KM_DTLB_PTD,		/* current data TLB miss page table lookup */ - -	/* general kmaps */ -        KM_BOUNCE_READ, -        KM_SKB_SUNRPC_DATA, -        KM_SKB_DATA_SOFTIRQ, -        KM_USER0, -        KM_USER1, -	KM_BIO_SRC_IRQ, -	KM_BIO_DST_IRQ, -	KM_PTE0, -	KM_PTE1, -	KM_IRQ0, -	KM_IRQ1, -	KM_SOFTIRQ0, -	KM_SOFTIRQ1, -	KM_TYPE_NR -}; +#define KM_TYPE_NR 17  #endif diff --git a/arch/frv/include/asm/module.h b/arch/frv/include/asm/module.h index 3d5c6360289..a8848f09a21 100644 --- a/arch/frv/include/asm/module.h +++ b/arch/frv/include/asm/module.h @@ -11,13 +11,7 @@  #ifndef _ASM_MODULE_H  #define _ASM_MODULE_H -struct mod_arch_specific -{ -}; - -#define Elf_Shdr	Elf32_Shdr -#define Elf_Sym		Elf32_Sym -#define Elf_Ehdr	Elf32_Ehdr +#include <asm-generic/module.h>  /*   * Include the architecture version. diff --git a/arch/frv/include/asm/param.h b/arch/frv/include/asm/param.h deleted file mode 100644 index 6859dd503ed..00000000000 --- a/arch/frv/include/asm/param.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _ASM_PARAM_H -#define _ASM_PARAM_H - -#ifdef __KERNEL__ -#define HZ		CONFIG_HZ	/* Internal kernel timer frequency */ -#define USER_HZ		100		/* .. some user interfaces are in "ticks" */ -#define CLOCKS_PER_SEC	(USER_HZ)	/* like times() */ -#endif - -#ifndef HZ -#define HZ 100 -#endif - -#define EXEC_PAGESIZE	16384 - -#ifndef NOGROUP -#define NOGROUP		(-1) -#endif - -#define MAXHOSTNAMELEN		64	/* max length of hostname */ - -#endif /* _ASM_PARAM_H */ diff --git a/arch/frv/include/asm/pci.h b/arch/frv/include/asm/pci.h index 0d599790985..2035a4d3f9b 100644 --- a/arch/frv/include/asm/pci.h +++ b/arch/frv/include/asm/pci.h @@ -24,8 +24,6 @@ struct pci_dev;  extern void pcibios_set_master(struct pci_dev *dev); -extern void pcibios_penalize_isa_irq(int irq); -  #ifdef CONFIG_MMU  extern void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *dma_handle);  extern void consistent_free(void *vaddr); @@ -54,7 +52,7 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev,  #endif  /* - *	These are pretty much arbitary with the CoMEM implementation. + *	These are pretty much arbitrary with the CoMEM implementation.   *	We have the whole address space to ourselves.   */  #define PCIBIOS_MIN_IO		0x100 diff --git a/arch/frv/include/asm/perf_event.h b/arch/frv/include/asm/perf_event.h index a69e0155d14..c52ea5546b5 100644 --- a/arch/frv/include/asm/perf_event.h +++ b/arch/frv/include/asm/perf_event.h @@ -12,6 +12,4 @@  #ifndef _ASM_PERF_EVENT_H  #define _ASM_PERF_EVENT_H -#define PERF_EVENT_INDEX_OFFSET	0 -  #endif /* _ASM_PERF_EVENT_H */ diff --git a/arch/frv/include/asm/pgtable.h b/arch/frv/include/asm/pgtable.h index 6bc241e4b4f..eb0110acd19 100644 --- a/arch/frv/include/asm/pgtable.h +++ b/arch/frv/include/asm/pgtable.h @@ -488,9 +488,6 @@ static inline int pte_file(pte_t pte)  #define PageSkip(page)		(0)  #define kern_addr_valid(addr)	(1) -#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)		\ -		remap_pfn_range(vma, vaddr, pfn, size, prot) -  #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG  #define __HAVE_ARCH_PTEP_GET_AND_CLEAR  #define __HAVE_ARCH_PTEP_SET_WRPROTECT diff --git a/arch/frv/include/asm/posix_types.h b/arch/frv/include/asm/posix_types.h deleted file mode 100644 index a9f1f5be063..00000000000 --- a/arch/frv/include/asm/posix_types.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef _ASM_POSIX_TYPES_H -#define _ASM_POSIX_TYPES_H - -/* - * This file is generally used by user-level software, so you need to - * be a little careful about namespace pollution etc.  Also, we cannot - * assume GCC is being used. - */ - -typedef unsigned long	__kernel_ino_t; -typedef unsigned short	__kernel_mode_t; -typedef unsigned short	__kernel_nlink_t; -typedef long		__kernel_off_t; -typedef int		__kernel_pid_t; -typedef unsigned short	__kernel_ipc_pid_t; -typedef unsigned short	__kernel_uid_t; -typedef unsigned short	__kernel_gid_t; -typedef unsigned int	__kernel_size_t; -typedef int		__kernel_ssize_t; -typedef int		__kernel_ptrdiff_t; -typedef long		__kernel_time_t; -typedef long		__kernel_suseconds_t; -typedef long		__kernel_clock_t; -typedef int		__kernel_timer_t; -typedef int		__kernel_clockid_t; -typedef int		__kernel_daddr_t; -typedef char *		__kernel_caddr_t; -typedef unsigned short	__kernel_uid16_t; -typedef unsigned short	__kernel_gid16_t; -typedef unsigned int	__kernel_uid32_t; -typedef unsigned int	__kernel_gid32_t; - -typedef unsigned short	__kernel_old_uid_t; -typedef unsigned short	__kernel_old_gid_t; -typedef unsigned short	__kernel_old_dev_t; - -#ifdef __GNUC__ -typedef long long	__kernel_loff_t; -#endif - -typedef struct { -	int	val[2]; -} __kernel_fsid_t; - -#if defined(__KERNEL__) - -#undef	__FD_SET -#define	__FD_SET(d, set)	((set)->fds_bits[__FDELT(d)] |= __FDMASK(d)) - -#undef	__FD_CLR -#define	__FD_CLR(d, set)	((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d)) - -#undef	__FD_ISSET -#define	__FD_ISSET(d, set)	(!!((set)->fds_bits[__FDELT(d)] & __FDMASK(d))) - -#undef	__FD_ZERO -#define __FD_ZERO(fdsetp) (memset (fdsetp, 0, sizeof(*(fd_set *)fdsetp))) - -#endif /* defined(__KERNEL__) */ - -#endif - diff --git a/arch/frv/include/asm/processor.h b/arch/frv/include/asm/processor.h index 3744f2e47f4..a34f309e580 100644 --- a/arch/frv/include/asm/processor.h +++ b/arch/frv/include/asm/processor.h @@ -54,7 +54,6 @@ extern struct cpuinfo_frv __nongprelbss boot_cpu_data;   * Bus types   */  #define EISA_bus 0 -#define MCA_bus 0  struct thread_struct {  	struct pt_regs		*frame;		/* [GR28] exception frame ptr for this thread */ @@ -93,25 +92,19 @@ extern struct task_struct *__kernel_current_task;  /*   * do necessary setup to start up a newly executed thread. - * - need to discard the frame stacked by init() invoking the execve syscall   */  #define start_thread(_regs, _pc, _usp)			\  do {							\ -	set_fs(USER_DS); /* reads from user space */	\ -	__frame = __kernel_frame0_ptr;			\ -	__frame->pc	= (_pc);			\ -	__frame->psr	&= ~PSR_S;			\ -	__frame->sp	= (_usp);			\ +	_regs->pc	= (_pc);			\ +	_regs->psr	&= ~PSR_S;			\ +	_regs->sp	= (_usp);			\  } while(0) -extern void prepare_to_copy(struct task_struct *tsk); -  /* Free all resources held by a thread. */  static inline void release_thread(struct task_struct *dead_task)  {  } -extern asmlinkage int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);  extern asmlinkage void save_user_regs(struct user_context *target);  extern asmlinkage void *restore_user_regs(const struct user_context *target, ...); @@ -136,10 +129,6 @@ unsigned long get_wchan(struct task_struct *p);  #define	KSTK_EIP(tsk)	((tsk)->thread.frame0->pc)  #define	KSTK_ESP(tsk)	((tsk)->thread.frame0->sp) -/* Allocation and freeing of basic task resources. */ -extern struct task_struct *alloc_task_struct(void); -extern void free_task_struct(struct task_struct *p); -  #define cpu_relax()    barrier()  /* data cache prefetch */ diff --git a/arch/frv/include/asm/ptrace.h b/arch/frv/include/asm/ptrace.h index 6bfad4cf190..034f1793419 100644 --- a/arch/frv/include/asm/ptrace.h +++ b/arch/frv/include/asm/ptrace.h @@ -11,58 +11,10 @@  #ifndef _ASM_PTRACE_H  #define _ASM_PTRACE_H -#include <asm/registers.h> -#ifdef __KERNEL__  #include <asm/irq_regs.h> +#include <uapi/asm/ptrace.h>  #define in_syscall(regs) (((regs)->tbr & TBR_TT) == TBR_TT_TRAP0) -#endif - - -#define PT_PSR		0 -#define	PT_ISR		1 -#define PT_CCR		2 -#define PT_CCCR		3 -#define PT_LR		4 -#define PT_LCR		5 -#define PT_PC		6 - -#define PT__STATUS	7	/* exception status */ -#define PT_SYSCALLNO	8	/* syscall number or -1 */ -#define PT_ORIG_GR8	9	/* saved GR8 for signal handling */ -#define PT_GNER0	10 -#define PT_GNER1	11 -#define PT_IACC0H	12 -#define PT_IACC0L	13 - -#define PT_GR(j)	( 14 + (j))	/* GRj for 0<=j<=63 */ -#define PT_FR(j)	( 78 + (j))	/* FRj for 0<=j<=63 */ -#define PT_FNER(j)	(142 + (j))	/* FNERj for 0<=j<=1 */ -#define PT_MSR(j)	(144 + (j))	/* MSRj for 0<=j<=2 */ -#define PT_ACC(j)	(146 + (j))	/* ACCj for 0<=j<=7 */ -#define PT_ACCG(jklm)	(154 + (jklm))	/* ACCGjklm for 0<=jklm<=1 (reads four regs per slot) */ -#define PT_FSR(j)	(156 + (j))	/* FSRj for 0<=j<=0 */ -#define PT__GPEND	78 -#define PT__END		157 - -#define PT_TBR		PT_GR(0) -#define PT_SP		PT_GR(1) -#define PT_FP		PT_GR(2) -#define PT_PREV_FRAME	PT_GR(28)	/* previous exception frame pointer (old gr28 value) */ -#define PT_CURR_TASK	PT_GR(29)	/* current task */ - - -/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ -#define PTRACE_GETREGS		12 -#define PTRACE_SETREGS		13 -#define PTRACE_GETFPREGS	14 -#define PTRACE_SETFPREGS	15 -#define PTRACE_GETFDPIC		31	/* get the ELF fdpic loadmap address */ - -#define PTRACE_GETFDPIC_EXEC	0	/* [addr] request the executable loadmap */ -#define PTRACE_GETFDPIC_INTERP	1	/* [addr] request the interpreter loadmap */ - -#ifdef __KERNEL__  #ifndef __ASSEMBLY__  struct task_struct; @@ -76,9 +28,9 @@ register struct pt_regs *__frame asm("gr28");  #define user_mode(regs)			(!((regs)->psr & PSR_S))  #define instruction_pointer(regs)	((regs)->pc)  #define user_stack_pointer(regs)	((regs)->sp) +#define current_pt_regs()		(__frame)  extern unsigned long user_stack(const struct pt_regs *); -extern void show_regs(struct pt_regs *);  #define profile_pc(regs) ((regs)->pc)  #define task_pt_regs(task) ((task)->thread.frame0) @@ -86,5 +38,4 @@ extern void show_regs(struct pt_regs *);  #define arch_has_single_step()	(1)  #endif /* !__ASSEMBLY__ */ -#endif /* __KERNEL__ */  #endif /* _ASM_PTRACE_H */ diff --git a/arch/frv/include/asm/setup.h b/arch/frv/include/asm/setup.h index afd787ceede..aa76f2eac09 100644 --- a/arch/frv/include/asm/setup.h +++ b/arch/frv/include/asm/setup.h @@ -8,15 +8,12 @@   * as published by the Free Software Foundation; either version   * 2 of the License, or (at your option) any later version.   */ -  #ifndef _ASM_SETUP_H  #define _ASM_SETUP_H -#define COMMAND_LINE_SIZE       512 - -#ifdef __KERNEL__  #include <linux/init.h> +#include <uapi/asm/setup.h>  #ifndef __ASSEMBLY__ @@ -26,6 +23,4 @@ extern unsigned long __initdata num_mappedpages;  #endif /* !__ASSEMBLY__ */ -#endif  /*  __KERNEL__  */ -  #endif /* _ASM_SETUP_H */ diff --git a/arch/frv/include/asm/signal.h b/arch/frv/include/asm/signal.h index f071e813dcb..eca0abcb79d 100644 --- a/arch/frv/include/asm/signal.h +++ b/arch/frv/include/asm/signal.h @@ -1,44 +1,6 @@  #ifndef _ASM_SIGNAL_H  #define _ASM_SIGNAL_H -#include <linux/types.h> - -#ifndef __KERNEL__ -/* Here we must cater to libcs that poke about in kernel headers.  */ - -#define NSIG		32 -typedef unsigned long sigset_t; - -#endif /* !__KERNEL__ */ - -#define SA_RESTORER	0x04000000 /* to get struct sigaction correct */ - -#include <asm-generic/signal.h> - -#ifdef __KERNEL__ -struct old_sigaction { -	__sighandler_t sa_handler; -	old_sigset_t sa_mask; -	unsigned long sa_flags; -	__sigrestore_t sa_restorer; -}; - -#else -/* Here we must cater to libcs that poke about in kernel headers.  */ - -struct sigaction { -	union { -	  __sighandler_t _sa_handler; -	  void (*_sa_sigaction)(int, struct siginfo *, void *); -	} _u; -	sigset_t sa_mask; -	unsigned long sa_flags; -	void (*sa_restorer)(void); -}; - -#define sa_handler	_u._sa_handler -#define sa_sigaction	_u._sa_sigaction - -#endif /* __KERNEL__ */ +#include <uapi/asm/signal.h>  #endif /* _ASM_SIGNAL_H */ diff --git a/arch/frv/include/asm/spr-regs.h b/arch/frv/include/asm/spr-regs.h index 01e6af5e99b..d3883021f23 100644 --- a/arch/frv/include/asm/spr-regs.h +++ b/arch/frv/include/asm/spr-regs.h @@ -274,7 +274,7 @@  #define MSR0_RD			0xc0000000	/* rounding mode */  #define MSR0_RD_NEAREST		0x00000000	/* - nearest */  #define MSR0_RD_ZERO		0x40000000	/* - zero */ -#define MSR0_RD_POS_INF		0x80000000	/* - postive infinity */ +#define MSR0_RD_POS_INF		0x80000000	/* - positive infinity */  #define MSR0_RD_NEG_INF		0xc0000000	/* - negative infinity */  /* diff --git a/arch/frv/include/asm/switch_to.h b/arch/frv/include/asm/switch_to.h new file mode 100644 index 00000000000..2cf0f6a7fbb --- /dev/null +++ b/arch/frv/include/asm/switch_to.h @@ -0,0 +1,35 @@ +/* FR-V CPU basic task switching + * + * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ + +#ifndef _ASM_SWITCH_TO_H +#define _ASM_SWITCH_TO_H + +#include <linux/thread_info.h> + +/* + * switch_to(prev, next) should switch from task `prev' to `next' + * `prev' will never be the same as `next'. + * The `mb' is to tell GCC not to cache `current' across this call. + */ +extern asmlinkage +struct task_struct *__switch_to(struct thread_struct *prev_thread, +				struct thread_struct *next_thread, +				struct task_struct *prev); + +#define switch_to(prev, next, last)					\ +do {									\ +	(prev)->thread.sched_lr =					\ +		(unsigned long) __builtin_return_address(0);		\ +	(last) = __switch_to(&(prev)->thread, &(next)->thread, (prev));	\ +	mb();								\ +} while(0) + +#endif /* _ASM_SWITCH_TO_H */ diff --git a/arch/frv/include/asm/termios.h b/arch/frv/include/asm/termios.h index b4868aafe79..9f753fc0953 100644 --- a/arch/frv/include/asm/termios.h +++ b/arch/frv/include/asm/termios.h @@ -1,27 +1,8 @@  #ifndef _ASM_TERMIOS_H  #define _ASM_TERMIOS_H -#include <asm/termbits.h> -#include <asm/ioctls.h> +#include <uapi/asm/termios.h> -struct winsize { -	unsigned short ws_row; -	unsigned short ws_col; -	unsigned short ws_xpixel; -	unsigned short ws_ypixel; -}; - -#define NCC 8 -struct termio { -	unsigned short c_iflag;		/* input mode flags */ -	unsigned short c_oflag;		/* output mode flags */ -	unsigned short c_cflag;		/* control mode flags */ -	unsigned short c_lflag;		/* local mode flags */ -	unsigned char c_line;		/* line discipline */ -	unsigned char c_cc[NCC];	/* control characters */ -}; - -#ifdef __KERNEL__  /*	intr=^C		quit=^|		erase=del	kill=^U  	eof=^D		vtime=\0	vmin=\1		sxtc=\0  	start=^Q	stop=^S		susp=^Z		eol=\0 @@ -29,30 +10,5 @@ struct termio {  	eol2=\0  */  #define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" -#endif - -/* modem lines */ -#define TIOCM_LE	0x001 -#define TIOCM_DTR	0x002 -#define TIOCM_RTS	0x004 -#define TIOCM_ST	0x008 -#define TIOCM_SR	0x010 -#define TIOCM_CTS	0x020 -#define TIOCM_CAR	0x040 -#define TIOCM_RNG	0x080 -#define TIOCM_DSR	0x100 -#define TIOCM_CD	TIOCM_CAR -#define TIOCM_RI	TIOCM_RNG -#define TIOCM_OUT1	0x2000 -#define TIOCM_OUT2	0x4000 -#define TIOCM_LOOP	0x8000 - -#define TIOCM_MODEM_BITS       TIOCM_OUT2      /* IRDA support */ - -/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ - -#ifdef __KERNEL__  #include <asm-generic/termios-base.h> -#endif -  #endif /* _ASM_TERMIOS_H */ diff --git a/arch/frv/include/asm/thread_info.h b/arch/frv/include/asm/thread_info.h index 11f33ead29b..af29e17c018 100644 --- a/arch/frv/include/asm/thread_info.h +++ b/arch/frv/include/asm/thread_info.h @@ -52,8 +52,6 @@ struct thread_info {  #endif -#define PREEMPT_ACTIVE		0x10000000 -  /*   * macros/functions for gaining access to the thread information structure   */ @@ -80,24 +78,6 @@ register struct thread_info *__current_thread_info asm("gr15");  #define current_thread_info() ({ __current_thread_info; }) -#define __HAVE_ARCH_THREAD_INFO_ALLOCATOR - -/* thread information allocation */ -#ifdef CONFIG_DEBUG_STACK_USAGE -#define alloc_thread_info(tsk)					\ -	({							\ -		struct thread_info *ret;			\ -								\ -		ret = kzalloc(THREAD_SIZE, GFP_KERNEL);		\ -								\ -		ret;						\ -	}) -#else -#define alloc_thread_info(tsk)	kmalloc(THREAD_SIZE, GFP_KERNEL) -#endif - -#define free_thread_info(info)	kfree(info) -  #endif /* __ASSEMBLY__ */  /* @@ -112,21 +92,24 @@ register struct thread_info *__current_thread_info asm("gr15");  #define TIF_NEED_RESCHED	3	/* rescheduling necessary */  #define TIF_SINGLESTEP		4	/* restore singlestep on return to user mode */  #define TIF_RESTORE_SIGMASK	5	/* restore signal mask in do_signal() */ -#define TIF_POLLING_NRFLAG	16	/* true if poll_idle() is polling TIF_NEED_RESCHED */ -#define TIF_MEMDIE		17	/* is terminating due to OOM killer */ -#define TIF_FREEZE		18	/* freezing for suspend */ +#define TIF_MEMDIE		7	/* is terminating due to OOM killer */  #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)  #define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)  #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)  #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)  #define _TIF_SINGLESTEP		(1 << TIF_SINGLESTEP) -#define _TIF_RESTORE_SIGMASK	(1 << TIF_RESTORE_SIGMASK) -#define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG) -#define _TIF_FREEZE		(1 << TIF_FREEZE) -#define _TIF_WORK_MASK		0x0000FFFE	/* work to do on interrupt/exception return */ -#define _TIF_ALLWORK_MASK	0x0000FFFF	/* work to do on any return to u-space */ +/* work to do on interrupt/exception return */ +#define _TIF_WORK_MASK		\ +	(_TIF_NOTIFY_RESUME | _TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_SINGLESTEP) + +/* work to do on any return to u-space */ +#define _TIF_ALLWORK_MASK	(_TIF_WORK_MASK | _TIF_SYSCALL_TRACE) + +#if _TIF_ALLWORK_MASK >= 0x2000 +#error "_TIF_ALLWORK_MASK won't fit in an ANDI now (see entry.S)" +#endif  /*   * Thread-synchronous status. diff --git a/arch/frv/include/asm/types.h b/arch/frv/include/asm/types.h index 613bf1e962f..6bc63650d83 100644 --- a/arch/frv/include/asm/types.h +++ b/arch/frv/include/asm/types.h @@ -8,33 +8,15 @@   * as published by the Free Software Foundation; either version   * 2 of the License, or (at your option) any later version.   */ -  #ifndef _ASM_TYPES_H  #define _ASM_TYPES_H -#include <asm-generic/int-ll64.h> - -#ifndef __ASSEMBLY__ - -typedef unsigned short umode_t; - -#endif /* __ASSEMBLY__ */ +#include <uapi/asm/types.h>  /*   * These aren't exported outside the kernel to avoid name space clashes   */ -#ifdef __KERNEL__  #define BITS_PER_LONG 32 -#ifndef __ASSEMBLY__ - -/* Dma addresses are 32-bits wide.  */ - -typedef u32 dma_addr_t; - -#endif /* __ASSEMBLY__ */ - -#endif /* __KERNEL__ */ -  #endif /* _ASM_TYPES_H */ diff --git a/arch/frv/include/asm/uaccess.h b/arch/frv/include/asm/uaccess.h index 0b67ec5b441..3ac9a59d65d 100644 --- a/arch/frv/include/asm/uaccess.h +++ b/arch/frv/include/asm/uaccess.h @@ -280,14 +280,14 @@ extern long __memcpy_user(void *dst, const void *src, unsigned long count);  static inline unsigned long __must_check  __copy_to_user(void __user *to, const void *from, unsigned long n)  { -       might_sleep(); +       might_fault();         return __copy_to_user_inatomic(to, from, n);  }  static inline unsigned long  __copy_from_user(void *to, const void __user *from, unsigned long n)  { -       might_sleep(); +       might_fault();         return __copy_from_user_inatomic(to, from, n);  } diff --git a/arch/frv/include/asm/unistd.h b/arch/frv/include/asm/unistd.h index b28da499e22..17b5df8fc28 100644 --- a/arch/frv/include/asm/unistd.h +++ b/arch/frv/include/asm/unistd.h @@ -1,354 +1,11 @@  #ifndef _ASM_UNISTD_H_  #define _ASM_UNISTD_H_ -/* - * This file contains the system call numbers. - */ +#include <uapi/asm/unistd.h> -#define __NR_restart_syscall      0 -#define __NR_exit		  1 -#define __NR_fork		  2 -#define __NR_read		  3 -#define __NR_write		  4 -#define __NR_open		  5 -#define __NR_close		  6 -#define __NR_waitpid		  7 -#define __NR_creat		  8 -#define __NR_link		  9 -#define __NR_unlink		 10 -#define __NR_execve		 11 -#define __NR_chdir		 12 -#define __NR_time		 13 -#define __NR_mknod		 14 -#define __NR_chmod		 15 -#define __NR_lchown		 16 -#define __NR_break		 17 -#define __NR_oldstat		 18 -#define __NR_lseek		 19 -#define __NR_getpid		 20 -#define __NR_mount		 21 -#define __NR_umount		 22 -#define __NR_setuid		 23 -#define __NR_getuid		 24 -#define __NR_stime		 25 -#define __NR_ptrace		 26 -#define __NR_alarm		 27 -#define __NR_oldfstat		 28 -#define __NR_pause		 29 -#define __NR_utime		 30 -#define __NR_stty		 31 -#define __NR_gtty		 32 -#define __NR_access		 33 -#define __NR_nice		 34 -#define __NR_ftime		 35 -#define __NR_sync		 36 -#define __NR_kill		 37 -#define __NR_rename		 38 -#define __NR_mkdir		 39 -#define __NR_rmdir		 40 -#define __NR_dup		 41 -#define __NR_pipe		 42 -#define __NR_times		 43 -#define __NR_prof		 44 -#define __NR_brk		 45 -#define __NR_setgid		 46 -#define __NR_getgid		 47 -#define __NR_signal		 48 -#define __NR_geteuid		 49 -#define __NR_getegid		 50 -#define __NR_acct		 51 -#define __NR_umount2		 52 -#define __NR_lock		 53 -#define __NR_ioctl		 54 -#define __NR_fcntl		 55 -#define __NR_mpx		 56 -#define __NR_setpgid		 57 -#define __NR_ulimit		 58 -// #define __NR_oldolduname	 /* 59 */ obsolete -#define __NR_umask		 60 -#define __NR_chroot		 61 -#define __NR_ustat		 62 -#define __NR_dup2		 63 -#define __NR_getppid		 64 -#define __NR_getpgrp		 65 -#define __NR_setsid		 66 -#define __NR_sigaction		 67 -#define __NR_sgetmask		 68 -#define __NR_ssetmask		 69 -#define __NR_setreuid		 70 -#define __NR_setregid		 71 -#define __NR_sigsuspend		 72 -#define __NR_sigpending		 73 -#define __NR_sethostname	 74 -#define __NR_setrlimit		 75 -#define __NR_getrlimit		 76	/* Back compatible 2Gig limited rlimit */ -#define __NR_getrusage		 77 -#define __NR_gettimeofday	 78 -#define __NR_settimeofday	 79 -#define __NR_getgroups		 80 -#define __NR_setgroups		 81 -#define __NR_select		 82 -#define __NR_symlink		 83 -#define __NR_oldlstat		 84 -#define __NR_readlink		 85 -#define __NR_uselib		 86 -#define __NR_swapon		 87 -#define __NR_reboot		 88 -#define __NR_readdir		 89 -// #define __NR_mmap		 90	/* obsolete - not implemented */ -#define __NR_munmap		 91 -#define __NR_truncate		 92 -#define __NR_ftruncate		 93 -#define __NR_fchmod		 94 -#define __NR_fchown		 95 -#define __NR_getpriority	 96 -#define __NR_setpriority	 97 -// #define __NR_profil		 /* 98 */ obsolete -#define __NR_statfs		 99 -#define __NR_fstatfs		100 -// #define __NR_ioperm		/* 101 */ not supported -#define __NR_socketcall		102 -#define __NR_syslog		103 -#define __NR_setitimer		104 -#define __NR_getitimer		105 -#define __NR_stat		106 -#define __NR_lstat		107 -#define __NR_fstat		108 -// #define __NR_olduname		/* 109 */ obsolete -// #define __NR_iopl		/* 110 */ not supported -#define __NR_vhangup		111 -// #define __NR_idle		/* 112 */ Obsolete -// #define __NR_vm86old		/* 113 */ not supported -#define __NR_wait4		114 -#define __NR_swapoff		115 -#define __NR_sysinfo		116 -#define __NR_ipc		117 -#define __NR_fsync		118 -#define __NR_sigreturn		119 -#define __NR_clone		120 -#define __NR_setdomainname	121 -#define __NR_uname		122 -// #define __NR_modify_ldt	/* 123 */ not supported -#define __NR_cacheflush		123 -#define __NR_adjtimex		124 -#define __NR_mprotect		125 -#define __NR_sigprocmask	126 -#define __NR_create_module	127 -#define __NR_init_module	128 -#define __NR_delete_module	129 -#define __NR_get_kernel_syms	130 -#define __NR_quotactl		131 -#define __NR_getpgid		132 -#define __NR_fchdir		133 -#define __NR_bdflush		134 -#define __NR_sysfs		135 -#define __NR_personality	136 -#define __NR_afs_syscall	137 /* Syscall for Andrew File System */ -#define __NR_setfsuid		138 -#define __NR_setfsgid		139 -#define __NR__llseek		140 -#define __NR_getdents		141 -#define __NR__newselect		142 -#define __NR_flock		143 -#define __NR_msync		144 -#define __NR_readv		145 -#define __NR_writev		146 -#define __NR_getsid		147 -#define __NR_fdatasync		148 -#define __NR__sysctl		149 -#define __NR_mlock		150 -#define __NR_munlock		151 -#define __NR_mlockall		152 -#define __NR_munlockall		153 -#define __NR_sched_setparam		154 -#define __NR_sched_getparam		155 -#define __NR_sched_setscheduler		156 -#define __NR_sched_getscheduler		157 -#define __NR_sched_yield		158 -#define __NR_sched_get_priority_max	159 -#define __NR_sched_get_priority_min	160 -#define __NR_sched_rr_get_interval	161 -#define __NR_nanosleep		162 -#define __NR_mremap		163 -#define __NR_setresuid		164 -#define __NR_getresuid		165 -// #define __NR_vm86		/* 166 */ not supported -#define __NR_query_module	167 -#define __NR_poll		168 -#define __NR_nfsservctl		169 -#define __NR_setresgid		170 -#define __NR_getresgid		171 -#define __NR_prctl		172 -#define __NR_rt_sigreturn	173 -#define __NR_rt_sigaction	174 -#define __NR_rt_sigprocmask	175 -#define __NR_rt_sigpending	176 -#define __NR_rt_sigtimedwait	177 -#define __NR_rt_sigqueueinfo	178 -#define __NR_rt_sigsuspend	179 -#define __NR_pread64		180 -#define __NR_pwrite64		181 -#define __NR_chown		182 -#define __NR_getcwd		183 -#define __NR_capget		184 -#define __NR_capset		185 -#define __NR_sigaltstack	186 -#define __NR_sendfile		187 -#define __NR_getpmsg		188	/* some people actually want streams */ -#define __NR_putpmsg		189	/* some people actually want streams */ -#define __NR_vfork		190 -#define __NR_ugetrlimit		191	/* SuS compliant getrlimit */ -#define __NR_mmap2		192 -#define __NR_truncate64		193 -#define __NR_ftruncate64	194 -#define __NR_stat64		195 -#define __NR_lstat64		196 -#define __NR_fstat64		197 -#define __NR_lchown32		198 -#define __NR_getuid32		199 -#define __NR_getgid32		200 -#define __NR_geteuid32		201 -#define __NR_getegid32		202 -#define __NR_setreuid32		203 -#define __NR_setregid32		204 -#define __NR_getgroups32	205 -#define __NR_setgroups32	206 -#define __NR_fchown32		207 -#define __NR_setresuid32	208 -#define __NR_getresuid32	209 -#define __NR_setresgid32	210 -#define __NR_getresgid32	211 -#define __NR_chown32		212 -#define __NR_setuid32		213 -#define __NR_setgid32		214 -#define __NR_setfsuid32		215 -#define __NR_setfsgid32		216 -#define __NR_pivot_root		217 -#define __NR_mincore		218 -#define __NR_madvise		219 -#define __NR_getdents64		220 -#define __NR_fcntl64		221 -#define __NR_security		223	/* syscall for security modules */ -#define __NR_gettid		224 -#define __NR_readahead		225 -#define __NR_setxattr		226 -#define __NR_lsetxattr		227 -#define __NR_fsetxattr		228 -#define __NR_getxattr		229 -#define __NR_lgetxattr		230 -#define __NR_fgetxattr		231 -#define __NR_listxattr		232 -#define __NR_llistxattr		233 -#define __NR_flistxattr		234 -#define __NR_removexattr	235 -#define __NR_lremovexattr	236 -#define __NR_fremovexattr	237 -#define __NR_tkill		238 -#define __NR_sendfile64		239 -#define __NR_futex		240 -#define __NR_sched_setaffinity	241 -#define __NR_sched_getaffinity	242 -#define __NR_set_thread_area	243 -#define __NR_get_thread_area	244 -#define __NR_io_setup		245 -#define __NR_io_destroy		246 -#define __NR_io_getevents	247 -#define __NR_io_submit		248 -#define __NR_io_cancel		249 -#define __NR_fadvise64		250 +#define NR_syscalls 338 -#define __NR_exit_group		252 -#define __NR_lookup_dcookie	253 -#define __NR_epoll_create	254 -#define __NR_epoll_ctl		255 -#define __NR_epoll_wait		256 -#define __NR_remap_file_pages	257 -#define __NR_set_tid_address	258 -#define __NR_timer_create	259 -#define __NR_timer_settime	(__NR_timer_create+1) -#define __NR_timer_gettime	(__NR_timer_create+2) -#define __NR_timer_getoverrun	(__NR_timer_create+3) -#define __NR_timer_delete	(__NR_timer_create+4) -#define __NR_clock_settime	(__NR_timer_create+5) -#define __NR_clock_gettime	(__NR_timer_create+6) -#define __NR_clock_getres	(__NR_timer_create+7) -#define __NR_clock_nanosleep	(__NR_timer_create+8) -#define __NR_statfs64		268 -#define __NR_fstatfs64		269 -#define __NR_tgkill		270 -#define __NR_utimes		271 -#define __NR_fadvise64_64	272 -#define __NR_vserver		273 -#define __NR_mbind		274 -#define __NR_get_mempolicy	275 -#define __NR_set_mempolicy	276 -#define __NR_mq_open 		277 -#define __NR_mq_unlink		(__NR_mq_open+1) -#define __NR_mq_timedsend	(__NR_mq_open+2) -#define __NR_mq_timedreceive	(__NR_mq_open+3) -#define __NR_mq_notify		(__NR_mq_open+4) -#define __NR_mq_getsetattr	(__NR_mq_open+5) -#define __NR_kexec_load		283 -#define __NR_waitid		284 -/* #define __NR_sys_setaltroot	285 */ -#define __NR_add_key		286 -#define __NR_request_key	287 -#define __NR_keyctl		288 -#define __NR_ioprio_set		289 -#define __NR_ioprio_get		290 -#define __NR_inotify_init	291 -#define __NR_inotify_add_watch	292 -#define __NR_inotify_rm_watch	293 -#define __NR_migrate_pages	294 -#define __NR_openat		295 -#define __NR_mkdirat		296 -#define __NR_mknodat		297 -#define __NR_fchownat		298 -#define __NR_futimesat		299 -#define __NR_fstatat64		300 -#define __NR_unlinkat		301 -#define __NR_renameat		302 -#define __NR_linkat		303 -#define __NR_symlinkat		304 -#define __NR_readlinkat		305 -#define __NR_fchmodat		306 -#define __NR_faccessat		307 -#define __NR_pselect6		308 -#define __NR_ppoll		309 -#define __NR_unshare		310 -#define __NR_set_robust_list	311 -#define __NR_get_robust_list	312 -#define __NR_splice		313 -#define __NR_sync_file_range	314 -#define __NR_tee		315 -#define __NR_vmsplice		316 -#define __NR_move_pages		317 -#define __NR_getcpu		318 -#define __NR_epoll_pwait	319 -#define __NR_utimensat		320 -#define __NR_signalfd		321 -#define __NR_timerfd_create	322 -#define __NR_eventfd		323 -#define __NR_fallocate		324 -#define __NR_timerfd_settime	325 -#define __NR_timerfd_gettime	326 -#define __NR_signalfd4		327 -#define __NR_eventfd2		328 -#define __NR_epoll_create1	329 -#define __NR_dup3		330 -#define __NR_pipe2		331 -#define __NR_inotify_init1	332 -#define __NR_preadv		333 -#define __NR_pwritev		334 -#define __NR_rt_tgsigqueueinfo	335 -#define __NR_perf_event_open	336 - -#ifdef __KERNEL__ - -#define NR_syscalls 337 - -#define __ARCH_WANT_IPC_PARSE_VERSION  /* #define __ARCH_WANT_OLD_READDIR */  #define __ARCH_WANT_OLD_STAT  #define __ARCH_WANT_STAT64 @@ -356,7 +13,6 @@  /* #define __ARCH_WANT_SYS_GETHOSTNAME */  #define __ARCH_WANT_SYS_IPC  #define __ARCH_WANT_SYS_PAUSE -/* #define __ARCH_WANT_SYS_SGETMASK */  /* #define __ARCH_WANT_SYS_SIGNAL */  #define __ARCH_WANT_SYS_TIME  #define __ARCH_WANT_SYS_UTIME @@ -370,18 +26,8 @@  #define __ARCH_WANT_SYS_OLDUMOUNT  /* #define __ARCH_WANT_SYS_SIGPENDING */  #define __ARCH_WANT_SYS_SIGPROCMASK -#define __ARCH_WANT_SYS_RT_SIGACTION -#define __ARCH_WANT_SYS_RT_SIGSUSPEND - -/* - * "Conditional" syscalls - * - * What we want is __attribute__((weak,alias("sys_ni_syscall"))), - * but it doesn't work on all toolchains, so we just do it by hand - */ -#ifndef cond_syscall -#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall") -#endif +#define __ARCH_WANT_SYS_FORK +#define __ARCH_WANT_SYS_VFORK +#define __ARCH_WANT_SYS_CLONE -#endif /* __KERNEL__ */  #endif /* _ASM_UNISTD_H_ */ diff --git a/arch/frv/include/asm/virtconvert.h b/arch/frv/include/asm/virtconvert.h index 59788fa2a81..b26d70ab911 100644 --- a/arch/frv/include/asm/virtconvert.h +++ b/arch/frv/include/asm/virtconvert.h @@ -1,4 +1,4 @@ -/* virtconvert.h: virtual/physical/page address convertion +/* virtconvert.h: virtual/physical/page address conversion   *   * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.   * Written by David Howells (dhowells@redhat.com) diff --git a/arch/frv/include/uapi/asm/Kbuild b/arch/frv/include/uapi/asm/Kbuild new file mode 100644 index 00000000000..42a2b33461c --- /dev/null +++ b/arch/frv/include/uapi/asm/Kbuild @@ -0,0 +1,35 @@ +# UAPI Header export list +include include/uapi/asm-generic/Kbuild.asm + +header-y += auxvec.h +header-y += bitsperlong.h +header-y += byteorder.h +header-y += errno.h +header-y += fcntl.h +header-y += ioctl.h +header-y += ioctls.h +header-y += ipcbuf.h +header-y += kvm_para.h +header-y += mman.h +header-y += msgbuf.h +header-y += param.h +header-y += poll.h +header-y += posix_types.h +header-y += ptrace.h +header-y += registers.h +header-y += resource.h +header-y += sembuf.h +header-y += setup.h +header-y += shmbuf.h +header-y += sigcontext.h +header-y += siginfo.h +header-y += signal.h +header-y += socket.h +header-y += sockios.h +header-y += stat.h +header-y += statfs.h +header-y += swab.h +header-y += termbits.h +header-y += termios.h +header-y += types.h +header-y += unistd.h diff --git a/arch/frv/include/asm/auxvec.h b/arch/frv/include/uapi/asm/auxvec.h index 07710778fa1..07710778fa1 100644 --- a/arch/frv/include/asm/auxvec.h +++ b/arch/frv/include/uapi/asm/auxvec.h diff --git a/arch/frv/include/asm/bitsperlong.h b/arch/frv/include/uapi/asm/bitsperlong.h index 6dc0bb0c13b..6dc0bb0c13b 100644 --- a/arch/frv/include/asm/bitsperlong.h +++ b/arch/frv/include/uapi/asm/bitsperlong.h diff --git a/arch/frv/include/asm/byteorder.h b/arch/frv/include/uapi/asm/byteorder.h index f29b7593e08..f29b7593e08 100644 --- a/arch/frv/include/asm/byteorder.h +++ b/arch/frv/include/uapi/asm/byteorder.h diff --git a/arch/frv/include/asm/errno.h b/arch/frv/include/uapi/asm/errno.h index d010795ceef..d010795ceef 100644 --- a/arch/frv/include/asm/errno.h +++ b/arch/frv/include/uapi/asm/errno.h diff --git a/arch/frv/include/asm/fcntl.h b/arch/frv/include/uapi/asm/fcntl.h index 46ab12db573..46ab12db573 100644 --- a/arch/frv/include/asm/fcntl.h +++ b/arch/frv/include/uapi/asm/fcntl.h diff --git a/arch/frv/include/asm/ioctl.h b/arch/frv/include/uapi/asm/ioctl.h index b279fe06dfe..b279fe06dfe 100644 --- a/arch/frv/include/asm/ioctl.h +++ b/arch/frv/include/uapi/asm/ioctl.h diff --git a/arch/frv/include/asm/ioctls.h b/arch/frv/include/uapi/asm/ioctls.h index 2f9fb436ec3..2f9fb436ec3 100644 --- a/arch/frv/include/asm/ioctls.h +++ b/arch/frv/include/uapi/asm/ioctls.h diff --git a/arch/frv/include/uapi/asm/ipcbuf.h b/arch/frv/include/uapi/asm/ipcbuf.h new file mode 100644 index 00000000000..84c7e51cb6d --- /dev/null +++ b/arch/frv/include/uapi/asm/ipcbuf.h @@ -0,0 +1 @@ +#include <asm-generic/ipcbuf.h> diff --git a/arch/frv/include/uapi/asm/kvm_para.h b/arch/frv/include/uapi/asm/kvm_para.h new file mode 100644 index 00000000000..14fab8f0b95 --- /dev/null +++ b/arch/frv/include/uapi/asm/kvm_para.h @@ -0,0 +1 @@ +#include <asm-generic/kvm_para.h> diff --git a/arch/frv/include/asm/mman.h b/arch/frv/include/uapi/asm/mman.h index 8eebf89f5ab..8eebf89f5ab 100644 --- a/arch/frv/include/asm/mman.h +++ b/arch/frv/include/uapi/asm/mman.h diff --git a/arch/frv/include/asm/msgbuf.h b/arch/frv/include/uapi/asm/msgbuf.h index 97ceb55a06f..97ceb55a06f 100644 --- a/arch/frv/include/asm/msgbuf.h +++ b/arch/frv/include/uapi/asm/msgbuf.h diff --git a/arch/frv/include/uapi/asm/param.h b/arch/frv/include/uapi/asm/param.h new file mode 100644 index 00000000000..a52dca9a956 --- /dev/null +++ b/arch/frv/include/uapi/asm/param.h @@ -0,0 +1,8 @@ +#ifndef _ASM_PARAM_H +#define _ASM_PARAM_H + +#define EXEC_PAGESIZE	16384 + +#include <asm-generic/param.h> + +#endif /* _ASM_PARAM_H */ diff --git a/arch/frv/include/asm/poll.h b/arch/frv/include/uapi/asm/poll.h index 0d01479ccc5..0d01479ccc5 100644 --- a/arch/frv/include/asm/poll.h +++ b/arch/frv/include/uapi/asm/poll.h diff --git a/arch/frv/include/uapi/asm/posix_types.h b/arch/frv/include/uapi/asm/posix_types.h new file mode 100644 index 00000000000..fe512af74a5 --- /dev/null +++ b/arch/frv/include/uapi/asm/posix_types.h @@ -0,0 +1,26 @@ +#ifndef _ASM_POSIX_TYPES_H +#define _ASM_POSIX_TYPES_H + +/* + * This file is generally used by user-level software, so you need to + * be a little careful about namespace pollution etc.  Also, we cannot + * assume GCC is being used. + */ + +typedef unsigned short	__kernel_mode_t; +#define __kernel_mode_t __kernel_mode_t + +typedef unsigned short	__kernel_ipc_pid_t; +#define __kernel_ipc_pid_t __kernel_ipc_pid_t + +typedef unsigned short	__kernel_uid_t; +typedef unsigned short	__kernel_gid_t; +#define __kernel_uid_t __kernel_uid_t + +typedef unsigned short	__kernel_old_dev_t; +#define __kernel_old_dev_t __kernel_old_dev_t + +#include <asm-generic/posix_types.h> + +#endif + diff --git a/arch/frv/include/uapi/asm/ptrace.h b/arch/frv/include/uapi/asm/ptrace.h new file mode 100644 index 00000000000..3887e493468 --- /dev/null +++ b/arch/frv/include/uapi/asm/ptrace.h @@ -0,0 +1,60 @@ +/* ptrace.h: ptrace() relevant definitions + * + * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ +#ifndef _UAPI_ASM_PTRACE_H +#define _UAPI_ASM_PTRACE_H + +#include <asm/registers.h> + + +#define PT_PSR		0 +#define	PT_ISR		1 +#define PT_CCR		2 +#define PT_CCCR		3 +#define PT_LR		4 +#define PT_LCR		5 +#define PT_PC		6 + +#define PT__STATUS	7	/* exception status */ +#define PT_SYSCALLNO	8	/* syscall number or -1 */ +#define PT_ORIG_GR8	9	/* saved GR8 for signal handling */ +#define PT_GNER0	10 +#define PT_GNER1	11 +#define PT_IACC0H	12 +#define PT_IACC0L	13 + +#define PT_GR(j)	( 14 + (j))	/* GRj for 0<=j<=63 */ +#define PT_FR(j)	( 78 + (j))	/* FRj for 0<=j<=63 */ +#define PT_FNER(j)	(142 + (j))	/* FNERj for 0<=j<=1 */ +#define PT_MSR(j)	(144 + (j))	/* MSRj for 0<=j<=2 */ +#define PT_ACC(j)	(146 + (j))	/* ACCj for 0<=j<=7 */ +#define PT_ACCG(jklm)	(154 + (jklm))	/* ACCGjklm for 0<=jklm<=1 (reads four regs per slot) */ +#define PT_FSR(j)	(156 + (j))	/* FSRj for 0<=j<=0 */ +#define PT__GPEND	78 +#define PT__END		157 + +#define PT_TBR		PT_GR(0) +#define PT_SP		PT_GR(1) +#define PT_FP		PT_GR(2) +#define PT_PREV_FRAME	PT_GR(28)	/* previous exception frame pointer (old gr28 value) */ +#define PT_CURR_TASK	PT_GR(29)	/* current task */ + + +/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ +#define PTRACE_GETREGS		12 +#define PTRACE_SETREGS		13 +#define PTRACE_GETFPREGS	14 +#define PTRACE_SETFPREGS	15 +#define PTRACE_GETFDPIC		31	/* get the ELF fdpic loadmap address */ + +#define PTRACE_GETFDPIC_EXEC	0	/* [addr] request the executable loadmap */ +#define PTRACE_GETFDPIC_INTERP	1	/* [addr] request the interpreter loadmap */ + +#endif /* _UAPI_ASM_PTRACE_H */ diff --git a/arch/frv/include/asm/registers.h b/arch/frv/include/uapi/asm/registers.h index 9666119fcf6..9666119fcf6 100644 --- a/arch/frv/include/asm/registers.h +++ b/arch/frv/include/uapi/asm/registers.h diff --git a/arch/frv/include/asm/resource.h b/arch/frv/include/uapi/asm/resource.h index 5fc60548fd0..5fc60548fd0 100644 --- a/arch/frv/include/asm/resource.h +++ b/arch/frv/include/uapi/asm/resource.h diff --git a/arch/frv/include/asm/sembuf.h b/arch/frv/include/uapi/asm/sembuf.h index 164b12786d6..164b12786d6 100644 --- a/arch/frv/include/asm/sembuf.h +++ b/arch/frv/include/uapi/asm/sembuf.h diff --git a/arch/frv/include/asm/suspend.h b/arch/frv/include/uapi/asm/setup.h index 5fa7b5a6ee4..fbf3fc96aae 100644 --- a/arch/frv/include/asm/suspend.h +++ b/arch/frv/include/uapi/asm/setup.h @@ -1,4 +1,4 @@ -/* suspend.h: suspension stuff +/* setup.h: setup stuff   *   * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.   * Written by David Howells (dhowells@redhat.com) @@ -9,12 +9,10 @@   * 2 of the License, or (at your option) any later version.   */ -#ifndef _ASM_SUSPEND_H -#define _ASM_SUSPEND_H +#ifndef _UAPI_ASM_SETUP_H +#define _UAPI_ASM_SETUP_H -static inline int arch_prepare_suspend(void) -{ -	return 0; -} +#define COMMAND_LINE_SIZE       512 -#endif /* _ASM_SUSPEND_H */ + +#endif /* _UAPI_ASM_SETUP_H */ diff --git a/arch/frv/include/asm/shmbuf.h b/arch/frv/include/uapi/asm/shmbuf.h index 4c6e711a477..4c6e711a477 100644 --- a/arch/frv/include/asm/shmbuf.h +++ b/arch/frv/include/uapi/asm/shmbuf.h diff --git a/arch/frv/include/asm/sigcontext.h b/arch/frv/include/uapi/asm/sigcontext.h index 3b263f3cc96..3b263f3cc96 100644 --- a/arch/frv/include/asm/sigcontext.h +++ b/arch/frv/include/uapi/asm/sigcontext.h diff --git a/arch/frv/include/asm/siginfo.h b/arch/frv/include/uapi/asm/siginfo.h index d3fd1ca4565..d3fd1ca4565 100644 --- a/arch/frv/include/asm/siginfo.h +++ b/arch/frv/include/uapi/asm/siginfo.h diff --git a/arch/frv/include/uapi/asm/signal.h b/arch/frv/include/uapi/asm/signal.h new file mode 100644 index 00000000000..bf3b162f9be --- /dev/null +++ b/arch/frv/include/uapi/asm/signal.h @@ -0,0 +1,36 @@ +#ifndef _UAPI_ASM_SIGNAL_H +#define _UAPI_ASM_SIGNAL_H + +#include <linux/types.h> + +#ifndef __KERNEL__ +/* Here we must cater to libcs that poke about in kernel headers.  */ + +#define NSIG		32 +typedef unsigned long sigset_t; + +#endif /* !__KERNEL__ */ + +#define SA_RESTORER	0x04000000 /* to get struct sigaction correct */ + +#include <asm-generic/signal.h> + +#ifndef __KERNEL__ +/* Here we must cater to libcs that poke about in kernel headers.  */ + +struct sigaction { +	union { +	  __sighandler_t _sa_handler; +	  void (*_sa_sigaction)(int, struct siginfo *, void *); +	} _u; +	sigset_t sa_mask; +	unsigned long sa_flags; +	void (*sa_restorer)(void); +}; + +#define sa_handler	_u._sa_handler +#define sa_sigaction	_u._sa_sigaction + +#endif /* __KERNEL__ */ + +#endif /* _UAPI_ASM_SIGNAL_H */ diff --git a/arch/frv/include/asm/socket.h b/arch/frv/include/uapi/asm/socket.h index a6b26880c1e..ca2c6e6f31c 100644 --- a/arch/frv/include/asm/socket.h +++ b/arch/frv/include/uapi/asm/socket.h @@ -22,7 +22,7 @@  #define SO_PRIORITY	12  #define SO_LINGER	13  #define SO_BSDCOMPAT	14 -/* To add :#define SO_REUSEPORT 15 */ +#define SO_REUSEPORT	15  #define SO_PASSCRED	16  #define SO_PEERCRED	17  #define SO_RCVLOWAT	18 @@ -40,6 +40,7 @@  /* Socket filtering */  #define SO_ATTACH_FILTER        26  #define SO_DETACH_FILTER        27 +#define SO_GET_FILTER		SO_ATTACH_FILTER  #define SO_PEERNAME             28  #define SO_TIMESTAMP		29 @@ -62,5 +63,22 @@  #define SO_RXQ_OVFL             40 +#define SO_WIFI_STATUS		41 +#define SCM_WIFI_STATUS		SO_WIFI_STATUS +#define SO_PEEK_OFF		42 + +/* Instruct lower device to use last 4-bytes of skb data as FCS */ +#define SO_NOFCS		43 + +#define SO_LOCK_FILTER		44 + +#define SO_SELECT_ERR_QUEUE	45 + +#define SO_BUSY_POLL		46 + +#define SO_MAX_PACING_RATE	47 + +#define SO_BPF_EXTENSIONS	48 +  #endif /* _ASM_SOCKET_H */ diff --git a/arch/frv/include/asm/sockios.h b/arch/frv/include/uapi/asm/sockios.h index 5dbdd13e6de..5dbdd13e6de 100644 --- a/arch/frv/include/asm/sockios.h +++ b/arch/frv/include/uapi/asm/sockios.h diff --git a/arch/frv/include/asm/stat.h b/arch/frv/include/uapi/asm/stat.h index ce56de9b37b..ce56de9b37b 100644 --- a/arch/frv/include/asm/stat.h +++ b/arch/frv/include/uapi/asm/stat.h diff --git a/arch/frv/include/asm/statfs.h b/arch/frv/include/uapi/asm/statfs.h index 741f586045b..741f586045b 100644 --- a/arch/frv/include/asm/statfs.h +++ b/arch/frv/include/uapi/asm/statfs.h diff --git a/arch/frv/include/asm/swab.h b/arch/frv/include/uapi/asm/swab.h index f305834b479..f305834b479 100644 --- a/arch/frv/include/asm/swab.h +++ b/arch/frv/include/uapi/asm/swab.h diff --git a/arch/frv/include/asm/termbits.h b/arch/frv/include/uapi/asm/termbits.h index 7722e19cc34..7722e19cc34 100644 --- a/arch/frv/include/asm/termbits.h +++ b/arch/frv/include/uapi/asm/termbits.h diff --git a/arch/frv/include/uapi/asm/termios.h b/arch/frv/include/uapi/asm/termios.h new file mode 100644 index 00000000000..edcc08a2238 --- /dev/null +++ b/arch/frv/include/uapi/asm/termios.h @@ -0,0 +1,46 @@ +#ifndef _UAPI_ASM_TERMIOS_H +#define _UAPI_ASM_TERMIOS_H + +#include <asm/termbits.h> +#include <asm/ioctls.h> + +struct winsize { +	unsigned short ws_row; +	unsigned short ws_col; +	unsigned short ws_xpixel; +	unsigned short ws_ypixel; +}; + +#define NCC 8 +struct termio { +	unsigned short c_iflag;		/* input mode flags */ +	unsigned short c_oflag;		/* output mode flags */ +	unsigned short c_cflag;		/* control mode flags */ +	unsigned short c_lflag;		/* local mode flags */ +	unsigned char c_line;		/* line discipline */ +	unsigned char c_cc[NCC];	/* control characters */ +}; + + +/* modem lines */ +#define TIOCM_LE	0x001 +#define TIOCM_DTR	0x002 +#define TIOCM_RTS	0x004 +#define TIOCM_ST	0x008 +#define TIOCM_SR	0x010 +#define TIOCM_CTS	0x020 +#define TIOCM_CAR	0x040 +#define TIOCM_RNG	0x080 +#define TIOCM_DSR	0x100 +#define TIOCM_CD	TIOCM_CAR +#define TIOCM_RI	TIOCM_RNG +#define TIOCM_OUT1	0x2000 +#define TIOCM_OUT2	0x4000 +#define TIOCM_LOOP	0x8000 + +#define TIOCM_MODEM_BITS       TIOCM_OUT2      /* IRDA support */ + +/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ + + +#endif /* _UAPI_ASM_TERMIOS_H */ diff --git a/arch/frv/include/uapi/asm/types.h b/arch/frv/include/uapi/asm/types.h new file mode 100644 index 00000000000..cf23149943f --- /dev/null +++ b/arch/frv/include/uapi/asm/types.h @@ -0,0 +1,11 @@ +/* types.h: FRV types + * + * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ +#include <asm-generic/int-ll64.h> diff --git a/arch/frv/include/uapi/asm/unistd.h b/arch/frv/include/uapi/asm/unistd.h new file mode 100644 index 00000000000..9e2612ff1c9 --- /dev/null +++ b/arch/frv/include/uapi/asm/unistd.h @@ -0,0 +1,348 @@ +#ifndef _UAPI_ASM_UNISTD_H_ +#define _UAPI_ASM_UNISTD_H_ + +/* + * This file contains the system call numbers. + */ + +#define __NR_restart_syscall      0 +#define __NR_exit		  1 +#define __NR_fork		  2 +#define __NR_read		  3 +#define __NR_write		  4 +#define __NR_open		  5 +#define __NR_close		  6 +#define __NR_waitpid		  7 +#define __NR_creat		  8 +#define __NR_link		  9 +#define __NR_unlink		 10 +#define __NR_execve		 11 +#define __NR_chdir		 12 +#define __NR_time		 13 +#define __NR_mknod		 14 +#define __NR_chmod		 15 +#define __NR_lchown		 16 +#define __NR_break		 17 +#define __NR_oldstat		 18 +#define __NR_lseek		 19 +#define __NR_getpid		 20 +#define __NR_mount		 21 +#define __NR_umount		 22 +#define __NR_setuid		 23 +#define __NR_getuid		 24 +#define __NR_stime		 25 +#define __NR_ptrace		 26 +#define __NR_alarm		 27 +#define __NR_oldfstat		 28 +#define __NR_pause		 29 +#define __NR_utime		 30 +#define __NR_stty		 31 +#define __NR_gtty		 32 +#define __NR_access		 33 +#define __NR_nice		 34 +#define __NR_ftime		 35 +#define __NR_sync		 36 +#define __NR_kill		 37 +#define __NR_rename		 38 +#define __NR_mkdir		 39 +#define __NR_rmdir		 40 +#define __NR_dup		 41 +#define __NR_pipe		 42 +#define __NR_times		 43 +#define __NR_prof		 44 +#define __NR_brk		 45 +#define __NR_setgid		 46 +#define __NR_getgid		 47 +#define __NR_signal		 48 +#define __NR_geteuid		 49 +#define __NR_getegid		 50 +#define __NR_acct		 51 +#define __NR_umount2		 52 +#define __NR_lock		 53 +#define __NR_ioctl		 54 +#define __NR_fcntl		 55 +#define __NR_mpx		 56 +#define __NR_setpgid		 57 +#define __NR_ulimit		 58 +// #define __NR_oldolduname	 /* 59 */ obsolete +#define __NR_umask		 60 +#define __NR_chroot		 61 +#define __NR_ustat		 62 +#define __NR_dup2		 63 +#define __NR_getppid		 64 +#define __NR_getpgrp		 65 +#define __NR_setsid		 66 +#define __NR_sigaction		 67 +#define __NR_sgetmask		 68 +#define __NR_ssetmask		 69 +#define __NR_setreuid		 70 +#define __NR_setregid		 71 +#define __NR_sigsuspend		 72 +#define __NR_sigpending		 73 +#define __NR_sethostname	 74 +#define __NR_setrlimit		 75 +#define __NR_getrlimit		 76	/* Back compatible 2Gig limited rlimit */ +#define __NR_getrusage		 77 +#define __NR_gettimeofday	 78 +#define __NR_settimeofday	 79 +#define __NR_getgroups		 80 +#define __NR_setgroups		 81 +#define __NR_select		 82 +#define __NR_symlink		 83 +#define __NR_oldlstat		 84 +#define __NR_readlink		 85 +#define __NR_uselib		 86 +#define __NR_swapon		 87 +#define __NR_reboot		 88 +#define __NR_readdir		 89 +// #define __NR_mmap		 90	/* obsolete - not implemented */ +#define __NR_munmap		 91 +#define __NR_truncate		 92 +#define __NR_ftruncate		 93 +#define __NR_fchmod		 94 +#define __NR_fchown		 95 +#define __NR_getpriority	 96 +#define __NR_setpriority	 97 +// #define __NR_profil		 /* 98 */ obsolete +#define __NR_statfs		 99 +#define __NR_fstatfs		100 +// #define __NR_ioperm		/* 101 */ not supported +#define __NR_socketcall		102 +#define __NR_syslog		103 +#define __NR_setitimer		104 +#define __NR_getitimer		105 +#define __NR_stat		106 +#define __NR_lstat		107 +#define __NR_fstat		108 +// #define __NR_olduname		/* 109 */ obsolete +// #define __NR_iopl		/* 110 */ not supported +#define __NR_vhangup		111 +// #define __NR_idle		/* 112 */ Obsolete +// #define __NR_vm86old		/* 113 */ not supported +#define __NR_wait4		114 +#define __NR_swapoff		115 +#define __NR_sysinfo		116 +#define __NR_ipc		117 +#define __NR_fsync		118 +#define __NR_sigreturn		119 +#define __NR_clone		120 +#define __NR_setdomainname	121 +#define __NR_uname		122 +// #define __NR_modify_ldt	/* 123 */ not supported +#define __NR_cacheflush		123 +#define __NR_adjtimex		124 +#define __NR_mprotect		125 +#define __NR_sigprocmask	126 +#define __NR_create_module	127 +#define __NR_init_module	128 +#define __NR_delete_module	129 +#define __NR_get_kernel_syms	130 +#define __NR_quotactl		131 +#define __NR_getpgid		132 +#define __NR_fchdir		133 +#define __NR_bdflush		134 +#define __NR_sysfs		135 +#define __NR_personality	136 +#define __NR_afs_syscall	137 /* Syscall for Andrew File System */ +#define __NR_setfsuid		138 +#define __NR_setfsgid		139 +#define __NR__llseek		140 +#define __NR_getdents		141 +#define __NR__newselect		142 +#define __NR_flock		143 +#define __NR_msync		144 +#define __NR_readv		145 +#define __NR_writev		146 +#define __NR_getsid		147 +#define __NR_fdatasync		148 +#define __NR__sysctl		149 +#define __NR_mlock		150 +#define __NR_munlock		151 +#define __NR_mlockall		152 +#define __NR_munlockall		153 +#define __NR_sched_setparam		154 +#define __NR_sched_getparam		155 +#define __NR_sched_setscheduler		156 +#define __NR_sched_getscheduler		157 +#define __NR_sched_yield		158 +#define __NR_sched_get_priority_max	159 +#define __NR_sched_get_priority_min	160 +#define __NR_sched_rr_get_interval	161 +#define __NR_nanosleep		162 +#define __NR_mremap		163 +#define __NR_setresuid		164 +#define __NR_getresuid		165 +// #define __NR_vm86		/* 166 */ not supported +#define __NR_query_module	167 +#define __NR_poll		168 +#define __NR_nfsservctl		169 +#define __NR_setresgid		170 +#define __NR_getresgid		171 +#define __NR_prctl		172 +#define __NR_rt_sigreturn	173 +#define __NR_rt_sigaction	174 +#define __NR_rt_sigprocmask	175 +#define __NR_rt_sigpending	176 +#define __NR_rt_sigtimedwait	177 +#define __NR_rt_sigqueueinfo	178 +#define __NR_rt_sigsuspend	179 +#define __NR_pread64		180 +#define __NR_pwrite64		181 +#define __NR_chown		182 +#define __NR_getcwd		183 +#define __NR_capget		184 +#define __NR_capset		185 +#define __NR_sigaltstack	186 +#define __NR_sendfile		187 +#define __NR_getpmsg		188	/* some people actually want streams */ +#define __NR_putpmsg		189	/* some people actually want streams */ +#define __NR_vfork		190 +#define __NR_ugetrlimit		191	/* SuS compliant getrlimit */ +#define __NR_mmap2		192 +#define __NR_truncate64		193 +#define __NR_ftruncate64	194 +#define __NR_stat64		195 +#define __NR_lstat64		196 +#define __NR_fstat64		197 +#define __NR_lchown32		198 +#define __NR_getuid32		199 +#define __NR_getgid32		200 +#define __NR_geteuid32		201 +#define __NR_getegid32		202 +#define __NR_setreuid32		203 +#define __NR_setregid32		204 +#define __NR_getgroups32	205 +#define __NR_setgroups32	206 +#define __NR_fchown32		207 +#define __NR_setresuid32	208 +#define __NR_getresuid32	209 +#define __NR_setresgid32	210 +#define __NR_getresgid32	211 +#define __NR_chown32		212 +#define __NR_setuid32		213 +#define __NR_setgid32		214 +#define __NR_setfsuid32		215 +#define __NR_setfsgid32		216 +#define __NR_pivot_root		217 +#define __NR_mincore		218 +#define __NR_madvise		219 + +#define __NR_getdents64		220 +#define __NR_fcntl64		221 +#define __NR_security		223	/* syscall for security modules */ +#define __NR_gettid		224 +#define __NR_readahead		225 +#define __NR_setxattr		226 +#define __NR_lsetxattr		227 +#define __NR_fsetxattr		228 +#define __NR_getxattr		229 +#define __NR_lgetxattr		230 +#define __NR_fgetxattr		231 +#define __NR_listxattr		232 +#define __NR_llistxattr		233 +#define __NR_flistxattr		234 +#define __NR_removexattr	235 +#define __NR_lremovexattr	236 +#define __NR_fremovexattr	237 +#define __NR_tkill		238 +#define __NR_sendfile64		239 +#define __NR_futex		240 +#define __NR_sched_setaffinity	241 +#define __NR_sched_getaffinity	242 +#define __NR_set_thread_area	243 +#define __NR_get_thread_area	244 +#define __NR_io_setup		245 +#define __NR_io_destroy		246 +#define __NR_io_getevents	247 +#define __NR_io_submit		248 +#define __NR_io_cancel		249 +#define __NR_fadvise64		250 + +#define __NR_exit_group		252 +#define __NR_lookup_dcookie	253 +#define __NR_epoll_create	254 +#define __NR_epoll_ctl		255 +#define __NR_epoll_wait		256 +#define __NR_remap_file_pages	257 +#define __NR_set_tid_address	258 +#define __NR_timer_create	259 +#define __NR_timer_settime	(__NR_timer_create+1) +#define __NR_timer_gettime	(__NR_timer_create+2) +#define __NR_timer_getoverrun	(__NR_timer_create+3) +#define __NR_timer_delete	(__NR_timer_create+4) +#define __NR_clock_settime	(__NR_timer_create+5) +#define __NR_clock_gettime	(__NR_timer_create+6) +#define __NR_clock_getres	(__NR_timer_create+7) +#define __NR_clock_nanosleep	(__NR_timer_create+8) +#define __NR_statfs64		268 +#define __NR_fstatfs64		269 +#define __NR_tgkill		270 +#define __NR_utimes		271 +#define __NR_fadvise64_64	272 +#define __NR_vserver		273 +#define __NR_mbind		274 +#define __NR_get_mempolicy	275 +#define __NR_set_mempolicy	276 +#define __NR_mq_open 		277 +#define __NR_mq_unlink		(__NR_mq_open+1) +#define __NR_mq_timedsend	(__NR_mq_open+2) +#define __NR_mq_timedreceive	(__NR_mq_open+3) +#define __NR_mq_notify		(__NR_mq_open+4) +#define __NR_mq_getsetattr	(__NR_mq_open+5) +#define __NR_kexec_load		283 +#define __NR_waitid		284 +/* #define __NR_sys_setaltroot	285 */ +#define __NR_add_key		286 +#define __NR_request_key	287 +#define __NR_keyctl		288 +#define __NR_ioprio_set		289 +#define __NR_ioprio_get		290 +#define __NR_inotify_init	291 +#define __NR_inotify_add_watch	292 +#define __NR_inotify_rm_watch	293 +#define __NR_migrate_pages	294 +#define __NR_openat		295 +#define __NR_mkdirat		296 +#define __NR_mknodat		297 +#define __NR_fchownat		298 +#define __NR_futimesat		299 +#define __NR_fstatat64		300 +#define __NR_unlinkat		301 +#define __NR_renameat		302 +#define __NR_linkat		303 +#define __NR_symlinkat		304 +#define __NR_readlinkat		305 +#define __NR_fchmodat		306 +#define __NR_faccessat		307 +#define __NR_pselect6		308 +#define __NR_ppoll		309 +#define __NR_unshare		310 +#define __NR_set_robust_list	311 +#define __NR_get_robust_list	312 +#define __NR_splice		313 +#define __NR_sync_file_range	314 +#define __NR_tee		315 +#define __NR_vmsplice		316 +#define __NR_move_pages		317 +#define __NR_getcpu		318 +#define __NR_epoll_pwait	319 +#define __NR_utimensat		320 +#define __NR_signalfd		321 +#define __NR_timerfd_create	322 +#define __NR_eventfd		323 +#define __NR_fallocate		324 +#define __NR_timerfd_settime	325 +#define __NR_timerfd_gettime	326 +#define __NR_signalfd4		327 +#define __NR_eventfd2		328 +#define __NR_epoll_create1	329 +#define __NR_dup3		330 +#define __NR_pipe2		331 +#define __NR_inotify_init1	332 +#define __NR_preadv		333 +#define __NR_pwritev		334 +#define __NR_rt_tgsigqueueinfo	335 +#define __NR_perf_event_open	336 +#define __NR_setns		337 + +#endif /* _UAPI_ASM_UNISTD_H_ */ diff --git a/arch/frv/kernel/Makefile b/arch/frv/kernel/Makefile index c36f70b6699..3cbb3294b9f 100644 --- a/arch/frv/kernel/Makefile +++ b/arch/frv/kernel/Makefile @@ -5,10 +5,10 @@  heads-y				:= head-uc-fr401.o head-uc-fr451.o head-uc-fr555.o  heads-$(CONFIG_MMU)		:= head-mmu-fr451.o -extra-y:= head.o init_task.o vmlinux.lds +extra-y:= head.o vmlinux.lds -obj-y := $(heads-y) entry.o entry-table.o break.o switch_to.o kernel_thread.o \ -	 kernel_execve.o process.o traps.o ptrace.o signal.o dma.o \ +obj-y := $(heads-y) entry.o entry-table.o break.o switch_to.o \ +	 process.o traps.o ptrace.o signal.o dma.o \  	 sys_frv.o time.o setup.o frv_ksyms.o \  	 debug-stub.o irq.o sleep.o uaccess.o diff --git a/arch/frv/kernel/debug-stub.c b/arch/frv/kernel/debug-stub.c index 2845139c807..a0228f717ef 100644 --- a/arch/frv/kernel/debug-stub.c +++ b/arch/frv/kernel/debug-stub.c @@ -17,7 +17,6 @@  #include <linux/serial_reg.h>  #include <linux/start_kernel.h> -#include <asm/system.h>  #include <asm/serial-regs.h>  #include <asm/timer-regs.h>  #include <asm/irc-regs.h> diff --git a/arch/frv/kernel/entry-table.S b/arch/frv/kernel/entry-table.S index bf35f33e48c..06c5ae191e5 100644 --- a/arch/frv/kernel/entry-table.S +++ b/arch/frv/kernel/entry-table.S @@ -86,7 +86,7 @@ __break_usertrap_fixup_table:  	.globl		__break_kerneltrap_fixup_table  __break_kerneltrap_fixup_table: -	# handler declaration for a sofware or program interrupt +	# handler declaration for a software or program interrupt  .macro VECTOR_SOFTPROG tbr_tt, vec  	.section .trap.user  	.org		\tbr_tt @@ -145,7 +145,7 @@ __break_kerneltrap_fixup_table:  	.long		\vec  .endm -	# handler declaration for an MMU only sofware or program interrupt +	# handler declaration for an MMU only software or program interrupt  .macro VECTOR_SP_MMU tbr_tt, vec  #ifdef CONFIG_MMU   	VECTOR_SOFTPROG	\tbr_tt, \vec diff --git a/arch/frv/kernel/entry.S b/arch/frv/kernel/entry.S index 63d579bf1c2..dfcd263c051 100644 --- a/arch/frv/kernel/entry.S +++ b/arch/frv/kernel/entry.S @@ -863,6 +863,14 @@ ret_from_fork:  	setlos.p	#0,gr8  	bra		__syscall_exit +	.globl		ret_from_kernel_thread +ret_from_kernel_thread: +	lddi.p		@(gr28,#REG_GR(8)),gr20 +	call		schedule_tail +	calll.p		@(gr21,gr0) +	or		gr20,gr20,gr8 +	bra		__syscall_exit +  ###################################################################################################  #  # Return to user mode is not as complex as all this looks, @@ -905,18 +913,19 @@ __syscall_call:  __syscall_exit:  	LEDS		0x6300 -	sti		gr8,@(gr28,#REG_GR(8))	; save return value +	# keep current PSR in GR23 +	movsg		psr,gr23 -	# rebuild saved psr - execve will change it for init/main.c  	ldi		@(gr28,#REG_PSR),gr22 + +	sti.p		gr8,@(gr28,#REG_GR(8))	; save return value + +	# rebuild saved psr - execve will change it for init/main.c  	srli		gr22,#1,gr5  	andi.p		gr22,#~PSR_PS,gr22  	andi		gr5,#PSR_PS,gr5  	or		gr5,gr22,gr22 -	ori		gr22,#PSR_S,gr22 - -	# keep current PSR in GR23 -	movsg		psr,gr23 +	ori.p		gr22,#PSR_S,gr22  	# make sure we don't miss an interrupt setting need_resched or sigpending between  	# sampling and the RETT @@ -924,9 +933,7 @@ __syscall_exit:  	movgs		gr23,psr  	ldi		@(gr15,#TI_FLAGS),gr4 -	sethi.p		%hi(_TIF_ALLWORK_MASK),gr5 -	setlo		%lo(_TIF_ALLWORK_MASK),gr5 -	andcc		gr4,gr5,gr0,icc0 +	andicc		gr4,#_TIF_ALLWORK_MASK,gr0,icc0  	bne		icc0,#0,__syscall_exit_work  	# restore all registers and return @@ -1068,27 +1075,10 @@ __entry_return_from_kernel_interrupt:  	subicc		gr5,#0,gr0,icc0  	beq		icc0,#0,__entry_return_direct -__entry_preempt_need_resched: -	ldi		@(gr15,#TI_FLAGS),gr4 -	andicc		gr4,#_TIF_NEED_RESCHED,gr0,icc0 -	beq		icc0,#1,__entry_return_direct - -	setlos		#PREEMPT_ACTIVE,gr5 -	sti		gr5,@(gr15,#TI_FLAGS) - -	andi		gr23,#~PSR_PIL,gr23 -	movgs		gr23,psr - -	call		schedule -	sti		gr0,@(gr15,#TI_PRE_COUNT) - -	movsg		psr,gr23 -	ori		gr23,#PSR_PIL_14,gr23 -	movgs		gr23,psr -	bra		__entry_preempt_need_resched -#else -	bra		__entry_return_direct +	subcc		gr0,gr0,gr0,icc2		/* set Z and clear C */ +	call		preempt_schedule_irq  #endif +	bra		__entry_return_direct  ############################################################################### @@ -1111,9 +1101,7 @@ __entry_resume_userspace:  __entry_return_from_user_interrupt:  	LEDS		0x6402  	ldi		@(gr15,#TI_FLAGS),gr4 -	sethi.p		%hi(_TIF_WORK_MASK),gr5 -	setlo		%lo(_TIF_WORK_MASK),gr5 -	andcc		gr4,gr5,gr0,icc0 +	andicc		gr4,#_TIF_WORK_MASK,gr0,icc0  	beq		icc0,#1,__entry_return_direct  __entry_work_pending: @@ -1133,9 +1121,7 @@ __entry_work_resched:  	LEDS		0x6401  	ldi		@(gr15,#TI_FLAGS),gr4 -	sethi.p		%hi(_TIF_WORK_MASK),gr5 -	setlo		%lo(_TIF_WORK_MASK),gr5 -	andcc		gr4,gr5,gr0,icc0 +	andicc		gr4,#_TIF_WORK_MASK,gr0,icc0  	beq		icc0,#1,__entry_return_direct  	andicc		gr4,#_TIF_NEED_RESCHED,gr0,icc0  	bne		icc0,#1,__entry_work_resched @@ -1163,7 +1149,9 @@ __syscall_trace_entry:  	# perform syscall exit tracing  __syscall_exit_work:  	LEDS		0x6340 -	andicc		gr4,#_TIF_SYSCALL_TRACE,gr0,icc0 +	andicc		gr22,#PSR_PS,gr0,icc1	; don't handle on return to kernel mode +	andicc.p	gr4,#_TIF_SYSCALL_TRACE,gr0,icc0 +	bne		icc1,#0,__entry_return_direct  	beq		icc0,#1,__entry_work_pending  	movsg		psr,gr23 @@ -1358,7 +1346,7 @@ sys_call_table:  	.long sys_ni_syscall	/* for vm86 */  	.long sys_ni_syscall	/* Old sys_query_module */  	.long sys_poll -	.long sys_nfsservctl +	.long sys_ni_syscall	/* Old nfsservctl */  	.long sys_setresgid16	/* 170 */  	.long sys_getresgid16  	.long sys_prctl @@ -1526,5 +1514,6 @@ sys_call_table:  	.long sys_pwritev  	.long sys_rt_tgsigqueueinfo	/* 335 */  	.long sys_perf_event_open +	.long sys_setns  syscall_table_size = (. - sys_call_table) diff --git a/arch/frv/kernel/frv_ksyms.c b/arch/frv/kernel/frv_ksyms.c index a89803b58b9..86c516d96dc 100644 --- a/arch/frv/kernel/frv_ksyms.c +++ b/arch/frv/kernel/frv_ksyms.c @@ -30,7 +30,6 @@ EXPORT_SYMBOL(ip_fast_csum);  EXPORT_SYMBOL(local_irq_count);  EXPORT_SYMBOL(local_bh_count);  #endif -EXPORT_SYMBOL(kernel_thread);  EXPORT_SYMBOL(__res_bus_clock_speed_HZ);  EXPORT_SYMBOL(__page_offset); diff --git a/arch/frv/kernel/futex.c b/arch/frv/kernel/futex.c index 14f64b054c7..d155ca9e509 100644 --- a/arch/frv/kernel/futex.c +++ b/arch/frv/kernel/futex.c @@ -18,7 +18,7 @@   * the various futex operations; MMU fault checking is ignored under no-MMU   * conditions   */ -static inline int atomic_futex_op_xchg_set(int oparg, int __user *uaddr, int *_oldval) +static inline int atomic_futex_op_xchg_set(int oparg, u32 __user *uaddr, int *_oldval)  {  	int oldval, ret; @@ -50,7 +50,7 @@ static inline int atomic_futex_op_xchg_set(int oparg, int __user *uaddr, int *_o  	return ret;  } -static inline int atomic_futex_op_xchg_add(int oparg, int __user *uaddr, int *_oldval) +static inline int atomic_futex_op_xchg_add(int oparg, u32 __user *uaddr, int *_oldval)  {  	int oldval, ret; @@ -83,7 +83,7 @@ static inline int atomic_futex_op_xchg_add(int oparg, int __user *uaddr, int *_o  	return ret;  } -static inline int atomic_futex_op_xchg_or(int oparg, int __user *uaddr, int *_oldval) +static inline int atomic_futex_op_xchg_or(int oparg, u32 __user *uaddr, int *_oldval)  {  	int oldval, ret; @@ -116,7 +116,7 @@ static inline int atomic_futex_op_xchg_or(int oparg, int __user *uaddr, int *_ol  	return ret;  } -static inline int atomic_futex_op_xchg_and(int oparg, int __user *uaddr, int *_oldval) +static inline int atomic_futex_op_xchg_and(int oparg, u32 __user *uaddr, int *_oldval)  {  	int oldval, ret; @@ -149,7 +149,7 @@ static inline int atomic_futex_op_xchg_and(int oparg, int __user *uaddr, int *_o  	return ret;  } -static inline int atomic_futex_op_xchg_xor(int oparg, int __user *uaddr, int *_oldval) +static inline int atomic_futex_op_xchg_xor(int oparg, u32 __user *uaddr, int *_oldval)  {  	int oldval, ret; @@ -186,7 +186,7 @@ static inline int atomic_futex_op_xchg_xor(int oparg, int __user *uaddr, int *_o  /*   * do the futex operations   */ -int futex_atomic_op_inuser(int encoded_op, int __user *uaddr) +int futex_atomic_op_inuser(int encoded_op, u32 __user *uaddr)  {  	int op = (encoded_op >> 28) & 7;  	int cmp = (encoded_op >> 24) & 15; @@ -197,7 +197,7 @@ int futex_atomic_op_inuser(int encoded_op, int __user *uaddr)  	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))  		oparg = 1 << oparg; -	if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) +	if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32)))  		return -EFAULT;  	pagefault_disable(); diff --git a/arch/frv/kernel/gdb-io.c b/arch/frv/kernel/gdb-io.c index 2ca641d199f..0707d35079b 100644 --- a/arch/frv/kernel/gdb-io.c +++ b/arch/frv/kernel/gdb-io.c @@ -19,7 +19,6 @@  #include <linux/serial_reg.h>  #include <asm/pgtable.h> -#include <asm/system.h>  #include <asm/irc-regs.h>  #include <asm/timer-regs.h>  #include <asm/gdb-stub.h> diff --git a/arch/frv/kernel/gdb-stub.c b/arch/frv/kernel/gdb-stub.c index a4dba6b20bd..bbe78b0bffe 100644 --- a/arch/frv/kernel/gdb-stub.c +++ b/arch/frv/kernel/gdb-stub.c @@ -126,7 +126,6 @@  #include <asm/asm-offsets.h>  #include <asm/pgtable.h> -#include <asm/system.h>  #include <asm/gdb-stub.h>  #define LEDS(x) do { /* *(u32*)0xe1200004 = ~(x); mb(); */ } while(0) @@ -672,7 +671,7 @@ static unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fa  	if ((uint32_t)mem&1 && count>=1) {  		if (!gdbstub_read_byte(mem,ch))  			return NULL; -		buf = pack_hex_byte(buf, ch[0]); +		buf = hex_byte_pack(buf, ch[0]);  		mem++;  		count--;  	} @@ -680,8 +679,8 @@ static unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fa  	if ((uint32_t)mem&3 && count>=2) {  		if (!gdbstub_read_word(mem,(uint16_t *)ch))  			return NULL; -		buf = pack_hex_byte(buf, ch[0]); -		buf = pack_hex_byte(buf, ch[1]); +		buf = hex_byte_pack(buf, ch[0]); +		buf = hex_byte_pack(buf, ch[1]);  		mem += 2;  		count -= 2;  	} @@ -689,10 +688,10 @@ static unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fa  	while (count>=4) {  		if (!gdbstub_read_dword(mem,(uint32_t *)ch))  			return NULL; -		buf = pack_hex_byte(buf, ch[0]); -		buf = pack_hex_byte(buf, ch[1]); -		buf = pack_hex_byte(buf, ch[2]); -		buf = pack_hex_byte(buf, ch[3]); +		buf = hex_byte_pack(buf, ch[0]); +		buf = hex_byte_pack(buf, ch[1]); +		buf = hex_byte_pack(buf, ch[2]); +		buf = hex_byte_pack(buf, ch[3]);  		mem += 4;  		count -= 4;  	} @@ -700,8 +699,8 @@ static unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fa  	if (count>=2) {  		if (!gdbstub_read_word(mem,(uint16_t *)ch))  			return NULL; -		buf = pack_hex_byte(buf, ch[0]); -		buf = pack_hex_byte(buf, ch[1]); +		buf = hex_byte_pack(buf, ch[0]); +		buf = hex_byte_pack(buf, ch[1]);  		mem += 2;  		count -= 2;  	} @@ -709,7 +708,7 @@ static unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fa  	if (count>=1) {  		if (!gdbstub_read_byte(mem,ch))  			return NULL; -		buf = pack_hex_byte(buf, ch[0]); +		buf = hex_byte_pack(buf, ch[0]);  	}  	*buf = 0; @@ -1498,21 +1497,21 @@ void gdbstub(int sigval)  		ptr = mem2hex(title, ptr, sizeof(title) - 1,0);  		hx = hex_asc_hi(brr >> 24); -		ptr = pack_hex_byte(ptr, hx); +		ptr = hex_byte_pack(ptr, hx);  		hx = hex_asc_lo(brr >> 24); -		ptr = pack_hex_byte(ptr, hx); +		ptr = hex_byte_pack(ptr, hx);  		hx = hex_asc_hi(brr >> 16); -		ptr = pack_hex_byte(ptr, hx); +		ptr = hex_byte_pack(ptr, hx);  		hx = hex_asc_lo(brr >> 16); -		ptr = pack_hex_byte(ptr, hx); +		ptr = hex_byte_pack(ptr, hx);  		hx = hex_asc_hi(brr >> 8); -		ptr = pack_hex_byte(ptr, hx); +		ptr = hex_byte_pack(ptr, hx);  		hx = hex_asc_lo(brr >> 8); -		ptr = pack_hex_byte(ptr, hx); +		ptr = hex_byte_pack(ptr, hx);  		hx = hex_asc_hi(brr); -		ptr = pack_hex_byte(ptr, hx); +		ptr = hex_byte_pack(ptr, hx);  		hx = hex_asc_lo(brr); -		ptr = pack_hex_byte(ptr, hx); +		ptr = hex_byte_pack(ptr, hx);  		ptr = mem2hex(crlf, ptr, sizeof(crlf) - 1, 0);  		*ptr = 0; @@ -1526,10 +1525,10 @@ void gdbstub(int sigval)  	/* Send trap type (converted to signal) */  	*ptr++ = 'T'; -	ptr = pack_hex_byte(ptr, sigval); +	ptr = hex_byte_pack(ptr, sigval);  	/* Send Error PC */ -	ptr = pack_hex_byte(ptr, GDB_REG_PC); +	ptr = hex_byte_pack(ptr, GDB_REG_PC);  	*ptr++ = ':';  	ptr = mem2hex(&__debug_frame->pc, ptr, 4, 0);  	*ptr++ = ';'; @@ -1537,7 +1536,7 @@ void gdbstub(int sigval)  	/*  	 * Send frame pointer  	 */ -	ptr = pack_hex_byte(ptr, GDB_REG_FP); +	ptr = hex_byte_pack(ptr, GDB_REG_FP);  	*ptr++ = ':';  	ptr = mem2hex(&__debug_frame->fp, ptr, 4, 0);  	*ptr++ = ';'; @@ -1545,7 +1544,7 @@ void gdbstub(int sigval)  	/*  	 * Send stack pointer  	 */ -	ptr = pack_hex_byte(ptr, GDB_REG_SP); +	ptr = hex_byte_pack(ptr, GDB_REG_SP);  	*ptr++ = ':';  	ptr = mem2hex(&__debug_frame->sp, ptr, 4, 0);  	*ptr++ = ';'; diff --git a/arch/frv/kernel/head.S b/arch/frv/kernel/head.S index e9a8cc63ac9..a7d0bea9c03 100644 --- a/arch/frv/kernel/head.S +++ b/arch/frv/kernel/head.S @@ -479,11 +479,6 @@ __head_mmu_enabled:  	LEDS		0x000c -	# initialise the processor and the peripherals -	#call		SYMBOL_NAME(processor_init) -	#call		SYMBOL_NAME(unit_init) -	#LEDS		0x0aff -  	sethi.p		#0xe5e5,gr3  	setlo		#0xe5e5,gr3  	or.p		gr3,gr0,gr4 diff --git a/arch/frv/kernel/init_task.c b/arch/frv/kernel/init_task.c deleted file mode 100644 index 3c3e0b336a9..00000000000 --- a/arch/frv/kernel/init_task.c +++ /dev/null @@ -1,32 +0,0 @@ -#include <linux/mm.h> -#include <linux/module.h> -#include <linux/sched.h> -#include <linux/init.h> -#include <linux/init_task.h> -#include <linux/fs.h> -#include <linux/mqueue.h> - -#include <asm/uaccess.h> -#include <asm/pgtable.h> - - -static struct signal_struct init_signals = INIT_SIGNALS(init_signals); -static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); -/* - * Initial thread structure. - * - * We need to make sure that this is THREAD_SIZE aligned due to the - * way process stacks are handled. This is done by having a special - * "init_task" linker map entry.. - */ -union thread_union init_thread_union __init_task_data = -	{ INIT_THREAD_INFO(init_task) }; - -/* - * Initial task structure. - * - * All other task structs will be allocated on slabs in fork.c - */ -struct task_struct init_task = INIT_TASK(init_task); - -EXPORT_SYMBOL(init_task); diff --git a/arch/frv/kernel/irq-mb93091.c b/arch/frv/kernel/irq-mb93091.c index 4dd9adaf115..2cc327a1ca4 100644 --- a/arch/frv/kernel/irq-mb93091.c +++ b/arch/frv/kernel/irq-mb93091.c @@ -20,7 +20,6 @@  #include <linux/bitops.h>  #include <asm/io.h> -#include <asm/system.h>  #include <asm/delay.h>  #include <asm/irq.h>  #include <asm/irc-regs.h> @@ -36,45 +35,45 @@  /*   * on-motherboard FPGA PIC operations   */ -static void frv_fpga_mask(unsigned int irq) +static void frv_fpga_mask(struct irq_data *d)  {  	uint16_t imr = __get_IMR(); -	imr |= 1 << (irq - IRQ_BASE_FPGA); +	imr |= 1 << (d->irq - IRQ_BASE_FPGA);  	__set_IMR(imr);  } -static void frv_fpga_ack(unsigned int irq) +static void frv_fpga_ack(struct irq_data *d)  { -	__clr_IFR(1 << (irq - IRQ_BASE_FPGA)); +	__clr_IFR(1 << (d->irq - IRQ_BASE_FPGA));  } -static void frv_fpga_mask_ack(unsigned int irq) +static void frv_fpga_mask_ack(struct irq_data *d)  {  	uint16_t imr = __get_IMR(); -	imr |= 1 << (irq - IRQ_BASE_FPGA); +	imr |= 1 << (d->irq - IRQ_BASE_FPGA);  	__set_IMR(imr); -	__clr_IFR(1 << (irq - IRQ_BASE_FPGA)); +	__clr_IFR(1 << (d->irq - IRQ_BASE_FPGA));  } -static void frv_fpga_unmask(unsigned int irq) +static void frv_fpga_unmask(struct irq_data *d)  {  	uint16_t imr = __get_IMR(); -	imr &= ~(1 << (irq - IRQ_BASE_FPGA)); +	imr &= ~(1 << (d->irq - IRQ_BASE_FPGA));  	__set_IMR(imr);  }  static struct irq_chip frv_fpga_pic = {  	.name		= "mb93091", -	.ack		= frv_fpga_ack, -	.mask		= frv_fpga_mask, -	.mask_ack	= frv_fpga_mask_ack, -	.unmask		= frv_fpga_unmask, +	.irq_ack	= frv_fpga_ack, +	.irq_mask	= frv_fpga_mask, +	.irq_mask_ack	= frv_fpga_mask_ack, +	.irq_unmask	= frv_fpga_unmask,  };  /* @@ -146,9 +145,9 @@ void __init fpga_init(void)  	__clr_IFR(0x0000);  	for (irq = IRQ_BASE_FPGA + 1; irq <= IRQ_BASE_FPGA + 14; irq++) -		set_irq_chip_and_handler(irq, &frv_fpga_pic, handle_level_irq); +		irq_set_chip_and_handler(irq, &frv_fpga_pic, handle_level_irq); -	set_irq_chip_and_handler(IRQ_FPGA_NMI, &frv_fpga_pic, handle_edge_irq); +	irq_set_chip_and_handler(IRQ_FPGA_NMI, &frv_fpga_pic, handle_edge_irq);  	/* the FPGA drives the first four external IRQ inputs on the CPU PIC */  	setup_irq(IRQ_CPU_EXTERNAL0, &fpga_irq[0]); diff --git a/arch/frv/kernel/irq-mb93093.c b/arch/frv/kernel/irq-mb93093.c index e4520903187..95e4eb4f1f3 100644 --- a/arch/frv/kernel/irq-mb93093.c +++ b/arch/frv/kernel/irq-mb93093.c @@ -20,7 +20,6 @@  #include <linux/bitops.h>  #include <asm/io.h> -#include <asm/system.h>  #include <asm/delay.h>  #include <asm/irq.h>  #include <asm/irc-regs.h> @@ -35,45 +34,44 @@  /*   * off-CPU FPGA PIC operations   */ -static void frv_fpga_mask(unsigned int irq) +static void frv_fpga_mask(struct irq_data *d)  {  	uint16_t imr = __get_IMR(); -	imr |= 1 << (irq - IRQ_BASE_FPGA); +	imr |= 1 << (d->irq - IRQ_BASE_FPGA);  	__set_IMR(imr);  } -static void frv_fpga_ack(unsigned int irq) +static void frv_fpga_ack(struct irq_data *d)  { -	__clr_IFR(1 << (irq - IRQ_BASE_FPGA)); +	__clr_IFR(1 << (d->irq - IRQ_BASE_FPGA));  } -static void frv_fpga_mask_ack(unsigned int irq) +static void frv_fpga_mask_ack(struct irq_data *d)  {  	uint16_t imr = __get_IMR(); -	imr |= 1 << (irq - IRQ_BASE_FPGA); +	imr |= 1 << (d->irq - IRQ_BASE_FPGA);  	__set_IMR(imr); -	__clr_IFR(1 << (irq - IRQ_BASE_FPGA)); +	__clr_IFR(1 << (d->irq - IRQ_BASE_FPGA));  } -static void frv_fpga_unmask(unsigned int irq) +static void frv_fpga_unmask(struct irq_data *d)  {  	uint16_t imr = __get_IMR(); -	imr &= ~(1 << (irq - IRQ_BASE_FPGA)); +	imr &= ~(1 << (d->irq - IRQ_BASE_FPGA));  	__set_IMR(imr);  }  static struct irq_chip frv_fpga_pic = {  	.name		= "mb93093", -	.ack		= frv_fpga_ack, -	.mask		= frv_fpga_mask, -	.mask_ack	= frv_fpga_mask_ack, -	.unmask		= frv_fpga_unmask, -	.end		= frv_fpga_end, +	.irq_ack	= frv_fpga_ack, +	.irq_mask	= frv_fpga_mask, +	.irq_mask_ack	= frv_fpga_mask_ack, +	.irq_unmask	= frv_fpga_unmask,  };  /* @@ -94,7 +92,7 @@ static irqreturn_t fpga_interrupt(int irq, void *_mask)  		irq = 31 - irq;  		mask &= ~(1 << irq); -		generic_irq_handle(IRQ_BASE_FPGA + irq); +		generic_handle_irq(IRQ_BASE_FPGA + irq);  	}  	return IRQ_HANDLED; @@ -125,7 +123,7 @@ void __init fpga_init(void)  	__clr_IFR(0x0000);  	for (irq = IRQ_BASE_FPGA + 8; irq <= IRQ_BASE_FPGA + 10; irq++) -		set_irq_chip_and_handler(irq, &frv_fpga_pic, handle_edge_irq); +		irq_set_chip_and_handler(irq, &frv_fpga_pic, handle_edge_irq);  	/* the FPGA drives external IRQ input #2 on the CPU PIC */  	setup_irq(IRQ_CPU_EXTERNAL2, &fpga_irq[0]); diff --git a/arch/frv/kernel/irq-mb93493.c b/arch/frv/kernel/irq-mb93493.c index ba55ecdfb24..ba648da0932 100644 --- a/arch/frv/kernel/irq-mb93493.c +++ b/arch/frv/kernel/irq-mb93493.c @@ -20,7 +20,6 @@  #include <linux/bitops.h>  #include <asm/io.h> -#include <asm/system.h>  #include <asm/delay.h>  #include <asm/irq.h>  #include <asm/irc-regs.h> @@ -45,46 +44,46 @@   * daughter board PIC operations   * - there is no way to ACK interrupts in the MB93493 chip   */ -static void frv_mb93493_mask(unsigned int irq) +static void frv_mb93493_mask(struct irq_data *d)  {  	uint32_t iqsr;  	volatile void *piqsr; -	if (IRQ_ROUTING & (1 << (irq - IRQ_BASE_MB93493))) +	if (IRQ_ROUTING & (1 << (d->irq - IRQ_BASE_MB93493)))  		piqsr = __addr_MB93493_IQSR(1);  	else  		piqsr = __addr_MB93493_IQSR(0);  	iqsr = readl(piqsr); -	iqsr &= ~(1 << (irq - IRQ_BASE_MB93493 + 16)); +	iqsr &= ~(1 << (d->irq - IRQ_BASE_MB93493 + 16));  	writel(iqsr, piqsr);  } -static void frv_mb93493_ack(unsigned int irq) +static void frv_mb93493_ack(struct irq_data *d)  {  } -static void frv_mb93493_unmask(unsigned int irq) +static void frv_mb93493_unmask(struct irq_data *d)  {  	uint32_t iqsr;  	volatile void *piqsr; -	if (IRQ_ROUTING & (1 << (irq - IRQ_BASE_MB93493))) +	if (IRQ_ROUTING & (1 << (d->irq - IRQ_BASE_MB93493)))  		piqsr = __addr_MB93493_IQSR(1);  	else  		piqsr = __addr_MB93493_IQSR(0);  	iqsr = readl(piqsr); -	iqsr |= 1 << (irq - IRQ_BASE_MB93493 + 16); +	iqsr |= 1 << (d->irq - IRQ_BASE_MB93493 + 16);  	writel(iqsr, piqsr);  }  static struct irq_chip frv_mb93493_pic = {  	.name		= "mb93093", -	.ack		= frv_mb93493_ack, -	.mask		= frv_mb93493_mask, -	.mask_ack	= frv_mb93493_mask, -	.unmask		= frv_mb93493_unmask, +	.irq_ack	= frv_mb93493_ack, +	.irq_mask	= frv_mb93493_mask, +	.irq_mask_ack	= frv_mb93493_mask, +	.irq_unmask	= frv_mb93493_unmask,  };  /* @@ -139,7 +138,8 @@ void __init mb93493_init(void)  	int irq;  	for (irq = IRQ_BASE_MB93493 + 0; irq <= IRQ_BASE_MB93493 + 10; irq++) -		set_irq_chip_and_handler(irq, &frv_mb93493_pic, handle_edge_irq); +		irq_set_chip_and_handler(irq, &frv_mb93493_pic, +					 handle_edge_irq);  	/* the MB93493 drives external IRQ inputs on the CPU PIC */  	setup_irq(IRQ_CPU_MB93493_0, &mb93493_irq[0]); diff --git a/arch/frv/kernel/irq.c b/arch/frv/kernel/irq.c index 625136625a7..2239346fa3d 100644 --- a/arch/frv/kernel/irq.c +++ b/arch/frv/kernel/irq.c @@ -25,10 +25,9 @@  #include <linux/module.h>  #include <linux/bitops.h> -#include <asm/atomic.h> +#include <linux/atomic.h>  #include <asm/io.h>  #include <asm/smp.h> -#include <asm/system.h>  #include <asm/uaccess.h>  #include <asm/pgalloc.h>  #include <asm/delay.h> @@ -47,89 +46,45 @@ extern void __init mb93493_init(void);  atomic_t irq_err_count; -/* - * Generic, controller-independent functions: - */ -int show_interrupts(struct seq_file *p, void *v) +int arch_show_interrupts(struct seq_file *p, int prec)  { -	int i = *(loff_t *) v, cpu; -	struct irqaction * action; -	unsigned long flags; - -	if (i == 0) { -		char cpuname[12]; - -		seq_printf(p, "    "); -		for_each_present_cpu(cpu) { -			sprintf(cpuname, "CPU%d", cpu); -			seq_printf(p, " %10s", cpuname); -		} -		seq_putc(p, '\n'); -	} - -	if (i < NR_IRQS) { -		raw_spin_lock_irqsave(&irq_desc[i].lock, flags); -		action = irq_desc[i].action; -		if (action) { -			seq_printf(p, "%3d: ", i); -			for_each_present_cpu(cpu) -				seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu)); -			seq_printf(p, " %10s", irq_desc[i].chip->name ? : "-"); -			seq_printf(p, "  %s", action->name); -			for (action = action->next; -			     action; -			     action = action->next) -				seq_printf(p, ", %s", action->name); - -			seq_putc(p, '\n'); -		} - -		raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags); -	} else if (i == NR_IRQS) { -		seq_printf(p, "Err: %10u\n", atomic_read(&irq_err_count)); -	} - +	seq_printf(p, "%*s: ", prec, "ERR"); +	seq_printf(p, "%10u\n", atomic_read(&irq_err_count));  	return 0;  }  /*   * on-CPU PIC operations   */ -static void frv_cpupic_ack(unsigned int irqlevel) +static void frv_cpupic_ack(struct irq_data *d)  { -	__clr_RC(irqlevel); +	__clr_RC(d->irq);  	__clr_IRL();  } -static void frv_cpupic_mask(unsigned int irqlevel) +static void frv_cpupic_mask(struct irq_data *d)  { -	__set_MASK(irqlevel); +	__set_MASK(d->irq);  } -static void frv_cpupic_mask_ack(unsigned int irqlevel) +static void frv_cpupic_mask_ack(struct irq_data *d)  { -	__set_MASK(irqlevel); -	__clr_RC(irqlevel); +	__set_MASK(d->irq); +	__clr_RC(d->irq);  	__clr_IRL();  } -static void frv_cpupic_unmask(unsigned int irqlevel) -{ -	__clr_MASK(irqlevel); -} - -static void frv_cpupic_end(unsigned int irqlevel) +static void frv_cpupic_unmask(struct irq_data *d)  { -	__clr_MASK(irqlevel); +	__clr_MASK(d->irq);  }  static struct irq_chip frv_cpu_pic = {  	.name		= "cpu", -	.ack		= frv_cpupic_ack, -	.mask		= frv_cpupic_mask, -	.mask_ack	= frv_cpupic_mask_ack, -	.unmask		= frv_cpupic_unmask, -	.end		= frv_cpupic_end, +	.irq_ack	= frv_cpupic_ack, +	.irq_mask	= frv_cpupic_mask, +	.irq_mask_ack	= frv_cpupic_mask_ack, +	.irq_unmask	= frv_cpupic_unmask,  };  /* @@ -161,10 +116,10 @@ void __init init_IRQ(void)  	int level;  	for (level = 1; level <= 14; level++) -		set_irq_chip_and_handler(level, &frv_cpu_pic, +		irq_set_chip_and_handler(level, &frv_cpu_pic,  					 handle_level_irq); -	set_irq_handler(IRQ_CPU_TIMER0, handle_edge_irq); +	irq_set_handler(IRQ_CPU_TIMER0, handle_edge_irq);  	/* set the trigger levels for internal interrupt sources  	 * - timers all falling-edge diff --git a/arch/frv/kernel/kernel_execve.S b/arch/frv/kernel/kernel_execve.S deleted file mode 100644 index 9b074a16a05..00000000000 --- a/arch/frv/kernel/kernel_execve.S +++ /dev/null @@ -1,33 +0,0 @@ -/* in-kernel program execution - * - * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved. - * Written by David Howells (dhowells@redhat.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - */ - -#include <linux/linkage.h> -#include <asm/unistd.h> - -############################################################################### -# -# Do a system call from kernel instead of calling sys_execve so we end up with -# proper pt_regs. -# -# int kernel_execve(const char *filename, char *const argv[], char *const envp[]) -# -# On entry: GR8/GR9/GR10: arguments to function -# On return: GR8: syscall return. -# -############################################################################### -	.globl		kernel_execve -	.type		kernel_execve,@function -kernel_execve: -	setlos		__NR_execve,gr7 -	tira		gr0,#0 -	bralr - -	.size		kernel_execve,.-kernel_execve diff --git a/arch/frv/kernel/kernel_thread.S b/arch/frv/kernel/kernel_thread.S deleted file mode 100644 index 4531c830d20..00000000000 --- a/arch/frv/kernel/kernel_thread.S +++ /dev/null @@ -1,77 +0,0 @@ -/* kernel_thread.S: kernel thread creation - * - * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved. - * Written by David Howells (dhowells@redhat.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - */ - -#include <linux/linkage.h> -#include <asm/unistd.h> - -#define CLONE_VM	0x00000100	/* set if VM shared between processes */ -#define	KERN_ERR	"<3>" - -	.section .rodata -kernel_thread_emsg: -	.asciz	KERN_ERR "failed to create kernel thread: error=%d\n" - -	.text -	.balign		4 - -############################################################################### -# -# Create a kernel thread -# -# int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) -# -############################################################################### -	.globl		kernel_thread -	.type		kernel_thread,@function -kernel_thread: -	or.p		gr8,gr0,gr4 -	or		gr9,gr0,gr5 - -	# start by forking the current process, but with shared VM -	setlos.p	#__NR_clone,gr7		; syscall number -	ori		gr10,#CLONE_VM,gr8	; first syscall arg	[clone_flags] -	sethi.p		#0xe4e4,gr9		; second syscall arg	[newsp] -	setlo		#0xe4e4,gr9 -	setlos.p	#0,gr10			; third syscall arg	[parent_tidptr] -	setlos		#0,gr11			; fourth syscall arg	[child_tidptr] -	tira		gr0,#0 -	setlos.p	#4095,gr7 -	andcc		gr8,gr8,gr0,icc0 -	addcc.p		gr8,gr7,gr0,icc1 -	bnelr		icc0,#2 -	bc		icc1,#0,kernel_thread_error - -	# now invoke the work function -	or		gr5,gr0,gr8 -	calll		@(gr4,gr0) - -	# and finally exit the thread -	setlos		#__NR_exit,gr7		; syscall number -	tira		gr0,#0 - -kernel_thread_error: -	subi		sp,#8,sp -	movsg		lr,gr4 -	sti		gr8,@(sp,#0) -	sti.p		gr4,@(sp,#4) - -	or		gr8,gr0,gr9 -	sethi.p		%hi(kernel_thread_emsg),gr8 -	setlo		%lo(kernel_thread_emsg),gr8 - -	call		printk - -	ldi		@(sp,#4),gr4 -	ldi		@(sp,#0),gr8 -	subi		sp,#8,sp -	jmpl		@(gr4,gr0) - -	.size		kernel_thread,.-kernel_thread diff --git a/arch/frv/kernel/module.c b/arch/frv/kernel/module.c index 711763c8a6f..9d9835f1fe2 100644 --- a/arch/frv/kernel/module.c +++ b/arch/frv/kernel/module.c @@ -22,57 +22,6 @@  #define DEBUGP(fmt...)  #endif -void *module_alloc(unsigned long size) -{ -	if (size == 0) -		return NULL; - -	return vmalloc_exec(size); -} - - -/* Free memory returned from module_alloc */ -void module_free(struct module *mod, void *module_region) -{ -	vfree(module_region); -} - -/* We don't need anything special. */ -int module_frob_arch_sections(Elf_Ehdr *hdr, -			      Elf_Shdr *sechdrs, -			      char *secstrings, -			      struct module *mod) -{ -	return 0; -} - -int apply_relocate(Elf32_Shdr *sechdrs, -		   const char *strtab, -		   unsigned int symindex, -		   unsigned int relsec, -		   struct module *me) -{ -	printk(KERN_ERR "module %s: ADD RELOCATION unsupported\n", me->name); -	return -ENOEXEC; -} - -int apply_relocate_add(Elf32_Shdr *sechdrs, -		       const char *strtab, -		       unsigned int symindex, -		       unsigned int relsec, -		       struct module *me) -{ -	printk(KERN_ERR "module %s: ADD RELOCATION unsupported\n", me->name); -	return -ENOEXEC; -} - -int module_finalize(const Elf_Ehdr *hdr, -		    const Elf_Shdr *sechdrs, -		    struct module *me) -{ -	return 0; -} - -void module_arch_cleanup(struct module *mod) -{ -} +/* TODO: At least one of apply_relocate or apply_relocate_add must be + * implemented in order to get working module support. + */ diff --git a/arch/frv/kernel/pm.c b/arch/frv/kernel/pm.c index 5fa3889d858..ac767d94a88 100644 --- a/arch/frv/kernel/pm.c +++ b/arch/frv/kernel/pm.c @@ -150,26 +150,25 @@ static int user_atoi(char __user *ubuf, size_t len)  /*   * Send us to sleep.   */ -static int sysctl_pm_do_suspend(ctl_table *ctl, int write, +static int sysctl_pm_do_suspend(struct ctl_table *ctl, int write,  				void __user *buffer, size_t *lenp, loff_t *fpos)  { -	int retval, mode; +	int mode;  	if (*lenp <= 0)  		return -EIO;  	mode = user_atoi(buffer, *lenp); -	if ((mode != 1) && (mode != 5)) -		return -EINVAL; +	switch (mode) { +	case 1: +	    return pm_do_suspend(); -	if (retval == 0) { -		if (mode == 5) -		    retval = pm_do_bus_sleep(); -		else -		    retval = pm_do_suspend(); -	} +	case 5: +	    return pm_do_bus_sleep(); -	return retval; +	default: +	    return -EINVAL; +	}  }  static int try_set_cmode(int new_cmode) @@ -198,7 +197,7 @@ static int try_set_cmode(int new_cmode)  } -static int cmode_procctl(ctl_table *ctl, int write, +static int cmode_procctl(struct ctl_table *ctl, int write,  			 void __user *buffer, size_t *lenp, loff_t *fpos)  {  	int new_cmode; @@ -270,7 +269,7 @@ static int try_set_cm(int new_cm)  	return 0;  } -static int p0_procctl(ctl_table *ctl, int write, +static int p0_procctl(struct ctl_table *ctl, int write,  		      void __user *buffer, size_t *lenp, loff_t *fpos)  {  	int new_p0; @@ -283,7 +282,7 @@ static int p0_procctl(ctl_table *ctl, int write,  	return try_set_p0(new_p0)?:*lenp;  } -static int cm_procctl(ctl_table *ctl, int write, +static int cm_procctl(struct ctl_table *ctl, int write,  		      void __user *buffer, size_t *lenp, loff_t *fpos)  {  	int new_cm; diff --git a/arch/frv/kernel/process.c b/arch/frv/kernel/process.c index 2b63b0191f5..5d40aeb7712 100644 --- a/arch/frv/kernel/process.c +++ b/arch/frv/kernel/process.c @@ -16,7 +16,6 @@  #include <linux/kernel.h>  #include <linux/mm.h>  #include <linux/smp.h> -#include <linux/smp_lock.h>  #include <linux/stddef.h>  #include <linux/unistd.h>  #include <linux/ptrace.h> @@ -26,10 +25,10 @@  #include <linux/reboot.h>  #include <linux/interrupt.h>  #include <linux/pagemap.h> +#include <linux/rcupdate.h>  #include <asm/asm-offsets.h>  #include <asm/uaccess.h> -#include <asm/system.h>  #include <asm/setup.h>  #include <asm/pgtable.h>  #include <asm/tlb.h> @@ -39,26 +38,13 @@  #include "local.h"  asmlinkage void ret_from_fork(void); +asmlinkage void ret_from_kernel_thread(void);  #include <asm/pgalloc.h>  void (*pm_power_off)(void);  EXPORT_SYMBOL(pm_power_off); -struct task_struct *alloc_task_struct(void) -{ -	struct task_struct *p = kmalloc(THREAD_SIZE, GFP_KERNEL); -	if (p) -		atomic_set((atomic_t *)(p+1), 1); -	return p; -} - -void free_task_struct(struct task_struct *p) -{ -	if (atomic_dec_and_test((atomic_t *)(p+1))) -		kfree(p); -} -  static void core_sleep_idle(void)  {  #ifdef LED_DEBUG_SLEEP @@ -73,29 +59,12 @@ static void core_sleep_idle(void)  	mb();  } -void (*idle)(void) = core_sleep_idle; - -/* - * The idle thread. There's no useful work to be - * done, so just try to conserve power and have a - * low exit latency (ie sit in a loop waiting for - * somebody to say that they'd like to reschedule) - */ -void cpu_idle(void) +void arch_cpu_idle(void)  { -	/* endless idle loop with no priority at all */ -	while (1) { -		while (!need_resched()) { -			check_pgt_cache(); - -			if (!frv_dma_inprogress && idle) -				idle(); -		} - -		preempt_enable_no_resched(); -		schedule(); -		preempt_disable(); -	} +	if (!frv_dma_inprogress) +		core_sleep_idle(); +	else +		local_irq_enable();  }  void machine_restart(char * __unused) @@ -143,10 +112,7 @@ void machine_power_off(void)  void flush_thread(void)  { -#if 0 //ndef NO_FPU -	unsigned long zero = 0; -#endif -	set_fs(USER_DS); +	/* nothing */  }  inline unsigned long user_stack(const struct pt_regs *regs) @@ -156,87 +122,40 @@ inline unsigned long user_stack(const struct pt_regs *regs)  	return user_mode(regs) ? regs->sp : 0;  } -asmlinkage int sys_fork(void) -{ -#ifndef CONFIG_MMU -	/* fork almost works, enough to trick you into looking elsewhere:-( */ -	return -EINVAL; -#else -	return do_fork(SIGCHLD, user_stack(__frame), __frame, 0, NULL, NULL); -#endif -} - -asmlinkage int sys_vfork(void) -{ -	return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, user_stack(__frame), __frame, 0, -		       NULL, NULL); -} - -/*****************************************************************************/ -/* - * clone a process - * - tlsptr is retrieved by copy_thread() - */ -asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, -			 int __user *parent_tidptr, int __user *child_tidptr, -			 int __user *tlsptr) -{ -	if (!newsp) -		newsp = user_stack(__frame); -	return do_fork(clone_flags, newsp, __frame, 0, parent_tidptr, child_tidptr); -} /* end sys_clone() */ - -/*****************************************************************************/ -/* - * This gets called before we allocate a new thread and copy - * the current task into it. - */ -void prepare_to_copy(struct task_struct *tsk) -{ -	//unlazy_fpu(tsk); -} /* end prepare_to_copy() */ - -/*****************************************************************************/  /*   * set up the kernel stack and exception frames for a new process   */  int copy_thread(unsigned long clone_flags, -		unsigned long usp, unsigned long topstk, -		struct task_struct *p, struct pt_regs *regs) +		unsigned long usp, unsigned long arg, +		struct task_struct *p)  { -	struct pt_regs *childregs0, *childregs, *regs0; +	struct pt_regs *childregs; -	regs0 = __kernel_frame0_ptr; -	childregs0 = (struct pt_regs *) +	childregs = (struct pt_regs *)  		(task_stack_page(p) + THREAD_SIZE - FRV_FRAME0_SIZE); -	childregs = childregs0;  	/* set up the userspace frame (the only place that the USP is stored) */ -	*childregs0 = *regs0; - -	childregs0->gr8		= 0; -	childregs0->sp		= usp; -	childregs0->next_frame	= NULL; - -	/* set up the return kernel frame if called from kernel_thread() */ -	if (regs != regs0) { -		childregs--; -		*childregs = *regs; -		childregs->sp = (unsigned long) childregs0; -		childregs->next_frame = childregs0; -		childregs->gr15 = (unsigned long) task_thread_info(p); -		childregs->gr29 = (unsigned long) p; -	} - -	p->set_child_tid = p->clear_child_tid = NULL; +	*childregs = *current_pt_regs();  	p->thread.frame	 = childregs;  	p->thread.curr	 = p;  	p->thread.sp	 = (unsigned long) childregs;  	p->thread.fp	 = 0;  	p->thread.lr	 = 0; -	p->thread.pc	 = (unsigned long) ret_from_fork; -	p->thread.frame0 = childregs0; +	p->thread.frame0 = childregs; + +	if (unlikely(p->flags & PF_KTHREAD)) { +		childregs->gr9 = usp; /* function */ +		childregs->gr8 = arg; +		p->thread.pc = (unsigned long) ret_from_kernel_thread; +		save_user_regs(p->thread.user); +		return 0; +	} +	if (usp) +		childregs->sp = usp; +	childregs->next_frame	= NULL; + +	p->thread.pc = (unsigned long) ret_from_fork;  	/* the new TLS pointer is passed in as arg #5 to sys_clone() */  	if (clone_flags & CLONE_SETTLS) @@ -247,25 +166,6 @@ int copy_thread(unsigned long clone_flags,  	return 0;  } /* end copy_thread() */ -/* - * sys_execve() executes a new program. - */ -asmlinkage int sys_execve(const char __user *name, -			  const char __user *const __user *argv, -			  const char __user *const __user *envp) -{ -	int error; -	char * filename; - -	filename = getname(name); -	error = PTR_ERR(filename); -	if (IS_ERR(filename)) -		return error; -	error = do_execve(filename, argv, envp, __frame); -	putname(filename); -	return error; -} -  unsigned long get_wchan(struct task_struct *p)  {  	struct pt_regs *regs0; diff --git a/arch/frv/kernel/ptrace.c b/arch/frv/kernel/ptrace.c index 9d68f7fac73..3987ff88dab 100644 --- a/arch/frv/kernel/ptrace.c +++ b/arch/frv/kernel/ptrace.c @@ -26,7 +26,6 @@  #include <asm/uaccess.h>  #include <asm/page.h>  #include <asm/pgtable.h> -#include <asm/system.h>  #include <asm/processor.h>  #include <asm/unistd.h> diff --git a/arch/frv/kernel/setup.c b/arch/frv/kernel/setup.c index 75cf7f4b2fa..9f3a7a62d78 100644 --- a/arch/frv/kernel/setup.c +++ b/arch/frv/kernel/setup.c @@ -112,9 +112,11 @@ char __initdata redboot_command_line[COMMAND_LINE_SIZE];  #ifdef CONFIG_PM  #define __pminit  #define __pminitdata +#define __pminitconst  #else  #define __pminit __init  #define __pminitdata __initdata +#define __pminitconst __initconst  #endif  struct clock_cmode { @@ -184,7 +186,7 @@ static struct clock_cmode __pminitdata clock_cmodes_fr555[16] = {  	[6]	= {	_x1,	_x1_5,	_x1_5,	_x4_5,	_x0_375	},  }; -static const struct clock_cmode __pminitdata *clock_cmodes; +static const struct clock_cmode __pminitconst *clock_cmodes;  static int __pminitdata clock_doubled;  static struct uart_port __pminitdata __frv_uart0 = { @@ -707,7 +709,7 @@ static void __init reserve_dma_coherent(void)  /*   * calibrate the delay loop   */ -void __cpuinit calibrate_delay(void) +void calibrate_delay(void)  {  	loops_per_jiffy = __delay_loops_MHz * (1000000 / HZ); @@ -733,7 +735,7 @@ static void __init parse_cmdline_early(char *cmdline)  		/* "mem=XXX[kKmM]" sets SDRAM size to <mem>, overriding the value we worked  		 * out from the SDRAM controller mask register  		 */ -		if (!memcmp(cmdline, "mem=", 4)) { +		if (!strncmp(cmdline, "mem=", 4)) {  			unsigned long long mem_size;  			mem_size = memparse(cmdline + 4, &cmdline); @@ -802,9 +804,9 @@ void __init setup_arch(char **cmdline_p)  	BUG_ON(memory_start == memory_end); -	init_mm.start_code = (unsigned long) &_stext; -	init_mm.end_code = (unsigned long) &_etext; -	init_mm.end_data = (unsigned long) &_edata; +	init_mm.start_code = (unsigned long) _stext; +	init_mm.end_code = (unsigned long) _etext; +	init_mm.end_data = (unsigned long) _edata;  #if 0 /* DAVIDM - don't set brk just incase someone decides to use it */  	init_mm.brk = (unsigned long) &_end;  #else @@ -812,10 +814,8 @@ void __init setup_arch(char **cmdline_p)  #endif  #ifdef DEBUG -	printk("KERNEL -> TEXT=0x%06x-0x%06x DATA=0x%06x-0x%06x BSS=0x%06x-0x%06x\n", -	       (int) &_stext, (int) &_etext, -	       (int) &_sdata, (int) &_edata, -	       (int) &_sbss, (int) &_ebss); +	printk("KERNEL -> TEXT=0x%p-0x%p DATA=0x%p-0x%p BSS=0x%p-0x%p\n", +	       _stext, _etext, _sdata, _edata, __bss_start, __bss_stop);  #endif  #ifdef CONFIG_VT @@ -852,7 +852,7 @@ void __init setup_arch(char **cmdline_p)  /*   *   */ -static int __devinit setup_arch_serial(void) +static int setup_arch_serial(void)  {  	/* register those serial ports that are available */  #ifndef CONFIG_GDBSTUB_UART0 @@ -876,6 +876,7 @@ late_initcall(setup_arch_serial);  static void __init setup_linux_memory(void)  {  	unsigned long bootmap_size, low_top_pfn, kstart, kend, high_mem; +	unsigned long physpages;  	kstart	= (unsigned long) &__kernel_image_start - PAGE_OFFSET;  	kend	= (unsigned long) &__kernel_image_end - PAGE_OFFSET; @@ -893,19 +894,19 @@ static void __init setup_linux_memory(void)  					 );  	/* pass the memory that the kernel can immediately use over to the bootmem allocator */ -	max_mapnr = num_physpages = (memory_end - memory_start) >> PAGE_SHIFT; +	max_mapnr = physpages = (memory_end - memory_start) >> PAGE_SHIFT;  	low_top_pfn = (KERNEL_LOWMEM_END - KERNEL_LOWMEM_START) >> PAGE_SHIFT;  	high_mem = 0; -	if (num_physpages > low_top_pfn) { +	if (physpages > low_top_pfn) {  #ifdef CONFIG_HIGHMEM -		high_mem = num_physpages - low_top_pfn; +		high_mem = physpages - low_top_pfn;  #else -		max_mapnr = num_physpages = low_top_pfn; +		max_mapnr = physpages = low_top_pfn;  #endif  	}  	else { -		low_top_pfn = num_physpages; +		low_top_pfn = physpages;  	}  	min_low_pfn = memory_start >> PAGE_SHIFT; @@ -979,7 +980,7 @@ static void __init setup_uclinux_memory(void)  	free_bootmem(memory_start, memory_end - memory_start);  	high_memory = (void *) (memory_end & PAGE_MASK); -	max_mapnr = num_physpages = ((unsigned long) high_memory - PAGE_OFFSET) >> PAGE_SHIFT; +	max_mapnr = ((unsigned long) high_memory - PAGE_OFFSET) >> PAGE_SHIFT;  	min_low_pfn = memory_start >> PAGE_SHIFT;  	max_low_pfn = memory_end >> PAGE_SHIFT; diff --git a/arch/frv/kernel/signal.c b/arch/frv/kernel/signal.c index bab01298b58..d822700d4f1 100644 --- a/arch/frv/kernel/signal.c +++ b/arch/frv/kernel/signal.c @@ -20,7 +20,6 @@  #include <linux/ptrace.h>  #include <linux/unistd.h>  #include <linux/personality.h> -#include <linux/freezer.h>  #include <linux/tracehook.h>  #include <asm/ucontext.h>  #include <asm/uaccess.h> @@ -28,71 +27,12 @@  #define DEBUG_SIG 0 -#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) -  struct fdpic_func_descriptor {  	unsigned long	text;  	unsigned long	GOT;  };  /* - * Atomically swap in the new signal mask, and wait for a signal. - */ -asmlinkage int sys_sigsuspend(int history0, int history1, old_sigset_t mask) -{ -	mask &= _BLOCKABLE; -	spin_lock_irq(¤t->sighand->siglock); -	current->saved_sigmask = current->blocked; -	siginitset(¤t->blocked, mask); -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); - -	current->state = TASK_INTERRUPTIBLE; -	schedule(); -	set_thread_flag(TIF_RESTORE_SIGMASK); -	return -ERESTARTNOHAND; -} - -asmlinkage int sys_sigaction(int sig, -			     const struct old_sigaction __user *act, -			     struct old_sigaction __user *oact) -{ -	struct k_sigaction new_ka, old_ka; -	int ret; - -	if (act) { -		old_sigset_t mask; -		if (!access_ok(VERIFY_READ, act, sizeof(*act)) || -		    __get_user(new_ka.sa.sa_handler, &act->sa_handler) || -		    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer)) -			return -EFAULT; -		__get_user(new_ka.sa.sa_flags, &act->sa_flags); -		__get_user(mask, &act->sa_mask); -		siginitset(&new_ka.sa.sa_mask, mask); -	} - -	ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); - -	if (!ret && oact) { -		if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || -		    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || -		    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer)) -			return -EFAULT; -		__put_user(old_ka.sa.sa_flags, &oact->sa_flags); -		__put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); -	} - -	return ret; -} - -asmlinkage -int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss) -{ -	return do_sigaltstack(uss, uoss, __frame->sp); -} - - -/*   * Do a signal return; undo the signal stack.   */ @@ -157,11 +97,7 @@ asmlinkage int sys_sigreturn(void)  	    __copy_from_user(&set.sig[1], &frame->extramask, sizeof(frame->extramask)))  		goto badframe; -	sigdelsetmask(&set, ~_BLOCKABLE); -	spin_lock_irq(¤t->sighand->siglock); -	current->blocked = set; -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); +	set_current_blocked(&set);  	if (restore_sigcontext(&frame->sc, &gr8))  		goto badframe; @@ -183,16 +119,12 @@ asmlinkage int sys_rt_sigreturn(void)  	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))  		goto badframe; -	sigdelsetmask(&set, ~_BLOCKABLE); -	spin_lock_irq(¤t->sighand->siglock); -	current->blocked = set; -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); +	set_current_blocked(&set);  	if (restore_sigcontext(&frame->uc.uc_mcontext, &gr8))  		goto badframe; -	if (do_sigaltstack(&frame->uc.uc_stack, NULL, __frame->sp) == -EFAULT) +	if (restore_altstack(&frame->uc.uc_stack))  		goto badframe;  	return gr8; @@ -316,10 +248,6 @@ static int setup_frame(int sig, struct k_sigaction *ka, sigset_t *set)  	__frame->lr   = (unsigned long) &frame->retcode;  	__frame->gr8  = sig; -	/* the tracer may want to single-step inside the handler */ -	if (test_thread_flag(TIF_SINGLESTEP)) -		ptrace_notify(SIGTRAP); -  #if DEBUG_SIG  	printk("SIG deliver %d (%s:%d): sp=%p pc=%lx ra=%p\n",  	       sig, current->comm, current->pid, frame, __frame->pc, @@ -368,9 +296,7 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  	/* Create the ucontext.  */  	if (__put_user(0, &frame->uc.uc_flags) ||  	    __put_user(NULL, &frame->uc.uc_link) || -	    __put_user((void __user *)current->sas_ss_sp, &frame->uc.uc_stack.ss_sp) || -	    __put_user(sas_ss_flags(__frame->sp), &frame->uc.uc_stack.ss_flags) || -	    __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size)) +	    __save_altstack(&frame->uc.uc_stack, __frame->sp))  		goto give_sigsegv;  	if (setup_sigcontext(&frame->uc.uc_mcontext, set->sig[0])) @@ -418,10 +344,6 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,  	__frame->gr8 = sig;  	__frame->gr9 = (unsigned long) &frame->info; -	/* the tracer may want to single-step inside the handler */ -	if (test_thread_flag(TIF_SINGLESTEP)) -		ptrace_notify(SIGTRAP); -  #if DEBUG_SIG  	printk("SIG deliver %d (%s:%d): sp=%p pc=%lx ra=%p\n",  	       sig, current->comm, current->pid, frame, __frame->pc, @@ -440,9 +362,10 @@ give_sigsegv:  /*   * OK, we're invoking a handler   */ -static int handle_signal(unsigned long sig, siginfo_t *info, -			 struct k_sigaction *ka, sigset_t *oldset) +static void handle_signal(unsigned long sig, siginfo_t *info, +			 struct k_sigaction *ka)  { +	sigset_t *oldset = sigmask_to_save();  	int ret;  	/* Are we from a system call? */ @@ -474,18 +397,11 @@ static int handle_signal(unsigned long sig, siginfo_t *info,  	else  		ret = setup_frame(sig, ka, oldset); -	if (ret == 0) { -		spin_lock_irq(¤t->sighand->siglock); -		sigorsets(¤t->blocked, ¤t->blocked, -			  &ka->sa.sa_mask); -		if (!(ka->sa.sa_flags & SA_NODEFER)) -			sigaddset(¤t->blocked, sig); -		recalc_sigpending(); -		spin_unlock_irq(¤t->sighand->siglock); -	} - -	return ret; +	if (ret) +		return; +	signal_delivered(sig, info, ka, __frame, +				 test_thread_flag(TIF_SINGLESTEP));  } /* end handle_signal() */  /*****************************************************************************/ @@ -498,44 +414,14 @@ static void do_signal(void)  {  	struct k_sigaction ka;  	siginfo_t info; -	sigset_t *oldset;  	int signr; -	/* -	 * We want the common case to go fast, which -	 * is why we may in certain cases get here from -	 * kernel mode. Just return without doing anything -	 * if so. -	 */ -	if (!user_mode(__frame)) -		return; - -	if (try_to_freeze()) -		goto no_signal; - -	if (test_thread_flag(TIF_RESTORE_SIGMASK)) -		oldset = ¤t->saved_sigmask; -	else -		oldset = ¤t->blocked; -  	signr = get_signal_to_deliver(&info, &ka, __frame, NULL);  	if (signr > 0) { -		if (handle_signal(signr, &info, &ka, oldset) == 0) { -			/* a signal was successfully delivered; the saved -			 * sigmask will have been stored in the signal frame, -			 * and will be restored by sigreturn, so we can simply -			 * clear the TIF_RESTORE_SIGMASK flag */ -			if (test_thread_flag(TIF_RESTORE_SIGMASK)) -				clear_thread_flag(TIF_RESTORE_SIGMASK); - -			tracehook_signal_handler(signr, &info, &ka, __frame, -						 test_thread_flag(TIF_SINGLESTEP)); -		} - +		handle_signal(signr, &info, &ka);  		return;  	} -no_signal:  	/* Did we come from a system call? */  	if (__frame->syscallno != -1) {  		/* Restart the system call - no handlers present */ @@ -557,11 +443,7 @@ no_signal:  	/* if there's no signal to deliver, we just put the saved sigmask  	 * back */ -	if (test_thread_flag(TIF_RESTORE_SIGMASK)) { -		clear_thread_flag(TIF_RESTORE_SIGMASK); -		sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); -	} - +	restore_saved_sigmask();  } /* end do_signal() */  /*****************************************************************************/ @@ -576,15 +458,13 @@ asmlinkage void do_notify_resume(__u32 thread_info_flags)  		clear_thread_flag(TIF_SINGLESTEP);  	/* deal with pending signal delivery */ -	if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)) +	if (thread_info_flags & _TIF_SIGPENDING)  		do_signal();  	/* deal with notification on about to resume userspace execution */  	if (thread_info_flags & _TIF_NOTIFY_RESUME) {  		clear_thread_flag(TIF_NOTIFY_RESUME);  		tracehook_notify_resume(__frame); -		if (current->replacement_session_keyring) -			key_replace_session_keyring();  	}  } /* end do_notify_resume() */ diff --git a/arch/frv/kernel/sysctl.c b/arch/frv/kernel/sysctl.c index 6c155d69da2..f4dfae2c75a 100644 --- a/arch/frv/kernel/sysctl.c +++ b/arch/frv/kernel/sysctl.c @@ -46,7 +46,7 @@ static void frv_change_dcache_mode(unsigned long newmode)  /*   * handle requests to dynamically switch the write caching mode delivered by /proc   */ -static int procctl_frv_cachemode(ctl_table *table, int write, +static int procctl_frv_cachemode(struct ctl_table *table, int write,  				 void __user *buffer, size_t *lenp,  				 loff_t *ppos)  { @@ -121,7 +121,7 @@ static int procctl_frv_cachemode(ctl_table *table, int write,   * permit the mm_struct the nominated process is using have its MMU context ID pinned   */  #ifdef CONFIG_MMU -static int procctl_frv_pin_cxnr(ctl_table *table, int write, +static int procctl_frv_pin_cxnr(struct ctl_table *table, int write,  				void __user *buffer, size_t *lenp,  				loff_t *ppos)  { diff --git a/arch/frv/kernel/time.c b/arch/frv/kernel/time.c index 0ddbbae83cb..b457de496b7 100644 --- a/arch/frv/kernel/time.c +++ b/arch/frv/kernel/time.c @@ -50,21 +50,13 @@ static struct irqaction timer_irq  = {  /*   * timer_interrupt() needs to keep up the real-time clock, - * as well as call the "do_timer()" routine every clocktick + * as well as call the "xtime_update()" routine every clocktick   */  static irqreturn_t timer_interrupt(int irq, void *dummy)  {  	profile_tick(CPU_PROFILING); -	/* -	 * Here we are in the timer irq handler. We just have irqs locally -	 * disabled but we don't know if the timer_bh is running on the other -	 * CPU. We need to avoid to SMP race with it. NOTE: we don't need -	 * the irq version of write_lock because as just said we have irq -	 * locally disabled. -arca -	 */ -	write_seqlock(&xtime_lock); -	do_timer(1); +	xtime_update(1);  #ifdef CONFIG_HEARTBEAT  	static unsigned short n; @@ -72,8 +64,6 @@ static irqreturn_t timer_interrupt(int irq, void *dummy)  	__set_LEDS(n);  #endif /* CONFIG_HEARTBEAT */ -	write_sequnlock(&xtime_lock); -  	update_process_times(user_mode(get_irq_regs()));  	return IRQ_HANDLED; diff --git a/arch/frv/kernel/traps.c b/arch/frv/kernel/traps.c index 1d2dfe67d44..a6d105d61b2 100644 --- a/arch/frv/kernel/traps.c +++ b/arch/frv/kernel/traps.c @@ -23,7 +23,6 @@  #include <asm/asm-offsets.h>  #include <asm/setup.h>  #include <asm/fpu.h> -#include <asm/system.h>  #include <asm/uaccess.h>  #include <asm/pgtable.h>  #include <asm/siginfo.h> @@ -467,17 +466,6 @@ asmlinkage void compound_exception(unsigned long esfr1,  	BUG();  } /* end compound_exception() */ -/*****************************************************************************/ -/* - * The architecture-independent backtrace generator - */ -void dump_stack(void) -{ -	show_stack(NULL, NULL); -} - -EXPORT_SYMBOL(dump_stack); -  void show_stack(struct task_struct *task, unsigned long *sp)  {  } @@ -509,6 +497,7 @@ void show_regs(struct pt_regs *regs)  	int loop;  	printk("\n"); +	show_regs_print_info(KERN_DEFAULT);  	printk("Frame: @%08lx [%s]\n",  	       (unsigned long) regs, @@ -523,8 +512,6 @@ void show_regs(struct pt_regs *regs)  		else  			printk(" | ");  	} - -	printk("Process %s (pid: %d)\n", current->comm, current->pid);  }  void die_if_kernel(const char *str, ...) @@ -536,7 +523,7 @@ void die_if_kernel(const char *str, ...)  		return;  	va_start(va, str); -	vsprintf(buffer, str, va); +	vsnprintf(buffer, sizeof(buffer), str, va);  	va_end(va);  	console_verbose(); diff --git a/arch/frv/kernel/vmlinux.lds.S b/arch/frv/kernel/vmlinux.lds.S index 8b973f3cc90..7e958d829ec 100644 --- a/arch/frv/kernel/vmlinux.lds.S +++ b/arch/frv/kernel/vmlinux.lds.S @@ -37,7 +37,7 @@ SECTIONS    _einittext = .;    INIT_DATA_SECTION(8) -  PERCPU(4096) +  PERCPU_SECTION(L1_CACHE_BYTES)    . = ALIGN(PAGE_SIZE);    __init_end = .; diff --git a/arch/frv/mb93090-mb00/Makefile b/arch/frv/mb93090-mb00/Makefile index b73b542f8f4..21f1df1b378 100644 --- a/arch/frv/mb93090-mb00/Makefile +++ b/arch/frv/mb93090-mb00/Makefile @@ -3,7 +3,7 @@  #  ifeq "$(CONFIG_PCI)" "y" -obj-y := pci-frv.o pci-irq.o pci-vdk.o pci-iomap.o +obj-y := pci-frv.o pci-irq.o pci-vdk.o  ifeq "$(CONFIG_MMU)" "y"  obj-y += pci-dma.o diff --git a/arch/frv/mb93090-mb00/pci-dma-nommu.c b/arch/frv/mb93090-mb00/pci-dma-nommu.c index e47857f889b..b99c2a7cc7a 100644 --- a/arch/frv/mb93090-mb00/pci-dma-nommu.c +++ b/arch/frv/mb93090-mb00/pci-dma-nommu.c @@ -11,6 +11,7 @@  #include <linux/types.h>  #include <linux/slab.h> +#include <linux/export.h>  #include <linux/dma-mapping.h>  #include <linux/list.h>  #include <linux/pci.h> diff --git a/arch/frv/mb93090-mb00/pci-dma.c b/arch/frv/mb93090-mb00/pci-dma.c index 41098a3803a..82478979ac9 100644 --- a/arch/frv/mb93090-mb00/pci-dma.c +++ b/arch/frv/mb93090-mb00/pci-dma.c @@ -13,6 +13,7 @@  #include <linux/dma-mapping.h>  #include <linux/list.h>  #include <linux/pci.h> +#include <linux/export.h>  #include <linux/highmem.h>  #include <linux/scatterlist.h>  #include <asm/io.h> @@ -61,14 +62,14 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,  	dampr2 = __get_DAMPR(2);  	for (i = 0; i < nents; i++) { -		vaddr = kmap_atomic_primary(sg_page(&sg[i]), __KM_CACHE); +		vaddr = kmap_atomic_primary(sg_page(&sg[i]));  		frv_dcache_writeback((unsigned long) vaddr,  				     (unsigned long) vaddr + PAGE_SIZE);  	} -	kunmap_atomic_primary(vaddr, __KM_CACHE); +	kunmap_atomic_primary(vaddr);  	if (dampr2) {  		__set_DAMPR(2, dampr2);  		__set_IAMPR(2, dampr2); diff --git a/arch/frv/mb93090-mb00/pci-frv.c b/arch/frv/mb93090-mb00/pci-frv.c index 6b4fb28e9f9..67b1d168575 100644 --- a/arch/frv/mb93090-mb00/pci-frv.c +++ b/arch/frv/mb93090-mb00/pci-frv.c @@ -88,7 +88,7 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list)  	/* Depth-First Search on bus tree */  	for (ln=bus_list->next; ln != bus_list; ln=ln->next) { -		bus = pci_bus_b(ln); +		bus = list_entry(ln, struct pci_bus, node);  		if ((dev = bus->self)) {  			for (idx = PCI_BRIDGE_RESOURCES; idx < PCI_NUM_RESOURCES; idx++) {  				r = &dev->resource[idx]; @@ -194,23 +194,3 @@ void __init pcibios_resource_survey(void)  	pcibios_allocate_resources(1);  	pcibios_assign_resources();  } - -/* - *  If we set up a device for bus mastering, we need to check the latency - *  timer as certain crappy BIOSes forget to set it properly. - */ -unsigned int pcibios_max_latency = 255; - -void pcibios_set_master(struct pci_dev *dev) -{ -	u8 lat; -	pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat); -	if (lat < 16) -		lat = (64 <= pcibios_max_latency) ? 64 : pcibios_max_latency; -	else if (lat > pcibios_max_latency) -		lat = pcibios_max_latency; -	else -		return; -	printk(KERN_DEBUG "PCI: Setting latency timer of device %s to %d\n", pci_name(dev), lat); -	pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat); -} diff --git a/arch/frv/mb93090-mb00/pci-frv.h b/arch/frv/mb93090-mb00/pci-frv.h index f3fe5591479..a7e487fe76e 100644 --- a/arch/frv/mb93090-mb00/pci-frv.h +++ b/arch/frv/mb93090-mb00/pci-frv.h @@ -26,14 +26,10 @@ extern unsigned int __nongpreldata pci_probe;  /* pci-frv.c */ -extern unsigned int pcibios_max_latency; -  void pcibios_resource_survey(void);  /* pci-vdk.c */ -extern int __nongpreldata pcibios_last_bus; -extern struct pci_bus *__nongpreldata pci_root_bus;  extern struct pci_ops *__nongpreldata pci_root_ops;  /* pci-irq.c */ diff --git a/arch/frv/mb93090-mb00/pci-iomap.c b/arch/frv/mb93090-mb00/pci-iomap.c deleted file mode 100644 index 35f6df28351..00000000000 --- a/arch/frv/mb93090-mb00/pci-iomap.c +++ /dev/null @@ -1,29 +0,0 @@ -/* pci-iomap.c: description - * - * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved. - * Written by David Howells (dhowells@redhat.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - */ -#include <linux/pci.h> -#include <linux/module.h> - -void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) -{ -	resource_size_t start = pci_resource_start(dev, bar); -	resource_size_t len = pci_resource_len(dev, bar); -	unsigned long flags = pci_resource_flags(dev, bar); - -	if (!len || !start) -		return NULL; - -	if ((flags & IORESOURCE_IO) || (flags & IORESOURCE_MEM)) -		return (void __iomem *) start; - -	return NULL; -} - -EXPORT_SYMBOL(pci_iomap); diff --git a/arch/frv/mb93090-mb00/pci-irq.c b/arch/frv/mb93090-mb00/pci-irq.c index 20f6497b2cd..1c35c93f942 100644 --- a/arch/frv/mb93090-mb00/pci-irq.c +++ b/arch/frv/mb93090-mb00/pci-irq.c @@ -28,7 +28,7 @@   *   */ -static const uint8_t __initdata pci_bus0_irq_routing[32][4] = { +static const uint8_t __initconst pci_bus0_irq_routing[32][4] = {  	[0 ] = { IRQ_FPGA_MB86943_PCI_INTA },  	[16] = { IRQ_FPGA_RTL8029_INTA },  	[17] = { IRQ_FPGA_PCI_INTC, IRQ_FPGA_PCI_INTD, IRQ_FPGA_PCI_INTA, IRQ_FPGA_PCI_INTB }, @@ -55,10 +55,6 @@ void __init pcibios_fixup_irqs(void)  	}  } -void __init pcibios_penalize_isa_irq(int irq) -{ -} -  void pcibios_enable_irq(struct pci_dev *dev)  {  	pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq); diff --git a/arch/frv/mb93090-mb00/pci-vdk.c b/arch/frv/mb93090-mb00/pci-vdk.c index f8dd37e4953..efa5d65b000 100644 --- a/arch/frv/mb93090-mb00/pci-vdk.c +++ b/arch/frv/mb93090-mb00/pci-vdk.c @@ -25,8 +25,6 @@  unsigned int __nongpreldata pci_probe = 1; -int  __nongpreldata pcibios_last_bus = -1; -struct pci_bus *__nongpreldata pci_root_bus;  struct pci_ops *__nongpreldata pci_root_ops;  /* @@ -221,37 +219,6 @@ static struct pci_ops * __init pci_check_direct(void)  }  /* - * Discover remaining PCI buses in case there are peer host bridges. - * We use the number of last PCI bus provided by the PCI BIOS. - */ -static void __init pcibios_fixup_peer_bridges(void) -{ -	struct pci_bus bus; -	struct pci_dev dev; -	int n; -	u16 l; - -	if (pcibios_last_bus <= 0 || pcibios_last_bus >= 0xff) -		return; -	printk("PCI: Peer bridge fixup\n"); -	for (n=0; n <= pcibios_last_bus; n++) { -		if (pci_find_bus(0, n)) -			continue; -		bus.number = n; -		bus.ops = pci_root_ops; -		dev.bus = &bus; -		for(dev.devfn=0; dev.devfn<256; dev.devfn += 8) -			if (!pci_read_config_word(&dev, PCI_VENDOR_ID, &l) && -			    l != 0x0000 && l != 0xffff) { -				printk("Found device at %02x:%02x [%04x]\n", n, dev.devfn, l); -				printk("PCI: Discovered peer bus %02x\n", n); -				pci_scan_bus(n, pci_root_ops, NULL); -				break; -			} -	} -} - -/*   * Exceptions for specific devices. Usually work-arounds for fatal design flaws.   */ @@ -268,7 +235,7 @@ static void __init pci_fixup_umc_ide(struct pci_dev *d)  		d->resource[i].flags |= PCI_BASE_ADDRESS_SPACE_IO;  } -static void __init pci_fixup_ide_bases(struct pci_dev *d) +static void pci_fixup_ide_bases(struct pci_dev *d)  {  	int i; @@ -287,7 +254,7 @@ static void __init pci_fixup_ide_bases(struct pci_dev *d)  	}  } -static void __init pci_fixup_ide_trash(struct pci_dev *d) +static void pci_fixup_ide_trash(struct pci_dev *d)  {  	int i; @@ -300,7 +267,7 @@ static void __init pci_fixup_ide_trash(struct pci_dev *d)  		d->resource[i].start = d->resource[i].end = d->resource[i].flags = 0;  } -static void __devinit  pci_fixup_latency(struct pci_dev *d) +static void pci_fixup_latency(struct pci_dev *d)  {  	/*  	 *  SiS 5597 and 5598 chipsets require latency timer set to @@ -321,24 +288,17 @@ DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases);   *  are examined.   */ -void __init pcibios_fixup_bus(struct pci_bus *bus) +void pcibios_fixup_bus(struct pci_bus *bus)  {  #if 0  	printk("### PCIBIOS_FIXUP_BUS(%d)\n",bus->number);  #endif -	if (bus->number == 0) { -		bus->resource[0] = &pci_ioport_resource; -		bus->resource[1] = &pci_iomem_resource; -	} -  	pci_read_bridge_bases(bus);  	if (bus->number == 0) { -		struct list_head *ln;  		struct pci_dev *dev; -		for (ln=bus->devices.next; ln != &bus->devices; ln=ln->next) { -			dev = pci_dev_b(ln); +		list_for_each_entry(dev, &bus->devices, bus_list) {  			if (dev->devfn == 0) {  				dev->resource[0].start = 0;  				dev->resource[0].end = 0; @@ -357,6 +317,7 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)  int __init pcibios_init(void)  {  	struct pci_ops *dir = NULL; +	LIST_HEAD(resources);  	if (!mb93090_mb00_detected)  		return -ENXIO; @@ -420,10 +381,11 @@ int __init pcibios_init(void)  	}  	printk("PCI: Probing PCI hardware\n"); -	pci_root_bus = pci_scan_bus(0, pci_root_ops, NULL); +	pci_add_resource(&resources, &pci_ioport_resource); +	pci_add_resource(&resources, &pci_iomem_resource); +	pci_scan_root_bus(NULL, 0, pci_root_ops, NULL, &resources);  	pcibios_irq_init(); -	pcibios_fixup_peer_bridges();  	pcibios_fixup_irqs();  	pcibios_resource_survey(); @@ -437,9 +399,6 @@ char * __init pcibios_setup(char *str)  	if (!strcmp(str, "off")) {  		pci_probe = 0;  		return NULL; -	} else if (!strncmp(str, "lastbus=", 8)) { -		pcibios_last_bus = simple_strtol(str+8, NULL, 0); -		return NULL;  	}  	return str;  } diff --git a/arch/frv/mm/cache-page.c b/arch/frv/mm/cache-page.c index b24ade27a0f..8e09dae0ec3 100644 --- a/arch/frv/mm/cache-page.c +++ b/arch/frv/mm/cache-page.c @@ -26,11 +26,11 @@ void flush_dcache_page(struct page *page)  	dampr2 = __get_DAMPR(2); -	vaddr = kmap_atomic_primary(page, __KM_CACHE); +	vaddr = kmap_atomic_primary(page);  	frv_dcache_writeback((unsigned long) vaddr, (unsigned long) vaddr + PAGE_SIZE); -	kunmap_atomic_primary(vaddr, __KM_CACHE); +	kunmap_atomic_primary(vaddr);  	if (dampr2) {  		__set_DAMPR(2, dampr2); @@ -54,12 +54,12 @@ void flush_icache_user_range(struct vm_area_struct *vma, struct page *page,  	dampr2 = __get_DAMPR(2); -	vaddr = kmap_atomic_primary(page, __KM_CACHE); +	vaddr = kmap_atomic_primary(page);  	start = (start & ~PAGE_MASK) | (unsigned long) vaddr;  	frv_cache_wback_inv(start, start + len); -	kunmap_atomic_primary(vaddr, __KM_CACHE); +	kunmap_atomic_primary(vaddr);  	if (dampr2) {  		__set_DAMPR(2, dampr2); diff --git a/arch/frv/mm/elf-fdpic.c b/arch/frv/mm/elf-fdpic.c index 385fd30b142..836f14707a6 100644 --- a/arch/frv/mm/elf-fdpic.c +++ b/arch/frv/mm/elf-fdpic.c @@ -60,7 +60,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi  				     unsigned long pgoff, unsigned long flags)  {  	struct vm_area_struct *vma; -	unsigned long limit; +	struct vm_unmapped_area_info info;  	if (len > TASK_SIZE)  		return -ENOMEM; @@ -79,39 +79,24 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi  	}  	/* search between the bottom of user VM and the stack grow area */ -	addr = PAGE_SIZE; -	limit = (current->mm->start_stack - 0x00200000); -	if (addr + len <= limit) { -		limit -= len; - -		if (addr <= limit) { -			vma = find_vma(current->mm, PAGE_SIZE); -			for (; vma; vma = vma->vm_next) { -				if (addr > limit) -					break; -				if (addr + len <= vma->vm_start) -					goto success; -				addr = vma->vm_end; -			} -		} -	} +	info.flags = 0; +	info.length = len; +	info.low_limit = PAGE_SIZE; +	info.high_limit = (current->mm->start_stack - 0x00200000); +	info.align_mask = 0; +	info.align_offset = 0; +	addr = vm_unmapped_area(&info); +	if (!(addr & ~PAGE_MASK)) +		goto success; +	VM_BUG_ON(addr != -ENOMEM);  	/* search from just above the WorkRAM area to the top of memory */ -	addr = PAGE_ALIGN(0x80000000); -	limit = TASK_SIZE - len; -	if (addr <= limit) { -		vma = find_vma(current->mm, addr); -		for (; vma; vma = vma->vm_next) { -			if (addr > limit) -				break; -			if (addr + len <= vma->vm_start) -				goto success; -			addr = vma->vm_end; -		} - -		if (!vma && addr <= limit) -			goto success; -	} +	info.low_limit = PAGE_ALIGN(0x80000000); +	info.high_limit = TASK_SIZE; +	addr = vm_unmapped_area(&info); +	if (!(addr & ~PAGE_MASK)) +		goto success; +	VM_BUG_ON(addr != -ENOMEM);  #if 0  	printk("[area] l=%lx (ENOMEM) f='%s'\n", diff --git a/arch/frv/mm/fault.c b/arch/frv/mm/fault.c index a325d57a83d..9a66372fc7c 100644 --- a/arch/frv/mm/fault.c +++ b/arch/frv/mm/fault.c @@ -20,7 +20,6 @@  #include <linux/ptrace.h>  #include <linux/hardirq.h> -#include <asm/system.h>  #include <asm/pgtable.h>  #include <asm/uaccess.h>  #include <asm/gdb-stub.h> @@ -35,11 +34,11 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear  	struct vm_area_struct *vma;  	struct mm_struct *mm;  	unsigned long _pme, lrai, lrad, fixup; +	unsigned long flags = 0;  	siginfo_t info;  	pgd_t *pge;  	pud_t *pue;  	pte_t *pte; -	int write;  	int fault;  #if 0 @@ -82,6 +81,9 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear  	if (in_atomic() || !mm)  		goto no_context; +	if (user_mode(__frame)) +		flags |= FAULT_FLAG_USER; +  	down_read(&mm->mmap_sem);  	vma = find_vma(mm, ear0); @@ -130,7 +132,6 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear   */   good_area:  	info.si_code = SEGV_ACCERR; -	write = 0;  	switch (esr0 & ESR0_ATXC) {  	default:  		/* handle write to write protected page */ @@ -141,7 +142,7 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear  #endif  		if (!(vma->vm_flags & VM_WRITE))  			goto bad_area; -		write = 1; +		flags |= FAULT_FLAG_WRITE;  		break;  		 /* handle read from protected page */ @@ -163,7 +164,7 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear  	 * make sure we exit gracefully rather than endlessly redo  	 * the fault.  	 */ -	fault = handle_mm_fault(mm, vma, ear0, write ? FAULT_FLAG_WRITE : 0); +	fault = handle_mm_fault(mm, vma, ear0, flags);  	if (unlikely(fault & VM_FAULT_ERROR)) {  		if (fault & VM_FAULT_OOM)  			goto out_of_memory; diff --git a/arch/frv/mm/highmem.c b/arch/frv/mm/highmem.c index fd7fcd4c2e3..bed9a9bd3c1 100644 --- a/arch/frv/mm/highmem.c +++ b/arch/frv/mm/highmem.c @@ -37,7 +37,7 @@ struct page *kmap_atomic_to_page(void *ptr)  	return virt_to_page(ptr);  } -void *__kmap_atomic(struct page *page) +void *kmap_atomic(struct page *page)  {  	unsigned long paddr;  	int type; @@ -50,11 +50,11 @@ void *__kmap_atomic(struct page *page)  	/*  	 * The first 4 primary maps are reserved for architecture code  	 */ -	case 0:		return __kmap_atomic_primary(4, paddr, 6); -	case 1:		return __kmap_atomic_primary(5, paddr, 7); -	case 2:		return __kmap_atomic_primary(6, paddr, 8); -	case 3:		return __kmap_atomic_primary(7, paddr, 9); -	case 4:		return __kmap_atomic_primary(8, paddr, 10); +	case 0:		return __kmap_atomic_primary(0, paddr, 6); +	case 1:		return __kmap_atomic_primary(0, paddr, 7); +	case 2:		return __kmap_atomic_primary(0, paddr, 8); +	case 3:		return __kmap_atomic_primary(0, paddr, 9); +	case 4:		return __kmap_atomic_primary(0, paddr, 10);  	case 5 ... 5 + NR_TLB_LINES - 1:  		return __kmap_atomic_secondary(type - 5, paddr); @@ -64,17 +64,17 @@ void *__kmap_atomic(struct page *page)  		return NULL;  	}  } -EXPORT_SYMBOL(__kmap_atomic); +EXPORT_SYMBOL(kmap_atomic);  void __kunmap_atomic(void *kvaddr)  {  	int type = kmap_atomic_idx();  	switch (type) { -	case 0:		__kunmap_atomic_primary(4, 6);	break; -	case 1:		__kunmap_atomic_primary(5, 7);	break; -	case 2:		__kunmap_atomic_primary(6, 8);	break; -	case 3:		__kunmap_atomic_primary(7, 9);	break; -	case 4:		__kunmap_atomic_primary(8, 10);	break; +	case 0:		__kunmap_atomic_primary(0, 6);	break; +	case 1:		__kunmap_atomic_primary(0, 7);	break; +	case 2:		__kunmap_atomic_primary(0, 8);	break; +	case 3:		__kunmap_atomic_primary(0, 9);	break; +	case 4:		__kunmap_atomic_primary(0, 10);	break;  	case 5 ... 5 + NR_TLB_LINES - 1:  		__kunmap_atomic_secondary(type - 5, kvaddr); diff --git a/arch/frv/mm/init.c b/arch/frv/mm/init.c index ed64588ac3a..88a15974352 100644 --- a/arch/frv/mm/init.c +++ b/arch/frv/mm/init.c @@ -33,7 +33,6 @@  #include <asm/segment.h>  #include <asm/page.h>  #include <asm/pgtable.h> -#include <asm/system.h>  #include <asm/mmu_context.h>  #include <asm/virtconvert.h>  #include <asm/sections.h> @@ -41,8 +40,6 @@  #undef DEBUG -DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); -  /*   * BAD_PAGE is the page that is used for page faults when linux   * is out-of-memory. Older versions of linux just did a @@ -81,7 +78,7 @@ void __init paging_init(void)  	memset((void *) empty_zero_page, 0, PAGE_SIZE);  #ifdef CONFIG_HIGHMEM -	if (num_physpages - num_mappedpages) { +	if (get_num_physpages() - num_mappedpages) {  		pgd_t *pge;  		pud_t *pue;  		pmd_t *pme; @@ -99,7 +96,7 @@ void __init paging_init(void)  	 */  	zones_size[ZONE_NORMAL]  = max_low_pfn - min_low_pfn;  #ifdef CONFIG_HIGHMEM -	zones_size[ZONE_HIGHMEM] = num_physpages - num_mappedpages; +	zones_size[ZONE_HIGHMEM] = get_num_physpages() - num_mappedpages;  #endif  	free_area_init(zones_size); @@ -117,51 +114,24 @@ void __init paging_init(void)   */  void __init mem_init(void)  { -	unsigned long npages = (memory_end - memory_start) >> PAGE_SHIFT; -	unsigned long tmp; -#ifdef CONFIG_MMU -	unsigned long loop, pfn; -	int datapages = 0; -#endif -	int codek = 0, datak = 0; - -	/* this will put all memory onto the freelists */ -	totalram_pages = free_all_bootmem(); +	unsigned long code_size = _etext - _stext; -#ifdef CONFIG_MMU -	for (loop = 0 ; loop < npages ; loop++) -		if (PageReserved(&mem_map[loop])) -			datapages++; - -#ifdef CONFIG_HIGHMEM -	for (pfn = num_physpages - 1; pfn >= num_mappedpages; pfn--) { -		struct page *page = &mem_map[pfn]; +	/* this will put all low memory onto the freelists */ +	free_all_bootmem(); +#if defined(CONFIG_MMU) && defined(CONFIG_HIGHMEM) +	{ +		unsigned long pfn; -		ClearPageReserved(page); -		init_page_count(page); -		__free_page(page); -		totalram_pages++; +		for (pfn = get_num_physpages() - 1; +		     pfn >= num_mappedpages; pfn--) +			free_highmem_page(&mem_map[pfn]);  	}  #endif -	codek = ((unsigned long) &_etext - (unsigned long) &_stext) >> 10; -	datak = datapages << (PAGE_SHIFT - 10); - -#else -	codek = (_etext - _stext) >> 10; -	datak = 0; //(_ebss - _sdata) >> 10; -#endif - -	tmp = nr_free_pages() << PAGE_SHIFT; -	printk("Memory available: %luKiB/%luKiB RAM, %luKiB/%luKiB ROM (%dKiB kernel code, %dKiB data)\n", -	       tmp >> 10, -	       npages << (PAGE_SHIFT - 10), -	       (rom_length > 0) ? ((rom_length >> 10) - codek) : 0, -	       rom_length >> 10, -	       codek, -	       datak -	       ); - +	mem_init_print_info(NULL); +	if (rom_length > 0 && rom_length >= code_size) +		printk("Memory available:  %luKiB/%luKiB ROM\n", +			(rom_length - code_size) >> 10, rom_length >> 10);  } /* end mem_init() */  /*****************************************************************************/ @@ -171,21 +141,7 @@ void __init mem_init(void)  void free_initmem(void)  {  #if defined(CONFIG_RAMKERNEL) && !defined(CONFIG_PROTECT_KERNEL) -	unsigned long start, end, addr; - -	start = PAGE_ALIGN((unsigned long) &__init_begin);	/* round up */ -	end   = ((unsigned long) &__init_end) & PAGE_MASK;	/* round down */ - -	/* next to check that the page we free is not a partial page */ -	for (addr = start; addr < end; addr += PAGE_SIZE) { -		ClearPageReserved(virt_to_page(addr)); -		init_page_count(virt_to_page(addr)); -		free_page(addr); -		totalram_pages++; -	} - -	printk("Freeing unused kernel memory: %ldKiB freed (0x%lx - 0x%lx)\n", -	       (end - start) >> 10, start, end); +	free_initmem_default(-1);  #endif  } /* end free_initmem() */ @@ -196,14 +152,6 @@ void free_initmem(void)  #ifdef CONFIG_BLK_DEV_INITRD  void __init free_initrd_mem(unsigned long start, unsigned long end)  { -	int pages = 0; -	for (; start < end; start += PAGE_SIZE) { -		ClearPageReserved(virt_to_page(start)); -		init_page_count(virt_to_page(start)); -		free_page(start); -		totalram_pages++; -		pages++; -	} -	printk("Freeing initrd memory: %dKiB freed\n", (pages * PAGE_SIZE) >> 10); +	free_reserved_area((void *)start, (void *)end, -1, "initrd");  } /* end free_initrd_mem() */  #endif diff --git a/arch/frv/mm/kmap.c b/arch/frv/mm/kmap.c index fb78be38ea0..e9217e605aa 100644 --- a/arch/frv/mm/kmap.c +++ b/arch/frv/mm/kmap.c @@ -21,7 +21,6 @@  #include <asm/page.h>  #include <asm/pgalloc.h>  #include <asm/io.h> -#include <asm/system.h>  #undef DEBUG diff --git a/arch/frv/mm/pgalloc.c b/arch/frv/mm/pgalloc.c index c42c83d507b..41907d25ed3 100644 --- a/arch/frv/mm/pgalloc.c +++ b/arch/frv/mm/pgalloc.c @@ -37,11 +37,15 @@ pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address)  #else  	page = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0);  #endif -	if (page) { -		clear_highpage(page); -		pgtable_page_ctor(page); -		flush_dcache_page(page); +	if (!page) +		return NULL; + +	clear_highpage(page); +	if (!pgtable_page_ctor(page)) { +		__free_page(page); +		return NULL;  	} +	flush_dcache_page(page);  	return page;  } @@ -77,7 +81,7 @@ void __set_pmd(pmd_t *pmdptr, unsigned long pmd)   * checks at dup_mmap(), exec(), and other mmlist addition points   * could be used. The locking scheme was chosen on the basis of   * manfred's recommendations and having no core impact whatsoever. - * -- wli + * -- nyc   */  DEFINE_SPINLOCK(pgd_lock);  struct page *pgd_list; @@ -133,13 +137,7 @@ void pgd_dtor(void *pgd)  pgd_t *pgd_alloc(struct mm_struct *mm)  { -	pgd_t *pgd; - -	pgd = quicklist_alloc(0, GFP_KERNEL, pgd_ctor); -	if (!pgd) -		return pgd; - -	return pgd; +	return quicklist_alloc(0, GFP_KERNEL, pgd_ctor);  }  void pgd_free(struct mm_struct *mm, pgd_t *pgd)  | 
