diff options
| -rw-r--r-- | arch/ia64/hp/sim/simscsi.c | 4 | ||||
| -rw-r--r-- | arch/ia64/kernel/efi.c | 6 | ||||
| -rw-r--r-- | arch/ia64/kernel/head.S | 2 | ||||
| -rw-r--r-- | arch/ia64/kernel/ia64_ksyms.c | 2 | ||||
| -rw-r--r-- | arch/ia64/kernel/pal.S | 18 | ||||
| -rw-r--r-- | arch/ia64/kernel/palinfo.c | 34 | ||||
| -rw-r--r-- | arch/ia64/lib/Makefile | 2 | ||||
| -rw-r--r-- | arch/ia64/mm/contig.c | 16 | ||||
| -rw-r--r-- | arch/ia64/mm/discontig.c | 68 | ||||
| -rw-r--r-- | arch/ia64/mm/init.c | 55 | ||||
| -rw-r--r-- | arch/ia64/mm/ioremap.c | 6 | ||||
| -rw-r--r-- | arch/ia64/sn/kernel/xpc_main.c | 2 | ||||
| -rw-r--r-- | arch/ia64/sn/pci/tioce_provider.c | 6 | ||||
| -rw-r--r-- | drivers/char/snsc.c | 7 | ||||
| -rw-r--r-- | include/asm-ia64/meminit.h | 7 | ||||
| -rw-r--r-- | include/asm-ia64/pal.h | 7 | ||||
| -rw-r--r-- | include/asm-ia64/sn/xpc.h | 4 | ||||
| -rw-r--r-- | include/asm-ia64/system.h | 2 |
18 files changed, 128 insertions, 120 deletions
diff --git a/arch/ia64/hp/sim/simscsi.c b/arch/ia64/hp/sim/simscsi.c index a3fe97531134..8a4f0d0d17a3 100644 --- a/arch/ia64/hp/sim/simscsi.c +++ b/arch/ia64/hp/sim/simscsi.c | |||
| @@ -151,7 +151,7 @@ static void | |||
| 151 | simscsi_sg_readwrite (struct scsi_cmnd *sc, int mode, unsigned long offset) | 151 | simscsi_sg_readwrite (struct scsi_cmnd *sc, int mode, unsigned long offset) |
| 152 | { | 152 | { |
| 153 | int list_len = sc->use_sg; | 153 | int list_len = sc->use_sg; |
| 154 | struct scatterlist *sl = (struct scatterlist *)sc->buffer; | 154 | struct scatterlist *sl = (struct scatterlist *)sc->request_buffer; |
| 155 | struct disk_stat stat; | 155 | struct disk_stat stat; |
| 156 | struct disk_req req; | 156 | struct disk_req req; |
| 157 | 157 | ||
| @@ -244,7 +244,7 @@ static void simscsi_fillresult(struct scsi_cmnd *sc, char *buf, unsigned len) | |||
| 244 | 244 | ||
| 245 | if (scatterlen == 0) | 245 | if (scatterlen == 0) |
| 246 | memcpy(sc->request_buffer, buf, len); | 246 | memcpy(sc->request_buffer, buf, len); |
| 247 | else for (slp = (struct scatterlist *)sc->buffer; scatterlen-- > 0 && len > 0; slp++) { | 247 | else for (slp = (struct scatterlist *)sc->request_buffer; scatterlen-- > 0 && len > 0; slp++) { |
| 248 | unsigned thislen = min(len, slp->length); | 248 | unsigned thislen = min(len, slp->length); |
| 249 | 249 | ||
| 250 | memcpy(page_address(slp->page) + slp->offset, buf, thislen); | 250 | memcpy(page_address(slp->page) + slp->offset, buf, thislen); |
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index e4bfa9dafbce..bb8770a177b5 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c | |||
| @@ -632,7 +632,7 @@ kern_memory_descriptor (unsigned long phys_addr) | |||
| 632 | if (phys_addr - md->start < (md->num_pages << EFI_PAGE_SHIFT)) | 632 | if (phys_addr - md->start < (md->num_pages << EFI_PAGE_SHIFT)) |
| 633 | return md; | 633 | return md; |
| 634 | } | 634 | } |
| 635 | return 0; | 635 | return NULL; |
| 636 | } | 636 | } |
| 637 | 637 | ||
| 638 | static efi_memory_desc_t * | 638 | static efi_memory_desc_t * |
| @@ -652,7 +652,7 @@ efi_memory_descriptor (unsigned long phys_addr) | |||
| 652 | if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT)) | 652 | if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT)) |
| 653 | return md; | 653 | return md; |
| 654 | } | 654 | } |
| 655 | return 0; | 655 | return NULL; |
| 656 | } | 656 | } |
| 657 | 657 | ||
| 658 | u32 | 658 | u32 |
| @@ -923,7 +923,7 @@ find_memmap_space (void) | |||
| 923 | void | 923 | void |
| 924 | efi_memmap_init(unsigned long *s, unsigned long *e) | 924 | efi_memmap_init(unsigned long *s, unsigned long *e) |
| 925 | { | 925 | { |
| 926 | struct kern_memdesc *k, *prev = 0; | 926 | struct kern_memdesc *k, *prev = NULL; |
| 927 | u64 contig_low=0, contig_high=0; | 927 | u64 contig_low=0, contig_high=0; |
| 928 | u64 as, ae, lim; | 928 | u64 as, ae, lim; |
| 929 | void *efi_map_start, *efi_map_end, *p, *q; | 929 | void *efi_map_start, *efi_map_end, *p, *q; |
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index 561b8f1d3bc7..29236f0c62b5 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S | |||
| @@ -853,7 +853,6 @@ END(__ia64_init_fpu) | |||
| 853 | */ | 853 | */ |
| 854 | GLOBAL_ENTRY(ia64_switch_mode_phys) | 854 | GLOBAL_ENTRY(ia64_switch_mode_phys) |
| 855 | { | 855 | { |
| 856 | alloc r2=ar.pfs,0,0,0,0 | ||
| 857 | rsm psr.i | psr.ic // disable interrupts and interrupt collection | 856 | rsm psr.i | psr.ic // disable interrupts and interrupt collection |
| 858 | mov r15=ip | 857 | mov r15=ip |
| 859 | } | 858 | } |
| @@ -902,7 +901,6 @@ END(ia64_switch_mode_phys) | |||
| 902 | */ | 901 | */ |
| 903 | GLOBAL_ENTRY(ia64_switch_mode_virt) | 902 | GLOBAL_ENTRY(ia64_switch_mode_virt) |
| 904 | { | 903 | { |
| 905 | alloc r2=ar.pfs,0,0,0,0 | ||
| 906 | rsm psr.i | psr.ic // disable interrupts and interrupt collection | 904 | rsm psr.i | psr.ic // disable interrupts and interrupt collection |
| 907 | mov r15=ip | 905 | mov r15=ip |
| 908 | } | 906 | } |
diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c index b7cf651ceb14..3ead20fb6f4b 100644 --- a/arch/ia64/kernel/ia64_ksyms.c +++ b/arch/ia64/kernel/ia64_ksyms.c | |||
| @@ -62,7 +62,7 @@ EXPORT_SYMBOL(__udivdi3); | |||
| 62 | EXPORT_SYMBOL(__moddi3); | 62 | EXPORT_SYMBOL(__moddi3); |
| 63 | EXPORT_SYMBOL(__umoddi3); | 63 | EXPORT_SYMBOL(__umoddi3); |
| 64 | 64 | ||
| 65 | #if defined(CONFIG_MD_RAID5) || defined(CONFIG_MD_RAID5_MODULE) | 65 | #if defined(CONFIG_MD_RAID456) || defined(CONFIG_MD_RAID456_MODULE) |
| 66 | extern void xor_ia64_2(void); | 66 | extern void xor_ia64_2(void); |
| 67 | extern void xor_ia64_3(void); | 67 | extern void xor_ia64_3(void); |
| 68 | extern void xor_ia64_4(void); | 68 | extern void xor_ia64_4(void); |
diff --git a/arch/ia64/kernel/pal.S b/arch/ia64/kernel/pal.S index 5018c7f2e7a8..ebaf1e685f5e 100644 --- a/arch/ia64/kernel/pal.S +++ b/arch/ia64/kernel/pal.S | |||
| @@ -217,12 +217,7 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked) | |||
| 217 | .body | 217 | .body |
| 218 | ;; | 218 | ;; |
| 219 | ld8 loc2 = [loc2] // loc2 <- entry point | 219 | ld8 loc2 = [loc2] // loc2 <- entry point |
| 220 | mov out0 = in0 // first argument | 220 | mov loc3 = psr // save psr |
| 221 | mov out1 = in1 // copy arg2 | ||
| 222 | mov out2 = in2 // copy arg3 | ||
| 223 | mov out3 = in3 // copy arg3 | ||
| 224 | ;; | ||
| 225 | mov loc3 = psr // save psr | ||
| 226 | ;; | 221 | ;; |
| 227 | mov loc4=ar.rsc // save RSE configuration | 222 | mov loc4=ar.rsc // save RSE configuration |
| 228 | dep.z loc2=loc2,0,61 // convert pal entry point to physical | 223 | dep.z loc2=loc2,0,61 // convert pal entry point to physical |
| @@ -236,18 +231,23 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked) | |||
| 236 | ;; | 231 | ;; |
| 237 | andcm r16=loc3,r16 // removes bits to clear from psr | 232 | andcm r16=loc3,r16 // removes bits to clear from psr |
| 238 | br.call.sptk.many rp=ia64_switch_mode_phys | 233 | br.call.sptk.many rp=ia64_switch_mode_phys |
| 239 | .ret6: | 234 | |
| 235 | mov out0 = in0 // first argument | ||
| 236 | mov out1 = in1 // copy arg2 | ||
| 237 | mov out2 = in2 // copy arg3 | ||
| 238 | mov out3 = in3 // copy arg3 | ||
| 240 | mov loc5 = r19 | 239 | mov loc5 = r19 |
| 241 | mov loc6 = r20 | 240 | mov loc6 = r20 |
| 241 | |||
| 242 | br.call.sptk.many rp=b7 // now make the call | 242 | br.call.sptk.many rp=b7 // now make the call |
| 243 | .ret7: | 243 | |
| 244 | mov ar.rsc=0 // put RSE in enforced lazy, LE mode | 244 | mov ar.rsc=0 // put RSE in enforced lazy, LE mode |
| 245 | mov r16=loc3 // r16= original psr | 245 | mov r16=loc3 // r16= original psr |
| 246 | mov r19=loc5 | 246 | mov r19=loc5 |
| 247 | mov r20=loc6 | 247 | mov r20=loc6 |
| 248 | br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode | 248 | br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode |
| 249 | 249 | ||
| 250 | .ret8: mov psr.l = loc3 // restore init PSR | 250 | mov psr.l = loc3 // restore init PSR |
| 251 | mov ar.pfs = loc1 | 251 | mov ar.pfs = loc1 |
| 252 | mov rp = loc0 | 252 | mov rp = loc0 |
| 253 | ;; | 253 | ;; |
diff --git a/arch/ia64/kernel/palinfo.c b/arch/ia64/kernel/palinfo.c index ab5b52413e91..0b546e2b36ac 100644 --- a/arch/ia64/kernel/palinfo.c +++ b/arch/ia64/kernel/palinfo.c | |||
| @@ -566,29 +566,23 @@ version_info(char *page) | |||
| 566 | pal_version_u_t min_ver, cur_ver; | 566 | pal_version_u_t min_ver, cur_ver; |
| 567 | char *p = page; | 567 | char *p = page; |
| 568 | 568 | ||
| 569 | /* The PAL_VERSION call is advertised as being able to support | 569 | if (ia64_pal_version(&min_ver, &cur_ver) != 0) |
| 570 | * both physical and virtual mode calls. This seems to be a documentation | 570 | return 0; |
| 571 | * bug rather than firmware bug. In fact, it does only support physical mode. | ||
| 572 | * So now the code reflects this fact and the pal_version() has been updated | ||
| 573 | * accordingly. | ||
| 574 | */ | ||
| 575 | if (ia64_pal_version(&min_ver, &cur_ver) != 0) return 0; | ||
| 576 | 571 | ||
| 577 | p += sprintf(p, | 572 | p += sprintf(p, |
| 578 | "PAL_vendor : 0x%02x (min=0x%02x)\n" | 573 | "PAL_vendor : 0x%02x (min=0x%02x)\n" |
| 579 | "PAL_A : %x.%x.%x (min=%x.%x.%x)\n" | 574 | "PAL_A : %02x.%02x (min=%02x.%02x)\n" |
| 580 | "PAL_B : %x.%x.%x (min=%x.%x.%x)\n", | 575 | "PAL_B : %02x.%02x (min=%02x.%02x)\n", |
| 581 | cur_ver.pal_version_s.pv_pal_vendor, min_ver.pal_version_s.pv_pal_vendor, | 576 | cur_ver.pal_version_s.pv_pal_vendor, |
| 582 | 577 | min_ver.pal_version_s.pv_pal_vendor, | |
| 583 | cur_ver.pal_version_s.pv_pal_a_model>>4, | 578 | cur_ver.pal_version_s.pv_pal_a_model, |
| 584 | cur_ver.pal_version_s.pv_pal_a_model&0xf, cur_ver.pal_version_s.pv_pal_a_rev, | 579 | cur_ver.pal_version_s.pv_pal_a_rev, |
| 585 | min_ver.pal_version_s.pv_pal_a_model>>4, | 580 | min_ver.pal_version_s.pv_pal_a_model, |
| 586 | min_ver.pal_version_s.pv_pal_a_model&0xf, min_ver.pal_version_s.pv_pal_a_rev, | 581 | min_ver.pal_version_s.pv_pal_a_rev, |
| 587 | 582 | cur_ver.pal_version_s.pv_pal_b_model, | |
| 588 | cur_ver.pal_version_s.pv_pal_b_model>>4, | 583 | cur_ver.pal_version_s.pv_pal_b_rev, |
| 589 | cur_ver.pal_version_s.pv_pal_b_model&0xf, cur_ver.pal_version_s.pv_pal_b_rev, | 584 | min_ver.pal_version_s.pv_pal_b_model, |
| 590 | min_ver.pal_version_s.pv_pal_b_model>>4, | 585 | min_ver.pal_version_s.pv_pal_b_rev); |
| 591 | min_ver.pal_version_s.pv_pal_b_model&0xf, min_ver.pal_version_s.pv_pal_b_rev); | ||
| 592 | return p - page; | 586 | return p - page; |
| 593 | } | 587 | } |
| 594 | 588 | ||
diff --git a/arch/ia64/lib/Makefile b/arch/ia64/lib/Makefile index d8536a2c22a9..38fa6e49e791 100644 --- a/arch/ia64/lib/Makefile +++ b/arch/ia64/lib/Makefile | |||
| @@ -14,7 +14,7 @@ lib-y := __divsi3.o __udivsi3.o __modsi3.o __umodsi3.o \ | |||
| 14 | lib-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o | 14 | lib-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o |
| 15 | lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o | 15 | lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o |
| 16 | lib-$(CONFIG_PERFMON) += carta_random.o | 16 | lib-$(CONFIG_PERFMON) += carta_random.o |
| 17 | lib-$(CONFIG_MD_RAID5) += xor.o | 17 | lib-$(CONFIG_MD_RAID456) += xor.o |
| 18 | 18 | ||
| 19 | AFLAGS___divdi3.o = | 19 | AFLAGS___divdi3.o = |
| 20 | AFLAGS___udivdi3.o = -DUNSIGNED | 20 | AFLAGS___udivdi3.o = -DUNSIGNED |
diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index 2a88cdd6d924..e004143ba86b 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | #ifdef CONFIG_VIRTUAL_MEM_MAP | 28 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
| 29 | static unsigned long num_dma_physpages; | 29 | static unsigned long num_dma_physpages; |
| 30 | static unsigned long max_gap; | ||
| 30 | #endif | 31 | #endif |
| 31 | 32 | ||
| 32 | /** | 33 | /** |
| @@ -45,9 +46,15 @@ show_mem (void) | |||
| 45 | 46 | ||
| 46 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); | 47 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); |
| 47 | i = max_mapnr; | 48 | i = max_mapnr; |
| 48 | while (i-- > 0) { | 49 | for (i = 0; i < max_mapnr; i++) { |
| 49 | if (!pfn_valid(i)) | 50 | if (!pfn_valid(i)) { |
| 51 | #ifdef CONFIG_VIRTUAL_MEM_MAP | ||
| 52 | if (max_gap < LARGE_GAP) | ||
| 53 | continue; | ||
| 54 | i = vmemmap_find_next_valid_pfn(0, i) - 1; | ||
| 55 | #endif | ||
| 50 | continue; | 56 | continue; |
| 57 | } | ||
| 51 | total++; | 58 | total++; |
| 52 | if (PageReserved(mem_map+i)) | 59 | if (PageReserved(mem_map+i)) |
| 53 | reserved++; | 60 | reserved++; |
| @@ -234,7 +241,6 @@ paging_init (void) | |||
| 234 | unsigned long zones_size[MAX_NR_ZONES]; | 241 | unsigned long zones_size[MAX_NR_ZONES]; |
| 235 | #ifdef CONFIG_VIRTUAL_MEM_MAP | 242 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
| 236 | unsigned long zholes_size[MAX_NR_ZONES]; | 243 | unsigned long zholes_size[MAX_NR_ZONES]; |
| 237 | unsigned long max_gap; | ||
| 238 | #endif | 244 | #endif |
| 239 | 245 | ||
| 240 | /* initialize mem_map[] */ | 246 | /* initialize mem_map[] */ |
| @@ -266,7 +272,6 @@ paging_init (void) | |||
| 266 | } | 272 | } |
| 267 | } | 273 | } |
| 268 | 274 | ||
| 269 | max_gap = 0; | ||
| 270 | efi_memmap_walk(find_largest_hole, (u64 *)&max_gap); | 275 | efi_memmap_walk(find_largest_hole, (u64 *)&max_gap); |
| 271 | if (max_gap < LARGE_GAP) { | 276 | if (max_gap < LARGE_GAP) { |
| 272 | vmem_map = (struct page *) 0; | 277 | vmem_map = (struct page *) 0; |
| @@ -277,7 +282,8 @@ paging_init (void) | |||
| 277 | 282 | ||
| 278 | /* allocate virtual_mem_map */ | 283 | /* allocate virtual_mem_map */ |
| 279 | 284 | ||
| 280 | map_size = PAGE_ALIGN(max_low_pfn * sizeof(struct page)); | 285 | map_size = PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) * |
| 286 | sizeof(struct page)); | ||
| 281 | vmalloc_end -= map_size; | 287 | vmalloc_end -= map_size; |
| 282 | vmem_map = (struct page *) vmalloc_end; | 288 | vmem_map = (struct page *) vmalloc_end; |
| 283 | efi_memmap_walk(create_mem_map_page_table, NULL); | 289 | efi_memmap_walk(create_mem_map_page_table, NULL); |
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index 99bd9e30db96..d260bffa01ab 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c | |||
| @@ -534,68 +534,6 @@ void __cpuinit *per_cpu_init(void) | |||
| 534 | } | 534 | } |
| 535 | #endif /* CONFIG_SMP */ | 535 | #endif /* CONFIG_SMP */ |
| 536 | 536 | ||
| 537 | #ifdef CONFIG_VIRTUAL_MEM_MAP | ||
| 538 | static inline int find_next_valid_pfn_for_pgdat(pg_data_t *pgdat, int i) | ||
| 539 | { | ||
| 540 | unsigned long end_address, hole_next_pfn; | ||
| 541 | unsigned long stop_address; | ||
| 542 | |||
| 543 | end_address = (unsigned long) &vmem_map[pgdat->node_start_pfn + i]; | ||
| 544 | end_address = PAGE_ALIGN(end_address); | ||
| 545 | |||
| 546 | stop_address = (unsigned long) &vmem_map[ | ||
| 547 | pgdat->node_start_pfn + pgdat->node_spanned_pages]; | ||
| 548 | |||
| 549 | do { | ||
| 550 | pgd_t *pgd; | ||
| 551 | pud_t *pud; | ||
| 552 | pmd_t *pmd; | ||
| 553 | pte_t *pte; | ||
| 554 | |||
| 555 | pgd = pgd_offset_k(end_address); | ||
| 556 | if (pgd_none(*pgd)) { | ||
| 557 | end_address += PGDIR_SIZE; | ||
| 558 | continue; | ||
| 559 | } | ||
| 560 | |||
| 561 | pud = pud_offset(pgd, end_address); | ||
| 562 | if (pud_none(*pud)) { | ||
| 563 | end_address += PUD_SIZE; | ||
| 564 | continue; | ||
| 565 | } | ||
| 566 | |||
| 567 | pmd = pmd_offset(pud, end_address); | ||
| 568 | if (pmd_none(*pmd)) { | ||
| 569 | end_address += PMD_SIZE; | ||
| 570 | continue; | ||
| 571 | } | ||
| 572 | |||
| 573 | pte = pte_offset_kernel(pmd, end_address); | ||
| 574 | retry_pte: | ||
| 575 | if (pte_none(*pte)) { | ||
| 576 | end_address += PAGE_SIZE; | ||
| 577 | pte++; | ||
| 578 | if ((end_address < stop_address) && | ||
| 579 | (end_address != ALIGN(end_address, 1UL << PMD_SHIFT))) | ||
| 580 | goto retry_pte; | ||
| 581 | continue; | ||
| 582 | } | ||
| 583 | /* Found next valid vmem_map page */ | ||
| 584 | break; | ||
| 585 | } while (end_address < stop_address); | ||
| 586 | |||
| 587 | end_address = min(end_address, stop_address); | ||
| 588 | end_address = end_address - (unsigned long) vmem_map + sizeof(struct page) - 1; | ||
| 589 | hole_next_pfn = end_address / sizeof(struct page); | ||
| 590 | return hole_next_pfn - pgdat->node_start_pfn; | ||
| 591 | } | ||
| 592 | #else | ||
| 593 | static inline int find_next_valid_pfn_for_pgdat(pg_data_t *pgdat, int i) | ||
| 594 | { | ||
| 595 | return i + 1; | ||
| 596 | } | ||
| 597 | #endif | ||
| 598 | |||
| 599 | /** | 537 | /** |
| 600 | * show_mem - give short summary of memory stats | 538 | * show_mem - give short summary of memory stats |
| 601 | * | 539 | * |
| @@ -625,7 +563,8 @@ void show_mem(void) | |||
| 625 | if (pfn_valid(pgdat->node_start_pfn + i)) | 563 | if (pfn_valid(pgdat->node_start_pfn + i)) |
| 626 | page = pfn_to_page(pgdat->node_start_pfn + i); | 564 | page = pfn_to_page(pgdat->node_start_pfn + i); |
| 627 | else { | 565 | else { |
| 628 | i = find_next_valid_pfn_for_pgdat(pgdat, i) - 1; | 566 | i = vmemmap_find_next_valid_pfn(pgdat->node_id, |
| 567 | i) - 1; | ||
| 629 | continue; | 568 | continue; |
| 630 | } | 569 | } |
| 631 | if (PageReserved(page)) | 570 | if (PageReserved(page)) |
| @@ -751,7 +690,8 @@ void __init paging_init(void) | |||
| 751 | efi_memmap_walk(filter_rsvd_memory, count_node_pages); | 690 | efi_memmap_walk(filter_rsvd_memory, count_node_pages); |
| 752 | 691 | ||
| 753 | #ifdef CONFIG_VIRTUAL_MEM_MAP | 692 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
| 754 | vmalloc_end -= PAGE_ALIGN(max_low_pfn * sizeof(struct page)); | 693 | vmalloc_end -= PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) * |
| 694 | sizeof(struct page)); | ||
| 755 | vmem_map = (struct page *) vmalloc_end; | 695 | vmem_map = (struct page *) vmalloc_end; |
| 756 | efi_memmap_walk(create_mem_map_page_table, NULL); | 696 | efi_memmap_walk(create_mem_map_page_table, NULL); |
| 757 | printk("Virtual mem_map starts at 0x%p\n", vmem_map); | 697 | printk("Virtual mem_map starts at 0x%p\n", vmem_map); |
diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 2f50c064513c..30617ccb4f7e 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c | |||
| @@ -415,6 +415,61 @@ ia64_mmu_init (void *my_cpu_data) | |||
| 415 | } | 415 | } |
| 416 | 416 | ||
| 417 | #ifdef CONFIG_VIRTUAL_MEM_MAP | 417 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
| 418 | int vmemmap_find_next_valid_pfn(int node, int i) | ||
| 419 | { | ||
| 420 | unsigned long end_address, hole_next_pfn; | ||
| 421 | unsigned long stop_address; | ||
| 422 | pg_data_t *pgdat = NODE_DATA(node); | ||
| 423 | |||
| 424 | end_address = (unsigned long) &vmem_map[pgdat->node_start_pfn + i]; | ||
| 425 | end_address = PAGE_ALIGN(end_address); | ||
| 426 | |||
| 427 | stop_address = (unsigned long) &vmem_map[ | ||
| 428 | pgdat->node_start_pfn + pgdat->node_spanned_pages]; | ||
| 429 | |||
| 430 | do { | ||
| 431 | pgd_t *pgd; | ||
| 432 | pud_t *pud; | ||
| 433 | pmd_t *pmd; | ||
| 434 | pte_t *pte; | ||
| 435 | |||
| 436 | pgd = pgd_offset_k(end_address); | ||
| 437 | if (pgd_none(*pgd)) { | ||
| 438 | end_address += PGDIR_SIZE; | ||
| 439 | continue; | ||
| 440 | } | ||
| 441 | |||
| 442 | pud = pud_offset(pgd, end_address); | ||
| 443 | if (pud_none(*pud)) { | ||
| 444 | end_address += PUD_SIZE; | ||
| 445 | continue; | ||
| 446 | } | ||
| 447 | |||
| 448 | pmd = pmd_offset(pud, end_address); | ||
| 449 | if (pmd_none(*pmd)) { | ||
| 450 | end_address += PMD_SIZE; | ||
| 451 | continue; | ||
| 452 | } | ||
| 453 | |||
| 454 | pte = pte_offset_kernel(pmd, end_address); | ||
| 455 | retry_pte: | ||
| 456 | if (pte_none(*pte)) { | ||
| 457 | end_address += PAGE_SIZE; | ||
| 458 | pte++; | ||
| 459 | if ((end_address < stop_address) && | ||
| 460 | (end_address != ALIGN(end_address, 1UL << PMD_SHIFT))) | ||
| 461 | goto retry_pte; | ||
| 462 | continue; | ||
| 463 | } | ||
| 464 | /* Found next valid vmem_map page */ | ||
| 465 | break; | ||
| 466 | } while (end_address < stop_address); | ||
| 467 | |||
| 468 | end_address = min(end_address, stop_address); | ||
| 469 | end_address = end_address - (unsigned long) vmem_map + sizeof(struct page) - 1; | ||
| 470 | hole_next_pfn = end_address / sizeof(struct page); | ||
| 471 | return hole_next_pfn - pgdat->node_start_pfn; | ||
| 472 | } | ||
| 418 | 473 | ||
| 419 | int __init | 474 | int __init |
| 420 | create_mem_map_page_table (u64 start, u64 end, void *arg) | 475 | create_mem_map_page_table (u64 start, u64 end, void *arg) |
diff --git a/arch/ia64/mm/ioremap.c b/arch/ia64/mm/ioremap.c index 07bd02b6c372..4280c074d64e 100644 --- a/arch/ia64/mm/ioremap.c +++ b/arch/ia64/mm/ioremap.c | |||
| @@ -32,7 +32,7 @@ ioremap (unsigned long offset, unsigned long size) | |||
| 32 | */ | 32 | */ |
| 33 | attr = kern_mem_attribute(offset, size); | 33 | attr = kern_mem_attribute(offset, size); |
| 34 | if (attr & EFI_MEMORY_WB) | 34 | if (attr & EFI_MEMORY_WB) |
| 35 | return phys_to_virt(offset); | 35 | return (void __iomem *) phys_to_virt(offset); |
| 36 | else if (attr & EFI_MEMORY_UC) | 36 | else if (attr & EFI_MEMORY_UC) |
| 37 | return __ioremap(offset, size); | 37 | return __ioremap(offset, size); |
| 38 | 38 | ||
| @@ -43,7 +43,7 @@ ioremap (unsigned long offset, unsigned long size) | |||
| 43 | gran_base = GRANULEROUNDDOWN(offset); | 43 | gran_base = GRANULEROUNDDOWN(offset); |
| 44 | gran_size = GRANULEROUNDUP(offset + size) - gran_base; | 44 | gran_size = GRANULEROUNDUP(offset + size) - gran_base; |
| 45 | if (efi_mem_attribute(gran_base, gran_size) & EFI_MEMORY_WB) | 45 | if (efi_mem_attribute(gran_base, gran_size) & EFI_MEMORY_WB) |
| 46 | return phys_to_virt(offset); | 46 | return (void __iomem *) phys_to_virt(offset); |
| 47 | 47 | ||
| 48 | return __ioremap(offset, size); | 48 | return __ioremap(offset, size); |
| 49 | } | 49 | } |
| @@ -53,7 +53,7 @@ void __iomem * | |||
| 53 | ioremap_nocache (unsigned long offset, unsigned long size) | 53 | ioremap_nocache (unsigned long offset, unsigned long size) |
| 54 | { | 54 | { |
| 55 | if (kern_mem_attribute(offset, size) & EFI_MEMORY_WB) | 55 | if (kern_mem_attribute(offset, size) & EFI_MEMORY_WB) |
| 56 | return 0; | 56 | return NULL; |
| 57 | 57 | ||
| 58 | return __ioremap(offset, size); | 58 | return __ioremap(offset, size); |
| 59 | } | 59 | } |
diff --git a/arch/ia64/sn/kernel/xpc_main.c b/arch/ia64/sn/kernel/xpc_main.c index 99b123a6421a..5e8e59efb347 100644 --- a/arch/ia64/sn/kernel/xpc_main.c +++ b/arch/ia64/sn/kernel/xpc_main.c | |||
| @@ -480,7 +480,7 @@ xpc_activating(void *__partid) | |||
| 480 | partid_t partid = (u64) __partid; | 480 | partid_t partid = (u64) __partid; |
| 481 | struct xpc_partition *part = &xpc_partitions[partid]; | 481 | struct xpc_partition *part = &xpc_partitions[partid]; |
| 482 | unsigned long irq_flags; | 482 | unsigned long irq_flags; |
| 483 | struct sched_param param = { sched_priority: MAX_RT_PRIO - 1 }; | 483 | struct sched_param param = { .sched_priority = MAX_RT_PRIO - 1 }; |
| 484 | int ret; | 484 | int ret; |
| 485 | 485 | ||
| 486 | 486 | ||
diff --git a/arch/ia64/sn/pci/tioce_provider.c b/arch/ia64/sn/pci/tioce_provider.c index 17cd34284886..af7171adcd2c 100644 --- a/arch/ia64/sn/pci/tioce_provider.c +++ b/arch/ia64/sn/pci/tioce_provider.c | |||
| @@ -74,7 +74,7 @@ tioce_mmr_war_pre(struct tioce_kernel *kern, void *mmr_addr) | |||
| 74 | else | 74 | else |
| 75 | mmr_war_offset = 0x158; | 75 | mmr_war_offset = 0x158; |
| 76 | 76 | ||
| 77 | readq_relaxed((void *)(mmr_base + mmr_war_offset)); | 77 | readq_relaxed((void __iomem *)(mmr_base + mmr_war_offset)); |
| 78 | } | 78 | } |
| 79 | } | 79 | } |
| 80 | 80 | ||
| @@ -92,8 +92,8 @@ tioce_mmr_war_post(struct tioce_kernel *kern, void *mmr_addr) | |||
| 92 | 92 | ||
| 93 | if (mmr_offset < 0x45000) { | 93 | if (mmr_offset < 0x45000) { |
| 94 | if (mmr_offset == 0x100) | 94 | if (mmr_offset == 0x100) |
| 95 | readq_relaxed((void *)(mmr_base + 0x38)); | 95 | readq_relaxed((void __iomem *)(mmr_base + 0x38)); |
| 96 | readq_relaxed((void *)(mmr_base + 0xb050)); | 96 | readq_relaxed((void __iomem *)(mmr_base + 0xb050)); |
| 97 | } | 97 | } |
| 98 | } | 98 | } |
| 99 | 99 | ||
diff --git a/drivers/char/snsc.c b/drivers/char/snsc.c index afc6eda602f7..07e0b75f2338 100644 --- a/drivers/char/snsc.c +++ b/drivers/char/snsc.c | |||
| @@ -374,7 +374,12 @@ scdrv_init(void) | |||
| 374 | struct sysctl_data_s *scd; | 374 | struct sysctl_data_s *scd; |
| 375 | void *salbuf; | 375 | void *salbuf; |
| 376 | dev_t first_dev, dev; | 376 | dev_t first_dev, dev; |
| 377 | nasid_t event_nasid = ia64_sn_get_console_nasid(); | 377 | nasid_t event_nasid; |
| 378 | |||
| 379 | if (!ia64_platform_is("sn2")) | ||
| 380 | return -ENODEV; | ||
| 381 | |||
| 382 | event_nasid = ia64_sn_get_console_nasid(); | ||
| 378 | 383 | ||
| 379 | if (alloc_chrdev_region(&first_dev, 0, num_cnodes, | 384 | if (alloc_chrdev_region(&first_dev, 0, num_cnodes, |
| 380 | SYSCTL_BASENAME) < 0) { | 385 | SYSCTL_BASENAME) < 0) { |
diff --git a/include/asm-ia64/meminit.h b/include/asm-ia64/meminit.h index 894bc4d89dc0..6a33a07b3f1d 100644 --- a/include/asm-ia64/meminit.h +++ b/include/asm-ia64/meminit.h | |||
| @@ -56,6 +56,11 @@ extern void efi_memmap_init(unsigned long *, unsigned long *); | |||
| 56 | extern struct page *vmem_map; | 56 | extern struct page *vmem_map; |
| 57 | extern int find_largest_hole (u64 start, u64 end, void *arg); | 57 | extern int find_largest_hole (u64 start, u64 end, void *arg); |
| 58 | extern int create_mem_map_page_table (u64 start, u64 end, void *arg); | 58 | extern int create_mem_map_page_table (u64 start, u64 end, void *arg); |
| 59 | extern int vmemmap_find_next_valid_pfn(int, int); | ||
| 60 | #else | ||
| 61 | static inline int vmemmap_find_next_valid_pfn(int node, int i) | ||
| 62 | { | ||
| 63 | return i + 1; | ||
| 64 | } | ||
| 59 | #endif | 65 | #endif |
| 60 | |||
| 61 | #endif /* meminit_h */ | 66 | #endif /* meminit_h */ |
diff --git a/include/asm-ia64/pal.h b/include/asm-ia64/pal.h index 37e52a2836b0..20a8d618c845 100644 --- a/include/asm-ia64/pal.h +++ b/include/asm-ia64/pal.h | |||
| @@ -1433,7 +1433,12 @@ typedef union pal_version_u { | |||
| 1433 | } pal_version_u_t; | 1433 | } pal_version_u_t; |
| 1434 | 1434 | ||
| 1435 | 1435 | ||
| 1436 | /* Return PAL version information */ | 1436 | /* |
| 1437 | * Return PAL version information. While the documentation states that | ||
| 1438 | * PAL_VERSION can be called in either physical or virtual mode, some | ||
| 1439 | * implementations only allow physical calls. We don't call it very often, | ||
| 1440 | * so the overhead isn't worth eliminating. | ||
| 1441 | */ | ||
| 1437 | static inline s64 | 1442 | static inline s64 |
| 1438 | ia64_pal_version (pal_version_u_t *pal_min_version, pal_version_u_t *pal_cur_version) | 1443 | ia64_pal_version (pal_version_u_t *pal_min_version, pal_version_u_t *pal_cur_version) |
| 1439 | { | 1444 | { |
diff --git a/include/asm-ia64/sn/xpc.h b/include/asm-ia64/sn/xpc.h index 8406f1ef4caf..b72af597878d 100644 --- a/include/asm-ia64/sn/xpc.h +++ b/include/asm-ia64/sn/xpc.h | |||
| @@ -1124,8 +1124,8 @@ xpc_notify_IRQ_send_local(struct xpc_channel *ch, u8 ipi_flag, | |||
| 1124 | #define XPC_GET_IPI_FLAGS(_amo, _c) ((u8) (((_amo) >> ((_c) * 8)) & 0xff)) | 1124 | #define XPC_GET_IPI_FLAGS(_amo, _c) ((u8) (((_amo) >> ((_c) * 8)) & 0xff)) |
| 1125 | #define XPC_SET_IPI_FLAGS(_amo, _c, _f) (_amo) |= ((u64) (_f) << ((_c) * 8)) | 1125 | #define XPC_SET_IPI_FLAGS(_amo, _c, _f) (_amo) |= ((u64) (_f) << ((_c) * 8)) |
| 1126 | 1126 | ||
| 1127 | #define XPC_ANY_OPENCLOSE_IPI_FLAGS_SET(_amo) ((_amo) & 0x0f0f0f0f0f0f0f0f) | 1127 | #define XPC_ANY_OPENCLOSE_IPI_FLAGS_SET(_amo) ((_amo) & __IA64_UL_CONST(0x0f0f0f0f0f0f0f0f)) |
| 1128 | #define XPC_ANY_MSG_IPI_FLAGS_SET(_amo) ((_amo) & 0x1010101010101010) | 1128 | #define XPC_ANY_MSG_IPI_FLAGS_SET(_amo) ((_amo) & __IA64_UL_CONST(0x1010101010101010)) |
| 1129 | 1129 | ||
| 1130 | 1130 | ||
| 1131 | static inline void | 1131 | static inline void |
diff --git a/include/asm-ia64/system.h b/include/asm-ia64/system.h index fc9677bc87ee..384fbf7f2a0f 100644 --- a/include/asm-ia64/system.h +++ b/include/asm-ia64/system.h | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | * 0xa000000000000000+2*PERCPU_PAGE_SIZE | 24 | * 0xa000000000000000+2*PERCPU_PAGE_SIZE |
| 25 | * - 0xa000000000000000+3*PERCPU_PAGE_SIZE remain unmapped (guard page) | 25 | * - 0xa000000000000000+3*PERCPU_PAGE_SIZE remain unmapped (guard page) |
| 26 | */ | 26 | */ |
| 27 | #define KERNEL_START (GATE_ADDR+0x100000000) | 27 | #define KERNEL_START (GATE_ADDR+__IA64_UL_CONST(0x100000000)) |
| 28 | #define PERCPU_ADDR (-PERCPU_PAGE_SIZE) | 28 | #define PERCPU_ADDR (-PERCPU_PAGE_SIZE) |
| 29 | 29 | ||
| 30 | #ifndef __ASSEMBLY__ | 30 | #ifndef __ASSEMBLY__ |
