You are not logged in.
Hey!
I'm having a problem with self-built kernels and the nvidia-dkms package: When I'm trying to install a custom built kernel (i.e. this one from the AUR) I get an error, when dkms is trying to install the nvidia-module for the kernel.
Here's the output from pacman:
[alfred@merkur linux-ryzen-git]$ LC_ALL=C sudo pacman -U linux-ryzen-git-*
[sudo] password for alfred:
loading packages...
resolving dependencies...
looking for conflicting packages...
Packages (3) linux-ryzen-git-4.15rc8.r251.gd517bb79f499-1
linux-ryzen-git-docs-4.15rc8.r251.gd517bb79f499-1
linux-ryzen-git-headers-4.15rc8.r251.gd517bb79f499-1
Total Installed Size: 207.95 MiB
:: Proceed with installation? [Y/n]
(3/3) checking keys in keyring [######################] 100%
(3/3) checking package integrity [######################] 100%
(3/3) loading package files [######################] 100%
(3/3) checking for file conflicts [######################] 100%
(3/3) checking available disk space [######################] 100%
:: Processing package changes...
(1/3) installing linux-ryzen-git [######################] 100%
>>> Updating module dependencies. Please wait ...
>>> Generating initial ramdisk, using mkinitcpio. Please wait...
==> Building image from preset: /etc/mkinitcpio.d/linux-ryzen-git.preset: 'default'
-> -k /boot/vmlinuz-linux-ryzen-git -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-ryzen-git.img
==> Starting build: 4.15.0-rc8-ge1915c8195b3
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [autodetect]
-> Running build hook: [modconf]
-> Running build hook: [block]
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux-ryzen-git.img
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux-ryzen-git.preset: 'fallback'
-> -k /boot/vmlinuz-linux-ryzen-git -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-ryzen-git-fallback.img -S autodetect
==> Starting build: 4.15.0-rc8-ge1915c8195b3
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [modconf]
-> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: wd719x
==> WARNING: Possibly missing firmware for module: aic94xx
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux-ryzen-git-fallback.img
==> Image generation successful
Optional dependencies for linux-ryzen-git
crda: to set the correct wireless channels of your country
(2/3) installing linux-ryzen-git-docs [######################] 100%
(3/3) installing linux-ryzen-git-headers [######################] 100%
:: Running post-transaction hooks...
(1/2) Install DKMS modules
==> dkms install nvidia/387.34 -k 4.15.0-rc8-ge1915c8195b3
Error! Bad return status for module build on kernel: 4.15.0-rc8-ge1915c8195b3 (x86_64)
Consult /var/lib/dkms/nvidia/387.34/build/make.log for more information.
(2/2) Arming ConditionNeedsUpdate...And here is the above mentioned /var/lib/dkms/nvidia/387.34/build/make.log: (Sorry, this seems to be partly in german, even though I've added LC_ALL=C to the original command.)
DKMS make.log for nvidia-387.34 for kernel 4.15.0-rc8-ge1915c8195b3 (x86_64)
Mon Jan 22 00:22:24 CET 2018
make[1]: Entering directory '/usr/lib/modules/4.15.0-rc8-ge1915c8195b3/build'
SYMLINK /var/lib/dkms/nvidia/387.34/build/nvidia/nv-kernel.o
SYMLINK /var/lib/dkms/nvidia/387.34/build/nvidia-modeset/nv-modeset-kernel.o
CONFTEST: INIT_WORK
CONFTEST: hash__remap_4k_pfn
CONFTEST: remap_pfn_range
CONFTEST: follow_pfn
CONFTEST: vmap
CONFTEST: set_pages_uc
CONFTEST: set_memory_uc
CONFTEST: set_memory_array_uc
CONFTEST: change_page_attr
CONFTEST: pci_get_class
CONFTEST: pci_choose_state
CONFTEST: vm_insert_page
CONFTEST: acpi_device_id
CONFTEST: acquire_console_sem
CONFTEST: console_lock
CONFTEST: kmem_cache_create
CONFTEST: on_each_cpu
CONFTEST: smp_call_function
CONFTEST: acpi_evaluate_integer
CONFTEST: ioremap_cache
CONFTEST: ioremap_wc
CONFTEST: acpi_walk_namespace
CONFTEST: pci_domain_nr
CONFTEST: pci_dma_mapping_error
CONFTEST: sg_alloc_table
CONFTEST: sg_init_table
CONFTEST: pci_get_domain_bus_and_slot
CONFTEST: get_num_physpages
CONFTEST: efi_enabled
CONFTEST: proc_create_data
CONFTEST: pde_data
CONFTEST: proc_remove
CONFTEST: xen_ioemu_inject_msi
CONFTEST: pm_vt_switch_required
CONFTEST: phys_to_dma
CONFTEST: get_dma_ops
CONFTEST: write_cr4
CONFTEST: of_get_property
CONFTEST: of_find_node_by_phandle
CONFTEST: of_node_to_nid
CONFTEST: pnv_pci_get_npu_dev
CONFTEST: for_each_online_node
CONFTEST: node_end_pfn
CONFTEST: pci_bus_address
CONFTEST: pci_stop_and_remove_bus_device
CONFTEST: pci_remove_bus_device
CONFTEST: request_threaded_irq
CONFTEST: register_cpu_notifier
CONFTEST: cpuhp_setup_state
CONFTEST: backlight_device_register
CONFTEST: remap_page_range
CONFTEST: address_space_init_once
CONFTEST: kbasename
CONFTEST: fatal_signal_pending
CONFTEST: list_cut_position
CONFTEST: vzalloc
CONFTEST: wait_on_bit_lock_argument_count
CONFTEST: bitmap_clear
CONFTEST: usleep_range
CONFTEST: radix_tree_empty
CONFTEST: drm_dev_unref
CONFTEST: drm_reinit_primary_mode_group
CONFTEST: drm_atomic_set_mode_for_crtc
CONFTEST: drm_atomic_clean_old_fb
CONFTEST: get_user_pages_remote
CONFTEST: drm_gem_object_lookup
CONFTEST: drm_atomic_state_free
CONFTEST: drm_driver_has_gem_prime_res_obj
CONFTEST: drm_atomic_helper_disable_all
CONFTEST: drm_atomic_helper_set_config
CONFTEST: drm_atomic_helper_connector_dpms
CONFTEST: is_export_symbol_gpl_of_node_to_nid
CONFTEST: i2c_adapter
CONFTEST: pm_message_t
CONFTEST: irq_handler_t
CONFTEST: acpi_device_ops
CONFTEST: acpi_op_remove
CONFTEST: outer_flush_all
CONFTEST: proc_dir_entry
CONFTEST: scatterlist
CONFTEST: sg_table
CONFTEST: file_operations
CONFTEST: vm_operations_struct
CONFTEST: atomic_long_type
CONFTEST: pci_save_state
CONFTEST: file_inode
CONFTEST: task_struct
CONFTEST: kuid_t
CONFTEST: dma_ops
CONFTEST: dma_map_ops
CONFTEST: noncoherent_swiotlb_dma_ops
CONFTEST: vm_fault_present
CONFTEST: vm_fault_has_address
CONFTEST: kernel_write
CONFTEST: strnstr
CONFTEST: iterate_dir
CONFTEST: kstrtoull
CONFTEST: backlight_properties_type
CONFTEST: fault_flags
CONFTEST: atomic64_type
CONFTEST: address_space
CONFTEST: backing_dev_info
CONFTEST: mm_context_t
CONFTEST: vm_ops_fault_removed_vma_arg
CONFTEST: pnv_npu2_init_context
CONFTEST: drm_bus_present
CONFTEST: drm_bus_has_bus_type
CONFTEST: drm_bus_has_get_irq
CONFTEST: drm_bus_has_get_name
CONFTEST: drm_driver_has_legacy_dev_list
CONFTEST: drm_driver_has_set_busid
CONFTEST: drm_crtc_state_has_connectors_changed
CONFTEST: drm_init_function_args
CONFTEST: drm_mode_connector_list_update_has_merge_type_bits_arg
CONFTEST: drm_helper_mode_fill_fb_struct
CONFTEST: drm_master_drop_has_from_release_arg
CONFTEST: drm_mode_config_funcs_has_atomic_state_alloc
CONFTEST: drm_driver_unload_has_int_return_type
CONFTEST: kref_has_refcount_of_type_refcount_t
CONFTEST: drm_crtc_helper_funcs_has_atomic_enable
CONFTEST: nvidia_vgpu_kvm_build
CONFTEST: dom0_kernel_present
CONFTEST: nvidia_grid_build
CONFTEST: drm_available
CONFTEST: drm_atomic_available
CONFTEST: drm_atomic_modeset_nonblocking_commit_available
CONFTEST: is_export_symbol_gpl_refcount_inc
CONFTEST: is_export_symbol_gpl_refcount_dec_and_test
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-gpu-numa.o
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv.o
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-acpi.o
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-chrdev.o
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-cray.o
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-dma.o
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-gvi.o
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-i2c.o
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-mempool.o
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-mmap.o
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-p2p.o
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-pat.o
/var/lib/dkms/nvidia/387.34/build/nvidia/nv.c: In Funktion »nv_start_rc_timer«:
/var/lib/dkms/nvidia/387.34/build/nvidia/nv.c:3389:5: Fehler: Implizite Deklaration der Funktion »init_timer«; meinten Sie »init_timers«? [-Werror=implicit-function-declaration]
init_timer(&nvl->rc_timer);
^~~~~~~~~~
init_timers
/var/lib/dkms/nvidia/387.34/build/nvidia/nv.c:3390:28: Fehler: Zuweisung von inkompatiblem Zeigertyp [-Werror=incompatible-pointer-types]
nvl->rc_timer.function = nvidia_rc_timer;
^
/var/lib/dkms/nvidia/387.34/build/nvidia/nv.c:3391:18: Fehler: »struct timer_list« hat kein Element namens »data«
nvl->rc_timer.data = (unsigned long) nvl;
^
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-procfs.o
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-usermap.o
cc1: Einige Warnungen werden als Fehler behandelt
make[2]: *** [scripts/Makefile.build:317: /var/lib/dkms/nvidia/387.34/build/nvidia/nv.o] Fehler 1
make[2]: *** Es wird auf noch nicht beendete Prozesse gewartet....
CC [M] /var/lib/dkms/nvidia/387.34/build/nvidia/nv-vm.o
make[1]: *** [Makefile:1508: _module_/var/lib/dkms/nvidia/387.34/build] Error 2
make[1]: Leaving directory '/usr/lib/modules/4.15.0-rc8-ge1915c8195b3/build'
make: *** [Makefile:84: modules] Error 2Any hints what could be the problem?
Offline
The nvidia-dkms package lacks a patch for 4.15 as there are only kernels using 4.9 and 4.14 currently in the official repositories.
diff --git a/kernel/nvidia-modeset/nvidia-modeset-linux.c b/kernel/nvidia-modeset/nvidia-modeset-linux.c
index edeb152..cd0ce2b 100644
--- a/kernel/nvidia-modeset/nvidia-modeset-linux.c
+++ b/kernel/nvidia-modeset/nvidia-modeset-linux.c
@@ -21,6 +21,7 @@
#include <linux/random.h>
#include <linux/file.h>
#include <linux/list.h>
+#include <linux/version.h>
#include "nvstatus.h"
@@ -566,9 +567,17 @@ static void nvkms_queue_work(nv_kthread_q_t *q, nv_kthread_q_item_t *q_item)
WARN_ON(!ret);
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
static void nvkms_timer_callback(unsigned long arg)
+#else
+static void nvkms_timer_callback(struct timer_list * t)
+#endif
{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
struct nvkms_timer_t *timer = (struct nvkms_timer_t *) arg;
+#else
+ struct nvkms_timer_t *timer = from_timer(timer, t, kernel_timer);
+#endif
/* In softirq context, so schedule nvkms_kthread_q_callback(). */
nvkms_queue_work(&nvkms_kthread_q, &timer->nv_kthread_q_item);
@@ -606,10 +615,16 @@ nvkms_init_timer(struct nvkms_timer_t *timer, nvkms_timer_proc_t *proc,
timer->kernel_timer_created = NV_FALSE;
nvkms_queue_work(&nvkms_kthread_q, &timer->nv_kthread_q_item);
} else {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
init_timer(&timer->kernel_timer);
+#else
+ timer_setup(&timer->kernel_timer,nvkms_timer_callback,0);
+#endif
timer->kernel_timer_created = NV_TRUE;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
timer->kernel_timer.function = nvkms_timer_callback;
timer->kernel_timer.data = (unsigned long) timer;
+#endif
mod_timer(&timer->kernel_timer, jiffies + NVKMS_USECS_TO_JIFFIES(usec));
}
spin_unlock_irqrestore(&nvkms_timers.lock, flags);
diff --git a/kernel/nvidia/nv.c b/kernel/nvidia/nv.c
index ad5091b..a469bf9 100644
--- a/kernel/nvidia/nv.c
+++ b/kernel/nvidia/nv.c
@@ -320,7 +320,11 @@ static irqreturn_t nvidia_isr (int, void *, struct pt_regs *);
#else
static irqreturn_t nvidia_isr (int, void *);
#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
static void nvidia_rc_timer (unsigned long);
+#else
+static void nvidia_rc_timer (struct timer_list *);
+#endif
static int nvidia_ctl_open (struct inode *, struct file *);
static int nvidia_ctl_close (struct inode *, struct file *);
@@ -2472,10 +2476,18 @@ nvidia_isr_bh_unlocked(
static void
nvidia_rc_timer(
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
unsigned long data
+#else
+ struct timer_list * t
+#endif
)
{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
nv_linux_state_t *nvl = (nv_linux_state_t *) data;
+#else
+ nv_linux_state_t *nvl = from_timer(nvl, t, rc_timer);
+#endif
nv_state_t *nv = NV_STATE_PTR(nvl);
nvidia_stack_t *sp = nvl->sp[NV_DEV_STACK_TIMER];
@@ -3386,9 +3398,13 @@ int NV_API_CALL nv_start_rc_timer(
return -1;
nv_printf(NV_DBG_INFO, "NVRM: initializing rc timer\n");
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
init_timer(&nvl->rc_timer);
nvl->rc_timer.function = nvidia_rc_timer;
nvl->rc_timer.data = (unsigned long) nvl;
+#else
+ timer_setup(&nvl->rc_timer,nvidia_rc_timer,0);
+#endif
nv->rc_timer_enabled = 1;
mod_timer(&nvl->rc_timer, jiffies + HZ); /* set our timeout for 1 second */
nv_printf(NV_DBG_INFO, "NVRM: rc timer initialized\n");Offline
Hey loqs!
Thanks for your answer!
Hm, ok. That's what I expected. Is nvidia-dkms always incompatible with kernel-versions newer than the ones in the repositories or is this an exception?
I dind't test your patch, instead I recompiled kernel 4.14 from the official repositories with my own config. nvidia-dkms worked smoothly.
Last edited by Fredo (2018-01-23 15:52:21)
Offline
Depends if there is an incompatible change in that particular release it varies.
Offline
Maybe it should be mentioned in the wiki-article that nvidia-dkms is only guaranteed to work with the kernel-version of the official package from the repositories and that other/newer versions might break it.
Offline