The Linux kernel is non-preemptive, but I just read that there could be context-switches in different control paths. Doesn't that contradict the non-preemptive nature on the Linux kernel?
No, it does not contradict this, because the latest Linux kernels are pre-emptive.