Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 1829 → Rev 1830

/trunk/kernel/arch/xen32/include/asm.h
38,6 → 38,7
 
#include <arch/pm.h>
#include <arch/types.h>
#include <arch/barrier.h>
#include <config.h>
 
extern uint32_t interrupt_handler_size;
150,13 → 151,15
*/
static inline ipl_t interrupts_enable(void)
{
ipl_t v = 0;
/* __asm__ volatile (
"pushf\n\t"
"popl %0\n\t"
"sti\n"
: "=r" (v)
);*/
// FIXME SMP
ipl_t v = shared_info.vcpu_info[0].evtchn_upcall_mask;
write_barrier();
shared_info.vcpu_info[0].evtchn_upcall_mask = 0;
write_barrier();
if (shared_info.vcpu_info[0].evtchn_upcall_pending)
force_evtchn_callback();
return v;
}
 
169,13 → 172,12
*/
static inline ipl_t interrupts_disable(void)
{
ipl_t v = 0;
/* __asm__ volatile (
"pushf\n\t"
"popl %0\n\t"
"cli\n"
: "=r" (v)
);*/
// FIXME SMP
ipl_t v = shared_info.vcpu_info[0].evtchn_upcall_mask;
shared_info.vcpu_info[0].evtchn_upcall_mask = 1;
write_barrier();
return v;
}
 
187,11 → 189,10
*/
static inline void interrupts_restore(ipl_t ipl)
{
/* __asm__ volatile (
"pushl %0\n\t"
"popf\n"
: : "r" (ipl)
);*/
if (ipl == 0)
interrupts_enable();
else
interrupts_disable();
}
 
/** Return interrupt priority level.
200,13 → 201,9
*/
static inline ipl_t interrupts_read(void)
{
ipl_t v = 0;
/* __asm__ volatile (
"pushf\n\t"
"popl %0\n"
: "=r" (v)
);*/
return v;
// FIXME SMP
return shared_info.vcpu_info[0].evtchn_upcall_mask;
}
 
/** Return base address of current stack