summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/asm-ia64/gcc_intrin.h14
-rw-r--r--include/asm-ia64/ia32.h10
-rw-r--r--include/asm-ia64/irq.h6
-rw-r--r--include/asm-ia64/pgtable.h6
-rw-r--r--include/asm-ia64/processor.h5
-rw-r--r--include/asm-ia64/sn/module.h2
-rw-r--r--include/asm-ia64/sn/sn_sal.h34
-rw-r--r--include/asm-ia64/system.h2
-rw-r--r--include/asm-ia64/unistd.h3
9 files changed, 68 insertions, 14 deletions
diff --git a/include/asm-ia64/gcc_intrin.h b/include/asm-ia64/gcc_intrin.h
index d3d94e85c8eb..7d2b1e4cd0f9 100644
--- a/include/asm-ia64/gcc_intrin.h
+++ b/include/asm-ia64/gcc_intrin.h
@@ -489,10 +489,16 @@ register unsigned long ia64_r13 asm ("r13") __attribute_used__;
#define ia64_ptce(addr) asm volatile ("ptc.e %0" :: "r"(addr))
#define ia64_ptcga(addr, size) \
- asm volatile ("ptc.ga %0,%1" :: "r"(addr), "r"(size) : "memory")
+do { \
+ asm volatile ("ptc.ga %0,%1" :: "r"(addr), "r"(size) : "memory"); \
+ ia64_dv_serialize_data(); \
+} while (0)
-#define ia64_ptcl(addr, size) \
- asm volatile ("ptc.l %0,%1" :: "r"(addr), "r"(size) : "memory")
+#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")
@@ -581,7 +587,7 @@ register unsigned long ia64_r13 asm ("r13") __attribute_used__;
#define ia64_intrin_local_irq_restore(x) \
do { \
- asm volatile (" cmp.ne p6,p7=%0,r0;;" \
+ asm volatile (";; cmp.ne p6,p7=%0,r0;;" \
"(p6) ssm psr.i;" \
"(p7) rsm psr.i;;" \
"(p6) srlz.d" \
diff --git a/include/asm-ia64/ia32.h b/include/asm-ia64/ia32.h
index 75dd0d334b99..4fa4b8e12000 100644
--- a/include/asm-ia64/ia32.h
+++ b/include/asm-ia64/ia32.h
@@ -6,7 +6,8 @@
#include <asm/ptrace.h>
#include <asm/signal.h>
-#define IA32_NR_syscalls 283 /* length of syscall table */
+#define IA32_NR_syscalls 283 /* length of syscall table */
+#define IA32_PAGE_SHIFT 12 /* 4KB pages */
#ifndef __ASSEMBLY__
@@ -24,6 +25,13 @@ extern int ia32_clone_tls (struct task_struct *child, struct pt_regs *childregs)
/* Declare this unconditionally, so we don't get warnings for unreachable code. */
extern int ia32_setup_frame1 (int sig, struct k_sigaction *ka, siginfo_t *info,
sigset_t *set, struct pt_regs *regs);
+#if PAGE_SHIFT > IA32_PAGE_SHIFT
+extern int ia32_copy_partial_page_list (struct task_struct *, unsigned long);
+extern void ia32_drop_partial_page_list (struct task_struct *);
+#else
+# define ia32_copy_partial_page_list(a1, a2) 0
+# define ia32_drop_partial_page_list(a1) do { ; } while (0)
+#endif
#endif /* !__ASSEMBLY__ */
diff --git a/include/asm-ia64/irq.h b/include/asm-ia64/irq.h
index 5d930fdc0bea..bd07d11d9f37 100644
--- a/include/asm-ia64/irq.h
+++ b/include/asm-ia64/irq.h
@@ -30,6 +30,12 @@ extern void disable_irq_nosync (unsigned int);
extern void enable_irq (unsigned int);
extern void set_irq_affinity_info (unsigned int irq, int dest, int redir);
+#ifdef CONFIG_SMP
+extern void move_irq(int irq);
+#else
+#define move_irq(irq)
+#endif
+
struct irqaction;
struct pt_regs;
int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *);
diff --git a/include/asm-ia64/pgtable.h b/include/asm-ia64/pgtable.h
index 8d727c6b7836..c30329a308b4 100644
--- a/include/asm-ia64/pgtable.h
+++ b/include/asm-ia64/pgtable.h
@@ -297,11 +297,7 @@ ia64_phys_addr_valid (unsigned long addr)
* works bypasses the caches, but does allow for consecutive writes to
* be combined into single (but larger) write transactions.
*/
-#ifdef CONFIG_MCKINLEY_A0_SPECIFIC
-# define pgprot_writecombine(prot) prot
-#else
-# define pgprot_writecombine(prot) __pgprot((pgprot_val(prot) & ~_PAGE_MA_MASK) | _PAGE_MA_WC)
-#endif
+#define pgprot_writecombine(prot) __pgprot((pgprot_val(prot) & ~_PAGE_MA_MASK) | _PAGE_MA_WC)
static inline unsigned long
pgd_index (unsigned long address)
diff --git a/include/asm-ia64/processor.h b/include/asm-ia64/processor.h
index 05e9913e03b8..dec7d3fb1ba7 100644
--- a/include/asm-ia64/processor.h
+++ b/include/asm-ia64/processor.h
@@ -230,6 +230,7 @@ struct desc_struct {
#define TLS_SIZE (GDT_ENTRY_TLS_ENTRIES * 8)
+struct partial_page_list;
#endif
struct thread_struct {
@@ -251,6 +252,7 @@ struct thread_struct {
__u64 fdr; /* IA32 fp except. data reg */
__u64 old_k1; /* old value of ar.k1 */
__u64 old_iob; /* old IOBase value */
+ struct partial_page_list *ppl; /* partial page list for 4K page size issue */
/* cached TLS descriptors. */
struct desc_struct tls_array[GDT_ENTRY_TLS_ENTRIES];
@@ -260,7 +262,8 @@ struct thread_struct {
.fir = 0, \
.fdr = 0, \
.old_k1 = 0, \
- .old_iob = 0,
+ .old_iob = 0, \
+ .ppl = 0,
#else
# define INIT_THREAD_IA32
#endif /* CONFIG_IA32_SUPPORT */
diff --git a/include/asm-ia64/sn/module.h b/include/asm-ia64/sn/module.h
index b7c7dd2aba2b..172f459fc01e 100644
--- a/include/asm-ia64/sn/module.h
+++ b/include/asm-ia64/sn/module.h
@@ -180,7 +180,7 @@ struct module_s {
};
/* module.c */
-extern module_t *modules[MODULE_MAX]; /* Indexed by cmoduleid_t */
+extern module_t *sn_modules[MODULE_MAX]; /* Indexed by cmoduleid_t */
extern int nummodules;
extern module_t *module_lookup(moduleid_t id);
diff --git a/include/asm-ia64/sn/sn_sal.h b/include/asm-ia64/sn/sn_sal.h
index 0c2343152136..cc063429344f 100644
--- a/include/asm-ia64/sn/sn_sal.h
+++ b/include/asm-ia64/sn/sn_sal.h
@@ -33,6 +33,7 @@
#define SN_SAL_NO_FAULT_ZONE_VIRTUAL 0x02000010
#define SN_SAL_NO_FAULT_ZONE_PHYSICAL 0x02000011
#define SN_SAL_PRINT_ERROR 0x02000012
+#define SN_SAL_SET_ERROR_HANDLING_FEATURES 0x0200001a // reentrant
#define SN_SAL_CONSOLE_PUTC 0x02000021
#define SN_SAL_CONSOLE_GETC 0x02000022
#define SN_SAL_CONSOLE_PUTS 0x02000023
@@ -92,6 +93,19 @@
#define SALRET_INVALID_ARG -2
#define SALRET_ERROR -3
+/*
+ * SN_SAL_SET_ERROR_HANDLING_FEATURES bit settings
+ */
+enum
+{
+ /* if "rz always" is set, have the mca slaves call os_init_slave */
+ SN_SAL_EHF_MCA_SLV_TO_OS_INIT_SLV=0,
+ /* do not rz on tlb checks, even if "rz always" is set */
+ SN_SAL_EHF_NO_RZ_TLBC,
+ /* do not rz on PIO reads to I/O space, even if "rz always" is set */
+ SN_SAL_EHF_NO_RZ_IO_READ,
+};
+
/**
* sn_sal_rev_major - get the major SGI SAL revision number
@@ -670,4 +684,24 @@ ia64_sn_sysctl_iobrick_pci_op(nasid_t n, u64 connection_type,
return 0;
}
+/*
+ * Tell the prom how the OS wants to handle specific error features.
+ * It takes an array of 7 u64.
+ */
+static inline u64
+ia64_sn_set_error_handling_features(const u64 *feature_bits)
+{
+ struct ia64_sal_retval rv = {0, 0, 0, 0};
+
+ SAL_CALL_REENTRANT(rv, SN_SAL_SET_ERROR_HANDLING_FEATURES,
+ feature_bits[0],
+ feature_bits[1],
+ feature_bits[2],
+ feature_bits[3],
+ feature_bits[4],
+ feature_bits[5],
+ feature_bits[6]);
+ return rv.status;
+}
+
#endif /* _ASM_IA64_SN_SN_SAL_H */
diff --git a/include/asm-ia64/system.h b/include/asm-ia64/system.h
index 57c7db10a42e..83b2c1bc0ffe 100644
--- a/include/asm-ia64/system.h
+++ b/include/asm-ia64/system.h
@@ -171,7 +171,7 @@ do { \
# define local_irq_restore(x) __local_irq_restore(x)
#endif /* !CONFIG_IA64_DEBUG_IRQ */
-#define local_irq_enable() ({ ia64_ssm(IA64_PSR_I); ia64_srlz_d(); })
+#define local_irq_enable() ({ ia64_stop(); ia64_ssm(IA64_PSR_I); ia64_srlz_d(); })
#define local_save_flags(flags) ({ ia64_stop(); (flags) = ia64_getreg(_IA64_REG_PSR); })
#define irqs_disabled() \
diff --git a/include/asm-ia64/unistd.h b/include/asm-ia64/unistd.h
index ca3c7b958b1e..d46f47f9707e 100644
--- a/include/asm-ia64/unistd.h
+++ b/include/asm-ia64/unistd.h
@@ -266,6 +266,8 @@
#define NR_syscalls 256 /* length of syscall table */
+#define __ARCH_WANT_SYS_RT_SIGACTION
+
#ifdef CONFIG_IA32_SUPPORT
# define __ARCH_WANT_SYS_FADVISE64
# define __ARCH_WANT_SYS_GETPGRP
@@ -275,7 +277,6 @@
# define __ARCH_WANT_SYS_OLDUMOUNT
# define __ARCH_WANT_SYS_SIGPENDING
# define __ARCH_WANT_SYS_SIGPROCMASK
-# define __ARCH_WANT_SYS_RT_SIGACTION
#endif
#if !defined(__ASSEMBLY__) && !defined(ASSEMBLER)