Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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

1 niro 153 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 *