diff options
Diffstat (limited to 'arch/powerpc/include/asm/sections.h')
| -rw-r--r-- | arch/powerpc/include/asm/sections.h | 25 | 
1 files changed, 25 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/sections.h b/arch/powerpc/include/asm/sections.h index 4ee06fe15de..a5e930aca80 100644 --- a/arch/powerpc/include/asm/sections.h +++ b/arch/powerpc/include/asm/sections.h @@ -8,6 +8,7 @@  #ifdef __powerpc64__ +extern char __start_interrupts[];  extern char __end_interrupts[];  extern char __prom_init_toc_start[]; @@ -21,12 +22,35 @@ static inline int in_kernel_text(unsigned long addr)  	return 0;  } +static inline int overlaps_interrupt_vector_text(unsigned long start, +							unsigned long end) +{ +	unsigned long real_start, real_end; +	real_start = __start_interrupts - _stext; +	real_end = __end_interrupts - _stext; + +	return start < (unsigned long)__va(real_end) && +		(unsigned long)__va(real_start) < end; +} +  static inline int overlaps_kernel_text(unsigned long start, unsigned long end)  {  	return start < (unsigned long)__init_end &&  		(unsigned long)_stext < end;  } +static inline int overlaps_kvm_tmp(unsigned long start, unsigned long end) +{ +#ifdef CONFIG_KVM_GUEST +	extern char kvm_tmp[]; +	return start < (unsigned long)kvm_tmp && +		(unsigned long)&kvm_tmp[1024 * 1024] < end; +#else +	return 0; +#endif +} + +#if !defined(_CALL_ELF) || _CALL_ELF != 2  #undef dereference_function_descriptor  static inline void *dereference_function_descriptor(void *ptr)  { @@ -37,6 +61,7 @@ static inline void *dereference_function_descriptor(void *ptr)  		ptr = p;  	return ptr;  } +#endif  #endif  | 
