Messages in this thread | | | From | "Michael S. Zick" <> | Subject | [RFC] Uni-processor interrupt state preservation. | Date | Thu, 30 Jul 2009 11:37:18 -0500 |
| |
In kernel/up.c - -
int smp_call_function_single(int cpu, void (*func) (void *info), void *info, int wait) { unsigned long flags;
WARN_ON(cpu != 0);
local_irq_save(flags); (func)(info); local_irq_restore(flags);
return 0; }
It **looks** reasonable - - but:
.L2: #APP # ul native_save_fl(void) pushf ; pop %ebx # native_irq_disable(void) cli #NO_APP #(insn:TI 29 27 30 (set (reg:SI 0 ax [ info ]) # (reg/v/f:SI 4 si [orig:62 info ] [62])) 34 {*movsi_1} (insn_list:REG_DEP_TRUE 27 (nil)) # (expr_list:REG_DEAD (reg/v/f:SI 4 si [orig:62 info ] [62]) # (nil))) movl %esi, %eax # 29 *movsi_1/1 [length = 2] #(call_insn:TI 30 29 43 (call (mem:QI (reg/v/f:SI 5 di [orig:61 func ] [61]) [0 S1 A8]) # (const_int 0 [0x0])) 386 {*call_1} (insn_list:REG_DEP_TRUE 29 (insn_list:REG_DEP_TRUE 27 (nil))) # (expr_list:REG_DEAD (reg:SI 0 ax [ info ]) # (expr_list:REG_DEAD (reg/v/f:SI 5 di [orig:61 func ] [61]) # (nil))) # (expr_list:REG_DEP_TRUE (use (reg:SI 0 ax [ info ])) # (nil))) call *%edi # 30 *call_1 [length = 2] #APP # native_restore_fl(ul flags) push %ebx ; popf #NO_APP
Just how is the interrupt state (in ebx) supposed to be preserved across the function call? (assembly comments where added in macros, just to clarify where this is coming from.)
Mike
| |