diff options
Diffstat (limited to 'arch/ia64')
-rw-r--r-- | arch/ia64/Makefile | 1 | ||||
-rw-r--r-- | arch/ia64/kernel/acpi.c | 9 | ||||
-rw-r--r-- | arch/ia64/kernel/iosapic.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/perfmon.c | 10 | ||||
-rw-r--r-- | arch/ia64/kernel/sal.c | 7 | ||||
-rw-r--r-- | arch/ia64/kernel/setup.c | 3 | ||||
-rw-r--r-- | arch/ia64/kvm/mmio.c | 3 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/sn2/sn2_smp.c | 2 | ||||
-rw-r--r-- | arch/ia64/uv/kernel/setup.c | 12 |
9 files changed, 33 insertions, 16 deletions
diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile index 88f1a55c6c94..e67ee3f27698 100644 --- a/arch/ia64/Makefile +++ b/arch/ia64/Makefile | |||
@@ -57,6 +57,7 @@ core-$(CONFIG_IA64_GENERIC) += arch/ia64/dig/ | |||
57 | core-$(CONFIG_IA64_HP_ZX1) += arch/ia64/dig/ | 57 | core-$(CONFIG_IA64_HP_ZX1) += arch/ia64/dig/ |
58 | core-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += arch/ia64/dig/ | 58 | core-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += arch/ia64/dig/ |
59 | core-$(CONFIG_IA64_SGI_SN2) += arch/ia64/sn/ | 59 | core-$(CONFIG_IA64_SGI_SN2) += arch/ia64/sn/ |
60 | core-$(CONFIG_IA64_SGI_UV) += arch/ia64/uv/ | ||
60 | core-$(CONFIG_KVM) += arch/ia64/kvm/ | 61 | core-$(CONFIG_KVM) += arch/ia64/kvm/ |
61 | 62 | ||
62 | drivers-$(CONFIG_PCI) += arch/ia64/pci/ | 63 | drivers-$(CONFIG_PCI) += arch/ia64/pci/ |
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index 853d1f11be00..43687cc60dfb 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -465,7 +465,6 @@ void __init acpi_numa_slit_init(struct acpi_table_slit *slit) | |||
465 | printk(KERN_ERR | 465 | printk(KERN_ERR |
466 | "ACPI 2.0 SLIT: size mismatch: %d expected, %d actual\n", | 466 | "ACPI 2.0 SLIT: size mismatch: %d expected, %d actual\n", |
467 | len, slit->header.length); | 467 | len, slit->header.length); |
468 | memset(numa_slit, 10, sizeof(numa_slit)); | ||
469 | return; | 468 | return; |
470 | } | 469 | } |
471 | slit_table = slit; | 470 | slit_table = slit; |
@@ -574,8 +573,14 @@ void __init acpi_numa_arch_fixup(void) | |||
574 | printk(KERN_INFO "Number of memory chunks in system = %d\n", | 573 | printk(KERN_INFO "Number of memory chunks in system = %d\n", |
575 | num_node_memblks); | 574 | num_node_memblks); |
576 | 575 | ||
577 | if (!slit_table) | 576 | if (!slit_table) { |
577 | for (i = 0; i < MAX_NUMNODES; i++) | ||
578 | for (j = 0; j < MAX_NUMNODES; j++) | ||
579 | node_distance(i, j) = i == j ? LOCAL_DISTANCE : | ||
580 | REMOTE_DISTANCE; | ||
578 | return; | 581 | return; |
582 | } | ||
583 | |||
579 | memset(numa_slit, -1, sizeof(numa_slit)); | 584 | memset(numa_slit, -1, sizeof(numa_slit)); |
580 | for (i = 0; i < slit_table->locality_count; i++) { | 585 | for (i = 0; i < slit_table->locality_count; i++) { |
581 | if (!pxm_bit_test(i)) | 586 | if (!pxm_bit_test(i)) |
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c index 082c31dcfd99..39752cdef6ff 100644 --- a/arch/ia64/kernel/iosapic.c +++ b/arch/ia64/kernel/iosapic.c | |||
@@ -558,8 +558,6 @@ static struct iosapic_rte_info * __init_refok iosapic_alloc_rte (void) | |||
558 | if (!iosapic_kmalloc_ok && list_empty(&free_rte_list)) { | 558 | if (!iosapic_kmalloc_ok && list_empty(&free_rte_list)) { |
559 | rte = alloc_bootmem(sizeof(struct iosapic_rte_info) * | 559 | rte = alloc_bootmem(sizeof(struct iosapic_rte_info) * |
560 | NR_PREALLOCATE_RTE_ENTRIES); | 560 | NR_PREALLOCATE_RTE_ENTRIES); |
561 | if (!rte) | ||
562 | return NULL; | ||
563 | for (i = 0; i < NR_PREALLOCATE_RTE_ENTRIES; i++, rte++) | 561 | for (i = 0; i < NR_PREALLOCATE_RTE_ENTRIES; i++, rte++) |
564 | list_add(&rte->rte_list, &free_rte_list); | 562 | list_add(&rte->rte_list, &free_rte_list); |
565 | } | 563 | } |
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index 71d05133f556..7714a97b0104 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c | |||
@@ -1864,11 +1864,6 @@ pfm_flush(struct file *filp, fl_owner_t id) | |||
1864 | * invoked after, it will find an empty queue and no | 1864 | * invoked after, it will find an empty queue and no |
1865 | * signal will be sent. In both case, we are safe | 1865 | * signal will be sent. In both case, we are safe |
1866 | */ | 1866 | */ |
1867 | if (filp->f_flags & FASYNC) { | ||
1868 | DPRINT(("cleaning up async_queue=%p\n", ctx->ctx_async_queue)); | ||
1869 | pfm_do_fasync (-1, filp, ctx, 0); | ||
1870 | } | ||
1871 | |||
1872 | PROTECT_CTX(ctx, flags); | 1867 | PROTECT_CTX(ctx, flags); |
1873 | 1868 | ||
1874 | state = ctx->ctx_state; | 1869 | state = ctx->ctx_state; |
@@ -1999,6 +1994,11 @@ pfm_close(struct inode *inode, struct file *filp) | |||
1999 | return -EBADF; | 1994 | return -EBADF; |
2000 | } | 1995 | } |
2001 | 1996 | ||
1997 | if (filp->f_flags & FASYNC) { | ||
1998 | DPRINT(("cleaning up async_queue=%p\n", ctx->ctx_async_queue)); | ||
1999 | pfm_do_fasync(-1, filp, ctx, 0); | ||
2000 | } | ||
2001 | |||
2002 | PROTECT_CTX(ctx, flags); | 2002 | PROTECT_CTX(ctx, flags); |
2003 | 2003 | ||
2004 | state = ctx->ctx_state; | 2004 | state = ctx->ctx_state; |
diff --git a/arch/ia64/kernel/sal.c b/arch/ia64/kernel/sal.c index 7e0259709c04..0464173ea568 100644 --- a/arch/ia64/kernel/sal.c +++ b/arch/ia64/kernel/sal.c | |||
@@ -252,11 +252,10 @@ check_sal_cache_flush (void) | |||
252 | local_irq_save(flags); | 252 | local_irq_save(flags); |
253 | 253 | ||
254 | /* | 254 | /* |
255 | * Schedule a timer interrupt, wait until it's reported, and see if | 255 | * Send ourselves a timer interrupt, wait until it's reported, and see |
256 | * SAL_CACHE_FLUSH drops it. | 256 | * if SAL_CACHE_FLUSH drops it. |
257 | */ | 257 | */ |
258 | ia64_set_itv(IA64_TIMER_VECTOR); | 258 | platform_send_ipi(cpu, IA64_TIMER_VECTOR, IA64_IPI_DM_INT, 0); |
259 | ia64_set_itm(ia64_get_itc() + 1000); | ||
260 | 259 | ||
261 | while (!ia64_get_irr(IA64_TIMER_VECTOR)) | 260 | while (!ia64_get_irr(IA64_TIMER_VECTOR)) |
262 | cpu_relax(); | 261 | cpu_relax(); |
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index f48a809c686d..4ae15c8c2488 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -578,8 +578,6 @@ setup_arch (char **cmdline_p) | |||
578 | cpu_init(); /* initialize the bootstrap CPU */ | 578 | cpu_init(); /* initialize the bootstrap CPU */ |
579 | mmu_context_init(); /* initialize context_id bitmap */ | 579 | mmu_context_init(); /* initialize context_id bitmap */ |
580 | 580 | ||
581 | check_sal_cache_flush(); | ||
582 | |||
583 | #ifdef CONFIG_ACPI | 581 | #ifdef CONFIG_ACPI |
584 | acpi_boot_init(); | 582 | acpi_boot_init(); |
585 | #endif | 583 | #endif |
@@ -607,6 +605,7 @@ setup_arch (char **cmdline_p) | |||
607 | ia64_mca_init(); | 605 | ia64_mca_init(); |
608 | 606 | ||
609 | platform_setup(cmdline_p); | 607 | platform_setup(cmdline_p); |
608 | check_sal_cache_flush(); | ||
610 | paging_init(); | 609 | paging_init(); |
611 | } | 610 | } |
612 | 611 | ||
diff --git a/arch/ia64/kvm/mmio.c b/arch/ia64/kvm/mmio.c index 351bf70da463..7f1a858bc69f 100644 --- a/arch/ia64/kvm/mmio.c +++ b/arch/ia64/kvm/mmio.c | |||
@@ -159,7 +159,8 @@ static void mmio_access(struct kvm_vcpu *vcpu, u64 src_pa, u64 *dest, | |||
159 | 159 | ||
160 | if (p->u.ioreq.state == STATE_IORESP_READY) { | 160 | if (p->u.ioreq.state == STATE_IORESP_READY) { |
161 | if (dir == IOREQ_READ) | 161 | if (dir == IOREQ_READ) |
162 | *dest = p->u.ioreq.data; | 162 | /* it's necessary to ensure zero extending */ |
163 | *dest = p->u.ioreq.data & (~0UL >> (64-(s*8))); | ||
163 | } else | 164 | } else |
164 | panic_vm(vcpu); | 165 | panic_vm(vcpu); |
165 | out: | 166 | out: |
diff --git a/arch/ia64/sn/kernel/sn2/sn2_smp.c b/arch/ia64/sn/kernel/sn2/sn2_smp.c index 49d3120415eb..e585f9a2afb9 100644 --- a/arch/ia64/sn/kernel/sn2/sn2_smp.c +++ b/arch/ia64/sn/kernel/sn2/sn2_smp.c | |||
@@ -512,6 +512,8 @@ static ssize_t sn2_ptc_proc_write(struct file *file, const char __user *user, si | |||
512 | int cpu; | 512 | int cpu; |
513 | char optstr[64]; | 513 | char optstr[64]; |
514 | 514 | ||
515 | if (count == 0 || count > sizeof(optstr)) | ||
516 | return -EINVAL; | ||
515 | if (copy_from_user(optstr, user, count)) | 517 | if (copy_from_user(optstr, user, count)) |
516 | return -EFAULT; | 518 | return -EFAULT; |
517 | optstr[count - 1] = '\0'; | 519 | optstr[count - 1] = '\0'; |
diff --git a/arch/ia64/uv/kernel/setup.c b/arch/ia64/uv/kernel/setup.c index 9aa743203c3c..cf5f28ae96c4 100644 --- a/arch/ia64/uv/kernel/setup.c +++ b/arch/ia64/uv/kernel/setup.c | |||
@@ -17,6 +17,9 @@ | |||
17 | DEFINE_PER_CPU(struct uv_hub_info_s, __uv_hub_info); | 17 | DEFINE_PER_CPU(struct uv_hub_info_s, __uv_hub_info); |
18 | EXPORT_PER_CPU_SYMBOL_GPL(__uv_hub_info); | 18 | EXPORT_PER_CPU_SYMBOL_GPL(__uv_hub_info); |
19 | 19 | ||
20 | #ifdef CONFIG_IA64_SGI_UV | ||
21 | int sn_prom_type; | ||
22 | #endif | ||
20 | 23 | ||
21 | struct redir_addr { | 24 | struct redir_addr { |
22 | unsigned long redirect; | 25 | unsigned long redirect; |
@@ -64,6 +67,15 @@ void __init uv_setup(char **cmdline_p) | |||
64 | m_n_config.s.m_skt = 37; | 67 | m_n_config.s.m_skt = 37; |
65 | m_n_config.s.n_skt = 0; | 68 | m_n_config.s.n_skt = 0; |
66 | mmr_base = 0; | 69 | mmr_base = 0; |
70 | #if 0 | ||
71 | /* Need BIOS calls - TDB */ | ||
72 | if (!ia64_sn_is_fake_prom()) | ||
73 | sn_prom_type = 1; | ||
74 | else | ||
75 | #endif | ||
76 | sn_prom_type = 2; | ||
77 | printk(KERN_INFO "Running on medusa with %s PROM\n", | ||
78 | (sn_prom_type == 1) ? "real" : "fake"); | ||
67 | } else { | 79 | } else { |
68 | get_lowmem_redirect(&lowmem_redir_base, &lowmem_redir_size); | 80 | get_lowmem_redirect(&lowmem_redir_base, &lowmem_redir_size); |
69 | node_id.v = uv_read_local_mmr(UVH_NODE_ID); | 81 | node_id.v = uv_read_local_mmr(UVH_NODE_ID); |