При программировании драйвера устройства linux это зависит от того, в каком контексте вы находитесь.Есть два контекста, которые необходимо различать:
- контекст процесса
- IRQ контекст.
Спящий режим может быть выполнен только в контексте процесса или вызапланировать работу для последующего выполнения (для этого есть несколько механизмов).Это сложная тема, которую нельзя описать в абзаце.
Выделение памяти может спать, это зависит от того, с какими параметрами / флажками вызывается kmalloc.
print всегда может быть вызвана (если ядробыл вызван), в противном случае используйте early_printk.
Я не знаю, что делает функция add_get_val.Это не часть ядра Linux.И, как уже было сказано, значения с плавающей запятой не могут быть легко использованы в ядре.