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 #include #include +#include #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");