summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--arch/ppc64/kernel/LparData.c10
-rw-r--r--include/asm-ppc64/abs_addr.h36
-rw-r--r--include/asm-ppc64/system.h2
3 files changed, 13 insertions, 35 deletions
diff --git a/arch/ppc64/kernel/LparData.c b/arch/ppc64/kernel/LparData.c
index 3b9a2600fec2..0ed77b2f7d5f 100644
--- a/arch/ppc64/kernel/LparData.c
+++ b/arch/ppc64/kernel/LparData.c
@@ -229,24 +229,16 @@ struct ItVpdAreas itVpdAreas = {
 struct msChunks msChunks;
 EXPORT_SYMBOL(msChunks);
 
-/* Depending on whether this is called from iSeries or pSeries setup
- * code, the location of the msChunks struct may or may not have
- * to be reloc'd, so we force the caller to do that for us by passing
- * in a pointer to the structure.
- */
 unsigned long
 msChunks_alloc(unsigned long mem, unsigned long num_chunks, unsigned long chunk_size)
 {
-	unsigned long offset = reloc_offset();
-	struct msChunks *_msChunks = PTRRELOC(&msChunks);
-
 	_msChunks->num_chunks  = num_chunks;
 	_msChunks->chunk_size  = chunk_size;
 	_msChunks->chunk_shift = __ilog2(chunk_size);
 	_msChunks->chunk_mask  = (1UL<<_msChunks->chunk_shift)-1;
 
 	mem = _ALIGN(mem, sizeof(msChunks_entry));
-	_msChunks->abs = (msChunks_entry *)(mem + offset);
+	_msChunks->abs = (msChunks_entry *)mem;
 	mem += num_chunks * sizeof(msChunks_entry);
 
 	return mem;
diff --git a/include/asm-ppc64/abs_addr.h b/include/asm-ppc64/abs_addr.h
index 6d4e8e787058..93dc63ed4f2f 100644
--- a/include/asm-ppc64/abs_addr.h
+++ b/include/asm-ppc64/abs_addr.h
@@ -29,46 +29,30 @@ struct msChunks {
 extern struct msChunks msChunks;
 
 extern unsigned long msChunks_alloc(unsigned long, unsigned long, unsigned long);
-extern unsigned long reloc_offset(void);
 
 #ifdef CONFIG_MSCHUNKS
 
-static inline unsigned long
-chunk_to_addr(unsigned long chunk)
+static inline unsigned long chunk_to_addr(unsigned long chunk)
 {
-	unsigned long offset = reloc_offset();
-	struct msChunks *_msChunks = PTRRELOC(&msChunks);
-
-	return chunk << _msChunks->chunk_shift;
+	return chunk << msChunks.chunk_shift;
 }
 
-static inline unsigned long
-addr_to_chunk(unsigned long addr)
+static inline unsigned long addr_to_chunk(unsigned long addr)
 {
-	unsigned long offset = reloc_offset();
-	struct msChunks *_msChunks = PTRRELOC(&msChunks);
-
-	return addr >> _msChunks->chunk_shift;
+	return addr >> msChunks.chunk_shift;
 }
 
-static inline unsigned long
-chunk_offset(unsigned long addr)
+static inline unsigned long chunk_offset(unsigned long addr)
 {
-	unsigned long offset = reloc_offset();
-	struct msChunks *_msChunks = PTRRELOC(&msChunks);
-
-	return addr & _msChunks->chunk_mask;
+	return addr & msChunks.chunk_mask;
 }
 
-static inline unsigned long
-abs_chunk(unsigned long pchunk)
+static inline unsigned long abs_chunk(unsigned long pchunk)
 {
-	unsigned long offset = reloc_offset();
-	struct msChunks *_msChunks = PTRRELOC(&msChunks);
-	if ( pchunk >= _msChunks->num_chunks ) {
+	if (pchunk >= msChunks.num_chunks)
 		return pchunk;
-	}
-	return PTRRELOC(_msChunks->abs)[pchunk];
+
+	return msChunks.abs[pchunk];
 }
 
 /* A macro so it can take pointers or unsigned long. */
diff --git a/include/asm-ppc64/system.h b/include/asm-ppc64/system.h
index 98d120ca8a91..4104a5dedbaa 100644
--- a/include/asm-ppc64/system.h
+++ b/include/asm-ppc64/system.h
@@ -302,5 +302,7 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size)
 
 #define arch_align_stack(x) (x)
 
+extern unsigned long reloc_offset(void);
+
 #endif /* __KERNEL__ */
 #endif