aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-09-14 08:07:00 -0400
committerIngo Molnar <mingo@elte.hu>2008-09-14 08:07:00 -0400
commit6e03f99803195e5aaf7f247db31b0d11857ccc35 (patch)
treeffd4b1a140854977e984a4390105333845c0e90c /arch/ia64
parent982162602b31041b426edec6480d327743abcbcc (diff)
parent6bfb09a1005193be5c81ebac9f3ef85210142650 (diff)
Merge branch 'linus' into x86/iommu
Conflicts: lib/swiotlb.c Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/ia64')
-rw-r--r--arch/ia64/include/asm/elf.h15
-rw-r--r--arch/ia64/include/asm/sections.h13
-rw-r--r--arch/ia64/include/asm/sn/bte.h9
-rw-r--r--arch/ia64/kernel/module.c21
-rw-r--r--arch/ia64/kernel/smpboot.c4
-rw-r--r--arch/ia64/sn/pci/tioca_provider.c4
6 files changed, 36 insertions, 30 deletions
diff --git a/arch/ia64/include/asm/elf.h b/arch/ia64/include/asm/elf.h
index 5e0c1a6bce8d..2acb6b6543c9 100644
--- a/arch/ia64/include/asm/elf.h
+++ b/arch/ia64/include/asm/elf.h
@@ -266,4 +266,19 @@ do { \
266 } \ 266 } \
267} while (0) 267} while (0)
268 268
269/*
270 * format for entries in the Global Offset Table
271 */
272struct got_entry {
273 uint64_t val;
274};
275
276/*
277 * Layout of the Function Descriptor
278 */
279struct fdesc {
280 uint64_t ip;
281 uint64_t gp;
282};
283
269#endif /* _ASM_IA64_ELF_H */ 284#endif /* _ASM_IA64_ELF_H */
diff --git a/arch/ia64/include/asm/sections.h b/arch/ia64/include/asm/sections.h
index a7acad2bc2f0..f66799891036 100644
--- a/arch/ia64/include/asm/sections.h
+++ b/arch/ia64/include/asm/sections.h
@@ -6,6 +6,8 @@
6 * David Mosberger-Tang <davidm@hpl.hp.com> 6 * David Mosberger-Tang <davidm@hpl.hp.com>
7 */ 7 */
8 8
9#include <linux/elf.h>
10#include <linux/uaccess.h>
9#include <asm-generic/sections.h> 11#include <asm-generic/sections.h>
10 12
11extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; 13extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[];
@@ -22,7 +24,16 @@ extern char __start_unwind[], __end_unwind[];
22extern char __start_ivt_text[], __end_ivt_text[]; 24extern char __start_ivt_text[], __end_ivt_text[];
23 25
24#undef dereference_function_descriptor 26#undef dereference_function_descriptor
25void *dereference_function_descriptor(void *); 27static inline void *dereference_function_descriptor(void *ptr)
28{
29 struct fdesc *desc = ptr;
30 void *p;
31
32 if (!probe_kernel_address(&desc->ip, p))
33 ptr = p;
34 return ptr;
35}
36
26 37
27#endif /* _ASM_IA64_SECTIONS_H */ 38#endif /* _ASM_IA64_SECTIONS_H */
28 39
diff --git a/arch/ia64/include/asm/sn/bte.h b/arch/ia64/include/asm/sn/bte.h
index a0d214f43115..5efecf06c9a4 100644
--- a/arch/ia64/include/asm/sn/bte.h
+++ b/arch/ia64/include/asm/sn/bte.h
@@ -223,10 +223,11 @@ extern void bte_error_handler(unsigned long);
223 * until the transfer is complete. In order to get the asynch 223 * until the transfer is complete. In order to get the asynch
224 * version of bte_copy, you must perform this check yourself. 224 * version of bte_copy, you must perform this check yourself.
225 */ 225 */
226#define BTE_UNALIGNED_COPY(src, dest, len, mode) \ 226#define BTE_UNALIGNED_COPY(src, dest, len, mode) \
227 (((len & L1_CACHE_MASK) || (src & L1_CACHE_MASK) || \ 227 (((len & (L1_CACHE_BYTES - 1)) || \
228 (dest & L1_CACHE_MASK)) ? \ 228 (src & (L1_CACHE_BYTES - 1)) || \
229 bte_unaligned_copy(src, dest, len, mode) : \ 229 (dest & (L1_CACHE_BYTES - 1))) ? \
230 bte_unaligned_copy(src, dest, len, mode) : \
230 bte_copy(src, dest, len, mode, NULL)) 231 bte_copy(src, dest, len, mode, NULL))
231 232
232 233
diff --git a/arch/ia64/kernel/module.c b/arch/ia64/kernel/module.c
index 545626f66a4c..aaa7d901521f 100644
--- a/arch/ia64/kernel/module.c
+++ b/arch/ia64/kernel/module.c
@@ -31,11 +31,9 @@
31#include <linux/elf.h> 31#include <linux/elf.h>
32#include <linux/moduleloader.h> 32#include <linux/moduleloader.h>
33#include <linux/string.h> 33#include <linux/string.h>
34#include <linux/uaccess.h>
35#include <linux/vmalloc.h> 34#include <linux/vmalloc.h>
36 35
37#include <asm/patch.h> 36#include <asm/patch.h>
38#include <asm/sections.h>
39#include <asm/unaligned.h> 37#include <asm/unaligned.h>
40 38
41#define ARCH_MODULE_DEBUG 0 39#define ARCH_MODULE_DEBUG 0
@@ -137,15 +135,6 @@ static const char *reloc_name[256] = {
137 135
138#undef N 136#undef N
139 137
140struct got_entry {
141 uint64_t val;
142};
143
144struct fdesc {
145 uint64_t ip;
146 uint64_t gp;
147};
148
149/* Opaque struct for insns, to protect against derefs. */ 138/* Opaque struct for insns, to protect against derefs. */
150struct insn; 139struct insn;
151 140
@@ -943,13 +932,3 @@ module_arch_cleanup (struct module *mod)
943 if (mod->arch.core_unw_table) 932 if (mod->arch.core_unw_table)
944 unw_remove_unwind_table(mod->arch.core_unw_table); 933 unw_remove_unwind_table(mod->arch.core_unw_table);
945} 934}
946
947void *dereference_function_descriptor(void *ptr)
948{
949 struct fdesc *desc = ptr;
950 void *p;
951
952 if (!probe_kernel_address(&desc->ip, p))
953 ptr = p;
954 return ptr;
955}
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c
index bcea81e432fd..d8f05e504fbf 100644
--- a/arch/ia64/kernel/smpboot.c
+++ b/arch/ia64/kernel/smpboot.c
@@ -741,16 +741,14 @@ int __cpu_disable(void)
741 return -EBUSY; 741 return -EBUSY;
742 } 742 }
743 743
744 cpu_clear(cpu, cpu_online_map);
745
746 if (migrate_platform_irqs(cpu)) { 744 if (migrate_platform_irqs(cpu)) {
747 cpu_set(cpu, cpu_online_map); 745 cpu_set(cpu, cpu_online_map);
748 return (-EBUSY); 746 return (-EBUSY);
749 } 747 }
750 748
751 remove_siblinginfo(cpu); 749 remove_siblinginfo(cpu);
752 cpu_clear(cpu, cpu_online_map);
753 fixup_irqs(); 750 fixup_irqs();
751 cpu_clear(cpu, cpu_online_map);
754 local_flush_tlb_all(); 752 local_flush_tlb_all();
755 cpu_clear(cpu, cpu_callin_map); 753 cpu_clear(cpu, cpu_callin_map);
756 return 0; 754 return 0;
diff --git a/arch/ia64/sn/pci/tioca_provider.c b/arch/ia64/sn/pci/tioca_provider.c
index 529462c01570..79165122501c 100644
--- a/arch/ia64/sn/pci/tioca_provider.c
+++ b/arch/ia64/sn/pci/tioca_provider.c
@@ -420,8 +420,10 @@ tioca_dma_mapped(struct pci_dev *pdev, u64 paddr, size_t req_size)
420 entry = find_next_zero_bit(map, mapsize, last_entry); 420 entry = find_next_zero_bit(map, mapsize, last_entry);
421 } 421 }
422 422
423 if (entry > mapsize) 423 if (entry > mapsize) {
424 kfree(ca_dmamap);
424 goto map_return; 425 goto map_return;
426 }
425 427
426 for (i = 0; i < entries; i++) 428 for (i = 0; i < entries; i++)
427 set_bit(entry + i, map); 429 set_bit(entry + i, map);