summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAndi Kleen <ak@muc.de>2003-09-22 19:36:06 -0700
committerLinus Torvalds <torvalds@home.osdl.org>2003-09-22 19:36:06 -0700
commit24594a2bfcaafe2cfa35f946e7beffdbeb1fd6b0 (patch)
tree2d731980a3a60e138f68b4d18c3fbedb99ead0cf /include
parent547355414da51817120bafaad7959ed41ef7f58f (diff)
[PATCH] x86-64 merge
- Fix -funit-at-a-time compilation and enable it when possible - Remove -finline-limit as it should not be needed anymore. - Update defconfig - Fix Makefile bug that caused a recompilation of vsyscall.so on every make (thanks to Sam Ravnborg) - Add beginning of asm/dwarf2.h to support assembler CFI directives (not complete yet) - Remove old PDAREF macro from entry.S - Remove clever and buggy code in sys_ioperm/set_bitmap and replace it by simple and working code - Don't make acpi_disabled __initdata. It is referenced after boot. - Fix TLB size reporting in /proc/cpuinfo - Cleanup oops printing a bit - Add "executive summary" at end of oopses - Reenable interrupts on oopses before calling do_exit - Remove some unneeded prefetches. Just two are enough to kickstart the hardware prefetcher. - Add prefetch workaround (based on code from Richard Brunner) - Clean up signal checking in do_page_fault - Don't allow modify_ldt to set 64bit codesegments - Readd SIGEV_PAD_SIZE (Stephen Rothwell) - Add some likelys to uaccess.h (idea from Manfred Spraul)
Diffstat (limited to 'include')
-rw-r--r--include/asm-x86_64/desc.h4
-rw-r--r--include/asm-x86_64/dwarf2.h50
-rw-r--r--include/asm-x86_64/kdebug.h8
-rw-r--r--include/asm-x86_64/siginfo.h2
-rw-r--r--include/asm-x86_64/uaccess.h18
5 files changed, 71 insertions, 11 deletions
diff --git a/include/asm-x86_64/desc.h b/include/asm-x86_64/desc.h
index 03e35a04aed2..f9d7d6a1a131 100644
--- a/include/asm-x86_64/desc.h
+++ b/include/asm-x86_64/desc.h
@@ -149,6 +149,8 @@ static inline void set_seg_base(unsigned cpu, int entry, void *base)
#define LDT_entry_a(info) \
((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff))
+/* Don't allow setting of the lm bit. It is useless anyways because
+ 64bit system calls require __USER_CS. */
#define LDT_entry_b(info) \
(((info)->base_addr & 0xff000000) | \
(((info)->base_addr & 0x00ff0000) >> 16) | \
@@ -159,7 +161,7 @@ static inline void set_seg_base(unsigned cpu, int entry, void *base)
((info)->seg_32bit << 22) | \
((info)->limit_in_pages << 23) | \
((info)->useable << 20) | \
- ((info)->lm << 21) | \
+ /* ((info)->lm << 21) | */ \
0x7000)
#define LDT_empty(info) (\
diff --git a/include/asm-x86_64/dwarf2.h b/include/asm-x86_64/dwarf2.h
new file mode 100644
index 000000000000..72775b3e249b
--- /dev/null
+++ b/include/asm-x86_64/dwarf2.h
@@ -0,0 +1,50 @@
+#ifndef _DWARF2_H
+#define _DWARF2_H 1
+
+#include <linux/config.h>
+
+#ifndef __ASSEMBLY__
+#warning "asm/dwarf2.h should be only included in pure assembly files"
+#endif
+
+/*
+ Macros for dwarf2 CFI unwind table entries.
+ See "as.info" for details on these pseudo ops. Unfortunately
+ they are only supported in very new binutils, so define them
+ away for older version.
+ */
+
+#ifdef CONFIG_CFI_BINUTILS
+
+#define CFI_STARTPROC .cfi_startproc
+#define CFI_ENDPROC .cfi_endproc
+#define CFI_DEF_CFA .cfi_def_cfa
+#define CFI_DEF_CFA_REGISTER .cfi_def_cfa_register
+#define CFI_DEF_CFA_OFFSET .cfi_def_cfa_offset
+#define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset
+#define CFI_OFFSET .cfi_offset
+#define CFI_REL_OFFSET .cfi_rel_offset
+
+#else
+
+#ifdef __ASSEMBLY__
+ .macro nothing
+ .endm
+ .macro nothing1 a
+ .endm
+ .macro nothing2 a,b
+ .endm
+#endif
+
+#define CFI_STARTPROC nothing
+#define CFI_ENDPROC nothing
+#define CFI_DEF_CFA nothing2
+#define CFI_DEF_CFA_REGISTER nothing1
+#define CFI_DEF_CFA_OFFSET nothing1
+#define CFI_ADJUST_CFA_OFFSET nothing1
+#define CFI_OFFSET nothing2
+#define CFI_REL_OFFSET nothing2
+
+#endif
+
+#endif
diff --git a/include/asm-x86_64/kdebug.h b/include/asm-x86_64/kdebug.h
index 316d01ac6eef..6895fc99bb81 100644
--- a/include/asm-x86_64/kdebug.h
+++ b/include/asm-x86_64/kdebug.h
@@ -39,6 +39,12 @@ static inline int notify_die(enum die_val val,char *str,struct pt_regs *regs,lon
return notifier_call_chain(&die_chain, val, &args);
}
-int printk_address(unsigned long address);
+extern int printk_address(unsigned long address);
+extern void die(const char *,struct pt_regs *,long);
+extern void __die(const char *,struct pt_regs *,long);
+extern void show_registers(struct pt_regs *regs);
+extern void dump_pagetable(unsigned long);
+extern void oops_begin(void);
+extern void oops_end(void);
#endif
diff --git a/include/asm-x86_64/siginfo.h b/include/asm-x86_64/siginfo.h
index 00167a4cb25b..74fcd6437c88 100644
--- a/include/asm-x86_64/siginfo.h
+++ b/include/asm-x86_64/siginfo.h
@@ -5,6 +5,8 @@
#define __ARCH_SI_BAND_T long
+#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
+
#include <asm-generic/siginfo.h>
#endif
diff --git a/include/asm-x86_64/uaccess.h b/include/asm-x86_64/uaccess.h
index a1de5b94baf5..1aea880c9fa9 100644
--- a/include/asm-x86_64/uaccess.h
+++ b/include/asm-x86_64/uaccess.h
@@ -147,7 +147,7 @@ extern void __put_user_bad(void);
({ \
int __pu_err = -EFAULT; \
__typeof__(*(ptr)) *__pu_addr = (ptr); \
- if (access_ok(VERIFY_WRITE,__pu_addr,size)) \
+ if (likely(access_ok(VERIFY_WRITE,__pu_addr,size))) \
__put_user_size((x),__pu_addr,(size),__pu_err); \
__pu_err; \
})
@@ -255,12 +255,12 @@ static inline int __copy_from_user(void *dst, const void *src, unsigned size)
return ret;
case 10:
__get_user_asm(*(u64*)dst,(u64*)src,ret,"q","","=r",16);
- if (ret) return ret;
+ if (unlikely(ret)) return ret;
__get_user_asm(*(u16*)(8+(char*)dst),(u16*)(8+(char*)src),ret,"w","w","=r",2);
return ret;
case 16:
__get_user_asm(*(u64*)dst,(u64*)src,ret,"q","","=r",16);
- if (ret) return ret;
+ if (unlikely(ret)) return ret;
__get_user_asm(*(u64*)(8+(char*)dst),(u64*)(8+(char*)src),ret,"q","","=r",8);
return ret;
default:
@@ -284,13 +284,13 @@ static inline int __copy_to_user(void *dst, const void *src, unsigned size)
return ret;
case 10:
__put_user_asm(*(u64*)src,(u64*)dst,ret,"q","","ir",10);
- if (ret) return ret;
+ if (unlikely(ret)) return ret;
asm("":::"memory");
__put_user_asm(4[(u16*)src],4+(u16*)dst,ret,"w","w","ir",2);
return ret;
case 16:
__put_user_asm(*(u64*)src,(u64*)dst,ret,"q","","ir",16);
- if (ret) return ret;
+ if (unlikely(ret)) return ret;
asm("":::"memory");
__put_user_asm(1[(u64*)src],1+(u64*)dst,ret,"q","","ir",8);
return ret;
@@ -309,14 +309,14 @@ static inline int __copy_in_user(void *dst, const void *src, unsigned size)
case 1: {
u8 tmp;
__get_user_asm(tmp,(u8 *)src,ret,"b","b","=q",1);
- if (!ret)
+ if (likely(!ret))
__put_user_asm(tmp,(u8 *)dst,ret,"b","b","iq",1);
return ret;
}
case 2: {
u16 tmp;
__get_user_asm(tmp,(u16 *)src,ret,"w","w","=r",2);
- if (!ret)
+ if (likely(!ret))
__put_user_asm(tmp,(u16 *)dst,ret,"w","w","ir",2);
return ret;
}
@@ -324,14 +324,14 @@ static inline int __copy_in_user(void *dst, const void *src, unsigned size)
case 4: {
u32 tmp;
__get_user_asm(tmp,(u32 *)src,ret,"l","k","=r",4);
- if (!ret)
+ if (likely(!ret))
__put_user_asm(tmp,(u32 *)dst,ret,"l","k","ir",4);
return ret;
}
case 8: {
u64 tmp;
__get_user_asm(tmp,(u64 *)src,ret,"q","","=r",8);
- if (!ret)
+ if (likely(!ret))
__put_user_asm(tmp,(u64 *)dst,ret,"q","","ir",8);
return ret;
}