diff -urN NVIDIA-Linux-x86-185.18.36-pkg1/usr/src/nv/nv-linux.h NVIDIA-Linux-x86-185.18.36-pkg1-new/usr/src/nv/nv-linux.h --- NVIDIA-Linux-x86-185.18.36-pkg1/usr/src/nv/nv-linux.h 2009-09-29 13:59:37.000000000 +0100 +++ NVIDIA-Linux-x86-185.18.36-pkg1-new/usr/src/nv/nv-linux.h 2009-09-29 14:48:09.000000000 +0100 @@ -720,9 +720,26 @@ #define nv_down(lock) down(&lock) #define nv_up(lock) up(&lock) +#if defined(CONFIG_PREEMPT_RT) && \ + (LINUX_VERSION_CODE == KERNEL_VERSION(2, 6, 31)) +# define nv_spin_lock_init(lock) atomic_spin_lock_init(lock) +# define nv_spin_lock_irqsave(lock, irq) atomic_spin_lock_irqsave(lock, irq) +# define nv_spin_unlock_irqrestore(lock, irq) atomic_spin_unlock_irqrestore(lock, irq) +#else +# define nv_spin_lock_init(lock) spin_lock_init(lock) +# define nv_spin_lock_irqsave(lock, irq) spin_lock_irqsave(lock, irq) +# define nv_spin_unlock_irqrestore(lock, irq) spin_unlock_irqrestore(lock, irq) +#endif + #if defined(CONFIG_PREEMPT_RT) -#define NV_INIT_MUTEX(mutex) init_MUTEX(mutex) +#if LINUX_VERSION_CODE == KERNEL_VERSION(2, 6, 31) +# define nv_spinlock_t atomic_spinlock_t +#else +# define nv_spinlock_t raw_spinlock_t +#endif +#define NV_INIT_MUTEX(mutex) semaphore_init(mutex) #else +#define nv_spinlock_t spinlock_t #if !defined(__SEMAPHORE_INITIALIZER) && defined(__COMPAT_SEMAPHORE_INITIALIZER) #define __SEMAPHORE_INITIALIZER __COMPAT_SEMAPHORE_INITIALIZER #endif diff -urN NVIDIA-Linux-x86-185.18.36-pkg1/usr/src/nv/os-interface.c NVIDIA-Linux-x86-185.18.36-pkg1-new/usr/src/nv/os-interface.c --- NVIDIA-Linux-x86-185.18.36-pkg1/usr/src/nv/os-interface.c 2009-09-29 13:59:37.000000000 +0100 +++ NVIDIA-Linux-x86-185.18.36-pkg1-new/usr/src/nv/os-interface.c 2009-09-29 14:39:51.000000000 +0100 @@ -87,11 +87,7 @@ { nv_stack_t *sp; struct completion completion; -#if defined(CONFIG_PREEMPT_RT) - raw_spinlock_t lock; -#else - spinlock_t lock; -#endif + nv_spinlock_t lock; S032 count; } os_sema_t; @@ -127,7 +123,7 @@ os_sema = (os_sema_t *)*ppSema; os_sema->sp = sp; init_completion(&os_sema->completion); - spin_lock_init(&os_sema->lock); + nv_spin_lock_init(&os_sema->lock); os_sema->count = 1; return RM_OK; @@ -171,18 +167,18 @@ os_sema_t *os_sema = (os_sema_t *)pSema; unsigned long old_irq; - spin_lock_irqsave(&os_sema->lock, old_irq); + nv_spin_lock_irqsave(&os_sema->lock, old_irq); if (os_sema->count <= 0) { os_sema->count--; - spin_unlock_irqrestore(&os_sema->lock, old_irq); + nv_spin_unlock_irqrestore(&os_sema->lock, old_irq); wait_for_completion(&os_sema->completion); } else { os_sema->count--; rm_disable_interrupts(os_sema->sp); - spin_unlock_irqrestore(&os_sema->lock, old_irq); + nv_spin_unlock_irqrestore(&os_sema->lock, old_irq); } return RM_OK; @@ -205,17 +201,17 @@ os_sema_t *os_sema = (os_sema_t *)pSema; unsigned long old_irq; - spin_lock_irqsave(&os_sema->lock, old_irq); + nv_spin_lock_irqsave(&os_sema->lock, old_irq); if (os_sema->count <= 0) { - spin_unlock_irqrestore(&os_sema->lock, old_irq); + nv_spin_unlock_irqrestore(&os_sema->lock, old_irq); return FALSE; } else { os_sema->count--; rm_disable_interrupts(os_sema->sp); - spin_unlock_irqrestore(&os_sema->lock, old_irq); + nv_spin_unlock_irqrestore(&os_sema->lock, old_irq); return TRUE; } @@ -239,7 +235,7 @@ unsigned long old_irq; BOOL doWakeup; - spin_lock_irqsave(&os_sema->lock, old_irq); + nv_spin_lock_irqsave(&os_sema->lock, old_irq); if (os_sema->count < 0) { doWakeup = TRUE; @@ -250,7 +246,7 @@ rm_enable_interrupts(os_sema->sp); } os_sema->count++; - spin_unlock_irqrestore(&os_sema->lock, old_irq); + nv_spin_unlock_irqrestore(&os_sema->lock, old_irq); if (doWakeup) complete(&os_sema->completion); @@ -1319,7 +1315,7 @@ unsigned long oldIrql; os_sema = (os_sema_t *) pSema; - spin_lock_irqsave(&os_sema->lock, oldIrql); + nv_spin_lock_irqsave(&os_sema->lock, oldIrql); return oldIrql; } @@ -1330,7 +1326,7 @@ unsigned long old_irq = (unsigned long) oldIrql; os_sema = (os_sema_t *) pSema; - spin_unlock_irqrestore(&os_sema->lock, old_irq); + nv_spin_unlock_irqrestore(&os_sema->lock, old_irq); }