ia64 softirq clean ups. This is the counter part of the C/S
10565:53f552ad404234c457fdd62560c9e8b0ea976674 of xen-unstable.hg.
Xen softirq is only checked only before returning to domain context.
So that it's non-sense to check in_interrupt() and add/sub SOFTIRQ_OFFSET.
This patch depends on the C/S
10565:53f552ad404234c457fdd62560c9e8b0ea976674 of xen-unstable.hg.
The C/S isn't included in xen-ia64-unstable.hg yet.
--
yamahata
# HG changeset patch
# User [EMAIL PROTECTED]
# Node ID a3566a161a4744416c044770e105c2f5b053878d
# Parent 4b51d081378d6783cce48255ffb7655931f26d63
ia64 softirq clean ups. This is the counter part of the C/S
10565:53f552ad404234c457fdd62560c9e8b0ea976674
Xen softirq is only checked only before returning to domain context.
So that it's non-sense to check in_interrupt() and add/sub SOFTIRQ_OFFSET.
PATCHNAME: clean_up_do_softirq
Signed-off-by: Isaku Yamahata <[EMAIL PROTECTED]>
diff -r 4b51d081378d -r a3566a161a47 xen/arch/ia64/linux-xen/entry.S
--- a/xen/arch/ia64/linux-xen/entry.S Wed Jun 28 07:52:21 2006 -0600
+++ b/xen/arch/ia64/linux-xen/entry.S Mon Jul 03 13:14:13 2006 +0900
@@ -901,7 +901,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
#ifdef XEN
;;
(pUStk) ssm psr.i
-(pUStk) br.call.sptk.many b0=process_soft_irq
+(pUStk) br.call.sptk.many b0=do_softirq
(pUStk) rsm psr.i
;;
alloc loc0=ar.pfs,0,1,1,0
diff -r 4b51d081378d -r a3566a161a47 xen/arch/ia64/vmx/vmx_process.c
--- a/xen/arch/ia64/vmx/vmx_process.c Wed Jun 28 07:52:21 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_process.c Mon Jul 03 13:14:13 2006 +0900
@@ -190,8 +190,7 @@ void leave_hypervisor_tail(struct pt_reg
if (!is_idle_domain(d) ) { // always comes from guest
extern void vmx_dorfirfi(void);
struct pt_regs *user_regs = vcpu_regs(current);
- if (local_softirq_pending())
- do_softirq();
+ do_softirq();
local_irq_disable();
if (user_regs != regs)
diff -r 4b51d081378d -r a3566a161a47 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c Wed Jun 28 07:52:21 2006 -0600
+++ b/xen/arch/ia64/xen/domain.c Mon Jul 03 13:14:13 2006 +0900
@@ -187,16 +187,14 @@ void continue_running(struct vcpu *same)
static void default_idle(void)
{
- int cpu = smp_processor_id();
local_irq_disable();
- if ( !softirq_pending(cpu))
+ if ( !softirq_pending(smp_processor_id()) )
safe_halt();
local_irq_enable();
}
static void continue_cpu_idle_loop(void)
{
- int cpu = smp_processor_id();
for ( ; ; )
{
#ifdef IA64
@@ -204,12 +202,10 @@ static void continue_cpu_idle_loop(void)
#else
irq_stat[cpu].idle_timestamp = jiffies;
#endif
- while ( !softirq_pending(cpu) )
+ while ( !softirq_pending(smp_processor_id()) )
default_idle();
- add_preempt_count(SOFTIRQ_OFFSET);
raise_softirq(SCHEDULE_SOFTIRQ);
do_softirq();
- sub_preempt_count(SOFTIRQ_OFFSET);
}
}
diff -r 4b51d081378d -r a3566a161a47 xen/arch/ia64/xen/irq.c
--- a/xen/arch/ia64/xen/irq.c Wed Jun 28 07:52:21 2006 -0600
+++ b/xen/arch/ia64/xen/irq.c Mon Jul 03 13:14:13 2006 +0900
@@ -499,19 +499,6 @@ void irq_exit(void)
sub_preempt_count(IRQ_EXIT_OFFSET);
}
-/*
- * ONLY gets called from ia64_leave_kernel
- * ONLY call with interrupts enabled
- */
-void process_soft_irq(void)
-{
- if (!in_interrupt() && local_softirq_pending()) {
- add_preempt_count(SOFTIRQ_OFFSET);
- do_softirq();
- sub_preempt_count(SOFTIRQ_OFFSET);
- }
-}
-
// this is a temporary hack until real console input is implemented
void guest_forward_keyboard_input(int irq, void *nada, struct pt_regs *regs)
{
_______________________________________________
Xen-ia64-devel mailing list
[email protected]
http://lists.xensource.com/xen-ia64-devel