diff options
| author | Andi Kleen <ak@muc.de> | 2003-09-22 19:36:06 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.osdl.org> | 2003-09-22 19:36:06 -0700 |
| commit | 24594a2bfcaafe2cfa35f946e7beffdbeb1fd6b0 (patch) | |
| tree | 2d731980a3a60e138f68b4d18c3fbedb99ead0cf /include | |
| parent | 547355414da51817120bafaad7959ed41ef7f58f (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.h | 4 | ||||
| -rw-r--r-- | include/asm-x86_64/dwarf2.h | 50 | ||||
| -rw-r--r-- | include/asm-x86_64/kdebug.h | 8 | ||||
| -rw-r--r-- | include/asm-x86_64/siginfo.h | 2 | ||||
| -rw-r--r-- | include/asm-x86_64/uaccess.h | 18 |
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; } |
