Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6

+306 -40
+13
arch/ia64/Kconfig
··· 164 164 165 165 endchoice 166 166 167 + choice 168 + prompt "Page Table Levels" 169 + default PGTABLE_3 170 + 171 + config PGTABLE_3 172 + bool "3 Levels" 173 + 174 + config PGTABLE_4 175 + depends on !IA64_PAGE_SIZE_64KB 176 + bool "4 Levels" 177 + 178 + endchoice 179 + 167 180 source kernel/Kconfig.hz 168 181 169 182 config IA64_BRL_EMU
+2
arch/ia64/configs/sn2_defconfig
··· 80 80 # CONFIG_IA64_PAGE_SIZE_8KB is not set 81 81 CONFIG_IA64_PAGE_SIZE_16KB=y 82 82 # CONFIG_IA64_PAGE_SIZE_64KB is not set 83 + # CONFIG_PGTABLE_3 is not set 84 + CONFIG_PGTABLE_4=y 83 85 # CONFIG_HZ_100 is not set 84 86 CONFIG_HZ_250=y 85 87 # CONFIG_HZ_1000 is not set
+2
arch/ia64/defconfig
··· 82 82 # CONFIG_IA64_PAGE_SIZE_8KB is not set 83 83 CONFIG_IA64_PAGE_SIZE_16KB=y 84 84 # CONFIG_IA64_PAGE_SIZE_64KB is not set 85 + CONFIG_PGTABLE_3=y 86 + # CONFIG_PGTABLE_4 is not set 85 87 # CONFIG_HZ_100 is not set 86 88 CONFIG_HZ_250=y 87 89 # CONFIG_HZ_1000 is not set
+48 -15
arch/ia64/kernel/ivt.S
··· 114 114 shl r21=r16,3 // shift bit 60 into sign bit 115 115 shr.u r17=r16,61 // get the region number into r17 116 116 ;; 117 - shr r22=r21,3 117 + shr.u r22=r21,3 118 118 #ifdef CONFIG_HUGETLB_PAGE 119 119 extr.u r26=r25,2,6 120 120 ;; ··· 140 140 (p6) dep r17=r18,r19,3,(PAGE_SHIFT-3) // r17=PTA + IFA(33,42)*8 141 141 (p7) dep r17=r18,r17,3,(PAGE_SHIFT-6) // r17=PTA + (((IFA(61,63) << 7) | IFA(33,39))*8) 142 142 cmp.eq p7,p6=0,r21 // unused address bits all zeroes? 143 - shr.u r18=r22,PMD_SHIFT // shift L2 index into position 143 + #ifdef CONFIG_PGTABLE_4 144 + shr.u r28=r22,PUD_SHIFT // shift L2 index into position 145 + #else 146 + shr.u r18=r22,PMD_SHIFT // shift L3 index into position 147 + #endif 144 148 ;; 145 149 ld8 r17=[r17] // fetch the L1 entry (may be 0) 146 150 ;; 147 151 (p7) cmp.eq p6,p7=r17,r0 // was L1 entry NULL? 148 - dep r17=r18,r17,3,(PAGE_SHIFT-3) // compute address of L2 page table entry 152 + #ifdef CONFIG_PGTABLE_4 153 + dep r28=r28,r17,3,(PAGE_SHIFT-3) // compute address of L2 page table entry 149 154 ;; 150 - (p7) ld8 r20=[r17] // fetch the L2 entry (may be 0) 151 - shr.u r19=r22,PAGE_SHIFT // shift L3 index into position 155 + shr.u r18=r22,PMD_SHIFT // shift L3 index into position 156 + (p7) ld8 r29=[r28] // fetch the L2 entry (may be 0) 152 157 ;; 153 - (p7) cmp.eq.or.andcm p6,p7=r20,r0 // was L2 entry NULL? 154 - dep r21=r19,r20,3,(PAGE_SHIFT-3) // compute address of L3 page table entry 158 + (p7) cmp.eq.or.andcm p6,p7=r29,r0 // was L2 entry NULL? 159 + dep r17=r18,r29,3,(PAGE_SHIFT-3) // compute address of L3 page table entry 160 + #else 161 + dep r17=r18,r17,3,(PAGE_SHIFT-3) // compute address of L3 page table entry 162 + #endif 155 163 ;; 156 - (p7) ld8 r18=[r21] // read the L3 PTE 164 + (p7) ld8 r20=[r17] // fetch the L3 entry (may be 0) 165 + shr.u r19=r22,PAGE_SHIFT // shift L4 index into position 166 + ;; 167 + (p7) cmp.eq.or.andcm p6,p7=r20,r0 // was L3 entry NULL? 168 + dep r21=r19,r20,3,(PAGE_SHIFT-3) // compute address of L4 page table entry 169 + ;; 170 + (p7) ld8 r18=[r21] // read the L4 PTE 157 171 mov r19=cr.isr // cr.isr bit 0 tells us if this is an insn miss 158 172 ;; 159 173 (p7) tbit.z p6,p7=r18,_PAGE_P_BIT // page present bit cleared? ··· 206 192 * between reading the pagetable and the "itc". If so, flush the entry we 207 193 * inserted and retry. 208 194 */ 209 - ld8 r25=[r21] // read L3 PTE again 210 - ld8 r26=[r17] // read L2 entry again 195 + ld8 r25=[r21] // read L4 entry again 196 + ld8 r26=[r17] // read L3 PTE again 197 + #ifdef CONFIG_PGTABLE_4 198 + ld8 r18=[r28] // read L2 entry again 199 + #endif 200 + cmp.ne p6,p7=r0,r0 211 201 ;; 212 - cmp.ne p6,p7=r26,r20 // did L2 entry change 202 + cmp.ne.or.andcm p6,p7=r26,r20 // did L3 entry change 203 + #ifdef CONFIG_PGTABLE_4 204 + cmp.ne.or.andcm p6,p7=r29,r18 // did L4 PTE change 205 + #endif 213 206 mov r27=PAGE_SHIFT<<2 214 207 ;; 215 208 (p6) ptc.l r22,r27 // purge PTE page translation 216 - (p7) cmp.ne.or.andcm p6,p7=r25,r18 // did L3 PTE change 209 + (p7) cmp.ne.or.andcm p6,p7=r25,r18 // did L4 PTE change 217 210 ;; 218 211 (p6) ptc.l r16,r27 // purge translation 219 212 #endif ··· 453 432 (p6) dep r17=r18,r19,3,(PAGE_SHIFT-3) // r17=PTA + IFA(33,42)*8 454 433 (p7) dep r17=r18,r17,3,(PAGE_SHIFT-6) // r17=PTA + (((IFA(61,63) << 7) | IFA(33,39))*8) 455 434 cmp.eq p7,p6=0,r21 // unused address bits all zeroes? 456 - shr.u r18=r22,PMD_SHIFT // shift L2 index into position 435 + #ifdef CONFIG_PGTABLE_4 436 + shr.u r18=r22,PUD_SHIFT // shift L2 index into position 437 + #else 438 + shr.u r18=r22,PMD_SHIFT // shift L3 index into position 439 + #endif 457 440 ;; 458 441 ld8 r17=[r17] // fetch the L1 entry (may be 0) 459 442 ;; 460 443 (p7) cmp.eq p6,p7=r17,r0 // was L1 entry NULL? 461 444 dep r17=r18,r17,3,(PAGE_SHIFT-3) // compute address of L2 page table entry 462 445 ;; 446 + #ifdef CONFIG_PGTABLE_4 463 447 (p7) ld8 r17=[r17] // fetch the L2 entry (may be 0) 464 - shr.u r19=r22,PAGE_SHIFT // shift L3 index into position 448 + shr.u r18=r22,PMD_SHIFT // shift L3 index into position 465 449 ;; 466 450 (p7) cmp.eq.or.andcm p6,p7=r17,r0 // was L2 entry NULL? 467 - dep r17=r19,r17,3,(PAGE_SHIFT-3) // compute address of L3 page table entry 451 + dep r17=r18,r17,3,(PAGE_SHIFT-3) // compute address of L2 page table entry 452 + ;; 453 + #endif 454 + (p7) ld8 r17=[r17] // fetch the L3 entry (may be 0) 455 + shr.u r19=r22,PAGE_SHIFT // shift L4 index into position 456 + ;; 457 + (p7) cmp.eq.or.andcm p6,p7=r17,r0 // was L3 entry NULL? 458 + dep r17=r19,r17,3,(PAGE_SHIFT-3) // compute address of L4 page table entry 468 459 (p6) br.cond.spnt page_fault 469 460 mov b0=r30 470 461 br.sptk.many b0 // return to continuation point
+153 -4
arch/ia64/sn/kernel/setup.c
··· 30 30 #include <linux/root_dev.h> 31 31 #include <linux/nodemask.h> 32 32 #include <linux/pm.h> 33 + #include <linux/efi.h> 33 34 34 35 #include <asm/io.h> 35 36 #include <asm/sal.h> ··· 243 242 } 244 243 } 245 244 245 + /* 246 + * Scan the EFI PCDP table (if it exists) for an acceptable VGA console 247 + * output device. If one exists, pick it and set sn_legacy_{io,mem} to 248 + * reflect the bus offsets needed to address it. 249 + * 250 + * Since pcdp support in SN is not supported in the 2.4 kernel (or at least 251 + * the one lbs is based on) just declare the needed structs here. 252 + * 253 + * Reference spec http://www.dig64.org/specifications/DIG64_PCDPv20.pdf 254 + * 255 + * Returns 0 if no acceptable vga is found, !0 otherwise. 256 + * 257 + * Note: This stuff is duped here because Altix requires the PCDP to 258 + * locate a usable VGA device due to lack of proper ACPI support. Structures 259 + * could be used from drivers/firmware/pcdp.h, but it was decided that moving 260 + * this file to a more public location just for Altix use was undesireable. 261 + */ 262 + 263 + struct hcdp_uart_desc { 264 + u8 pad[45]; 265 + }; 266 + 267 + struct pcdp { 268 + u8 signature[4]; /* should be 'HCDP' */ 269 + u32 length; 270 + u8 rev; /* should be >=3 for pcdp, <3 for hcdp */ 271 + u8 sum; 272 + u8 oem_id[6]; 273 + u64 oem_tableid; 274 + u32 oem_rev; 275 + u32 creator_id; 276 + u32 creator_rev; 277 + u32 num_type0; 278 + struct hcdp_uart_desc uart[0]; /* num_type0 of these */ 279 + /* pcdp descriptors follow */ 280 + } __attribute__((packed)); 281 + 282 + struct pcdp_device_desc { 283 + u8 type; 284 + u8 primary; 285 + u16 length; 286 + u16 index; 287 + /* interconnect specific structure follows */ 288 + /* device specific structure follows that */ 289 + } __attribute__((packed)); 290 + 291 + struct pcdp_interface_pci { 292 + u8 type; /* 1 == pci */ 293 + u8 reserved; 294 + u16 length; 295 + u8 segment; 296 + u8 bus; 297 + u8 dev; 298 + u8 fun; 299 + u16 devid; 300 + u16 vendid; 301 + u32 acpi_interrupt; 302 + u64 mmio_tra; 303 + u64 ioport_tra; 304 + u8 flags; 305 + u8 translation; 306 + } __attribute__((packed)); 307 + 308 + struct pcdp_vga_device { 309 + u8 num_eas_desc; 310 + /* ACPI Extended Address Space Desc follows */ 311 + } __attribute__((packed)); 312 + 313 + /* from pcdp_device_desc.primary */ 314 + #define PCDP_PRIMARY_CONSOLE 0x01 315 + 316 + /* from pcdp_device_desc.type */ 317 + #define PCDP_CONSOLE_INOUT 0x0 318 + #define PCDP_CONSOLE_DEBUG 0x1 319 + #define PCDP_CONSOLE_OUT 0x2 320 + #define PCDP_CONSOLE_IN 0x3 321 + #define PCDP_CONSOLE_TYPE_VGA 0x8 322 + 323 + #define PCDP_CONSOLE_VGA (PCDP_CONSOLE_TYPE_VGA | PCDP_CONSOLE_OUT) 324 + 325 + /* from pcdp_interface_pci.type */ 326 + #define PCDP_IF_PCI 1 327 + 328 + /* from pcdp_interface_pci.translation */ 329 + #define PCDP_PCI_TRANS_IOPORT 0x02 330 + #define PCDP_PCI_TRANS_MMIO 0x01 331 + 332 + static void 333 + sn_scan_pcdp(void) 334 + { 335 + u8 *bp; 336 + struct pcdp *pcdp; 337 + struct pcdp_device_desc device; 338 + struct pcdp_interface_pci if_pci; 339 + extern struct efi efi; 340 + 341 + pcdp = efi.hcdp; 342 + if (! pcdp) 343 + return; /* no hcdp/pcdp table */ 344 + 345 + if (pcdp->rev < 3) 346 + return; /* only support PCDP (rev >= 3) */ 347 + 348 + for (bp = (u8 *)&pcdp->uart[pcdp->num_type0]; 349 + bp < (u8 *)pcdp + pcdp->length; 350 + bp += device.length) { 351 + memcpy(&device, bp, sizeof(device)); 352 + if (! (device.primary & PCDP_PRIMARY_CONSOLE)) 353 + continue; /* not primary console */ 354 + 355 + if (device.type != PCDP_CONSOLE_VGA) 356 + continue; /* not VGA descriptor */ 357 + 358 + memcpy(&if_pci, bp+sizeof(device), sizeof(if_pci)); 359 + if (if_pci.type != PCDP_IF_PCI) 360 + continue; /* not PCI interconnect */ 361 + 362 + if (if_pci.translation & PCDP_PCI_TRANS_IOPORT) 363 + vga_console_iobase = 364 + if_pci.ioport_tra | __IA64_UNCACHED_OFFSET; 365 + 366 + if (if_pci.translation & PCDP_PCI_TRANS_MMIO) 367 + vga_console_membase = 368 + if_pci.mmio_tra | __IA64_UNCACHED_OFFSET; 369 + 370 + break; /* once we find the primary, we're done */ 371 + } 372 + } 373 + 246 374 /** 247 375 * sn_setup - SN platform setup routine 248 376 * @cmdline_p: kernel command line ··· 393 263 394 264 #if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) 395 265 /* 396 - * If there was a primary vga adapter identified through the 397 - * EFI PCDP table, make it the preferred console. Otherwise 398 - * zero out conswitchp. 266 + * Handle SN vga console. 267 + * 268 + * SN systems do not have enough ACPI table information 269 + * being passed from prom to identify VGA adapters and the legacy 270 + * addresses to access them. Until that is done, SN systems rely 271 + * on the PCDP table to identify the primary VGA console if one 272 + * exists. 273 + * 274 + * However, kernel PCDP support is optional, and even if it is built 275 + * into the kernel, it will not be used if the boot cmdline contains 276 + * console= directives. 277 + * 278 + * So, to work around this mess, we duplicate some of the PCDP code 279 + * here so that the primary VGA console (as defined by PCDP) will 280 + * work on SN systems even if a different console (e.g. serial) is 281 + * selected on the boot line (or CONFIG_EFI_PCDP is off). 399 282 */ 283 + 284 + if (! vga_console_membase) 285 + sn_scan_pcdp(); 400 286 401 287 if (vga_console_membase) { 402 288 /* usable vga ... make tty0 the preferred default console */ 403 - add_preferred_console("tty", 0, NULL); 289 + if (!strstr(*cmdline_p, "console=")) 290 + add_preferred_console("tty", 0, NULL); 404 291 } else { 405 292 printk(KERN_DEBUG "SGI: Disabling VGA console\n"); 293 + if (!strstr(*cmdline_p, "console=")) 294 + add_preferred_console("ttySG", 0, NULL); 406 295 #ifdef CONFIG_DUMMY_CONSOLE 407 296 conswitchp = &dummy_con; 408 297 #else
+6 -2
include/asm-ia64/page.h
··· 47 47 #define PERCPU_PAGE_SHIFT 16 /* log2() of max. size of per-CPU area */ 48 48 #define PERCPU_PAGE_SIZE (__IA64_UL_CONST(1) << PERCPU_PAGE_SHIFT) 49 49 50 - #define RGN_MAP_LIMIT ((1UL << (4*PAGE_SHIFT - 12)) - PAGE_SIZE) /* per region addr limit */ 51 - 52 50 53 51 #ifdef CONFIG_HUGETLB_PAGE 54 52 # define HPAGE_REGION_BASE RGN_BASE(RGN_HPAGE) ··· 173 175 */ 174 176 typedef struct { unsigned long pte; } pte_t; 175 177 typedef struct { unsigned long pmd; } pmd_t; 178 + #ifdef CONFIG_PGTABLE_4 179 + typedef struct { unsigned long pud; } pud_t; 180 + #endif 176 181 typedef struct { unsigned long pgd; } pgd_t; 177 182 typedef struct { unsigned long pgprot; } pgprot_t; 178 183 179 184 # define pte_val(x) ((x).pte) 180 185 # define pmd_val(x) ((x).pmd) 186 + #ifdef CONFIG_PGTABLE_4 187 + # define pud_val(x) ((x).pud) 188 + #endif 181 189 # define pgd_val(x) ((x).pgd) 182 190 # define pgprot_val(x) ((x).pgprot) 183 191
+19
include/asm-ia64/pgalloc.h
··· 86 86 pgtable_quicklist_free(pgd); 87 87 } 88 88 89 + #ifdef CONFIG_PGTABLE_4 90 + static inline void 91 + pgd_populate(struct mm_struct *mm, pgd_t * pgd_entry, pud_t * pud) 92 + { 93 + pgd_val(*pgd_entry) = __pa(pud); 94 + } 95 + 96 + static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr) 97 + { 98 + return pgtable_quicklist_alloc(); 99 + } 100 + 101 + static inline void pud_free(pud_t * pud) 102 + { 103 + pgtable_quicklist_free(pud); 104 + } 105 + #define __pud_free_tlb(tlb, pud) pud_free(pud) 106 + #endif /* CONFIG_PGTABLE_4 */ 107 + 89 108 static inline void 90 109 pud_populate(struct mm_struct *mm, pud_t * pud_entry, pmd_t * pmd) 91 110 {
+63 -19
include/asm-ia64/pgtable.h
··· 84 84 #define __DIRTY_BITS _PAGE_ED | __DIRTY_BITS_NO_ED 85 85 86 86 /* 87 + * How many pointers will a page table level hold expressed in shift 88 + */ 89 + #define PTRS_PER_PTD_SHIFT (PAGE_SHIFT-3) 90 + 91 + /* 92 + * Definitions for fourth level: 93 + */ 94 + #define PTRS_PER_PTE (__IA64_UL(1) << (PTRS_PER_PTD_SHIFT)) 95 + 96 + /* 97 + * Definitions for third level: 98 + * 99 + * PMD_SHIFT determines the size of the area a third-level page table 100 + * can map. 101 + */ 102 + #define PMD_SHIFT (PAGE_SHIFT + (PTRS_PER_PTD_SHIFT)) 103 + #define PMD_SIZE (1UL << PMD_SHIFT) 104 + #define PMD_MASK (~(PMD_SIZE-1)) 105 + #define PTRS_PER_PMD (1UL << (PTRS_PER_PTD_SHIFT)) 106 + 107 + #ifdef CONFIG_PGTABLE_4 108 + /* 109 + * Definitions for second level: 110 + * 111 + * PUD_SHIFT determines the size of the area a second-level page table 112 + * can map. 113 + */ 114 + #define PUD_SHIFT (PMD_SHIFT + (PTRS_PER_PTD_SHIFT)) 115 + #define PUD_SIZE (1UL << PUD_SHIFT) 116 + #define PUD_MASK (~(PUD_SIZE-1)) 117 + #define PTRS_PER_PUD (1UL << (PTRS_PER_PTD_SHIFT)) 118 + #endif 119 + 120 + /* 87 121 * Definitions for first level: 88 122 * 89 123 * PGDIR_SHIFT determines what a first-level page table entry can map. 90 124 */ 91 - #define PGDIR_SHIFT (PAGE_SHIFT + 2*(PAGE_SHIFT-3)) 125 + #ifdef CONFIG_PGTABLE_4 126 + #define PGDIR_SHIFT (PUD_SHIFT + (PTRS_PER_PTD_SHIFT)) 127 + #else 128 + #define PGDIR_SHIFT (PMD_SHIFT + (PTRS_PER_PTD_SHIFT)) 129 + #endif 92 130 #define PGDIR_SIZE (__IA64_UL(1) << PGDIR_SHIFT) 93 131 #define PGDIR_MASK (~(PGDIR_SIZE-1)) 94 - #define PTRS_PER_PGD (1UL << (PAGE_SHIFT-3)) 132 + #define PTRS_PER_PGD_SHIFT PTRS_PER_PTD_SHIFT 133 + #define PTRS_PER_PGD (1UL << PTRS_PER_PGD_SHIFT) 95 134 #define USER_PTRS_PER_PGD (5*PTRS_PER_PGD/8) /* regions 0-4 are user regions */ 96 135 #define FIRST_USER_ADDRESS 0 97 - 98 - /* 99 - * Definitions for second level: 100 - * 101 - * PMD_SHIFT determines the size of the area a second-level page table 102 - * can map. 103 - */ 104 - #define PMD_SHIFT (PAGE_SHIFT + (PAGE_SHIFT-3)) 105 - #define PMD_SIZE (1UL << PMD_SHIFT) 106 - #define PMD_MASK (~(PMD_SIZE-1)) 107 - #define PTRS_PER_PMD (1UL << (PAGE_SHIFT-3)) 108 - 109 - /* 110 - * Definitions for third level: 111 - */ 112 - #define PTRS_PER_PTE (__IA64_UL(1) << (PAGE_SHIFT-3)) 113 136 114 137 /* 115 138 * All the normal masks have the "page accessed" bits on, as any time ··· 184 161 #define __S111 __pgprot(__ACCESS_BITS | _PAGE_PL_3 | _PAGE_AR_RWX) 185 162 186 163 #define pgd_ERROR(e) printk("%s:%d: bad pgd %016lx.\n", __FILE__, __LINE__, pgd_val(e)) 164 + #ifdef CONFIG_PGTABLE_4 165 + #define pud_ERROR(e) printk("%s:%d: bad pud %016lx.\n", __FILE__, __LINE__, pud_val(e)) 166 + #endif 187 167 #define pmd_ERROR(e) printk("%s:%d: bad pmd %016lx.\n", __FILE__, __LINE__, pmd_val(e)) 188 168 #define pte_ERROR(e) printk("%s:%d: bad pte %016lx.\n", __FILE__, __LINE__, pte_val(e)) 189 169 ··· 244 218 #define kc_vaddr_to_offset(v) ((v) - RGN_BASE(RGN_GATE)) 245 219 #define kc_offset_to_vaddr(o) ((o) + RGN_BASE(RGN_GATE)) 246 220 221 + #define RGN_MAP_SHIFT (PGDIR_SHIFT + PTRS_PER_PGD_SHIFT - 3) 222 + #define RGN_MAP_LIMIT ((1UL << RGN_MAP_SHIFT) - PAGE_SIZE) /* per region addr limit */ 223 + 247 224 /* 248 225 * Conversion functions: convert page frame number (pfn) and a protection value to a page 249 226 * table entry (pte). ··· 283 254 #define pud_bad(pud) (!ia64_phys_addr_valid(pud_val(pud))) 284 255 #define pud_present(pud) (pud_val(pud) != 0UL) 285 256 #define pud_clear(pudp) (pud_val(*(pudp)) = 0UL) 286 - 287 257 #define pud_page(pud) ((unsigned long) __va(pud_val(pud) & _PFN_MASK)) 258 + 259 + #ifdef CONFIG_PGTABLE_4 260 + #define pgd_none(pgd) (!pgd_val(pgd)) 261 + #define pgd_bad(pgd) (!ia64_phys_addr_valid(pgd_val(pgd))) 262 + #define pgd_present(pgd) (pgd_val(pgd) != 0UL) 263 + #define pgd_clear(pgdp) (pgd_val(*(pgdp)) = 0UL) 264 + #define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & _PFN_MASK)) 265 + #endif 288 266 289 267 /* 290 268 * The following have defined behavior only work if pte_present() is true. ··· 360 324 here. */ 361 325 #define pgd_offset_gate(mm, addr) pgd_offset_k(addr) 362 326 327 + #ifdef CONFIG_PGTABLE_4 363 328 /* Find an entry in the second-level page table.. */ 329 + #define pud_offset(dir,addr) \ 330 + ((pud_t *) pgd_page(*(dir)) + (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))) 331 + #endif 332 + 333 + /* Find an entry in the third-level page table.. */ 364 334 #define pmd_offset(dir,addr) \ 365 335 ((pmd_t *) pud_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))) 366 336 ··· 599 557 #define __HAVE_ARCH_PGD_OFFSET_GATE 600 558 #define __HAVE_ARCH_LAZY_MMU_PROT_UPDATE 601 559 560 + #ifndef CONFIG_PGTABLE_4 602 561 #include <asm-generic/pgtable-nopud.h> 562 + #endif 603 563 #include <asm-generic/pgtable.h> 604 564 605 565 #endif /* _ASM_IA64_PGTABLE_H */