aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-ia64
diff options
context:
space:
mode:
authorAshok Raj <ashok.raj@intel.com>2005-04-22 17:44:40 -0400
committerTony Luck <tony.luck@intel.com>2005-04-22 17:44:40 -0400
commitb8d8b883e6f029e99c35c88f853501740e322131 (patch)
tree391f2ade8823149f217991eb02911bf3dacce050 /include/asm-ia64
parent7130667107cd3ab9d6802b69bab63c7d22f20bd4 (diff)
[IA64] cpu hotplug: return offlined cpus to SAL
This patch is required to support cpu removal for IPF systems. Existing code just fakes the real offline by keeping it run the idle thread, and polling for the bit to re-appear in the cpu_state to get out of the idle loop. For the cpu-offline to work correctly, we need to pass control of this CPU back to SAL so it can continue in the boot-rendez mode. This gives the SAL control to not pick this cpu as the monarch processor for global MCA events, and addition does not wait for this cpu to checkin with SAL for global MCA events as well. The handoff is implemented as documented in SAL specification section 3.2.5.1 "OS_BOOT_RENDEZ to SAL return State" Signed-off-by: Ashok Raj <ashok.raj@intel.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'include/asm-ia64')
-rw-r--r--include/asm-ia64/sal.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/include/asm-ia64/sal.h b/include/asm-ia64/sal.h
index ea1ed377de4c..240676f75390 100644
--- a/include/asm-ia64/sal.h
+++ b/include/asm-ia64/sal.h
@@ -832,6 +832,44 @@ extern int ia64_sal_oemcall_nolock(struct ia64_sal_retval *, u64, u64, u64,
832 u64, u64, u64, u64, u64); 832 u64, u64, u64, u64, u64);
833extern int ia64_sal_oemcall_reentrant(struct ia64_sal_retval *, u64, u64, u64, 833extern int ia64_sal_oemcall_reentrant(struct ia64_sal_retval *, u64, u64, u64,
834 u64, u64, u64, u64, u64); 834 u64, u64, u64, u64, u64);
835#ifdef CONFIG_HOTPLUG_CPU
836/*
837 * System Abstraction Layer Specification
838 * Section 3.2.5.1: OS_BOOT_RENDEZ to SAL return State.
839 * Note: region regs are stored first in head.S _start. Hence they must
840 * stay up front.
841 */
842struct sal_to_os_boot {
843 u64 rr[8]; /* Region Registers */
844 u64 br[6]; /* br0: return addr into SAL boot rendez routine */
845 u64 gr1; /* SAL:GP */
846 u64 gr12; /* SAL:SP */
847 u64 gr13; /* SAL: Task Pointer */
848 u64 fpsr;
849 u64 pfs;
850 u64 rnat;
851 u64 unat;
852 u64 bspstore;
853 u64 dcr; /* Default Control Register */
854 u64 iva;
855 u64 pta;
856 u64 itv;
857 u64 pmv;
858 u64 cmcv;
859 u64 lrr[2];
860 u64 gr[4];
861 u64 pr; /* Predicate registers */
862 u64 lc; /* Loop Count */
863 struct ia64_fpreg fp[20];
864};
865
866/*
867 * Global array allocated for NR_CPUS at boot time
868 */
869extern struct sal_to_os_boot sal_boot_rendez_state[NR_CPUS];
870
871extern void ia64_jump_to_sal(struct sal_to_os_boot *);
872#endif
835 873
836extern void ia64_sal_handler_init(void *entry_point, void *gpval); 874extern void ia64_sal_handler_init(void *entry_point, void *gpval);
837 875