https://devtalk.nvidia.com/default/topic/1028134/error-upgrading-to-4-14-10-kernel-in-xubuntu-17-10-in-dkms-384-90/?offset=2などで報告されていて,各所で nvidia のドライバの version を上げることが解決策として示されているが,nvidia-kernel-dkms 384.98-3~bpo9+1 が Linux 4.14.9 以降で以下のようなエラーでコンパイルできない.
/var/lib/dkms/nvidia-current/384.98/build/nvidia-uvm/uvm8_va_block.c: In function ‘block_cpu_fault_locked’:
./arch/x86/include/asm/processor.h:826:39: error: implicit declaration of function ‘task_stack_page’ [-Werror=implicit-function-declaration]
unsigned long __ptr = (unsigned long)task_stack_page(task); \
^
./arch/x86/include/asm/processor.h:909:26: note: in expansion of macro ‘task_pt_regs’
#define KSTK_EIP(task) (task_pt_regs(task)->ip)
^~~~~~~~~~~~
/var/lib/dkms/nvidia-current/384.98/build/nvidia-uvm/uvm8_va_block.c:8771:41: note: in expansion of macro ‘KSTK_EIP’
KSTK_EIP(current));
^~~~~~~~
上記問題に対応した version が stable backports でまだ利用できないので,とりあえず対処する.方法は,https://patchwork.kernel.org/patch/10137715/のとおり#include <linux/sched/task_stack.h>
すること.
Kernel側の原因はx86/entry/64: Remove thread_struct::sp0.x86_64 と x86_32 で task_pt_regs
が共通化され,いままで 64bit だと task_stack_page
が不要だったが,使われるようになって,そのため#include <linux/sched/task_stack.h>
が必要になったということらしい.
Debian GNU/Linux experimental では 387.34 が利用可能で,少しコードをみてみたが,以下がnvidia-uvm/uvm_linux.h
に追加されていた(conftest.sh
で linux/sched/task_stack.h
がチェックされ NV_LINUX_SCHED_TASK_STACK_H_PRESENT
がセットされる).
#if defined(NV_LINUX_SCHED_TASK_STACK_H_PRESENT)
#include <linux/sched/task_stack.h>
#endif
追記 (2018/1/13)
stable-bpo 384.111-1~bpo9+1 で本件解決した模様.