Messages in this thread | | | Subject | Re: Linux 2.6.16-rc3 | From | Roland Dreier <> | Date | Fri, 17 Feb 2006 18:12:04 -0800 |
| |
> +/** > + * execute_in_process_context - reliably execute the routine with user context > + * @fn: the function to execute > + * @data: data to pass to the function > + * > + * Executes the function immediately if process context is available, > + * otherwise schedules the function for delayed execution. > + * > + * Returns: 0 - function was executed > + * 1 - function was scheduled for execution > + */ > +int execute_in_process_context(void (*fn)(void *data), void *data, > + struct execute_work *ew) > +{ > + if (!in_interrupt()) { > + fn(data); > + return 0; > + }
Is testing in_interrupt() really sufficient to make this work? I seem to remember that (at least) with CONFIG_PREEMPT disabled, there are contexts where it is not safe to sleep but where both in_interrupt() and in_atomic() still return 0.
- R. - 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/
| |