diff options
Diffstat (limited to 'arch/ia64/include/asm')
123 files changed, 617 insertions, 6332 deletions
diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 241d1c53ba6..0da4aa2602a 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,14 +1,9 @@ -include include/asm-generic/Kbuild.asm -header-y += break.h -header-y += fpu.h -header-y += gcc_intrin.h -header-y += ia64regs.h -header-y += intel_intrin.h -header-y += intrinsics.h -header-y += perfmon.h -header-y += perfmon_default_smpl.h -header-y += ptrace_offsets.h -header-y += rse.h -header-y += ucontext.h -header-y += ustack.h +generic-y += clkdev.h +generic-y += exec.h +generic-y += hash.h +generic-y += kvm_para.h +generic-y += mcs_spinlock.h +generic-y += preempt.h +generic-y += trace_clock.h +generic-y += vtime.h diff --git a/arch/ia64/include/asm/acenv.h b/arch/ia64/include/asm/acenv.h new file mode 100644 index 00000000000..3f9eaeec987 --- /dev/null +++ b/arch/ia64/include/asm/acenv.h @@ -0,0 +1,56 @@ +/* + * IA64 specific ACPICA environments and implementation + * + * Copyright (C) 2014, Intel Corporation + *   Author: Lv Zheng <lv.zheng@intel.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef _ASM_IA64_ACENV_H +#define _ASM_IA64_ACENV_H + +#include <asm/intrinsics.h> + +#define COMPILER_DEPENDENT_INT64	long +#define COMPILER_DEPENDENT_UINT64	unsigned long + +/* Asm macros */ + +#ifdef CONFIG_ACPI + +static inline int +ia64_acpi_acquire_global_lock(unsigned int *lock) +{ +	unsigned int old, new, val; +	do { +		old = *lock; +		new = (((old & ~0x3) + 2) + ((old >> 1) & 0x1)); +		val = ia64_cmpxchg4_acq(lock, new, old); +	} while (unlikely (val != old)); +	return (new < 3) ? -1 : 0; +} + +static inline int +ia64_acpi_release_global_lock(unsigned int *lock) +{ +	unsigned int old, new, val; +	do { +		old = *lock; +		new = old & ~0x3; +		val = ia64_cmpxchg4_acq(lock, new, old); +	} while (unlikely (val != old)); +	return old & 0x1; +} + +#define ACPI_ACQUIRE_GLOBAL_LOCK(facs, Acq)				\ +	((Acq) = ia64_acpi_acquire_global_lock(&facs->global_lock)) + +#define ACPI_RELEASE_GLOBAL_LOCK(facs, Acq)				\ +	((Acq) = ia64_acpi_release_global_lock(&facs->global_lock)) + +#endif + +#endif /* _ASM_IA64_ACENV_H */ diff --git a/arch/ia64/include/asm/acpi.h b/arch/ia64/include/asm/acpi.h index 837dc82a013..75dc59a793d 100644 --- a/arch/ia64/include/asm/acpi.h +++ b/arch/ia64/include/asm/acpi.h @@ -32,64 +32,10 @@  #include <linux/init.h>  #include <linux/numa.h> -#include <asm/system.h>  #include <asm/numa.h> -#define COMPILER_DEPENDENT_INT64	long -#define COMPILER_DEPENDENT_UINT64	unsigned long - -/* - * Calling conventions: - * - * ACPI_SYSTEM_XFACE        - Interfaces to host OS (handlers, threads) - * ACPI_EXTERNAL_XFACE      - External ACPI interfaces - * ACPI_INTERNAL_XFACE      - Internal ACPI interfaces - * ACPI_INTERNAL_VAR_XFACE  - Internal variable-parameter list interfaces - */ -#define ACPI_SYSTEM_XFACE -#define ACPI_EXTERNAL_XFACE -#define ACPI_INTERNAL_XFACE -#define ACPI_INTERNAL_VAR_XFACE - -/* Asm macros */ - -#define ACPI_ASM_MACROS -#define BREAKPOINT3 -#define ACPI_DISABLE_IRQS() local_irq_disable() -#define ACPI_ENABLE_IRQS()  local_irq_enable() -#define ACPI_FLUSH_CPU_CACHE() - -static inline int -ia64_acpi_acquire_global_lock (unsigned int *lock) -{ -	unsigned int old, new, val; -	do { -		old = *lock; -		new = (((old & ~0x3) + 2) + ((old >> 1) & 0x1)); -		val = ia64_cmpxchg4_acq(lock, new, old); -	} while (unlikely (val != old)); -	return (new < 3) ? -1 : 0; -} - -static inline int -ia64_acpi_release_global_lock (unsigned int *lock) -{ -	unsigned int old, new, val; -	do { -		old = *lock; -		new = old & ~0x3; -		val = ia64_cmpxchg4_acq(lock, new, old); -	} while (unlikely (val != old)); -	return old & 0x1; -} - -#define ACPI_ACQUIRE_GLOBAL_LOCK(facs, Acq)				\ -	((Acq) = ia64_acpi_acquire_global_lock(&facs->global_lock)) - -#define ACPI_RELEASE_GLOBAL_LOCK(facs, Acq)				\ -	((Acq) = ia64_acpi_release_global_lock(&facs->global_lock)) -  #ifdef	CONFIG_ACPI +extern int acpi_lapic;  #define acpi_disabled 0	/* ACPI always enabled on IA64 */  #define acpi_noirq 0	/* ACPI always enabled on IA64 */  #define acpi_pci_disabled 0 /* ACPI PCI always enabled on IA64 */ @@ -97,7 +43,6 @@ ia64_acpi_release_global_lock (unsigned int *lock)  #endif  #define acpi_processor_cstate_check(x) (x) /* no idle limits on IA64 :) */  static inline void disable_acpi(void) { } -static inline void pci_acpi_crs_quirks(void) { }  #ifdef CONFIG_IA64_GENERIC  const char *acpi_get_sysname (void); @@ -116,8 +61,6 @@ static inline const char *acpi_get_sysname (void)  	return "uv";  # elif defined (CONFIG_IA64_DIG)  	return "dig"; -# elif defined (CONFIG_IA64_XEN_GUEST) -	return "xen";  # elif defined(CONFIG_IA64_DIG_VTD)  	return "dig_vtd";  # else @@ -128,9 +71,9 @@ static inline const char *acpi_get_sysname (void)  int acpi_request_vector (u32 int_type);  int acpi_gsi_to_irq (u32 gsi, unsigned int *irq); -/* routines for saving/restoring kernel state */ -extern int acpi_save_state_mem(void); -extern void acpi_restore_state_mem(void); +/* Low-level suspend routine. */ +extern int acpi_suspend_lowlevel(void); +  extern unsigned long acpi_wakeup_address;  /* @@ -154,7 +97,7 @@ extern int additional_cpus;  #else  #define MAX_PXM_DOMAINS (256)  #endif -extern int __devinitdata pxm_to_nid_map[MAX_PXM_DOMAINS]; +extern int pxm_to_nid_map[MAX_PXM_DOMAINS];  extern int __initdata nid_to_pxm_map[MAX_NUMNODES];  #endif diff --git a/arch/ia64/include/asm/atomic.h b/arch/ia64/include/asm/atomic.h index 44688143967..0f8bf48dadf 100644 --- a/arch/ia64/include/asm/atomic.h +++ b/arch/ia64/include/asm/atomic.h @@ -15,11 +15,11 @@  #include <linux/types.h>  #include <asm/intrinsics.h> -#include <asm/system.h> +#include <asm/barrier.h> -#define ATOMIC_INIT(i)		((atomic_t) { (i) }) -#define ATOMIC64_INIT(i)	((atomic64_t) { (i) }) +#define ATOMIC_INIT(i)		{ (i) } +#define ATOMIC64_INIT(i)	{ (i) }  #define atomic_read(v)		(*(volatile int *)&(v)->counter)  #define atomic64_read(v)	(*(volatile long *)&(v)->counter) @@ -90,7 +90,7 @@ ia64_atomic64_sub (__s64 i, atomic64_t *v)  	(cmpxchg(&((v)->counter), old, new))  #define atomic64_xchg(v, new) (xchg(&((v)->counter), new)) -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); @@ -102,10 +102,9 @@ 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)  static __inline__ long atomic64_add_unless(atomic64_t *v, long a, long u)  { @@ -210,11 +209,4 @@ atomic64_add_negative (__s64 i, atomic64_t *v)  #define atomic64_inc(v)			atomic64_add(1, (v))  #define atomic64_dec(v)			atomic64_sub(1, (v)) -/* 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() - -#include <asm-generic/atomic-long.h>  #endif /* _ASM_IA64_ATOMIC_H */ diff --git a/arch/ia64/include/asm/auxvec.h b/arch/ia64/include/asm/auxvec.h deleted file mode 100644 index 23cebe5685b..00000000000 --- a/arch/ia64/include/asm/auxvec.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _ASM_IA64_AUXVEC_H -#define _ASM_IA64_AUXVEC_H - -/* - * Architecture-neutral AT_ values are in the range 0-17.  Leave some room for more of - * them, start the architecture-specific ones at 32. - */ -#define AT_SYSINFO	32 -#define AT_SYSINFO_EHDR	33 - -#endif /* _ASM_IA64_AUXVEC_H */ diff --git a/arch/ia64/include/asm/barrier.h b/arch/ia64/include/asm/barrier.h new file mode 100644 index 00000000000..a48957c7b44 --- /dev/null +++ b/arch/ia64/include/asm/barrier.h @@ -0,0 +1,94 @@ +/* + * Memory barrier definitions.  This is based on information published + * in the Processor Abstraction Layer and the System Abstraction Layer + * manual. + * + * Copyright (C) 1998-2003 Hewlett-Packard Co + *	David Mosberger-Tang <davidm@hpl.hp.com> + * Copyright (C) 1999 Asit Mallick <asit.k.mallick@intel.com> + * Copyright (C) 1999 Don Dugger <don.dugger@intel.com> + */ +#ifndef _ASM_IA64_BARRIER_H +#define _ASM_IA64_BARRIER_H + +#include <linux/compiler.h> + +/* + * Macros to force memory ordering.  In these descriptions, "previous" + * and "subsequent" refer to program order; "visible" means that all + * architecturally visible effects of a memory access have occurred + * (at a minimum, this means the memory has been read or written). + * + *   wmb():	Guarantees that all preceding stores to memory- + *		like regions are visible before any subsequent + *		stores and that all following stores will be + *		visible only after all previous stores. + *   rmb():	Like wmb(), but for reads. + *   mb():	wmb()/rmb() combo, i.e., all previous memory + *		accesses are visible before all subsequent + *		accesses and vice versa.  This is also known as + *		a "fence." + * + * Note: "mb()" and its variants cannot be used as a fence to order + * accesses to memory mapped I/O registers.  For that, mf.a needs to + * be used.  However, we don't want to always use mf.a because (a) + * it's (presumably) much slower than mf and (b) mf.a is supported for + * sequential memory pages only. + */ +#define mb()	ia64_mf() +#define rmb()	mb() +#define wmb()	mb() +#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() + +#else + +# define smp_mb()	barrier() +# define smp_rmb()	barrier() +# define smp_wmb()	barrier() +# define smp_read_barrier_depends()	do { } while(0) + +#endif + +#define smp_mb__before_atomic()	barrier() +#define smp_mb__after_atomic()	barrier() + +/* + * IA64 GCC turns volatile stores into st.rel and volatile loads into ld.acq no + * need for asm trickery! + */ + +#define smp_store_release(p, v)						\ +do {									\ +	compiletime_assert_atomic_type(*p);				\ +	barrier();							\ +	ACCESS_ONCE(*p) = (v);						\ +} while (0) + +#define smp_load_acquire(p)						\ +({									\ +	typeof(*p) ___p1 = ACCESS_ONCE(*p);				\ +	compiletime_assert_atomic_type(*p);				\ +	barrier();							\ +	___p1;								\ +}) + +/* + * XXX check on this ---I suspect what Linus really wants here is + * acquire vs release semantics but we can't discuss this stuff with + * Linus just yet.  Grrr... + */ +#define set_mb(var, value)	do { (var) = (value); mb(); } while (0) + +/* + * The group barrier in front of the rsm & ssm are necessary to ensure + * that none of the previous instructions in the same group are + * affected by the rsm/ssm. + */ + +#endif /* _ASM_IA64_BARRIER_H */ diff --git a/arch/ia64/include/asm/bitops.h b/arch/ia64/include/asm/bitops.h index 9da3df6f1a5..71e8145243e 100644 --- a/arch/ia64/include/asm/bitops.h +++ b/arch/ia64/include/asm/bitops.h @@ -16,6 +16,7 @@  #include <linux/compiler.h>  #include <linux/types.h>  #include <asm/intrinsics.h> +#include <asm/barrier.h>  /**   * set_bit - Atomically set a bit in memory @@ -65,12 +66,6 @@ __set_bit (int nr, volatile void *addr)  	*((__u32 *) addr + (nr >> 5)) |= (1 << (nr & 31));  } -/* - * clear_bit() has "acquire" semantics. - */ -#define smp_mb__before_clear_bit()	smp_mb() -#define smp_mb__after_clear_bit()	do { /* skip */; } while (0) -  /**   * clear_bit - Clears a bit in memory   * @nr: Bit to clear @@ -78,7 +73,7 @@ __set_bit (int nr, volatile void *addr)   *   * clear_bit() is atomic and may not be reordered.  However, it does   * not contain a memory barrier, so if it is used for locking purposes, - * you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit() + * you should call smp_mb__before_atomic() and/or smp_mb__after_atomic()   * in order to ensure changes are visible on other processors.   */  static __inline__ void @@ -425,13 +420,7 @@ __fls (unsigned long x)  #include <asm-generic/bitops/fls64.h> -/* - * ffs: find first bit set. This is defined the same way as the libc and - * compiler builtin ffs routines, therefore differs in spirit from the above - * ffz (man ffs): it operates on "int" values only and the result value is the - * bit number + 1.  ffs(0) is defined to return zero. - */ -#define ffs(x)	__builtin_ffs(x) +#include <asm-generic/bitops/builtin-ffs.h>  /*   * hweightN: returns the hamming weight (i.e. the number @@ -456,12 +445,10 @@ static __inline__ unsigned long __arch_hweight64(unsigned long x)  #ifdef __KERNEL__ -#include <asm-generic/bitops/ext2-non-atomic.h> +#include <asm-generic/bitops/le.h> -#define ext2_set_bit_atomic(l,n,a)	test_and_set_bit(n,a) -#define ext2_clear_bit_atomic(l,n,a)	test_and_clear_bit(n,a) +#include <asm-generic/bitops/ext2-atomic-setbit.h> -#include <asm-generic/bitops/minix.h>  #include <asm-generic/bitops/sched.h>  #endif /* __KERNEL__ */ diff --git a/arch/ia64/include/asm/bitsperlong.h b/arch/ia64/include/asm/bitsperlong.h deleted file mode 100644 index ec4db3c970b..00000000000 --- a/arch/ia64/include/asm/bitsperlong.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __ASM_IA64_BITSPERLONG_H -#define __ASM_IA64_BITSPERLONG_H - -#define __BITS_PER_LONG 64 - -#include <asm-generic/bitsperlong.h> - -#endif /* __ASM_IA64_BITSPERLONG_H */ diff --git a/arch/ia64/include/asm/break.h b/arch/ia64/include/asm/break.h deleted file mode 100644 index e90c40ec9ed..00000000000 --- a/arch/ia64/include/asm/break.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef _ASM_IA64_BREAK_H -#define _ASM_IA64_BREAK_H - -/* - * IA-64 Linux break numbers. - * - * Copyright (C) 1999 Hewlett-Packard Co - * Copyright (C) 1999 David Mosberger-Tang <davidm@hpl.hp.com> - */ - -/* - * OS-specific debug break numbers: - */ -#define __IA64_BREAK_KDB		0x80100 -#define __IA64_BREAK_KPROBE		0x81000 /* .. 0x81fff */ -#define __IA64_BREAK_JPROBE		0x82000 - -/* - * OS-specific break numbers: - */ -#define __IA64_BREAK_SYSCALL		0x100000 - -/* - * Xen specific break numbers: - */ -#define __IA64_XEN_HYPERCALL		0x1000 -/* [__IA64_XEN_HYPERPRIVOP_START, __IA64_XEN_HYPERPRIVOP_MAX] is used -   for xen hyperprivops */ -#define __IA64_XEN_HYPERPRIVOP_START	0x1 -#define __IA64_XEN_HYPERPRIVOP_MAX	0x1a - -#endif /* _ASM_IA64_BREAK_H */ diff --git a/arch/ia64/include/asm/byteorder.h b/arch/ia64/include/asm/byteorder.h deleted file mode 100644 index a8dd7355815..00000000000 --- a/arch/ia64/include/asm/byteorder.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_IA64_BYTEORDER_H -#define _ASM_IA64_BYTEORDER_H - -#include <linux/byteorder/little_endian.h> - -#endif /* _ASM_IA64_BYTEORDER_H */ diff --git a/arch/ia64/include/asm/clocksource.h b/arch/ia64/include/asm/clocksource.h new file mode 100644 index 00000000000..5c8596e4cb0 --- /dev/null +++ b/arch/ia64/include/asm/clocksource.h @@ -0,0 +1,10 @@ +/* IA64-specific clocksource additions */ + +#ifndef _ASM_IA64_CLOCKSOURCE_H +#define _ASM_IA64_CLOCKSOURCE_H + +struct arch_clocksource_data { +	void *fsys_mmio;        /* used by fsyscall asm code */ +}; + +#endif /* _ASM_IA64_CLOCKSOURCE_H */ diff --git a/arch/ia64/include/asm/cputime.h b/arch/ia64/include/asm/cputime.h index 6073b187528..e2d3f5baf26 100644 --- a/arch/ia64/include/asm/cputime.h +++ b/arch/ia64/include/asm/cputime.h @@ -11,100 +11,19 @@   * as published by the Free Software Foundation; either version   * 2 of the License, or (at your option) any later version.   * - * If we have CONFIG_VIRT_CPU_ACCOUNTING, we measure cpu time in nsec. + * If we have CONFIG_VIRT_CPU_ACCOUNTING_NATIVE, we measure cpu time in nsec.   * Otherwise we measure cpu time in jiffies using the generic definitions.   */  #ifndef __IA64_CPUTIME_H  #define __IA64_CPUTIME_H -#ifndef CONFIG_VIRT_CPU_ACCOUNTING -#include <asm-generic/cputime.h> +#ifndef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE +# include <asm-generic/cputime.h>  #else +# include <asm/processor.h> +# include <asm-generic/cputime_nsecs.h> +extern void arch_vtime_task_switch(struct task_struct *tsk); +#endif /* CONFIG_VIRT_CPU_ACCOUNTING_NATIVE */ -#include <linux/time.h> -#include <linux/jiffies.h> -#include <asm/processor.h> - -typedef u64 cputime_t; -typedef u64 cputime64_t; - -#define cputime_zero			((cputime_t)0) -#define cputime_one_jiffy		jiffies_to_cputime(1) -#define cputime_max			((~((cputime_t)0) >> 1) - 1) -#define cputime_add(__a, __b)		((__a) +  (__b)) -#define cputime_sub(__a, __b)		((__a) -  (__b)) -#define cputime_div(__a, __n)		((__a) /  (__n)) -#define cputime_halve(__a)		((__a) >> 1) -#define cputime_eq(__a, __b)		((__a) == (__b)) -#define cputime_gt(__a, __b)		((__a) >  (__b)) -#define cputime_ge(__a, __b)		((__a) >= (__b)) -#define cputime_lt(__a, __b)		((__a) <  (__b)) -#define cputime_le(__a, __b)		((__a) <= (__b)) - -#define cputime64_zero			((cputime64_t)0) -#define cputime64_add(__a, __b)		((__a) + (__b)) -#define cputime64_sub(__a, __b)		((__a) - (__b)) -#define cputime_to_cputime64(__ct)	(__ct) - -/* - * Convert cputime <-> jiffies (HZ) - */ -#define cputime_to_jiffies(__ct)	((__ct) / (NSEC_PER_SEC / HZ)) -#define jiffies_to_cputime(__jif)	((__jif) * (NSEC_PER_SEC / HZ)) -#define cputime64_to_jiffies64(__ct)	((__ct) / (NSEC_PER_SEC / HZ)) -#define jiffies64_to_cputime64(__jif)	((__jif) * (NSEC_PER_SEC / HZ)) - -/* - * Convert cputime <-> microseconds - */ -#define cputime_to_usecs(__ct)		((__ct) / NSEC_PER_USEC) -#define usecs_to_cputime(__usecs)	((__usecs) * NSEC_PER_USEC) - -/* - * Convert cputime <-> seconds - */ -#define cputime_to_secs(__ct)		((__ct) / NSEC_PER_SEC) -#define secs_to_cputime(__secs)		((__secs) * NSEC_PER_SEC) - -/* - * Convert cputime <-> timespec (nsec) - */ -static inline cputime_t timespec_to_cputime(const struct timespec *val) -{ -	cputime_t ret = val->tv_sec * NSEC_PER_SEC; -	return (ret + val->tv_nsec); -} -static inline void cputime_to_timespec(const cputime_t ct, struct timespec *val) -{ -	val->tv_sec  = ct / NSEC_PER_SEC; -	val->tv_nsec = ct % NSEC_PER_SEC; -} - -/* - * Convert cputime <-> timeval (msec) - */ -static inline cputime_t timeval_to_cputime(struct timeval *val) -{ -	cputime_t ret = val->tv_sec * NSEC_PER_SEC; -	return (ret + val->tv_usec * NSEC_PER_USEC); -} -static inline void cputime_to_timeval(const cputime_t ct, struct timeval *val) -{ -	val->tv_sec = ct / NSEC_PER_SEC; -	val->tv_usec = (ct % NSEC_PER_SEC) / NSEC_PER_USEC; -} - -/* - * Convert cputime <-> clock (USER_HZ) - */ -#define cputime_to_clock_t(__ct)	((__ct) / (NSEC_PER_SEC / USER_HZ)) -#define clock_t_to_cputime(__x)		((__x) * (NSEC_PER_SEC / USER_HZ)) - -/* - * Convert cputime64 to clock. - */ -#define cputime64_to_clock_t(__ct)      cputime_to_clock_t((cputime_t)__ct) - -#endif /* CONFIG_VIRT_CPU_ACCOUNTING */  #endif /* __IA64_CPUTIME_H */ diff --git a/arch/ia64/include/asm/device.h b/arch/ia64/include/asm/device.h index d66d446b127..f69c32ffbe6 100644 --- a/arch/ia64/include/asm/device.h +++ b/arch/ia64/include/asm/device.h @@ -7,10 +7,7 @@  #define _ASM_IA64_DEVICE_H  struct dev_archdata { -#ifdef CONFIG_ACPI -	void	*acpi_handle; -#endif -#ifdef CONFIG_DMAR +#ifdef CONFIG_INTEL_IOMMU  	void *iommu; /* hook for IOMMU specific extension */  #endif  }; diff --git a/arch/ia64/include/asm/dma-mapping.h b/arch/ia64/include/asm/dma-mapping.h index a2e7368a015..cf3ab7e784b 100644 --- a/arch/ia64/include/asm/dma-mapping.h +++ b/arch/ia64/include/asm/dma-mapping.h @@ -12,6 +12,8 @@  #define ARCH_HAS_DMA_GET_REQUIRED_MASK +#define DMA_ERROR_CODE 0 +  extern struct dma_map_ops *dma_ops;  extern struct ia64_machine_vector ia64_mv;  extern void set_iommu_machvec(void); @@ -21,23 +23,29 @@ extern void machvec_dma_sync_single(struct device *, dma_addr_t, size_t,  extern void machvec_dma_sync_sg(struct device *, struct scatterlist *, int,  				enum dma_data_direction); -static inline void *dma_alloc_coherent(struct device *dev, size_t size, -				       dma_addr_t *daddr, gfp_t gfp) +#define dma_alloc_coherent(d,s,h,f)	dma_alloc_attrs(d,s,h,f,NULL) + +static inline void *dma_alloc_attrs(struct device *dev, size_t size, +				    dma_addr_t *daddr, gfp_t gfp, +				    struct dma_attrs *attrs)  {  	struct dma_map_ops *ops = platform_dma_get_ops(dev);  	void *caddr; -	caddr = ops->alloc_coherent(dev, size, daddr, gfp); +	caddr = ops->alloc(dev, size, daddr, gfp, attrs);  	debug_dma_alloc_coherent(dev, size, *daddr, caddr);  	return caddr;  } -static inline void dma_free_coherent(struct device *dev, size_t size, -				     void *caddr, dma_addr_t daddr) +#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL) + +static inline void dma_free_attrs(struct device *dev, size_t size, +				  void *caddr, dma_addr_t daddr, +				  struct dma_attrs *attrs)  {  	struct dma_map_ops *ops = platform_dma_get_ops(dev);  	debug_dma_free_coherent(dev, size, caddr, daddr); -	ops->free_coherent(dev, size, caddr, daddr); +	ops->free(dev, size, caddr, daddr, attrs);  }  #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) @@ -50,6 +58,7 @@ static inline void dma_free_coherent(struct device *dev, size_t size,  static inline int dma_mapping_error(struct device *dev, dma_addr_t daddr)  {  	struct dma_map_ops *ops = platform_dma_get_ops(dev); +	debug_dma_mapping_error(dev, daddr);  	return ops->mapping_error(dev, daddr);  } diff --git a/arch/ia64/include/asm/dmi.h b/arch/ia64/include/asm/dmi.h index 1ed4c8fedb8..f365a61f5c7 100644 --- a/arch/ia64/include/asm/dmi.h +++ b/arch/ia64/include/asm/dmi.h @@ -5,8 +5,10 @@  #include <asm/io.h>  /* Use normal IO mappings for DMI */ -#define dmi_ioremap ioremap -#define dmi_iounmap(x,l) iounmap(x) -#define dmi_alloc(l) kmalloc(l, GFP_ATOMIC) +#define dmi_early_remap		ioremap +#define dmi_early_unmap(x, l)	iounmap(x) +#define dmi_remap		ioremap +#define dmi_unmap		iounmap +#define dmi_alloc(l)		kzalloc(l, GFP_ATOMIC)  #endif diff --git a/arch/ia64/include/asm/elf.h b/arch/ia64/include/asm/elf.h index b5298eb09ad..5a83c5cc3dc 100644 --- a/arch/ia64/include/asm/elf.h +++ b/arch/ia64/include/asm/elf.h @@ -201,9 +201,6 @@ extern void ia64_elf_core_copy_regs (struct pt_regs *src, elf_gregset_t dst);     relevant until we have real hardware to play with... */  #define ELF_PLATFORM	NULL -#define SET_PERSONALITY(ex)	\ -	set_personality((current->personality & ~PER_MASK) | PER_LINUX) -  #define elf_read_implies_exec(ex, executable_stack)					\  	((executable_stack!=EXSTACK_DISABLE_X) && ((ex).e_flags & EF_IA_64_LINUX_EXECUTABLE_STACK) != 0) diff --git a/arch/ia64/include/asm/errno.h b/arch/ia64/include/asm/errno.h deleted file mode 100644 index 4c82b503d92..00000000000 --- a/arch/ia64/include/asm/errno.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/errno.h> diff --git a/arch/ia64/include/asm/fcntl.h b/arch/ia64/include/asm/fcntl.h deleted file mode 100644 index 1dd275dc8f6..00000000000 --- a/arch/ia64/include/asm/fcntl.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _ASM_IA64_FCNTL_H -#define _ASM_IA64_FCNTL_H -/* - * Modified 1998-2000 - *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co. - */ - -#define force_o_largefile()	\ -		(personality(current->personality) != PER_LINUX32) - -#include <asm-generic/fcntl.h> - -#endif /* _ASM_IA64_FCNTL_H */ diff --git a/arch/ia64/include/asm/fpu.h b/arch/ia64/include/asm/fpu.h deleted file mode 100644 index b6395ad1500..00000000000 --- a/arch/ia64/include/asm/fpu.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef _ASM_IA64_FPU_H -#define _ASM_IA64_FPU_H - -/* - * Copyright (C) 1998, 1999, 2002, 2003 Hewlett-Packard Co - *	David Mosberger-Tang <davidm@hpl.hp.com> - */ - -#include <linux/types.h> - -/* floating point status register: */ -#define FPSR_TRAP_VD	(1 << 0)	/* invalid op trap disabled */ -#define FPSR_TRAP_DD	(1 << 1)	/* denormal trap disabled */ -#define FPSR_TRAP_ZD	(1 << 2)	/* zero-divide trap disabled */ -#define FPSR_TRAP_OD	(1 << 3)	/* overflow trap disabled */ -#define FPSR_TRAP_UD	(1 << 4)	/* underflow trap disabled */ -#define FPSR_TRAP_ID	(1 << 5)	/* inexact trap disabled */ -#define FPSR_S0(x)	((x) <<  6) -#define FPSR_S1(x)	((x) << 19) -#define FPSR_S2(x)	(__IA64_UL(x) << 32) -#define FPSR_S3(x)	(__IA64_UL(x) << 45) - -/* floating-point status field controls: */ -#define FPSF_FTZ	(1 << 0)		/* flush-to-zero */ -#define FPSF_WRE	(1 << 1)		/* widest-range exponent */ -#define FPSF_PC(x)	(((x) & 0x3) << 2)	/* precision control */ -#define FPSF_RC(x)	(((x) & 0x3) << 4)	/* rounding control */ -#define FPSF_TD		(1 << 6)		/* trap disabled */ - -/* floating-point status field flags: */ -#define FPSF_V		(1 <<  7)		/* invalid operation flag */ -#define FPSF_D		(1 <<  8)		/* denormal/unnormal operand flag */ -#define FPSF_Z		(1 <<  9)		/* zero divide (IEEE) flag */ -#define FPSF_O		(1 << 10)		/* overflow (IEEE) flag */ -#define FPSF_U		(1 << 11)		/* underflow (IEEE) flag */ -#define FPSF_I		(1 << 12)		/* inexact (IEEE) flag) */ - -/* floating-point rounding control: */ -#define FPRC_NEAREST	0x0 -#define FPRC_NEGINF	0x1 -#define FPRC_POSINF	0x2 -#define FPRC_TRUNC	0x3 - -#define FPSF_DEFAULT	(FPSF_PC (0x3) | FPSF_RC (FPRC_NEAREST)) - -/* This default value is the same as HP-UX uses.  Don't change it -   without a very good reason.  */ -#define FPSR_DEFAULT	(FPSR_TRAP_VD | FPSR_TRAP_DD | FPSR_TRAP_ZD	\ -			 | FPSR_TRAP_OD | FPSR_TRAP_UD | FPSR_TRAP_ID	\ -			 | FPSR_S0 (FPSF_DEFAULT)			\ -			 | FPSR_S1 (FPSF_DEFAULT | FPSF_TD | FPSF_WRE)	\ -			 | FPSR_S2 (FPSF_DEFAULT | FPSF_TD)		\ -			 | FPSR_S3 (FPSF_DEFAULT | FPSF_TD)) - -# ifndef __ASSEMBLY__ - -struct ia64_fpreg { -	union { -		unsigned long bits[2]; -		long double __dummy;	/* force 16-byte alignment */ -	} u; -}; - -# endif /* __ASSEMBLY__ */ - -#endif /* _ASM_IA64_FPU_H */ diff --git a/arch/ia64/include/asm/futex.h b/arch/ia64/include/asm/futex.h index c7f0f062239..76acbcd5c06 100644 --- a/arch/ia64/include/asm/futex.h +++ b/arch/ia64/include/asm/futex.h @@ -4,7 +4,6 @@  #include <linux/futex.h>  #include <linux/uaccess.h>  #include <asm/errno.h> -#include <asm/system.h>  #define __futex_atomic_op1(insn, ret, oldval, uaddr, oparg) \  do {									\ @@ -46,7 +45,7 @@ do {									\  } while (0)  static inline int -futex_atomic_op_inuser (int encoded_op, int __user *uaddr) +futex_atomic_op_inuser (int encoded_op, u32 __user *uaddr)  {  	int op = (encoded_op >> 28) & 7;  	int cmp = (encoded_op >> 24) & 15; @@ -56,7 +55,7 @@ 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(); @@ -100,23 +99,26 @@ futex_atomic_op_inuser (int encoded_op, int __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)  { -	if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) +	if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32)))  		return -EFAULT;  	{ -		register unsigned long r8 __asm ("r8"); +		register unsigned long r8 __asm ("r8") = 0; +		unsigned long prev;  		__asm__ __volatile__(  			"	mf;;					\n" -			"	mov ar.ccv=%3;;				\n" -			"[1:]	cmpxchg4.acq %0=[%1],%2,ar.ccv		\n" +			"	mov ar.ccv=%4;;				\n" +			"[1:]	cmpxchg4.acq %1=[%2],%3,ar.ccv		\n"  			"	.xdata4 \"__ex_table\", 1b-., 2f-.	\n"  			"[2:]" -			: "=r" (r8) +			: "+r" (r8), "=&r" (prev)  			: "r" (uaddr), "r" (newval),  			  "rO" ((long) (unsigned) oldval)  			: "memory"); +		*uval = prev;  		return r8;  	}  } diff --git a/arch/ia64/include/asm/gcc_intrin.h b/arch/ia64/include/asm/gcc_intrin.h index 21ddee54ada..f9495b1757a 100644 --- a/arch/ia64/include/asm/gcc_intrin.h +++ b/arch/ia64/include/asm/gcc_intrin.h @@ -1,621 +1,12 @@ -#ifndef _ASM_IA64_GCC_INTRIN_H -#define _ASM_IA64_GCC_INTRIN_H  /*   *   * Copyright (C) 2002,2003 Jun Nakajima <jun.nakajima@intel.com>   * Copyright (C) 2002,2003 Suresh Siddha <suresh.b.siddha@intel.com>   */ +#ifndef _ASM_IA64_GCC_INTRIN_H +#define _ASM_IA64_GCC_INTRIN_H -#include <linux/types.h> -#include <linux/compiler.h> - -/* define this macro to get some asm stmts included in 'c' files */ -#define ASM_SUPPORTED - -/* Optimization barrier */ -/* The "volatile" is due to gcc bugs */ -#define ia64_barrier()	asm volatile ("":::"memory") - -#define ia64_stop()	asm volatile (";;"::) - -#define ia64_invala_gr(regnum)	asm volatile ("invala.e r%0" :: "i"(regnum)) - -#define ia64_invala_fr(regnum)	asm volatile ("invala.e f%0" :: "i"(regnum)) - -#define ia64_flushrs() asm volatile ("flushrs;;":::"memory") - -#define ia64_loadrs() asm volatile ("loadrs;;":::"memory") - -extern void ia64_bad_param_for_setreg (void); -extern void ia64_bad_param_for_getreg (void); +#include <uapi/asm/gcc_intrin.h> -#ifdef __KERNEL__  register unsigned long ia64_r13 asm ("r13") __used; -#endif - -#define ia64_native_setreg(regnum, val)						\ -({										\ -	switch (regnum) {							\ -	    case _IA64_REG_PSR_L:						\ -		    asm volatile ("mov psr.l=%0" :: "r"(val) : "memory");	\ -		    break;							\ -	    case _IA64_REG_AR_KR0 ... _IA64_REG_AR_EC:				\ -		    asm volatile ("mov ar%0=%1" ::				\ -		    			  "i" (regnum - _IA64_REG_AR_KR0),	\ -					  "r"(val): "memory");			\ -		    break;							\ -	    case _IA64_REG_CR_DCR ... _IA64_REG_CR_LRR1:			\ -		    asm volatile ("mov cr%0=%1" ::				\ -				          "i" (regnum - _IA64_REG_CR_DCR),	\ -					  "r"(val): "memory" );			\ -		    break;							\ -	    case _IA64_REG_SP:							\ -		    asm volatile ("mov r12=%0" ::				\ -			    		  "r"(val): "memory");			\ -		    break;							\ -	    case _IA64_REG_GP:							\ -		    asm volatile ("mov gp=%0" :: "r"(val) : "memory");		\ -		break;								\ -	    default:								\ -		    ia64_bad_param_for_setreg();				\ -		    break;							\ -	}									\ -}) - -#define ia64_native_getreg(regnum)						\ -({										\ -	__u64 ia64_intri_res;							\ -										\ -	switch (regnum) {							\ -	case _IA64_REG_GP:							\ -		asm volatile ("mov %0=gp" : "=r"(ia64_intri_res));		\ -		break;								\ -	case _IA64_REG_IP:							\ -		asm volatile ("mov %0=ip" : "=r"(ia64_intri_res));		\ -		break;								\ -	case _IA64_REG_PSR:							\ -		asm volatile ("mov %0=psr" : "=r"(ia64_intri_res));		\ -		break;								\ -	case _IA64_REG_TP:	/* for current() */				\ -		ia64_intri_res = ia64_r13;					\ -		break;								\ -	case _IA64_REG_AR_KR0 ... _IA64_REG_AR_EC:				\ -		asm volatile ("mov %0=ar%1" : "=r" (ia64_intri_res)		\ -				      : "i"(regnum - _IA64_REG_AR_KR0));	\ -		break;								\ -	case _IA64_REG_CR_DCR ... _IA64_REG_CR_LRR1:				\ -		asm volatile ("mov %0=cr%1" : "=r" (ia64_intri_res)		\ -				      : "i" (regnum - _IA64_REG_CR_DCR));	\ -		break;								\ -	case _IA64_REG_SP:							\ -		asm volatile ("mov %0=sp" : "=r" (ia64_intri_res));		\ -		break;								\ -	default:								\ -		ia64_bad_param_for_getreg();					\ -		break;								\ -	}									\ -	ia64_intri_res;								\ -}) - -#define ia64_hint_pause 0 - -#define ia64_hint(mode)						\ -({								\ -	switch (mode) {						\ -	case ia64_hint_pause:					\ -		asm volatile ("hint @pause" ::: "memory");	\ -		break;						\ -	}							\ -}) - - -/* Integer values for mux1 instruction */ -#define ia64_mux1_brcst 0 -#define ia64_mux1_mix   8 -#define ia64_mux1_shuf  9 -#define ia64_mux1_alt  10 -#define ia64_mux1_rev  11 - -#define ia64_mux1(x, mode)							\ -({										\ -	__u64 ia64_intri_res;							\ -										\ -	switch (mode) {								\ -	case ia64_mux1_brcst:							\ -		asm ("mux1 %0=%1,@brcst" : "=r" (ia64_intri_res) : "r" (x));	\ -		break;								\ -	case ia64_mux1_mix:							\ -		asm ("mux1 %0=%1,@mix" : "=r" (ia64_intri_res) : "r" (x));	\ -		break;								\ -	case ia64_mux1_shuf:							\ -		asm ("mux1 %0=%1,@shuf" : "=r" (ia64_intri_res) : "r" (x));	\ -		break;								\ -	case ia64_mux1_alt:							\ -		asm ("mux1 %0=%1,@alt" : "=r" (ia64_intri_res) : "r" (x));	\ -		break;								\ -	case ia64_mux1_rev:							\ -		asm ("mux1 %0=%1,@rev" : "=r" (ia64_intri_res) : "r" (x));	\ -		break;								\ -	}									\ -	ia64_intri_res;								\ -}) - -#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -# define ia64_popcnt(x)		__builtin_popcountl(x) -#else -# define ia64_popcnt(x)						\ -  ({								\ -	__u64 ia64_intri_res;					\ -	asm ("popcnt %0=%1" : "=r" (ia64_intri_res) : "r" (x));	\ -								\ -	ia64_intri_res;						\ -  }) -#endif - -#define ia64_getf_exp(x)					\ -({								\ -	long ia64_intri_res;					\ -								\ -	asm ("getf.exp %0=%1" : "=r"(ia64_intri_res) : "f"(x));	\ -								\ -	ia64_intri_res;						\ -}) - -#define ia64_shrp(a, b, count)								\ -({											\ -	__u64 ia64_intri_res;								\ -	asm ("shrp %0=%1,%2,%3" : "=r"(ia64_intri_res) : "r"(a), "r"(b), "i"(count));	\ -	ia64_intri_res;									\ -}) - -#define ia64_ldfs(regnum, x)					\ -({								\ -	register double __f__ asm ("f"#regnum);			\ -	asm volatile ("ldfs %0=[%1]" :"=f"(__f__): "r"(x));	\ -}) - -#define ia64_ldfd(regnum, x)					\ -({								\ -	register double __f__ asm ("f"#regnum);			\ -	asm volatile ("ldfd %0=[%1]" :"=f"(__f__): "r"(x));	\ -}) - -#define ia64_ldfe(regnum, x)					\ -({								\ -	register double __f__ asm ("f"#regnum);			\ -	asm volatile ("ldfe %0=[%1]" :"=f"(__f__): "r"(x));	\ -}) - -#define ia64_ldf8(regnum, x)					\ -({								\ -	register double __f__ asm ("f"#regnum);			\ -	asm volatile ("ldf8 %0=[%1]" :"=f"(__f__): "r"(x));	\ -}) - -#define ia64_ldf_fill(regnum, x)				\ -({								\ -	register double __f__ asm ("f"#regnum);			\ -	asm volatile ("ldf.fill %0=[%1]" :"=f"(__f__): "r"(x));	\ -}) - -#define ia64_st4_rel_nta(m, val)					\ -({									\ -	asm volatile ("st4.rel.nta [%0] = %1\n\t" :: "r"(m), "r"(val));	\ -}) - -#define ia64_stfs(x, regnum)						\ -({									\ -	register double __f__ asm ("f"#regnum);				\ -	asm volatile ("stfs [%0]=%1" :: "r"(x), "f"(__f__) : "memory");	\ -}) - -#define ia64_stfd(x, regnum)						\ -({									\ -	register double __f__ asm ("f"#regnum);				\ -	asm volatile ("stfd [%0]=%1" :: "r"(x), "f"(__f__) : "memory");	\ -}) - -#define ia64_stfe(x, regnum)						\ -({									\ -	register double __f__ asm ("f"#regnum);				\ -	asm volatile ("stfe [%0]=%1" :: "r"(x), "f"(__f__) : "memory");	\ -}) - -#define ia64_stf8(x, regnum)						\ -({									\ -	register double __f__ asm ("f"#regnum);				\ -	asm volatile ("stf8 [%0]=%1" :: "r"(x), "f"(__f__) : "memory");	\ -}) - -#define ia64_stf_spill(x, regnum)						\ -({										\ -	register double __f__ asm ("f"#regnum);					\ -	asm volatile ("stf.spill [%0]=%1" :: "r"(x), "f"(__f__) : "memory");	\ -}) - -#define ia64_fetchadd4_acq(p, inc)						\ -({										\ -										\ -	__u64 ia64_intri_res;							\ -	asm volatile ("fetchadd4.acq %0=[%1],%2"				\ -				: "=r"(ia64_intri_res) : "r"(p), "i" (inc)	\ -				: "memory");					\ -										\ -	ia64_intri_res;								\ -}) - -#define ia64_fetchadd4_rel(p, inc)						\ -({										\ -	__u64 ia64_intri_res;							\ -	asm volatile ("fetchadd4.rel %0=[%1],%2"				\ -				: "=r"(ia64_intri_res) : "r"(p), "i" (inc)	\ -				: "memory");					\ -										\ -	ia64_intri_res;								\ -}) - -#define ia64_fetchadd8_acq(p, inc)						\ -({										\ -										\ -	__u64 ia64_intri_res;							\ -	asm volatile ("fetchadd8.acq %0=[%1],%2"				\ -				: "=r"(ia64_intri_res) : "r"(p), "i" (inc)	\ -				: "memory");					\ -										\ -	ia64_intri_res;								\ -}) - -#define ia64_fetchadd8_rel(p, inc)						\ -({										\ -	__u64 ia64_intri_res;							\ -	asm volatile ("fetchadd8.rel %0=[%1],%2"				\ -				: "=r"(ia64_intri_res) : "r"(p), "i" (inc)	\ -				: "memory");					\ -										\ -	ia64_intri_res;								\ -}) - -#define ia64_xchg1(ptr,x)							\ -({										\ -	__u64 ia64_intri_res;							\ -	asm volatile ("xchg1 %0=[%1],%2"					\ -		      : "=r" (ia64_intri_res) : "r" (ptr), "r" (x) : "memory");	\ -	ia64_intri_res;								\ -}) - -#define ia64_xchg2(ptr,x)						\ -({									\ -	__u64 ia64_intri_res;						\ -	asm volatile ("xchg2 %0=[%1],%2" : "=r" (ia64_intri_res)	\ -		      : "r" (ptr), "r" (x) : "memory");			\ -	ia64_intri_res;							\ -}) - -#define ia64_xchg4(ptr,x)						\ -({									\ -	__u64 ia64_intri_res;						\ -	asm volatile ("xchg4 %0=[%1],%2" : "=r" (ia64_intri_res)	\ -		      : "r" (ptr), "r" (x) : "memory");			\ -	ia64_intri_res;							\ -}) - -#define ia64_xchg8(ptr,x)						\ -({									\ -	__u64 ia64_intri_res;						\ -	asm volatile ("xchg8 %0=[%1],%2" : "=r" (ia64_intri_res)	\ -		      : "r" (ptr), "r" (x) : "memory");			\ -	ia64_intri_res;							\ -}) - -#define ia64_cmpxchg1_acq(ptr, new, old)						\ -({											\ -	__u64 ia64_intri_res;								\ -	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\ -	asm volatile ("cmpxchg1.acq %0=[%1],%2,ar.ccv":					\ -			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\ -	ia64_intri_res;									\ -}) - -#define ia64_cmpxchg1_rel(ptr, new, old)						\ -({											\ -	__u64 ia64_intri_res;								\ -	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\ -	asm volatile ("cmpxchg1.rel %0=[%1],%2,ar.ccv":					\ -			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\ -	ia64_intri_res;									\ -}) - -#define ia64_cmpxchg2_acq(ptr, new, old)						\ -({											\ -	__u64 ia64_intri_res;								\ -	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\ -	asm volatile ("cmpxchg2.acq %0=[%1],%2,ar.ccv":					\ -			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\ -	ia64_intri_res;									\ -}) - -#define ia64_cmpxchg2_rel(ptr, new, old)						\ -({											\ -	__u64 ia64_intri_res;								\ -	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\ -											\ -	asm volatile ("cmpxchg2.rel %0=[%1],%2,ar.ccv":					\ -			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\ -	ia64_intri_res;									\ -}) - -#define ia64_cmpxchg4_acq(ptr, new, old)						\ -({											\ -	__u64 ia64_intri_res;								\ -	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\ -	asm volatile ("cmpxchg4.acq %0=[%1],%2,ar.ccv":					\ -			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\ -	ia64_intri_res;									\ -}) - -#define ia64_cmpxchg4_rel(ptr, new, old)						\ -({											\ -	__u64 ia64_intri_res;								\ -	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\ -	asm volatile ("cmpxchg4.rel %0=[%1],%2,ar.ccv":					\ -			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\ -	ia64_intri_res;									\ -}) - -#define ia64_cmpxchg8_acq(ptr, new, old)						\ -({											\ -	__u64 ia64_intri_res;								\ -	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\ -	asm volatile ("cmpxchg8.acq %0=[%1],%2,ar.ccv":					\ -			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\ -	ia64_intri_res;									\ -}) - -#define ia64_cmpxchg8_rel(ptr, new, old)						\ -({											\ -	__u64 ia64_intri_res;								\ -	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\ -											\ -	asm volatile ("cmpxchg8.rel %0=[%1],%2,ar.ccv":					\ -			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\ -	ia64_intri_res;									\ -}) - -#define ia64_mf()	asm volatile ("mf" ::: "memory") -#define ia64_mfa()	asm volatile ("mf.a" ::: "memory") - -#define ia64_invala() asm volatile ("invala" ::: "memory") - -#define ia64_native_thash(addr)							\ -({										\ -	unsigned long ia64_intri_res;						\ -	asm volatile ("thash %0=%1" : "=r"(ia64_intri_res) : "r" (addr));	\ -	ia64_intri_res;								\ -}) - -#define ia64_srlz_i()	asm volatile (";; srlz.i ;;" ::: "memory") -#define ia64_srlz_d()	asm volatile (";; srlz.d" ::: "memory"); - -#ifdef HAVE_SERIALIZE_DIRECTIVE -# define ia64_dv_serialize_data()		asm volatile (".serialize.data"); -# define ia64_dv_serialize_instruction()	asm volatile (".serialize.instruction"); -#else -# define ia64_dv_serialize_data() -# define ia64_dv_serialize_instruction() -#endif - -#define ia64_nop(x)	asm volatile ("nop %0"::"i"(x)); - -#define ia64_itci(addr)	asm volatile ("itc.i %0;;" :: "r"(addr) : "memory") - -#define ia64_itcd(addr)	asm volatile ("itc.d %0;;" :: "r"(addr) : "memory") - - -#define ia64_itri(trnum, addr) asm volatile ("itr.i itr[%0]=%1"				\ -					     :: "r"(trnum), "r"(addr) : "memory") - -#define ia64_itrd(trnum, addr) asm volatile ("itr.d dtr[%0]=%1"				\ -					     :: "r"(trnum), "r"(addr) : "memory") - -#define ia64_tpa(addr)								\ -({										\ -	unsigned long ia64_pa;							\ -	asm volatile ("tpa %0 = %1" : "=r"(ia64_pa) : "r"(addr) : "memory");	\ -	ia64_pa;								\ -}) - -#define __ia64_set_dbr(index, val)						\ -	asm volatile ("mov dbr[%0]=%1" :: "r"(index), "r"(val) : "memory") - -#define ia64_set_ibr(index, val)						\ -	asm volatile ("mov ibr[%0]=%1" :: "r"(index), "r"(val) : "memory") - -#define ia64_set_pkr(index, val)						\ -	asm volatile ("mov pkr[%0]=%1" :: "r"(index), "r"(val) : "memory") - -#define ia64_set_pmc(index, val)						\ -	asm volatile ("mov pmc[%0]=%1" :: "r"(index), "r"(val) : "memory") - -#define ia64_set_pmd(index, val)						\ -	asm volatile ("mov pmd[%0]=%1" :: "r"(index), "r"(val) : "memory") - -#define ia64_native_set_rr(index, val)							\ -	asm volatile ("mov rr[%0]=%1" :: "r"(index), "r"(val) : "memory"); - -#define ia64_native_get_cpuid(index)							\ -({											\ -	unsigned long ia64_intri_res;							\ -	asm volatile ("mov %0=cpuid[%r1]" : "=r"(ia64_intri_res) : "rO"(index));	\ -	ia64_intri_res;									\ -}) - -#define __ia64_get_dbr(index)							\ -({										\ -	unsigned long ia64_intri_res;						\ -	asm volatile ("mov %0=dbr[%1]" : "=r"(ia64_intri_res) : "r"(index));	\ -	ia64_intri_res;								\ -}) - -#define ia64_get_ibr(index)							\ -({										\ -	unsigned long ia64_intri_res;						\ -	asm volatile ("mov %0=ibr[%1]" : "=r"(ia64_intri_res) : "r"(index));	\ -	ia64_intri_res;								\ -}) - -#define ia64_get_pkr(index)							\ -({										\ -	unsigned long ia64_intri_res;						\ -	asm volatile ("mov %0=pkr[%1]" : "=r"(ia64_intri_res) : "r"(index));	\ -	ia64_intri_res;								\ -}) - -#define ia64_get_pmc(index)							\ -({										\ -	unsigned long ia64_intri_res;						\ -	asm volatile ("mov %0=pmc[%1]" : "=r"(ia64_intri_res) : "r"(index));	\ -	ia64_intri_res;								\ -}) - - -#define ia64_native_get_pmd(index)						\ -({										\ -	unsigned long ia64_intri_res;						\ -	asm volatile ("mov %0=pmd[%1]" : "=r"(ia64_intri_res) : "r"(index));	\ -	ia64_intri_res;								\ -}) - -#define ia64_native_get_rr(index)						\ -({										\ -	unsigned long ia64_intri_res;						\ -	asm volatile ("mov %0=rr[%1]" : "=r"(ia64_intri_res) : "r" (index));	\ -	ia64_intri_res;								\ -}) - -#define ia64_native_fc(addr)	asm volatile ("fc %0" :: "r"(addr) : "memory") - - -#define ia64_sync_i()	asm volatile (";; sync.i" ::: "memory") - -#define ia64_native_ssm(mask)	asm volatile ("ssm %0":: "i"((mask)) : "memory") -#define ia64_native_rsm(mask)	asm volatile ("rsm %0":: "i"((mask)) : "memory") -#define ia64_sum(mask)	asm volatile ("sum %0":: "i"((mask)) : "memory") -#define ia64_rum(mask)	asm volatile ("rum %0":: "i"((mask)) : "memory") - -#define ia64_ptce(addr)	asm volatile ("ptc.e %0" :: "r"(addr)) - -#define ia64_native_ptcga(addr, size)						\ -do {										\ -	asm volatile ("ptc.ga %0,%1" :: "r"(addr), "r"(size) : "memory");	\ -	ia64_dv_serialize_data();						\ -} while (0) - -#define ia64_ptcl(addr, size)							\ -do {										\ -	asm volatile ("ptc.l %0,%1" :: "r"(addr), "r"(size) : "memory");	\ -	ia64_dv_serialize_data();						\ -} while (0) - -#define ia64_ptri(addr, size)						\ -	asm volatile ("ptr.i %0,%1" :: "r"(addr), "r"(size) : "memory") - -#define ia64_ptrd(addr, size)						\ -	asm volatile ("ptr.d %0,%1" :: "r"(addr), "r"(size) : "memory") - -#define ia64_ttag(addr)							\ -({									  \ -	__u64 ia64_intri_res;						   \ -	asm volatile ("ttag %0=%1" : "=r"(ia64_intri_res) : "r" (addr));   \ -	ia64_intri_res;							 \ -}) - - -/* Values for lfhint in ia64_lfetch and ia64_lfetch_fault */ - -#define ia64_lfhint_none   0 -#define ia64_lfhint_nt1    1 -#define ia64_lfhint_nt2    2 -#define ia64_lfhint_nta    3 - -#define ia64_lfetch(lfhint, y)					\ -({								\ -        switch (lfhint) {					\ -        case ia64_lfhint_none:					\ -                asm volatile ("lfetch [%0]" : : "r"(y));	\ -                break;						\ -        case ia64_lfhint_nt1:					\ -                asm volatile ("lfetch.nt1 [%0]" : : "r"(y));	\ -                break;						\ -        case ia64_lfhint_nt2:					\ -                asm volatile ("lfetch.nt2 [%0]" : : "r"(y));	\ -                break;						\ -        case ia64_lfhint_nta:					\ -                asm volatile ("lfetch.nta [%0]" : : "r"(y));	\ -                break;						\ -        }							\ -}) - -#define ia64_lfetch_excl(lfhint, y)					\ -({									\ -        switch (lfhint) {						\ -        case ia64_lfhint_none:						\ -                asm volatile ("lfetch.excl [%0]" :: "r"(y));		\ -                break;							\ -        case ia64_lfhint_nt1:						\ -                asm volatile ("lfetch.excl.nt1 [%0]" :: "r"(y));	\ -                break;							\ -        case ia64_lfhint_nt2:						\ -                asm volatile ("lfetch.excl.nt2 [%0]" :: "r"(y));	\ -                break;							\ -        case ia64_lfhint_nta:						\ -                asm volatile ("lfetch.excl.nta [%0]" :: "r"(y));	\ -                break;							\ -        }								\ -}) - -#define ia64_lfetch_fault(lfhint, y)					\ -({									\ -        switch (lfhint) {						\ -        case ia64_lfhint_none:						\ -                asm volatile ("lfetch.fault [%0]" : : "r"(y));		\ -                break;							\ -        case ia64_lfhint_nt1:						\ -                asm volatile ("lfetch.fault.nt1 [%0]" : : "r"(y));	\ -                break;							\ -        case ia64_lfhint_nt2:						\ -                asm volatile ("lfetch.fault.nt2 [%0]" : : "r"(y));	\ -                break;							\ -        case ia64_lfhint_nta:						\ -                asm volatile ("lfetch.fault.nta [%0]" : : "r"(y));	\ -                break;							\ -        }								\ -}) - -#define ia64_lfetch_fault_excl(lfhint, y)				\ -({									\ -        switch (lfhint) {						\ -        case ia64_lfhint_none:						\ -                asm volatile ("lfetch.fault.excl [%0]" :: "r"(y));	\ -                break;							\ -        case ia64_lfhint_nt1:						\ -                asm volatile ("lfetch.fault.excl.nt1 [%0]" :: "r"(y));	\ -                break;							\ -        case ia64_lfhint_nt2:						\ -                asm volatile ("lfetch.fault.excl.nt2 [%0]" :: "r"(y));	\ -                break;							\ -        case ia64_lfhint_nta:						\ -                asm volatile ("lfetch.fault.excl.nta [%0]" :: "r"(y));	\ -                break;							\ -        }								\ -}) - -#define ia64_native_intrin_local_irq_restore(x)			\ -do {								\ -	asm volatile (";;   cmp.ne p6,p7=%0,r0;;"		\ -		      "(p6) ssm psr.i;"				\ -		      "(p7) rsm psr.i;;"			\ -		      "(p6) srlz.d"				\ -		      :: "r"((x)) : "p6", "p7", "memory");	\ -} while (0) -  #endif /* _ASM_IA64_GCC_INTRIN_H */ diff --git a/arch/ia64/include/asm/gpio.h b/arch/ia64/include/asm/gpio.h new file mode 100644 index 00000000000..b3799d88ffc --- /dev/null +++ b/arch/ia64/include/asm/gpio.h @@ -0,0 +1,4 @@ +#ifndef __LINUX_GPIO_H +#warning Include linux/gpio.h instead of asm/gpio.h +#include <linux/gpio.h> +#endif diff --git a/arch/ia64/include/asm/hpsim.h b/arch/ia64/include/asm/hpsim.h index 892ab198a9d..0fe50225daa 100644 --- a/arch/ia64/include/asm/hpsim.h +++ b/arch/ia64/include/asm/hpsim.h @@ -10,7 +10,7 @@ int simcons_register(void);  struct tty_driver;  extern struct tty_driver *hp_simserial_driver; -void ia64_ssc_connect_irq(long intr, long irq); +extern int hpsim_get_irq(int intr);  void ia64_ctl_trace(long on);  #endif diff --git a/arch/ia64/include/asm/hugetlb.h b/arch/ia64/include/asm/hugetlb.h index da55c63728e..aa910054b8e 100644 --- a/arch/ia64/include/asm/hugetlb.h +++ b/arch/ia64/include/asm/hugetlb.h @@ -2,6 +2,7 @@  #define _ASM_IA64_HUGETLB_H  #include <asm/page.h> +#include <asm-generic/hugetlb.h>  void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr, @@ -77,4 +78,8 @@ static inline void arch_release_hugepage(struct page *page)  {  } +static inline void arch_clear_hugepage_flags(struct page *page) +{ +} +  #endif /* _ASM_IA64_HUGETLB_H */ diff --git a/arch/ia64/include/asm/hw_irq.h b/arch/ia64/include/asm/hw_irq.h index bf2e37493e0..029bab36cd9 100644 --- a/arch/ia64/include/asm/hw_irq.h +++ b/arch/ia64/include/asm/hw_irq.h @@ -132,7 +132,6 @@ extern int reserve_irq_vector (int vector);  extern void __setup_vector_irq(int cpu);  extern void ia64_send_ipi (int cpu, int vector, int delivery_mode, int redirect);  extern void ia64_native_register_percpu_irq (ia64_vector vec, struct irqaction *action); -extern int check_irq_used (int irq);  extern void destroy_and_reserve_irq (unsigned int irq);  #if defined(CONFIG_SMP) && (defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_DIG)) @@ -151,9 +150,6 @@ static inline void ia64_native_resend_irq(unsigned int vector)  /*   * Default implementations for the irq-descriptor API:   */ - -extern struct irq_desc irq_desc[NR_IRQS]; -  #ifndef CONFIG_IA64_GENERIC  static inline ia64_vector __ia64_irq_to_vector(int irq)  { diff --git a/arch/ia64/include/asm/ia64regs.h b/arch/ia64/include/asm/ia64regs.h deleted file mode 100644 index 1757f1c11ad..00000000000 --- a/arch/ia64/include/asm/ia64regs.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2002,2003 Intel Corp. - *      Jun Nakajima <jun.nakajima@intel.com> - *      Suresh Siddha <suresh.b.siddha@intel.com> - */ - -#ifndef _ASM_IA64_IA64REGS_H -#define _ASM_IA64_IA64REGS_H - -/* - * Register Names for getreg() and setreg(). - * - * The "magic" numbers happen to match the values used by the Intel compiler's - * getreg()/setreg() intrinsics. - */ - -/* Special Registers */ - -#define _IA64_REG_IP		1016	/* getreg only */ -#define _IA64_REG_PSR		1019 -#define _IA64_REG_PSR_L		1019 - -/* General Integer Registers */ - -#define _IA64_REG_GP		1025	/* R1 */ -#define _IA64_REG_R8		1032	/* R8 */ -#define _IA64_REG_R9		1033	/* R9 */ -#define _IA64_REG_SP		1036	/* R12 */ -#define _IA64_REG_TP		1037	/* R13 */ - -/* Application Registers */ - -#define _IA64_REG_AR_KR0	3072 -#define _IA64_REG_AR_KR1	3073 -#define _IA64_REG_AR_KR2	3074 -#define _IA64_REG_AR_KR3	3075 -#define _IA64_REG_AR_KR4	3076 -#define _IA64_REG_AR_KR5	3077 -#define _IA64_REG_AR_KR6	3078 -#define _IA64_REG_AR_KR7	3079 -#define _IA64_REG_AR_RSC	3088 -#define _IA64_REG_AR_BSP	3089 -#define _IA64_REG_AR_BSPSTORE	3090 -#define _IA64_REG_AR_RNAT	3091 -#define _IA64_REG_AR_FCR	3093 -#define _IA64_REG_AR_EFLAG	3096 -#define _IA64_REG_AR_CSD	3097 -#define _IA64_REG_AR_SSD	3098 -#define _IA64_REG_AR_CFLAG	3099 -#define _IA64_REG_AR_FSR	3100 -#define _IA64_REG_AR_FIR	3101 -#define _IA64_REG_AR_FDR	3102 -#define _IA64_REG_AR_CCV	3104 -#define _IA64_REG_AR_UNAT	3108 -#define _IA64_REG_AR_FPSR	3112 -#define _IA64_REG_AR_ITC	3116 -#define _IA64_REG_AR_PFS	3136 -#define _IA64_REG_AR_LC		3137 -#define _IA64_REG_AR_EC		3138 - -/* Control Registers */ - -#define _IA64_REG_CR_DCR	4096 -#define _IA64_REG_CR_ITM	4097 -#define _IA64_REG_CR_IVA	4098 -#define _IA64_REG_CR_PTA	4104 -#define _IA64_REG_CR_IPSR	4112 -#define _IA64_REG_CR_ISR	4113 -#define _IA64_REG_CR_IIP	4115 -#define _IA64_REG_CR_IFA	4116 -#define _IA64_REG_CR_ITIR	4117 -#define _IA64_REG_CR_IIPA	4118 -#define _IA64_REG_CR_IFS	4119 -#define _IA64_REG_CR_IIM	4120 -#define _IA64_REG_CR_IHA	4121 -#define _IA64_REG_CR_LID	4160 -#define _IA64_REG_CR_IVR	4161	/* getreg only */ -#define _IA64_REG_CR_TPR	4162 -#define _IA64_REG_CR_EOI	4163 -#define _IA64_REG_CR_IRR0	4164	/* getreg only */ -#define _IA64_REG_CR_IRR1	4165	/* getreg only */ -#define _IA64_REG_CR_IRR2	4166	/* getreg only */ -#define _IA64_REG_CR_IRR3	4167	/* getreg only */ -#define _IA64_REG_CR_ITV	4168 -#define _IA64_REG_CR_PMV	4169 -#define _IA64_REG_CR_CMCV	4170 -#define _IA64_REG_CR_LRR0	4176 -#define _IA64_REG_CR_LRR1	4177 - -/* Indirect Registers for getindreg() and setindreg() */ - -#define _IA64_REG_INDR_CPUID	9000	/* getindreg only */ -#define _IA64_REG_INDR_DBR	9001 -#define _IA64_REG_INDR_IBR	9002 -#define _IA64_REG_INDR_PKR	9003 -#define _IA64_REG_INDR_PMC	9004 -#define _IA64_REG_INDR_PMD	9005 -#define _IA64_REG_INDR_RR	9006 - -#endif /* _ASM_IA64_IA64REGS_H */ diff --git a/arch/ia64/include/asm/intel_intrin.h b/arch/ia64/include/asm/intel_intrin.h deleted file mode 100644 index 53cec577558..00000000000 --- a/arch/ia64/include/asm/intel_intrin.h +++ /dev/null @@ -1,161 +0,0 @@ -#ifndef _ASM_IA64_INTEL_INTRIN_H -#define _ASM_IA64_INTEL_INTRIN_H -/* - * Intel Compiler Intrinsics - * - * Copyright (C) 2002,2003 Jun Nakajima <jun.nakajima@intel.com> - * Copyright (C) 2002,2003 Suresh Siddha <suresh.b.siddha@intel.com> - * Copyright (C) 2005,2006 Hongjiu Lu <hongjiu.lu@intel.com> - * - */ -#include <ia64intrin.h> - -#define ia64_barrier()		__memory_barrier() - -#define ia64_stop()	/* Nothing: As of now stop bit is generated for each -		 	 * intrinsic -		 	 */ - -#define ia64_native_getreg	__getReg -#define ia64_native_setreg	__setReg - -#define ia64_hint		__hint -#define ia64_hint_pause		__hint_pause - -#define ia64_mux1_brcst		_m64_mux1_brcst -#define ia64_mux1_mix		_m64_mux1_mix -#define ia64_mux1_shuf		_m64_mux1_shuf -#define ia64_mux1_alt		_m64_mux1_alt -#define ia64_mux1_rev		_m64_mux1_rev - -#define ia64_mux1(x,v)		_m_to_int64(_m64_mux1(_m_from_int64(x), (v))) -#define ia64_popcnt		_m64_popcnt -#define ia64_getf_exp		__getf_exp -#define ia64_shrp		_m64_shrp - -#define ia64_tpa		__tpa -#define ia64_invala		__invala -#define ia64_invala_gr		__invala_gr -#define ia64_invala_fr		__invala_fr -#define ia64_nop		__nop -#define ia64_sum		__sum -#define ia64_native_ssm		__ssm -#define ia64_rum		__rum -#define ia64_native_rsm		__rsm -#define ia64_native_fc 		__fc - -#define ia64_ldfs		__ldfs -#define ia64_ldfd		__ldfd -#define ia64_ldfe		__ldfe -#define ia64_ldf8		__ldf8 -#define ia64_ldf_fill		__ldf_fill - -#define ia64_stfs		__stfs -#define ia64_stfd		__stfd -#define ia64_stfe		__stfe -#define ia64_stf8		__stf8 -#define ia64_stf_spill		__stf_spill - -#define ia64_mf			__mf -#define ia64_mfa		__mfa - -#define ia64_fetchadd4_acq	__fetchadd4_acq -#define ia64_fetchadd4_rel	__fetchadd4_rel -#define ia64_fetchadd8_acq	__fetchadd8_acq -#define ia64_fetchadd8_rel	__fetchadd8_rel - -#define ia64_xchg1		_InterlockedExchange8 -#define ia64_xchg2		_InterlockedExchange16 -#define ia64_xchg4		_InterlockedExchange -#define ia64_xchg8		_InterlockedExchange64 - -#define ia64_cmpxchg1_rel	_InterlockedCompareExchange8_rel -#define ia64_cmpxchg1_acq	_InterlockedCompareExchange8_acq -#define ia64_cmpxchg2_rel	_InterlockedCompareExchange16_rel -#define ia64_cmpxchg2_acq	_InterlockedCompareExchange16_acq -#define ia64_cmpxchg4_rel	_InterlockedCompareExchange_rel -#define ia64_cmpxchg4_acq	_InterlockedCompareExchange_acq -#define ia64_cmpxchg8_rel	_InterlockedCompareExchange64_rel -#define ia64_cmpxchg8_acq	_InterlockedCompareExchange64_acq - -#define __ia64_set_dbr(index, val)	\ -		__setIndReg(_IA64_REG_INDR_DBR, index, val) -#define ia64_set_ibr(index, val)	\ -		__setIndReg(_IA64_REG_INDR_IBR, index, val) -#define ia64_set_pkr(index, val)	\ -		__setIndReg(_IA64_REG_INDR_PKR, index, val) -#define ia64_set_pmc(index, val)	\ -		__setIndReg(_IA64_REG_INDR_PMC, index, val) -#define ia64_set_pmd(index, val)	\ -		__setIndReg(_IA64_REG_INDR_PMD, index, val) -#define ia64_native_set_rr(index, val)	\ -		__setIndReg(_IA64_REG_INDR_RR, index, val) - -#define ia64_native_get_cpuid(index)	\ -		__getIndReg(_IA64_REG_INDR_CPUID, index) -#define __ia64_get_dbr(index)		__getIndReg(_IA64_REG_INDR_DBR, index) -#define ia64_get_ibr(index)		__getIndReg(_IA64_REG_INDR_IBR, index) -#define ia64_get_pkr(index)		__getIndReg(_IA64_REG_INDR_PKR, index) -#define ia64_get_pmc(index)		__getIndReg(_IA64_REG_INDR_PMC, index) -#define ia64_native_get_pmd(index)	__getIndReg(_IA64_REG_INDR_PMD, index) -#define ia64_native_get_rr(index)	__getIndReg(_IA64_REG_INDR_RR, index) - -#define ia64_srlz_d		__dsrlz -#define ia64_srlz_i		__isrlz - -#define ia64_dv_serialize_data() -#define ia64_dv_serialize_instruction() - -#define ia64_st1_rel		__st1_rel -#define ia64_st2_rel		__st2_rel -#define ia64_st4_rel		__st4_rel -#define ia64_st8_rel		__st8_rel - -/* FIXME: need st4.rel.nta intrinsic */ -#define ia64_st4_rel_nta	__st4_rel - -#define ia64_ld1_acq		__ld1_acq -#define ia64_ld2_acq		__ld2_acq -#define ia64_ld4_acq		__ld4_acq -#define ia64_ld8_acq		__ld8_acq - -#define ia64_sync_i		__synci -#define ia64_native_thash	__thash -#define ia64_native_ttag	__ttag -#define ia64_itcd		__itcd -#define ia64_itci		__itci -#define ia64_itrd		__itrd -#define ia64_itri		__itri -#define ia64_ptce		__ptce -#define ia64_ptcl		__ptcl -#define ia64_native_ptcg	__ptcg -#define ia64_native_ptcga	__ptcga -#define ia64_ptri		__ptri -#define ia64_ptrd		__ptrd -#define ia64_dep_mi		_m64_dep_mi - -/* Values for lfhint in __lfetch and __lfetch_fault */ - -#define ia64_lfhint_none	__lfhint_none -#define ia64_lfhint_nt1		__lfhint_nt1 -#define ia64_lfhint_nt2		__lfhint_nt2 -#define ia64_lfhint_nta		__lfhint_nta - -#define ia64_lfetch		__lfetch -#define ia64_lfetch_excl	__lfetch_excl -#define ia64_lfetch_fault	__lfetch_fault -#define ia64_lfetch_fault_excl	__lfetch_fault_excl - -#define ia64_native_intrin_local_irq_restore(x)		\ -do {							\ -	if ((x) != 0) {					\ -		ia64_native_ssm(IA64_PSR_I);		\ -		ia64_srlz_d();				\ -	} else {					\ -		ia64_native_rsm(IA64_PSR_I);		\ -	}						\ -} while (0) - -#define __builtin_trap()	__break(0); - -#endif /* _ASM_IA64_INTEL_INTRIN_H */ diff --git a/arch/ia64/include/asm/intrinsics.h b/arch/ia64/include/asm/intrinsics.h index 111ed522289..20477ea111b 100644 --- a/arch/ia64/include/asm/intrinsics.h +++ b/arch/ia64/include/asm/intrinsics.h @@ -1,246 +1,25 @@ -#ifndef _ASM_IA64_INTRINSICS_H -#define _ASM_IA64_INTRINSICS_H -  /*   * Compiler-dependent intrinsics.   *   * Copyright (C) 2002-2003 Hewlett-Packard Co   *	David Mosberger-Tang <davidm@hpl.hp.com>   */ +#ifndef _ASM_IA64_INTRINSICS_H +#define _ASM_IA64_INTRINSICS_H -#ifndef __ASSEMBLY__ - -#include <linux/types.h> -/* include compiler specific intrinsics */ -#include <asm/ia64regs.h> -#ifdef __INTEL_COMPILER -# include <asm/intel_intrin.h> -#else -# include <asm/gcc_intrin.h> -#endif - -#define ia64_native_get_psr_i()	(ia64_native_getreg(_IA64_REG_PSR) & IA64_PSR_I) - -#define ia64_native_set_rr0_to_rr4(val0, val1, val2, val3, val4)	\ -do {									\ -	ia64_native_set_rr(0x0000000000000000UL, (val0));		\ -	ia64_native_set_rr(0x2000000000000000UL, (val1));		\ -	ia64_native_set_rr(0x4000000000000000UL, (val2));		\ -	ia64_native_set_rr(0x6000000000000000UL, (val3));		\ -	ia64_native_set_rr(0x8000000000000000UL, (val4));		\ -} while (0) - -/* - * Force an unresolved reference if someone tries to use - * ia64_fetch_and_add() with a bad value. - */ -extern unsigned long __bad_size_for_ia64_fetch_and_add (void); -extern unsigned long __bad_increment_for_ia64_fetch_and_add (void); - -#define IA64_FETCHADD(tmp,v,n,sz,sem)						\ -({										\ -	switch (sz) {								\ -	      case 4:								\ -	        tmp = ia64_fetchadd4_##sem((unsigned int *) v, n);		\ -		break;								\ -										\ -	      case 8:								\ -	        tmp = ia64_fetchadd8_##sem((unsigned long *) v, n);		\ -		break;								\ -										\ -	      default:								\ -		__bad_size_for_ia64_fetch_and_add();				\ -	}									\ -}) - -#define ia64_fetchadd(i,v,sem)								\ -({											\ -	__u64 _tmp;									\ -	volatile __typeof__(*(v)) *_v = (v);						\ -	/* Can't use a switch () here: gcc isn't always smart enough for that... */	\ -	if ((i) == -16)									\ -		IA64_FETCHADD(_tmp, _v, -16, sizeof(*(v)), sem);			\ -	else if ((i) == -8)								\ -		IA64_FETCHADD(_tmp, _v, -8, sizeof(*(v)), sem);				\ -	else if ((i) == -4)								\ -		IA64_FETCHADD(_tmp, _v, -4, sizeof(*(v)), sem);				\ -	else if ((i) == -1)								\ -		IA64_FETCHADD(_tmp, _v, -1, sizeof(*(v)), sem);				\ -	else if ((i) == 1)								\ -		IA64_FETCHADD(_tmp, _v, 1, sizeof(*(v)), sem);				\ -	else if ((i) == 4)								\ -		IA64_FETCHADD(_tmp, _v, 4, sizeof(*(v)), sem);				\ -	else if ((i) == 8)								\ -		IA64_FETCHADD(_tmp, _v, 8, sizeof(*(v)), sem);				\ -	else if ((i) == 16)								\ -		IA64_FETCHADD(_tmp, _v, 16, sizeof(*(v)), sem);				\ -	else										\ -		_tmp = __bad_increment_for_ia64_fetch_and_add();			\ -	(__typeof__(*(v))) (_tmp);	/* return old value */				\ -}) - -#define ia64_fetch_and_add(i,v)	(ia64_fetchadd(i, v, rel) + (i)) /* return new value */ - -/* - * This function doesn't exist, so you'll get a linker error if - * something tries to do an invalid xchg(). - */ -extern void ia64_xchg_called_with_bad_pointer (void); - -#define __xchg(x,ptr,size)						\ -({									\ -	unsigned long __xchg_result;					\ -									\ -	switch (size) {							\ -	      case 1:							\ -		__xchg_result = ia64_xchg1((__u8 *)ptr, x);		\ -		break;							\ -									\ -	      case 2:							\ -		__xchg_result = ia64_xchg2((__u16 *)ptr, x);		\ -		break;							\ -									\ -	      case 4:							\ -		__xchg_result = ia64_xchg4((__u32 *)ptr, x);		\ -		break;							\ -									\ -	      case 8:							\ -		__xchg_result = ia64_xchg8((__u64 *)ptr, x);		\ -		break;							\ -	      default:							\ -		ia64_xchg_called_with_bad_pointer();			\ -	}								\ -	__xchg_result;							\ -}) - -#define xchg(ptr,x)							     \ -  ((__typeof__(*(ptr))) __xchg ((unsigned long) (x), (ptr), sizeof(*(ptr)))) - -/* - * Atomic compare and exchange.  Compare OLD with MEM, if identical, - * store NEW in MEM.  Return the initial value in MEM.  Success is - * indicated by comparing RETURN with OLD. - */ - -#define __HAVE_ARCH_CMPXCHG 1 - -/* - * This function doesn't exist, so you'll get a linker error - * if something tries to do an invalid cmpxchg(). - */ -extern long ia64_cmpxchg_called_with_bad_pointer (void); - -#define ia64_cmpxchg(sem,ptr,old,new,size)						\ -({											\ -	__u64 _o_, _r_;									\ -											\ -	switch (size) {									\ -	      case 1: _o_ = (__u8 ) (long) (old); break;				\ -	      case 2: _o_ = (__u16) (long) (old); break;				\ -	      case 4: _o_ = (__u32) (long) (old); break;				\ -	      case 8: _o_ = (__u64) (long) (old); break;				\ -	      default: break;								\ -	}										\ -	switch (size) {									\ -	      case 1:									\ -	      	_r_ = ia64_cmpxchg1_##sem((__u8 *) ptr, new, _o_);			\ -		break;									\ -											\ -	      case 2:									\ -	       _r_ = ia64_cmpxchg2_##sem((__u16 *) ptr, new, _o_);			\ -		break;									\ -											\ -	      case 4:									\ -	      	_r_ = ia64_cmpxchg4_##sem((__u32 *) ptr, new, _o_);			\ -		break;									\ -											\ -	      case 8:									\ -		_r_ = ia64_cmpxchg8_##sem((__u64 *) ptr, new, _o_);			\ -		break;									\ -											\ -	      default:									\ -		_r_ = ia64_cmpxchg_called_with_bad_pointer();				\ -		break;									\ -	}										\ -	(__typeof__(old)) _r_;								\ -}) - -#define cmpxchg_acq(ptr, o, n)	\ -	ia64_cmpxchg(acq, (ptr), (o), (n), sizeof(*(ptr))) -#define cmpxchg_rel(ptr, o, n)	\ -	ia64_cmpxchg(rel, (ptr), (o), (n), sizeof(*(ptr))) - -/* for compatibility with other platforms: */ -#define cmpxchg(ptr, o, n)	cmpxchg_acq((ptr), (o), (n)) -#define cmpxchg64(ptr, o, n)	cmpxchg_acq((ptr), (o), (n)) - -#define cmpxchg_local		cmpxchg -#define cmpxchg64_local		cmpxchg64 - -#ifdef CONFIG_IA64_DEBUG_CMPXCHG -# define CMPXCHG_BUGCHECK_DECL	int _cmpxchg_bugcheck_count = 128; -# define CMPXCHG_BUGCHECK(v)							\ -  do {										\ -	if (_cmpxchg_bugcheck_count-- <= 0) {					\ -		void *ip;							\ -		extern int printk(const char *fmt, ...);			\ -		ip = (void *) ia64_getreg(_IA64_REG_IP);			\ -		printk("CMPXCHG_BUGCHECK: stuck at %p on word %p\n", ip, (v));	\ -		break;								\ -	}									\ -  } while (0) -#else /* !CONFIG_IA64_DEBUG_CMPXCHG */ -# define CMPXCHG_BUGCHECK_DECL -# define CMPXCHG_BUGCHECK(v) -#endif /* !CONFIG_IA64_DEBUG_CMPXCHG */ - -#endif - -#ifdef __KERNEL__  #include <asm/paravirt_privop.h> -#endif +#include <uapi/asm/intrinsics.h>  #ifndef __ASSEMBLY__ -#if defined(CONFIG_PARAVIRT) && defined(__KERNEL__) -#ifdef ASM_SUPPORTED -# define IA64_INTRINSIC_API(name)	paravirt_ ## name -#else -# define IA64_INTRINSIC_API(name)	pv_cpu_ops.name -#endif +#if defined(CONFIG_PARAVIRT) +# undef IA64_INTRINSIC_API +# undef IA64_INTRINSIC_MACRO +# ifdef ASM_SUPPORTED +#  define IA64_INTRINSIC_API(name)	paravirt_ ## name +# else +#  define IA64_INTRINSIC_API(name)	pv_cpu_ops.name +# endif  #define IA64_INTRINSIC_MACRO(name)	paravirt_ ## name -#else -#define IA64_INTRINSIC_API(name)	ia64_native_ ## name -#define IA64_INTRINSIC_MACRO(name)	ia64_native_ ## name  #endif - -/************************************************/ -/* Instructions paravirtualized for correctness */ -/************************************************/ -/* fc, thash, get_cpuid, get_pmd, get_eflags, set_eflags */ -/* Note that "ttag" and "cover" are also privilege-sensitive; "ttag" - * is not currently used (though it may be in a long-format VHPT system!) - */ -#define ia64_fc				IA64_INTRINSIC_API(fc) -#define ia64_thash			IA64_INTRINSIC_API(thash) -#define ia64_get_cpuid			IA64_INTRINSIC_API(get_cpuid) -#define ia64_get_pmd			IA64_INTRINSIC_API(get_pmd) - - -/************************************************/ -/* Instructions paravirtualized for performance */ -/************************************************/ -#define ia64_ssm			IA64_INTRINSIC_MACRO(ssm) -#define ia64_rsm			IA64_INTRINSIC_MACRO(rsm) -#define ia64_getreg			IA64_INTRINSIC_MACRO(getreg) -#define ia64_setreg			IA64_INTRINSIC_API(setreg) -#define ia64_set_rr			IA64_INTRINSIC_API(set_rr) -#define ia64_get_rr			IA64_INTRINSIC_API(get_rr) -#define ia64_ptcga			IA64_INTRINSIC_API(ptcga) -#define ia64_get_psr_i			IA64_INTRINSIC_API(get_psr_i) -#define ia64_intrin_local_irq_restore	\ -	IA64_INTRINSIC_API(intrin_local_irq_restore) -#define ia64_set_rr0_to_rr4		IA64_INTRINSIC_API(set_rr0_to_rr4) -  #endif /* !__ASSEMBLY__ */ -  #endif /* _ASM_IA64_INTRINSICS_H */ diff --git a/arch/ia64/include/asm/io.h b/arch/ia64/include/asm/io.h index cc8335eb311..0d2bcb37ec3 100644 --- a/arch/ia64/include/asm/io.h +++ b/arch/ia64/include/asm/io.h @@ -71,7 +71,6 @@ extern unsigned int num_io_spaces;  #include <asm/intrinsics.h>  #include <asm/machvec.h>  #include <asm/page.h> -#include <asm/system.h>  #include <asm-generic/iomap.h>  /* @@ -91,7 +90,7 @@ phys_to_virt (unsigned long address)  #define ARCH_HAS_VALID_PHYS_ADDR_RANGE  extern u64 kern_mem_attribute (unsigned long phys_addr, unsigned long size); -extern int valid_phys_addr_range (unsigned long addr, size_t count); /* efi.c */ +extern int valid_phys_addr_range (phys_addr_t addr, size_t count); /* efi.c */  extern int valid_mmap_phys_addr_range (unsigned long pfn, size_t count);  /* @@ -425,7 +424,13 @@ extern void __iomem * ioremap(unsigned long offset, unsigned long size);  extern void __iomem * ioremap_nocache (unsigned long offset, unsigned long size);  extern void iounmap (volatile void __iomem *addr);  extern void __iomem * early_ioremap (unsigned long phys_addr, unsigned long size); +#define early_memremap(phys_addr, size)        early_ioremap(phys_addr, size)  extern void early_iounmap (volatile void __iomem *addr, unsigned long size); +static inline void __iomem * ioremap_cache (unsigned long phys_addr, unsigned long size) +{ +	return ioremap(phys_addr, size); +} +  /*   * String version of IO memory access ops: diff --git a/arch/ia64/include/asm/ioctl.h b/arch/ia64/include/asm/ioctl.h deleted file mode 100644 index b279fe06dfe..00000000000 --- a/arch/ia64/include/asm/ioctl.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/ioctl.h> diff --git a/arch/ia64/include/asm/ioctls.h b/arch/ia64/include/asm/ioctls.h deleted file mode 100644 index f3aab5512e9..00000000000 --- a/arch/ia64/include/asm/ioctls.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_IA64_IOCTLS_H -#define _ASM_IA64_IOCTLS_H - -#include <asm-generic/ioctls.h> - -#endif /* _ASM_IA64_IOCTLS_H */ diff --git a/arch/ia64/include/asm/iommu.h b/arch/ia64/include/asm/iommu.h index 745e095fe82..105c93b00b1 100644 --- a/arch/ia64/include/asm/iommu.h +++ b/arch/ia64/include/asm/iommu.h @@ -7,12 +7,14 @@  extern void pci_iommu_shutdown(void);  extern void no_iommu_init(void); +#ifdef	CONFIG_INTEL_IOMMU  extern int force_iommu, no_iommu; -extern int iommu_detected; -#ifdef	CONFIG_DMAR  extern int iommu_pass_through; +extern int iommu_detected;  #else  #define iommu_pass_through	(0) +#define no_iommu		(1) +#define iommu_detected		(0)  #endif  extern void iommu_dma_init(void);  extern void machvec_init(const char *name); diff --git a/arch/ia64/include/asm/iosapic.h b/arch/ia64/include/asm/iosapic.h index b9c102e15f2..94c89a2d97f 100644 --- a/arch/ia64/include/asm/iosapic.h +++ b/arch/ia64/include/asm/iosapic.h @@ -87,18 +87,13 @@ static inline void iosapic_eoi(char __iomem *iosapic, u32 vector)  }  extern void __init iosapic_system_init (int pcat_compat); -extern int __devinit iosapic_init (unsigned long address, -				    unsigned int gsi_base); -#ifdef CONFIG_HOTPLUG +extern int iosapic_init (unsigned long address, unsigned int gsi_base);  extern int iosapic_remove (unsigned int gsi_base); -#else -#define iosapic_remove(gsi_base)				(-EINVAL) -#endif /* CONFIG_HOTPLUG */  extern int gsi_to_irq (unsigned int gsi);  extern int iosapic_register_intr (unsigned int gsi, unsigned long polarity,  				  unsigned long trigger);  extern void iosapic_unregister_intr (unsigned int irq); -extern void __devinit iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi, +extern void iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi,  				      unsigned long polarity,  				      unsigned long trigger);  extern int __init iosapic_register_platform_intr (u32 int_type, @@ -109,7 +104,7 @@ extern int __init iosapic_register_platform_intr (u32 int_type,  					   unsigned long trigger);  #ifdef CONFIG_NUMA -extern void __devinit map_iosapic_to_node (unsigned int, int); +extern void map_iosapic_to_node (unsigned int, int);  #endif  #else  #define iosapic_system_init(pcat_compat)			do { } while (0) diff --git a/arch/ia64/include/asm/ipcbuf.h b/arch/ia64/include/asm/ipcbuf.h deleted file mode 100644 index 079899ae7d3..00000000000 --- a/arch/ia64/include/asm/ipcbuf.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _ASM_IA64_IPCBUF_H -#define _ASM_IA64_IPCBUF_H - -/* - * The ipc64_perm structure for IA-64 architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 32-bit seq - * - 2 miscellaneous 64-bit values - */ - -struct ipc64_perm -{ -	__kernel_key_t	key; -	__kernel_uid_t	uid; -	__kernel_gid_t	gid; -	__kernel_uid_t	cuid; -	__kernel_gid_t	cgid; -	__kernel_mode_t	mode; -	unsigned short	seq; -	unsigned short	__pad1; -	unsigned long	__unused1; -	unsigned long	__unused2; -}; - -#endif /* _ASM_IA64_IPCBUF_H */ diff --git a/arch/ia64/include/asm/irq.h b/arch/ia64/include/asm/irq.h index 91b920fd7d5..820667cbea7 100644 --- a/arch/ia64/include/asm/irq.h +++ b/arch/ia64/include/asm/irq.h @@ -31,4 +31,7 @@ bool is_affinity_mask_valid(const struct cpumask *cpumask);  #define is_affinity_mask_valid is_affinity_mask_valid +int create_irq(void); +void destroy_irq(unsigned int irq); +  #endif /* _ASM_IA64_IRQ_H */ diff --git a/arch/ia64/include/asm/irq_remapping.h b/arch/ia64/include/asm/irq_remapping.h new file mode 100644 index 00000000000..e3b3556e2e1 --- /dev/null +++ b/arch/ia64/include/asm/irq_remapping.h @@ -0,0 +1,6 @@ +#ifndef __IA64_INTR_REMAPPING_H +#define __IA64_INTR_REMAPPING_H +#define irq_remapping_enabled 0 +#define dmar_alloc_hwirq	create_irq +#define dmar_free_hwirq		destroy_irq +#endif diff --git a/arch/ia64/include/asm/irqflags.h b/arch/ia64/include/asm/irqflags.h index f82d6be2ecd..cec6c06b52c 100644 --- a/arch/ia64/include/asm/irqflags.h +++ b/arch/ia64/include/asm/irqflags.h @@ -10,6 +10,9 @@  #ifndef _ASM_IA64_IRQFLAGS_H  #define _ASM_IA64_IRQFLAGS_H +#include <asm/pal.h> +#include <asm/kregs.h> +  #ifdef CONFIG_IA64_DEBUG_IRQ  extern unsigned long last_cli_ip;  static inline void arch_maybe_save_ip(unsigned long flags) @@ -87,6 +90,7 @@ static inline bool arch_irqs_disabled(void)  static inline void arch_safe_halt(void)  { +	arch_local_irq_enable();  	ia64_pal_halt_light();	/* PAL_HALT_LIGHT */  } diff --git a/arch/ia64/include/asm/kexec.h b/arch/ia64/include/asm/kexec.h index e1d58f819d7..aea2b81b03a 100644 --- a/arch/ia64/include/asm/kexec.h +++ b/arch/ia64/include/asm/kexec.h @@ -1,6 +1,7 @@  #ifndef _ASM_IA64_KEXEC_H  #define _ASM_IA64_KEXEC_H +#include <asm/setup.h>  /* Maximum physical address we can use pages from */  #define KEXEC_SOURCE_MEMORY_LIMIT (-1UL) diff --git a/arch/ia64/include/asm/kvm.h b/arch/ia64/include/asm/kvm.h deleted file mode 100644 index bc90c75adf6..00000000000 --- a/arch/ia64/include/asm/kvm.h +++ /dev/null @@ -1,264 +0,0 @@ -#ifndef __ASM_IA64_KVM_H -#define __ASM_IA64_KVM_H - -/* - * kvm structure definitions  for ia64 - * - * Copyright (C) 2007 Xiantao Zhang <xiantao.zhang@intel.com> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - */ - -#include <linux/types.h> -#include <linux/ioctl.h> - -/* Select x86 specific features in <linux/kvm.h> */ -#define __KVM_HAVE_IOAPIC -#define __KVM_HAVE_DEVICE_ASSIGNMENT - -/* Architectural interrupt line count. */ -#define KVM_NR_INTERRUPTS 256 - -#define KVM_IOAPIC_NUM_PINS  48 - -struct kvm_ioapic_state { -	__u64 base_address; -	__u32 ioregsel; -	__u32 id; -	__u32 irr; -	__u32 pad; -	union { -		__u64 bits; -		struct { -			__u8 vector; -			__u8 delivery_mode:3; -			__u8 dest_mode:1; -			__u8 delivery_status:1; -			__u8 polarity:1; -			__u8 remote_irr:1; -			__u8 trig_mode:1; -			__u8 mask:1; -			__u8 reserve:7; -			__u8 reserved[4]; -			__u8 dest_id; -		} fields; -	} redirtbl[KVM_IOAPIC_NUM_PINS]; -}; - -#define KVM_IRQCHIP_PIC_MASTER   0 -#define KVM_IRQCHIP_PIC_SLAVE    1 -#define KVM_IRQCHIP_IOAPIC       2 -#define KVM_NR_IRQCHIPS          3 - -#define KVM_CONTEXT_SIZE	8*1024 - -struct kvm_fpreg { -	union { -		unsigned long bits[2]; -		long double __dummy;	/* force 16-byte alignment */ -	} u; -}; - -union context { -	/* 8K size */ -	char	dummy[KVM_CONTEXT_SIZE]; -	struct { -		unsigned long       psr; -		unsigned long       pr; -		unsigned long       caller_unat; -		unsigned long       pad; -		unsigned long       gr[32]; -		unsigned long       ar[128]; -		unsigned long       br[8]; -		unsigned long       cr[128]; -		unsigned long       rr[8]; -		unsigned long       ibr[8]; -		unsigned long       dbr[8]; -		unsigned long       pkr[8]; -		struct kvm_fpreg   fr[128]; -	}; -}; - -struct thash_data { -	union { -		struct { -			unsigned long p    :  1; /* 0 */ -			unsigned long rv1  :  1; /* 1 */ -			unsigned long ma   :  3; /* 2-4 */ -			unsigned long a    :  1; /* 5 */ -			unsigned long d    :  1; /* 6 */ -			unsigned long pl   :  2; /* 7-8 */ -			unsigned long ar   :  3; /* 9-11 */ -			unsigned long ppn  : 38; /* 12-49 */ -			unsigned long rv2  :  2; /* 50-51 */ -			unsigned long ed   :  1; /* 52 */ -			unsigned long ig1  : 11; /* 53-63 */ -		}; -		struct { -			unsigned long __rv1 : 53;     /* 0-52 */ -			unsigned long contiguous : 1; /*53 */ -			unsigned long tc : 1;         /* 54 TR or TC */ -			unsigned long cl : 1; -			/* 55 I side or D side cache line */ -			unsigned long len  :  4;      /* 56-59 */ -			unsigned long io  : 1;	/* 60 entry is for io or not */ -			unsigned long nomap : 1; -			/* 61 entry cann't be inserted into machine TLB.*/ -			unsigned long checked : 1; -			/* 62 for VTLB/VHPT sanity check */ -			unsigned long invalid : 1; -			/* 63 invalid entry */ -		}; -		unsigned long page_flags; -	};                  /* same for VHPT and TLB */ - -	union { -		struct { -			unsigned long rv3  :  2; -			unsigned long ps   :  6; -			unsigned long key  : 24; -			unsigned long rv4  : 32; -		}; -		unsigned long itir; -	}; -	union { -		struct { -			unsigned long ig2  :  12; -			unsigned long vpn  :  49; -			unsigned long vrn  :   3; -		}; -		unsigned long ifa; -		unsigned long vadr; -		struct { -			unsigned long tag  :  63; -			unsigned long ti   :  1; -		}; -		unsigned long etag; -	}; -	union { -		struct thash_data *next; -		unsigned long rid; -		unsigned long gpaddr; -	}; -}; - -#define	NITRS	8 -#define NDTRS	8 - -struct saved_vpd { -	unsigned long  vhpi; -	unsigned long  vgr[16]; -	unsigned long  vbgr[16]; -	unsigned long  vnat; -	unsigned long  vbnat; -	unsigned long  vcpuid[5]; -	unsigned long  vpsr; -	unsigned long  vpr; -	union { -		unsigned long  vcr[128]; -		struct { -			unsigned long dcr; -			unsigned long itm; -			unsigned long iva; -			unsigned long rsv1[5]; -			unsigned long pta; -			unsigned long rsv2[7]; -			unsigned long ipsr; -			unsigned long isr; -			unsigned long rsv3; -			unsigned long iip; -			unsigned long ifa; -			unsigned long itir; -			unsigned long iipa; -			unsigned long ifs; -			unsigned long iim; -			unsigned long iha; -			unsigned long rsv4[38]; -			unsigned long lid; -			unsigned long ivr; -			unsigned long tpr; -			unsigned long eoi; -			unsigned long irr[4]; -			unsigned long itv; -			unsigned long pmv; -			unsigned long cmcv; -			unsigned long rsv5[5]; -			unsigned long lrr0; -			unsigned long lrr1; -			unsigned long rsv6[46]; -		}; -	}; -}; - -struct kvm_regs { -	struct saved_vpd vpd; -	/*Arch-regs*/ -	int mp_state; -	unsigned long vmm_rr; -	/* TR and TC.  */ -	struct thash_data itrs[NITRS]; -	struct thash_data dtrs[NDTRS]; -	/* Bit is set if there is a tr/tc for the region.  */ -	unsigned char itr_regions; -	unsigned char dtr_regions; -	unsigned char tc_regions; - -	char irq_check; -	unsigned long saved_itc; -	unsigned long itc_check; -	unsigned long timer_check; -	unsigned long timer_pending; -	unsigned long last_itc; - -	unsigned long vrr[8]; -	unsigned long ibr[8]; -	unsigned long dbr[8]; -	unsigned long insvc[4];		/* Interrupt in service.  */ -	unsigned long xtp; - -	unsigned long metaphysical_rr0; /* from kvm_arch (so is pinned) */ -	unsigned long metaphysical_rr4;	/* from kvm_arch (so is pinned) */ -	unsigned long metaphysical_saved_rr0; /* from kvm_arch          */ -	unsigned long metaphysical_saved_rr4; /* from kvm_arch          */ -	unsigned long fp_psr;       /*used for lazy float register */ -	unsigned long saved_gp; -	/*for phycial  emulation */ - -	union context saved_guest; - -	unsigned long reserved[64];	/* for future use */ -}; - -struct kvm_sregs { -}; - -struct kvm_fpu { -}; - -#define KVM_IA64_VCPU_STACK_SHIFT	16 -#define KVM_IA64_VCPU_STACK_SIZE	(1UL << KVM_IA64_VCPU_STACK_SHIFT) - -struct kvm_ia64_vcpu_stack { -	unsigned char stack[KVM_IA64_VCPU_STACK_SIZE]; -}; - -struct kvm_debug_exit_arch { -}; - -/* for KVM_SET_GUEST_DEBUG */ -struct kvm_guest_debug_arch { -}; - -#endif diff --git a/arch/ia64/include/asm/kvm_host.h b/arch/ia64/include/asm/kvm_host.h index 2f229e5de49..db95f570705 100644 --- a/arch/ia64/include/asm/kvm_host.h +++ b/arch/ia64/include/asm/kvm_host.h @@ -23,11 +23,10 @@  #ifndef __ASM_KVM_HOST_H  #define __ASM_KVM_HOST_H -#define KVM_MEMORY_SLOTS 32 -/* memory slots that does not exposed to userspace */ -#define KVM_PRIVATE_MEM_SLOTS 4 +#define KVM_USER_MEM_SLOTS 32  #define KVM_COALESCED_MMIO_PAGE_OFFSET 1 +#define KVM_IRQCHIP_NUM_PINS  KVM_IOAPIC_NUM_PINS  /* define exit reasons from vmm to kvm*/  #define EXIT_REASON_VM_PANIC		0 @@ -235,10 +234,6 @@ struct kvm_vm_data {  #define KVM_REQ_PTC_G		32  #define KVM_REQ_RESUME		33 -#define KVM_HPAGE_GFN_SHIFT(x)	0 -#define KVM_NR_PAGE_SIZES	1 -#define KVM_PAGES_PER_HPAGE(x)	1 -  struct kvm;  struct kvm_vcpu; @@ -365,6 +360,7 @@ struct thash_cb {  };  struct kvm_vcpu_stat { +	u32 halt_wakeup;  };  struct kvm_vcpu_arch { @@ -448,6 +444,8 @@ struct kvm_vcpu_arch {  	char log_buf[VMM_LOG_LEN];  	union context host;  	union context guest; + +	char mmio_data[8];  };  struct kvm_vm_stat { @@ -459,6 +457,9 @@ struct kvm_sal_data {  	unsigned long boot_gp;  }; +struct kvm_arch_memory_slot { +}; +  struct kvm_arch {  	spinlock_t dirty_log_lock; @@ -475,7 +476,7 @@ struct kvm_arch {  	struct list_head assigned_dev_head;  	struct iommu_domain *iommu_domain; -	int iommu_flags; +	bool iommu_noncoherent;  	unsigned long irq_sources_bitmap;  	unsigned long irq_states[KVM_IOAPIC_NUM_PINS]; @@ -590,6 +591,10 @@ int kvm_emulate_halt(struct kvm_vcpu *vcpu);  int kvm_pal_emul(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run);  void kvm_sal_emul(struct kvm_vcpu *vcpu); +#define __KVM_HAVE_ARCH_VM_ALLOC 1 +struct kvm *kvm_arch_alloc_vm(void); +void kvm_arch_free_vm(struct kvm *kvm); +  #endif /* __ASSEMBLY__*/  #endif diff --git a/arch/ia64/include/asm/kvm_para.h b/arch/ia64/include/asm/kvm_para.h deleted file mode 100644 index 1588aee781a..00000000000 --- a/arch/ia64/include/asm/kvm_para.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef __IA64_KVM_PARA_H -#define __IA64_KVM_PARA_H - -/* - * Copyright (C) 2007 Xiantao Zhang <xiantao.zhang@intel.com> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - */ - -#ifdef __KERNEL__ - -static inline unsigned int kvm_arch_para_features(void) -{ -	return 0; -} - -#endif - -#endif diff --git a/arch/ia64/include/asm/linkage.h b/arch/ia64/include/asm/linkage.h index ef22a45c189..787575701f1 100644 --- a/arch/ia64/include/asm/linkage.h +++ b/arch/ia64/include/asm/linkage.h @@ -11,4 +11,8 @@  #endif +#define cond_syscall(x) asm(".weak\t" #x "#\n" #x "#\t=\tsys_ni_syscall#") +#define SYSCALL_ALIAS(alias, name)					\ +	asm ( #alias "# = " #name "#\n\t.globl " #alias "#") +  #endif diff --git a/arch/ia64/include/asm/machvec.h b/arch/ia64/include/asm/machvec.h index 367d299d993..9c39bdfc2da 100644 --- a/arch/ia64/include/asm/machvec.h +++ b/arch/ia64/include/asm/machvec.h @@ -113,14 +113,12 @@ extern void machvec_tlb_migrate_finish (struct mm_struct *);  #  include <asm/machvec_sn2.h>  # elif defined (CONFIG_IA64_SGI_UV)  #  include <asm/machvec_uv.h> -# elif defined (CONFIG_IA64_XEN_GUEST) -#  include <asm/machvec_xen.h>  # elif defined (CONFIG_IA64_GENERIC)  # ifdef MACHVEC_PLATFORM_HEADER  #  include MACHVEC_PLATFORM_HEADER  # else -#  define platform_name		ia64_mv.name +#  define ia64_platform_name	ia64_mv.name  #  define platform_setup	ia64_mv.setup  #  define platform_cpu_init	ia64_mv.cpu_init  #  define platform_irq_init	ia64_mv.irq_init diff --git a/arch/ia64/include/asm/machvec_dig.h b/arch/ia64/include/asm/machvec_dig.h index 8a0752f4098..1f7403a2fbe 100644 --- a/arch/ia64/include/asm/machvec_dig.h +++ b/arch/ia64/include/asm/machvec_dig.h @@ -10,7 +10,7 @@ extern ia64_mv_setup_t dig_setup;   * platform's machvec structure.  When compiling a non-generic kernel,   * the macros are used directly.   */ -#define platform_name		"dig" +#define ia64_platform_name	"dig"  #define platform_setup		dig_setup  #endif /* _ASM_IA64_MACHVEC_DIG_h */ diff --git a/arch/ia64/include/asm/machvec_dig_vtd.h b/arch/ia64/include/asm/machvec_dig_vtd.h index 6ab1de5c45e..44308b4c3f6 100644 --- a/arch/ia64/include/asm/machvec_dig_vtd.h +++ b/arch/ia64/include/asm/machvec_dig_vtd.h @@ -11,7 +11,7 @@ extern ia64_mv_dma_init			pci_iommu_alloc;   * platform's machvec structure.  When compiling a non-generic kernel,   * the macros are used directly.   */ -#define platform_name				"dig_vtd" +#define ia64_platform_name			"dig_vtd"  #define platform_setup				dig_setup  #define platform_dma_init			pci_iommu_alloc diff --git a/arch/ia64/include/asm/machvec_hpsim.h b/arch/ia64/include/asm/machvec_hpsim.h index cf72fc87fdf..e7571127936 100644 --- a/arch/ia64/include/asm/machvec_hpsim.h +++ b/arch/ia64/include/asm/machvec_hpsim.h @@ -11,7 +11,7 @@ extern ia64_mv_irq_init_t hpsim_irq_init;   * platform's machvec structure.  When compiling a non-generic kernel,   * the macros are used directly.   */ -#define platform_name		"hpsim" +#define ia64_platform_name	"hpsim"  #define platform_setup		hpsim_setup  #define platform_irq_init	hpsim_irq_init diff --git a/arch/ia64/include/asm/machvec_hpzx1.h b/arch/ia64/include/asm/machvec_hpzx1.h index 3bd83d78a41..c74d3159e9e 100644 --- a/arch/ia64/include/asm/machvec_hpzx1.h +++ b/arch/ia64/include/asm/machvec_hpzx1.h @@ -11,7 +11,7 @@ extern ia64_mv_dma_init			sba_dma_init;   * platform's machvec structure.  When compiling a non-generic kernel,   * the macros are used directly.   */ -#define platform_name				"hpzx1" +#define ia64_platform_name			"hpzx1"  #define platform_setup				dig_setup  #define platform_dma_init			sba_dma_init diff --git a/arch/ia64/include/asm/machvec_hpzx1_swiotlb.h b/arch/ia64/include/asm/machvec_hpzx1_swiotlb.h index 1091ac39740..906ef621077 100644 --- a/arch/ia64/include/asm/machvec_hpzx1_swiotlb.h +++ b/arch/ia64/include/asm/machvec_hpzx1_swiotlb.h @@ -11,7 +11,7 @@ extern ia64_mv_dma_get_ops			hwsw_dma_get_ops;   * platform's machvec structure.  When compiling a non-generic kernel,   * the macros are used directly.   */ -#define platform_name				"hpzx1_swiotlb" +#define ia64_platform_name			"hpzx1_swiotlb"  #define platform_setup				dig_setup  #define platform_dma_init			machvec_noop  #define platform_dma_get_ops			hwsw_dma_get_ops diff --git a/arch/ia64/include/asm/machvec_sn2.h b/arch/ia64/include/asm/machvec_sn2.h index f061a30aac4..ece9fa85be8 100644 --- a/arch/ia64/include/asm/machvec_sn2.h +++ b/arch/ia64/include/asm/machvec_sn2.h @@ -71,7 +71,7 @@ extern ia64_mv_pci_fixup_bus_t		sn_pci_fixup_bus;   * platform's machvec structure.  When compiling a non-generic kernel,   * the macros are used directly.   */ -#define platform_name			"sn2" +#define ia64_platform_name		"sn2"  #define platform_setup			sn_setup  #define platform_cpu_init		sn_cpu_init  #define platform_irq_init		sn_irq_init diff --git a/arch/ia64/include/asm/machvec_uv.h b/arch/ia64/include/asm/machvec_uv.h index 2931447f381..2c50853f35a 100644 --- a/arch/ia64/include/asm/machvec_uv.h +++ b/arch/ia64/include/asm/machvec_uv.h @@ -20,7 +20,7 @@ extern ia64_mv_setup_t uv_setup;   * platform's machvec structure.  When compiling a non-generic kernel,   * the macros are used directly.   */ -#define platform_name			"uv" +#define ia64_platform_name		"uv"  #define platform_setup			uv_setup  #endif /* _ASM_IA64_MACHVEC_UV_H */ diff --git a/arch/ia64/include/asm/machvec_xen.h b/arch/ia64/include/asm/machvec_xen.h deleted file mode 100644 index 55f9228056c..00000000000 --- a/arch/ia64/include/asm/machvec_xen.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _ASM_IA64_MACHVEC_XEN_h -#define _ASM_IA64_MACHVEC_XEN_h - -extern ia64_mv_setup_t			dig_setup; -extern ia64_mv_cpu_init_t		xen_cpu_init; -extern ia64_mv_irq_init_t		xen_irq_init; -extern ia64_mv_send_ipi_t		xen_platform_send_ipi; - -/* - * This stuff has dual use! - * - * For a generic kernel, the macros are used to initialize the - * platform's machvec structure.  When compiling a non-generic kernel, - * the macros are used directly. - */ -#define platform_name				"xen" -#define platform_setup				dig_setup -#define platform_cpu_init			xen_cpu_init -#define platform_irq_init			xen_irq_init -#define platform_send_ipi			xen_platform_send_ipi - -#endif /* _ASM_IA64_MACHVEC_XEN_h */ diff --git a/arch/ia64/include/asm/mca.h b/arch/ia64/include/asm/mca.h index 43f96ab18fa..8c709616871 100644 --- a/arch/ia64/include/asm/mca.h +++ b/arch/ia64/include/asm/mca.h @@ -143,6 +143,7 @@ extern unsigned long __per_cpu_mca[NR_CPUS];  extern int cpe_vector;  extern int ia64_cpe_irq;  extern void ia64_mca_init(void); +extern void ia64_mca_irq_init(void);  extern void ia64_mca_cpu_init(void *);  extern void ia64_os_mca_dispatch(void);  extern void ia64_os_mca_dispatch_end(void); diff --git a/arch/ia64/include/asm/mca_asm.h b/arch/ia64/include/asm/mca_asm.h index dd2a5b13439..13c1d4994d4 100644 --- a/arch/ia64/include/asm/mca_asm.h +++ b/arch/ia64/include/asm/mca_asm.h @@ -15,6 +15,8 @@  #ifndef _ASM_IA64_MCA_ASM_H  #define _ASM_IA64_MCA_ASM_H +#include <asm/percpu.h> +  #define PSR_IC		13  #define PSR_I		14  #define	PSR_DT		17 diff --git a/arch/ia64/include/asm/meminit.h b/arch/ia64/include/asm/meminit.h index 61c7b1750b1..092f1c91b36 100644 --- a/arch/ia64/include/asm/meminit.h +++ b/arch/ia64/include/asm/meminit.h @@ -18,7 +18,6 @@   * 	- crash dumping code reserved region   * 	- Kernel memory map built from EFI memory map   * 	- ELF core header - *	- xen start info if CONFIG_XEN   *   * More could be added if necessary   */ diff --git a/arch/ia64/include/asm/mman.h b/arch/ia64/include/asm/mman.h index 4459028e5aa..fdd5f5229f7 100644 --- a/arch/ia64/include/asm/mman.h +++ b/arch/ia64/include/asm/mman.h @@ -1,23 +1,17 @@ -#ifndef _ASM_IA64_MMAN_H -#define _ASM_IA64_MMAN_H -  /*   * Based on <asm-i386/mman.h>.   *   * Modified 1998-2000, 2002   *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co   */ +#ifndef _ASM_IA64_MMAN_H +#define _ASM_IA64_MMAN_H -#include <asm-generic/mman.h> - -#define MAP_GROWSUP	0x0200		/* register stack-like segment */ +#include <uapi/asm/mman.h> -#ifdef __KERNEL__  #ifndef __ASSEMBLY__  #define arch_mmap_check	ia64_mmap_check  int ia64_mmap_check(unsigned long addr, unsigned long len,  		unsigned long flags);  #endif -#endif -  #endif /* _ASM_IA64_MMAN_H */ diff --git a/arch/ia64/include/asm/module.h b/arch/ia64/include/asm/module.h index 908eaef42a0..dfba22a872c 100644 --- a/arch/ia64/include/asm/module.h +++ b/arch/ia64/include/asm/module.h @@ -1,6 +1,8 @@  #ifndef _ASM_IA64_MODULE_H  #define _ASM_IA64_MODULE_H +#include <asm-generic/module.h> +  /*   * IA-64-specific support for kernel module loader.   * @@ -29,10 +31,6 @@ struct mod_arch_specific {  	unsigned int next_got_entry;	/* index of next available got entry */  }; -#define Elf_Shdr	Elf64_Shdr -#define Elf_Sym		Elf64_Sym -#define Elf_Ehdr	Elf64_Ehdr -  #define MODULE_PROC_FAMILY	"ia64"  #define MODULE_ARCH_VERMAGIC	MODULE_PROC_FAMILY \  	"gcc-" __stringify(__GNUC__) "." __stringify(__GNUC_MINOR__) diff --git a/arch/ia64/include/asm/msgbuf.h b/arch/ia64/include/asm/msgbuf.h deleted file mode 100644 index 6c64c0d2aae..00000000000 --- a/arch/ia64/include/asm/msgbuf.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef _ASM_IA64_MSGBUF_H -#define _ASM_IA64_MSGBUF_H - -/* - * The msqid64_ds structure for IA-64 architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 2 miscellaneous 64-bit values - */ - -struct msqid64_ds { -	struct ipc64_perm msg_perm; -	__kernel_time_t msg_stime;	/* last msgsnd time */ -	__kernel_time_t msg_rtime;	/* last msgrcv time */ -	__kernel_time_t msg_ctime;	/* last change time */ -	unsigned long  msg_cbytes;	/* current number of bytes on queue */ -	unsigned long  msg_qnum;	/* number of messages in queue */ -	unsigned long  msg_qbytes;	/* max number of bytes on queue */ -	__kernel_pid_t msg_lspid;	/* pid of last msgsnd */ -	__kernel_pid_t msg_lrpid;	/* last receive pid */ -	unsigned long  __unused1; -	unsigned long  __unused2; -}; - -#endif /* _ASM_IA64_MSGBUF_H */ diff --git a/arch/ia64/include/asm/mutex.h b/arch/ia64/include/asm/mutex.h index bed73a643a5..f41e66d65e3 100644 --- a/arch/ia64/include/asm/mutex.h +++ b/arch/ia64/include/asm/mutex.h @@ -29,17 +29,15 @@ __mutex_fastpath_lock(atomic_t *count, void (*fail_fn)(atomic_t *))   *  __mutex_fastpath_lock_retval - try to take the lock by moving the count   *                                 from 1 to a 0 value   *  @count: pointer of type atomic_t - *  @fail_fn: function to call if the original value was not 1   * - * Change the count from 1 to a value lower than 1, and call <fail_fn> if - * it wasn't 1 originally. This function returns 0 if the fastpath succeeds, - * or anything the slow path function returns. + * Change the count from 1 to a value lower than 1. This function returns 0 + * if the fastpath succeeds, or -1 otherwise.   */  static inline int -__mutex_fastpath_lock_retval(atomic_t *count, int (*fail_fn)(atomic_t *)) +__mutex_fastpath_lock_retval(atomic_t *count)  {  	if (unlikely(ia64_fetchadd4_acq(count, -1) != 1)) -		return fail_fn(count); +		return -1;  	return 0;  } diff --git a/arch/ia64/include/asm/numa.h b/arch/ia64/include/asm/numa.h index 6a8a27cfae3..2db0a6c6daa 100644 --- a/arch/ia64/include/asm/numa.h +++ b/arch/ia64/include/asm/numa.h @@ -59,7 +59,7 @@ extern struct node_cpuid_s node_cpuid[NR_CPUS];   */  extern u8 numa_slit[MAX_NUMNODES * MAX_NUMNODES]; -#define node_distance(from,to) (numa_slit[(from) * num_online_nodes() + (to)]) +#define node_distance(from,to) (numa_slit[(from) * MAX_NUMNODES + (to)])  extern int paddr_to_nid(unsigned long paddr); @@ -67,14 +67,13 @@ extern int paddr_to_nid(unsigned long paddr);  extern void map_cpu_to_node(int cpu, int nid);  extern void unmap_cpu_from_node(int cpu, int nid); - +extern void numa_clear_node(int cpu);  #else /* !CONFIG_NUMA */  #define map_cpu_to_node(cpu, nid)	do{}while(0)  #define unmap_cpu_from_node(cpu, nid)	do{}while(0) -  #define paddr_to_nid(addr)	0 - +#define numa_clear_node(cpu)	do { } while (0)  #endif /* CONFIG_NUMA */  #endif /* _ASM_IA64_NUMA_H */ diff --git a/arch/ia64/include/asm/page.h b/arch/ia64/include/asm/page.h index 41b6d31110f..f1e1b2e3cdb 100644 --- a/arch/ia64/include/asm/page.h +++ b/arch/ia64/include/asm/page.h @@ -189,6 +189,7 @@ get_order (unsigned long size)  # define pgprot_val(x)	((x).pgprot)  # define __pte(x)	((pte_t) { (x) } ) +# define __pmd(x)	((pmd_t) { (x) } )  # define __pgprot(x)	((pgprot_t) { (x) } )  #else /* !STRICT_MM_TYPECHECKS */ @@ -220,4 +221,14 @@ get_order (unsigned long size)  					 (((current->personality & READ_IMPLIES_EXEC) != 0)	\  					  ? VM_EXEC : 0)) +#define GATE_ADDR		RGN_BASE(RGN_GATE) + +/* + * 0xa000000000000000+2*PERCPU_PAGE_SIZE + * - 0xa000000000000000+3*PERCPU_PAGE_SIZE remain unmapped (guard page) + */ +#define KERNEL_START		 (GATE_ADDR+__IA64_UL_CONST(0x100000000)) +#define PERCPU_ADDR		(-PERCPU_PAGE_SIZE) +#define LOAD_OFFSET		(KERNEL_START - KERNEL_TR_PAGE_SIZE) +  #endif /* _ASM_IA64_PAGE_H */ diff --git a/arch/ia64/include/asm/pal.h b/arch/ia64/include/asm/pal.h index 6a292505b39..2e69284df8e 100644 --- a/arch/ia64/include/asm/pal.h +++ b/arch/ia64/include/asm/pal.h @@ -1669,7 +1669,7 @@ typedef union pal_vp_info_u {  } pal_vp_info_u_t;  /* - * Returns infomation about virtual processor features + * Returns information about virtual processor features   */  static inline s64  ia64_pal_vp_info (u64 feature_set, u64 vp_buffer, u64 *vp_info, u64 *vmm_id) diff --git a/arch/ia64/include/asm/param.h b/arch/ia64/include/asm/param.h index 0964c32c135..1295913d6a8 100644 --- a/arch/ia64/include/asm/param.h +++ b/arch/ia64/include/asm/param.h @@ -1,6 +1,3 @@ -#ifndef _ASM_IA64_PARAM_H -#define _ASM_IA64_PARAM_H -  /*   * Fundamental kernel parameters.   * @@ -9,25 +6,12 @@   * Modified 1998, 1999, 2002-2003   *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co   */ +#ifndef _ASM_IA64_PARAM_H +#define _ASM_IA64_PARAM_H -#define EXEC_PAGESIZE	65536 - -#ifndef NOGROUP -# define NOGROUP	(-1) -#endif - -#define MAXHOSTNAMELEN	64	/* max length of hostname */ +#include <uapi/asm/param.h> -#ifdef __KERNEL__  # define HZ		CONFIG_HZ  # define USER_HZ	HZ  # define CLOCKS_PER_SEC	HZ	/* frequency at which times() counts */ -#else -   /* -    * Technically, this is wrong, but some old apps still refer to it.  The proper way to -    * get the HZ value is via sysconf(_SC_CLK_TCK). -    */ -# define HZ 1024 -#endif -  #endif /* _ASM_IA64_PARAM_H */ diff --git a/arch/ia64/include/asm/paravirt.h b/arch/ia64/include/asm/paravirt.h index 2eb0a981a09..b53518a9802 100644 --- a/arch/ia64/include/asm/paravirt.h +++ b/arch/ia64/include/asm/paravirt.h @@ -75,7 +75,6 @@ void *paravirt_get_gate_section(void);  #ifdef CONFIG_PARAVIRT_GUEST  #define PARAVIRT_HYPERVISOR_TYPE_DEFAULT	0 -#define PARAVIRT_HYPERVISOR_TYPE_XEN		1  #ifndef __ASSEMBLY__ @@ -281,6 +280,10 @@ paravirt_init_missing_ticks_accounting(int cpu)  		pv_time_ops.init_missing_ticks_accounting(cpu);  } +struct static_key; +extern struct static_key paravirt_steal_enabled; +extern struct static_key paravirt_steal_rq_enabled; +  static inline int  paravirt_do_steal_accounting(unsigned long *new_itm)  { diff --git a/arch/ia64/include/asm/parport.h b/arch/ia64/include/asm/parport.h index 67e16adfcd2..638b4d271b9 100644 --- a/arch/ia64/include/asm/parport.h +++ b/arch/ia64/include/asm/parport.h @@ -9,10 +9,9 @@  #ifndef _ASM_IA64_PARPORT_H  #define _ASM_IA64_PARPORT_H 1 -static int __devinit parport_pc_find_isa_ports (int autoirq, int autodma); +static int parport_pc_find_isa_ports(int autoirq, int autodma); -static int __devinit -parport_pc_find_nonpci_ports (int autoirq, int autodma) +static int parport_pc_find_nonpci_ports(int autoirq, int autodma)  {  	return parport_pc_find_isa_ports(autoirq, autodma);  } diff --git a/arch/ia64/include/asm/pci.h b/arch/ia64/include/asm/pci.h index 73b5f785e70..52af5ed9f60 100644 --- a/arch/ia64/include/asm/pci.h +++ b/arch/ia64/include/asm/pci.h @@ -11,6 +11,14 @@  #include <asm/scatterlist.h>  #include <asm/hw_irq.h> +struct pci_vector_struct { +	__u16 segment;	/* PCI Segment number */ +	__u16 bus;	/* PCI Bus number */ +	__u32 pci_id;	/* ACPI split 16 bits device, 16 bits function (see section 6.1.1) */ +	__u8 pin;	/* PCI PIN (0 = A, 1 = B, 2 = C, 3 = D) */ +	__u32 irq;	/* IRQ assigned */ +}; +  /*   * Can be used to override the logic in pci_scan_bus for skipping already-configured bus   * numbers - to be used for buggy BIOSes or architectures with incomplete PCI setup by the @@ -42,18 +50,6 @@ struct pci_dev;  extern unsigned long ia64_max_iommu_merge_mask;  #define PCI_DMA_BUS_IS_PHYS	(ia64_max_iommu_merge_mask == ~0UL) -static inline void -pcibios_set_master (struct pci_dev *dev) -{ -	/* No special bus mastering setup handling */ -} - -static inline void -pcibios_penalize_isa_irq (int irq, int active) -{ -	/* We don't do dynamic PCI IRQ allocation */ -} -  #include <asm-generic/pci-dma-compat.h>  #ifdef CONFIG_PCI @@ -87,23 +83,21 @@ extern int pci_mmap_legacy_page_range(struct pci_bus *bus,  #define pci_legacy_read platform_pci_legacy_read  #define pci_legacy_write platform_pci_legacy_write -struct pci_window { -	struct resource resource; -	u64 offset; +struct iospace_resource { +	struct list_head list; +	struct resource res;  };  struct pci_controller { -	void *acpi_handle; +	struct acpi_device *companion;  	void *iommu;  	int segment; -	int node;		/* nearest node with memory or -1 for global allocation */ - -	unsigned int windows; -	struct pci_window *window; +	int node;		/* nearest node with memory or NUMA_NO_NODE for global allocation */  	void *platform_data;  }; +  #define PCI_CONTROLLER(busdev) ((struct pci_controller *) busdev->sysdata)  #define pci_domain_nr(busdev)    (PCI_CONTROLLER(busdev)->segment) @@ -114,12 +108,6 @@ static inline int pci_proc_domain(struct pci_bus *bus)  	return (pci_domain_nr(bus) != 0);  } -extern void pcibios_resource_to_bus(struct pci_dev *dev, -		struct pci_bus_region *region, struct resource *res); - -extern void pcibios_bus_to_resource(struct pci_dev *dev, -		struct resource *res, struct pci_bus_region *region); -  static inline struct resource *  pcibios_select_root(struct pci_dev *pdev, struct resource *res)  { @@ -139,7 +127,7 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)  	return channel ? isa_irq_to_vector(15) : isa_irq_to_vector(14);  } -#ifdef CONFIG_DMAR +#ifdef CONFIG_INTEL_IOMMU  extern void pci_iommu_alloc(void);  #endif  #endif /* _ASM_IA64_PCI_H */ diff --git a/arch/ia64/include/asm/perfmon.h b/arch/ia64/include/asm/perfmon.h index 7f3333dd00e..15476dd3a8b 100644 --- a/arch/ia64/include/asm/perfmon.h +++ b/arch/ia64/include/asm/perfmon.h @@ -2,179 +2,12 @@   * Copyright (C) 2001-2003 Hewlett-Packard Co   *               Stephane Eranian <eranian@hpl.hp.com>   */ -  #ifndef _ASM_IA64_PERFMON_H  #define _ASM_IA64_PERFMON_H -/* - * perfmon comamnds supported on all CPU models - */ -#define PFM_WRITE_PMCS		0x01 -#define PFM_WRITE_PMDS		0x02 -#define PFM_READ_PMDS		0x03 -#define PFM_STOP		0x04 -#define PFM_START		0x05 -#define PFM_ENABLE		0x06 /* obsolete */ -#define PFM_DISABLE		0x07 /* obsolete */ -#define PFM_CREATE_CONTEXT	0x08 -#define PFM_DESTROY_CONTEXT	0x09 /* obsolete use close() */ -#define PFM_RESTART		0x0a -#define PFM_PROTECT_CONTEXT	0x0b /* obsolete */ -#define PFM_GET_FEATURES	0x0c -#define PFM_DEBUG		0x0d -#define PFM_UNPROTECT_CONTEXT	0x0e /* obsolete */ -#define PFM_GET_PMC_RESET_VAL	0x0f -#define PFM_LOAD_CONTEXT	0x10 -#define PFM_UNLOAD_CONTEXT	0x11 - -/* - * PMU model specific commands (may not be supported on all PMU models) - */ -#define PFM_WRITE_IBRS		0x20 -#define PFM_WRITE_DBRS		0x21 - -/* - * context flags - */ -#define PFM_FL_NOTIFY_BLOCK    	 0x01	/* block task on user level notifications */ -#define PFM_FL_SYSTEM_WIDE	 0x02	/* create a system wide context */ -#define PFM_FL_OVFL_NO_MSG	 0x80   /* do not post overflow/end messages for notification */ - -/* - * event set flags - */ -#define PFM_SETFL_EXCL_IDLE      0x01   /* exclude idle task (syswide only) XXX: DO NOT USE YET */ - -/* - * PMC flags - */ -#define PFM_REGFL_OVFL_NOTIFY	0x1	/* send notification on overflow */ -#define PFM_REGFL_RANDOM	0x2	/* randomize sampling interval   */ - -/* - * PMD/PMC/IBR/DBR return flags (ignored on input) - * - * Those flags are used on output and must be checked in case EAGAIN is returned - * by any of the calls using a pfarg_reg_t or pfarg_dbreg_t structure. - */ -#define PFM_REG_RETFL_NOTAVAIL	(1UL<<31) /* set if register is implemented but not available */ -#define PFM_REG_RETFL_EINVAL	(1UL<<30) /* set if register entry is invalid */ -#define PFM_REG_RETFL_MASK	(PFM_REG_RETFL_NOTAVAIL|PFM_REG_RETFL_EINVAL) - -#define PFM_REG_HAS_ERROR(flag)	(((flag) & PFM_REG_RETFL_MASK) != 0) - -typedef unsigned char pfm_uuid_t[16];	/* custom sampling buffer identifier type */ - -/* - * Request structure used to define a context - */ -typedef struct { -	pfm_uuid_t     ctx_smpl_buf_id;	 /* which buffer format to use (if needed) */ -	unsigned long  ctx_flags;	 /* noblock/block */ -	unsigned short ctx_nextra_sets;	 /* number of extra event sets (you always get 1) */ -	unsigned short ctx_reserved1;	 /* for future use */ -	int	       ctx_fd;		 /* return arg: unique identification for context */ -	void	       *ctx_smpl_vaddr;	 /* return arg: virtual address of sampling buffer, is used */ -	unsigned long  ctx_reserved2[11];/* for future use */ -} pfarg_context_t; - -/* - * Request structure used to write/read a PMC or PMD - */ -typedef struct { -	unsigned int	reg_num;	   /* which register */ -	unsigned short	reg_set;	   /* event set for this register */ -	unsigned short	reg_reserved1;	   /* for future use */ - -	unsigned long	reg_value;	   /* initial pmc/pmd value */ -	unsigned long	reg_flags;	   /* input: pmc/pmd flags, return: reg error */ - -	unsigned long	reg_long_reset;	   /* reset after buffer overflow notification */ -	unsigned long	reg_short_reset;   /* reset after counter overflow */ - -	unsigned long	reg_reset_pmds[4]; /* which other counters to reset on overflow */ -	unsigned long	reg_random_seed;   /* seed value when randomization is used */ -	unsigned long	reg_random_mask;   /* bitmask used to limit random value */ -	unsigned long   reg_last_reset_val;/* return: PMD last reset value */ - -	unsigned long	reg_smpl_pmds[4];  /* which pmds are accessed when PMC overflows */ -	unsigned long	reg_smpl_eventid;  /* opaque sampling event identifier */ - -	unsigned long   reg_reserved2[3];   /* for future use */ -} pfarg_reg_t; - -typedef struct { -	unsigned int	dbreg_num;		/* which debug register */ -	unsigned short	dbreg_set;		/* event set for this register */ -	unsigned short	dbreg_reserved1;	/* for future use */ -	unsigned long	dbreg_value;		/* value for debug register */ -	unsigned long	dbreg_flags;		/* return: dbreg error */ -	unsigned long	dbreg_reserved2[1];	/* for future use */ -} pfarg_dbreg_t; - -typedef struct { -	unsigned int	ft_version;	/* perfmon: major [16-31], minor [0-15] */ -	unsigned int	ft_reserved;	/* reserved for future use */ -	unsigned long	reserved[4];	/* for future use */ -} pfarg_features_t; - -typedef struct { -	pid_t		load_pid;	   /* process to load the context into */ -	unsigned short	load_set;	   /* first event set to load */ -	unsigned short	load_reserved1;	   /* for future use */ -	unsigned long	load_reserved2[3]; /* for future use */ -} pfarg_load_t; - -typedef struct { -	int		msg_type;		/* generic message header */ -	int		msg_ctx_fd;		/* generic message header */ -	unsigned long	msg_ovfl_pmds[4];	/* which PMDs overflowed */ -	unsigned short  msg_active_set;		/* active set at the time of overflow */ -	unsigned short  msg_reserved1;		/* for future use */ -	unsigned int    msg_reserved2;		/* for future use */ -	unsigned long	msg_tstamp;		/* for perf tuning/debug */ -} pfm_ovfl_msg_t; - -typedef struct { -	int		msg_type;		/* generic message header */ -	int		msg_ctx_fd;		/* generic message header */ -	unsigned long	msg_tstamp;		/* for perf tuning */ -} pfm_end_msg_t; - -typedef struct { -	int		msg_type;		/* type of the message */ -	int		msg_ctx_fd;		/* unique identifier for the context */ -	unsigned long	msg_tstamp;		/* for perf tuning */ -} pfm_gen_msg_t; - -#define PFM_MSG_OVFL	1	/* an overflow happened */ -#define PFM_MSG_END	2	/* task to which context was attached ended */ - -typedef union { -	pfm_ovfl_msg_t	pfm_ovfl_msg; -	pfm_end_msg_t	pfm_end_msg; -	pfm_gen_msg_t	pfm_gen_msg; -} pfm_msg_t; - -/* - * Define the version numbers for both perfmon as a whole and the sampling buffer format. - */ -#define PFM_VERSION_MAJ		 2U -#define PFM_VERSION_MIN		 0U -#define PFM_VERSION		 (((PFM_VERSION_MAJ&0xffff)<<16)|(PFM_VERSION_MIN & 0xffff)) -#define PFM_VERSION_MAJOR(x)	 (((x)>>16) & 0xffff) -#define PFM_VERSION_MINOR(x)	 ((x) & 0xffff) +#include <uapi/asm/perfmon.h> -/* - * miscellaneous architected definitions - */ -#define PMU_FIRST_COUNTER	4	/* first counting monitor (PMC/PMD) */ -#define PMU_MAX_PMCS		256	/* maximum architected number of PMC registers */ -#define PMU_MAX_PMDS		256	/* maximum architected number of PMD registers */ - -#ifdef __KERNEL__ -  extern long perfmonctl(int fd, int cmd, void *arg, int narg);  typedef struct { @@ -274,6 +107,4 @@ typedef struct {  extern pfm_sysctl_t pfm_sysctl; -#endif /* __KERNEL__ */ -  #endif /* _ASM_IA64_PERFMON_H */ diff --git a/arch/ia64/include/asm/perfmon_default_smpl.h b/arch/ia64/include/asm/perfmon_default_smpl.h deleted file mode 100644 index 74724b24c2b..00000000000 --- a/arch/ia64/include/asm/perfmon_default_smpl.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2002-2003 Hewlett-Packard Co - *               Stephane Eranian <eranian@hpl.hp.com> - * - * This file implements the default sampling buffer format - * for Linux/ia64 perfmon subsystem. - */ -#ifndef __PERFMON_DEFAULT_SMPL_H__ -#define __PERFMON_DEFAULT_SMPL_H__ 1 - -#define PFM_DEFAULT_SMPL_UUID { \ -		0x4d, 0x72, 0xbe, 0xc0, 0x06, 0x64, 0x41, 0x43, 0x82, 0xb4, 0xd3, 0xfd, 0x27, 0x24, 0x3c, 0x97} - -/* - * format specific parameters (passed at context creation) - */ -typedef struct { -	unsigned long buf_size;		/* size of the buffer in bytes */ -	unsigned int  flags;		/* buffer specific flags */ -	unsigned int  res1;		/* for future use */ -	unsigned long reserved[2];	/* for future use */ -} pfm_default_smpl_arg_t; - -/* - * combined context+format specific structure. Can be passed - * to PFM_CONTEXT_CREATE - */ -typedef struct { -	pfarg_context_t		ctx_arg; -	pfm_default_smpl_arg_t	buf_arg; -} pfm_default_smpl_ctx_arg_t; - -/* - * This header is at the beginning of the sampling buffer returned to the user. - * It is directly followed by the first record. - */ -typedef struct { -	unsigned long	hdr_count;		/* how many valid entries */ -	unsigned long	hdr_cur_offs;		/* current offset from top of buffer */ -	unsigned long	hdr_reserved2;		/* reserved for future use */ - -	unsigned long	hdr_overflows;		/* how many times the buffer overflowed */ -	unsigned long   hdr_buf_size;		/* how many bytes in the buffer */ - -	unsigned int	hdr_version;		/* contains perfmon version (smpl format diffs) */ -	unsigned int	hdr_reserved1;		/* for future use */ -	unsigned long	hdr_reserved[10];	/* for future use */ -} pfm_default_smpl_hdr_t; - -/* - * Entry header in the sampling buffer.  The header is directly followed - * with the values of the PMD registers of interest saved in increasing  - * index order: PMD4, PMD5, and so on. How many PMDs are present depends  - * on how the session was programmed. - * - * In the case where multiple counters overflow at the same time, multiple - * entries are written consecutively. - * - * last_reset_value member indicates the initial value of the overflowed PMD.  - */ -typedef struct { -        int             pid;                    /* thread id (for NPTL, this is gettid()) */ -        unsigned char   reserved1[3];           /* reserved for future use */ -        unsigned char   ovfl_pmd;               /* index of overflowed PMD */ - -        unsigned long   last_reset_val;         /* initial value of overflowed PMD */ -        unsigned long   ip;                     /* where did the overflow interrupt happened  */ -        unsigned long   tstamp;                 /* ar.itc when entering perfmon intr. handler */ - -        unsigned short  cpu;                    /* cpu on which the overflow occured */ -        unsigned short  set;                    /* event set active when overflow ocurred   */ -        int    		tgid;              	/* thread group id (for NPTL, this is getpid()) */ -} pfm_default_smpl_entry_t; - -#define PFM_DEFAULT_MAX_PMDS		64 /* how many pmds supported by data structures (sizeof(unsigned long) */ -#define PFM_DEFAULT_MAX_ENTRY_SIZE	(sizeof(pfm_default_smpl_entry_t)+(sizeof(unsigned long)*PFM_DEFAULT_MAX_PMDS)) -#define PFM_DEFAULT_SMPL_MIN_BUF_SIZE	(sizeof(pfm_default_smpl_hdr_t)+PFM_DEFAULT_MAX_ENTRY_SIZE) - -#define PFM_DEFAULT_SMPL_VERSION_MAJ	2U -#define PFM_DEFAULT_SMPL_VERSION_MIN	0U -#define PFM_DEFAULT_SMPL_VERSION	(((PFM_DEFAULT_SMPL_VERSION_MAJ&0xffff)<<16)|(PFM_DEFAULT_SMPL_VERSION_MIN & 0xffff)) - -#endif /* __PERFMON_DEFAULT_SMPL_H__ */ diff --git a/arch/ia64/include/asm/pgalloc.h b/arch/ia64/include/asm/pgalloc.h index 96a8d927db2..5767cdfc08d 100644 --- a/arch/ia64/include/asm/pgalloc.h +++ b/arch/ia64/include/asm/pgalloc.h @@ -91,7 +91,10 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr)  	if (!pg)  		return NULL;  	page = virt_to_page(pg); -	pgtable_page_ctor(page); +	if (!pgtable_page_ctor(page)) { +		quicklist_free(0, NULL, pg); +		return NULL; +	}  	return page;  } diff --git a/arch/ia64/include/asm/pgtable.h b/arch/ia64/include/asm/pgtable.h index 1a97af31ef1..7935115398a 100644 --- a/arch/ia64/include/asm/pgtable.h +++ b/arch/ia64/include/asm/pgtable.h @@ -16,7 +16,6 @@  #include <asm/mman.h>  #include <asm/page.h>  #include <asm/processor.h> -#include <asm/system.h>  #include <asm/types.h>  #define IA64_MAX_PHYS_BITS	50	/* max. number of physical address bits (architected) */ @@ -494,9 +493,6 @@ extern void paging_init (void);  #define pte_to_pgoff(pte)		((pte_val(pte) << 1) >> 3)  #define pgoff_to_pte(off)		((pte_t) { ((off) << 2) | _PAGE_FILE }) -#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)		\ -		remap_pfn_range(vma, vaddr, pfn, size, prot) -  /*   * ZERO_PAGE is a global shared page that is always zero: used   * for zero-mapped memory areas etc.. diff --git a/arch/ia64/include/asm/poll.h b/arch/ia64/include/asm/poll.h deleted file mode 100644 index c98509d3149..00000000000 --- a/arch/ia64/include/asm/poll.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/poll.h> diff --git a/arch/ia64/include/asm/posix_types.h b/arch/ia64/include/asm/posix_types.h deleted file mode 100644 index 17885567b73..00000000000 --- a/arch/ia64/include/asm/posix_types.h +++ /dev/null @@ -1,126 +0,0 @@ -#ifndef _ASM_IA64_POSIX_TYPES_H -#define _ASM_IA64_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. - * - * Based on <asm-alpha/posix_types.h>. - * - * Modified 1998-2000, 2003 - *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co - */ - -typedef unsigned long	__kernel_ino_t; -typedef unsigned int	__kernel_mode_t; -typedef unsigned int	__kernel_nlink_t; -typedef long		__kernel_off_t; -typedef long long	__kernel_loff_t; -typedef int		__kernel_pid_t; -typedef int		__kernel_ipc_pid_t; -typedef unsigned int	__kernel_uid_t; -typedef unsigned int	__kernel_gid_t; -typedef unsigned long	__kernel_size_t; -typedef long		__kernel_ssize_t; -typedef long		__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 long	__kernel_sigset_t;	/* at least 32 bits */ -typedef unsigned short	__kernel_uid16_t; -typedef unsigned short	__kernel_gid16_t; - -typedef struct { -	int	val[2]; -} __kernel_fsid_t; - -typedef __kernel_uid_t __kernel_old_uid_t; -typedef __kernel_gid_t __kernel_old_gid_t; -typedef __kernel_uid_t __kernel_uid32_t; -typedef __kernel_gid_t __kernel_gid32_t; - -typedef unsigned int	__kernel_old_dev_t; - -# ifdef __KERNEL__ - -#  ifndef __GNUC__ - -#define	__FD_SET(d, set)	((set)->fds_bits[__FDELT(d)] |= __FDMASK(d)) -#define	__FD_CLR(d, set)	((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d)) -#define	__FD_ISSET(d, set)	(((set)->fds_bits[__FDELT(d)] & __FDMASK(d)) != 0) -#define	__FD_ZERO(set)	\ -  ((void) memset ((void *) (set), 0, sizeof (__kernel_fd_set))) - -#  else /* !__GNUC__ */ - -/* With GNU C, use inline functions instead so args are evaluated only once: */ - -#undef __FD_SET -static __inline__ void __FD_SET(unsigned long fd, __kernel_fd_set *fdsetp) -{ -	unsigned long _tmp = fd / __NFDBITS; -	unsigned long _rem = fd % __NFDBITS; -	fdsetp->fds_bits[_tmp] |= (1UL<<_rem); -} - -#undef __FD_CLR -static __inline__ void __FD_CLR(unsigned long fd, __kernel_fd_set *fdsetp) -{ -	unsigned long _tmp = fd / __NFDBITS; -	unsigned long _rem = fd % __NFDBITS; -	fdsetp->fds_bits[_tmp] &= ~(1UL<<_rem); -} - -#undef __FD_ISSET -static __inline__ int __FD_ISSET(unsigned long fd, const __kernel_fd_set *p) -{  -	unsigned long _tmp = fd / __NFDBITS; -	unsigned long _rem = fd % __NFDBITS; -	return (p->fds_bits[_tmp] & (1UL<<_rem)) != 0; -} - -/* - * This will unroll the loop for the normal constant case (8 ints, - * for a 256-bit fd_set) - */ -#undef __FD_ZERO -static __inline__ void __FD_ZERO(__kernel_fd_set *p) -{ -	unsigned long *tmp = p->fds_bits; -	int i; - -	if (__builtin_constant_p(__FDSET_LONGS)) { -		switch (__FDSET_LONGS) { -		      case 16: -			tmp[ 0] = 0; tmp[ 1] = 0; tmp[ 2] = 0; tmp[ 3] = 0; -			tmp[ 4] = 0; tmp[ 5] = 0; tmp[ 6] = 0; tmp[ 7] = 0; -			tmp[ 8] = 0; tmp[ 9] = 0; tmp[10] = 0; tmp[11] = 0; -			tmp[12] = 0; tmp[13] = 0; tmp[14] = 0; tmp[15] = 0; -			return; - -		      case 8: -			tmp[ 0] = 0; tmp[ 1] = 0; tmp[ 2] = 0; tmp[ 3] = 0; -			tmp[ 4] = 0; tmp[ 5] = 0; tmp[ 6] = 0; tmp[ 7] = 0; -			return; - -		      case 4: -			tmp[ 0] = 0; tmp[ 1] = 0; tmp[ 2] = 0; tmp[ 3] = 0; -			return; -		} -	} -	i = __FDSET_LONGS; -	while (i) { -		i--; -		*tmp = 0; -		tmp++; -	} -} - -#  endif /* !__GNUC__ */ -# endif /* __KERNEL__ */ -#endif /* _ASM_IA64_POSIX_TYPES_H */ diff --git a/arch/ia64/include/asm/processor.h b/arch/ia64/include/asm/processor.h index 348e44d08ce..efd1b927ccb 100644 --- a/arch/ia64/include/asm/processor.h +++ b/arch/ia64/include/asm/processor.h @@ -19,6 +19,9 @@  #include <asm/ptrace.h>  #include <asm/ustack.h> +#define __ARCH_WANT_UNLOCKED_CTXSW +#define ARCH_HAS_PREFETCH_SWITCH_STACK +  #define IA64_NUM_PHYS_STACK_REG	96  #define IA64_NUM_DBG_REGS	8 @@ -31,8 +34,7 @@   * each (assuming 8KB page size), for a total of 8TB of user virtual   * address space.   */ -#define TASK_SIZE_OF(tsk)	((tsk)->thread.task_size) -#define TASK_SIZE       	TASK_SIZE_OF(current) +#define TASK_SIZE       	DEFAULT_TASK_SIZE  /*   * This decides where the kernel will search for a free chunk of vm @@ -69,13 +71,14 @@  #include <linux/compiler.h>  #include <linux/threads.h>  #include <linux/types.h> +#include <linux/bitops.h>  #include <asm/fpu.h>  #include <asm/page.h>  #include <asm/percpu.h>  #include <asm/rse.h>  #include <asm/unwind.h> -#include <asm/atomic.h> +#include <linux/atomic.h>  #ifdef CONFIG_NUMA  #include <asm/nodedata.h>  #endif @@ -277,7 +280,6 @@ struct thread_struct {  	__u8 pad[3];  	__u64 ksp;			/* kernel stack pointer */  	__u64 map_base;			/* base address for get_unmapped_area() */ -	__u64 task_size;		/* limit for task size */  	__u64 rbs_bot;			/* the base address for the RBS */  	int last_fph_cpu;		/* CPU that may hold the contents of f32-f127 */ @@ -300,7 +302,6 @@ struct thread_struct {  	.ksp =		0,					\  	.map_base =	DEFAULT_MAP_BASE,			\  	.rbs_bot =	STACK_TOP - DEFAULT_USER_STACK_SIZE,	\ -	.task_size =	DEFAULT_TASK_SIZE,			\  	.last_fph_cpu =  -1,					\  	INIT_THREAD_PM						\  	.dbr =		{0, },					\ @@ -309,7 +310,6 @@ struct thread_struct {  }  #define start_thread(regs,new_ip,new_sp) do {							\ -	set_fs(USER_DS);									\  	regs->cr_ipsr = ((regs->cr_ipsr | (IA64_PSR_BITS_TO_SET | IA64_PSR_CPL))		\  			 & ~(IA64_PSR_BITS_TO_CLEAR | IA64_PSR_RI | IA64_PSR_IS));		\  	regs->cr_iip = new_ip;									\ @@ -320,7 +320,7 @@ struct thread_struct {  	regs->loadrs = 0;									\  	regs->r8 = get_dumpable(current->mm);	/* set "don't zap registers" flag */		\  	regs->r12 = new_sp - 16;	/* allocate 16 byte scratch area */			\ -	if (unlikely(!get_dumpable(current->mm))) {							\ +	if (unlikely(get_dumpable(current->mm) != SUID_DUMP_USER)) {	\  		/*										\  		 * Zap scratch regs to avoid leaking bits between processes with different	\  		 * uid/privileges.								\ @@ -341,25 +341,6 @@ struct task_struct;   */  #define release_thread(dead_task) -/* Prepare to copy thread state - unlazy all lazy status */ -#define prepare_to_copy(tsk)	do { } while (0) - -/* - * This is the mechanism for creating a new kernel thread. - * - * NOTE 1: Only a kernel-only process (ie the swapper or direct - * descendants who haven't done an "execve()") should use this: it - * will work within a system call from a "real" process, but the - * process memory space will not be free'd until both the parent and - * the child have exited. - * - * NOTE 2: This MUST NOT be an inlined function.  Otherwise, we get - * into trouble in init/main.c when the child thread returns to - * do_basic_setup() and the timing is such that free_initmem() has - * been called already. - */ -extern pid_t kernel_thread (int (*fn)(void *), void *arg, unsigned long flags); -  /* Get wait channel for task P.  */  extern unsigned long get_wchan (struct task_struct *p); @@ -717,8 +698,13 @@ prefetchw (const void *x)  #define spin_lock_prefetch(x)	prefetchw(x)  extern unsigned long boot_option_idle_override; -extern unsigned long idle_halt; -extern unsigned long idle_nomwait; + +enum idle_boot_override {IDLE_NO_OVERRIDE=0, IDLE_HALT, IDLE_FORCE_MWAIT, +			 IDLE_NOMWAIT, IDLE_POLL}; + +void default_idle(void); + +#define ia64_platform_is(x) (strcmp(x, ia64_platform_name) == 0)  #endif /* !__ASSEMBLY__ */ diff --git a/arch/ia64/include/asm/ptrace.h b/arch/ia64/include/asm/ptrace.h index 7ae9c3f15a1..845143990a1 100644 --- a/arch/ia64/include/asm/ptrace.h +++ b/arch/ia64/include/asm/ptrace.h @@ -1,6 +1,3 @@ -#ifndef _ASM_IA64_PTRACE_H -#define _ASM_IA64_PTRACE_H -  /*   * Copyright (C) 1998-2004 Hewlett-Packard Co   *	David Mosberger-Tang <davidm@hpl.hp.com> @@ -15,52 +12,13 @@   *  6/17/99	D. Mosberger	added second unat member to "struct switch_stack"   *   */ -/* - * When a user process is blocked, its state looks as follows: - * - *            +----------------------+	-------	IA64_STK_OFFSET - *     	      |			     |	 ^ - *            | struct pt_regs       |	 | - *	      |			     |	 | - *            +----------------------+	 | - *	      |			     |	 | - *     	      |	   memory stack	     |	 | - *	      |	(growing downwards)  |	 | - *	      //.....................//	 | - *					 | - *	      //.....................//	 | - *	      |			     |	 | - *            +----------------------+	 | - *            | struct switch_stack  |	 | - *	      |			     |	 | - *	      +----------------------+	 | - *	      |			     |	 | - *	      //.....................//	 | - *					 | - *	      //.....................//	 | - *	      |			     |	 | - *	      |	 register stack	     |	 | - *	      |	(growing upwards)    |	 | - *            |			     |	 | - *	      +----------------------+	 |  ---	IA64_RBS_OFFSET - *            |  struct thread_info  |	 |  ^ - *	      +----------------------+	 |  | - *	      |			     |	 |  | - *            |  struct task_struct  |	 |  | - * current -> |			     |   |  | - *	      +----------------------+ ------- - * - * Note that ar.ec is not saved explicitly in pt_reg or switch_stack. - * This is because ar.ec is saved as part of ar.pfs. - */ - - -#include <asm/fpu.h> +#ifndef _ASM_IA64_PTRACE_H +#define _ASM_IA64_PTRACE_H -#ifdef __KERNEL__  #ifndef ASM_OFFSETS_C  #include <asm/asm-offsets.h>  #endif +#include <uapi/asm/ptrace.h>  /*   * Base-2 logarithm of number of pages to allocate per task structure @@ -81,155 +39,8 @@  #define KERNEL_STACK_SIZE		IA64_STK_OFFSET -#endif /* __KERNEL__ */ -  #ifndef __ASSEMBLY__ -/* - * This struct defines the way the registers are saved on system - * calls. - * - * We don't save all floating point register because the kernel - * is compiled to use only a very small subset, so the other are - * untouched. - * - * THIS STRUCTURE MUST BE A MULTIPLE 16-BYTE IN SIZE - * (because the memory stack pointer MUST ALWAYS be aligned this way) - * - */ -struct pt_regs { -	/* The following registers are saved by SAVE_MIN: */ -	unsigned long b6;		/* scratch */ -	unsigned long b7;		/* scratch */ - -	unsigned long ar_csd;           /* used by cmp8xchg16 (scratch) */ -	unsigned long ar_ssd;           /* reserved for future use (scratch) */ - -	unsigned long r8;		/* scratch (return value register 0) */ -	unsigned long r9;		/* scratch (return value register 1) */ -	unsigned long r10;		/* scratch (return value register 2) */ -	unsigned long r11;		/* scratch (return value register 3) */ - -	unsigned long cr_ipsr;		/* interrupted task's psr */ -	unsigned long cr_iip;		/* interrupted task's instruction pointer */ -	/* -	 * interrupted task's function state; if bit 63 is cleared, it -	 * contains syscall's ar.pfs.pfm: -	 */ -	unsigned long cr_ifs; - -	unsigned long ar_unat;		/* interrupted task's NaT register (preserved) */ -	unsigned long ar_pfs;		/* prev function state  */ -	unsigned long ar_rsc;		/* RSE configuration */ -	/* The following two are valid only if cr_ipsr.cpl > 0 || ti->flags & _TIF_MCA_INIT */ -	unsigned long ar_rnat;		/* RSE NaT */ -	unsigned long ar_bspstore;	/* RSE bspstore */ - -	unsigned long pr;		/* 64 predicate registers (1 bit each) */ -	unsigned long b0;		/* return pointer (bp) */ -	unsigned long loadrs;		/* size of dirty partition << 16 */ - -	unsigned long r1;		/* the gp pointer */ -	unsigned long r12;		/* interrupted task's memory stack pointer */ -	unsigned long r13;		/* thread pointer */ - -	unsigned long ar_fpsr;		/* floating point status (preserved) */ -	unsigned long r15;		/* scratch */ - -	/* The remaining registers are NOT saved for system calls.  */ - -	unsigned long r14;		/* scratch */ -	unsigned long r2;		/* scratch */ -	unsigned long r3;		/* scratch */ - -	/* The following registers are saved by SAVE_REST: */ -	unsigned long r16;		/* scratch */ -	unsigned long r17;		/* scratch */ -	unsigned long r18;		/* scratch */ -	unsigned long r19;		/* scratch */ -	unsigned long r20;		/* scratch */ -	unsigned long r21;		/* scratch */ -	unsigned long r22;		/* scratch */ -	unsigned long r23;		/* scratch */ -	unsigned long r24;		/* scratch */ -	unsigned long r25;		/* scratch */ -	unsigned long r26;		/* scratch */ -	unsigned long r27;		/* scratch */ -	unsigned long r28;		/* scratch */ -	unsigned long r29;		/* scratch */ -	unsigned long r30;		/* scratch */ -	unsigned long r31;		/* scratch */ - -	unsigned long ar_ccv;		/* compare/exchange value (scratch) */ - -	/* -	 * Floating point registers that the kernel considers scratch: -	 */ -	struct ia64_fpreg f6;		/* scratch */ -	struct ia64_fpreg f7;		/* scratch */ -	struct ia64_fpreg f8;		/* scratch */ -	struct ia64_fpreg f9;		/* scratch */ -	struct ia64_fpreg f10;		/* scratch */ -	struct ia64_fpreg f11;		/* scratch */ -}; - -/* - * This structure contains the addition registers that need to - * preserved across a context switch.  This generally consists of - * "preserved" registers. - */ -struct switch_stack { -	unsigned long caller_unat;	/* user NaT collection register (preserved) */ -	unsigned long ar_fpsr;		/* floating-point status register */ - -	struct ia64_fpreg f2;		/* preserved */ -	struct ia64_fpreg f3;		/* preserved */ -	struct ia64_fpreg f4;		/* preserved */ -	struct ia64_fpreg f5;		/* preserved */ - -	struct ia64_fpreg f12;		/* scratch, but untouched by kernel */ -	struct ia64_fpreg f13;		/* scratch, but untouched by kernel */ -	struct ia64_fpreg f14;		/* scratch, but untouched by kernel */ -	struct ia64_fpreg f15;		/* scratch, but untouched by kernel */ -	struct ia64_fpreg f16;		/* preserved */ -	struct ia64_fpreg f17;		/* preserved */ -	struct ia64_fpreg f18;		/* preserved */ -	struct ia64_fpreg f19;		/* preserved */ -	struct ia64_fpreg f20;		/* preserved */ -	struct ia64_fpreg f21;		/* preserved */ -	struct ia64_fpreg f22;		/* preserved */ -	struct ia64_fpreg f23;		/* preserved */ -	struct ia64_fpreg f24;		/* preserved */ -	struct ia64_fpreg f25;		/* preserved */ -	struct ia64_fpreg f26;		/* preserved */ -	struct ia64_fpreg f27;		/* preserved */ -	struct ia64_fpreg f28;		/* preserved */ -	struct ia64_fpreg f29;		/* preserved */ -	struct ia64_fpreg f30;		/* preserved */ -	struct ia64_fpreg f31;		/* preserved */ - -	unsigned long r4;		/* preserved */ -	unsigned long r5;		/* preserved */ -	unsigned long r6;		/* preserved */ -	unsigned long r7;		/* preserved */ - -	unsigned long b0;		/* so we can force a direct return in copy_thread */ -	unsigned long b1; -	unsigned long b2; -	unsigned long b3; -	unsigned long b4; -	unsigned long b5; - -	unsigned long ar_pfs;		/* previous function state */ -	unsigned long ar_lc;		/* loop counter (preserved) */ -	unsigned long ar_unat;		/* NaT bits for r4-r7 */ -	unsigned long ar_rnat;		/* RSE NaT collection register */ -	unsigned long ar_bspstore;	/* RSE dirty base (preserved) */ -	unsigned long pr;		/* 64 predicate registers (1 bit each) */ -}; - -#ifdef __KERNEL__ -  #include <asm/current.h>  #include <asm/page.h> @@ -246,7 +57,18 @@ static inline unsigned long user_stack_pointer(struct pt_regs *regs)  	return regs->ar_bspstore;  } -#define regs_return_value(regs) ((regs)->r8) +static inline int is_syscall_success(struct pt_regs *regs) +{ +	return regs->r10 != -1; +} + +static inline long regs_return_value(struct pt_regs *regs) +{ +	if (is_syscall_success(regs)) +		return regs->r8; +	else +		return -regs->r8; +}  /* Conserve space in histogram by encoding slot bits in address   * bits 2 and 3 rather than bits 0 and 1. @@ -256,6 +78,11 @@ static inline unsigned long user_stack_pointer(struct pt_regs *regs)  	unsigned long __ip = instruction_pointer(regs);			\  	(__ip & ~3UL) + ((__ip & 3UL) << 2);				\  }) +/* + * Why not default?  Because user_stack_pointer() on ia64 gives register + * stack backing store instead... + */ +#define current_user_stack_pointer() (current_pt_regs()->r12)    /* given a pointer to a task_struct, return the user's pt_regs */  # define task_pt_regs(t)		(((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1) @@ -286,7 +113,6 @@ static inline unsigned long user_stack_pointer(struct pt_regs *regs)    struct task_struct;			/* forward decl */    struct unw_frame_info;		/* forward decl */ -  extern void show_regs (struct pt_regs *);    extern void ia64_do_show_stack (struct unw_frame_info *, void *);    extern unsigned long ia64_get_user_rbs_end (struct task_struct *, struct pt_regs *,  					      unsigned long *); @@ -321,46 +147,5 @@ static inline unsigned long user_stack_pointer(struct pt_regs *regs)    #define arch_has_single_step()  (1)    #define arch_has_block_step()   (1) -#endif /* !__KERNEL__ */ - -/* pt_all_user_regs is used for PTRACE_GETREGS PTRACE_SETREGS */ -struct pt_all_user_regs { -	unsigned long nat; -	unsigned long cr_iip; -	unsigned long cfm; -	unsigned long cr_ipsr; -	unsigned long pr; - -	unsigned long gr[32]; -	unsigned long br[8]; -	unsigned long ar[128]; -	struct ia64_fpreg fr[128]; -}; -  #endif /* !__ASSEMBLY__ */ - -/* indices to application-registers array in pt_all_user_regs */ -#define PT_AUR_RSC	16 -#define PT_AUR_BSP	17 -#define PT_AUR_BSPSTORE	18 -#define PT_AUR_RNAT	19 -#define PT_AUR_CCV	32 -#define PT_AUR_UNAT	36 -#define PT_AUR_FPSR	40 -#define PT_AUR_PFS	64 -#define PT_AUR_LC	65 -#define PT_AUR_EC	66 - -/* - * The numbers chosen here are somewhat arbitrary but absolutely MUST - * not overlap with any of the number assigned in <linux/ptrace.h>. - */ -#define PTRACE_SINGLEBLOCK	12	/* resume execution until next branch */ -#define PTRACE_OLD_GETSIGINFO	13	/* (replaced by PTRACE_GETSIGINFO in <linux/ptrace.h>)  */ -#define PTRACE_OLD_SETSIGINFO	14	/* (replaced by PTRACE_SETSIGINFO in <linux/ptrace.h>)  */ -#define PTRACE_GETREGS		18	/* get all registers (pt_all_user_regs) in one shot */ -#define PTRACE_SETREGS		19	/* set all registers (pt_all_user_regs) in one shot */ - -#define PTRACE_OLDSETOPTIONS	21 -  #endif /* _ASM_IA64_PTRACE_H */ diff --git a/arch/ia64/include/asm/ptrace_offsets.h b/arch/ia64/include/asm/ptrace_offsets.h deleted file mode 100644 index b712773c759..00000000000 --- a/arch/ia64/include/asm/ptrace_offsets.h +++ /dev/null @@ -1,268 +0,0 @@ -#ifndef _ASM_IA64_PTRACE_OFFSETS_H -#define _ASM_IA64_PTRACE_OFFSETS_H - -/* - * Copyright (C) 1999, 2003 Hewlett-Packard Co - *	David Mosberger-Tang <davidm@hpl.hp.com> - */ -/* - * The "uarea" that can be accessed via PEEKUSER and POKEUSER is a - * virtual structure that would have the following definition: - * - *	struct uarea { - *		struct ia64_fpreg fph[96];		// f32-f127 - *		unsigned long nat_bits; - *		unsigned long empty1; - *		struct ia64_fpreg f2;			// f2-f5 - *			: - *		struct ia64_fpreg f5; - *		struct ia64_fpreg f10;			// f10-f31 - *			: - *		struct ia64_fpreg f31; - *		unsigned long r4;			// r4-r7 - *			: - *		unsigned long r7; - *		unsigned long b1;			// b1-b5 - *			: - *		unsigned long b5; - *		unsigned long ar_ec; - *		unsigned long ar_lc; - *		unsigned long empty2[5]; - *		unsigned long cr_ipsr; - *		unsigned long cr_iip; - *		unsigned long cfm; - *		unsigned long ar_unat; - *		unsigned long ar_pfs; - *		unsigned long ar_rsc; - *		unsigned long ar_rnat; - *		unsigned long ar_bspstore; - *		unsigned long pr; - *		unsigned long b6; - *		unsigned long ar_bsp; - *		unsigned long r1; - *		unsigned long r2; - *		unsigned long r3; - *		unsigned long r12; - *		unsigned long r13; - *		unsigned long r14; - *		unsigned long r15; - *		unsigned long r8; - *		unsigned long r9; - *		unsigned long r10; - *		unsigned long r11; - *		unsigned long r16; - *			: - *		unsigned long r31; - *		unsigned long ar_ccv; - *		unsigned long ar_fpsr; - *		unsigned long b0; - *		unsigned long b7; - *		unsigned long f6; - *		unsigned long f7; - *		unsigned long f8; - *		unsigned long f9; - *		unsigned long ar_csd; - *		unsigned long ar_ssd; - *		unsigned long rsvd1[710]; - *		unsigned long dbr[8]; - *		unsigned long rsvd2[504]; - *		unsigned long ibr[8]; - *		unsigned long rsvd3[504]; - *		unsigned long pmd[4]; - *	} - */ - -/* fph: */ -#define PT_F32			0x0000 -#define PT_F33			0x0010 -#define PT_F34			0x0020 -#define PT_F35			0x0030 -#define PT_F36			0x0040 -#define PT_F37			0x0050 -#define PT_F38			0x0060 -#define PT_F39			0x0070 -#define PT_F40			0x0080 -#define PT_F41			0x0090 -#define PT_F42			0x00a0 -#define PT_F43			0x00b0 -#define PT_F44			0x00c0 -#define PT_F45			0x00d0 -#define PT_F46			0x00e0 -#define PT_F47			0x00f0 -#define PT_F48			0x0100 -#define PT_F49			0x0110 -#define PT_F50			0x0120 -#define PT_F51			0x0130 -#define PT_F52			0x0140 -#define PT_F53			0x0150 -#define PT_F54			0x0160 -#define PT_F55			0x0170 -#define PT_F56			0x0180 -#define PT_F57			0x0190 -#define PT_F58			0x01a0 -#define PT_F59			0x01b0 -#define PT_F60			0x01c0 -#define PT_F61			0x01d0 -#define PT_F62			0x01e0 -#define PT_F63			0x01f0 -#define PT_F64			0x0200 -#define PT_F65			0x0210 -#define PT_F66			0x0220 -#define PT_F67			0x0230 -#define PT_F68			0x0240 -#define PT_F69			0x0250 -#define PT_F70			0x0260 -#define PT_F71			0x0270 -#define PT_F72			0x0280 -#define PT_F73			0x0290 -#define PT_F74			0x02a0 -#define PT_F75			0x02b0 -#define PT_F76			0x02c0 -#define PT_F77			0x02d0 -#define PT_F78			0x02e0 -#define PT_F79			0x02f0 -#define PT_F80			0x0300 -#define PT_F81			0x0310 -#define PT_F82			0x0320 -#define PT_F83			0x0330 -#define PT_F84			0x0340 -#define PT_F85			0x0350 -#define PT_F86			0x0360 -#define PT_F87			0x0370 -#define PT_F88			0x0380 -#define PT_F89			0x0390 -#define PT_F90			0x03a0 -#define PT_F91			0x03b0 -#define PT_F92			0x03c0 -#define PT_F93			0x03d0 -#define PT_F94			0x03e0 -#define PT_F95			0x03f0 -#define PT_F96			0x0400 -#define PT_F97			0x0410 -#define PT_F98			0x0420 -#define PT_F99			0x0430 -#define PT_F100			0x0440 -#define PT_F101			0x0450 -#define PT_F102			0x0460 -#define PT_F103			0x0470 -#define PT_F104			0x0480 -#define PT_F105			0x0490 -#define PT_F106			0x04a0 -#define PT_F107			0x04b0 -#define PT_F108			0x04c0 -#define PT_F109			0x04d0 -#define PT_F110			0x04e0 -#define PT_F111			0x04f0 -#define PT_F112			0x0500 -#define PT_F113			0x0510 -#define PT_F114			0x0520 -#define PT_F115			0x0530 -#define PT_F116			0x0540 -#define PT_F117			0x0550 -#define PT_F118			0x0560 -#define PT_F119			0x0570 -#define PT_F120			0x0580 -#define PT_F121			0x0590 -#define PT_F122			0x05a0 -#define PT_F123			0x05b0 -#define PT_F124			0x05c0 -#define PT_F125			0x05d0 -#define PT_F126			0x05e0 -#define PT_F127			0x05f0 - -#define PT_NAT_BITS		0x0600 - -#define PT_F2			0x0610 -#define PT_F3			0x0620 -#define PT_F4			0x0630 -#define PT_F5			0x0640 -#define PT_F10			0x0650 -#define PT_F11			0x0660 -#define PT_F12			0x0670 -#define PT_F13			0x0680 -#define PT_F14			0x0690 -#define PT_F15			0x06a0 -#define PT_F16			0x06b0 -#define PT_F17			0x06c0 -#define PT_F18			0x06d0 -#define PT_F19			0x06e0 -#define PT_F20			0x06f0 -#define PT_F21			0x0700 -#define PT_F22			0x0710 -#define PT_F23			0x0720 -#define PT_F24			0x0730 -#define PT_F25			0x0740 -#define PT_F26			0x0750 -#define PT_F27			0x0760 -#define PT_F28			0x0770 -#define PT_F29			0x0780 -#define PT_F30			0x0790 -#define PT_F31			0x07a0 -#define PT_R4			0x07b0 -#define PT_R5			0x07b8 -#define PT_R6			0x07c0 -#define PT_R7			0x07c8 - -#define PT_B1			0x07d8 -#define PT_B2			0x07e0 -#define PT_B3			0x07e8 -#define PT_B4			0x07f0 -#define PT_B5			0x07f8 - -#define PT_AR_EC		0x0800 -#define PT_AR_LC		0x0808 - -#define PT_CR_IPSR		0x0830 -#define PT_CR_IIP		0x0838 -#define PT_CFM			0x0840 -#define PT_AR_UNAT		0x0848 -#define PT_AR_PFS		0x0850 -#define PT_AR_RSC		0x0858 -#define PT_AR_RNAT		0x0860 -#define PT_AR_BSPSTORE		0x0868 -#define PT_PR			0x0870 -#define PT_B6			0x0878 -#define PT_AR_BSP		0x0880	/* note: this points to the *end* of the backing store! */ -#define PT_R1			0x0888 -#define PT_R2			0x0890 -#define PT_R3			0x0898 -#define PT_R12			0x08a0 -#define PT_R13			0x08a8 -#define PT_R14			0x08b0 -#define PT_R15			0x08b8 -#define PT_R8 			0x08c0 -#define PT_R9			0x08c8 -#define PT_R10			0x08d0 -#define PT_R11			0x08d8 -#define PT_R16			0x08e0 -#define PT_R17			0x08e8 -#define PT_R18			0x08f0 -#define PT_R19			0x08f8 -#define PT_R20			0x0900 -#define PT_R21			0x0908 -#define PT_R22			0x0910 -#define PT_R23			0x0918 -#define PT_R24			0x0920 -#define PT_R25			0x0928 -#define PT_R26			0x0930 -#define PT_R27			0x0938 -#define PT_R28			0x0940 -#define PT_R29			0x0948 -#define PT_R30			0x0950 -#define PT_R31			0x0958 -#define PT_AR_CCV		0x0960 -#define PT_AR_FPSR		0x0968 -#define PT_B0			0x0970 -#define PT_B7			0x0978 -#define PT_F6			0x0980 -#define PT_F7			0x0990 -#define PT_F8			0x09a0 -#define PT_F9			0x09b0 -#define PT_AR_CSD		0x09c0 -#define PT_AR_SSD		0x09c8 - -#define PT_DBR			0x2000	/* data breakpoint registers */ -#define PT_IBR			0x3000	/* instruction breakpoint registers */ -#define PT_PMD			0x4000	/* performance monitoring counters */ - -#endif /* _ASM_IA64_PTRACE_OFFSETS_H */ diff --git a/arch/ia64/include/asm/pvclock-abi.h b/arch/ia64/include/asm/pvclock-abi.h index 44ef9ef8f5b..42b233bedeb 100644 --- a/arch/ia64/include/asm/pvclock-abi.h +++ b/arch/ia64/include/asm/pvclock-abi.h @@ -11,7 +11,7 @@  /*   * These structs MUST NOT be changed.   * They are the ABI between hypervisor and guest OS. - * Both Xen and KVM are using this. + * KVM is using this.   *   * pvclock_vcpu_time_info holds the system time and the tsc timestamp   * of the last update. So the guest can use the tsc delta to get a diff --git a/arch/ia64/include/asm/resource.h b/arch/ia64/include/asm/resource.h deleted file mode 100644 index ba2272a87fc..00000000000 --- a/arch/ia64/include/asm/resource.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _ASM_IA64_RESOURCE_H -#define _ASM_IA64_RESOURCE_H - -#include <asm/ustack.h> -#include <asm-generic/resource.h> - -#endif /* _ASM_IA64_RESOURCE_H */ diff --git a/arch/ia64/include/asm/rse.h b/arch/ia64/include/asm/rse.h deleted file mode 100644 index 02830a3b019..00000000000 --- a/arch/ia64/include/asm/rse.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef _ASM_IA64_RSE_H -#define _ASM_IA64_RSE_H - -/* - * Copyright (C) 1998, 1999 Hewlett-Packard Co - * Copyright (C) 1998, 1999 David Mosberger-Tang <davidm@hpl.hp.com> - * - * Register stack engine related helper functions.  This file may be - * used in applications, so be careful about the name-space and give - * some consideration to non-GNU C compilers (though __inline__ is - * fine). - */ - -static __inline__ unsigned long -ia64_rse_slot_num (unsigned long *addr) -{ -	return (((unsigned long) addr) >> 3) & 0x3f; -} - -/* - * Return TRUE if ADDR is the address of an RNAT slot. - */ -static __inline__ unsigned long -ia64_rse_is_rnat_slot (unsigned long *addr) -{ -	return ia64_rse_slot_num(addr) == 0x3f; -} - -/* - * Returns the address of the RNAT slot that covers the slot at - * address SLOT_ADDR. - */ -static __inline__ unsigned long * -ia64_rse_rnat_addr (unsigned long *slot_addr) -{ -	return (unsigned long *) ((unsigned long) slot_addr | (0x3f << 3)); -} - -/* - * Calculate the number of registers in the dirty partition starting at BSPSTORE and - * ending at BSP.  This isn't simply (BSP-BSPSTORE)/8 because every 64th slot stores - * ar.rnat. - */ -static __inline__ unsigned long -ia64_rse_num_regs (unsigned long *bspstore, unsigned long *bsp) -{ -	unsigned long slots = (bsp - bspstore); - -	return slots - (ia64_rse_slot_num(bspstore) + slots)/0x40; -} - -/* - * The inverse of the above: given bspstore and the number of - * registers, calculate ar.bsp. - */ -static __inline__ unsigned long * -ia64_rse_skip_regs (unsigned long *addr, long num_regs) -{ -	long delta = ia64_rse_slot_num(addr) + num_regs; - -	if (num_regs < 0) -		delta -= 0x3e; -	return addr + num_regs + delta/0x3f; -} - -#endif /* _ASM_IA64_RSE_H */ diff --git a/arch/ia64/include/asm/rwsem.h b/arch/ia64/include/asm/rwsem.h index 215d5454c7d..3027e7516d8 100644 --- a/arch/ia64/include/asm/rwsem.h +++ b/arch/ia64/include/asm/rwsem.h @@ -25,20 +25,8 @@  #error "Please don't include <asm/rwsem.h> directly, use <linux/rwsem.h> instead."  #endif -#include <linux/list.h> -#include <linux/spinlock.h> -  #include <asm/intrinsics.h> -/* - * the semaphore definition - */ -struct rw_semaphore { -	signed long		count; -	spinlock_t		wait_lock; -	struct list_head	wait_list; -}; -  #define RWSEM_UNLOCKED_VALUE		__IA64_UL_CONST(0x0000000000000000)  #define RWSEM_ACTIVE_BIAS		(1L)  #define RWSEM_ACTIVE_MASK		(0xffffffffL) @@ -46,26 +34,6 @@ struct rw_semaphore {  #define RWSEM_ACTIVE_READ_BIAS		RWSEM_ACTIVE_BIAS  #define RWSEM_ACTIVE_WRITE_BIAS		(RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS) -#define __RWSEM_INITIALIZER(name) \ -	{ RWSEM_UNLOCKED_VALUE, __SPIN_LOCK_UNLOCKED((name).wait_lock), \ -	  LIST_HEAD_INIT((name).wait_list) } - -#define DECLARE_RWSEM(name) \ -	struct rw_semaphore name = __RWSEM_INITIALIZER(name) - -extern struct rw_semaphore *rwsem_down_read_failed(struct rw_semaphore *sem); -extern struct rw_semaphore *rwsem_down_write_failed(struct rw_semaphore *sem); -extern struct rw_semaphore *rwsem_wake(struct rw_semaphore *sem); -extern struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem); - -static inline void -init_rwsem (struct rw_semaphore *sem) -{ -	sem->count = RWSEM_UNLOCKED_VALUE; -	spin_lock_init(&sem->wait_lock); -	INIT_LIST_HEAD(&sem->wait_list); -} -  /*   * lock for reading   */ @@ -174,9 +142,4 @@ __downgrade_write (struct rw_semaphore *sem)  #define rwsem_atomic_add(delta, sem)	atomic64_add(delta, (atomic64_t *)(&(sem)->count))  #define rwsem_atomic_update(delta, sem)	atomic64_add_return(delta, (atomic64_t *)(&(sem)->count)) -static inline int rwsem_is_locked(struct rw_semaphore *sem) -{ -	return (sem->count != 0); -} -  #endif /* _ASM_IA64_RWSEM_H */ diff --git a/arch/ia64/include/asm/sal.h b/arch/ia64/include/asm/sal.h index d19ddba4e32..e504f382115 100644 --- a/arch/ia64/include/asm/sal.h +++ b/arch/ia64/include/asm/sal.h @@ -40,7 +40,6 @@  #include <linux/efi.h>  #include <asm/pal.h> -#include <asm/system.h>  #include <asm/fpu.h>  extern spinlock_t sal_lock; diff --git a/arch/ia64/include/asm/sembuf.h b/arch/ia64/include/asm/sembuf.h deleted file mode 100644 index 1340fbc04d3..00000000000 --- a/arch/ia64/include/asm/sembuf.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _ASM_IA64_SEMBUF_H -#define _ASM_IA64_SEMBUF_H - -/* - * The semid64_ds structure for IA-64 architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 2 miscellaneous 64-bit values - */ - -struct semid64_ds { -	struct ipc64_perm sem_perm;		/* permissions .. see ipc.h */ -	__kernel_time_t	sem_otime;		/* last semop time */ -	__kernel_time_t	sem_ctime;		/* last change time */ -	unsigned long	sem_nsems;		/* no. of semaphores in array */ -	unsigned long	__unused1; -	unsigned long	__unused2; -}; - -#endif /* _ASM_IA64_SEMBUF_H */ diff --git a/arch/ia64/include/asm/setup.h b/arch/ia64/include/asm/setup.h deleted file mode 100644 index 4399a44355b..00000000000 --- a/arch/ia64/include/asm/setup.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __IA64_SETUP_H -#define __IA64_SETUP_H - -#define COMMAND_LINE_SIZE	2048 - -#endif diff --git a/arch/ia64/include/asm/shmbuf.h b/arch/ia64/include/asm/shmbuf.h deleted file mode 100644 index 585002a77ac..00000000000 --- a/arch/ia64/include/asm/shmbuf.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef _ASM_IA64_SHMBUF_H -#define _ASM_IA64_SHMBUF_H - -/* - * The shmid64_ds structure for IA-64 architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 2 miscellaneous 64-bit values - */ - -struct shmid64_ds { -	struct ipc64_perm	shm_perm;	/* operation perms */ -	size_t			shm_segsz;	/* size of segment (bytes) */ -	__kernel_time_t		shm_atime;	/* last attach time */ -	__kernel_time_t		shm_dtime;	/* last detach time */ -	__kernel_time_t		shm_ctime;	/* last change time */ -	__kernel_pid_t		shm_cpid;	/* pid of creator */ -	__kernel_pid_t		shm_lpid;	/* pid of last operator */ -	unsigned long		shm_nattch;	/* no. of current attaches */ -	unsigned long		__unused1; -	unsigned long		__unused2; -}; - -struct shminfo64 { -	unsigned long	shmmax; -	unsigned long	shmmin; -	unsigned long	shmmni; -	unsigned long	shmseg; -	unsigned long	shmall; -	unsigned long	__unused1; -	unsigned long	__unused2; -	unsigned long	__unused3; -	unsigned long	__unused4; -}; - -#endif /* _ASM_IA64_SHMBUF_H */ diff --git a/arch/ia64/include/asm/sigcontext.h b/arch/ia64/include/asm/sigcontext.h deleted file mode 100644 index 57ff777bcc4..00000000000 --- a/arch/ia64/include/asm/sigcontext.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef _ASM_IA64_SIGCONTEXT_H -#define _ASM_IA64_SIGCONTEXT_H - -/* - * Copyright (C) 1998, 1999, 2001 Hewlett-Packard Co - * Copyright (C) 1998, 1999, 2001 David Mosberger-Tang <davidm@hpl.hp.com> - */ - -#include <asm/fpu.h> - -#define IA64_SC_FLAG_ONSTACK_BIT		0	/* is handler running on signal stack? */ -#define IA64_SC_FLAG_IN_SYSCALL_BIT		1	/* did signal interrupt a syscall? */ -#define IA64_SC_FLAG_FPH_VALID_BIT		2	/* is state in f[32]-f[127] valid? */ - -#define IA64_SC_FLAG_ONSTACK		(1 << IA64_SC_FLAG_ONSTACK_BIT) -#define IA64_SC_FLAG_IN_SYSCALL		(1 << IA64_SC_FLAG_IN_SYSCALL_BIT) -#define IA64_SC_FLAG_FPH_VALID		(1 << IA64_SC_FLAG_FPH_VALID_BIT) - -# ifndef __ASSEMBLY__ - -/* - * Note on handling of register backing store: sc_ar_bsp contains the address that would - * be found in ar.bsp after executing a "cover" instruction the context in which the - * signal was raised.  If signal delivery required switching to an alternate signal stack - * (sc_rbs_base is not NULL), the "dirty" partition (as it would exist after executing the - * imaginary "cover" instruction) is backed by the *alternate* signal stack, not the - * original one.  In this case, sc_rbs_base contains the base address of the new register - * backing store.  The number of registers in the dirty partition can be calculated as: - * - *   ndirty = ia64_rse_num_regs(sc_rbs_base, sc_rbs_base + (sc_loadrs >> 16)) - * - */ - -struct sigcontext { -	unsigned long		sc_flags;	/* see manifest constants above */ -	unsigned long		sc_nat;		/* bit i == 1 iff scratch reg gr[i] is a NaT */ -	stack_t			sc_stack;	/* previously active stack */ - -	unsigned long		sc_ip;		/* instruction pointer */ -	unsigned long		sc_cfm;		/* current frame marker */ -	unsigned long		sc_um;		/* user mask bits */ -	unsigned long		sc_ar_rsc;	/* register stack configuration register */ -	unsigned long		sc_ar_bsp;	/* backing store pointer */ -	unsigned long		sc_ar_rnat;	/* RSE NaT collection register */ -	unsigned long		sc_ar_ccv;	/* compare and exchange compare value register */ -	unsigned long		sc_ar_unat;	/* ar.unat of interrupted context */ -	unsigned long		sc_ar_fpsr;	/* floating-point status register */ -	unsigned long		sc_ar_pfs;	/* previous function state */ -	unsigned long		sc_ar_lc;	/* loop count register */ -	unsigned long		sc_pr;		/* predicate registers */ -	unsigned long		sc_br[8];	/* branch registers */ -	/* Note: sc_gr[0] is used as the "uc_link" member of ucontext_t */ -	unsigned long		sc_gr[32];	/* general registers (static partition) */ -	struct ia64_fpreg	sc_fr[128];	/* floating-point registers */ - -	unsigned long		sc_rbs_base;	/* NULL or new base of sighandler's rbs */ -	unsigned long		sc_loadrs;	/* see description above */ - -	unsigned long		sc_ar25;	/* cmp8xchg16 uses this */ -	unsigned long		sc_ar26;	/* rsvd for scratch use */ -	unsigned long		sc_rsvd[12];	/* reserved for future use */ -	/* -	 * The mask must come last so we can increase _NSIG_WORDS -	 * without breaking binary compatibility. -	 */ -	sigset_t		sc_mask;	/* signal mask to restore after handler returns */ -}; - -# endif /* __ASSEMBLY__ */ -#endif /* _ASM_IA64_SIGCONTEXT_H */ diff --git a/arch/ia64/include/asm/siginfo.h b/arch/ia64/include/asm/siginfo.h index c8fcaa2ac48..6f2e2dd0f28 100644 --- a/arch/ia64/include/asm/siginfo.h +++ b/arch/ia64/include/asm/siginfo.h @@ -1,124 +1,14 @@ -#ifndef _ASM_IA64_SIGINFO_H -#define _ASM_IA64_SIGINFO_H -  /*   * Based on <asm-i386/siginfo.h>.   *   * Modified 1998-2002   *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co   */ +#ifndef _ASM_IA64_SIGINFO_H +#define _ASM_IA64_SIGINFO_H -#define __ARCH_SI_PREAMBLE_SIZE	(4 * sizeof(int)) - -#define HAVE_ARCH_SIGINFO_T -#define HAVE_ARCH_COPY_SIGINFO -#define HAVE_ARCH_COPY_SIGINFO_TO_USER - -#include <asm-generic/siginfo.h> - -typedef struct siginfo { -	int si_signo; -	int si_errno; -	int si_code; -	int __pad0; - -	union { -		int _pad[SI_PAD_SIZE]; - -		/* kill() */ -		struct { -			pid_t _pid;		/* sender's pid */ -			uid_t _uid;		/* sender's uid */ -		} _kill; - -		/* POSIX.1b timers */ -		struct { -			timer_t _tid;		/* timer id */ -			int _overrun;		/* overrun count */ -			char _pad[sizeof(__ARCH_SI_UID_T) - sizeof(int)]; -			sigval_t _sigval;	/* must overlay ._rt._sigval! */ -			int _sys_private;	/* not to be passed to user */ -		} _timer; - -		/* POSIX.1b signals */ -		struct { -			pid_t _pid;		/* sender's pid */ -			uid_t _uid;		/* sender's uid */ -			sigval_t _sigval; -		} _rt; - -		/* SIGCHLD */ -		struct { -			pid_t _pid;		/* which child */ -			uid_t _uid;		/* sender's uid */ -			int _status;		/* exit code */ -			clock_t _utime; -			clock_t _stime; -		} _sigchld; - -		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ -		struct { -			void __user *_addr;	/* faulting insn/memory ref. */ -			int _imm;		/* immediate value for "break" */ -			unsigned int _flags;	/* see below */ -			unsigned long _isr;	/* isr */ -			short _addr_lsb;	/* lsb of faulting address */ -		} _sigfault; - -		/* SIGPOLL */ -		struct { -			long _band;	/* POLL_IN, POLL_OUT, POLL_MSG (XPG requires a "long") */ -			int _fd; -		} _sigpoll; -	} _sifields; -} siginfo_t; - -#define si_imm		_sifields._sigfault._imm	/* as per UNIX SysV ABI spec */ -#define si_flags	_sifields._sigfault._flags -/* - * si_isr is valid for SIGILL, SIGFPE, SIGSEGV, SIGBUS, and SIGTRAP provided that - * si_code is non-zero and __ISR_VALID is set in si_flags. - */ -#define si_isr		_sifields._sigfault._isr - -/* - * Flag values for si_flags: - */ -#define __ISR_VALID_BIT	0 -#define __ISR_VALID	(1 << __ISR_VALID_BIT) - -/* - * SIGILL si_codes - */ -#define ILL_BADIADDR	(__SI_FAULT|9)	/* unimplemented instruction address */ -#define __ILL_BREAK	(__SI_FAULT|10)	/* illegal break */ -#define __ILL_BNDMOD	(__SI_FAULT|11)	/* bundle-update (modification) in progress */ -#undef NSIGILL -#define NSIGILL		11 - -/* - * SIGFPE si_codes - */ -#define __FPE_DECOVF	(__SI_FAULT|9)	/* decimal overflow */ -#define __FPE_DECDIV	(__SI_FAULT|10)	/* decimal division by zero */ -#define __FPE_DECERR	(__SI_FAULT|11)	/* packed decimal error */ -#define __FPE_INVASC	(__SI_FAULT|12)	/* invalid ASCII digit */ -#define __FPE_INVDEC	(__SI_FAULT|13)	/* invalid decimal digit */ -#undef NSIGFPE -#define NSIGFPE		13 - -/* - * SIGSEGV si_codes - */ -#define __SEGV_PSTKOVF	(__SI_FAULT|3)	/* paragraph stack overflow */ -#undef NSIGSEGV -#define NSIGSEGV	3 - -#undef NSIGTRAP -#define NSIGTRAP	4 - -#ifdef __KERNEL__  #include <linux/string.h> +#include <uapi/asm/siginfo.h>  static inline void  copy_siginfo (siginfo_t *to, siginfo_t *from) @@ -130,6 +20,4 @@ copy_siginfo (siginfo_t *to, siginfo_t *from)  		memcpy(to, from, 4*sizeof(int) + sizeof(from->_sifields._sigchld));  } -#endif /* __KERNEL__ */ -  #endif /* _ASM_IA64_SIGINFO_H */ diff --git a/arch/ia64/include/asm/signal.h b/arch/ia64/include/asm/signal.h index b166248d49a..c62afa4a0dc 100644 --- a/arch/ia64/include/asm/signal.h +++ b/arch/ia64/include/asm/signal.h @@ -1,6 +1,3 @@ -#ifndef _ASM_IA64_SIGNAL_H -#define _ASM_IA64_SIGNAL_H -  /*   * Modified 1998-2001, 2003   *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co @@ -8,129 +5,18 @@   * Unfortunately, this file is being included by bits/signal.h in   * glibc-2.x.  Hence the #ifdef __KERNEL__ ugliness.   */ +#ifndef _ASM_IA64_SIGNAL_H +#define _ASM_IA64_SIGNAL_H -#define SIGHUP		 1 -#define SIGINT		 2 -#define SIGQUIT		 3 -#define SIGILL		 4 -#define SIGTRAP		 5 -#define SIGABRT		 6 -#define SIGIOT		 6 -#define SIGBUS		 7 -#define SIGFPE		 8 -#define SIGKILL		 9 -#define SIGUSR1		10 -#define SIGSEGV		11 -#define SIGUSR2		12 -#define SIGPIPE		13 -#define SIGALRM		14 -#define SIGTERM		15 -#define SIGSTKFLT	16 -#define SIGCHLD		17 -#define SIGCONT		18 -#define SIGSTOP		19 -#define SIGTSTP		20 -#define SIGTTIN		21 -#define SIGTTOU		22 -#define SIGURG		23 -#define SIGXCPU		24 -#define SIGXFSZ		25 -#define SIGVTALRM	26 -#define SIGPROF		27 -#define SIGWINCH	28 -#define SIGIO		29 -#define SIGPOLL		SIGIO -/* -#define SIGLOST		29 -*/ -#define SIGPWR		30 -#define SIGSYS		31 -/* signal 31 is no longer "unused", but the SIGUNUSED macro remains for backwards compatibility */ -#define	SIGUNUSED	31 - -/* These should not be considered constants from userland.  */ -#define SIGRTMIN	32 -#define SIGRTMAX	_NSIG - -/* - * SA_FLAGS values: - * - * SA_ONSTACK indicates that a registered stack_t will be used. - * SA_RESTART flag to get restarting signals (which were the default long ago) - * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. - * SA_RESETHAND clears the handler when the signal is delivered. - * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. - * SA_NODEFER prevents the current signal from being masked in the handler. - * - * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single - * Unix names RESETHAND and NODEFER respectively. - */ -#define SA_NOCLDSTOP	0x00000001 -#define SA_NOCLDWAIT	0x00000002 -#define SA_SIGINFO	0x00000004 -#define SA_ONSTACK	0x08000000 -#define SA_RESTART	0x10000000 -#define SA_NODEFER	0x40000000 -#define SA_RESETHAND	0x80000000 - -#define SA_NOMASK	SA_NODEFER -#define SA_ONESHOT	SA_RESETHAND - -#define SA_RESTORER	0x04000000 - -/* - * sigaltstack controls - */ -#define SS_ONSTACK	1 -#define SS_DISABLE	2 - -/* - * The minimum stack size needs to be fairly large because we want to - * be sure that an app compiled for today's CPUs will continue to run - * on all future CPU models.  The CPU model matters because the signal - * frame needs to have space for the complete machine state, including - * all physical stacked registers.  The number of physical stacked - * registers is CPU model dependent, but given that the width of - * ar.rsc.loadrs is 14 bits, we can assume that they'll never take up - * more than 16KB of space. - */ -#if 1 -  /* -   * This is a stupid typo: the value was _meant_ to be 131072 (0x20000), but I typed it -   * in wrong. ;-(  To preserve backwards compatibility, we leave the kernel at the -   * incorrect value and fix libc only. -   */ -# define MINSIGSTKSZ	131027	/* min. stack size for sigaltstack() */ -#else -# define MINSIGSTKSZ	131072	/* min. stack size for sigaltstack() */ -#endif -#define SIGSTKSZ	262144	/* default stack size for sigaltstack() */ +#include <uapi/asm/signal.h> -#ifdef __KERNEL__  #define _NSIG		64  #define _NSIG_BPW	64  #define _NSIG_WORDS	(_NSIG / _NSIG_BPW) -#endif /* __KERNEL__ */ - -#include <asm-generic/signal-defs.h> -  # ifndef __ASSEMBLY__ -#  include <linux/types.h> - -/* Avoid too many header ordering problems.  */ -struct siginfo; - -typedef struct sigaltstack { -	void __user *ss_sp; -	int ss_flags; -	size_t ss_size; -} stack_t; - -#ifdef __KERNEL__ -  /* Most things should be clean enough to redefine this at will, if care     is taken to make libc match.  */ @@ -140,21 +26,7 @@ typedef struct {  	unsigned long sig[_NSIG_WORDS];  } sigset_t; -struct sigaction { -	__sighandler_t sa_handler; -	unsigned long sa_flags; -	sigset_t sa_mask;		/* mask last for extensibility */ -}; - -struct k_sigaction { -	struct sigaction sa; -}; -  #  include <asm/sigcontext.h> -#define ptrace_signal_deliver(regs, cookie) do { } while (0) - -#endif /* __KERNEL__ */ -  # endif /* !__ASSEMBLY__ */  #endif /* _ASM_IA64_SIGNAL_H */ diff --git a/arch/ia64/include/asm/smp.h b/arch/ia64/include/asm/smp.h index 0b3b3997dec..fea21e98602 100644 --- a/arch/ia64/include/asm/smp.h +++ b/arch/ia64/include/asm/smp.h @@ -55,7 +55,7 @@ extern struct smp_boot_data {  	int cpu_phys_id[NR_CPUS];  } smp_boot_data __initdata; -extern char no_int_routing __devinitdata; +extern char no_int_routing;  extern cpumask_t cpu_core_map[NR_CPUS];  DECLARE_PER_CPU_SHARED_ALIGNED(cpumask_t, cpu_sibling_map); diff --git a/arch/ia64/include/asm/sn/bte.h b/arch/ia64/include/asm/sn/bte.h index 96798d2da7c..cc6c4dbf53a 100644 --- a/arch/ia64/include/asm/sn/bte.h +++ b/arch/ia64/include/asm/sn/bte.h @@ -216,7 +216,7 @@ extern void bte_error_handler(unsigned long);  	bte_copy(0, dest, len, ((mode) | BTE_ZERO_FILL), notification)  /* - * The following is the prefered way of calling bte_unaligned_copy + * The following is the preferred way of calling bte_unaligned_copy   * If the copy is fully cache line aligned, then bte_copy is   * used instead.  Since bte_copy is inlined, this saves a call   * stack.  NOTE: bte_copy is called synchronously and does block diff --git a/arch/ia64/include/asm/sn/pda.h b/arch/ia64/include/asm/sn/pda.h index 1c5108d44d8..22ae358c8d1 100644 --- a/arch/ia64/include/asm/sn/pda.h +++ b/arch/ia64/include/asm/sn/pda.h @@ -10,7 +10,6 @@  #include <linux/cache.h>  #include <asm/percpu.h> -#include <asm/system.h>  /* diff --git a/arch/ia64/include/asm/sn/shub_mmr.h b/arch/ia64/include/asm/sn/shub_mmr.h index 7de1d1d4b71..a84d870f429 100644 --- a/arch/ia64/include/asm/sn/shub_mmr.h +++ b/arch/ia64/include/asm/sn/shub_mmr.h @@ -459,7 +459,7 @@  /* ==================================================================== */  /* Some MMRs are functionally identical (or close enough) on both SHUB1 */  /* and SHUB2 that it makes sense to define a geberic name for the MMR.  */ -/* It is acceptible to use (for example) SH_IPI_INT to reference the    */ +/* It is acceptable to use (for example) SH_IPI_INT to reference the    */  /* the IPI MMR. The value of SH_IPI_INT is determined at runtime based  */  /* on the type of the SHUB. Do not use these #defines in performance    */  /* critical code  or loops - there is a small performance penalty.      */ diff --git a/arch/ia64/include/asm/sn/shubio.h b/arch/ia64/include/asm/sn/shubio.h index 6052422a22b..ecb8a49476b 100644 --- a/arch/ia64/include/asm/sn/shubio.h +++ b/arch/ia64/include/asm/sn/shubio.h @@ -1383,7 +1383,7 @@ typedef union ii_ibcr_u {   * response is capture in IXSM and IXSS, and IXSS[VALID] is set. The    *   * errant header is thereby captured, and no further spurious read      *   * respones are captured until IXSS[VALID] is cleared by setting the    * - * appropriate bit in IECLR.Everytime a spurious read response is       * + * appropriate bit in IECLR. Every time a spurious read response is     *   * detected, the SPUR_RD bit of the PRB corresponding to the incoming   *   * message's SIDN field is set. This always happens, regarless of       *   * whether a header is captured. The programmer should check            * @@ -2738,7 +2738,7 @@ typedef union ii_ippr_u {  /************************************************************************   *									*   * The following defines which were not formed into structures are	* - * probably indentical to another register, and the name of the		* + * probably identical to another register, and the name of the		*   * register is provided against each of these registers. This		*   * information needs to be checked carefully				*   *									* diff --git a/arch/ia64/include/asm/sn/tioce.h b/arch/ia64/include/asm/sn/tioce.h index 893468e1b41..6eae8ada90f 100644 --- a/arch/ia64/include/asm/sn/tioce.h +++ b/arch/ia64/include/asm/sn/tioce.h @@ -467,7 +467,7 @@ typedef volatile struct tioce {  #define CE_LSI_GB_CFG1_RXL0S_THS_SHFT	0  #define CE_LSI_GB_CFG1_RXL0S_THS_MASK	(0xffULL << 0)  #define CE_LSI_GB_CFG1_RXL0S_SMP_SHFT	8 -#define CE_LSI_GB_CFG1_RXL0S_SMP_MASK	(0xfULL << 8); +#define CE_LSI_GB_CFG1_RXL0S_SMP_MASK	(0xfULL << 8)  #define CE_LSI_GB_CFG1_RXL0S_ADJ_SHFT	12  #define CE_LSI_GB_CFG1_RXL0S_ADJ_MASK	(0x7ULL << 12)  #define CE_LSI_GB_CFG1_RXL0S_FLT_SHFT	15 diff --git a/arch/ia64/include/asm/socket.h b/arch/ia64/include/asm/socket.h deleted file mode 100644 index 51427eaa51b..00000000000 --- a/arch/ia64/include/asm/socket.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef _ASM_IA64_SOCKET_H -#define _ASM_IA64_SOCKET_H - -/* - * Socket related defines. - * - * Based on <asm-i386/socket.h>. - * - * Modified 1998-2000 - *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co - */ - -#include <asm/sockios.h> - -/* For setsockopt(2) */ -#define SOL_SOCKET	1 - -#define SO_DEBUG	1 -#define SO_REUSEADDR	2 -#define SO_TYPE		3 -#define SO_ERROR	4 -#define SO_DONTROUTE	5 -#define SO_BROADCAST	6 -#define SO_SNDBUF	7 -#define SO_RCVBUF	8 -#define SO_SNDBUFFORCE	32 -#define SO_RCVBUFFORCE	33 -#define SO_KEEPALIVE	9 -#define SO_OOBINLINE	10 -#define SO_NO_CHECK	11 -#define SO_PRIORITY	12 -#define SO_LINGER	13 -#define SO_BSDCOMPAT	14 -/* To add :#define SO_REUSEPORT 15 */ -#define SO_PASSCRED	16 -#define SO_PEERCRED	17 -#define SO_RCVLOWAT	18 -#define SO_SNDLOWAT	19 -#define SO_RCVTIMEO	20 -#define SO_SNDTIMEO	21 - -/* Security levels - as per NRL IPv6 - don't actually do anything */ -#define SO_SECURITY_AUTHENTICATION		22 -#define SO_SECURITY_ENCRYPTION_TRANSPORT	23 -#define SO_SECURITY_ENCRYPTION_NETWORK		24 - -#define SO_BINDTODEVICE		25 - -/* Socket filtering */ -#define SO_ATTACH_FILTER	26 -#define SO_DETACH_FILTER	27 - -#define SO_PEERNAME		28 -#define SO_TIMESTAMP		29 -#define SCM_TIMESTAMP		SO_TIMESTAMP - -#define SO_ACCEPTCONN		30 - -#define SO_PEERSEC             31 -#define SO_PASSSEC		34 -#define SO_TIMESTAMPNS		35 -#define SCM_TIMESTAMPNS		SO_TIMESTAMPNS - -#define SO_MARK			36 - -#define SO_TIMESTAMPING		37 -#define SCM_TIMESTAMPING	SO_TIMESTAMPING - -#define SO_PROTOCOL		38 -#define SO_DOMAIN		39 - -#define SO_RXQ_OVFL             40 - -#endif /* _ASM_IA64_SOCKET_H */ diff --git a/arch/ia64/include/asm/sockios.h b/arch/ia64/include/asm/sockios.h deleted file mode 100644 index 15c92468ad3..00000000000 --- a/arch/ia64/include/asm/sockios.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef _ASM_IA64_SOCKIOS_H -#define _ASM_IA64_SOCKIOS_H - -/* - * Socket-level I/O control calls. - * - * Based on <asm-i386/sockios.h>. - * - * Modified 1998, 1999 - *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co - */ -#define FIOSETOWN 	0x8901 -#define SIOCSPGRP	0x8902 -#define FIOGETOWN	0x8903 -#define SIOCGPGRP	0x8904 -#define SIOCATMARK	0x8905 -#define SIOCGSTAMP	0x8906		/* Get stamp (timeval) */ -#define SIOCGSTAMPNS	0x8907		/* Get stamp (timespec) */ - -#endif /* _ASM_IA64_SOCKIOS_H */ diff --git a/arch/ia64/include/asm/spinlock.h b/arch/ia64/include/asm/spinlock.h index 1a91c9121d1..45698cd15b7 100644 --- a/arch/ia64/include/asm/spinlock.h +++ b/arch/ia64/include/asm/spinlock.h @@ -13,9 +13,8 @@  #include <linux/kernel.h>  #include <linux/bitops.h> -#include <asm/atomic.h> +#include <linux/atomic.h>  #include <asm/intrinsics.h> -#include <asm/system.h>  #define arch_spin_lock_init(x)			((x)->lock = 0) @@ -103,6 +102,11 @@ static inline int __ticket_spin_is_contended(arch_spinlock_t *lock)  	return ((tmp - (tmp >> TICKET_SHIFT)) & TICKET_MASK) > 1;  } +static __always_inline int arch_spin_value_unlocked(arch_spinlock_t lock) +{ +	return !(((lock.lock >> TICKET_SHIFT) ^ lock.lock) & TICKET_MASK); +} +  static inline int arch_spin_is_locked(arch_spinlock_t *lock)  {  	return __ticket_spin_is_locked(lock); diff --git a/arch/ia64/include/asm/stat.h b/arch/ia64/include/asm/stat.h deleted file mode 100644 index 367bb90cdff..00000000000 --- a/arch/ia64/include/asm/stat.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef _ASM_IA64_STAT_H -#define _ASM_IA64_STAT_H - -/* - * Modified 1998, 1999 - *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co - */ - -struct stat { -	unsigned long	st_dev; -	unsigned long	st_ino; -	unsigned long	st_nlink; -	unsigned int	st_mode; -	unsigned int	st_uid; -	unsigned int	st_gid; -	unsigned int	__pad0; -	unsigned long	st_rdev; -	unsigned long	st_size; -	unsigned long	st_atime; -	unsigned long	st_atime_nsec; -	unsigned long	st_mtime; -	unsigned long	st_mtime_nsec; -	unsigned long	st_ctime; -	unsigned long	st_ctime_nsec; -	unsigned long	st_blksize; -	long		st_blocks; -	unsigned long	__unused[3]; -}; - -#define STAT_HAVE_NSEC 1 - -struct ia64_oldstat { -	unsigned int	st_dev; -	unsigned int	st_ino; -	unsigned int	st_mode; -	unsigned int	st_nlink; -	unsigned int	st_uid; -	unsigned int	st_gid; -	unsigned int	st_rdev; -	unsigned int	__pad1; -	unsigned long	st_size; -	unsigned long	st_atime; -	unsigned long	st_mtime; -	unsigned long	st_ctime; -	unsigned int	st_blksize; -	int		st_blocks; -	unsigned int	__unused1; -	unsigned int	__unused2; -}; - -#endif /* _ASM_IA64_STAT_H */ diff --git a/arch/ia64/include/asm/statfs.h b/arch/ia64/include/asm/statfs.h deleted file mode 100644 index 1e589669de5..00000000000 --- a/arch/ia64/include/asm/statfs.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef _ASM_IA64_STATFS_H -#define _ASM_IA64_STATFS_H - -/* - * Based on <asm-i386/statfs.h>. - * - * Modified 1998, 1999, 2003 - *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co - */ - -/* - * We need compat_statfs64 to be packed, because the i386 ABI won't - * add padding at the end to bring it to a multiple of 8 bytes, but - * the IA64 ABI will. - */ -#define ARCH_PACK_COMPAT_STATFS64 __attribute__((packed,aligned(4))) - -#include <asm-generic/statfs.h> - -#endif /* _ASM_IA64_STATFS_H */ diff --git a/arch/ia64/include/asm/swab.h b/arch/ia64/include/asm/swab.h deleted file mode 100644 index c89a8cb5d8a..00000000000 --- a/arch/ia64/include/asm/swab.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef _ASM_IA64_SWAB_H -#define _ASM_IA64_SWAB_H - -/* - * Modified 1998, 1999 - *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co. - */ - -#include <linux/types.h> -#include <asm/intrinsics.h> -#include <linux/compiler.h> - -static __inline__ __attribute_const__ __u64 __arch_swab64(__u64 x) -{ -	__u64 result; - -	result = ia64_mux1(x, ia64_mux1_rev); -	return result; -} -#define __arch_swab64 __arch_swab64 - -static __inline__ __attribute_const__ __u32 __arch_swab32(__u32 x) -{ -	return __arch_swab64(x) >> 32; -} -#define __arch_swab32 __arch_swab32 - -static __inline__ __attribute_const__ __u16 __arch_swab16(__u16 x) -{ -	return __arch_swab64(x) >> 48; -} -#define __arch_swab16 __arch_swab16 - -#endif /* _ASM_IA64_SWAB_H */ diff --git a/arch/ia64/include/asm/switch_to.h b/arch/ia64/include/asm/switch_to.h new file mode 100644 index 00000000000..d38c7ea5eea --- /dev/null +++ b/arch/ia64/include/asm/switch_to.h @@ -0,0 +1,79 @@ +/* + * Low-level task switching. This is based on information published in + * the Processor Abstraction Layer and the System Abstraction Layer + * manual. + * + * Copyright (C) 1998-2003 Hewlett-Packard Co + *	David Mosberger-Tang <davidm@hpl.hp.com> + * Copyright (C) 1999 Asit Mallick <asit.k.mallick@intel.com> + * Copyright (C) 1999 Don Dugger <don.dugger@intel.com> + */ +#ifndef _ASM_IA64_SWITCH_TO_H +#define _ASM_IA64_SWITCH_TO_H + +#include <linux/percpu.h> + +struct task_struct; + +/* + * Context switch from one thread to another.  If the two threads have + * different address spaces, schedule() has already taken care of + * switching to the new address space by calling switch_mm(). + * + * Disabling access to the fph partition and the debug-register + * context switch MUST be done before calling ia64_switch_to() since a + * newly created thread returns directly to + * ia64_ret_from_syscall_clear_r8. + */ +extern struct task_struct *ia64_switch_to (void *next_task); + +extern void ia64_save_extra (struct task_struct *task); +extern void ia64_load_extra (struct task_struct *task); + +#ifdef CONFIG_PERFMON +  DECLARE_PER_CPU(unsigned long, pfm_syst_info); +# define PERFMON_IS_SYSWIDE() (__get_cpu_var(pfm_syst_info) & 0x1) +#else +# define PERFMON_IS_SYSWIDE() (0) +#endif + +#define IA64_HAS_EXTRA_STATE(t)							\ +	((t)->thread.flags & (IA64_THREAD_DBG_VALID|IA64_THREAD_PM_VALID)	\ +	 || PERFMON_IS_SYSWIDE()) + +#define __switch_to(prev,next,last) do {							 \ +	if (IA64_HAS_EXTRA_STATE(prev))								 \ +		ia64_save_extra(prev);								 \ +	if (IA64_HAS_EXTRA_STATE(next))								 \ +		ia64_load_extra(next);								 \ +	ia64_psr(task_pt_regs(next))->dfh = !ia64_is_local_fpu_owner(next);			 \ +	(last) = ia64_switch_to((next));							 \ +} while (0) + +#ifdef CONFIG_SMP +/* + * In the SMP case, we save the fph state when context-switching away from a thread that + * modified fph.  This way, when the thread gets scheduled on another CPU, the CPU can + * pick up the state from task->thread.fph, avoiding the complication of having to fetch + * the latest fph state from another CPU.  In other words: eager save, lazy restore. + */ +# define switch_to(prev,next,last) do {						\ +	if (ia64_psr(task_pt_regs(prev))->mfh && ia64_is_local_fpu_owner(prev)) {				\ +		ia64_psr(task_pt_regs(prev))->mfh = 0;			\ +		(prev)->thread.flags |= IA64_THREAD_FPH_VALID;			\ +		__ia64_save_fpu((prev)->thread.fph);				\ +	}									\ +	__switch_to(prev, next, last);						\ +	/* "next" in old context is "current" in new context */			\ +	if (unlikely((current->thread.flags & IA64_THREAD_MIGRATION) &&	       \ +		     (task_cpu(current) !=				       \ +		      		      task_thread_info(current)->last_cpu))) { \ +		platform_migrate(current);				       \ +		task_thread_info(current)->last_cpu = task_cpu(current);       \ +	}								       \ +} while (0) +#else +# define switch_to(prev,next,last)	__switch_to(prev, next, last) +#endif + +#endif /* _ASM_IA64_SWITCH_TO_H */ diff --git a/arch/ia64/include/asm/sync_bitops.h b/arch/ia64/include/asm/sync_bitops.h deleted file mode 100644 index 593c12eeb27..00000000000 --- a/arch/ia64/include/asm/sync_bitops.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef _ASM_IA64_SYNC_BITOPS_H -#define _ASM_IA64_SYNC_BITOPS_H - -/* - * Copyright (C) 2008 Isaku Yamahata <yamahata at valinux co jp> - * - * Based on synch_bitops.h which Dan Magenhaimer wrote. - * - * bit operations which provide guaranteed strong synchronisation - * when communicating with Xen or other guest OSes running on other CPUs. - */ - -static inline void sync_set_bit(int nr, volatile void *addr) -{ -	set_bit(nr, addr); -} - -static inline void sync_clear_bit(int nr, volatile void *addr) -{ -	clear_bit(nr, addr); -} - -static inline void sync_change_bit(int nr, volatile void *addr) -{ -	change_bit(nr, addr); -} - -static inline int sync_test_and_set_bit(int nr, volatile void *addr) -{ -	return test_and_set_bit(nr, addr); -} - -static inline int sync_test_and_clear_bit(int nr, volatile void *addr) -{ -	return test_and_clear_bit(nr, addr); -} - -static inline int sync_test_and_change_bit(int nr, volatile void *addr) -{ -	return test_and_change_bit(nr, addr); -} - -static inline int sync_test_bit(int nr, const volatile void *addr) -{ -	return test_bit(nr, addr); -} - -#define sync_cmpxchg(ptr, old, new)				\ -	((__typeof__(*(ptr)))cmpxchg_acq((ptr), (old), (new))) - -#endif /* _ASM_IA64_SYNC_BITOPS_H */ diff --git a/arch/ia64/include/asm/system.h b/arch/ia64/include/asm/system.h deleted file mode 100644 index 6cca30705d5..00000000000 --- a/arch/ia64/include/asm/system.h +++ /dev/null @@ -1,203 +0,0 @@ -#ifndef _ASM_IA64_SYSTEM_H -#define _ASM_IA64_SYSTEM_H - -/* - * System defines. Note that this is included both from .c and .S - * files, so it does only defines, not any C code.  This is based - * on information published in the Processor Abstraction Layer - * and the System Abstraction Layer manual. - * - * Copyright (C) 1998-2003 Hewlett-Packard Co - *	David Mosberger-Tang <davidm@hpl.hp.com> - * Copyright (C) 1999 Asit Mallick <asit.k.mallick@intel.com> - * Copyright (C) 1999 Don Dugger <don.dugger@intel.com> - */ - -#include <asm/kregs.h> -#include <asm/page.h> -#include <asm/pal.h> -#include <asm/percpu.h> - -#define GATE_ADDR		RGN_BASE(RGN_GATE) - -/* - * 0xa000000000000000+2*PERCPU_PAGE_SIZE - * - 0xa000000000000000+3*PERCPU_PAGE_SIZE remain unmapped (guard page) - */ -#define KERNEL_START		 (GATE_ADDR+__IA64_UL_CONST(0x100000000)) -#define PERCPU_ADDR		(-PERCPU_PAGE_SIZE) -#define LOAD_OFFSET		(KERNEL_START - KERNEL_TR_PAGE_SIZE) - -#ifndef __ASSEMBLY__ - -#include <linux/kernel.h> -#include <linux/types.h> - -#define AT_VECTOR_SIZE_ARCH 2 /* entries in ARCH_DLINFO */ - -struct pci_vector_struct { -	__u16 segment;	/* PCI Segment number */ -	__u16 bus;	/* PCI Bus number */ -	__u32 pci_id;	/* ACPI split 16 bits device, 16 bits function (see section 6.1.1) */ -	__u8 pin;	/* PCI PIN (0 = A, 1 = B, 2 = C, 3 = D) */ -	__u32 irq;	/* IRQ assigned */ -}; - -extern struct ia64_boot_param { -	__u64 command_line;		/* physical address of command line arguments */ -	__u64 efi_systab;		/* physical address of EFI system table */ -	__u64 efi_memmap;		/* physical address of EFI memory map */ -	__u64 efi_memmap_size;		/* size of EFI memory map */ -	__u64 efi_memdesc_size;		/* size of an EFI memory map descriptor */ -	__u32 efi_memdesc_version;	/* memory descriptor version */ -	struct { -		__u16 num_cols;	/* number of columns on console output device */ -		__u16 num_rows;	/* number of rows on console output device */ -		__u16 orig_x;	/* cursor's x position */ -		__u16 orig_y;	/* cursor's y position */ -	} console_info; -	__u64 fpswa;		/* physical address of the fpswa interface */ -	__u64 initrd_start; -	__u64 initrd_size; -} *ia64_boot_param; - -/* - * Macros to force memory ordering.  In these descriptions, "previous" - * and "subsequent" refer to program order; "visible" means that all - * architecturally visible effects of a memory access have occurred - * (at a minimum, this means the memory has been read or written). - * - *   wmb():	Guarantees that all preceding stores to memory- - *		like regions are visible before any subsequent - *		stores and that all following stores will be - *		visible only after all previous stores. - *   rmb():	Like wmb(), but for reads. - *   mb():	wmb()/rmb() combo, i.e., all previous memory - *		accesses are visible before all subsequent - *		accesses and vice versa.  This is also known as - *		a "fence." - * - * Note: "mb()" and its variants cannot be used as a fence to order - * accesses to memory mapped I/O registers.  For that, mf.a needs to - * be used.  However, we don't want to always use mf.a because (a) - * it's (presumably) much slower than mf and (b) mf.a is supported for - * sequential memory pages only. - */ -#define mb()	ia64_mf() -#define rmb()	mb() -#define wmb()	mb() -#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() -#else -# define smp_mb()	barrier() -# define smp_rmb()	barrier() -# define smp_wmb()	barrier() -# define smp_read_barrier_depends()	do { } while(0) -#endif - -/* - * XXX check on this ---I suspect what Linus really wants here is - * acquire vs release semantics but we can't discuss this stuff with - * Linus just yet.  Grrr... - */ -#define set_mb(var, value)	do { (var) = (value); mb(); } while (0) - -/* - * The group barrier in front of the rsm & ssm are necessary to ensure - * that none of the previous instructions in the same group are - * affected by the rsm/ssm. - */ - -#ifdef __KERNEL__ - -/* - * Context switch from one thread to another.  If the two threads have - * different address spaces, schedule() has already taken care of - * switching to the new address space by calling switch_mm(). - * - * Disabling access to the fph partition and the debug-register - * context switch MUST be done before calling ia64_switch_to() since a - * newly created thread returns directly to - * ia64_ret_from_syscall_clear_r8. - */ -extern struct task_struct *ia64_switch_to (void *next_task); - -struct task_struct; - -extern void ia64_save_extra (struct task_struct *task); -extern void ia64_load_extra (struct task_struct *task); - -#ifdef CONFIG_VIRT_CPU_ACCOUNTING -extern void ia64_account_on_switch (struct task_struct *prev, struct task_struct *next); -# define IA64_ACCOUNT_ON_SWITCH(p,n) ia64_account_on_switch(p,n) -#else -# define IA64_ACCOUNT_ON_SWITCH(p,n) -#endif - -#ifdef CONFIG_PERFMON -  DECLARE_PER_CPU(unsigned long, pfm_syst_info); -# define PERFMON_IS_SYSWIDE() (__get_cpu_var(pfm_syst_info) & 0x1) -#else -# define PERFMON_IS_SYSWIDE() (0) -#endif - -#define IA64_HAS_EXTRA_STATE(t)							\ -	((t)->thread.flags & (IA64_THREAD_DBG_VALID|IA64_THREAD_PM_VALID)	\ -	 || PERFMON_IS_SYSWIDE()) - -#define __switch_to(prev,next,last) do {							 \ -	IA64_ACCOUNT_ON_SWITCH(prev, next);							 \ -	if (IA64_HAS_EXTRA_STATE(prev))								 \ -		ia64_save_extra(prev);								 \ -	if (IA64_HAS_EXTRA_STATE(next))								 \ -		ia64_load_extra(next);								 \ -	ia64_psr(task_pt_regs(next))->dfh = !ia64_is_local_fpu_owner(next);			 \ -	(last) = ia64_switch_to((next));							 \ -} while (0) - -#ifdef CONFIG_SMP -/* - * In the SMP case, we save the fph state when context-switching away from a thread that - * modified fph.  This way, when the thread gets scheduled on another CPU, the CPU can - * pick up the state from task->thread.fph, avoiding the complication of having to fetch - * the latest fph state from another CPU.  In other words: eager save, lazy restore. - */ -# define switch_to(prev,next,last) do {						\ -	if (ia64_psr(task_pt_regs(prev))->mfh && ia64_is_local_fpu_owner(prev)) {				\ -		ia64_psr(task_pt_regs(prev))->mfh = 0;			\ -		(prev)->thread.flags |= IA64_THREAD_FPH_VALID;			\ -		__ia64_save_fpu((prev)->thread.fph);				\ -	}									\ -	__switch_to(prev, next, last);						\ -	/* "next" in old context is "current" in new context */			\ -	if (unlikely((current->thread.flags & IA64_THREAD_MIGRATION) &&	       \ -		     (task_cpu(current) !=				       \ -		      		      task_thread_info(current)->last_cpu))) { \ -		platform_migrate(current);				       \ -		task_thread_info(current)->last_cpu = task_cpu(current);       \ -	}								       \ -} while (0) -#else -# define switch_to(prev,next,last)	__switch_to(prev, next, last) -#endif - -#define __ARCH_WANT_UNLOCKED_CTXSW -#define ARCH_HAS_PREFETCH_SWITCH_STACK -#define ia64_platform_is(x) (strcmp(x, platform_name) == 0) - -void cpu_idle_wait(void); - -#define arch_align_stack(x) (x) - -void default_idle(void); - -#endif /* __KERNEL__ */ - -#endif /* __ASSEMBLY__ */ - -#endif /* _ASM_IA64_SYSTEM_H */ diff --git a/arch/ia64/include/asm/termbits.h b/arch/ia64/include/asm/termbits.h deleted file mode 100644 index c009b94e58d..00000000000 --- a/arch/ia64/include/asm/termbits.h +++ /dev/null @@ -1,208 +0,0 @@ -#ifndef _ASM_IA64_TERMBITS_H -#define _ASM_IA64_TERMBITS_H - -/* - * Based on <asm-i386/termbits.h>. - * - * Modified 1999 - *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co - * - * 99/01/28	Added new baudrates - */ - -#include <linux/posix_types.h> - -typedef unsigned char	cc_t; -typedef unsigned int	speed_t; -typedef unsigned int	tcflag_t; - -#define NCCS 19 -struct termios { -	tcflag_t c_iflag;		/* input mode flags */ -	tcflag_t c_oflag;		/* output mode flags */ -	tcflag_t c_cflag;		/* control mode flags */ -	tcflag_t c_lflag;		/* local mode flags */ -	cc_t c_line;			/* line discipline */ -	cc_t c_cc[NCCS];		/* control characters */ -}; - -struct termios2 { -	tcflag_t c_iflag;		/* input mode flags */ -	tcflag_t c_oflag;		/* output mode flags */ -	tcflag_t c_cflag;		/* control mode flags */ -	tcflag_t c_lflag;		/* local mode flags */ -	cc_t c_line;			/* line discipline */ -	cc_t c_cc[NCCS];		/* control characters */ -	speed_t c_ispeed;		/* input speed */ -	speed_t c_ospeed;		/* output speed */ -}; - -struct ktermios { -	tcflag_t c_iflag;		/* input mode flags */ -	tcflag_t c_oflag;		/* output mode flags */ -	tcflag_t c_cflag;		/* control mode flags */ -	tcflag_t c_lflag;		/* local mode flags */ -	cc_t c_line;			/* line discipline */ -	cc_t c_cc[NCCS];		/* control characters */ -	speed_t c_ispeed;		/* input speed */ -	speed_t c_ospeed;		/* output speed */ -}; - -/* c_cc characters */ -#define VINTR 0 -#define VQUIT 1 -#define VERASE 2 -#define VKILL 3 -#define VEOF 4 -#define VTIME 5 -#define VMIN 6 -#define VSWTC 7 -#define VSTART 8 -#define VSTOP 9 -#define VSUSP 10 -#define VEOL 11 -#define VREPRINT 12 -#define VDISCARD 13 -#define VWERASE 14 -#define VLNEXT 15 -#define VEOL2 16 - -/* c_iflag bits */ -#define IGNBRK	0000001 -#define BRKINT	0000002 -#define IGNPAR	0000004 -#define PARMRK	0000010 -#define INPCK	0000020 -#define ISTRIP	0000040 -#define INLCR	0000100 -#define IGNCR	0000200 -#define ICRNL	0000400 -#define IUCLC	0001000 -#define IXON	0002000 -#define IXANY	0004000 -#define IXOFF	0010000 -#define IMAXBEL	0020000 -#define IUTF8	0040000 - -/* c_oflag bits */ -#define OPOST	0000001 -#define OLCUC	0000002 -#define ONLCR	0000004 -#define OCRNL	0000010 -#define ONOCR	0000020 -#define ONLRET	0000040 -#define OFILL	0000100 -#define OFDEL	0000200 -#define NLDLY	0000400 -#define   NL0	0000000 -#define   NL1	0000400 -#define CRDLY	0003000 -#define   CR0	0000000 -#define   CR1	0001000 -#define   CR2	0002000 -#define   CR3	0003000 -#define TABDLY	0014000 -#define   TAB0	0000000 -#define   TAB1	0004000 -#define   TAB2	0010000 -#define   TAB3	0014000 -#define   XTABS	0014000 -#define BSDLY	0020000 -#define   BS0	0000000 -#define   BS1	0020000 -#define VTDLY	0040000 -#define   VT0	0000000 -#define   VT1	0040000 -#define FFDLY	0100000 -#define   FF0	0000000 -#define   FF1	0100000 - -/* c_cflag bit meaning */ -#define CBAUD	0010017 -#define  B0	0000000		/* hang up */ -#define  B50	0000001 -#define  B75	0000002 -#define  B110	0000003 -#define  B134	0000004 -#define  B150	0000005 -#define  B200	0000006 -#define  B300	0000007 -#define  B600	0000010 -#define  B1200	0000011 -#define  B1800	0000012 -#define  B2400	0000013 -#define  B4800	0000014 -#define  B9600	0000015 -#define  B19200	0000016 -#define  B38400	0000017 -#define EXTA B19200 -#define EXTB B38400 -#define CSIZE	0000060 -#define   CS5	0000000 -#define   CS6	0000020 -#define   CS7	0000040 -#define   CS8	0000060 -#define CSTOPB	0000100 -#define CREAD	0000200 -#define PARENB	0000400 -#define PARODD	0001000 -#define HUPCL	0002000 -#define CLOCAL	0004000 -#define CBAUDEX 0010000 -#define    BOTHER 0010000 -#define    B57600 0010001 -#define   B115200 0010002 -#define   B230400 0010003 -#define   B460800 0010004 -#define   B500000 0010005 -#define   B576000 0010006 -#define   B921600 0010007 -#define  B1000000 0010010 -#define  B1152000 0010011 -#define  B1500000 0010012 -#define  B2000000 0010013 -#define  B2500000 0010014 -#define  B3000000 0010015 -#define  B3500000 0010016 -#define  B4000000 0010017 -#define CIBAUD	  002003600000		/* input baud rate */ -#define CMSPAR	  010000000000		/* mark or space (stick) parity */ -#define CRTSCTS	  020000000000		/* flow control */ - -#define IBSHIFT	16		/* Shift from CBAUD to CIBAUD */ - -/* c_lflag bits */ -#define ISIG	0000001 -#define ICANON	0000002 -#define XCASE	0000004 -#define ECHO	0000010 -#define ECHOE	0000020 -#define ECHOK	0000040 -#define ECHONL	0000100 -#define NOFLSH	0000200 -#define TOSTOP	0000400 -#define ECHOCTL	0001000 -#define ECHOPRT	0002000 -#define ECHOKE	0004000 -#define FLUSHO	0010000 -#define PENDIN	0040000 -#define IEXTEN	0100000 -#define EXTPROC	0200000 - -/* tcflow() and TCXONC use these */ -#define	TCOOFF		0 -#define	TCOON		1 -#define	TCIOFF		2 -#define	TCION		3 - -/* tcflush() and TCFLSH use these */ -#define	TCIFLUSH	0 -#define	TCOFLUSH	1 -#define	TCIOFLUSH	2 - -/* tcsetattr uses these */ -#define	TCSANOW		0 -#define	TCSADRAIN	1 -#define	TCSAFLUSH	2 - -#endif /* _ASM_IA64_TERMBITS_H */ diff --git a/arch/ia64/include/asm/termios.h b/arch/ia64/include/asm/termios.h index 689d218c0c2..a42f870ca4f 100644 --- a/arch/ia64/include/asm/termios.h +++ b/arch/ia64/include/asm/termios.h @@ -1,52 +1,14 @@ -#ifndef _ASM_IA64_TERMIOS_H -#define _ASM_IA64_TERMIOS_H -  /*   * Modified 1999   *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co   *   * 99/01/28	Added N_IRDA and N_SMSBLOCK   */ +#ifndef _ASM_IA64_TERMIOS_H +#define _ASM_IA64_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 - -/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ +#include <uapi/asm/termios.h> -# ifdef __KERNEL__  /*	intr=^C		quit=^\		erase=del	kill=^U  	eof=^D		vtime=\0	vmin=\1		sxtc=\0 @@ -92,6 +54,4 @@ struct termio {  #define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios))  #define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios)) -# endif /* __KERNEL__ */ -  #endif /* _ASM_IA64_TERMIOS_H */ diff --git a/arch/ia64/include/asm/thread_info.h b/arch/ia64/include/asm/thread_info.h index b6a5ba2aca3..5b17418b422 100644 --- a/arch/ia64/include/asm/thread_info.h +++ b/arch/ia64/include/asm/thread_info.h @@ -11,9 +11,6 @@  #include <asm/processor.h>  #include <asm/ptrace.h> -#define PREEMPT_ACTIVE_BIT 30 -#define PREEMPT_ACTIVE	(1 << PREEMPT_ACTIVE_BIT) -  #ifndef __ASSEMBLY__  /* @@ -31,7 +28,7 @@ struct thread_info {  	mm_segment_t addr_limit;	/* user-level address space limit */  	int preempt_count;		/* 0=premptable, <0=BUG; will also serve as bh-counter */  	struct restart_block restart_block; -#ifdef CONFIG_VIRT_CPU_ACCOUNTING +#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE  	__u64 ac_stamp;  	__u64 ac_leave;  	__u64 ac_stime; @@ -54,23 +51,22 @@ struct thread_info {  	},					\  } -#define __HAVE_ARCH_THREAD_INFO_ALLOCATOR -  #ifndef ASM_OFFSETS_C  /* how to get the thread information struct from C */  #define current_thread_info()	((struct thread_info *) ((char *) current + IA64_TASK_SIZE)) -#define alloc_thread_info(tsk)	((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE)) +#define alloc_thread_info_node(tsk, node)	\ +		((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE))  #define task_thread_info(tsk)	((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE))  #else  #define current_thread_info()	((struct thread_info *) 0) -#define alloc_thread_info(tsk)	((struct thread_info *) 0) +#define alloc_thread_info_node(tsk, node)	((struct thread_info *) 0)  #define task_thread_info(tsk)	((struct thread_info *) 0)  #endif  #define free_thread_info(ti)	/* nothing */  #define task_stack_page(tsk)	((void *)(tsk))  #define __HAVE_THREAD_FUNCTIONS -#ifdef CONFIG_VIRT_CPU_ACCOUNTING +#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE  #define setup_thread_stack(p, org)			\  	*task_thread_info(p) = *task_thread_info(org);	\  	task_thread_info(p)->ac_stime = 0;		\ @@ -83,8 +79,14 @@ struct thread_info {  #endif  #define end_of_stack(p) (unsigned long *)((void *)(p) + IA64_RBS_OFFSET) -#define __HAVE_ARCH_TASK_STRUCT_ALLOCATOR -#define alloc_task_struct()	((struct task_struct *)__get_free_pages(GFP_KERNEL | __GFP_COMP, KERNEL_STACK_SIZE_ORDER)) +#define alloc_task_struct_node(node)						\ +({										\ +	struct page *page = alloc_pages_node(node, GFP_KERNEL | __GFP_COMP,	\ +					     KERNEL_STACK_SIZE_ORDER);		\ +	struct task_struct *ret = page ? page_address(page) : NULL;		\ +										\ +	ret;									\ +})  #define free_task_struct(tsk)	free_pages((unsigned long) (tsk), KERNEL_STACK_SIZE_ORDER)  #endif /* !__ASSEMBLY */ @@ -101,12 +103,11 @@ struct thread_info {  #define TIF_SYSCALL_AUDIT	3	/* syscall auditing active */  #define TIF_SINGLESTEP		4	/* restore singlestep on return to user mode */  #define TIF_NOTIFY_RESUME	6	/* resumption notification requested */ -#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_MCA_INIT		18	/* this task is processing MCA or INIT */  #define TIF_DB_DISABLED		19	/* debug trap disabled for fsyscall */ -#define TIF_FREEZE		20	/* is freezing for suspend */  #define TIF_RESTORE_RSE		21	/* user RBS is newer than kernel RBS */ +#define TIF_POLLING_NRFLAG	22	/* idle is polling for TIF_NEED_RESCHED */  #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)  #define _TIF_SYSCALL_AUDIT	(1 << TIF_SYSCALL_AUDIT) @@ -115,11 +116,10 @@ struct thread_info {  #define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)  #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)  #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED) -#define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG)  #define _TIF_MCA_INIT		(1 << TIF_MCA_INIT)  #define _TIF_DB_DISABLED	(1 << TIF_DB_DISABLED) -#define _TIF_FREEZE		(1 << TIF_FREEZE)  #define _TIF_RESTORE_RSE	(1 << TIF_RESTORE_RSE) +#define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG)  /* "work to do on user-return" bits */  #define TIF_ALLWORK_MASK	(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SYSCALL_AUDIT|\ @@ -127,18 +127,31 @@ struct thread_info {  /* like TIF_ALLWORK_BITS but sans TIF_SYSCALL_TRACE or TIF_SYSCALL_AUDIT */  #define TIF_WORK_MASK		(TIF_ALLWORK_MASK&~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT)) -#define TS_POLLING		1 	/* true if in idle loop and not sleeping */  #define TS_RESTORE_SIGMASK	2	/* restore signal mask in do_signal() */ -#define tsk_is_polling(t) (task_thread_info(t)->status & TS_POLLING) -  #ifndef __ASSEMBLY__  #define HAVE_SET_RESTORE_SIGMASK	1  static inline void set_restore_sigmask(void)  {  	struct thread_info *ti = current_thread_info();  	ti->status |= TS_RESTORE_SIGMASK; -	set_bit(TIF_SIGPENDING, &ti->flags); +	WARN_ON(!test_bit(TIF_SIGPENDING, &ti->flags)); +} +static inline void clear_restore_sigmask(void) +{ +	current_thread_info()->status &= ~TS_RESTORE_SIGMASK; +} +static inline bool test_restore_sigmask(void) +{ +	return current_thread_info()->status & TS_RESTORE_SIGMASK; +} +static inline bool test_and_clear_restore_sigmask(void) +{ +	struct thread_info *ti = current_thread_info(); +	if (!(ti->status & TS_RESTORE_SIGMASK)) +		return false; +	ti->status &= ~TS_RESTORE_SIGMASK; +	return true;  }  #endif	/* !__ASSEMBLY__ */ diff --git a/arch/ia64/include/asm/tlb.h b/arch/ia64/include/asm/tlb.h index 23cce999eb1..39d64e0df1d 100644 --- a/arch/ia64/include/asm/tlb.h +++ b/arch/ia64/include/asm/tlb.h @@ -22,7 +22,7 @@   * unmapping a portion of the virtual address space, these hooks are called according to   * the following template:   * - *	tlb <- tlb_gather_mmu(mm, full_mm_flush);	// start unmap for address space MM + *	tlb <- tlb_gather_mmu(mm, start, end);		// start unmap for address space MM   *	{   *	  for each vma that needs a shootdown do {   *	    tlb_start_vma(tlb, vma); @@ -46,22 +46,23 @@  #include <asm/tlbflush.h>  #include <asm/machvec.h> -#ifdef CONFIG_SMP -# define FREE_PTE_NR		2048 -# define tlb_fast_mode(tlb)	((tlb)->nr == ~0U) -#else -# define FREE_PTE_NR		0 -# define tlb_fast_mode(tlb)	(1) -#endif +/* + * If we can't allocate a page to make a big batch of page pointers + * to work on, then just handle a few from the on-stack structure. + */ +#define	IA64_GATHER_BUNDLE	8  struct mmu_gather {  	struct mm_struct	*mm; -	unsigned int		nr;		/* == ~0U => fast mode */ +	unsigned int		nr; +	unsigned int		max;  	unsigned char		fullmm;		/* non-zero means full mm flush */  	unsigned char		need_flush;	/* really unmapped some PTEs? */ +	unsigned long		start, end;  	unsigned long		start_addr;  	unsigned long		end_addr; -	struct page 		*pages[FREE_PTE_NR]; +	struct page		**pages; +	struct page		*local[IA64_GATHER_BUNDLE];  };  struct ia64_tr_entry { @@ -90,20 +91,9 @@ extern struct ia64_tr_entry *ia64_idtrs[NR_CPUS];  #define RR_RID_MASK	0x00000000ffffff00L  #define RR_TO_RID(val) 	((val >> 8) & 0xffffff) -/* Users of the generic TLB shootdown code must declare this storage space. */ -DECLARE_PER_CPU(struct mmu_gather, mmu_gathers); - -/* - * Flush the TLB for address range START to END and, if not in fast mode, release the - * freed pages that where gathered up to this point. - */  static inline void -ia64_tlb_flush_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long end) +ia64_tlb_flush_mmu_tlbonly(struct mmu_gather *tlb, unsigned long start, unsigned long end)  { -	unsigned int nr; - -	if (!tlb->need_flush) -		return;  	tlb->need_flush = 0;  	if (tlb->fullmm) { @@ -136,43 +126,58 @@ ia64_tlb_flush_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long e  		flush_tlb_range(&vma, ia64_thash(start), ia64_thash(end));  	} +} + +static inline void +ia64_tlb_flush_mmu_free(struct mmu_gather *tlb) +{ +	unsigned long i; +	unsigned int nr; +  	/* lastly, release the freed pages */  	nr = tlb->nr; -	if (!tlb_fast_mode(tlb)) { -		unsigned long i; -		tlb->nr = 0; -		tlb->start_addr = ~0UL; -		for (i = 0; i < nr; ++i) -			free_page_and_swap_cache(tlb->pages[i]); -	} + +	tlb->nr = 0; +	tlb->start_addr = ~0UL; +	for (i = 0; i < nr; ++i) +		free_page_and_swap_cache(tlb->pages[i]);  }  /* - * Return a pointer to an initialized struct mmu_gather. + * Flush the TLB for address range START to END and, if not in fast mode, release the + * freed pages that where gathered up to this point.   */ -static inline struct mmu_gather * -tlb_gather_mmu (struct mm_struct *mm, unsigned int full_mm_flush) +static inline void +ia64_tlb_flush_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long end)  { -	struct mmu_gather *tlb = &get_cpu_var(mmu_gathers); +	if (!tlb->need_flush) +		return; +	ia64_tlb_flush_mmu_tlbonly(tlb, start, end); +	ia64_tlb_flush_mmu_free(tlb); +} +static inline void __tlb_alloc_page(struct mmu_gather *tlb) +{ +	unsigned long addr = __get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0); + +	if (addr) { +		tlb->pages = (void *)addr; +		tlb->max = PAGE_SIZE / sizeof(void *); +	} +} + + +static inline void +tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long start, unsigned long end) +{  	tlb->mm = mm; -	/* -	 * Use fast mode if only 1 CPU is online. -	 * -	 * It would be tempting to turn on fast-mode for full_mm_flush as well.  But this -	 * doesn't work because of speculative accesses and software prefetching: the page -	 * table of "mm" may (and usually is) the currently active page table and even -	 * though the kernel won't do any user-space accesses during the TLB shoot down, a -	 * compiler might use speculation or lfetch.fault on what happens to be a valid -	 * user-space address.  This in turn could trigger a TLB miss fault (or a VHPT -	 * walk) and re-insert a TLB entry we just removed.  Slow mode avoids such -	 * problems.  (We could make fast-mode work by switching the current task to a -	 * different "mm" during the shootdown.) --davidm 08/02/2002 -	 */ -	tlb->nr = (num_online_cpus() == 1) ? ~0U : 0; -	tlb->fullmm = full_mm_flush; +	tlb->max = ARRAY_SIZE(tlb->local); +	tlb->pages = tlb->local; +	tlb->nr = 0; +	tlb->fullmm = !(start | (end+1)); +	tlb->start = start; +	tlb->end = end;  	tlb->start_addr = ~0UL; -	return tlb;  }  /* @@ -180,7 +185,7 @@ tlb_gather_mmu (struct mm_struct *mm, unsigned int full_mm_flush)   * collected.   */  static inline void -tlb_finish_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long end) +tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)  {  	/*  	 * Note: tlb->nr may be 0 at this point, so we can't rely on tlb->start_addr and @@ -191,7 +196,8 @@ tlb_finish_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long end)  	/* keep the page table cache within bounds */  	check_pgt_cache(); -	put_cpu_var(mmu_gathers); +	if (tlb->pages != tlb->local) +		free_pages((unsigned long)tlb->pages, 0);  }  /* @@ -199,18 +205,38 @@ tlb_finish_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long end)   * must be delayed until after the TLB has been flushed (see comments at the beginning of   * this file).   */ -static inline void -tlb_remove_page (struct mmu_gather *tlb, struct page *page) +static inline int __tlb_remove_page(struct mmu_gather *tlb, struct page *page)  {  	tlb->need_flush = 1; -	if (tlb_fast_mode(tlb)) { -		free_page_and_swap_cache(page); -		return; -	} +	if (!tlb->nr && tlb->pages == tlb->local) +		__tlb_alloc_page(tlb); +  	tlb->pages[tlb->nr++] = page; -	if (tlb->nr >= FREE_PTE_NR) -		ia64_tlb_flush_mmu(tlb, tlb->start_addr, tlb->end_addr); +	VM_BUG_ON(tlb->nr > tlb->max); + +	return tlb->max - tlb->nr; +} + +static inline void tlb_flush_mmu_tlbonly(struct mmu_gather *tlb) +{ +	ia64_tlb_flush_mmu_tlbonly(tlb, tlb->start_addr, tlb->end_addr); +} + +static inline void tlb_flush_mmu_free(struct mmu_gather *tlb) +{ +	ia64_tlb_flush_mmu_free(tlb); +} + +static inline void tlb_flush_mmu(struct mmu_gather *tlb) +{ +	ia64_tlb_flush_mmu(tlb, tlb->start_addr, tlb->end_addr); +} + +static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) +{ +	if (!__tlb_remove_page(tlb, page)) +		tlb_flush_mmu(tlb);  }  /* diff --git a/arch/ia64/include/asm/topology.h b/arch/ia64/include/asm/topology.h index 09f646753d1..6437ca21f61 100644 --- a/arch/ia64/include/asm/topology.h +++ b/arch/ia64/include/asm/topology.h @@ -21,7 +21,8 @@  #define PENALTY_FOR_NODE_WITH_CPUS 255  /* - * Distance above which we begin to use zone reclaim + * Nodes within this distance are eligible for reclaim by zone_reclaim() when + * zone_reclaim_mode is enabled.   */  #define RECLAIM_DISTANCE 15 @@ -46,55 +47,6 @@  void build_cpu_to_node_map(void); -#define SD_CPU_INIT (struct sched_domain) {		\ -	.parent			= NULL,			\ -	.child			= NULL,			\ -	.groups			= NULL,			\ -	.min_interval		= 1,			\ -	.max_interval		= 4,			\ -	.busy_factor		= 64,			\ -	.imbalance_pct		= 125,			\ -	.cache_nice_tries	= 2,			\ -	.busy_idx		= 2,			\ -	.idle_idx		= 1,			\ -	.newidle_idx		= 0,			\ -	.wake_idx		= 0,			\ -	.forkexec_idx		= 0,			\ -	.flags			= SD_LOAD_BALANCE	\ -				| SD_BALANCE_NEWIDLE	\ -				| SD_BALANCE_EXEC	\ -				| SD_BALANCE_FORK	\ -				| SD_WAKE_AFFINE,	\ -	.last_balance		= jiffies,		\ -	.balance_interval	= 1,			\ -	.nr_balance_failed	= 0,			\ -} - -/* sched_domains SD_NODE_INIT for IA64 NUMA machines */ -#define SD_NODE_INIT (struct sched_domain) {		\ -	.parent			= NULL,			\ -	.child			= NULL,			\ -	.groups			= NULL,			\ -	.min_interval		= 8,			\ -	.max_interval		= 8*(min(num_online_cpus(), 32U)), \ -	.busy_factor		= 64,			\ -	.imbalance_pct		= 125,			\ -	.cache_nice_tries	= 2,			\ -	.busy_idx		= 3,			\ -	.idle_idx		= 2,			\ -	.newidle_idx		= 0,			\ -	.wake_idx		= 0,			\ -	.forkexec_idx		= 0,			\ -	.flags			= SD_LOAD_BALANCE	\ -				| SD_BALANCE_NEWIDLE	\ -				| SD_BALANCE_EXEC	\ -				| SD_BALANCE_FORK	\ -				| SD_SERIALIZE,		\ -	.last_balance		= jiffies,		\ -	.balance_interval	= 64,			\ -	.nr_balance_failed	= 0,			\ -} -  #endif /* CONFIG_NUMA */  #ifdef CONFIG_SMP @@ -102,7 +54,6 @@ void build_cpu_to_node_map(void);  #define topology_core_id(cpu)			(cpu_data(cpu)->core_id)  #define topology_core_cpumask(cpu)		(&cpu_core_map[cpu])  #define topology_thread_cpumask(cpu)		(&per_cpu(cpu_sibling_map, cpu)) -#define smt_capable() 				(smp_num_siblings > 1)  #endif  extern void arch_fix_phys_package_id(int num, u32 slot); diff --git a/arch/ia64/include/asm/types.h b/arch/ia64/include/asm/types.h index 93773fd37be..4c351b169da 100644 --- a/arch/ia64/include/asm/types.h +++ b/arch/ia64/include/asm/types.h @@ -1,6 +1,3 @@ -#ifndef _ASM_IA64_TYPES_H -#define _ASM_IA64_TYPES_H -  /*   * This file is never included by application software unless explicitly   * requested (e.g., via linux/types.h) in which case the application is @@ -13,37 +10,22 @@   * Modified 1998-2000, 2002   *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co   */ +#ifndef _ASM_IA64_TYPES_H +#define _ASM_IA64_TYPES_H -#ifdef __KERNEL__  #include <asm-generic/int-ll64.h> -#else -#include <asm-generic/int-l64.h> -#endif +#include <uapi/asm/types.h>  #ifdef __ASSEMBLY__ -# define __IA64_UL(x)		(x) -# define __IA64_UL_CONST(x)	x -  #else -# define __IA64_UL(x)		((unsigned long)(x)) -# define __IA64_UL_CONST(x)	x##UL - -typedef unsigned int umode_t; -  /*   * These aren't exported outside the kernel to avoid name space clashes   */ -# ifdef __KERNEL__  struct fnptr {  	unsigned long ip;  	unsigned long gp;  }; -/* DMA addresses are 64-bits wide, in general.  */ -typedef u64 dma_addr_t; - -# endif /* __KERNEL__ */  #endif /* !__ASSEMBLY__ */ -  #endif /* _ASM_IA64_TYPES_H */ diff --git a/arch/ia64/include/asm/ucontext.h b/arch/ia64/include/asm/ucontext.h deleted file mode 100644 index bf573dc8ca6..00000000000 --- a/arch/ia64/include/asm/ucontext.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _ASM_IA64_UCONTEXT_H -#define _ASM_IA64_UCONTEXT_H - -struct ucontext { -	struct sigcontext uc_mcontext; -}; - -#define uc_link		uc_mcontext.sc_gr[0]	/* wrong type; nobody cares */ -#define uc_sigmask	uc_mcontext.sc_sigmask -#define uc_stack	uc_mcontext.sc_stack - -#endif /* _ASM_IA64_UCONTEXT_H */ diff --git a/arch/ia64/include/asm/unistd.h b/arch/ia64/include/asm/unistd.h index 954d398a54b..fb13dc5e8f8 100644 --- a/arch/ia64/include/asm/unistd.h +++ b/arch/ia64/include/asm/unistd.h @@ -1,325 +1,17 @@ -#ifndef _ASM_IA64_UNISTD_H -#define _ASM_IA64_UNISTD_H -  /*   * IA-64 Linux syscall numbers and inline-functions.   *   * Copyright (C) 1998-2005 Hewlett-Packard Co   *	David Mosberger-Tang <davidm@hpl.hp.com>   */ +#ifndef _ASM_IA64_UNISTD_H +#define _ASM_IA64_UNISTD_H -#include <asm/break.h> - -#define __BREAK_SYSCALL			__IA64_BREAK_SYSCALL - -#define __NR_ni_syscall			1024 -#define __NR_exit			1025 -#define __NR_read			1026 -#define __NR_write			1027 -#define __NR_open			1028 -#define __NR_close			1029 -#define __NR_creat			1030 -#define __NR_link			1031 -#define __NR_unlink			1032 -#define __NR_execve			1033 -#define __NR_chdir			1034 -#define __NR_fchdir			1035 -#define __NR_utimes			1036 -#define __NR_mknod			1037 -#define __NR_chmod			1038 -#define __NR_chown			1039 -#define __NR_lseek			1040 -#define __NR_getpid			1041 -#define __NR_getppid			1042 -#define __NR_mount			1043 -#define __NR_umount			1044 -#define __NR_setuid			1045 -#define __NR_getuid			1046 -#define __NR_geteuid			1047 -#define __NR_ptrace			1048 -#define __NR_access			1049 -#define __NR_sync			1050 -#define __NR_fsync			1051 -#define __NR_fdatasync			1052 -#define __NR_kill			1053 -#define __NR_rename			1054 -#define __NR_mkdir			1055 -#define __NR_rmdir			1056 -#define __NR_dup			1057 -#define __NR_pipe			1058 -#define __NR_times			1059 -#define __NR_brk			1060 -#define __NR_setgid			1061 -#define __NR_getgid			1062 -#define __NR_getegid			1063 -#define __NR_acct			1064 -#define __NR_ioctl			1065 -#define __NR_fcntl			1066 -#define __NR_umask			1067 -#define __NR_chroot			1068 -#define __NR_ustat			1069 -#define __NR_dup2			1070 -#define __NR_setreuid			1071 -#define __NR_setregid			1072 -#define __NR_getresuid			1073 -#define __NR_setresuid			1074 -#define __NR_getresgid			1075 -#define __NR_setresgid			1076 -#define __NR_getgroups			1077 -#define __NR_setgroups			1078 -#define __NR_getpgid			1079 -#define __NR_setpgid			1080 -#define __NR_setsid			1081 -#define __NR_getsid			1082 -#define __NR_sethostname		1083 -#define __NR_setrlimit			1084 -#define __NR_getrlimit			1085 -#define __NR_getrusage			1086 -#define __NR_gettimeofday		1087 -#define __NR_settimeofday		1088 -#define __NR_select			1089 -#define __NR_poll			1090 -#define __NR_symlink			1091 -#define __NR_readlink			1092 -#define __NR_uselib			1093 -#define __NR_swapon			1094 -#define __NR_swapoff			1095 -#define __NR_reboot			1096 -#define __NR_truncate			1097 -#define __NR_ftruncate			1098 -#define __NR_fchmod			1099 -#define __NR_fchown			1100 -#define __NR_getpriority		1101 -#define __NR_setpriority		1102 -#define __NR_statfs			1103 -#define __NR_fstatfs			1104 -#define __NR_gettid			1105 -#define __NR_semget			1106 -#define __NR_semop			1107 -#define __NR_semctl			1108 -#define __NR_msgget			1109 -#define __NR_msgsnd			1110 -#define __NR_msgrcv			1111 -#define __NR_msgctl			1112 -#define __NR_shmget			1113 -#define __NR_shmat			1114 -#define __NR_shmdt			1115 -#define __NR_shmctl			1116 -/* also known as klogctl() in GNU libc: */ -#define __NR_syslog			1117 -#define __NR_setitimer			1118 -#define __NR_getitimer			1119 -/* 1120 was __NR_old_stat */ -/* 1121 was __NR_old_lstat */ -/* 1122 was __NR_old_fstat */ -#define __NR_vhangup			1123 -#define __NR_lchown			1124 -#define __NR_remap_file_pages		1125 -#define __NR_wait4			1126 -#define __NR_sysinfo			1127 -#define __NR_clone			1128 -#define __NR_setdomainname		1129 -#define __NR_uname			1130 -#define __NR_adjtimex			1131 -/* 1132 was __NR_create_module */ -#define __NR_init_module		1133 -#define __NR_delete_module		1134 -/* 1135 was __NR_get_kernel_syms */ -/* 1136 was __NR_query_module */ -#define __NR_quotactl			1137 -#define __NR_bdflush			1138 -#define __NR_sysfs			1139 -#define __NR_personality		1140 -#define __NR_afs_syscall		1141 -#define __NR_setfsuid			1142 -#define __NR_setfsgid			1143 -#define __NR_getdents			1144 -#define __NR_flock			1145 -#define __NR_readv			1146 -#define __NR_writev			1147 -#define __NR_pread64			1148 -#define __NR_pwrite64			1149 -#define __NR__sysctl			1150 -#define __NR_mmap			1151 -#define __NR_munmap			1152 -#define __NR_mlock			1153 -#define __NR_mlockall			1154 -#define __NR_mprotect			1155 -#define __NR_mremap			1156 -#define __NR_msync			1157 -#define __NR_munlock			1158 -#define __NR_munlockall			1159 -#define __NR_sched_getparam		1160 -#define __NR_sched_setparam		1161 -#define __NR_sched_getscheduler		1162 -#define __NR_sched_setscheduler		1163 -#define __NR_sched_yield		1164 -#define __NR_sched_get_priority_max	1165 -#define __NR_sched_get_priority_min	1166 -#define __NR_sched_rr_get_interval	1167 -#define __NR_nanosleep			1168 -#define __NR_nfsservctl			1169 -#define __NR_prctl			1170 -/* 1171 is reserved for backwards compatibility with old __NR_getpagesize */ -#define __NR_mmap2			1172 -#define __NR_pciconfig_read		1173 -#define __NR_pciconfig_write		1174 -#define __NR_perfmonctl			1175 -#define __NR_sigaltstack		1176 -#define __NR_rt_sigaction		1177 -#define __NR_rt_sigpending		1178 -#define __NR_rt_sigprocmask		1179 -#define __NR_rt_sigqueueinfo		1180 -#define __NR_rt_sigreturn		1181 -#define __NR_rt_sigsuspend		1182 -#define __NR_rt_sigtimedwait		1183 -#define __NR_getcwd			1184 -#define __NR_capget			1185 -#define __NR_capset			1186 -#define __NR_sendfile			1187 -#define __NR_getpmsg			1188 -#define __NR_putpmsg			1189 -#define __NR_socket			1190 -#define __NR_bind			1191 -#define __NR_connect			1192 -#define __NR_listen			1193 -#define __NR_accept			1194 -#define __NR_getsockname		1195 -#define __NR_getpeername		1196 -#define __NR_socketpair			1197 -#define __NR_send			1198 -#define __NR_sendto			1199 -#define __NR_recv			1200 -#define __NR_recvfrom			1201 -#define __NR_shutdown			1202 -#define __NR_setsockopt			1203 -#define __NR_getsockopt			1204 -#define __NR_sendmsg			1205 -#define __NR_recvmsg			1206 -#define __NR_pivot_root			1207 -#define __NR_mincore			1208 -#define __NR_madvise			1209 -#define __NR_stat			1210 -#define __NR_lstat			1211 -#define __NR_fstat			1212 -#define __NR_clone2			1213 -#define __NR_getdents64			1214 -#define __NR_getunwind			1215 -#define __NR_readahead			1216 -#define __NR_setxattr			1217 -#define __NR_lsetxattr			1218 -#define __NR_fsetxattr			1219 -#define __NR_getxattr			1220 -#define __NR_lgetxattr			1221 -#define __NR_fgetxattr			1222 -#define __NR_listxattr			1223 -#define __NR_llistxattr			1224 -#define __NR_flistxattr			1225 -#define __NR_removexattr		1226 -#define __NR_lremovexattr		1227 -#define __NR_fremovexattr		1228 -#define __NR_tkill			1229 -#define __NR_futex			1230 -#define __NR_sched_setaffinity		1231 -#define __NR_sched_getaffinity		1232 -#define __NR_set_tid_address		1233 -#define __NR_fadvise64			1234 -#define __NR_tgkill			1235 -#define __NR_exit_group			1236 -#define __NR_lookup_dcookie		1237 -#define __NR_io_setup			1238 -#define __NR_io_destroy			1239 -#define __NR_io_getevents		1240 -#define __NR_io_submit			1241 -#define __NR_io_cancel			1242 -#define __NR_epoll_create		1243 -#define __NR_epoll_ctl			1244 -#define __NR_epoll_wait			1245 -#define __NR_restart_syscall		1246 -#define __NR_semtimedop			1247 -#define __NR_timer_create		1248 -#define __NR_timer_settime		1249 -#define __NR_timer_gettime		1250 -#define __NR_timer_getoverrun		1251 -#define __NR_timer_delete		1252 -#define __NR_clock_settime		1253 -#define __NR_clock_gettime		1254 -#define __NR_clock_getres		1255 -#define __NR_clock_nanosleep		1256 -#define __NR_fstatfs64			1257 -#define __NR_statfs64			1258 -#define __NR_mbind			1259 -#define __NR_get_mempolicy		1260 -#define __NR_set_mempolicy		1261 -#define __NR_mq_open			1262 -#define __NR_mq_unlink			1263 -#define __NR_mq_timedsend		1264 -#define __NR_mq_timedreceive		1265 -#define __NR_mq_notify			1266 -#define __NR_mq_getsetattr		1267 -#define __NR_kexec_load			1268 -#define __NR_vserver			1269 -#define __NR_waitid			1270 -#define __NR_add_key			1271 -#define __NR_request_key		1272 -#define __NR_keyctl			1273 -#define __NR_ioprio_set			1274 -#define __NR_ioprio_get			1275 -#define __NR_move_pages			1276 -#define __NR_inotify_init		1277 -#define __NR_inotify_add_watch		1278 -#define __NR_inotify_rm_watch		1279 -#define __NR_migrate_pages		1280 -#define __NR_openat			1281 -#define __NR_mkdirat			1282 -#define __NR_mknodat			1283 -#define __NR_fchownat			1284 -#define __NR_futimesat			1285 -#define __NR_newfstatat			1286 -#define __NR_unlinkat			1287 -#define __NR_renameat			1288 -#define __NR_linkat			1289 -#define __NR_symlinkat			1290 -#define __NR_readlinkat			1291 -#define __NR_fchmodat			1292 -#define __NR_faccessat			1293 -#define __NR_pselect6			1294 -#define __NR_ppoll			1295 -#define __NR_unshare			1296 -#define __NR_splice			1297 -#define __NR_set_robust_list		1298 -#define __NR_get_robust_list		1299 -#define __NR_sync_file_range		1300 -#define __NR_tee			1301 -#define __NR_vmsplice			1302 -#define __NR_fallocate			1303 -#define __NR_getcpu			1304 -#define __NR_epoll_pwait		1305 -#define __NR_utimensat			1306 -#define __NR_signalfd			1307 -#define __NR_timerfd			1308 -#define __NR_eventfd			1309 -#define __NR_timerfd_create		1310 -#define __NR_timerfd_settime		1311 -#define __NR_timerfd_gettime		1312 -#define __NR_signalfd4			1313 -#define __NR_eventfd2			1314 -#define __NR_epoll_create1		1315 -#define __NR_dup3			1316 -#define __NR_pipe2			1317 -#define __NR_inotify_init1		1318 -#define __NR_preadv			1319 -#define __NR_pwritev			1320 -#define __NR_rt_tgsigqueueinfo		1321 -#define __NR_recvmmsg			1322 -#define __NR_fanotify_init		1323 -#define __NR_fanotify_mark		1324 -#define __NR_prlimit64			1325 +#include <uapi/asm/unistd.h> -#ifdef __KERNEL__ -#define NR_syscalls			302 /* length of syscall table */ +#define NR_syscalls			315 /* length of syscall table */  /*   * The following defines stop scripts/checksyscalls.sh from complaining about @@ -335,9 +27,6 @@  #define __IGNORE_vfork		/* clone() */  #define __IGNORE_umount2	/* umount() */ -#define __ARCH_WANT_SYS_RT_SIGACTION -#define __ARCH_WANT_SYS_RT_SIGSUSPEND -  #if !defined(__ASSEMBLY__) && !defined(ASSEMBLER)  #include <linux/types.h> @@ -355,23 +44,7 @@ asmlinkage unsigned long sys_mmap2(  				int prot, int flags,  				int fd, long pgoff);  struct pt_regs; -struct sigaction;  asmlinkage long sys_ia64_pipe(void); -asmlinkage long sys_rt_sigaction(int sig, -				 const struct sigaction __user *act, -				 struct sigaction __user *oact, -				 size_t sigsetsize); - -/* - * "Conditional" syscalls - * - * Note, this macro can only be used in the file which defines sys_ni_syscall, i.e., in - * kernel/sys_ni.c.  This version causes warnings because the declaration isn't a - * proper prototype, but we can't use __typeof__ either, because not all cond_syscall() - * declarations have prototypes at the moment. - */ -#define cond_syscall(x) asmlinkage long x (void) __attribute__((weak,alias("sys_ni_syscall")))  #endif /* !__ASSEMBLY__ */ -#endif /* __KERNEL__ */  #endif /* _ASM_IA64_UNISTD_H */ diff --git a/arch/ia64/include/asm/ustack.h b/arch/ia64/include/asm/ustack.h index 504167c35b8..b275401b96d 100644 --- a/arch/ia64/include/asm/ustack.h +++ b/arch/ia64/include/asm/ustack.h @@ -1,20 +1,11 @@  #ifndef _ASM_IA64_USTACK_H  #define _ASM_IA64_USTACK_H -/* - * Constants for the user stack size - */ - -#ifdef __KERNEL__  #include <asm/page.h> +#include <uapi/asm/ustack.h>  /* The absolute hard limit for stack size is 1/2 of the mappable space in the region */  #define MAX_USER_STACK_SIZE	(RGN_MAP_LIMIT/2)  #define STACK_TOP		(0x6000000000000000UL + RGN_MAP_LIMIT)  #define STACK_TOP_MAX		STACK_TOP -#endif - -/* Make a default stack size of 2GiB */ -#define DEFAULT_USER_STACK_SIZE	(1UL << 31) -  #endif /* _ASM_IA64_USTACK_H */ diff --git a/arch/ia64/include/asm/uv/uv.h b/arch/ia64/include/asm/uv/uv.h index 61b5bdfd980..8f6cbaa742e 100644 --- a/arch/ia64/include/asm/uv/uv.h +++ b/arch/ia64/include/asm/uv/uv.h @@ -1,7 +1,6 @@  #ifndef _ASM_IA64_UV_UV_H  #define _ASM_IA64_UV_UV_H -#include <asm/system.h>  #include <asm/sn/simulator.h>  static inline int is_uv_system(void) diff --git a/arch/ia64/include/asm/xen/events.h b/arch/ia64/include/asm/xen/events.h deleted file mode 100644 index baa74c82aa7..00000000000 --- a/arch/ia64/include/asm/xen/events.h +++ /dev/null @@ -1,41 +0,0 @@ -/****************************************************************************** - * arch/ia64/include/asm/xen/events.h - * - * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp> - *                    VA Linux Systems Japan K.K. - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - * - */ -#ifndef _ASM_IA64_XEN_EVENTS_H -#define _ASM_IA64_XEN_EVENTS_H - -enum ipi_vector { -	XEN_RESCHEDULE_VECTOR, -	XEN_IPI_VECTOR, -	XEN_CMCP_VECTOR, -	XEN_CPEP_VECTOR, - -	XEN_NR_IPIS, -}; - -static inline int xen_irqs_disabled(struct pt_regs *regs) -{ -	return !(ia64_psr(regs)->i); -} - -#define irq_ctx_init(cpu)	do { } while (0) - -#endif /* _ASM_IA64_XEN_EVENTS_H */ diff --git a/arch/ia64/include/asm/xen/grant_table.h b/arch/ia64/include/asm/xen/grant_table.h deleted file mode 100644 index 2b1fae0e2d1..00000000000 --- a/arch/ia64/include/asm/xen/grant_table.h +++ /dev/null @@ -1,29 +0,0 @@ -/****************************************************************************** - * arch/ia64/include/asm/xen/grant_table.h - * - * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp> - *                    VA Linux Systems Japan K.K. - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - * - */ - -#ifndef _ASM_IA64_XEN_GRANT_TABLE_H -#define _ASM_IA64_XEN_GRANT_TABLE_H - -struct vm_struct *xen_alloc_vm_area(unsigned long size); -void xen_free_vm_area(struct vm_struct *area); - -#endif /* _ASM_IA64_XEN_GRANT_TABLE_H */ diff --git a/arch/ia64/include/asm/xen/hypercall.h b/arch/ia64/include/asm/xen/hypercall.h deleted file mode 100644 index 96fc62366aa..00000000000 --- a/arch/ia64/include/asm/xen/hypercall.h +++ /dev/null @@ -1,265 +0,0 @@ -/****************************************************************************** - * hypercall.h - * - * Linux-specific hypervisor handling. - * - * Copyright (c) 2002-2004, K A Fraser - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation; or, when distributed - * separately from the Linux kernel or incorporated into other - * software packages, subject to the following license: - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this source file (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, modify, - * merge, publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _ASM_IA64_XEN_HYPERCALL_H -#define _ASM_IA64_XEN_HYPERCALL_H - -#include <xen/interface/xen.h> -#include <xen/interface/physdev.h> -#include <xen/interface/sched.h> -#include <asm/xen/xcom_hcall.h> -struct xencomm_handle; -extern unsigned long __hypercall(unsigned long a1, unsigned long a2, -				 unsigned long a3, unsigned long a4, -				 unsigned long a5, unsigned long cmd); - -/* - * Assembler stubs for hyper-calls. - */ - -#define _hypercall0(type, name)					\ -({								\ -	long __res;						\ -	__res = __hypercall(0, 0, 0, 0, 0, __HYPERVISOR_##name);\ -	(type)__res;						\ -}) - -#define _hypercall1(type, name, a1)				\ -({								\ -	long __res;						\ -	__res = __hypercall((unsigned long)a1,			\ -			     0, 0, 0, 0, __HYPERVISOR_##name);	\ -	(type)__res;						\ -}) - -#define _hypercall2(type, name, a1, a2)				\ -({								\ -	long __res;						\ -	__res = __hypercall((unsigned long)a1,			\ -			    (unsigned long)a2,			\ -			    0, 0, 0, __HYPERVISOR_##name);	\ -	(type)__res;						\ -}) - -#define _hypercall3(type, name, a1, a2, a3)			\ -({								\ -	long __res;						\ -	__res = __hypercall((unsigned long)a1,			\ -			    (unsigned long)a2,			\ -			    (unsigned long)a3,			\ -			    0, 0, __HYPERVISOR_##name);		\ -	(type)__res;						\ -}) - -#define _hypercall4(type, name, a1, a2, a3, a4)			\ -({								\ -	long __res;						\ -	__res = __hypercall((unsigned long)a1,			\ -			    (unsigned long)a2,			\ -			    (unsigned long)a3,			\ -			    (unsigned long)a4,			\ -			    0, __HYPERVISOR_##name);		\ -	(type)__res;						\ -}) - -#define _hypercall5(type, name, a1, a2, a3, a4, a5)		\ -({								\ -	long __res;						\ -	__res = __hypercall((unsigned long)a1,			\ -			    (unsigned long)a2,			\ -			    (unsigned long)a3,			\ -			    (unsigned long)a4,			\ -			    (unsigned long)a5,			\ -			    __HYPERVISOR_##name);		\ -	(type)__res;						\ -}) - - -static inline int -xencomm_arch_hypercall_sched_op(int cmd, struct xencomm_handle *arg) -{ -	return _hypercall2(int, sched_op_new, cmd, arg); -} - -static inline long -HYPERVISOR_set_timer_op(u64 timeout) -{ -	unsigned long timeout_hi = (unsigned long)(timeout >> 32); -	unsigned long timeout_lo = (unsigned long)timeout; -	return _hypercall2(long, set_timer_op, timeout_lo, timeout_hi); -} - -static inline int -xencomm_arch_hypercall_multicall(struct xencomm_handle *call_list, -				 int nr_calls) -{ -	return _hypercall2(int, multicall, call_list, nr_calls); -} - -static inline int -xencomm_arch_hypercall_memory_op(unsigned int cmd, struct xencomm_handle *arg) -{ -	return _hypercall2(int, memory_op, cmd, arg); -} - -static inline int -xencomm_arch_hypercall_event_channel_op(int cmd, struct xencomm_handle *arg) -{ -	return _hypercall2(int, event_channel_op, cmd, arg); -} - -static inline int -xencomm_arch_hypercall_xen_version(int cmd, struct xencomm_handle *arg) -{ -	return _hypercall2(int, xen_version, cmd, arg); -} - -static inline int -xencomm_arch_hypercall_console_io(int cmd, int count, -				  struct xencomm_handle *str) -{ -	return _hypercall3(int, console_io, cmd, count, str); -} - -static inline int -xencomm_arch_hypercall_physdev_op(int cmd, struct xencomm_handle *arg) -{ -	return _hypercall2(int, physdev_op, cmd, arg); -} - -static inline int -xencomm_arch_hypercall_grant_table_op(unsigned int cmd, -				      struct xencomm_handle *uop, -				      unsigned int count) -{ -	return _hypercall3(int, grant_table_op, cmd, uop, count); -} - -int HYPERVISOR_grant_table_op(unsigned int cmd, void *uop, unsigned int count); - -extern int xencomm_arch_hypercall_suspend(struct xencomm_handle *arg); - -static inline int -xencomm_arch_hypercall_callback_op(int cmd, struct xencomm_handle *arg) -{ -	return _hypercall2(int, callback_op, cmd, arg); -} - -static inline long -xencomm_arch_hypercall_vcpu_op(int cmd, int cpu, void *arg) -{ -	return _hypercall3(long, vcpu_op, cmd, cpu, arg); -} - -static inline int -HYPERVISOR_physdev_op(int cmd, void *arg) -{ -	switch (cmd) { -	case PHYSDEVOP_eoi: -		return _hypercall1(int, ia64_fast_eoi, -				   ((struct physdev_eoi *)arg)->irq); -	default: -		return xencomm_hypercall_physdev_op(cmd, arg); -	} -} - -static inline long -xencomm_arch_hypercall_opt_feature(struct xencomm_handle *arg) -{ -	return _hypercall1(long, opt_feature, arg); -} - -/* for balloon driver */ -#define HYPERVISOR_update_va_mapping(va, new_val, flags) (0) - -/* Use xencomm to do hypercalls.  */ -#define HYPERVISOR_sched_op xencomm_hypercall_sched_op -#define HYPERVISOR_event_channel_op xencomm_hypercall_event_channel_op -#define HYPERVISOR_callback_op xencomm_hypercall_callback_op -#define HYPERVISOR_multicall xencomm_hypercall_multicall -#define HYPERVISOR_xen_version xencomm_hypercall_xen_version -#define HYPERVISOR_console_io xencomm_hypercall_console_io -#define HYPERVISOR_memory_op xencomm_hypercall_memory_op -#define HYPERVISOR_suspend xencomm_hypercall_suspend -#define HYPERVISOR_vcpu_op xencomm_hypercall_vcpu_op -#define HYPERVISOR_opt_feature xencomm_hypercall_opt_feature - -/* to compile gnttab_copy_grant_page() in drivers/xen/core/gnttab.c */ -#define HYPERVISOR_mmu_update(req, count, success_count, domid) ({ BUG(); 0; }) - -static inline int -HYPERVISOR_shutdown( -	unsigned int reason) -{ -	struct sched_shutdown sched_shutdown = { -		.reason = reason -	}; - -	int rc = HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown); - -	return rc; -} - -/* for netfront.c, netback.c */ -#define MULTI_UVMFLAGS_INDEX 0 /* XXX any value */ - -static inline void -MULTI_update_va_mapping( -	struct multicall_entry *mcl, unsigned long va, -	pte_t new_val, unsigned long flags) -{ -	mcl->op = __HYPERVISOR_update_va_mapping; -	mcl->result = 0; -} - -static inline void -MULTI_grant_table_op(struct multicall_entry *mcl, unsigned int cmd, -	void *uop, unsigned int count) -{ -	mcl->op = __HYPERVISOR_grant_table_op; -	mcl->args[0] = cmd; -	mcl->args[1] = (unsigned long)uop; -	mcl->args[2] = count; -} - -static inline void -MULTI_mmu_update(struct multicall_entry *mcl, struct mmu_update *req, -		 int count, int *success_count, domid_t domid) -{ -	mcl->op = __HYPERVISOR_mmu_update; -	mcl->args[0] = (unsigned long)req; -	mcl->args[1] = count; -	mcl->args[2] = (unsigned long)success_count; -	mcl->args[3] = domid; -} - -#endif /* _ASM_IA64_XEN_HYPERCALL_H */ diff --git a/arch/ia64/include/asm/xen/hypervisor.h b/arch/ia64/include/asm/xen/hypervisor.h deleted file mode 100644 index 67455c2ed2b..00000000000 --- a/arch/ia64/include/asm/xen/hypervisor.h +++ /dev/null @@ -1,61 +0,0 @@ -/****************************************************************************** - * hypervisor.h - * - * Linux-specific hypervisor handling. - * - * Copyright (c) 2002-2004, K A Fraser - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation; or, when distributed - * separately from the Linux kernel or incorporated into other - * software packages, subject to the following license: - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this source file (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, modify, - * merge, publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _ASM_IA64_XEN_HYPERVISOR_H -#define _ASM_IA64_XEN_HYPERVISOR_H - -#include <linux/err.h> -#include <xen/interface/xen.h> -#include <xen/interface/version.h>	/* to compile feature.c */ -#include <xen/features.h>		/* to comiple xen-netfront.c */ -#include <xen/xen.h> -#include <asm/xen/hypercall.h> - -#ifdef CONFIG_XEN -extern struct shared_info *HYPERVISOR_shared_info; -extern struct start_info *xen_start_info; - -void __init xen_setup_vcpu_info_placement(void); -void force_evtchn_callback(void); - -/* for drivers/xen/balloon/balloon.c */ -#ifdef CONFIG_XEN_SCRUB_PAGES -#define scrub_pages(_p, _n) memset((void *)(_p), 0, (_n) << PAGE_SHIFT) -#else -#define scrub_pages(_p, _n) ((void)0) -#endif - -/* For setup_arch() in arch/ia64/kernel/setup.c */ -void xen_ia64_enable_opt_feature(void); -#endif - -#endif /* _ASM_IA64_XEN_HYPERVISOR_H */ diff --git a/arch/ia64/include/asm/xen/inst.h b/arch/ia64/include/asm/xen/inst.h deleted file mode 100644 index c53a4761120..00000000000 --- a/arch/ia64/include/asm/xen/inst.h +++ /dev/null @@ -1,486 +0,0 @@ -/****************************************************************************** - * arch/ia64/include/asm/xen/inst.h - * - * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp> - *                    VA Linux Systems Japan K.K. - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - * - */ - -#include <asm/xen/privop.h> - -#define ia64_ivt				xen_ivt -#define DO_SAVE_MIN				XEN_DO_SAVE_MIN - -#define __paravirt_switch_to			xen_switch_to -#define __paravirt_leave_syscall		xen_leave_syscall -#define __paravirt_work_processed_syscall	xen_work_processed_syscall -#define __paravirt_leave_kernel			xen_leave_kernel -#define __paravirt_pending_syscall_end		xen_work_pending_syscall_end -#define __paravirt_work_processed_syscall_target \ -						xen_work_processed_syscall - -#define paravirt_fsyscall_table			xen_fsyscall_table -#define paravirt_fsys_bubble_down		xen_fsys_bubble_down - -#define MOV_FROM_IFA(reg)	\ -	movl reg = XSI_IFA;	\ -	;;			\ -	ld8 reg = [reg] - -#define MOV_FROM_ITIR(reg)	\ -	movl reg = XSI_ITIR;	\ -	;;			\ -	ld8 reg = [reg] - -#define MOV_FROM_ISR(reg)	\ -	movl reg = XSI_ISR;	\ -	;;			\ -	ld8 reg = [reg] - -#define MOV_FROM_IHA(reg)	\ -	movl reg = XSI_IHA;	\ -	;;			\ -	ld8 reg = [reg] - -#define MOV_FROM_IPSR(pred, reg)	\ -(pred)	movl reg = XSI_IPSR;		\ -	;;				\ -(pred)	ld8 reg = [reg] - -#define MOV_FROM_IIM(reg)	\ -	movl reg = XSI_IIM;	\ -	;;			\ -	ld8 reg = [reg] - -#define MOV_FROM_IIP(reg)	\ -	movl reg = XSI_IIP;	\ -	;;			\ -	ld8 reg = [reg] - -.macro __MOV_FROM_IVR reg, clob -	.ifc "\reg", "r8" -		XEN_HYPER_GET_IVR -		.exitm -	.endif -	.ifc "\clob", "r8" -		XEN_HYPER_GET_IVR -		;; -		mov \reg = r8 -		.exitm -	.endif - -	mov \clob = r8 -	;; -	XEN_HYPER_GET_IVR -	;; -	mov \reg = r8 -	;; -	mov r8 = \clob -.endm -#define MOV_FROM_IVR(reg, clob)	__MOV_FROM_IVR reg, clob - -.macro __MOV_FROM_PSR pred, reg, clob -	.ifc "\reg", "r8" -		(\pred)	XEN_HYPER_GET_PSR; -		.exitm -	.endif -	.ifc "\clob", "r8" -		(\pred)	XEN_HYPER_GET_PSR -		;; -		(\pred)	mov \reg = r8 -		.exitm -	.endif - -	(\pred)	mov \clob = r8 -	(\pred)	XEN_HYPER_GET_PSR -	;; -	(\pred)	mov \reg = r8 -	(\pred)	mov r8 = \clob -.endm -#define MOV_FROM_PSR(pred, reg, clob)	__MOV_FROM_PSR pred, reg, clob - -/* assuming ar.itc is read with interrupt disabled. */ -#define MOV_FROM_ITC(pred, pred_clob, reg, clob)		\ -(pred)	movl clob = XSI_ITC_OFFSET;				\ -	;;							\ -(pred)	ld8 clob = [clob];					\ -(pred)	mov reg = ar.itc;					\ -	;;							\ -(pred)	add reg = reg, clob;					\ -	;;							\ -(pred)	movl clob = XSI_ITC_LAST;				\ -	;;							\ -(pred)	ld8 clob = [clob];					\ -	;;							\ -(pred)	cmp.geu.unc pred_clob, p0 = clob, reg;			\ -	;;							\ -(pred_clob)	add reg = 1, clob;				\ -	;;							\ -(pred)	movl clob = XSI_ITC_LAST;				\ -	;;							\ -(pred)	st8 [clob] = reg - - -#define MOV_TO_IFA(reg, clob)	\ -	movl clob = XSI_IFA;	\ -	;;			\ -	st8 [clob] = reg	\ - -#define MOV_TO_ITIR(pred, reg, clob)	\ -(pred)	movl clob = XSI_ITIR;		\ -	;;				\ -(pred)	st8 [clob] = reg - -#define MOV_TO_IHA(pred, reg, clob)	\ -(pred)	movl clob = XSI_IHA;		\ -	;;				\ -(pred)	st8 [clob] = reg - -#define MOV_TO_IPSR(pred, reg, clob)	\ -(pred)	movl clob = XSI_IPSR;		\ -	;;				\ -(pred)	st8 [clob] = reg;		\ -	;; - -#define MOV_TO_IFS(pred, reg, clob)	\ -(pred)	movl clob = XSI_IFS;		\ -	;;				\ -(pred)	st8 [clob] = reg;		\ -	;; - -#define MOV_TO_IIP(reg, clob)	\ -	movl clob = XSI_IIP;	\ -	;;			\ -	st8 [clob] = reg - -.macro ____MOV_TO_KR kr, reg, clob0, clob1 -	.ifc "\clob0", "r9" -		.error "clob0 \clob0 must not be r9" -	.endif -	.ifc "\clob1", "r8" -		.error "clob1 \clob1 must not be r8" -	.endif - -	.ifnc "\reg", "r9" -		.ifnc "\clob1", "r9" -			mov \clob1 = r9 -		.endif -		mov r9 = \reg -	.endif -	.ifnc "\clob0", "r8" -		mov \clob0 = r8 -	.endif -	mov r8 = \kr -	;; -	XEN_HYPER_SET_KR - -	.ifnc "\reg", "r9" -		.ifnc "\clob1", "r9" -			mov r9 = \clob1 -		.endif -	.endif -	.ifnc "\clob0", "r8" -		mov r8 = \clob0 -	.endif -.endm - -.macro __MOV_TO_KR kr, reg, clob0, clob1 -	.ifc "\clob0", "r9" -		____MOV_TO_KR \kr, \reg, \clob1, \clob0 -		.exitm -	.endif -	.ifc "\clob1", "r8" -		____MOV_TO_KR \kr, \reg, \clob1, \clob0 -		.exitm -	.endif - -	____MOV_TO_KR \kr, \reg, \clob0, \clob1 -.endm - -#define MOV_TO_KR(kr, reg, clob0, clob1) \ -	__MOV_TO_KR IA64_KR_ ## kr, reg, clob0, clob1 - - -.macro __ITC_I pred, reg, clob -	.ifc "\reg", "r8" -		(\pred)	XEN_HYPER_ITC_I -		.exitm -	.endif -	.ifc "\clob", "r8" -		(\pred)	mov r8 = \reg -		;; -		(\pred)	XEN_HYPER_ITC_I -		.exitm -	.endif - -	(\pred)	mov \clob = r8 -	(\pred)	mov r8 = \reg -	;; -	(\pred)	XEN_HYPER_ITC_I -	;; -	(\pred)	mov r8 = \clob -	;; -.endm -#define ITC_I(pred, reg, clob)	__ITC_I pred, reg, clob - -.macro __ITC_D pred, reg, clob -	.ifc "\reg", "r8" -		(\pred)	XEN_HYPER_ITC_D -		;; -		.exitm -	.endif -	.ifc "\clob", "r8" -		(\pred)	mov r8 = \reg -		;; -		(\pred)	XEN_HYPER_ITC_D -		;; -		.exitm -	.endif - -	(\pred)	mov \clob = r8 -	(\pred)	mov r8 = \reg -	;; -	(\pred)	XEN_HYPER_ITC_D -	;; -	(\pred)	mov r8 = \clob -	;; -.endm -#define ITC_D(pred, reg, clob)	__ITC_D pred, reg, clob - -.macro __ITC_I_AND_D pred_i, pred_d, reg, clob -	.ifc "\reg", "r8" -		(\pred_i)XEN_HYPER_ITC_I -		;; -		(\pred_d)XEN_HYPER_ITC_D -		;; -		.exitm -	.endif -	.ifc "\clob", "r8" -		mov r8 = \reg -		;; -		(\pred_i)XEN_HYPER_ITC_I -		;; -		(\pred_d)XEN_HYPER_ITC_D -		;; -		.exitm -	.endif - -	mov \clob = r8 -	mov r8 = \reg -	;; -	(\pred_i)XEN_HYPER_ITC_I -	;; -	(\pred_d)XEN_HYPER_ITC_D -	;; -	mov r8 = \clob -	;; -.endm -#define ITC_I_AND_D(pred_i, pred_d, reg, clob) \ -	__ITC_I_AND_D pred_i, pred_d, reg, clob - -.macro __THASH pred, reg0, reg1, clob -	.ifc "\reg0", "r8" -		(\pred)	mov r8 = \reg1 -		(\pred)	XEN_HYPER_THASH -		.exitm -	.endc -	.ifc "\reg1", "r8" -		(\pred)	XEN_HYPER_THASH -		;; -		(\pred)	mov \reg0 = r8 -		;; -		.exitm -	.endif -	.ifc "\clob", "r8" -		(\pred)	mov r8 = \reg1 -		(\pred)	XEN_HYPER_THASH -		;; -		(\pred)	mov \reg0 = r8 -		;; -		.exitm -	.endif - -	(\pred)	mov \clob = r8 -	(\pred)	mov r8 = \reg1 -	(\pred)	XEN_HYPER_THASH -	;; -	(\pred)	mov \reg0 = r8 -	(\pred)	mov r8 = \clob -	;; -.endm -#define THASH(pred, reg0, reg1, clob) __THASH pred, reg0, reg1, clob - -#define SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(clob0, clob1)	\ -	mov clob0 = 1;						\ -	movl clob1 = XSI_PSR_IC;				\ -	;;							\ -	st4 [clob1] = clob0					\ -	;; - -#define SSM_PSR_IC_AND_SRLZ_D(clob0, clob1)	\ -	;;					\ -	srlz.d;					\ -	mov clob1 = 1;				\ -	movl clob0 = XSI_PSR_IC;		\ -	;;					\ -	st4 [clob0] = clob1 - -#define RSM_PSR_IC(clob)	\ -	movl clob = XSI_PSR_IC;	\ -	;;			\ -	st4 [clob] = r0;	\ -	;; - -/* pred will be clobbered */ -#define MASK_TO_PEND_OFS    (-1) -#define SSM_PSR_I(pred, pred_clob, clob)				\ -(pred)	movl clob = XSI_PSR_I_ADDR					\ -	;;								\ -(pred)	ld8 clob = [clob]						\ -	;;								\ -	/* if (pred) vpsr.i = 1 */					\ -	/* if (pred) (vcpu->vcpu_info->evtchn_upcall_mask)=0 */		\ -(pred)	st1 [clob] = r0, MASK_TO_PEND_OFS				\ -	;;								\ -	/* if (vcpu->vcpu_info->evtchn_upcall_pending) */		\ -(pred)	ld1 clob = [clob]						\ -	;;								\ -(pred)	cmp.ne.unc pred_clob, p0 = clob, r0				\ -	;;								\ -(pred_clob)XEN_HYPER_SSM_I	/* do areal ssm psr.i */ - -#define RSM_PSR_I(pred, clob0, clob1)	\ -	movl clob0 = XSI_PSR_I_ADDR;	\ -	mov clob1 = 1;			\ -	;;				\ -	ld8 clob0 = [clob0];		\ -	;;				\ -(pred)	st1 [clob0] = clob1 - -#define RSM_PSR_I_IC(clob0, clob1, clob2)		\ -	movl clob0 = XSI_PSR_I_ADDR;			\ -	movl clob1 = XSI_PSR_IC;			\ -	;;						\ -	ld8 clob0 = [clob0];				\ -	mov clob2 = 1;					\ -	;;						\ -	/* note: clears both vpsr.i and vpsr.ic! */	\ -	st1 [clob0] = clob2;				\ -	st4 [clob1] = r0;				\ -	;; - -#define RSM_PSR_DT		\ -	XEN_HYPER_RSM_PSR_DT - -#define RSM_PSR_BE_I(clob0, clob1)	\ -	RSM_PSR_I(p0, clob0, clob1);	\ -	rum psr.be - -#define SSM_PSR_DT_AND_SRLZ_I	\ -	XEN_HYPER_SSM_PSR_DT - -#define BSW_0(clob0, clob1, clob2)			\ -	;;						\ -	/* r16-r31 all now hold bank1 values */		\ -	mov clob2 = ar.unat;				\ -	movl clob0 = XSI_BANK1_R16;			\ -	movl clob1 = XSI_BANK1_R16 + 8;			\ -	;;						\ -.mem.offset 0, 0; st8.spill [clob0] = r16, 16;		\ -.mem.offset 8, 0; st8.spill [clob1] = r17, 16;		\ -	;;						\ -.mem.offset 0, 0; st8.spill [clob0] = r18, 16;		\ -.mem.offset 8, 0; st8.spill [clob1] = r19, 16;		\ -	;;						\ -.mem.offset 0, 0; st8.spill [clob0] = r20, 16;		\ -.mem.offset 8, 0; st8.spill [clob1] = r21, 16;		\ -	;;						\ -.mem.offset 0, 0; st8.spill [clob0] = r22, 16;		\ -.mem.offset 8, 0; st8.spill [clob1] = r23, 16;		\ -	;;						\ -.mem.offset 0, 0; st8.spill [clob0] = r24, 16;		\ -.mem.offset 8, 0; st8.spill [clob1] = r25, 16;		\ -	;;						\ -.mem.offset 0, 0; st8.spill [clob0] = r26, 16;		\ -.mem.offset 8, 0; st8.spill [clob1] = r27, 16;		\ -	;;						\ -.mem.offset 0, 0; st8.spill [clob0] = r28, 16;		\ -.mem.offset 8, 0; st8.spill [clob1] = r29, 16;		\ -	;;						\ -.mem.offset 0, 0; st8.spill [clob0] = r30, 16;		\ -.mem.offset 8, 0; st8.spill [clob1] = r31, 16;		\ -	;;						\ -	mov clob1 = ar.unat;				\ -	movl clob0 = XSI_B1NAT;				\ -	;;						\ -	st8 [clob0] = clob1;				\ -	mov ar.unat = clob2;				\ -	movl clob0 = XSI_BANKNUM;			\ -	;;						\ -	st4 [clob0] = r0 - - -	/* FIXME: THIS CODE IS NOT NaT SAFE! */ -#define XEN_BSW_1(clob)			\ -	mov clob = ar.unat;		\ -	movl r30 = XSI_B1NAT;		\ -	;;				\ -	ld8 r30 = [r30];		\ -	mov r31 = 1;			\ -	;;				\ -	mov ar.unat = r30;		\ -	movl r30 = XSI_BANKNUM;		\ -	;;				\ -	st4 [r30] = r31;		\ -	movl r30 = XSI_BANK1_R16;	\ -	movl r31 = XSI_BANK1_R16+8;	\ -	;;				\ -	ld8.fill r16 = [r30], 16;	\ -	ld8.fill r17 = [r31], 16;	\ -	;;				\ -	ld8.fill r18 = [r30], 16;	\ -	ld8.fill r19 = [r31], 16;	\ -	;;				\ -	ld8.fill r20 = [r30], 16;	\ -	ld8.fill r21 = [r31], 16;	\ -	;;				\ -	ld8.fill r22 = [r30], 16;	\ -	ld8.fill r23 = [r31], 16;	\ -	;;				\ -	ld8.fill r24 = [r30], 16;	\ -	ld8.fill r25 = [r31], 16;	\ -	;;				\ -	ld8.fill r26 = [r30], 16;	\ -	ld8.fill r27 = [r31], 16;	\ -	;;				\ -	ld8.fill r28 = [r30], 16;	\ -	ld8.fill r29 = [r31], 16;	\ -	;;				\ -	ld8.fill r30 = [r30];		\ -	ld8.fill r31 = [r31];		\ -	;;				\ -	mov ar.unat = clob - -#define BSW_1(clob0, clob1)	XEN_BSW_1(clob1) - - -#define COVER	\ -	XEN_HYPER_COVER - -#define RFI			\ -	XEN_HYPER_RFI;		\ -	dv_serialize_data diff --git a/arch/ia64/include/asm/xen/interface.h b/arch/ia64/include/asm/xen/interface.h deleted file mode 100644 index e951e740bdf..00000000000 --- a/arch/ia64/include/asm/xen/interface.h +++ /dev/null @@ -1,355 +0,0 @@ -/****************************************************************************** - * arch-ia64/hypervisor-if.h - * - * Guest OS interface to IA64 Xen. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Copyright by those who contributed. (in alphabetical order) - * - * Anthony Xu <anthony.xu@intel.com> - * Eddie Dong <eddie.dong@intel.com> - * Fred Yang <fred.yang@intel.com> - * Kevin Tian <kevin.tian@intel.com> - * Alex Williamson <alex.williamson@hp.com> - * Chris Wright <chrisw@sous-sol.org> - * Christian Limpach <Christian.Limpach@cl.cam.ac.uk> - * Dietmar Hahn <dietmar.hahn@fujitsu-siemens.com> - * Hollis Blanchard <hollisb@us.ibm.com> - * Isaku Yamahata <yamahata@valinux.co.jp> - * Jan Beulich <jbeulich@novell.com> - * John Levon <john.levon@sun.com> - * Kazuhiro Suzuki <kaz@jp.fujitsu.com> - * Keir Fraser <keir.fraser@citrix.com> - * Kouya Shimura <kouya@jp.fujitsu.com> - * Masaki Kanno <kanno.masaki@jp.fujitsu.com> - * Matt Chapman <matthewc@hp.com> - * Matthew Chapman <matthewc@hp.com> - * Samuel Thibault <samuel.thibault@eu.citrix.com> - * Tomonari Horikoshi <t.horikoshi@jp.fujitsu.com> - * Tristan Gingold <tgingold@free.fr> - * Tsunehisa Doi <Doi.Tsunehisa@jp.fujitsu.com> - * Yutaka Ezaki <yutaka.ezaki@jp.fujitsu.com> - * Zhang Xin <xing.z.zhang@intel.com> - * Zhang xiantao <xiantao.zhang@intel.com> - * dan.magenheimer@hp.com - * ian.pratt@cl.cam.ac.uk - * michael.fetterman@cl.cam.ac.uk - */ - -#ifndef _ASM_IA64_XEN_INTERFACE_H -#define _ASM_IA64_XEN_INTERFACE_H - -#define __DEFINE_GUEST_HANDLE(name, type)	\ -	typedef struct { type *p; } __guest_handle_ ## name - -#define DEFINE_GUEST_HANDLE_STRUCT(name)	\ -	__DEFINE_GUEST_HANDLE(name, struct name) -#define DEFINE_GUEST_HANDLE(name)	__DEFINE_GUEST_HANDLE(name, name) -#define GUEST_HANDLE(name)		__guest_handle_ ## name -#define GUEST_HANDLE_64(name)		GUEST_HANDLE(name) -#define set_xen_guest_handle(hnd, val)	do { (hnd).p = val; } while (0) - -#ifndef __ASSEMBLY__ -/* Guest handles for primitive C types. */ -__DEFINE_GUEST_HANDLE(uchar, unsigned char); -__DEFINE_GUEST_HANDLE(uint, unsigned int); -__DEFINE_GUEST_HANDLE(ulong, unsigned long); -__DEFINE_GUEST_HANDLE(u64, unsigned long); -DEFINE_GUEST_HANDLE(char); -DEFINE_GUEST_HANDLE(int); -DEFINE_GUEST_HANDLE(long); -DEFINE_GUEST_HANDLE(void); - -typedef unsigned long xen_pfn_t; -DEFINE_GUEST_HANDLE(xen_pfn_t); -#define PRI_xen_pfn	"lx" -#endif - -/* Arch specific VIRQs definition */ -#define VIRQ_ITC	VIRQ_ARCH_0	/* V. Virtual itc timer */ -#define VIRQ_MCA_CMC	VIRQ_ARCH_1	/* MCA cmc interrupt */ -#define VIRQ_MCA_CPE	VIRQ_ARCH_2	/* MCA cpe interrupt */ - -/* Maximum number of virtual CPUs in multi-processor guests. */ -/* keep sizeof(struct shared_page) <= PAGE_SIZE. - * this is checked in arch/ia64/xen/hypervisor.c. */ -#define MAX_VIRT_CPUS	64 - -#ifndef __ASSEMBLY__ - -#define INVALID_MFN	(~0UL) - -union vac { -	unsigned long value; -	struct { -		int a_int:1; -		int a_from_int_cr:1; -		int a_to_int_cr:1; -		int a_from_psr:1; -		int a_from_cpuid:1; -		int a_cover:1; -		int a_bsw:1; -		long reserved:57; -	}; -}; - -union vdc { -	unsigned long value; -	struct { -		int d_vmsw:1; -		int d_extint:1; -		int d_ibr_dbr:1; -		int d_pmc:1; -		int d_to_pmd:1; -		int d_itm:1; -		long reserved:58; -	}; -}; - -struct mapped_regs { -	union vac vac; -	union vdc vdc; -	unsigned long virt_env_vaddr; -	unsigned long reserved1[29]; -	unsigned long vhpi; -	unsigned long reserved2[95]; -	union { -		unsigned long vgr[16]; -		unsigned long bank1_regs[16];	/* bank1 regs (r16-r31) -						   when bank0 active */ -	}; -	union { -		unsigned long vbgr[16]; -		unsigned long bank0_regs[16];	/* bank0 regs (r16-r31) -						   when bank1 active */ -	}; -	unsigned long vnat; -	unsigned long vbnat; -	unsigned long vcpuid[5]; -	unsigned long reserved3[11]; -	unsigned long vpsr; -	unsigned long vpr; -	unsigned long reserved4[76]; -	union { -		unsigned long vcr[128]; -		struct { -			unsigned long dcr;	/* CR0 */ -			unsigned long itm; -			unsigned long iva; -			unsigned long rsv1[5]; -			unsigned long pta;	/* CR8 */ -			unsigned long rsv2[7]; -			unsigned long ipsr;	/* CR16 */ -			unsigned long isr; -			unsigned long rsv3; -			unsigned long iip; -			unsigned long ifa; -			unsigned long itir; -			unsigned long iipa; -			unsigned long ifs; -			unsigned long iim;	/* CR24 */ -			unsigned long iha; -			unsigned long rsv4[38]; -			unsigned long lid;	/* CR64 */ -			unsigned long ivr; -			unsigned long tpr; -			unsigned long eoi; -			unsigned long irr[4]; -			unsigned long itv;	/* CR72 */ -			unsigned long pmv; -			unsigned long cmcv; -			unsigned long rsv5[5]; -			unsigned long lrr0;	/* CR80 */ -			unsigned long lrr1; -			unsigned long rsv6[46]; -		}; -	}; -	union { -		unsigned long reserved5[128]; -		struct { -			unsigned long precover_ifs; -			unsigned long unat;	/* not sure if this is needed -						   until NaT arch is done */ -			int interrupt_collection_enabled; /* virtual psr.ic */ - -			/* virtual interrupt deliverable flag is -			 * evtchn_upcall_mask in shared info area now. -			 * interrupt_mask_addr is the address -			 * of evtchn_upcall_mask for current vcpu -			 */ -			unsigned char *interrupt_mask_addr; -			int pending_interruption; -			unsigned char vpsr_pp; -			unsigned char vpsr_dfh; -			unsigned char hpsr_dfh; -			unsigned char hpsr_mfh; -			unsigned long reserved5_1[4]; -			int metaphysical_mode;	/* 1 = use metaphys mapping -						   0 = use virtual */ -			int banknum;		/* 0 or 1, which virtual -						   register bank is active */ -			unsigned long rrs[8];	/* region registers */ -			unsigned long krs[8];	/* kernel registers */ -			unsigned long tmp[16];	/* temp registers -						   (e.g. for hyperprivops) */ - -			/* itc paravirtualization -			 * vAR.ITC = mAR.ITC + itc_offset -			 * itc_last is one which was lastly passed to -			 * the guest OS in order to prevent it from -			 * going backwords. -			 */ -			unsigned long itc_offset; -			unsigned long itc_last; -		}; -	}; -}; - -struct arch_vcpu_info { -	/* nothing */ -}; - -/* - * This structure is used for magic page in domain pseudo physical address - * space and the result of XENMEM_machine_memory_map. - * As the XENMEM_machine_memory_map result, - * xen_memory_map::nr_entries indicates the size in bytes - * including struct xen_ia64_memmap_info. Not the number of entries. - */ -struct xen_ia64_memmap_info { -	uint64_t efi_memmap_size;	/* size of EFI memory map */ -	uint64_t efi_memdesc_size;	/* size of an EFI memory map -					 * descriptor */ -	uint32_t efi_memdesc_version;	/* memory descriptor version */ -	void *memdesc[0];		/* array of efi_memory_desc_t */ -}; - -struct arch_shared_info { -	/* PFN of the start_info page.	*/ -	unsigned long start_info_pfn; - -	/* Interrupt vector for event channel.	*/ -	int evtchn_vector; - -	/* PFN of memmap_info page */ -	unsigned int memmap_info_num_pages;	/* currently only = 1 case is -						   supported. */ -	unsigned long memmap_info_pfn; - -	uint64_t pad[31]; -}; - -struct xen_callback { -	unsigned long ip; -}; -typedef struct xen_callback xen_callback_t; - -#endif /* !__ASSEMBLY__ */ - -/* Size of the shared_info area (this is not related to page size).  */ -#define XSI_SHIFT			14 -#define XSI_SIZE			(1 << XSI_SHIFT) -/* Log size of mapped_regs area (64 KB - only 4KB is used).  */ -#define XMAPPEDREGS_SHIFT		12 -#define XMAPPEDREGS_SIZE		(1 << XMAPPEDREGS_SHIFT) -/* Offset of XASI (Xen arch shared info) wrt XSI_BASE.	*/ -#define XMAPPEDREGS_OFS			XSI_SIZE - -/* Hyperprivops.  */ -#define HYPERPRIVOP_START		0x1 -#define HYPERPRIVOP_RFI			(HYPERPRIVOP_START + 0x0) -#define HYPERPRIVOP_RSM_DT		(HYPERPRIVOP_START + 0x1) -#define HYPERPRIVOP_SSM_DT		(HYPERPRIVOP_START + 0x2) -#define HYPERPRIVOP_COVER		(HYPERPRIVOP_START + 0x3) -#define HYPERPRIVOP_ITC_D		(HYPERPRIVOP_START + 0x4) -#define HYPERPRIVOP_ITC_I		(HYPERPRIVOP_START + 0x5) -#define HYPERPRIVOP_SSM_I		(HYPERPRIVOP_START + 0x6) -#define HYPERPRIVOP_GET_IVR		(HYPERPRIVOP_START + 0x7) -#define HYPERPRIVOP_GET_TPR		(HYPERPRIVOP_START + 0x8) -#define HYPERPRIVOP_SET_TPR		(HYPERPRIVOP_START + 0x9) -#define HYPERPRIVOP_EOI			(HYPERPRIVOP_START + 0xa) -#define HYPERPRIVOP_SET_ITM		(HYPERPRIVOP_START + 0xb) -#define HYPERPRIVOP_THASH		(HYPERPRIVOP_START + 0xc) -#define HYPERPRIVOP_PTC_GA		(HYPERPRIVOP_START + 0xd) -#define HYPERPRIVOP_ITR_D		(HYPERPRIVOP_START + 0xe) -#define HYPERPRIVOP_GET_RR		(HYPERPRIVOP_START + 0xf) -#define HYPERPRIVOP_SET_RR		(HYPERPRIVOP_START + 0x10) -#define HYPERPRIVOP_SET_KR		(HYPERPRIVOP_START + 0x11) -#define HYPERPRIVOP_FC			(HYPERPRIVOP_START + 0x12) -#define HYPERPRIVOP_GET_CPUID		(HYPERPRIVOP_START + 0x13) -#define HYPERPRIVOP_GET_PMD		(HYPERPRIVOP_START + 0x14) -#define HYPERPRIVOP_GET_EFLAG		(HYPERPRIVOP_START + 0x15) -#define HYPERPRIVOP_SET_EFLAG		(HYPERPRIVOP_START + 0x16) -#define HYPERPRIVOP_RSM_BE		(HYPERPRIVOP_START + 0x17) -#define HYPERPRIVOP_GET_PSR		(HYPERPRIVOP_START + 0x18) -#define HYPERPRIVOP_SET_RR0_TO_RR4	(HYPERPRIVOP_START + 0x19) -#define HYPERPRIVOP_MAX			(0x1a) - -/* Fast and light hypercalls.  */ -#define __HYPERVISOR_ia64_fast_eoi	__HYPERVISOR_arch_1 - -/* Xencomm macros.  */ -#define XENCOMM_INLINE_MASK		0xf800000000000000UL -#define XENCOMM_INLINE_FLAG		0x8000000000000000UL - -#ifndef __ASSEMBLY__ - -/* - * Optimization features. - * The hypervisor may do some special optimizations for guests. This hypercall - * can be used to switch on/of these special optimizations. - */ -#define __HYPERVISOR_opt_feature	0x700UL - -#define XEN_IA64_OPTF_OFF		0x0 -#define XEN_IA64_OPTF_ON		0x1 - -/* - * If this feature is switched on, the hypervisor inserts the - * tlb entries without calling the guests traphandler. - * This is useful in guests using region 7 for identity mapping - * like the linux kernel does. - */ -#define XEN_IA64_OPTF_IDENT_MAP_REG7	1 - -/* Identity mapping of region 4 addresses in HVM. */ -#define XEN_IA64_OPTF_IDENT_MAP_REG4	2 - -/* Identity mapping of region 5 addresses in HVM. */ -#define XEN_IA64_OPTF_IDENT_MAP_REG5	3 - -#define XEN_IA64_OPTF_IDENT_MAP_NOT_SET	 (0) - -struct xen_ia64_opt_feature { -	unsigned long cmd;	/* Which feature */ -	unsigned char on;	/* Switch feature on/off */ -	union { -		struct { -			/* The page protection bit mask of the pte. -			 * This will be or'ed with the pte. */ -			unsigned long pgprot; -			unsigned long key;	/* A protection key for itir.*/ -		}; -	}; -}; - -#endif /* __ASSEMBLY__ */ - -#endif /* _ASM_IA64_XEN_INTERFACE_H */ diff --git a/arch/ia64/include/asm/xen/irq.h b/arch/ia64/include/asm/xen/irq.h deleted file mode 100644 index a9045098300..00000000000 --- a/arch/ia64/include/asm/xen/irq.h +++ /dev/null @@ -1,44 +0,0 @@ -/****************************************************************************** - * arch/ia64/include/asm/xen/irq.h - * - * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp> - *                    VA Linux Systems Japan K.K. - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - * - */ - -#ifndef _ASM_IA64_XEN_IRQ_H -#define _ASM_IA64_XEN_IRQ_H - -/* - * The flat IRQ space is divided into two regions: - *  1. A one-to-one mapping of real physical IRQs. This space is only used - *     if we have physical device-access privilege. This region is at the - *     start of the IRQ space so that existing device drivers do not need - *     to be modified to translate physical IRQ numbers into our IRQ space. - *  3. A dynamic mapping of inter-domain and Xen-sourced virtual IRQs. These - *     are bound using the provided bind/unbind functions. - */ - -#define XEN_PIRQ_BASE		0 -#define XEN_NR_PIRQS		256 - -#define XEN_DYNIRQ_BASE		(XEN_PIRQ_BASE + XEN_NR_PIRQS) -#define XEN_NR_DYNIRQS		(NR_CPUS * 8) - -#define XEN_NR_IRQS		(XEN_NR_PIRQS + XEN_NR_DYNIRQS) - -#endif /* _ASM_IA64_XEN_IRQ_H */ diff --git a/arch/ia64/include/asm/xen/minstate.h b/arch/ia64/include/asm/xen/minstate.h deleted file mode 100644 index c57fa910f2c..00000000000 --- a/arch/ia64/include/asm/xen/minstate.h +++ /dev/null @@ -1,143 +0,0 @@ - -#ifdef CONFIG_VIRT_CPU_ACCOUNTING -/* read ar.itc in advance, and use it before leaving bank 0 */ -#define XEN_ACCOUNT_GET_STAMP		\ -	MOV_FROM_ITC(pUStk, p6, r20, r2); -#else -#define XEN_ACCOUNT_GET_STAMP -#endif - -/* - * DO_SAVE_MIN switches to the kernel stacks (if necessary) and saves - * the minimum state necessary that allows us to turn psr.ic back - * on. - * - * Assumed state upon entry: - *	psr.ic: off - *	r31:	contains saved predicates (pr) - * - * Upon exit, the state is as follows: - *	psr.ic: off - *	 r2 = points to &pt_regs.r16 - *	 r8 = contents of ar.ccv - *	 r9 = contents of ar.csd - *	r10 = contents of ar.ssd - *	r11 = FPSR_DEFAULT - *	r12 = kernel sp (kernel virtual address) - *	r13 = points to current task_struct (kernel virtual address) - *	p15 = TRUE if psr.i is set in cr.ipsr - *	predicate registers (other than p2, p3, and p15), b6, r3, r14, r15: - *		preserved - * CONFIG_XEN note: p6/p7 are not preserved - * - * Note that psr.ic is NOT turned on by this macro.  This is so that - * we can pass interruption state as arguments to a handler. - */ -#define XEN_DO_SAVE_MIN(__COVER,SAVE_IFS,EXTRA,WORKAROUND)					\ -	mov r16=IA64_KR(CURRENT);	/* M */							\ -	mov r27=ar.rsc;			/* M */							\ -	mov r20=r1;			/* A */							\ -	mov r25=ar.unat;		/* M */							\ -	MOV_FROM_IPSR(p0,r29);		/* M */							\ -	MOV_FROM_IIP(r28);		/* M */							\ -	mov r21=ar.fpsr;		/* M */							\ -	mov r26=ar.pfs;			/* I */							\ -	__COVER;			/* B;; (or nothing) */					\ -	adds r16=IA64_TASK_THREAD_ON_USTACK_OFFSET,r16;						\ -	;;											\ -	ld1 r17=[r16];				/* load current->thread.on_ustack flag */	\ -	st1 [r16]=r0;				/* clear current->thread.on_ustack flag */	\ -	adds r1=-IA64_TASK_THREAD_ON_USTACK_OFFSET,r16						\ -	/* switch from user to kernel RBS: */							\ -	;;											\ -	invala;				/* M */							\ -	/* SAVE_IFS;*/ /* see xen special handling below */					\ -	cmp.eq pKStk,pUStk=r0,r17;		/* are we in kernel mode already? */		\ -	;;											\ -(pUStk)	mov ar.rsc=0;		/* set enforced lazy mode, pl 0, little-endian, loadrs=0 */	\ -	;;											\ -(pUStk)	mov.m r24=ar.rnat;									\ -(pUStk)	addl r22=IA64_RBS_OFFSET,r1;			/* compute base of RBS */		\ -(pKStk) mov r1=sp;					/* get sp  */				\ -	;;											\ -(pUStk) lfetch.fault.excl.nt1 [r22];								\ -(pUStk)	addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r1;	/* compute base of memory stack */	\ -(pUStk)	mov r23=ar.bspstore;				/* save ar.bspstore */			\ -	;;											\ -(pUStk)	mov ar.bspstore=r22;				/* switch to kernel RBS */		\ -(pKStk) addl r1=-IA64_PT_REGS_SIZE,r1;			/* if in kernel mode, use sp (r12) */	\ -	;;											\ -(pUStk)	mov r18=ar.bsp;										\ -(pUStk)	mov ar.rsc=0x3;		/* set eager mode, pl 0, little-endian, loadrs=0 */		\ -	adds r17=2*L1_CACHE_BYTES,r1;		/* really: biggest cache-line size */		\ -	adds r16=PT(CR_IPSR),r1;								\ -	;;											\ -	lfetch.fault.excl.nt1 [r17],L1_CACHE_BYTES;						\ -	st8 [r16]=r29;		/* save cr.ipsr */						\ -	;;											\ -	lfetch.fault.excl.nt1 [r17];								\ -	tbit.nz p15,p0=r29,IA64_PSR_I_BIT;							\ -	mov r29=b0										\ -	;;											\ -	WORKAROUND;										\ -	adds r16=PT(R8),r1;	/* initialize first base pointer */				\ -	adds r17=PT(R9),r1;	/* initialize second base pointer */				\ -(pKStk)	mov r18=r0;		/* make sure r18 isn't NaT */					\ -	;;											\ -.mem.offset 0,0; st8.spill [r16]=r8,16;								\ -.mem.offset 8,0; st8.spill [r17]=r9,16;								\ -        ;;											\ -.mem.offset 0,0; st8.spill [r16]=r10,24;							\ -	movl r8=XSI_PRECOVER_IFS;								\ -.mem.offset 8,0; st8.spill [r17]=r11,24;							\ -        ;;											\ -	/* xen special handling for possibly lazy cover */					\ -	/* SAVE_MIN case in dispatch_ia32_handler: mov r30=r0 */				\ -	ld8 r30=[r8];										\ -(pUStk)	sub r18=r18,r22;	/* r18=RSE.ndirty*8 */						\ -	st8 [r16]=r28,16;	/* save cr.iip */						\ -	;;											\ -	st8 [r17]=r30,16;	/* save cr.ifs */						\ -	mov r8=ar.ccv;										\ -	mov r9=ar.csd;										\ -	mov r10=ar.ssd;										\ -	movl r11=FPSR_DEFAULT;   /* L-unit */							\ -	;;											\ -	st8 [r16]=r25,16;	/* save ar.unat */						\ -	st8 [r17]=r26,16;	/* save ar.pfs */						\ -	shl r18=r18,16;		/* compute ar.rsc to be used for "loadrs" */			\ -	;;											\ -	st8 [r16]=r27,16;	/* save ar.rsc */						\ -(pUStk)	st8 [r17]=r24,16;	/* save ar.rnat */						\ -(pKStk)	adds r17=16,r17;	/* skip over ar_rnat field */					\ -	;;			/* avoid RAW on r16 & r17 */					\ -(pUStk)	st8 [r16]=r23,16;	/* save ar.bspstore */						\ -	st8 [r17]=r31,16;	/* save predicates */						\ -(pKStk)	adds r16=16,r16;	/* skip over ar_bspstore field */				\ -	;;											\ -	st8 [r16]=r29,16;	/* save b0 */							\ -	st8 [r17]=r18,16;	/* save ar.rsc value for "loadrs" */				\ -	cmp.eq pNonSys,pSys=r0,r0	/* initialize pSys=0, pNonSys=1 */			\ -	;;											\ -.mem.offset 0,0; st8.spill [r16]=r20,16;	/* save original r1 */				\ -.mem.offset 8,0; st8.spill [r17]=r12,16;							\ -	adds r12=-16,r1;	/* switch to kernel memory stack (with 16 bytes of scratch) */	\ -	;;											\ -.mem.offset 0,0; st8.spill [r16]=r13,16;							\ -.mem.offset 8,0; st8.spill [r17]=r21,16;	/* save ar.fpsr */				\ -	mov r13=IA64_KR(CURRENT);	/* establish `current' */				\ -	;;											\ -.mem.offset 0,0; st8.spill [r16]=r15,16;							\ -.mem.offset 8,0; st8.spill [r17]=r14,16;							\ -	;;											\ -.mem.offset 0,0; st8.spill [r16]=r2,16;								\ -.mem.offset 8,0; st8.spill [r17]=r3,16;								\ -	XEN_ACCOUNT_GET_STAMP									\ -	adds r2=IA64_PT_REGS_R16_OFFSET,r1;							\ -	;;											\ -	EXTRA;											\ -	movl r1=__gp;		/* establish kernel global pointer */				\ -	;;											\ -	ACCOUNT_SYS_ENTER									\ -	BSW_1(r3,r14);	/* switch back to bank 1 (must be last in insn group) */		\ -	;; diff --git a/arch/ia64/include/asm/xen/page.h b/arch/ia64/include/asm/xen/page.h deleted file mode 100644 index 03441a780b5..00000000000 --- a/arch/ia64/include/asm/xen/page.h +++ /dev/null @@ -1,65 +0,0 @@ -/****************************************************************************** - * arch/ia64/include/asm/xen/page.h - * - * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp> - *                    VA Linux Systems Japan K.K. - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - * - */ - -#ifndef _ASM_IA64_XEN_PAGE_H -#define _ASM_IA64_XEN_PAGE_H - -#define INVALID_P2M_ENTRY	(~0UL) - -static inline unsigned long mfn_to_pfn(unsigned long mfn) -{ -	return mfn; -} - -static inline unsigned long pfn_to_mfn(unsigned long pfn) -{ -	return pfn; -} - -#define phys_to_machine_mapping_valid(_x)	(1) - -static inline void *mfn_to_virt(unsigned long mfn) -{ -	return __va(mfn << PAGE_SHIFT); -} - -static inline unsigned long virt_to_mfn(void *virt) -{ -	return __pa(virt) >> PAGE_SHIFT; -} - -/* for tpmfront.c */ -static inline unsigned long virt_to_machine(void *virt) -{ -	return __pa(virt); -} - -static inline void set_phys_to_machine(unsigned long pfn, unsigned long mfn) -{ -	/* nothing */ -} - -#define pte_mfn(_x)	pte_pfn(_x) -#define mfn_pte(_x, _y)	__pte_ma(0)		/* unmodified use */ -#define __pte_ma(_x)	((pte_t) {(_x)})        /* unmodified use */ - -#endif /* _ASM_IA64_XEN_PAGE_H */ diff --git a/arch/ia64/include/asm/xen/patchlist.h b/arch/ia64/include/asm/xen/patchlist.h deleted file mode 100644 index eae944e8884..00000000000 --- a/arch/ia64/include/asm/xen/patchlist.h +++ /dev/null @@ -1,38 +0,0 @@ -/****************************************************************************** - * arch/ia64/include/asm/xen/patchlist.h - * - * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp> - *                    VA Linux Systems Japan K.K. - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - * - */ - -#define __paravirt_start_gate_fsyscall_patchlist		\ -	__xen_start_gate_fsyscall_patchlist -#define __paravirt_end_gate_fsyscall_patchlist			\ -	__xen_end_gate_fsyscall_patchlist -#define __paravirt_start_gate_brl_fsys_bubble_down_patchlist	\ -	__xen_start_gate_brl_fsys_bubble_down_patchlist -#define __paravirt_end_gate_brl_fsys_bubble_down_patchlist	\ -	__xen_end_gate_brl_fsys_bubble_down_patchlist -#define __paravirt_start_gate_vtop_patchlist			\ -	__xen_start_gate_vtop_patchlist -#define __paravirt_end_gate_vtop_patchlist			\ -	__xen_end_gate_vtop_patchlist -#define __paravirt_start_gate_mckinley_e9_patchlist		\ -	__xen_start_gate_mckinley_e9_patchlist -#define __paravirt_end_gate_mckinley_e9_patchlist		\ -	__xen_end_gate_mckinley_e9_patchlist diff --git a/arch/ia64/include/asm/xen/privop.h b/arch/ia64/include/asm/xen/privop.h deleted file mode 100644 index fb4ec5e0b06..00000000000 --- a/arch/ia64/include/asm/xen/privop.h +++ /dev/null @@ -1,135 +0,0 @@ -#ifndef _ASM_IA64_XEN_PRIVOP_H -#define _ASM_IA64_XEN_PRIVOP_H - -/* - * Copyright (C) 2005 Hewlett-Packard Co - *	Dan Magenheimer <dan.magenheimer@hp.com> - * - * Paravirtualizations of privileged operations for Xen/ia64 - * - * - * inline privop and paravirt_alt support - * Copyright (c) 2007 Isaku Yamahata <yamahata at valinux co jp> - *                    VA Linux Systems Japan K.K. - * - */ - -#ifndef __ASSEMBLY__ -#include <linux/types.h>		/* arch-ia64.h requires uint64_t */ -#endif -#include <asm/xen/interface.h> - -/* At 1 MB, before per-cpu space but still addressable using addl instead -   of movl. */ -#define XSI_BASE			0xfffffffffff00000 - -/* Address of mapped regs.  */ -#define XMAPPEDREGS_BASE		(XSI_BASE + XSI_SIZE) - -#ifdef __ASSEMBLY__ -#define XEN_HYPER_RFI			break HYPERPRIVOP_RFI -#define XEN_HYPER_RSM_PSR_DT		break HYPERPRIVOP_RSM_DT -#define XEN_HYPER_SSM_PSR_DT		break HYPERPRIVOP_SSM_DT -#define XEN_HYPER_COVER			break HYPERPRIVOP_COVER -#define XEN_HYPER_ITC_D			break HYPERPRIVOP_ITC_D -#define XEN_HYPER_ITC_I			break HYPERPRIVOP_ITC_I -#define XEN_HYPER_SSM_I			break HYPERPRIVOP_SSM_I -#define XEN_HYPER_GET_IVR		break HYPERPRIVOP_GET_IVR -#define XEN_HYPER_THASH			break HYPERPRIVOP_THASH -#define XEN_HYPER_ITR_D			break HYPERPRIVOP_ITR_D -#define XEN_HYPER_SET_KR		break HYPERPRIVOP_SET_KR -#define XEN_HYPER_GET_PSR		break HYPERPRIVOP_GET_PSR -#define XEN_HYPER_SET_RR0_TO_RR4	break HYPERPRIVOP_SET_RR0_TO_RR4 - -#define XSI_IFS				(XSI_BASE + XSI_IFS_OFS) -#define XSI_PRECOVER_IFS		(XSI_BASE + XSI_PRECOVER_IFS_OFS) -#define XSI_IFA				(XSI_BASE + XSI_IFA_OFS) -#define XSI_ISR				(XSI_BASE + XSI_ISR_OFS) -#define XSI_IIM				(XSI_BASE + XSI_IIM_OFS) -#define XSI_ITIR			(XSI_BASE + XSI_ITIR_OFS) -#define XSI_PSR_I_ADDR			(XSI_BASE + XSI_PSR_I_ADDR_OFS) -#define XSI_PSR_IC			(XSI_BASE + XSI_PSR_IC_OFS) -#define XSI_IPSR			(XSI_BASE + XSI_IPSR_OFS) -#define XSI_IIP				(XSI_BASE + XSI_IIP_OFS) -#define XSI_B1NAT			(XSI_BASE + XSI_B1NATS_OFS) -#define XSI_BANK1_R16			(XSI_BASE + XSI_BANK1_R16_OFS) -#define XSI_BANKNUM			(XSI_BASE + XSI_BANKNUM_OFS) -#define XSI_IHA				(XSI_BASE + XSI_IHA_OFS) -#define XSI_ITC_OFFSET			(XSI_BASE + XSI_ITC_OFFSET_OFS) -#define XSI_ITC_LAST			(XSI_BASE + XSI_ITC_LAST_OFS) -#endif - -#ifndef __ASSEMBLY__ - -/************************************************/ -/* Instructions paravirtualized for correctness */ -/************************************************/ - -/* "fc" and "thash" are privilege-sensitive instructions, meaning they - *  may have different semantics depending on whether they are executed - *  at PL0 vs PL!=0.  When paravirtualized, these instructions mustn't - *  be allowed to execute directly, lest incorrect semantics result. */ -extern void xen_fc(void *addr); -extern unsigned long xen_thash(unsigned long addr); - -/* Note that "ttag" and "cover" are also privilege-sensitive; "ttag" - * is not currently used (though it may be in a long-format VHPT system!) - * and the semantics of cover only change if psr.ic is off which is very - * rare (and currently non-existent outside of assembly code */ - -/* There are also privilege-sensitive registers.  These registers are - * readable at any privilege level but only writable at PL0. */ -extern unsigned long xen_get_cpuid(int index); -extern unsigned long xen_get_pmd(int index); - -#ifndef ASM_SUPPORTED -extern unsigned long xen_get_eflag(void);	/* see xen_ia64_getreg */ -extern void xen_set_eflag(unsigned long);	/* see xen_ia64_setreg */ -#endif - -/************************************************/ -/* Instructions paravirtualized for performance */ -/************************************************/ - -/* Xen uses memory-mapped virtual privileged registers for access to many - * performance-sensitive privileged registers.  Some, like the processor - * status register (psr), are broken up into multiple memory locations. - * Others, like "pend", are abstractions based on privileged registers. - * "Pend" is guaranteed to be set if reading cr.ivr would return a - * (non-spurious) interrupt. */ -#define XEN_MAPPEDREGS ((struct mapped_regs *)XMAPPEDREGS_BASE) - -#define XSI_PSR_I			\ -	(*XEN_MAPPEDREGS->interrupt_mask_addr) -#define xen_get_virtual_psr_i()		\ -	(!XSI_PSR_I) -#define xen_set_virtual_psr_i(_val)	\ -	({ XSI_PSR_I = (uint8_t)(_val) ? 0 : 1; }) -#define xen_set_virtual_psr_ic(_val)	\ -	({ XEN_MAPPEDREGS->interrupt_collection_enabled = _val ? 1 : 0; }) -#define xen_get_virtual_pend()		\ -	(*(((uint8_t *)XEN_MAPPEDREGS->interrupt_mask_addr) - 1)) - -#ifndef ASM_SUPPORTED -/* Although all privileged operations can be left to trap and will - * be properly handled by Xen, some are frequent enough that we use - * hyperprivops for performance. */ -extern unsigned long xen_get_psr(void); -extern unsigned long xen_get_ivr(void); -extern unsigned long xen_get_tpr(void); -extern void xen_hyper_ssm_i(void); -extern void xen_set_itm(unsigned long); -extern void xen_set_tpr(unsigned long); -extern void xen_eoi(unsigned long); -extern unsigned long xen_get_rr(unsigned long index); -extern void xen_set_rr(unsigned long index, unsigned long val); -extern void xen_set_rr0_to_rr4(unsigned long val0, unsigned long val1, -			       unsigned long val2, unsigned long val3, -			       unsigned long val4); -extern void xen_set_kr(unsigned long index, unsigned long val); -extern void xen_ptcga(unsigned long addr, unsigned long size); -#endif /* !ASM_SUPPORTED */ - -#endif /* !__ASSEMBLY__ */ - -#endif /* _ASM_IA64_XEN_PRIVOP_H */ diff --git a/arch/ia64/include/asm/xen/xcom_hcall.h b/arch/ia64/include/asm/xen/xcom_hcall.h deleted file mode 100644 index 20b2950c71b..00000000000 --- a/arch/ia64/include/asm/xen/xcom_hcall.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2006 Tristan Gingold <tristan.gingold@bull.net>, Bull SAS - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA - */ - -#ifndef _ASM_IA64_XEN_XCOM_HCALL_H -#define _ASM_IA64_XEN_XCOM_HCALL_H - -/* These function creates inline or mini descriptor for the parameters and -   calls the corresponding xencomm_arch_hypercall_X. -   Architectures should defines HYPERVISOR_xxx as xencomm_hypercall_xxx unless -   they want to use their own wrapper.  */ -extern int xencomm_hypercall_console_io(int cmd, int count, char *str); - -extern int xencomm_hypercall_event_channel_op(int cmd, void *op); - -extern int xencomm_hypercall_xen_version(int cmd, void *arg); - -extern int xencomm_hypercall_physdev_op(int cmd, void *op); - -extern int xencomm_hypercall_grant_table_op(unsigned int cmd, void *op, -					    unsigned int count); - -extern int xencomm_hypercall_sched_op(int cmd, void *arg); - -extern int xencomm_hypercall_multicall(void *call_list, int nr_calls); - -extern int xencomm_hypercall_callback_op(int cmd, void *arg); - -extern int xencomm_hypercall_memory_op(unsigned int cmd, void *arg); - -extern int xencomm_hypercall_suspend(unsigned long srec); - -extern long xencomm_hypercall_vcpu_op(int cmd, int cpu, void *arg); - -extern long xencomm_hypercall_opt_feature(void *arg); - -#endif /* _ASM_IA64_XEN_XCOM_HCALL_H */ diff --git a/arch/ia64/include/asm/xen/xencomm.h b/arch/ia64/include/asm/xen/xencomm.h deleted file mode 100644 index cded677bebf..00000000000 --- a/arch/ia64/include/asm/xen/xencomm.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2006 Hollis Blanchard <hollisb@us.ibm.com>, IBM Corporation - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA - */ - -#ifndef _ASM_IA64_XEN_XENCOMM_H -#define _ASM_IA64_XEN_XENCOMM_H - -#include <xen/xencomm.h> -#include <asm/pgtable.h> - -/* Must be called before any hypercall.  */ -extern void xencomm_initialize(void); -extern int xencomm_is_initialized(void); - -/* Check if virtual contiguity means physical contiguity - * where the passed address is a pointer value in virtual address. - * On ia64, identity mapping area in region 7 or the piece of region 5 - * that is mapped by itr[IA64_TR_KERNEL]/dtr[IA64_TR_KERNEL] - */ -static inline int xencomm_is_phys_contiguous(unsigned long addr) -{ -	return (PAGE_OFFSET <= addr && -		addr < (PAGE_OFFSET + (1UL << IA64_MAX_PHYS_BITS))) || -		(KERNEL_START <= addr && -		 addr < KERNEL_START + KERNEL_TR_PAGE_SIZE); -} - -#endif /* _ASM_IA64_XEN_XENCOMM_H */  | 
