Messages in this thread | | | Subject | Re: [patch 6/11] s390: in_interrupt vs. in_atomic. | From | Martin Schwidefsky <> | Date | Fri, 3 Jun 2005 09:54:46 +0200 |
| |
> > 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?
e.g. by the following:
static inline int get_futex_value_locked(int *dest, int __user *from) { int ret;
inc_preempt_count(); ret = __copy_from_user_inatomic(dest, from, sizeof(int)); dec_preempt_count(); preempt_check_resched();
return ret ? -EFAULT : 0; }
in_interrupt only checks for HARDIRQ_MASK and SOFTIRQ_MASK but not for the preemption counter. This is not a theory, we had a bug report concerning a "bad: scheduling while atomic!" warning.
blue skies, Martin
Martin Schwidefsky Linux for zSeries Development & Services IBM Deutschland Entwicklung GmbH
- 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/
| |