forked from luck/tmp_suning_uos_patched
[PATCH] ppc64: Move initialisation of xItLpQueue into ItLpQueue.c
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>
This commit is contained in:
parent
1b19bc7214
commit
512d31d6a8
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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) /
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue
Block a user