diff options
Diffstat (limited to 'arch/ia64')
-rw-r--r-- | arch/ia64/Kconfig | 4 | ||||
-rw-r--r-- | arch/ia64/hp/common/hwsw_iommu.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/entry.S | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/err_inject.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/irq.c | 11 | ||||
-rw-r--r-- | arch/ia64/kernel/kprobes.c | 12 | ||||
-rw-r--r-- | arch/ia64/kernel/machvec.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/mca.c | 2 | ||||
-rw-r--r-- | arch/ia64/mm/contig.c | 2 | ||||
-rw-r--r-- | arch/ia64/mm/discontig.c | 2 | ||||
-rw-r--r-- | arch/ia64/mm/init.c | 51 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/io_common.c | 2 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/xpc_partition.c | 2 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/xpnet.c | 4 |
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 | ||
34 | config QUICKLIST | ||
35 | bool | ||
36 | default y | ||
37 | |||
34 | config MMU | 38 | config 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 | ||
66 | void | 66 | void __init |
67 | hwsw_init (void) | 67 | hwsw_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); | |||
291 | module_exit(err_inject_exit); | 291 | module_exit(err_inject_exit); |
292 | 292 | ||
293 | MODULE_AUTHOR("Fenghua Yu <fenghua.yu@intel.com>"); | 293 | MODULE_AUTHOR("Fenghua Yu <fenghua.yu@intel.com>"); |
294 | MODULE_DESCRIPTION("MC error injection kenrel sysfs interface"); | 294 | MODULE_DESCRIPTION("MC error injection kernel sysfs interface"); |
295 | MODULE_LICENSE("GPL"); | 295 | MODULE_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 | |||
108 | bool 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 | ||
371 | static void __kprobes save_previous_kprobe(struct kprobe_ctlblk *kcb) | 371 | static 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 | ||
377 | static void __kprobes restore_previous_kprobe(struct kprobe_ctlblk *kcb) | 379 | static 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 | ||
383 | static void __kprobes set_current_kprobe(struct kprobe *p, | 387 | static 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 | ||
38 | void | 38 | void __init |
39 | machvec_init (const char *name) | 39 | machvec_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 | ||
121 | static struct timer_list cpe_poll_timer; | 122 | static struct timer_list cpe_poll_timer; |
123 | #endif | ||
122 | static struct timer_list cmc_poll_timer; | 124 | static 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 | ||
40 | DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); | 40 | DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); |
41 | 41 | ||
42 | DEFINE_PER_CPU(unsigned long *, __pgtable_quicklist); | ||
43 | DEFINE_PER_CPU(long, __pgtable_quicklist_size); | ||
44 | |||
45 | extern void ia64_tlb_init (void); | 42 | extern void ia64_tlb_init (void); |
46 | 43 | ||
47 | unsigned long MAX_DMA_ADDRESS = PAGE_OFFSET + 0x100000000UL; | 44 | unsigned long MAX_DMA_ADDRESS = PAGE_OFFSET + 0x100000000UL; |
@@ -56,54 +53,6 @@ EXPORT_SYMBOL(vmem_map); | |||
56 | struct page *zero_page_memmap_ptr; /* map entry for zero page */ | 53 | struct page *zero_page_memmap_ptr; /* map entry for zero page */ |
57 | EXPORT_SYMBOL(zero_page_memmap_ptr); | 54 | EXPORT_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 | |||
63 | static inline long | ||
64 | max_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 | |||
78 | static inline long | ||
79 | min_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 | |||
88 | void | ||
89 | check_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 | |||
107 | void | 56 | void |
108 | lazy_mmu_prot_update (pte_t pte) | 57 | lazy_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 | ||