User context is when you are coming in from a system call or other
trap: like userspace, you can be preempted by more important tasks
and by interrupts. You can sleep, by calling
schedule().
You are always in user context on module load and unload, and on operations on the block device layer.
In user context, the current pointer (indicating
the task we are currently executing) is valid, and
in_interrupt()
(include/linux/interrupt.h) is false
.
Beware that if you have preemption or softirqs disabled
(see below), in_interrupt() will return a
false positive.