aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64')
-rw-r--r--arch/ia64/Kconfig4
-rw-r--r--arch/ia64/hp/common/hwsw_iommu.c2
-rw-r--r--arch/ia64/kernel/entry.S2
-rw-r--r--arch/ia64/kernel/err_inject.c2
-rw-r--r--arch/ia64/kernel/irq.c11
-rw-r--r--arch/ia64/kernel/kprobes.c12
-rw-r--r--arch/ia64/kernel/machvec.c2
-rw-r--r--arch/ia64/kernel/mca.c2
-rw-r--r--arch/ia64/mm/contig.c2
-rw-r--r--arch/ia64/mm/discontig.c2
-rw-r--r--arch/ia64/mm/init.c51
-rw-r--r--arch/ia64/sn/kernel/io_common.c2
-rw-r--r--arch/ia64/sn/kernel/xpc_partition.c2
-rw-r--r--arch/ia64/sn/kernel/xpnet.c4
14 files changed, 36 insertions, 64 deletions
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 6e41471449c0..de1bff659969 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -31,6 +31,10 @@ config ZONE_DMA
31 def_bool y 31 def_bool y
32 depends on !IA64_SGI_SN2 32 depends on !IA64_SGI_SN2
33 33
34config QUICKLIST
35 bool
36 default y
37
34config MMU 38config MMU
35 bool 39 bool
36 default y 40 default y
diff --git a/arch/ia64/hp/common/hwsw_iommu.c b/arch/ia64/hp/common/hwsw_iommu.c
index 2153bcacbe6c..94e57109fad6 100644
--- a/arch/ia64/hp/common/hwsw_iommu.c
+++ b/arch/ia64/hp/common/hwsw_iommu.c
@@ -63,7 +63,7 @@ use_swiotlb (struct device *dev)
63 return dev && dev->dma_mask && !hwiommu_dma_supported(dev, *dev->dma_mask); 63 return dev && dev->dma_mask && !hwiommu_dma_supported(dev, *dev->dma_mask);
64} 64}
65 65
66void 66void __init
67hwsw_init (void) 67hwsw_init (void)
68{ 68{
69 /* default to a smallish 2MB sw I/O TLB */ 69 /* default to a smallish 2MB sw I/O TLB */
diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S
index b50bf208678e..144b056282af 100644
--- a/arch/ia64/kernel/entry.S
+++ b/arch/ia64/kernel/entry.S
@@ -1583,5 +1583,7 @@ sys_call_table:
1583 data8 sys_vmsplice 1583 data8 sys_vmsplice
1584 data8 sys_ni_syscall // reserved for move_pages 1584 data8 sys_ni_syscall // reserved for move_pages
1585 data8 sys_getcpu 1585 data8 sys_getcpu
1586 data8 sys_epoll_pwait // 1305
1587 data8 sys_utimensat
1586 1588
1587 .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls 1589 .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
diff --git a/arch/ia64/kernel/err_inject.c b/arch/ia64/kernel/err_inject.c
index 6a49600cf337..b642648cc2ac 100644
--- a/arch/ia64/kernel/err_inject.c
+++ b/arch/ia64/kernel/err_inject.c
@@ -291,5 +291,5 @@ module_init(err_inject_init);
291module_exit(err_inject_exit); 291module_exit(err_inject_exit);
292 292
293MODULE_AUTHOR("Fenghua Yu <fenghua.yu@intel.com>"); 293MODULE_AUTHOR("Fenghua Yu <fenghua.yu@intel.com>");
294MODULE_DESCRIPTION("MC error injection kenrel sysfs interface"); 294MODULE_DESCRIPTION("MC error injection kernel sysfs interface");
295MODULE_LICENSE("GPL"); 295MODULE_LICENSE("GPL");
diff --git a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c
index ce49c85c928f..b4c239685d2e 100644
--- a/arch/ia64/kernel/irq.c
+++ b/arch/ia64/kernel/irq.c
@@ -104,6 +104,17 @@ void set_irq_affinity_info (unsigned int irq, int hwid, int redir)
104 irq_redir[irq] = (char) (redir & 0xff); 104 irq_redir[irq] = (char) (redir & 0xff);
105 } 105 }
106} 106}
107
108bool is_affinity_mask_valid(cpumask_t cpumask)
109{
110 if (ia64_platform_is("sn2")) {
111 /* Only allow one CPU to be specified in the smp_affinity mask */
112 if (cpus_weight(cpumask) != 1)
113 return false;
114 }
115 return true;
116}
117
107#endif /* CONFIG_SMP */ 118#endif /* CONFIG_SMP */
108 119
109#ifdef CONFIG_HOTPLUG_CPU 120#ifdef CONFIG_HOTPLUG_CPU
diff --git a/arch/ia64/kernel/kprobes.c b/arch/ia64/kernel/kprobes.c
index 4f5fd0960ba7..72e593e94053 100644
--- a/arch/ia64/kernel/kprobes.c
+++ b/arch/ia64/kernel/kprobes.c
@@ -370,14 +370,18 @@ static int __kprobes valid_kprobe_addr(int template, int slot,
370 370
371static void __kprobes save_previous_kprobe(struct kprobe_ctlblk *kcb) 371static void __kprobes save_previous_kprobe(struct kprobe_ctlblk *kcb)
372{ 372{
373 kcb->prev_kprobe.kp = kprobe_running(); 373 unsigned int i;
374 kcb->prev_kprobe.status = kcb->kprobe_status; 374 i = atomic_add_return(1, &kcb->prev_kprobe_index);
375 kcb->prev_kprobe[i-1].kp = kprobe_running();
376 kcb->prev_kprobe[i-1].status = kcb->kprobe_status;
375} 377}
376 378
377static void __kprobes restore_previous_kprobe(struct kprobe_ctlblk *kcb) 379static void __kprobes restore_previous_kprobe(struct kprobe_ctlblk *kcb)
378{ 380{
379 __get_cpu_var(current_kprobe) = kcb->prev_kprobe.kp; 381 unsigned int i;
380 kcb->kprobe_status = kcb->prev_kprobe.status; 382 i = atomic_sub_return(1, &kcb->prev_kprobe_index);
383 __get_cpu_var(current_kprobe) = kcb->prev_kprobe[i].kp;
384 kcb->kprobe_status = kcb->prev_kprobe[i].status;
381} 385}
382 386
383static void __kprobes set_current_kprobe(struct kprobe *p, 387static void __kprobes set_current_kprobe(struct kprobe *p,
diff --git a/arch/ia64/kernel/machvec.c b/arch/ia64/kernel/machvec.c
index 9620822270a6..13df337508e7 100644
--- a/arch/ia64/kernel/machvec.c
+++ b/arch/ia64/kernel/machvec.c
@@ -35,7 +35,7 @@ lookup_machvec (const char *name)
35 return 0; 35 return 0;
36} 36}
37 37
38void 38void __init
39machvec_init (const char *name) 39machvec_init (const char *name)
40{ 40{
41 struct ia64_machine_vector *mv; 41 struct ia64_machine_vector *mv;
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c
index f8ae709de0b5..26814de6c29a 100644
--- a/arch/ia64/kernel/mca.c
+++ b/arch/ia64/kernel/mca.c
@@ -118,7 +118,9 @@ static ia64_mc_info_t ia64_mc_info;
118#define CPE_HISTORY_LENGTH 5 118#define CPE_HISTORY_LENGTH 5
119#define CMC_HISTORY_LENGTH 5 119#define CMC_HISTORY_LENGTH 5
120 120
121#ifdef CONFIG_ACPI
121static struct timer_list cpe_poll_timer; 122static struct timer_list cpe_poll_timer;
123#endif
122static struct timer_list cmc_poll_timer; 124static struct timer_list cmc_poll_timer;
123/* 125/*
124 * This variable tells whether we are currently in polling mode. 126 * This variable tells whether we are currently in polling mode.
diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c
index 44ce5ed9444c..7ac8592a35b6 100644
--- a/arch/ia64/mm/contig.c
+++ b/arch/ia64/mm/contig.c
@@ -88,7 +88,7 @@ void show_mem(void)
88 printk(KERN_INFO "%d pages shared\n", total_shared); 88 printk(KERN_INFO "%d pages shared\n", total_shared);
89 printk(KERN_INFO "%d pages swap cached\n", total_cached); 89 printk(KERN_INFO "%d pages swap cached\n", total_cached);
90 printk(KERN_INFO "Total of %ld pages in page table cache\n", 90 printk(KERN_INFO "Total of %ld pages in page table cache\n",
91 pgtable_quicklist_total_size()); 91 quicklist_total_size());
92 printk(KERN_INFO "%d free buffer pages\n", nr_free_buffer_pages()); 92 printk(KERN_INFO "%d free buffer pages\n", nr_free_buffer_pages());
93} 93}
94 94
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c
index 94844442812a..38085ac18338 100644
--- a/arch/ia64/mm/discontig.c
+++ b/arch/ia64/mm/discontig.c
@@ -561,7 +561,7 @@ void show_mem(void)
561 printk(KERN_INFO "%d pages shared\n", total_shared); 561 printk(KERN_INFO "%d pages shared\n", total_shared);
562 printk(KERN_INFO "%d pages swap cached\n", total_cached); 562 printk(KERN_INFO "%d pages swap cached\n", total_cached);
563 printk(KERN_INFO "Total of %ld pages in page table cache\n", 563 printk(KERN_INFO "Total of %ld pages in page table cache\n",
564 pgtable_quicklist_total_size()); 564 quicklist_total_size());
565 printk(KERN_INFO "%d free buffer pages\n", nr_free_buffer_pages()); 565 printk(KERN_INFO "%d free buffer pages\n", nr_free_buffer_pages());
566} 566}
567 567
diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
index cffb1e8325e8..c14abefabafa 100644
--- a/arch/ia64/mm/init.c
+++ b/arch/ia64/mm/init.c
@@ -39,9 +39,6 @@
39 39
40DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); 40DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
41 41
42DEFINE_PER_CPU(unsigned long *, __pgtable_quicklist);
43DEFINE_PER_CPU(long, __pgtable_quicklist_size);
44
45extern void ia64_tlb_init (void); 42extern void ia64_tlb_init (void);
46 43
47unsigned long MAX_DMA_ADDRESS = PAGE_OFFSET + 0x100000000UL; 44unsigned long MAX_DMA_ADDRESS = PAGE_OFFSET + 0x100000000UL;
@@ -56,54 +53,6 @@ EXPORT_SYMBOL(vmem_map);
56struct page *zero_page_memmap_ptr; /* map entry for zero page */ 53struct page *zero_page_memmap_ptr; /* map entry for zero page */
57EXPORT_SYMBOL(zero_page_memmap_ptr); 54EXPORT_SYMBOL(zero_page_memmap_ptr);
58 55
59#define MIN_PGT_PAGES 25UL
60#define MAX_PGT_FREES_PER_PASS 16L
61#define PGT_FRACTION_OF_NODE_MEM 16
62
63static inline long
64max_pgt_pages(void)
65{
66 u64 node_free_pages, max_pgt_pages;
67
68#ifndef CONFIG_NUMA
69 node_free_pages = nr_free_pages();
70#else
71 node_free_pages = node_page_state(numa_node_id(), NR_FREE_PAGES);
72#endif
73 max_pgt_pages = node_free_pages / PGT_FRACTION_OF_NODE_MEM;
74 max_pgt_pages = max(max_pgt_pages, MIN_PGT_PAGES);
75 return max_pgt_pages;
76}
77
78static inline long
79min_pages_to_free(void)
80{
81 long pages_to_free;
82
83 pages_to_free = pgtable_quicklist_size - max_pgt_pages();
84 pages_to_free = min(pages_to_free, MAX_PGT_FREES_PER_PASS);
85 return pages_to_free;
86}
87
88void
89check_pgt_cache(void)
90{
91 long pages_to_free;
92
93 if (unlikely(pgtable_quicklist_size <= MIN_PGT_PAGES))
94 return;
95
96 preempt_disable();
97 while (unlikely((pages_to_free = min_pages_to_free()) > 0)) {
98 while (pages_to_free--) {
99 free_page((unsigned long)pgtable_quicklist_alloc());
100 }
101 preempt_enable();
102 preempt_disable();
103 }
104 preempt_enable();
105}
106
107void 56void
108lazy_mmu_prot_update (pte_t pte) 57lazy_mmu_prot_update (pte_t pte)
109{ 58{
diff --git a/arch/ia64/sn/kernel/io_common.c b/arch/ia64/sn/kernel/io_common.c
index d48bcd83253c..7ed72d3faf73 100644
--- a/arch/ia64/sn/kernel/io_common.c
+++ b/arch/ia64/sn/kernel/io_common.c
@@ -364,7 +364,7 @@ void sn_bus_store_sysdata(struct pci_dev *dev)
364 364
365 element = kzalloc(sizeof(struct sysdata_el), GFP_KERNEL); 365 element = kzalloc(sizeof(struct sysdata_el), GFP_KERNEL);
366 if (!element) { 366 if (!element) {
367 dev_dbg(dev, "%s: out of memory!\n", __FUNCTION__); 367 dev_dbg(&dev->dev, "%s: out of memory!\n", __FUNCTION__);
368 return; 368 return;
369 } 369 }
370 element->sysdata = SN_PCIDEV_INFO(dev); 370 element->sysdata = SN_PCIDEV_INFO(dev);
diff --git a/arch/ia64/sn/kernel/xpc_partition.c b/arch/ia64/sn/kernel/xpc_partition.c
index 57c723f5cba4..7ba403232cb8 100644
--- a/arch/ia64/sn/kernel/xpc_partition.c
+++ b/arch/ia64/sn/kernel/xpc_partition.c
@@ -574,7 +574,7 @@ xpc_update_partition_info(struct xpc_partition *part, u8 remote_rp_version,
574 u64 remote_vars_pa, struct xpc_vars *remote_vars) 574 u64 remote_vars_pa, struct xpc_vars *remote_vars)
575{ 575{
576 part->remote_rp_version = remote_rp_version; 576 part->remote_rp_version = remote_rp_version;
577 dev_dbg(xpc_part, " remote_rp_version = 0x%016lx\n", 577 dev_dbg(xpc_part, " remote_rp_version = 0x%016x\n",
578 part->remote_rp_version); 578 part->remote_rp_version);
579 579
580 part->remote_rp_stamp = *remote_rp_stamp; 580 part->remote_rp_stamp = *remote_rp_stamp;
diff --git a/arch/ia64/sn/kernel/xpnet.c b/arch/ia64/sn/kernel/xpnet.c
index 88fad85ceeff..da7213530972 100644
--- a/arch/ia64/sn/kernel/xpnet.c
+++ b/arch/ia64/sn/kernel/xpnet.c
@@ -343,8 +343,8 @@ xpnet_dev_open(struct net_device *dev)
343 enum xpc_retval ret; 343 enum xpc_retval ret;
344 344
345 345
346 dev_dbg(xpnet, "calling xpc_connect(%d, 0x%p, NULL, %ld, %ld, %d, " 346 dev_dbg(xpnet, "calling xpc_connect(%d, 0x%p, NULL, %ld, %ld, %ld, "
347 "%d)\n", XPC_NET_CHANNEL, xpnet_connection_activity, 347 "%ld)\n", XPC_NET_CHANNEL, xpnet_connection_activity,
348 XPNET_MSG_SIZE, XPNET_MSG_NENTRIES, XPNET_MAX_KTHREADS, 348 XPNET_MSG_SIZE, XPNET_MSG_NENTRIES, XPNET_MAX_KTHREADS,
349 XPNET_MAX_IDLE_KTHREADS); 349 XPNET_MAX_IDLE_KTHREADS);
350 350