Magellan Linux

Contents of /trunk/nvidia/1.0.6629/NVIDIA_kernel-1.0-6629-1162524.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (show annotations) (download)
Tue May 8 20:52:56 2007 UTC (17 years ago) by niro
File size: 9417 byte(s)
-import

1 diff -ru usr/src/nv/nv-linux.h usr/src/nv.1162524/nv-linux.h
2 --- usr/src/nv/nv-linux.h 2004-11-03 22:53:00.000000000 +0100
3 +++ usr/src/nv.1162524/nv-linux.h 2004-12-03 13:04:29.000000000 +0100
4 @@ -627,75 +627,136 @@
5 #define NV_REMAP_PAGE_RANGE(x...) remap_page_range(x)
6 #endif
7
8 +
9 +#if defined(pml4_offset)
10 +#define NV_PML4_PGD_OFFSET(address, pml4, kernel) \
11 + ({ \
12 + pgd_t *__pgd; \
13 + if (!kernel) \
14 + __pgd = pml4_pgd_offset(pml4, address); \
15 + else \
16 + __pgd = pml4_pgd_offset_k(pml4, address); \
17 + __pgd; \
18 + })
19 +
20 +#define NV_PML4_PRESENT(pml4) \
21 + ({ \
22 + if (pml4 != NULL) \
23 + { \
24 + if (pml4_bad(*pml4)) \
25 + { \
26 + pml4_clear(pml4); \
27 + pml4 = NULL; /* mark invalid */ \
28 + } \
29 + else if (pml4_none(*pml4)) \
30 + pml4 = NULL; \
31 + } pml4 != NULL; \
32 + })
33 +
34 +#define NV_PGD_OFFSET(address, kernel, mm) \
35 + ({ \
36 + pml4_t *__pml4; \
37 + pgd_t *__pgd = NULL; \
38 + if (!kernel) \
39 + __pml4 = pml4_offset(mm, address); \
40 + else \
41 + __pml4 = pml4_offset_k(address); \
42 + if (NV_PML4_PRESENT(__pml4)) \
43 + __pgd = NV_PML4_PGD_OFFSET(address, \
44 + __pml4, kernel); \
45 + __pgd; \
46 + })
47 +#else
48 +#define NV_PGD_OFFSET(address, kernel, mm) \
49 + ({ \
50 + pgd_t *__pgd; \
51 + if (!kernel) \
52 + __pgd = pgd_offset(mm, address); \
53 + else \
54 + __pgd = pgd_offset_k(address); \
55 + __pgd; \
56 + })
57 +#endif
58 +
59 +#define NV_PGD_PRESENT(pgd) \
60 + ({ \
61 + if ((pgd != NULL) && \
62 + (pgd_bad(*pgd) || pgd_none(*pgd))) \
63 + /* static */ pgd = NULL; \
64 + pgd != NULL; \
65 + })
66 +
67 #if defined(pmd_offset_map)
68 -#define NV_PMD_OFFSET(addres, pg_dir, pg_mid_dir) \
69 - { \
70 - pg_mid_dir = pmd_offset_map(pg_dir, address); \
71 - }
72 -#define NV_PMD_UNMAP(pg_mid_dir) \
73 - { \
74 - pmd_unmap(pg_mid_dir); \
75 - }
76 +#define NV_PMD_OFFSET(address, pgd) \
77 + ({ \
78 + pmd_t *__pmd; \
79 + __pmd = pmd_offset_map(pgd, address); \
80 + })
81 +#define NV_PMD_UNMAP(pmd) pmd_unmap(pmd);
82 #else
83 -#define NV_PMD_OFFSET(addres, pg_dir, pg_mid_dir) \
84 - { \
85 - pg_mid_dir = pmd_offset(pg_dir, address); \
86 - }
87 -#define NV_PMD_UNMAP(pg_mid_dir)
88 +#define NV_PMD_OFFSET(address, pgd) \
89 + ({ \
90 + pmd_t *__pmd; \
91 + __pmd = pmd_offset(pgd, address); \
92 + })
93 +#define NV_PMD_UNMAP(pmd)
94 #endif
95
96 -#define NV_PMD_PRESENT(pg_mid_dir) \
97 - ({ \
98 - if ( (pg_mid_dir) && (pmd_none(*pg_mid_dir))) { \
99 - NV_PMD_UNMAP(pg_mid_dir); pg_mid_dir = NULL; \
100 - } pg_mid_dir != NULL; \
101 +#define NV_PMD_PRESENT(pmd) \
102 + ({ \
103 + if ((pmd != NULL) && \
104 + (pmd_bad(*pmd) || pmd_none(*pmd))) \
105 + { \
106 + NV_PMD_UNMAP(pmd); \
107 + pmd = NULL; /* mark invalid */ \
108 + } \
109 + pmd != NULL; \
110 })
111
112 #if defined(pte_offset_atomic)
113 -#define NV_PTE_OFFSET(addres, pg_mid_dir, pte) \
114 - { \
115 - pte = pte_offset_atomic(pg_mid_dir, address); \
116 - NV_PMD_UNMAP(pg_mid_dir); \
117 - }
118 -#define NV_PTE_UNMAP(pte) \
119 - { \
120 - pte_kunmap(pte); \
121 - }
122 +#define NV_PTE_OFFSET(address, pmd) \
123 + ({ \
124 + pte_t *__pte; \
125 + __pte = pte_offset_atomic(pmd, address); \
126 + NV_PMD_UNMAP(pmd); __pte; \
127 + })
128 +#define NV_PTE_UNMAP(pte) pte_kunmap(pte);
129 #elif defined(pte_offset)
130 -#define NV_PTE_OFFSET(addres, pg_mid_dir, pte) \
131 - { \
132 - pte = pte_offset(pg_mid_dir, address); \
133 - NV_PMD_UNMAP(pg_mid_dir); \
134 - }
135 +#define NV_PTE_OFFSET(address, pmd) \
136 + ({ \
137 + pte_t *__pte; \
138 + __pte = pte_offset(pmd, address); \
139 + NV_PMD_UNMAP(pmd); __pte; \
140 + })
141 #define NV_PTE_UNMAP(pte)
142 #else
143 -#define NV_PTE_OFFSET(addres, pg_mid_dir, pte) \
144 - { \
145 - pte = pte_offset_map(pg_mid_dir, address); \
146 - NV_PMD_UNMAP(pg_mid_dir); \
147 - }
148 -#define NV_PTE_UNMAP(pte) \
149 - { \
150 - pte_unmap(pte); \
151 - }
152 +#define NV_PTE_OFFSET(address, pmd) \
153 + ({ \
154 + pte_t *__pte; \
155 + __pte = pte_offset_map(pmd, address); \
156 + NV_PMD_UNMAP(pmd); __pte; \
157 + })
158 +#define NV_PTE_UNMAP(pte) pte_unmap(pte);
159 #endif
160
161 -#define NV_PTE_PRESENT(pte) \
162 - ({ \
163 - if (pte) { \
164 - if (!pte_present(*pte)) { \
165 - NV_PTE_UNMAP(pte); pte = NULL; \
166 - } \
167 - } pte != NULL; \
168 - })
169 -
170 -#define NV_PTE_VALUE(pte) \
171 - ({ \
172 - unsigned long __pte_value = pte_val(*pte); \
173 - NV_PTE_UNMAP(pte); \
174 - __pte_value; \
175 +#define NV_PTE_PRESENT(pte) \
176 + ({ \
177 + if ((pte != NULL) && !pte_present(*pte)) \
178 + { \
179 + NV_PTE_UNMAP(pte); \
180 + pte = NULL; /* mark invalid */ \
181 + } \
182 + pte != NULL; \
183 })
184
185 +#define NV_PTE_VALUE(pte) \
186 + ({ \
187 + unsigned long __pte_value = pte_val(*pte); \
188 + NV_PTE_UNMAP(pte); \
189 + __pte_value; \
190 + })
191 +
192 +
193 #define NV_PAGE_ALIGN(addr) ( ((addr) + PAGE_SIZE - 1) / PAGE_SIZE)
194 #define NV_MASK_OFFSET(addr) ( (addr) & (PAGE_SIZE - 1) )
195
196 diff -ru usr/src/nv/nv-vm.c usr/src/nv.1162524/nv-vm.c
197 --- usr/src/nv/nv-vm.c 2004-11-03 22:53:00.000000000 +0100
198 +++ usr/src/nv.1162524/nv-vm.c 2004-12-03 13:04:34.000000000 +0100
199 @@ -53,12 +53,13 @@
200 * conflicts. we try to rely on the kernel's provided interfaces when possible,
201 * but need additional flushing on earlier kernels.
202 */
203 -
204 +#if defined(KERNEL_2_4)
205 /* wrap CACHE_FLUSH so we can pass it to smp_call_function */
206 static void cache_flush(void *p)
207 {
208 CACHE_FLUSH();
209 }
210 +#endif
211
212 /*
213 * 2.4 kernels handle flushing in the change_page_attr() call, but kernels
214 diff -ru usr/src/nv/nv.c usr/src/nv.1162524/nv.c
215 --- usr/src/nv/nv.c 2004-11-03 22:53:00.000000000 +0100
216 +++ usr/src/nv.1162524/nv.c 2004-12-03 13:04:37.000000000 +0100
217 @@ -2492,26 +2492,23 @@
218 )
219 {
220 struct mm_struct *mm;
221 - pgd_t *pg_dir;
222 - pmd_t *pg_mid_dir;
223 - pte_t *pte;
224 + pgd_t *pgd = NULL;
225 + pmd_t *pmd = NULL;
226 + pte_t *pte = NULL;
227 unsigned long retval;
228
229 mm = (kern) ? &init_mm : current->mm;
230 spin_lock(&mm->page_table_lock);
231
232 - if (kern) pg_dir = pgd_offset_k(address);
233 - else pg_dir = pgd_offset(mm, address);
234 -
235 - if (!pg_dir || pgd_none(*pg_dir))
236 + pgd = NV_PGD_OFFSET(address, kern, mm);
237 + if (!NV_PGD_PRESENT(pgd))
238 goto failed;
239
240 - NV_PMD_OFFSET(address, pg_dir, pg_mid_dir);
241 - if (!NV_PMD_PRESENT(pg_mid_dir))
242 + pmd = NV_PMD_OFFSET(address, pgd);
243 + if (!NV_PMD_PRESENT(pmd))
244 goto failed;
245
246 - NV_PTE_OFFSET(address, pg_mid_dir, pte);
247 -
248 + pte = NV_PTE_OFFSET(address, pmd);
249 if (!NV_PTE_PRESENT(pte))
250 goto failed;
251

Properties

Name Value
svn:executable *