~ubuntu-branches/ubuntu/maverick/nvidia-graphics-drivers-173/maverick

« back to all changes in this revision

Viewing changes to debian.binary/patches/nvidia-rt-compat-legacy.patch

  • Committer: Bazaar Package Importer
  • Author(s): Alberto Milone
  • Date: 2009-10-25 10:45:15 UTC
  • Revision ID: james.westby@ubuntu.com-20091025104515-s212tee70larsyn9
Tags: 173.14.20-0ubuntu5
* debian.binary/patches, dkms.conf.in:
  - nvidia-rt-compat-legacy.patch: Update patch to allow the driver
    to work with rt kernels again (LP: #413296).
  - rt_preempt_31.patch: Add patch which was already in -185.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
diff -Nurp nv.orig/os-interface.c nv/os-interface.c
 
2
--- nv.orig/os-interface.c      2009-08-15 02:58:45.000000000 +0200
 
3
+++ nv/os-interface.c   2009-10-25 11:38:18.366928071 +0100
 
4
@@ -88,7 +88,7 @@ typedef struct os_sema_s
 
5
     nv_stack_t        *sp;
 
6
     struct completion  completion;
 
7
 #if defined(CONFIG_PREEMPT_RT)
 
8
-    raw_spinlock_t     lock;
 
9
+    atomic_spinlock_t     lock;
 
10
 #else
 
11
     spinlock_t         lock;
 
12
 #endif
 
13
@@ -127,7 +127,11 @@ RM_STATUS NV_API_CALL os_alloc_sema
 
14
     os_sema = (os_sema_t *)*ppSema;
 
15
     os_sema->sp = sp;
 
16
     init_completion(&os_sema->completion);
 
17
+#if defined(CONFIG_PREEMPT_RT)
 
18
+    atomic_spin_lock_init(&os_sema->lock);
 
19
+#else
 
20
     spin_lock_init(&os_sema->lock);
 
21
+#endif
 
22
     os_sema->count = 1;
 
23
 
 
24
     return RM_OK;
 
25
@@ -171,18 +175,30 @@ RM_STATUS NV_API_CALL os_acquire_sema
 
26
     os_sema_t *os_sema = (os_sema_t *)pSema;
 
27
     unsigned long old_irq;
 
28
 
 
29
+#if defined(CONFIG_PREEMPT_RT)
 
30
+    atomic_spin_lock_irqsave(&os_sema->lock, old_irq);
 
31
+#else
 
32
     spin_lock_irqsave(&os_sema->lock, old_irq);
 
33
+#endif
 
34
     if (os_sema->count <= 0)
 
35
     {
 
36
         os_sema->count--;
 
37
+#if defined(CONFIG_PREEMPT_RT)
 
38
+        atomic_spin_unlock_irqrestore(&os_sema->lock, old_irq);
 
39
+#else
 
40
         spin_unlock_irqrestore(&os_sema->lock, old_irq);
 
41
+#endif
 
42
         wait_for_completion(&os_sema->completion);
 
43
     }
 
44
     else
 
45
     {
 
46
         os_sema->count--;
 
47
         rm_disable_interrupts(os_sema->sp);
 
48
+#if defined(CONFIG_PREEMPT_RT)
 
49
+        atomic_spin_unlock_irqrestore(&os_sema->lock, old_irq);
 
50
+#else
 
51
         spin_unlock_irqrestore(&os_sema->lock, old_irq);
 
52
+#endif
 
53
     }
 
54
 
 
55
     return RM_OK;
 
56
@@ -205,17 +221,29 @@ BOOL NV_API_CALL os_cond_acquire_sema
 
57
     os_sema_t *os_sema = (os_sema_t *)pSema;
 
58
     unsigned long old_irq;
 
59
 
 
60
+#if defined(CONFIG_PREEMPT_RT)
 
61
+    atomic_spin_lock_irqsave(&os_sema->lock, old_irq);
 
62
+#else
 
63
     spin_lock_irqsave(&os_sema->lock, old_irq);
 
64
+#endif
 
65
     if (os_sema->count <= 0)
 
66
     {
 
67
+#if defined(CONFIG_PREEMPT_RT)
 
68
+        atomic_spin_unlock_irqrestore(&os_sema->lock, old_irq);
 
69
+#else
 
70
         spin_unlock_irqrestore(&os_sema->lock, old_irq);
 
71
+#endif
 
72
         return FALSE;
 
73
     }
 
74
     else
 
75
     {
 
76
         os_sema->count--;
 
77
         rm_disable_interrupts(os_sema->sp);
 
78
+#if defined(CONFIG_PREEMPT_RT)
 
79
+        atomic_spin_unlock_irqrestore(&os_sema->lock, old_irq);
 
80
+#else
 
81
         spin_unlock_irqrestore(&os_sema->lock, old_irq);
 
82
+#endif
 
83
         return TRUE;
 
84
     }
 
85
 
 
86
@@ -239,7 +267,11 @@ RM_STATUS NV_API_CALL os_release_sema
 
87
     unsigned long old_irq;
 
88
     BOOL doWakeup;
 
89
 
 
90
+#if defined(CONFIG_PREEMPT_RT)
 
91
+    atomic_spin_lock_irqsave(&os_sema->lock, old_irq);
 
92
+#else
 
93
     spin_lock_irqsave(&os_sema->lock, old_irq);
 
94
+#endif
 
95
     if (os_sema->count < 0)
 
96
     {
 
97
         doWakeup = TRUE;
 
98
@@ -250,7 +282,11 @@ RM_STATUS NV_API_CALL os_release_sema
 
99
         rm_enable_interrupts(os_sema->sp);
 
100
     }
 
101
     os_sema->count++;
 
102
+#if defined(CONFIG_PREEMPT_RT)
 
103
+    atomic_spin_unlock_irqrestore(&os_sema->lock, old_irq);
 
104
+#else
 
105
     spin_unlock_irqrestore(&os_sema->lock, old_irq);
 
106
+#endif
 
107
 
 
108
     if (doWakeup)
 
109
         complete(&os_sema->completion);