summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAndi Kleen <ak@muc.de>2003-01-15 19:36:37 -0800
committerChristoph Hellwig <hch@sgi.com>2003-01-15 19:36:37 -0800
commitcf34d92350569ae3840b43dd70577a596ec9dd33 (patch)
tree4a73351d8a576e9d168956dc977e1957d79a26ca /include
parent188db2b969962bf592f7e31fbbdbed1ed3e8d74d (diff)
[PATCH] x86_64 update
x86-64 updates for 2.5.58. Changes only x86-64 specific files. - Rewrote module allocation. Lots of bugs fixed. Module loading should work now again. - Kconfig help fixes from Randy Dunlap - Makefile cleanups from Pavel Machek and Sam Ravnborg - Assembly cleanups from Pavel - defconfig update - Better strlen_user/strnlen_user - Merge with i386: new ptrace commands, 32bit vsyscall signal trampolines new deactivate_mm, add asm/bug.h - Make sure initramfs is freed after booting (thanks to Kai for the hint) - User per cpu data for profile counters (Ravikiran Thirumalai) - 32bit compat_* updates from Stephen Rothwell - Fix race in context switch. The exception handler for bogus segment loads in __switch_to needs to keep interrupts disabled, otherwise an interrupt can deadlock on scheduler locks. Also make sure they don't printk or set oops_in_progress during printk because printk does a wake_up too. - Disable 64bit GS base changes for processes. I cannot get it to work reliably. - Clear IOPL on kernel entry
Diffstat (limited to 'include')
-rw-r--r--include/asm-x86_64/bug.h24
-rw-r--r--include/asm-x86_64/compat.h13
-rw-r--r--include/asm-x86_64/ia32.h13
-rw-r--r--include/asm-x86_64/mmu_context.h5
-rw-r--r--include/asm-x86_64/page.h16
-rw-r--r--include/asm-x86_64/proto.h6
-rw-r--r--include/asm-x86_64/ptrace.h4
-rw-r--r--include/asm-x86_64/segment.h2
-rw-r--r--include/asm-x86_64/uaccess.h2
9 files changed, 54 insertions, 31 deletions
diff --git a/include/asm-x86_64/bug.h b/include/asm-x86_64/bug.h
new file mode 100644
index 000000000000..cd37970bd4ee
--- /dev/null
+++ b/include/asm-x86_64/bug.h
@@ -0,0 +1,24 @@
+#ifndef __ASM_X8664_BUG_H
+#define __ASM_X8664_BUG_H 1
+
+#include <linux/stringify.h>
+
+/*
+ * Tell the user there is some problem. The exception handler decodes
+ * this frame.
+ */
+struct bug_frame {
+ unsigned char ud2[2];
+ /* should use 32bit offset instead, but the assembler doesn't
+ like it */
+ char *filename;
+ unsigned short line;
+} __attribute__((packed));
+
+#define BUG() \
+ asm volatile("ud2 ; .quad %c1 ; .short %c0" :: \
+ "i"(__LINE__), "i" (__stringify(KBUILD_BASENAME)))
+#define PAGE_BUG(page) BUG()
+void out_of_line_bug(void);
+
+#endif
diff --git a/include/asm-x86_64/compat.h b/include/asm-x86_64/compat.h
index 140308fb61e7..5307fdeb598c 100644
--- a/include/asm-x86_64/compat.h
+++ b/include/asm-x86_64/compat.h
@@ -68,4 +68,17 @@ struct compat_flock {
compat_pid_t l_pid;
};
+struct compat_statfs {
+ int f_type;
+ int f_bsize;
+ int f_blocks;
+ int f_bfree;
+ int f_bavail;
+ int f_files;
+ int f_ffree;
+ compat_fsid_t f_fsid;
+ int f_namelen; /* SunOS ignores this field. */
+ int f_spare[6];
+};
+
#endif /* _ASM_X86_64_COMPAT_H */
diff --git a/include/asm-x86_64/ia32.h b/include/asm-x86_64/ia32.h
index 7ebb9db48314..c39a426062ee 100644
--- a/include/asm-x86_64/ia32.h
+++ b/include/asm-x86_64/ia32.h
@@ -101,19 +101,6 @@ struct stat64 {
} __attribute__((packed));
-struct statfs32 {
- int f_type;
- int f_bsize;
- int f_blocks;
- int f_bfree;
- int f_bavail;
- int f_files;
- int f_ffree;
- compat_fsid_t f_fsid;
- int f_namelen; /* SunOS ignores this field. */
- int f_spare[6];
-};
-
typedef union sigval32 {
int sival_int;
unsigned int sival_ptr;
diff --git a/include/asm-x86_64/mmu_context.h b/include/asm-x86_64/mmu_context.h
index 296390b6b5ad..41fc9820ee94 100644
--- a/include/asm-x86_64/mmu_context.h
+++ b/include/asm-x86_64/mmu_context.h
@@ -62,7 +62,10 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
#endif
}
-#define deactivate_mm(tsk,mm) do { } while (0)
+#define deactivate_mm(tsk,mm) do { \
+ load_gs_index(0); \
+ asm volatile("movl %0,%%fs"::"r"(0)); \
+} while(0)
#define activate_mm(prev, next) \
switch_mm((prev),(next),NULL,smp_processor_id())
diff --git a/include/asm-x86_64/page.h b/include/asm-x86_64/page.h
index 41a2b59d9d7d..2e65d509ec25 100644
--- a/include/asm-x86_64/page.h
+++ b/include/asm-x86_64/page.h
@@ -69,21 +69,7 @@ typedef struct { unsigned long pgprot; } pgprot_t;
#ifndef __ASSEMBLY__
-#include <linux/stringify.h>
-
-/*
- * Tell the user there is some problem. The exception handler decodes this frame.
- */
-struct bug_frame {
- unsigned char ud2[2];
- char *filename; /* should use 32bit offset instead, but the assembler doesn't like it */
- unsigned short line;
-} __attribute__((packed));
-#define BUG() \
- asm volatile("ud2 ; .quad %c1 ; .short %c0" :: \
- "i"(__LINE__), "i" (__stringify(KBUILD_BASENAME)))
-#define PAGE_BUG(page) BUG()
-void out_of_line_bug(void);
+#include <asm/bug.h>
/* Pure 2^n version of get_order */
extern __inline__ int get_order(unsigned long size)
diff --git a/include/asm-x86_64/proto.h b/include/asm-x86_64/proto.h
index 9ca683849c42..f58ac42093e1 100644
--- a/include/asm-x86_64/proto.h
+++ b/include/asm-x86_64/proto.h
@@ -43,6 +43,12 @@ extern void exception_table_check(void);
extern int acpi_boot_init(char *);
extern int map_syscall32(struct mm_struct *mm, unsigned long address);
+extern char *syscall32_page;
+
+struct thread_struct;
+
+int do_set_thread_area(struct thread_struct *t, struct user_desc *u_info);
+int do_get_thread_area(struct thread_struct *t, struct user_desc *u_info);
#define round_up(x,y) (((x) + (y) - 1) & ~((y)-1))
#define round_down(x,y) ((x) & ~((y)-1))
diff --git a/include/asm-x86_64/ptrace.h b/include/asm-x86_64/ptrace.h
index da406de40ca1..496595c011ed 100644
--- a/include/asm-x86_64/ptrace.h
+++ b/include/asm-x86_64/ptrace.h
@@ -78,6 +78,10 @@ struct pt_regs {
#define PTRACE_GETFPXREGS 18
#define PTRACE_SETFPXREGS 19
+#define PTRACE_GET_THREAD_AREA 25
+#define PTRACE_SET_THREAD_AREA 26
+
+
#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
#define user_mode(regs) (!!((regs)->cs & 3))
#define instruction_pointer(regs) ((regs)->rip)
diff --git a/include/asm-x86_64/segment.h b/include/asm-x86_64/segment.h
index 64f131070585..6992086cbe7c 100644
--- a/include/asm-x86_64/segment.h
+++ b/include/asm-x86_64/segment.h
@@ -10,7 +10,7 @@
/*
* we cannot use the same code segment descriptor for user and kernel
- * even not in the long flat model, because of different DPL /kkeil
+ * -- not even in the long flat mode, because of different DPL /kkeil
* The segment offset needs to contain a RPL. Grr. -AK
* GDT layout to get 64bit syscall right (sysret hardcodes gdt offsets)
*/
diff --git a/include/asm-x86_64/uaccess.h b/include/asm-x86_64/uaccess.h
index c18c2d6a77b2..14fa21f8b302 100644
--- a/include/asm-x86_64/uaccess.h
+++ b/include/asm-x86_64/uaccess.h
@@ -299,8 +299,8 @@ static inline int __copy_to_user(void *dst, const void *src, unsigned size)
long strncpy_from_user(char *dst, const char *src, long count);
long __strncpy_from_user(char *dst, const char *src, long count);
-#define strlen_user(str) strnlen_user(str, ~0UL >> 1)
long strnlen_user(const char *str, long n);
+long strlen_user(const char *str);
unsigned long clear_user(void *mem, unsigned long len);
unsigned long __clear_user(void *mem, unsigned long len);