Don't alloc empty frame in ia64_switch_mode_phys
PATCH 1/1 Don't alloc empty frame in ia64_switch_mode_phys
I think ia64_switch_mode_phys and ia64_switch_mode_virt does not need to alloc an empty frame.
An empty frame is required by loadrs but flushrs does not need that.
arch/ia64/kernel/head.S +0 -2
@@ -853,7 +853,6 @@ END(__ia64_init_fpu) */ GLOBAL_ENTRY(ia64_switch_mode_phys) { - alloc r2=ar.pfs,0,0,0,0 rsm psr.i | psr.ic // disable interrupts and interrupt collection mov r15=ip }
@@ -902,7 +901,6 @@ END(ia64_switch_mode_phys) */ GLOBAL_ENTRY(ia64_switch_mode_virt) { - alloc r2=ar.pfs,0,0,0,0 rsm psr.i | psr.ic // disable interrupts and interrupt collection mov r15=ip }
Zou Nan hai wrote on Tuesday, July 25, 2006 4:37 PM
Quoted 4 lines
I think
ia64_switch_mode_physandia64_switch_mode_virtdoes not need to alloc an empty frame.
An empty frame is required by loadrs but flushrs does not need that.
This patch would make your previous "Do not assume output registers be reservered" unnecessary, isn't it? It will automatically solve the problem you are trying to fix in previous patch.
The real issue to me is that ia64_switch_mode_phys() creates a zero stack frame before turning off interrupt. If the zero frame alloc instruction is removed, the current register stack frame ought to be safe because they should be preserved by the interrupt return path.
- Ken
Quoted 10 lines · Kenneth W
Zou Nan hai wrote on Tuesday, July 25, 2006 4:37 PM
Quoted 4 lines
I think
ia64_switch_mode_physandia64_switch_mode_virtdoes not need to alloc an empty frame.
An empty frame is required by loadrs but flushrs does not need that.This patch would make your previous "Do not assume output registers be reservered" unnecessary, isn't it? It will automatically solve the problem you are trying to fix in previous patch.
Yes, any individual of the 2 patches will fix the issue. However I still like to fix the "assume output registers to be
preserved issue" in pal.S, because that dose not follow software runtime convention.
Zou Nan hai