| .. | .. |
|---|
| 170 | 170 | } |
|---|
| 171 | 171 | |
|---|
| 172 | 172 | #define __pte_page(pte) ((unsigned long) (pte_val(pte) & PAGE_MASK)) |
|---|
| 173 | | -#define __pmd_page(pmd) ((unsigned long) (pmd_val(pmd))) |
|---|
| 173 | +#define pmd_page_vaddr(pmd) ((unsigned long) (pmd_val(pmd))) |
|---|
| 174 | 174 | |
|---|
| 175 | 175 | static inline int pte_none(pte_t pte) |
|---|
| 176 | 176 | { |
|---|
| .. | .. |
|---|
| 198 | 198 | #define pmd_present(pmd) (!pmd_none2(&(pmd))) |
|---|
| 199 | 199 | static inline void pmd_clear(pmd_t *pmdp) { pmd_val(*pmdp) = 0; } |
|---|
| 200 | 200 | |
|---|
| 201 | | -static inline int pgd_none(pgd_t pgd) { return 0; } |
|---|
| 202 | | -static inline int pgd_bad(pgd_t pgd) { return 0; } |
|---|
| 203 | | -static inline int pgd_present(pgd_t pgd) { return 1; } |
|---|
| 204 | | -static inline void pgd_clear(pgd_t *pgdp) {} |
|---|
| 205 | | - |
|---|
| 206 | 201 | #define pte_ERROR(e) \ |
|---|
| 207 | 202 | printk(KERN_ERR "%s:%d: bad pte %08lx.\n", \ |
|---|
| 208 | 203 | __FILE__, __LINE__, pte_val(e)) |
|---|
| 209 | | -#define pmd_ERROR(e) \ |
|---|
| 210 | | - printk(KERN_ERR "%s:%d: bad pmd %08lx.\n", \ |
|---|
| 211 | | - __FILE__, __LINE__, pmd_val(e)) |
|---|
| 212 | 204 | #define pgd_ERROR(e) \ |
|---|
| 213 | 205 | printk(KERN_ERR "%s:%d: bad pgd %08lx.\n", \ |
|---|
| 214 | 206 | __FILE__, __LINE__, pgd_val(e)) |
|---|
| .. | .. |
|---|
| 241 | 233 | static inline int pte_young(pte_t pte) |
|---|
| 242 | 234 | { |
|---|
| 243 | 235 | return pte_val(pte) & CF_PAGE_ACCESSED; |
|---|
| 244 | | -} |
|---|
| 245 | | - |
|---|
| 246 | | -static inline int pte_special(pte_t pte) |
|---|
| 247 | | -{ |
|---|
| 248 | | - return 0; |
|---|
| 249 | 236 | } |
|---|
| 250 | 237 | |
|---|
| 251 | 238 | static inline pte_t pte_wrprotect(pte_t pte) |
|---|
| .. | .. |
|---|
| 320 | 307 | return pte; |
|---|
| 321 | 308 | } |
|---|
| 322 | 309 | |
|---|
| 323 | | -static inline pte_t pte_mkspecial(pte_t pte) |
|---|
| 324 | | -{ |
|---|
| 325 | | - return pte; |
|---|
| 326 | | -} |
|---|
| 327 | | - |
|---|
| 328 | 310 | #define swapper_pg_dir kernel_pg_dir |
|---|
| 329 | 311 | extern pgd_t kernel_pg_dir[PTRS_PER_PGD]; |
|---|
| 330 | | - |
|---|
| 331 | | -/* |
|---|
| 332 | | - * Find an entry in a pagetable directory. |
|---|
| 333 | | - */ |
|---|
| 334 | | -#define pgd_index(address) ((address) >> PGDIR_SHIFT) |
|---|
| 335 | | -#define pgd_offset(mm, address) ((mm)->pgd + pgd_index(address)) |
|---|
| 336 | | - |
|---|
| 337 | | -/* |
|---|
| 338 | | - * Find an entry in a kernel pagetable directory. |
|---|
| 339 | | - */ |
|---|
| 340 | | -#define pgd_offset_k(address) pgd_offset(&init_mm, address) |
|---|
| 341 | | - |
|---|
| 342 | | -/* |
|---|
| 343 | | - * Find an entry in the second-level pagetable. |
|---|
| 344 | | - */ |
|---|
| 345 | | -static inline pmd_t *pmd_offset(pgd_t *pgd, unsigned long address) |
|---|
| 346 | | -{ |
|---|
| 347 | | - return (pmd_t *) pgd; |
|---|
| 348 | | -} |
|---|
| 349 | | - |
|---|
| 350 | | -/* |
|---|
| 351 | | - * Find an entry in the third-level pagetable. |
|---|
| 352 | | - */ |
|---|
| 353 | | -#define __pte_offset(address) ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) |
|---|
| 354 | | -#define pte_offset_kernel(dir, address) \ |
|---|
| 355 | | - ((pte_t *) __pmd_page(*(dir)) + __pte_offset(address)) |
|---|
| 356 | | - |
|---|
| 357 | | -/* |
|---|
| 358 | | - * Disable caching for page at given kernel virtual address. |
|---|
| 359 | | - */ |
|---|
| 360 | | -static inline void nocache_page(void *vaddr) |
|---|
| 361 | | -{ |
|---|
| 362 | | - pgd_t *dir; |
|---|
| 363 | | - pmd_t *pmdp; |
|---|
| 364 | | - pte_t *ptep; |
|---|
| 365 | | - unsigned long addr = (unsigned long) vaddr; |
|---|
| 366 | | - |
|---|
| 367 | | - dir = pgd_offset_k(addr); |
|---|
| 368 | | - pmdp = pmd_offset(dir, addr); |
|---|
| 369 | | - ptep = pte_offset_kernel(pmdp, addr); |
|---|
| 370 | | - *ptep = pte_mknocache(*ptep); |
|---|
| 371 | | -} |
|---|
| 372 | | - |
|---|
| 373 | | -/* |
|---|
| 374 | | - * Enable caching for page at given kernel virtual address. |
|---|
| 375 | | - */ |
|---|
| 376 | | -static inline void cache_page(void *vaddr) |
|---|
| 377 | | -{ |
|---|
| 378 | | - pgd_t *dir; |
|---|
| 379 | | - pmd_t *pmdp; |
|---|
| 380 | | - pte_t *ptep; |
|---|
| 381 | | - unsigned long addr = (unsigned long) vaddr; |
|---|
| 382 | | - |
|---|
| 383 | | - dir = pgd_offset_k(addr); |
|---|
| 384 | | - pmdp = pmd_offset(dir, addr); |
|---|
| 385 | | - ptep = pte_offset_kernel(pmdp, addr); |
|---|
| 386 | | - *ptep = pte_mkcache(*ptep); |
|---|
| 387 | | -} |
|---|
| 388 | 312 | |
|---|
| 389 | 313 | /* |
|---|
| 390 | 314 | * Encode and de-code a swap entry (must be !pte_none(e) && !pte_present(e)) |
|---|
| .. | .. |
|---|
| 398 | 322 | |
|---|
| 399 | 323 | #define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT)) |
|---|
| 400 | 324 | |
|---|
| 401 | | -#define pte_offset_map(pmdp, addr) ((pte_t *)__pmd_page(*pmdp) + \ |
|---|
| 402 | | - __pte_offset(addr)) |
|---|
| 403 | | -#define pte_unmap(pte) ((void) 0) |
|---|
| 404 | 325 | #define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) |
|---|
| 405 | 326 | #define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT) |
|---|
| 406 | 327 | |
|---|