diff options
Diffstat (limited to 'arch/parisc/include/asm')
24 files changed, 109 insertions, 134 deletions
diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index ff4c9faed54..ecf25e6678a 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -1,6 +1,29 @@ -generic-y += word-at-a-time.h auxvec.h user.h cputime.h emergency-restart.h \ -	  segment.h topology.h vga.h device.h percpu.h hw_irq.h mutex.h \ -	  div64.h irq_regs.h kdebug.h kvm_para.h local64.h local.h param.h \ -	  poll.h xor.h clkdev.h exec.h +generic-y += auxvec.h +generic-y += barrier.h +generic-y += clkdev.h +generic-y += cputime.h +generic-y += device.h +generic-y += div64.h +generic-y += emergency-restart.h +generic-y += exec.h +generic-y += hash.h +generic-y += hw_irq.h +generic-y += irq_regs.h +generic-y += kdebug.h +generic-y += kvm_para.h +generic-y += local.h +generic-y += local64.h +generic-y += mcs_spinlock.h +generic-y += mutex.h +generic-y += param.h +generic-y += percpu.h +generic-y += poll.h +generic-y += preempt.h +generic-y += segment.h +generic-y += topology.h  generic-y += trace_clock.h +generic-y += user.h +generic-y += vga.h +generic-y += word-at-a-time.h +generic-y += xor.h diff --git a/arch/parisc/include/asm/assembly.h b/arch/parisc/include/asm/assembly.h index 0da84823234..b3069fd8346 100644 --- a/arch/parisc/include/asm/assembly.h +++ b/arch/parisc/include/asm/assembly.h @@ -515,5 +515,17 @@  	nop	/* 7 */  	.endm +	/* +	 * ASM_EXCEPTIONTABLE_ENTRY +	 * +	 * Creates an exception table entry. +	 * Do not convert to a assembler macro. This won't work. +	 */ +#define ASM_EXCEPTIONTABLE_ENTRY(fault_addr, except_addr)	\ +	.section __ex_table,"aw"			!	\ +	ASM_ULONG_INSN	fault_addr, except_addr		!	\ +	.previous + +  #endif /* __ASSEMBLY__ */  #endif diff --git a/arch/parisc/include/asm/atomic.h b/arch/parisc/include/asm/atomic.h index 472886ceab1..0be2db2c7d4 100644 --- a/arch/parisc/include/asm/atomic.h +++ b/arch/parisc/include/asm/atomic.h @@ -7,6 +7,7 @@  #include <linux/types.h>  #include <asm/cmpxchg.h> +#include <asm/barrier.h>  /*   * Atomic operations that C can't guarantee us.  Useful for @@ -143,11 +144,6 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)  #define ATOMIC_INIT(i)	{ (i) } -#define smp_mb__before_atomic_dec()	smp_mb() -#define smp_mb__after_atomic_dec()	smp_mb() -#define smp_mb__before_atomic_inc()	smp_mb() -#define smp_mb__after_atomic_inc()	smp_mb() -  #ifdef CONFIG_64BIT  #define ATOMIC64_INIT(i) { (i) } diff --git a/arch/parisc/include/asm/barrier.h b/arch/parisc/include/asm/barrier.h deleted file mode 100644 index e77d834aa80..00000000000 --- a/arch/parisc/include/asm/barrier.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef __PARISC_BARRIER_H -#define __PARISC_BARRIER_H - -/* -** This is simply the barrier() macro from linux/kernel.h but when serial.c -** uses tqueue.h uses smp_mb() defined using barrier(), linux/kernel.h -** hasn't yet been included yet so it fails, thus repeating the macro here. -** -** PA-RISC architecture allows for weakly ordered memory accesses although -** none of the processors use it. There is a strong ordered bit that is -** set in the O-bit of the page directory entry. Operating systems that -** can not tolerate out of order accesses should set this bit when mapping -** pages. The O-bit of the PSW should also be set to 1 (I don't believe any -** of the processor implemented the PSW O-bit). The PCX-W ERS states that -** the TLB O-bit is not implemented so the page directory does not need to -** have the O-bit set when mapping pages (section 3.1). This section also -** states that the PSW Y, Z, G, and O bits are not implemented. -** So it looks like nothing needs to be done for parisc-linux (yet). -** (thanks to chada for the above comment -ggg) -** -** The __asm__ op below simple prevents gcc/ld from reordering -** instructions across the mb() "call". -*/ -#define mb()		__asm__ __volatile__("":::"memory")	/* barrier() */ -#define rmb()		mb() -#define wmb()		mb() -#define smp_mb()	mb() -#define smp_rmb()	mb() -#define smp_wmb()	mb() -#define smp_read_barrier_depends()	do { } while(0) -#define read_barrier_depends()		do { } while(0) - -#define set_mb(var, value)		do { var = value; mb(); } while (0) - -#endif /* __PARISC_BARRIER_H */ diff --git a/arch/parisc/include/asm/bitops.h b/arch/parisc/include/asm/bitops.h index 8c9b631d2a7..3f9406d9b9d 100644 --- a/arch/parisc/include/asm/bitops.h +++ b/arch/parisc/include/asm/bitops.h @@ -8,6 +8,7 @@  #include <linux/compiler.h>  #include <asm/types.h>		/* for BITS_PER_LONG/SHIFT_PER_LONG */  #include <asm/byteorder.h> +#include <asm/barrier.h>  #include <linux/atomic.h>  /* @@ -19,9 +20,6 @@  #define CHOP_SHIFTCOUNT(x) (((unsigned long) (x)) & (BITS_PER_LONG - 1)) -#define smp_mb__before_clear_bit()      smp_mb() -#define smp_mb__after_clear_bit()       smp_mb() -  /* See http://marc.theaimsgroup.com/?t=108826637900003 for discussion   * on use of volatile and __*_bit() (set/clear/change):   *	*_bit() want use of volatile. diff --git a/arch/parisc/include/asm/cacheflush.h b/arch/parisc/include/asm/cacheflush.h index f0e2784e7cc..de65f66ea64 100644 --- a/arch/parisc/include/asm/cacheflush.h +++ b/arch/parisc/include/asm/cacheflush.h @@ -125,15 +125,10 @@ flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned long vma  void mark_rodata_ro(void);  #endif -#ifdef CONFIG_PA8X00 -/* Only pa8800, pa8900 needs this */ -  #include <asm/kmap_types.h>  #define ARCH_HAS_KMAP -void kunmap_parisc(void *addr); -  static inline void *kmap(struct page *page)  {  	might_sleep(); @@ -142,7 +137,7 @@ static inline void *kmap(struct page *page)  static inline void kunmap(struct page *page)  { -	kunmap_parisc(page_address(page)); +	flush_kernel_dcache_page_addr(page_address(page));  }  static inline void *kmap_atomic(struct page *page) @@ -153,14 +148,13 @@ static inline void *kmap_atomic(struct page *page)  static inline void __kunmap_atomic(void *addr)  { -	kunmap_parisc(addr); +	flush_kernel_dcache_page_addr(addr);  	pagefault_enable();  }  #define kmap_atomic_prot(page, prot)	kmap_atomic(page)  #define kmap_atomic_pfn(pfn)	kmap_atomic(pfn_to_page(pfn))  #define kmap_atomic_to_page(ptr)	virt_to_page(ptr) -#endif  #endif /* _PARISC_CACHEFLUSH_H */ diff --git a/arch/parisc/include/asm/delay.h b/arch/parisc/include/asm/delay.h index 912ee7e6a57..08e58e679e3 100644 --- a/arch/parisc/include/asm/delay.h +++ b/arch/parisc/include/asm/delay.h @@ -1,15 +1,5 @@ -#ifndef _PARISC_DELAY_H -#define _PARISC_DELAY_H - -#include <asm/special_insns.h>    /* for mfctl() */ -#include <asm/processor.h> /* for boot_cpu_data */ - - -/* - * Copyright (C) 1993 Linus Torvalds - * - * Delay routines - */ +#ifndef _ASM_PARISC_DELAY_H +#define _ASM_PARISC_DELAY_H  static __inline__ void __delay(unsigned long loops) {  	asm volatile( @@ -19,25 +9,14 @@ static __inline__ void __delay(unsigned long loops) {  		: "=r" (loops) : "0" (loops));  } -static __inline__ void __cr16_delay(unsigned long clocks) { -	unsigned long start; - -	/* -	 * Note: Due to unsigned math, cr16 rollovers shouldn't be -	 * a problem here. However, on 32 bit, we need to make sure -	 * we don't pass in too big a value. The current default -	 * value of MAX_UDELAY_MS should help prevent this. -	 */ +extern void __udelay(unsigned long usecs); +extern void __udelay_bad(unsigned long usecs); -	start = mfctl(16); -	while ((mfctl(16) - start) < clocks) -	    ; +static inline void udelay(unsigned long usecs) +{ +	if (__builtin_constant_p(usecs) && (usecs) > 20000) +		__udelay_bad(usecs); +	__udelay(usecs);  } -static __inline__ void __udelay(unsigned long usecs) { -	__cr16_delay(usecs * ((unsigned long)boot_cpu_data.cpu_hz / 1000000UL)); -} - -#define udelay(n) __udelay(n) - -#endif /* defined(_PARISC_DELAY_H) */ +#endif /* _ASM_PARISC_DELAY_H */ diff --git a/arch/parisc/include/asm/elf.h b/arch/parisc/include/asm/elf.h index ad2b5039789..3391d061ecc 100644 --- a/arch/parisc/include/asm/elf.h +++ b/arch/parisc/include/asm/elf.h @@ -348,4 +348,8 @@ struct pt_regs;	/* forward declaration... */  #define ELF_HWCAP	0 +struct mm_struct; +extern unsigned long arch_randomize_brk(struct mm_struct *); +#define arch_randomize_brk arch_randomize_brk +  #endif diff --git a/arch/parisc/include/asm/ftrace.h b/arch/parisc/include/asm/ftrace.h index 72c0fafaa03..544ed8ef87e 100644 --- a/arch/parisc/include/asm/ftrace.h +++ b/arch/parisc/include/asm/ftrace.h @@ -24,15 +24,7 @@ extern void return_to_handler(void);  extern unsigned long return_address(unsigned int); -#define HAVE_ARCH_CALLER_ADDR - -#define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0)) -#define CALLER_ADDR1 return_address(1) -#define CALLER_ADDR2 return_address(2) -#define CALLER_ADDR3 return_address(3) -#define CALLER_ADDR4 return_address(4) -#define CALLER_ADDR5 return_address(5) -#define CALLER_ADDR6 return_address(6) +#define ftrace_return_address(n) return_address(n)  #endif /* __ASSEMBLY__ */ diff --git a/arch/parisc/include/asm/hardirq.h b/arch/parisc/include/asm/hardirq.h index 241c3451846..9b3bd039a60 100644 --- a/arch/parisc/include/asm/hardirq.h +++ b/arch/parisc/include/asm/hardirq.h @@ -21,7 +21,6 @@ typedef struct {  	unsigned int irq_stack_usage;  #ifdef CONFIG_SMP  	unsigned int irq_resched_count; -	unsigned int irq_call_count;  #endif  	unsigned int irq_unaligned_count;  	unsigned int irq_fpassist_count; diff --git a/arch/parisc/include/asm/page.h b/arch/parisc/include/asm/page.h index b7adb2ac049..60d5d174dfe 100644 --- a/arch/parisc/include/asm/page.h +++ b/arch/parisc/include/asm/page.h @@ -28,20 +28,9 @@ struct page;  void clear_page_asm(void *page);  void copy_page_asm(void *to, void *from); -void clear_user_page(void *vto, unsigned long vaddr, struct page *pg); +#define clear_user_page(vto, vaddr, page) clear_page_asm(vto)  void copy_user_page(void *vto, void *vfrom, unsigned long vaddr, -			   struct page *pg); - -/* #define CONFIG_PARISC_TMPALIAS */ - -#ifdef CONFIG_PARISC_TMPALIAS -void clear_user_highpage(struct page *page, unsigned long vaddr); -#define clear_user_highpage clear_user_highpage -struct vm_area_struct; -void copy_user_highpage(struct page *to, struct page *from, -	unsigned long vaddr, struct vm_area_struct *vma); -#define __HAVE_ARCH_COPY_USER_HIGHPAGE -#endif +			struct page *pg);  /*   * These are used to make use of C type-checking.. diff --git a/arch/parisc/include/asm/pci.h b/arch/parisc/include/asm/pci.h index 465154076d2..20df2b04fc0 100644 --- a/arch/parisc/include/asm/pci.h +++ b/arch/parisc/include/asm/pci.h @@ -215,11 +215,6 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev,  }  #endif -static inline void pcibios_penalize_isa_irq(int irq, int active) -{ -	/* We don't need to penalize isa irq's */ -} -  static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)  {  	return channel ? 15 : 14; diff --git a/arch/parisc/include/asm/pgalloc.h b/arch/parisc/include/asm/pgalloc.h index fc987a1c12a..f213f5b4c42 100644 --- a/arch/parisc/include/asm/pgalloc.h +++ b/arch/parisc/include/asm/pgalloc.h @@ -121,8 +121,12 @@ static inline pgtable_t  pte_alloc_one(struct mm_struct *mm, unsigned long address)  {  	struct page *page = alloc_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); -	if (page) -		pgtable_page_ctor(page); +	if (!page) +		return NULL; +	if (!pgtable_page_ctor(page)) { +		__free_page(page); +		return NULL; +	}  	return page;  } diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pgtable.h index 34899b5d959..22b89d1edba 100644 --- a/arch/parisc/include/asm/pgtable.h +++ b/arch/parisc/include/asm/pgtable.h @@ -511,6 +511,7 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr,  /* We provide our own get_unmapped_area to provide cache coherency */  #define HAVE_ARCH_UNMAPPED_AREA +#define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN  #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG  #define __HAVE_ARCH_PTEP_GET_AND_CLEAR diff --git a/arch/parisc/include/asm/processor.h b/arch/parisc/include/asm/processor.h index cc2290a3cac..d951c9681ab 100644 --- a/arch/parisc/include/asm/processor.h +++ b/arch/parisc/include/asm/processor.h @@ -30,6 +30,8 @@  #endif  #define current_text_addr() ({ void *pc; current_ia(pc); pc; }) +#define HAVE_ARCH_PICK_MMAP_LAYOUT +  #define TASK_SIZE_OF(tsk)       ((tsk)->thread.task_size)  #define TASK_SIZE	        TASK_SIZE_OF(current)  #define TASK_UNMAPPED_BASE      (current->thread.map_base) @@ -53,6 +55,11 @@  #define STACK_TOP	TASK_SIZE  #define STACK_TOP_MAX	DEFAULT_TASK_SIZE +/* Allow bigger stacks for 64-bit processes */ +#define STACK_SIZE_MAX	(USER_WIDE_MODE					\ +			 ? (1 << 30)	/* 1 GB */			\ +			 : (CONFIG_MAX_STACK_SIZE_MB*1024*1024)) +  #endif  #ifndef __ASSEMBLY__ diff --git a/arch/parisc/include/asm/ptrace.h b/arch/parisc/include/asm/ptrace.h index a2db278a5de..3c3cb004b7e 100644 --- a/arch/parisc/include/asm/ptrace.h +++ b/arch/parisc/include/asm/ptrace.h @@ -19,5 +19,9 @@  #define user_stack_pointer(regs)	((regs)->gr[30])  unsigned long profile_pc(struct pt_regs *); +static inline unsigned long regs_return_value(struct pt_regs *regs) +{ +	return regs->gr[20]; +}  #endif diff --git a/arch/parisc/include/asm/serial.h b/arch/parisc/include/asm/serial.h index d7e3cc60dbc..77e9b67c87e 100644 --- a/arch/parisc/include/asm/serial.h +++ b/arch/parisc/include/asm/serial.h @@ -6,5 +6,3 @@   * This is used for 16550-compatible UARTs   */  #define BASE_BAUD ( 1843200 / 16 ) - -#define SERIAL_PORT_DFNS diff --git a/arch/parisc/include/asm/shmparam.h b/arch/parisc/include/asm/shmparam.h index 628ddc22faa..afe1300ab66 100644 --- a/arch/parisc/include/asm/shmparam.h +++ b/arch/parisc/include/asm/shmparam.h @@ -1,8 +1,7 @@  #ifndef _ASMPARISC_SHMPARAM_H  #define _ASMPARISC_SHMPARAM_H -#define __ARCH_FORCE_SHMLBA 	1 - -#define SHMLBA 0x00400000   /* attach addr needs to be 4 Mb aligned */ +#define SHMLBA	   PAGE_SIZE	/* attach addr a multiple of this */ +#define SHM_COLOUR 0x00400000	/* shared mappings colouring */  #endif /* _ASMPARISC_SHMPARAM_H */ diff --git a/arch/parisc/include/asm/socket.h b/arch/parisc/include/asm/socket.h new file mode 100644 index 00000000000..748016cb122 --- /dev/null +++ b/arch/parisc/include/asm/socket.h @@ -0,0 +1,11 @@ +#ifndef _ASM_SOCKET_H +#define _ASM_SOCKET_H + +#include <uapi/asm/socket.h> + +/* O_NONBLOCK clashes with the bits used for socket types.  Therefore we + * have to define SOCK_NONBLOCK to a different value here. + */ +#define SOCK_NONBLOCK	0x40000000 + +#endif /* _ASM_SOCKET_H */ diff --git a/arch/parisc/include/asm/spinlock.h b/arch/parisc/include/asm/spinlock.h index 3516e0b2704..64f2992e439 100644 --- a/arch/parisc/include/asm/spinlock.h +++ b/arch/parisc/include/asm/spinlock.h @@ -191,8 +191,4 @@ static __inline__ int arch_write_can_lock(arch_rwlock_t *rw)  #define arch_read_lock_flags(lock, flags) arch_read_lock(lock)  #define arch_write_lock_flags(lock, flags) arch_write_lock(lock) -#define arch_spin_relax(lock)	cpu_relax() -#define arch_read_relax(lock)	cpu_relax() -#define arch_write_relax(lock)	cpu_relax() -  #endif /* __ASM_SPINLOCK_H */ diff --git a/arch/parisc/include/asm/thread_info.h b/arch/parisc/include/asm/thread_info.h index 540c88fa8f8..4b9b10ce1f9 100644 --- a/arch/parisc/include/asm/thread_info.h +++ b/arch/parisc/include/asm/thread_info.h @@ -46,9 +46,6 @@ struct thread_info {  #define THREAD_SIZE             (PAGE_SIZE << THREAD_SIZE_ORDER)  #define THREAD_SHIFT            (PAGE_SHIFT + THREAD_SIZE_ORDER) -#define PREEMPT_ACTIVE_BIT	28 -#define PREEMPT_ACTIVE		(1 << PREEMPT_ACTIVE_BIT) -  /*   * thread information flags   */ @@ -59,6 +56,7 @@ struct thread_info {  #define TIF_32BIT               4       /* 32 bit binary */  #define TIF_MEMDIE		5	/* is terminating due to OOM killer */  #define TIF_RESTORE_SIGMASK	6	/* restore saved signal mask */ +#define TIF_SYSCALL_AUDIT	7	/* syscall auditing active */  #define TIF_NOTIFY_RESUME	8	/* callback before returning to user */  #define TIF_SINGLESTEP		9	/* single stepping? */  #define TIF_BLOCKSTEP		10	/* branch stepping? */ @@ -68,6 +66,7 @@ struct thread_info {  #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)  #define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG)  #define _TIF_32BIT		(1 << TIF_32BIT) +#define _TIF_SYSCALL_AUDIT	(1 << TIF_SYSCALL_AUDIT)  #define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)  #define _TIF_SINGLESTEP		(1 << TIF_SINGLESTEP)  #define _TIF_BLOCKSTEP		(1 << TIF_BLOCKSTEP) @@ -75,7 +74,17 @@ struct thread_info {  #define _TIF_USER_WORK_MASK     (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | \                                   _TIF_NEED_RESCHED)  #define _TIF_SYSCALL_TRACE_MASK (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP |	\ -				 _TIF_BLOCKSTEP) +				 _TIF_BLOCKSTEP | _TIF_SYSCALL_AUDIT) + +#ifdef CONFIG_64BIT +# ifdef CONFIG_COMPAT +#  define is_32bit_task()	(test_thread_flag(TIF_32BIT)) +# else +#  define is_32bit_task()	(0) +# endif +#else +# define is_32bit_task()	(1) +#endif  #endif /* __KERNEL__ */ diff --git a/arch/parisc/include/asm/traps.h b/arch/parisc/include/asm/traps.h index 1945f995f2d..4736020ba5e 100644 --- a/arch/parisc/include/asm/traps.h +++ b/arch/parisc/include/asm/traps.h @@ -6,7 +6,7 @@ struct pt_regs;  /* traps.c */  void parisc_terminate(char *msg, struct pt_regs *regs, -		int code, unsigned long offset); +		int code, unsigned long offset) __noreturn __cold;  /* mm/fault.c */  void do_page_fault(struct pt_regs *regs, unsigned long code, diff --git a/arch/parisc/include/asm/uaccess.h b/arch/parisc/include/asm/uaccess.h index e0a82358517..4006964d8e1 100644 --- a/arch/parisc/include/asm/uaccess.h +++ b/arch/parisc/include/asm/uaccess.h @@ -59,12 +59,13 @@ static inline long access_ok(int type, const void __user * addr,  /*   * The exception table contains two values: the first is an address   * for an instruction that is allowed to fault, and the second is - * the address to the fixup routine.  + * the address to the fixup routine. Even on a 64bit kernel we could + * use a 32bit (unsigned int) address here.   */  struct exception_table_entry { -	unsigned long insn;  /* address of insn that is allowed to fault.   */ -	long fixup;          /* fixup routine */ +	unsigned long insn;	/* address of insn that is allowed to fault. */ +	unsigned long fixup;	/* fixup routine */  };  #define ASM_EXCEPTIONTABLE_ENTRY( fault_addr, except_addr )\ diff --git a/arch/parisc/include/asm/unistd.h b/arch/parisc/include/asm/unistd.h index 74d835820ee..5f4c68daa26 100644 --- a/arch/parisc/include/asm/unistd.h +++ b/arch/parisc/include/asm/unistd.h @@ -145,7 +145,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5)	\  #define __ARCH_WANT_SYS_ALARM  #define __ARCH_WANT_SYS_GETHOSTNAME  #define __ARCH_WANT_SYS_PAUSE -#define __ARCH_WANT_SYS_SGETMASK  #define __ARCH_WANT_SYS_SIGNAL  #define __ARCH_WANT_SYS_TIME  #define __ARCH_WANT_COMPAT_SYS_TIME  | 
