|
@@ -535,7 +535,7 @@ static inline unsigned long __raw_local_save_flags(void)
|
|
|
"popl %%edx; popl %%ecx")
|
|
|
: "=a"(f)
|
|
|
: paravirt_type(save_fl),
|
|
|
- paravirt_clobber(CLBR_NONE)
|
|
|
+ paravirt_clobber(CLBR_EAX)
|
|
|
: "memory", "cc");
|
|
|
return f;
|
|
|
}
|
|
@@ -620,27 +620,29 @@ static inline unsigned long __raw_local_irq_save(void)
|
|
|
.popsection
|
|
|
|
|
|
#define INTERRUPT_RETURN \
|
|
|
- PARA_SITE(PARA_PATCH(PARAVIRT_iret), CLBR_ANY, \
|
|
|
+ PARA_SITE(PARA_PATCH(PARAVIRT_iret), CLBR_NONE, \
|
|
|
jmp *%cs:paravirt_ops+PARAVIRT_iret)
|
|
|
|
|
|
#define DISABLE_INTERRUPTS(clobbers) \
|
|
|
PARA_SITE(PARA_PATCH(PARAVIRT_irq_disable), clobbers, \
|
|
|
- pushl %ecx; pushl %edx; \
|
|
|
+ pushl %eax; pushl %ecx; pushl %edx; \
|
|
|
call *%cs:paravirt_ops+PARAVIRT_irq_disable; \
|
|
|
- popl %edx; popl %ecx) \
|
|
|
+ popl %edx; popl %ecx; popl %eax) \
|
|
|
|
|
|
#define ENABLE_INTERRUPTS(clobbers) \
|
|
|
PARA_SITE(PARA_PATCH(PARAVIRT_irq_enable), clobbers, \
|
|
|
- pushl %ecx; pushl %edx; \
|
|
|
+ pushl %eax; pushl %ecx; pushl %edx; \
|
|
|
call *%cs:paravirt_ops+PARAVIRT_irq_enable; \
|
|
|
- popl %edx; popl %ecx)
|
|
|
+ popl %edx; popl %ecx; popl %eax)
|
|
|
|
|
|
#define ENABLE_INTERRUPTS_SYSEXIT \
|
|
|
- PARA_SITE(PARA_PATCH(PARAVIRT_irq_enable_sysexit), CLBR_ANY, \
|
|
|
+ PARA_SITE(PARA_PATCH(PARAVIRT_irq_enable_sysexit), CLBR_NONE, \
|
|
|
jmp *%cs:paravirt_ops+PARAVIRT_irq_enable_sysexit)
|
|
|
|
|
|
#define GET_CR0_INTO_EAX \
|
|
|
- call *paravirt_ops+PARAVIRT_read_cr0
|
|
|
+ push %ecx; push %edx; \
|
|
|
+ call *paravirt_ops+PARAVIRT_read_cr0; \
|
|
|
+ pop %edx; pop %ecx
|
|
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
#endif /* CONFIG_PARAVIRT */
|