Messages in this thread |  | | | Date | Thu, 2 Jun 2005 15:43:33 -0700 | | From | Andrew Morton <> | | Subject | Re: [patch 6/11] s390: in_interrupt vs. in_atomic. |
| |
Martin Schwidefsky <schwidefsky@de.ibm.com> wrote: > > [patch 6/11] s390: in_interrupt vs. in_atomic. > > From: Martin Schwidefsky <schwidefsky@de.ibm.com> > > The condition for no context in do_exception checks for hard and > soft interrupts by using in_interrupt() but not for preemption. > This is bad for the users of __copy_from/to_user_inatomic because > the fault handler might call schedule although the preemption > count is != 0. Use in_atomic() instead in_interrupt(). >
hm. Under what circumstances do you expect this test to trigger?
We have the in_atomic() test in x86's do_page_fault() because as a super-special case, kmap_atomic() will increment preempt_count() even if !CONFIG_PREEMPT. This is how x86 handles faults during pagecache<->userspace copies into a kmap_atomically-mapped page. s390 doesn't do any of that.
So. What's going on in here?
> > diffstat: > arch/s390/mm/fault.c | 2 +- > 1 files changed, 1 insertion(+), 1 deletion(-) > > diff -urpN linux-2.6/arch/s390/mm/fault.c linux-2.6-patched/arch/s390/mm/fault.c > --- linux-2.6/arch/s390/mm/fault.c 2005-06-01 19:42:54.000000000 +0200 > +++ linux-2.6-patched/arch/s390/mm/fault.c 2005-06-01 19:43:18.000000000 +0200 > @@ -207,7 +207,7 @@ do_exception(struct pt_regs *regs, unsig > * we are not in an interrupt and that there is a > * user context. > */
Comment needs updating...
> - if (user_address == 0 || in_interrupt() || !mm) > + if (user_address == 0 || in_atomic() || !mm) > goto no_context; > > /* - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |