[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1277462331.32034.221.camel@twins>
Date: Fri, 25 Jun 2010 12:38:51 +0200
From: Peter Zijlstra <peterz@...radead.org>
To: Andi Kleen <andi@...stfloor.org>
Cc: Huang Ying <ying.huang@...el.com>, Ingo Molnar <mingo@...e.hu>,
"H. Peter Anvin" <hpa@...or.com>, linux-kernel@...r.kernel.org
Subject: Re: [RFC][PATCH] irq_work
On Thu, 2010-06-24 at 14:38 +0200, Andi Kleen wrote:
> The sleepable
> soft irq would have avoided that (that's not a show stopper)
I'm still not convinced sleepable softirq is a workable thing.
Softirqs:
A) are non-preemptible
B) are per-cpu because of A
C) can be ran from ksoftirqd context
D) generic kernel infrastructure with identical semantics on all archs
If you were to make something like a sleepable softirq, you'd loose A
(per definition), B (sleepable implies migratable to cpus_allowed) and
possibly D (unless you want to touch all architectures).
Now from your 'requirements':
> I have one case that needs to sleep (but only when interrupting user code)
> TIF works for user space, but it's a bit ugly because it requires adding
> more data to the task_struct because CPUs can change.
Which I read as:
1) needs to run in the task context of the task that got 'interrupted'
2) needs to stay on the cpu it got interrupted on.
So C is out of the window too, at which point there's nothing resembling
softirqs left.
To boot, x86_64 runs softirqs from the hardirq stack:
/* Call softirq on interrupt stack. Interrupts are off. */
ENTRY(call_softirq)
CFI_STARTPROC
push %rbp
CFI_ADJUST_CFA_OFFSET 8
CFI_REL_OFFSET rbp,0
mov %rsp,%rbp
CFI_DEF_CFA_REGISTER rbp
incl PER_CPU_VAR(irq_count)
cmove PER_CPU_VAR(irq_stack_ptr),%rsp
push %rbp # backlink for old unwinder
call __do_softirq
leaveq
CFI_DEF_CFA_REGISTER rsp
CFI_ADJUST_CFA_OFFSET -8
decl PER_CPU_VAR(irq_count)
ret
CFI_ENDPROC
END(call_softirq)
Also, -rt has something that could be considered sleepable softirqs,
although we call them preemptible softirqs. It runs all softirqs from
cpu bound kthreads, which again doesn't match your requirements.
So no, I don't think your idea of sleepable softirqs is sound.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists