Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bae1d250 authored by Ravikiran G Thirumalai's avatar Ravikiran G Thirumalai Committed by Ingo Molnar
Browse files

x86: fix breakage of vSMP irq operations



25-rc* stopped working with CONFIG_X86_VSMP on vSMP machines.

Looks like the vsmp irq ops got accidentally removed during merge of x86_64
pvops in 2.6.25. -- commit 6abcd98f removed
vsmp irq ops.

Tested with both CONFIG_X86_VSMP and without CONFIG_X86_VSMP, on vSMP and non
vSMP x86_64 machines.

Please apply.

Signed-off-by: default avatarRavikiran Thirumalai <kiran@scalex86.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 9c9b81f7
Loading
Loading
Loading
Loading
+29 −0
Original line number Original line Diff line number Diff line
@@ -70,6 +70,26 @@ static inline void raw_local_irq_restore(unsigned long flags)
	native_restore_fl(flags);
	native_restore_fl(flags);
}
}


#ifdef CONFIG_X86_VSMP

/*
 * Interrupt control for the VSMP architecture:
 */

static inline void raw_local_irq_disable(void)
{
	unsigned long flags = __raw_local_save_flags();
	raw_local_irq_restore((flags & ~X86_EFLAGS_IF) | X86_EFLAGS_AC);
}

static inline void raw_local_irq_enable(void)
{
	unsigned long flags = __raw_local_save_flags();
	raw_local_irq_restore((flags | X86_EFLAGS_IF) & (~X86_EFLAGS_AC));
}

#else

static inline void raw_local_irq_disable(void)
static inline void raw_local_irq_disable(void)
{
{
	native_irq_disable();
	native_irq_disable();
@@ -80,6 +100,8 @@ static inline void raw_local_irq_enable(void)
	native_irq_enable();
	native_irq_enable();
}
}


#endif

/*
/*
 * Used in the idle loop; sti takes one instruction cycle
 * Used in the idle loop; sti takes one instruction cycle
 * to complete:
 * to complete:
@@ -137,10 +159,17 @@ static inline unsigned long __raw_local_irq_save(void)
#define raw_local_irq_save(flags) \
#define raw_local_irq_save(flags) \
		do { (flags) = __raw_local_irq_save(); } while (0)
		do { (flags) = __raw_local_irq_save(); } while (0)


#ifdef CONFIG_X86_VSMP
static inline int raw_irqs_disabled_flags(unsigned long flags)
{
	return !(flags & X86_EFLAGS_IF) || (flags & X86_EFLAGS_AC);
}
#else
static inline int raw_irqs_disabled_flags(unsigned long flags)
static inline int raw_irqs_disabled_flags(unsigned long flags)
{
{
	return !(flags & X86_EFLAGS_IF);
	return !(flags & X86_EFLAGS_IF);
}
}
#endif


static inline int raw_irqs_disabled(void)
static inline int raw_irqs_disabled(void)
{
{