[PATCH] ppc64: Move initialisation of xItLpQueue into ItLpQueue.c
authorMichael Ellerman <michael@ellerman.id.au>
Thu, 30 Jun 2005 05:08:27 +0000 (15:08 +1000)
committerPaul Mackerras <paulus@samba.org>
Thu, 30 Jun 2005 05:08:27 +0000 (15:08 +1000)
The xItLpQueue is initalised manually in iSeries_setup_arch().  Move
this code into ItLpQueue.c for a cleaner separation.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Acked-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/ppc64/kernel/ItLpQueue.c
arch/ppc64/kernel/iSeries_setup.c
include/asm-ppc64/iSeries/ItLpQueue.h

index 35f6deac0b99fc6e67fa286f57ca5189b9e05f0f..091aaed4842c538aee1032af711a6a33caab2c79 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/stddef.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
+#include <linux/bootmem.h>
 #include <asm/system.h>
 #include <asm/paca.h>
 #include <asm/iSeries/ItLpQueue.h>
@@ -186,3 +187,24 @@ static int set_spread_lpevents(char *str)
 }
 __setup("spread_lpevents=", set_spread_lpevents);
 
+void setup_hvlpevent_queue(void)
+{
+       void *eventStack;
+
+       /*
+        * Allocate a page for the Event Stack. The Hypervisor needs the
+        * absolute real address, so we subtract out the KERNELBASE and add
+        * in the absolute real address of the kernel load area.
+        */
+       eventStack = alloc_bootmem_pages(LpEventStackSize);
+       memset(eventStack, 0, LpEventStackSize);
+
+       /* Invoke the hypervisor to initialize the event stack */
+       HvCallEvent_setLpEventStack(0, eventStack, LpEventStackSize);
+
+       xItLpQueue.xSlicEventStackPtr = (char *)eventStack;
+       xItLpQueue.xSlicCurEventPtr = (char *)eventStack;
+       xItLpQueue.xSlicLastValidEventPtr = (char *)eventStack +
+                                       (LpEventStackSize - LpEventMaxSize);
+       xItLpQueue.xIndex = 0;
+}
index 78f283560252835c2b6466dace707a09c6bcb87b..b3f770f6d4022ef4e0484ccb4c3c26ececdd7601 100644 (file)
@@ -24,7 +24,6 @@
 #include <linux/smp.h>
 #include <linux/param.h>
 #include <linux/string.h>
-#include <linux/bootmem.h>
 #include <linux/initrd.h>
 #include <linux/seq_file.h>
 #include <linux/kdev_t.h>
@@ -676,7 +675,6 @@ static void __init iSeries_bolt_kernel(unsigned long saddr, unsigned long eaddr)
  */
 static void __init iSeries_setup_arch(void)
 {
-       void *eventStack;
        unsigned procIx = get_paca()->lppaca.dyn_hv_phys_proc_index;
 
        /* Add an eye catcher and the systemcfg layout version number */
@@ -685,24 +683,7 @@ static void __init iSeries_setup_arch(void)
        systemcfg->version.minor = SYSTEMCFG_MINOR;
 
        /* Setup the Lp Event Queue */
-
-       /* Allocate a page for the Event Stack
-        * The hypervisor wants the absolute real address, so
-        * we subtract out the KERNELBASE and add in the
-        * absolute real address of the kernel load area
-        */
-       eventStack = alloc_bootmem_pages(LpEventStackSize);
-       memset(eventStack, 0, LpEventStackSize);
-
-       /* Invoke the hypervisor to initialize the event stack */
-       HvCallEvent_setLpEventStack(0, eventStack, LpEventStackSize);
-
-       /* Initialize fields in our Lp Event Queue */
-       xItLpQueue.xSlicEventStackPtr = (char *)eventStack;
-       xItLpQueue.xSlicCurEventPtr = (char *)eventStack;
-       xItLpQueue.xSlicLastValidEventPtr = (char *)eventStack +
-                                       (LpEventStackSize - LpEventMaxSize);
-       xItLpQueue.xIndex = 0;
+       setup_hvlpevent_queue();
 
        /* Compute processor frequency */
        procFreqHz = ((1UL << 34) * 1000000) /
index 832497e3259bf7b1b8b83845ec490859b64461d1..de90feedbe128ae83c21d4e78fea6ae11f95abe9 100644 (file)
@@ -80,5 +80,6 @@ extern struct HvLpEvent *ItLpQueue_getNextLpEvent(void);
 extern int ItLpQueue_isLpIntPending(void);
 extern unsigned ItLpQueue_process(struct pt_regs *);
 extern void ItLpQueue_clearValid(struct HvLpEvent *);
+extern void setup_hvlpevent_queue(void);
 
 #endif /* _ITLPQUEUE_H */