diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-09-11 11:40:32 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-09-11 11:40:32 -0400 |
| commit | c529b7e2db948e240c48c54a83d0b6279275e57d (patch) | |
| tree | ae4e0f6f6cebd1f5821c1708d0dd0cae489f868d /arch | |
| parent | e2858ce3ed519500e3b9af1c16c25250ff16cd5c (diff) | |
| parent | e7b140365b86aaf94374214c6f4e6decbee2eb0a (diff) | |
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6:
[IA64] prevent ia64 from invoking irq handlers on offline CPUs
[IA64] arch/ia64/sn/pci/tioca_provider.c: introduce missing kfree
[IA64] fix up bte.h
[IA64] fix compile failure with non modular builds
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/ia64/include/asm/elf.h | 15 | ||||
| -rw-r--r-- | arch/ia64/include/asm/sections.h | 13 | ||||
| -rw-r--r-- | arch/ia64/include/asm/sn/bte.h | 9 | ||||
| -rw-r--r-- | arch/ia64/kernel/module.c | 21 | ||||
| -rw-r--r-- | arch/ia64/kernel/smpboot.c | 4 | ||||
| -rw-r--r-- | arch/ia64/sn/pci/tioca_provider.c | 4 |
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 | */ | ||
| 272 | struct got_entry { | ||
| 273 | uint64_t val; | ||
| 274 | }; | ||
| 275 | |||
| 276 | /* | ||
| 277 | * Layout of the Function Descriptor | ||
| 278 | */ | ||
| 279 | struct 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 | ||
| 11 | extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; | 13 | extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; |
| @@ -22,7 +24,16 @@ extern char __start_unwind[], __end_unwind[]; | |||
| 22 | extern char __start_ivt_text[], __end_ivt_text[]; | 24 | extern char __start_ivt_text[], __end_ivt_text[]; |
| 23 | 25 | ||
| 24 | #undef dereference_function_descriptor | 26 | #undef dereference_function_descriptor |
| 25 | void *dereference_function_descriptor(void *); | 27 | static 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 | ||
| 140 | struct got_entry { | ||
| 141 | uint64_t val; | ||
| 142 | }; | ||
| 143 | |||
| 144 | struct 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. */ |
| 150 | struct insn; | 139 | struct 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 | |||
| 947 | void *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); |
