diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-20 23:19:15 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-20 23:19:15 -0400 |
| commit | cfa76f024f7c9e65169425804e5b32e71f66d0ee (patch) | |
| tree | ee64e98cbfb1b654842c9256446a9584857f6730 /arch/parisc/kernel | |
| parent | 093faa1dd26fc6766f8f04c429030757a8a0def4 (diff) | |
| parent | 7210c678202bb3107085bffeb63f66a9b8ba1c85 (diff) | |
Merge branch 'master' of hera.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6
* 'master' of hera.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6: (29 commits)
[PARISC] fix uninitialized variable warning in asm/rtc.h
[PARISC] Port checkstack.pl to parisc
[PARISC] Make palo target work when $obj != $src
[PARISC] Zap unused variable warnings in pci.c
[PARISC] Fix tests in palo target
[PARISC] Fix palo target
[PARISC] Restore palo target
[PARISC] Attempt to clean up parisc/Makefile
[PARISC] Fix infinite loop in /proc/iomem
[PARISC] Quiet sysfs_create_link __must_check warnings in pdc_stable
[PARISC] Squelch pci_enable_device __must_check warning in superio
[PARISC] Kill off broken irqstack code
[PARISC] Remove hardcoded uses of PAGE_SIZE
[PARISC] Clean up pointless ASM_PAGE_SIZE_DIV use
[PARISC] Kill off the last vestiges of ASM_PAGE_SIZE
[PARISC] Kill off ASM_PAGE_SIZE use
[PARISC] Beautify parisc vmlinux.lds.S
[PARISC] Clean up a resource_size_t warning in sba_iommu
[PARISC] Kill incorrect cast warning in unwinder
[PARISC] Kill zone_to_nid printk warning
...
Fixed trivial conflict in include/asm-parisc/tlbflush.h manually
Diffstat (limited to 'arch/parisc/kernel')
| -rw-r--r-- | arch/parisc/kernel/asm-offsets.c | 3 | ||||
| -rw-r--r-- | arch/parisc/kernel/entry.S | 41 | ||||
| -rw-r--r-- | arch/parisc/kernel/head.S | 6 | ||||
| -rw-r--r-- | arch/parisc/kernel/hpmc.S | 4 | ||||
| -rw-r--r-- | arch/parisc/kernel/init_task.c | 1 | ||||
| -rw-r--r-- | arch/parisc/kernel/pacache.S | 8 | ||||
| -rw-r--r-- | arch/parisc/kernel/parisc_ksyms.c | 22 | ||||
| -rw-r--r-- | arch/parisc/kernel/pci-dma.c | 9 | ||||
| -rw-r--r-- | arch/parisc/kernel/pci.c | 42 | ||||
| -rw-r--r-- | arch/parisc/kernel/processor.c | 7 | ||||
| -rw-r--r-- | arch/parisc/kernel/smp.c | 12 | ||||
| -rw-r--r-- | arch/parisc/kernel/sys_parisc32.c | 7 | ||||
| -rw-r--r-- | arch/parisc/kernel/syscall.S | 13 | ||||
| -rw-r--r-- | arch/parisc/kernel/syscall_table.S | 1 | ||||
| -rw-r--r-- | arch/parisc/kernel/time.c | 6 | ||||
| -rw-r--r-- | arch/parisc/kernel/unwind.c | 4 | ||||
| -rw-r--r-- | arch/parisc/kernel/vmlinux.lds.S | 313 |
17 files changed, 224 insertions, 275 deletions
diff --git a/arch/parisc/kernel/asm-offsets.c b/arch/parisc/kernel/asm-offsets.c index d3b7917a87..eaa79bc14d 100644 --- a/arch/parisc/kernel/asm-offsets.c +++ b/arch/parisc/kernel/asm-offsets.c | |||
| @@ -290,9 +290,6 @@ int main(void) | |||
| 290 | DEFINE(ASM_PTE_ENTRY_SIZE, PTE_ENTRY_SIZE); | 290 | DEFINE(ASM_PTE_ENTRY_SIZE, PTE_ENTRY_SIZE); |
| 291 | DEFINE(ASM_PFN_PTE_SHIFT, PFN_PTE_SHIFT); | 291 | DEFINE(ASM_PFN_PTE_SHIFT, PFN_PTE_SHIFT); |
| 292 | DEFINE(ASM_PT_INITIAL, PT_INITIAL); | 292 | DEFINE(ASM_PT_INITIAL, PT_INITIAL); |
| 293 | DEFINE(ASM_PAGE_SIZE, PAGE_SIZE); | ||
| 294 | DEFINE(ASM_PAGE_SIZE_DIV64, PAGE_SIZE/64); | ||
| 295 | DEFINE(ASM_PAGE_SIZE_DIV128, PAGE_SIZE/128); | ||
| 296 | BLANK(); | 293 | BLANK(); |
| 297 | DEFINE(EXCDATA_IP, offsetof(struct exception_data, fault_ip)); | 294 | DEFINE(EXCDATA_IP, offsetof(struct exception_data, fault_ip)); |
| 298 | DEFINE(EXCDATA_SPACE, offsetof(struct exception_data, fault_space)); | 295 | DEFINE(EXCDATA_SPACE, offsetof(struct exception_data, fault_space)); |
diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index 42598abf45..111d47284e 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S | |||
| @@ -98,7 +98,6 @@ | |||
| 98 | * The "get_stack" macros are responsible for determining the | 98 | * The "get_stack" macros are responsible for determining the |
| 99 | * kernel stack value. | 99 | * kernel stack value. |
| 100 | * | 100 | * |
| 101 | * For Faults: | ||
| 102 | * If sr7 == 0 | 101 | * If sr7 == 0 |
| 103 | * Already using a kernel stack, so call the | 102 | * Already using a kernel stack, so call the |
| 104 | * get_stack_use_r30 macro to push a pt_regs structure | 103 | * get_stack_use_r30 macro to push a pt_regs structure |
| @@ -110,26 +109,6 @@ | |||
| 110 | * task pointer pointed to by cr30. Set the stack | 109 | * task pointer pointed to by cr30. Set the stack |
| 111 | * pointer to point to the end of the task structure. | 110 | * pointer to point to the end of the task structure. |
| 112 | * | 111 | * |
| 113 | * For Interrupts: | ||
| 114 | * If sr7 == 0 | ||
| 115 | * Already using a kernel stack, check to see if r30 | ||
| 116 | * is already pointing to the per processor interrupt | ||
| 117 | * stack. If it is, call the get_stack_use_r30 macro | ||
| 118 | * to push a pt_regs structure on the stack, and store | ||
| 119 | * registers there. Otherwise, call get_stack_use_cr31 | ||
| 120 | * to get a pointer to the base of the interrupt stack | ||
| 121 | * and push a pt_regs structure on that stack. | ||
| 122 | * else | ||
| 123 | * Need to set up a kernel stack, so call the | ||
| 124 | * get_stack_use_cr30 macro to set up a pointer | ||
| 125 | * to the pt_regs structure contained within the | ||
| 126 | * task pointer pointed to by cr30. Set the stack | ||
| 127 | * pointer to point to the end of the task structure. | ||
| 128 | * N.B: We don't use the interrupt stack for the | ||
| 129 | * first interrupt from userland, because signals/ | ||
| 130 | * resched's are processed when returning to userland, | ||
| 131 | * and we can sleep in those cases. | ||
| 132 | * | ||
| 133 | * Note that we use shadowed registers for temps until | 112 | * Note that we use shadowed registers for temps until |
| 134 | * we can save %r26 and %r29. %r26 is used to preserve | 113 | * we can save %r26 and %r29. %r26 is used to preserve |
| 135 | * %r8 (a shadowed register) which temporarily contained | 114 | * %r8 (a shadowed register) which temporarily contained |
| @@ -652,7 +631,7 @@ | |||
| 652 | 631 | ||
| 653 | .text | 632 | .text |
| 654 | 633 | ||
| 655 | .align 4096 | 634 | .align PAGE_SIZE |
| 656 | 635 | ||
| 657 | ENTRY(fault_vector_20) | 636 | ENTRY(fault_vector_20) |
| 658 | /* First vector is invalid (0) */ | 637 | /* First vector is invalid (0) */ |
| @@ -904,7 +883,7 @@ ENDPROC(_switch_to) | |||
| 904 | * | 883 | * |
| 905 | */ | 884 | */ |
| 906 | 885 | ||
| 907 | .align 4096 | 886 | .align PAGE_SIZE |
| 908 | 887 | ||
| 909 | ENTRY(syscall_exit_rfi) | 888 | ENTRY(syscall_exit_rfi) |
| 910 | mfctl %cr30,%r16 | 889 | mfctl %cr30,%r16 |
| @@ -1086,23 +1065,13 @@ intr_do_preempt: | |||
| 1086 | 1065 | ||
| 1087 | intr_extint: | 1066 | intr_extint: |
| 1088 | CMPIB=,n 0,%r16,1f | 1067 | CMPIB=,n 0,%r16,1f |
| 1068 | |||
| 1089 | get_stack_use_cr30 | 1069 | get_stack_use_cr30 |
| 1090 | b,n 3f | 1070 | b,n 2f |
| 1091 | 1071 | ||
| 1092 | 1: | 1072 | 1: |
| 1093 | #if 0 /* Interrupt Stack support not working yet! */ | ||
| 1094 | mfctl %cr31,%r1 | ||
| 1095 | copy %r30,%r17 | ||
| 1096 | /* FIXME! depi below has hardcoded idea of interrupt stack size (32k)*/ | ||
| 1097 | DEPI 0,31,15,%r17 | ||
| 1098 | CMPB=,n %r1,%r17,2f | ||
| 1099 | get_stack_use_cr31 | ||
| 1100 | b,n 3f | ||
| 1101 | #endif | ||
| 1102 | 2: | ||
| 1103 | get_stack_use_r30 | 1073 | get_stack_use_r30 |
| 1104 | 1074 | 2: | |
| 1105 | 3: | ||
| 1106 | save_specials %r29 | 1075 | save_specials %r29 |
| 1107 | virt_map | 1076 | virt_map |
| 1108 | save_general %r29 | 1077 | save_general %r29 |
diff --git a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S index 9676c486bb..a7b8859488 100644 --- a/arch/parisc/kernel/head.S +++ b/arch/parisc/kernel/head.S | |||
| @@ -95,7 +95,7 @@ $bss_loop: | |||
| 95 | 95 | ||
| 96 | 1: | 96 | 1: |
| 97 | stw %r3,0(%r4) | 97 | stw %r3,0(%r4) |
| 98 | ldo (ASM_PAGE_SIZE >> PxD_VALUE_SHIFT)(%r3),%r3 | 98 | ldo (PAGE_SIZE >> PxD_VALUE_SHIFT)(%r3),%r3 |
| 99 | addib,> -1,%r1,1b | 99 | addib,> -1,%r1,1b |
| 100 | #if PT_NLEVELS == 3 | 100 | #if PT_NLEVELS == 3 |
| 101 | ldo ASM_PMD_ENTRY_SIZE(%r4),%r4 | 101 | ldo ASM_PMD_ENTRY_SIZE(%r4),%r4 |
| @@ -128,10 +128,6 @@ $pgt_fill_loop: | |||
| 128 | /* And the stack pointer too */ | 128 | /* And the stack pointer too */ |
| 129 | ldo THREAD_SZ_ALGN(%r6),%sp | 129 | ldo THREAD_SZ_ALGN(%r6),%sp |
| 130 | 130 | ||
| 131 | /* And the interrupt stack */ | ||
| 132 | load32 interrupt_stack,%r6 | ||
| 133 | mtctl %r6,%cr31 | ||
| 134 | |||
| 135 | #ifdef CONFIG_SMP | 131 | #ifdef CONFIG_SMP |
| 136 | /* Set the smp rendevous address into page zero. | 132 | /* Set the smp rendevous address into page zero. |
| 137 | ** It would be safer to do this in init_smp_config() but | 133 | ** It would be safer to do this in init_smp_config() but |
diff --git a/arch/parisc/kernel/hpmc.S b/arch/parisc/kernel/hpmc.S index 43b41df0b5..2cbf13b3ef 100644 --- a/arch/parisc/kernel/hpmc.S +++ b/arch/parisc/kernel/hpmc.S | |||
| @@ -55,13 +55,13 @@ | |||
| 55 | * IODC requires 7K byte stack. That leaves 1K byte for os_hpmc. | 55 | * IODC requires 7K byte stack. That leaves 1K byte for os_hpmc. |
| 56 | */ | 56 | */ |
| 57 | 57 | ||
| 58 | .align 4096 | 58 | .align PAGE_SIZE |
| 59 | hpmc_stack: | 59 | hpmc_stack: |
| 60 | .block 16384 | 60 | .block 16384 |
| 61 | 61 | ||
| 62 | #define HPMC_IODC_BUF_SIZE 0x8000 | 62 | #define HPMC_IODC_BUF_SIZE 0x8000 |
| 63 | 63 | ||
| 64 | .align 4096 | 64 | .align PAGE_SIZE |
| 65 | hpmc_iodc_buf: | 65 | hpmc_iodc_buf: |
| 66 | .block HPMC_IODC_BUF_SIZE | 66 | .block HPMC_IODC_BUF_SIZE |
| 67 | 67 | ||
diff --git a/arch/parisc/kernel/init_task.c b/arch/parisc/kernel/init_task.c index 446f98d3fd..26198a074d 100644 --- a/arch/parisc/kernel/init_task.c +++ b/arch/parisc/kernel/init_task.c | |||
| @@ -49,7 +49,6 @@ EXPORT_SYMBOL(init_mm); | |||
| 49 | * way process stacks are handled. This is done by having a special | 49 | * way process stacks are handled. This is done by having a special |
| 50 | * "init_task" linker map entry.. | 50 | * "init_task" linker map entry.. |
| 51 | */ | 51 | */ |
| 52 | unsigned char interrupt_stack[ISTACK_SIZE] __attribute__ ((section("init_istack"), aligned(4096))); | ||
| 53 | union thread_union init_thread_union | 52 | union thread_union init_thread_union |
| 54 | __attribute__((aligned(128))) __attribute__((__section__(".data.init_task"))) = | 53 | __attribute__((aligned(128))) __attribute__((__section__(".data.init_task"))) = |
| 55 | { INIT_THREAD_INFO(init_task) }; | 54 | { INIT_THREAD_INFO(init_task) }; |
diff --git a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S index 90b2408785..5901092e01 100644 --- a/arch/parisc/kernel/pacache.S +++ b/arch/parisc/kernel/pacache.S | |||
| @@ -289,7 +289,7 @@ ENTRY(copy_user_page_asm) | |||
| 289 | */ | 289 | */ |
| 290 | 290 | ||
| 291 | ldd 0(%r25), %r19 | 291 | ldd 0(%r25), %r19 |
| 292 | ldi ASM_PAGE_SIZE_DIV128, %r1 | 292 | ldi (PAGE_SIZE / 128), %r1 |
| 293 | 293 | ||
| 294 | ldw 64(%r25), %r0 /* prefetch 1 cacheline ahead */ | 294 | ldw 64(%r25), %r0 /* prefetch 1 cacheline ahead */ |
| 295 | ldw 128(%r25), %r0 /* prefetch 2 */ | 295 | ldw 128(%r25), %r0 /* prefetch 2 */ |
| @@ -355,7 +355,7 @@ ENTRY(copy_user_page_asm) | |||
| 355 | * use ldd/std on a 32 bit kernel. | 355 | * use ldd/std on a 32 bit kernel. |
| 356 | */ | 356 | */ |
| 357 | ldw 0(%r25), %r19 | 357 | ldw 0(%r25), %r19 |
| 358 | ldi ASM_PAGE_SIZE_DIV64, %r1 | 358 | ldi (PAGE_SIZE / 64), %r1 |
| 359 | 359 | ||
| 360 | 1: | 360 | 1: |
| 361 | ldw 4(%r25), %r20 | 361 | ldw 4(%r25), %r20 |
| @@ -553,7 +553,7 @@ ENTRY(__clear_user_page_asm) | |||
| 553 | pdtlb 0(%r28) | 553 | pdtlb 0(%r28) |
| 554 | 554 | ||
| 555 | #ifdef CONFIG_64BIT | 555 | #ifdef CONFIG_64BIT |
| 556 | ldi ASM_PAGE_SIZE_DIV128, %r1 | 556 | ldi (PAGE_SIZE / 128), %r1 |
| 557 | 557 | ||
| 558 | /* PREFETCH (Write) has not (yet) been proven to help here */ | 558 | /* PREFETCH (Write) has not (yet) been proven to help here */ |
| 559 | /* #define PREFETCHW_OP ldd 256(%0), %r0 */ | 559 | /* #define PREFETCHW_OP ldd 256(%0), %r0 */ |
| @@ -578,7 +578,7 @@ ENTRY(__clear_user_page_asm) | |||
| 578 | ldo 128(%r28), %r28 | 578 | ldo 128(%r28), %r28 |
| 579 | 579 | ||
| 580 | #else /* ! CONFIG_64BIT */ | 580 | #else /* ! CONFIG_64BIT */ |
| 581 | ldi ASM_PAGE_SIZE_DIV64, %r1 | 581 | ldi (PAGE_SIZE / 64), %r1 |
| 582 | 582 | ||
| 583 | 1: | 583 | 1: |
| 584 | stw %r0, 0(%r28) | 584 | stw %r0, 0(%r28) |
diff --git a/arch/parisc/kernel/parisc_ksyms.c b/arch/parisc/kernel/parisc_ksyms.c index 7aca704e96..671ee5b995 100644 --- a/arch/parisc/kernel/parisc_ksyms.c +++ b/arch/parisc/kernel/parisc_ksyms.c | |||
| @@ -122,31 +122,9 @@ EXPORT_SYMBOL($$divI_12); | |||
| 122 | EXPORT_SYMBOL($$divI_14); | 122 | EXPORT_SYMBOL($$divI_14); |
| 123 | EXPORT_SYMBOL($$divI_15); | 123 | EXPORT_SYMBOL($$divI_15); |
| 124 | 124 | ||
| 125 | extern void __ashrdi3(void); | ||
| 126 | extern void __ashldi3(void); | ||
| 127 | extern void __lshrdi3(void); | ||
| 128 | extern void __muldi3(void); | ||
| 129 | |||
| 130 | EXPORT_SYMBOL(__ashrdi3); | ||
| 131 | EXPORT_SYMBOL(__ashldi3); | ||
| 132 | EXPORT_SYMBOL(__lshrdi3); | ||
| 133 | EXPORT_SYMBOL(__muldi3); | ||
| 134 | |||
| 135 | asmlinkage void * __canonicalize_funcptr_for_compare(void *); | 125 | asmlinkage void * __canonicalize_funcptr_for_compare(void *); |
| 136 | EXPORT_SYMBOL(__canonicalize_funcptr_for_compare); | 126 | EXPORT_SYMBOL(__canonicalize_funcptr_for_compare); |
| 137 | 127 | ||
| 138 | #ifdef CONFIG_64BIT | ||
| 139 | extern void __divdi3(void); | ||
| 140 | extern void __udivdi3(void); | ||
| 141 | extern void __umoddi3(void); | ||
| 142 | extern void __moddi3(void); | ||
| 143 | |||
| 144 | EXPORT_SYMBOL(__divdi3); | ||
| 145 | EXPORT_SYMBOL(__udivdi3); | ||
| 146 | EXPORT_SYMBOL(__umoddi3); | ||
| 147 | EXPORT_SYMBOL(__moddi3); | ||
| 148 | #endif | ||
| 149 | |||
| 150 | #ifndef CONFIG_64BIT | 128 | #ifndef CONFIG_64BIT |
| 151 | extern void $$dyncall(void); | 129 | extern void $$dyncall(void); |
| 152 | EXPORT_SYMBOL($$dyncall); | 130 | EXPORT_SYMBOL($$dyncall); |
diff --git a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c index 23c1388df1..41f8e321e3 100644 --- a/arch/parisc/kernel/pci-dma.c +++ b/arch/parisc/kernel/pci-dma.c | |||
| @@ -569,11 +569,10 @@ static void *fail_alloc_consistent(struct device *dev, size_t size, | |||
| 569 | static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size, | 569 | static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size, |
| 570 | dma_addr_t *dma_handle, gfp_t flag) | 570 | dma_addr_t *dma_handle, gfp_t flag) |
| 571 | { | 571 | { |
| 572 | void *addr = NULL; | 572 | void *addr; |
| 573 | 573 | ||
| 574 | /* rely on kmalloc to be cacheline aligned */ | 574 | addr = (void *)__get_free_pages(flag, get_order(size)); |
| 575 | addr = kmalloc(size, flag); | 575 | if (addr) |
| 576 | if(addr) | ||
| 577 | *dma_handle = (dma_addr_t)virt_to_phys(addr); | 576 | *dma_handle = (dma_addr_t)virt_to_phys(addr); |
| 578 | 577 | ||
| 579 | return addr; | 578 | return addr; |
| @@ -582,7 +581,7 @@ static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size, | |||
| 582 | static void pa11_dma_free_noncoherent(struct device *dev, size_t size, | 581 | static void pa11_dma_free_noncoherent(struct device *dev, size_t size, |
| 583 | void *vaddr, dma_addr_t iova) | 582 | void *vaddr, dma_addr_t iova) |
| 584 | { | 583 | { |
| 585 | kfree(vaddr); | 584 | free_pages((unsigned long)vaddr, get_order(size)); |
| 586 | return; | 585 | return; |
| 587 | } | 586 | } |
| 588 | 587 | ||
diff --git a/arch/parisc/kernel/pci.c b/arch/parisc/kernel/pci.c index 563df0072d..507d0ac99f 100644 --- a/arch/parisc/kernel/pci.c +++ b/arch/parisc/kernel/pci.c | |||
| @@ -194,37 +194,13 @@ void __init pcibios_init_bus(struct pci_bus *bus) | |||
| 194 | pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bridge_ctl); | 194 | pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bridge_ctl); |
| 195 | } | 195 | } |
| 196 | 196 | ||
| 197 | |||
| 198 | /* KLUGE: Link the child and parent resources - generic PCI didn't */ | ||
| 199 | static void | ||
| 200 | pcibios_link_hba_resources( struct resource *hba_res, struct resource *r) | ||
| 201 | { | ||
| 202 | if (!r->parent) { | ||
| 203 | printk(KERN_EMERG "PCI: resource not parented! [%p-%p]\n", | ||
| 204 | (void*) r->start, (void*) r->end); | ||
| 205 | r->parent = hba_res; | ||
| 206 | |||
| 207 | /* reverse link is harder *sigh* */ | ||
| 208 | if (r->parent->child) { | ||
| 209 | if (r->parent->sibling) { | ||
| 210 | struct resource *next = r->parent->sibling; | ||
| 211 | while (next->sibling) | ||
| 212 | next = next->sibling; | ||
| 213 | next->sibling = r; | ||
| 214 | } else { | ||
| 215 | r->parent->sibling = r; | ||
| 216 | } | ||
| 217 | } else | ||
| 218 | r->parent->child = r; | ||
| 219 | } | ||
| 220 | } | ||
| 221 | |||
| 222 | /* called by drivers/pci/setup-bus.c:pci_setup_bridge(). */ | 197 | /* called by drivers/pci/setup-bus.c:pci_setup_bridge(). */ |
| 223 | void __devinit pcibios_resource_to_bus(struct pci_dev *dev, | 198 | void __devinit pcibios_resource_to_bus(struct pci_dev *dev, |
| 224 | struct pci_bus_region *region, struct resource *res) | 199 | struct pci_bus_region *region, struct resource *res) |
| 225 | { | 200 | { |
| 226 | struct pci_bus *bus = dev->bus; | 201 | #ifdef CONFIG_64BIT |
| 227 | struct pci_hba_data *hba = HBA_DATA(bus->bridge->platform_data); | 202 | struct pci_hba_data *hba = HBA_DATA(dev->bus->bridge->platform_data); |
| 203 | #endif | ||
| 228 | 204 | ||
| 229 | if (res->flags & IORESOURCE_IO) { | 205 | if (res->flags & IORESOURCE_IO) { |
| 230 | /* | 206 | /* |
| @@ -243,23 +219,15 @@ void __devinit pcibios_resource_to_bus(struct pci_dev *dev, | |||
| 243 | } | 219 | } |
| 244 | 220 | ||
| 245 | DBG_RES("pcibios_resource_to_bus(%02x %s [%lx,%lx])\n", | 221 | DBG_RES("pcibios_resource_to_bus(%02x %s [%lx,%lx])\n", |
| 246 | bus->number, res->flags & IORESOURCE_IO ? "IO" : "MEM", | 222 | dev->bus->number, res->flags & IORESOURCE_IO ? "IO" : "MEM", |
| 247 | region->start, region->end); | 223 | region->start, region->end); |
| 248 | |||
| 249 | /* KLUGE ALERT | ||
| 250 | ** if this resource isn't linked to a "parent", then it seems | ||
| 251 | ** to be a child of the HBA - lets link it in. | ||
| 252 | */ | ||
| 253 | pcibios_link_hba_resources(&hba->io_space, bus->resource[0]); | ||
| 254 | pcibios_link_hba_resources(&hba->lmmio_space, bus->resource[1]); | ||
| 255 | } | 224 | } |
| 256 | 225 | ||
| 257 | void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | 226 | void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, |
| 258 | struct pci_bus_region *region) | 227 | struct pci_bus_region *region) |
| 259 | { | 228 | { |
| 260 | #ifdef CONFIG_64BIT | 229 | #ifdef CONFIG_64BIT |
| 261 | struct pci_bus *bus = dev->bus; | 230 | struct pci_hba_data *hba = HBA_DATA(dev->bus->bridge->platform_data); |
| 262 | struct pci_hba_data *hba = HBA_DATA(bus->bridge->platform_data); | ||
| 263 | #endif | 231 | #endif |
| 264 | 232 | ||
| 265 | if (res->flags & IORESOURCE_MEM) { | 233 | if (res->flags & IORESOURCE_MEM) { |
diff --git a/arch/parisc/kernel/processor.c b/arch/parisc/kernel/processor.c index 549f548434..370086fb83 100644 --- a/arch/parisc/kernel/processor.c +++ b/arch/parisc/kernel/processor.c | |||
| @@ -82,7 +82,12 @@ static int __cpuinit processor_probe(struct parisc_device *dev) | |||
| 82 | unsigned long cpuid; | 82 | unsigned long cpuid; |
| 83 | struct cpuinfo_parisc *p; | 83 | struct cpuinfo_parisc *p; |
| 84 | 84 | ||
| 85 | #ifndef CONFIG_SMP | 85 | #ifdef CONFIG_SMP |
| 86 | if (num_online_cpus() >= NR_CPUS) { | ||
| 87 | printk(KERN_INFO "num_online_cpus() >= NR_CPUS\n"); | ||
| 88 | return 1; | ||
| 89 | } | ||
| 90 | #else | ||
| 86 | if (boot_cpu_data.cpu_count > 0) { | 91 | if (boot_cpu_data.cpu_count > 0) { |
| 87 | printk(KERN_INFO "CONFIG_SMP=n ignoring additional CPUs\n"); | 92 | printk(KERN_INFO "CONFIG_SMP=n ignoring additional CPUs\n"); |
| 88 | return 1; | 93 | return 1; |
diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c index d7bc7bb42c..85fc7754ec 100644 --- a/arch/parisc/kernel/smp.c +++ b/arch/parisc/kernel/smp.c | |||
| @@ -432,22 +432,10 @@ smp_cpu_init(int cpunum) | |||
| 432 | void __init smp_callin(void) | 432 | void __init smp_callin(void) |
| 433 | { | 433 | { |
| 434 | int slave_id = cpu_now_booting; | 434 | int slave_id = cpu_now_booting; |
| 435 | #if 0 | ||
| 436 | void *istack; | ||
| 437 | #endif | ||
| 438 | 435 | ||
| 439 | smp_cpu_init(slave_id); | 436 | smp_cpu_init(slave_id); |
| 440 | preempt_disable(); | 437 | preempt_disable(); |
| 441 | 438 | ||
| 442 | #if 0 /* NOT WORKING YET - see entry.S */ | ||
| 443 | istack = (void *)__get_free_pages(GFP_KERNEL,ISTACK_ORDER); | ||
| 444 | if (istack == NULL) { | ||
| 445 | printk(KERN_CRIT "Failed to allocate interrupt stack for cpu %d\n",slave_id); | ||
| 446 | BUG(); | ||
| 447 | } | ||
| 448 | mtctl(istack,31); | ||
| 449 | #endif | ||
| 450 | |||
| 451 | flush_cache_all_local(); /* start with known state */ | 439 | flush_cache_all_local(); /* start with known state */ |
| 452 | flush_tlb_all_local(NULL); | 440 | flush_tlb_all_local(NULL); |
| 453 | 441 | ||
diff --git a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c index 2989c6682b..50bbf33ee0 100644 --- a/arch/parisc/kernel/sys_parisc32.c +++ b/arch/parisc/kernel/sys_parisc32.c | |||
| @@ -473,3 +473,10 @@ long sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char __user *buf, | |||
| 473 | return sys_lookup_dcookie((u64)cookie_high << 32 | cookie_low, | 473 | return sys_lookup_dcookie((u64)cookie_high << 32 | cookie_low, |
| 474 | buf, len); | 474 | buf, len); |
| 475 | } | 475 | } |
| 476 | |||
| 477 | asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo, | ||
| 478 | u32 lenhi, u32 lenlo) | ||
| 479 | { | ||
| 480 | return sys_fallocate(fd, mode, ((loff_t)offhi << 32) | offlo, | ||
| 481 | ((loff_t)lenhi << 32) | lenlo); | ||
| 482 | } | ||
diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S index 56f6231cb8..69b6eebc46 100644 --- a/arch/parisc/kernel/syscall.S +++ b/arch/parisc/kernel/syscall.S | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <asm/asm-offsets.h> | 10 | #include <asm/asm-offsets.h> |
| 11 | #include <asm/unistd.h> | 11 | #include <asm/unistd.h> |
| 12 | #include <asm/errno.h> | 12 | #include <asm/errno.h> |
| 13 | #include <asm/page.h> | ||
| 13 | #include <asm/psw.h> | 14 | #include <asm/psw.h> |
| 14 | #include <asm/thread_info.h> | 15 | #include <asm/thread_info.h> |
| 15 | #include <asm/assembly.h> | 16 | #include <asm/assembly.h> |
| @@ -38,7 +39,7 @@ | |||
| 38 | * pointers. | 39 | * pointers. |
| 39 | */ | 40 | */ |
| 40 | 41 | ||
| 41 | .align ASM_PAGE_SIZE | 42 | .align PAGE_SIZE |
| 42 | ENTRY(linux_gateway_page) | 43 | ENTRY(linux_gateway_page) |
| 43 | 44 | ||
| 44 | /* ADDRESS 0x00 to 0xb0 = 176 bytes / 4 bytes per insn = 44 insns */ | 45 | /* ADDRESS 0x00 to 0xb0 = 176 bytes / 4 bytes per insn = 44 insns */ |
| @@ -597,7 +598,7 @@ cas_action: | |||
| 597 | 598 | ||
| 598 | 599 | ||
| 599 | /* Make sure nothing else is placed on this page */ | 600 | /* Make sure nothing else is placed on this page */ |
| 600 | .align ASM_PAGE_SIZE | 601 | .align PAGE_SIZE |
| 601 | END(linux_gateway_page) | 602 | END(linux_gateway_page) |
| 602 | ENTRY(end_linux_gateway_page) | 603 | ENTRY(end_linux_gateway_page) |
| 603 | 604 | ||
| @@ -608,7 +609,7 @@ ENTRY(end_linux_gateway_page) | |||
| 608 | 609 | ||
| 609 | .section .rodata,"a" | 610 | .section .rodata,"a" |
| 610 | 611 | ||
| 611 | .align ASM_PAGE_SIZE | 612 | .align PAGE_SIZE |
| 612 | /* Light-weight-syscall table */ | 613 | /* Light-weight-syscall table */ |
| 613 | /* Start of lws table. */ | 614 | /* Start of lws table. */ |
| 614 | ENTRY(lws_table) | 615 | ENTRY(lws_table) |
| @@ -617,13 +618,13 @@ ENTRY(lws_table) | |||
| 617 | END(lws_table) | 618 | END(lws_table) |
| 618 | /* End of lws table */ | 619 | /* End of lws table */ |
| 619 | 620 | ||
| 620 | .align ASM_PAGE_SIZE | 621 | .align PAGE_SIZE |
| 621 | ENTRY(sys_call_table) | 622 | ENTRY(sys_call_table) |
| 622 | #include "syscall_table.S" | 623 | #include "syscall_table.S" |
| 623 | END(sys_call_table) | 624 | END(sys_call_table) |
| 624 | 625 | ||
| 625 | #ifdef CONFIG_64BIT | 626 | #ifdef CONFIG_64BIT |
| 626 | .align ASM_PAGE_SIZE | 627 | .align PAGE_SIZE |
| 627 | ENTRY(sys_call_table64) | 628 | ENTRY(sys_call_table64) |
| 628 | #define SYSCALL_TABLE_64BIT | 629 | #define SYSCALL_TABLE_64BIT |
| 629 | #include "syscall_table.S" | 630 | #include "syscall_table.S" |
| @@ -636,7 +637,7 @@ END(sys_call_table64) | |||
| 636 | will use this set of locks | 637 | will use this set of locks |
| 637 | */ | 638 | */ |
| 638 | .section .data | 639 | .section .data |
| 639 | .align 4096 | 640 | .align PAGE_SIZE |
| 640 | ENTRY(lws_lock_start) | 641 | ENTRY(lws_lock_start) |
| 641 | /* lws locks */ | 642 | /* lws locks */ |
| 642 | .align 16 | 643 | .align 16 |
diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S index 2540786a97..117438e9eb 100644 --- a/arch/parisc/kernel/syscall_table.S +++ b/arch/parisc/kernel/syscall_table.S | |||
| @@ -403,6 +403,7 @@ | |||
| 403 | ENTRY_COMP(signalfd) | 403 | ENTRY_COMP(signalfd) |
| 404 | ENTRY_COMP(timerfd) | 404 | ENTRY_COMP(timerfd) |
| 405 | ENTRY_SAME(eventfd) | 405 | ENTRY_SAME(eventfd) |
| 406 | ENTRY_COMP(fallocate) /* 305 */ | ||
| 406 | 407 | ||
| 407 | /* Nothing yet */ | 408 | /* Nothing yet */ |
| 408 | 409 | ||
diff --git a/arch/parisc/kernel/time.c b/arch/parisc/kernel/time.c index 8b3062a5c8..24be86bba9 100644 --- a/arch/parisc/kernel/time.c +++ b/arch/parisc/kernel/time.c | |||
| @@ -189,16 +189,14 @@ static struct clocksource clocksource_cr16 = { | |||
| 189 | #ifdef CONFIG_SMP | 189 | #ifdef CONFIG_SMP |
| 190 | int update_cr16_clocksource(void) | 190 | int update_cr16_clocksource(void) |
| 191 | { | 191 | { |
| 192 | int change = 0; | ||
| 193 | |||
| 194 | /* since the cr16 cycle counters are not synchronized across CPUs, | 192 | /* since the cr16 cycle counters are not synchronized across CPUs, |
| 195 | we'll check if we should switch to a safe clocksource: */ | 193 | we'll check if we should switch to a safe clocksource: */ |
| 196 | if (clocksource_cr16.rating != 0 && num_online_cpus() > 1) { | 194 | if (clocksource_cr16.rating != 0 && num_online_cpus() > 1) { |
| 197 | clocksource_change_rating(&clocksource_cr16, 0); | 195 | clocksource_change_rating(&clocksource_cr16, 0); |
| 198 | change = 1; | 196 | return 1; |
| 199 | } | 197 | } |
| 200 | 198 | ||
| 201 | return change; | 199 | return 0; |
| 202 | } | 200 | } |
| 203 | #else | 201 | #else |
| 204 | int update_cr16_clocksource(void) | 202 | int update_cr16_clocksource(void) |
diff --git a/arch/parisc/kernel/unwind.c b/arch/parisc/kernel/unwind.c index cf780cb3b9..701b2d2d88 100644 --- a/arch/parisc/kernel/unwind.c +++ b/arch/parisc/kernel/unwind.c | |||
| @@ -209,8 +209,8 @@ static int unwind_init(void) | |||
| 209 | 209 | ||
| 210 | static int unwind_special(struct unwind_frame_info *info, unsigned long pc, int frame_size) | 210 | static int unwind_special(struct unwind_frame_info *info, unsigned long pc, int frame_size) |
| 211 | { | 211 | { |
| 212 | void handle_interruption(int, struct pt_regs *); | 212 | extern void handle_interruption(int, struct pt_regs *); |
| 213 | static unsigned long *hi = (unsigned long)&handle_interruption; | 213 | static unsigned long *hi = (unsigned long *)&handle_interruption; |
| 214 | 214 | ||
| 215 | if (pc == get_func_addr(hi)) { | 215 | if (pc == get_func_addr(hi)) { |
| 216 | struct pt_regs *regs = (struct pt_regs *)(info->sp - frame_size - PT_SZ_ALGN); | 216 | struct pt_regs *regs = (struct pt_regs *)(info->sp - frame_size - PT_SZ_ALGN); |
diff --git a/arch/parisc/kernel/vmlinux.lds.S b/arch/parisc/kernel/vmlinux.lds.S index ee7a16eb6f..40d0ff9b81 100644 --- a/arch/parisc/kernel/vmlinux.lds.S +++ b/arch/parisc/kernel/vmlinux.lds.S | |||
| @@ -46,168 +46,211 @@ jiffies = jiffies_64; | |||
| 46 | #endif | 46 | #endif |
| 47 | SECTIONS | 47 | SECTIONS |
| 48 | { | 48 | { |
| 49 | . = KERNEL_BINARY_TEXT_START; | ||
| 49 | 50 | ||
| 50 | . = KERNEL_BINARY_TEXT_START; | 51 | _text = .; /* Text and read-only data */ |
| 51 | 52 | .text ALIGN(16) : { | |
| 52 | _text = .; /* Text and read-only data */ | 53 | TEXT_TEXT |
| 53 | .text ALIGN(16) : { | 54 | SCHED_TEXT |
| 54 | TEXT_TEXT | 55 | LOCK_TEXT |
| 55 | SCHED_TEXT | 56 | *(.text.do_softirq) |
| 56 | LOCK_TEXT | 57 | *(.text.sys_exit) |
| 57 | *(.text.do_softirq) | 58 | *(.text.do_sigaltstack) |
| 58 | *(.text.sys_exit) | 59 | *(.text.do_fork) |
| 59 | *(.text.do_sigaltstack) | 60 | *(.text.*) |
| 60 | *(.text.do_fork) | 61 | *(.fixup) |
| 61 | *(.text.*) | 62 | *(.lock.text) /* out-of-line lock text */ |
| 62 | *(.fixup) | 63 | *(.gnu.warning) |
| 63 | *(.lock.text) /* out-of-line lock text */ | ||
| 64 | *(.gnu.warning) | ||
| 65 | } = 0 | 64 | } = 0 |
| 65 | /* End of text section */ | ||
| 66 | _etext = .; | ||
| 66 | 67 | ||
| 67 | _etext = .; /* End of text section */ | 68 | RODATA |
| 69 | BUG_TABLE | ||
| 68 | 70 | ||
| 69 | RODATA | 71 | /* writeable */ |
| 70 | 72 | /* Make sure this is page aligned so | |
| 71 | BUG_TABLE | 73 | * that we can properly leave these |
| 72 | 74 | * as writable | |
| 73 | /* writeable */ | 75 | */ |
| 74 | . = ALIGN(ASM_PAGE_SIZE); /* Make sure this is page aligned so | 76 | . = ALIGN(PAGE_SIZE); |
| 75 | that we can properly leave these | 77 | data_start = .; |
| 76 | as writable */ | 78 | . = ALIGN(16); |
| 77 | data_start = .; | 79 | /* Exception table */ |
| 78 | 80 | __ex_table : { | |
| 79 | . = ALIGN(16); /* Exception table */ | 81 | __start___ex_table = .; |
| 80 | __start___ex_table = .; | 82 | *(__ex_table) |
| 81 | __ex_table : { *(__ex_table) } | 83 | __stop___ex_table = .; |
| 82 | __stop___ex_table = .; | 84 | } |
| 83 | 85 | ||
| 84 | NOTES | 86 | NOTES |
| 85 | 87 | ||
| 86 | __start___unwind = .; /* unwind info */ | 88 | /* unwind info */ |
| 87 | .PARISC.unwind : { *(.PARISC.unwind) } | 89 | .PARISC.unwind : { |
| 88 | __stop___unwind = .; | 90 | __start___unwind = .; |
| 91 | *(.PARISC.unwind) | ||
| 92 | __stop___unwind = .; | ||
| 93 | } | ||
| 89 | 94 | ||
| 90 | /* rarely changed data like cpu maps */ | 95 | /* rarely changed data like cpu maps */ |
| 91 | . = ALIGN(16); | 96 | . = ALIGN(16); |
| 92 | .data.read_mostly : { *(.data.read_mostly) } | 97 | .data.read_mostly : { |
| 98 | *(.data.read_mostly) | ||
| 99 | } | ||
| 93 | 100 | ||
| 94 | . = ALIGN(L1_CACHE_BYTES); | 101 | . = ALIGN(L1_CACHE_BYTES); |
| 95 | .data : { /* Data */ | 102 | /* Data */ |
| 96 | DATA_DATA | 103 | .data : { |
| 97 | CONSTRUCTORS | 104 | DATA_DATA |
| 105 | CONSTRUCTORS | ||
| 98 | } | 106 | } |
| 99 | 107 | ||
| 100 | . = ALIGN(L1_CACHE_BYTES); | 108 | . = ALIGN(L1_CACHE_BYTES); |
| 101 | .data.cacheline_aligned : { *(.data.cacheline_aligned) } | 109 | .data.cacheline_aligned : { |
| 110 | *(.data.cacheline_aligned) | ||
| 111 | } | ||
| 102 | 112 | ||
| 103 | /* PA-RISC locks requires 16-byte alignment */ | 113 | /* PA-RISC locks requires 16-byte alignment */ |
| 104 | . = ALIGN(16); | 114 | . = ALIGN(16); |
| 105 | .data.lock_aligned : { *(.data.lock_aligned) } | 115 | .data.lock_aligned : { |
| 116 | *(.data.lock_aligned) | ||
| 117 | } | ||
| 106 | 118 | ||
| 107 | . = ALIGN(ASM_PAGE_SIZE); | 119 | /* nosave data is really only used for software suspend...it's here |
| 108 | /* nosave data is really only used for software suspend...it's here | 120 | * just in case we ever implement it |
| 109 | * just in case we ever implement it */ | 121 | */ |
| 110 | __nosave_begin = .; | 122 | . = ALIGN(PAGE_SIZE); |
| 111 | .data_nosave : { *(.data.nosave) } | 123 | __nosave_begin = .; |
| 112 | . = ALIGN(ASM_PAGE_SIZE); | 124 | .data_nosave : { |
| 113 | __nosave_end = .; | 125 | *(.data.nosave) |
| 126 | } | ||
| 127 | . = ALIGN(PAGE_SIZE); | ||
| 128 | __nosave_end = .; | ||
| 114 | 129 | ||
| 115 | _edata = .; /* End of data section */ | 130 | /* End of data section */ |
| 131 | _edata = .; | ||
| 116 | 132 | ||
| 117 | __bss_start = .; /* BSS */ | 133 | /* BSS */ |
| 118 | /* page table entries need to be PAGE_SIZE aligned */ | 134 | __bss_start = .; |
| 119 | . = ALIGN(ASM_PAGE_SIZE); | 135 | /* page table entries need to be PAGE_SIZE aligned */ |
| 120 | .data.vmpages : { | 136 | . = ALIGN(PAGE_SIZE); |
| 121 | *(.data.vm0.pmd) | 137 | .data.vmpages : { |
| 122 | *(.data.vm0.pgd) | 138 | *(.data.vm0.pmd) |
| 123 | *(.data.vm0.pte) | 139 | *(.data.vm0.pgd) |
| 140 | *(.data.vm0.pte) | ||
| 124 | } | 141 | } |
| 125 | .bss : { *(.bss) *(COMMON) } | 142 | .bss : { |
| 126 | __bss_stop = .; | 143 | *(.bss) |
| 127 | 144 | *(COMMON) | |
| 145 | } | ||
| 146 | __bss_stop = .; | ||
| 128 | 147 | ||
| 129 | /* assembler code expects init_task to be 16k aligned */ | ||
| 130 | . = ALIGN(16384); /* init_task */ | ||
| 131 | .data.init_task : { *(.data.init_task) } | ||
| 132 | 148 | ||
| 133 | /* The interrupt stack is currently partially coded, but not yet | 149 | /* assembler code expects init_task to be 16k aligned */ |
| 134 | * implemented */ | 150 | . = ALIGN(16384); |
| 135 | . = ALIGN(16384); | 151 | /* init_task */ |
| 136 | init_istack : { *(init_istack) } | 152 | .data.init_task : { |
| 153 | *(.data.init_task) | ||
| 154 | } | ||
| 137 | 155 | ||
| 138 | #ifdef CONFIG_64BIT | 156 | #ifdef CONFIG_64BIT |
| 139 | . = ALIGN(16); /* Linkage tables */ | 157 | . = ALIGN(16); |
| 140 | .opd : { *(.opd) } PROVIDE (__gp = .); | 158 | /* Linkage tables */ |
| 141 | .plt : { *(.plt) } | 159 | .opd : { |
| 142 | .dlt : { *(.dlt) } | 160 | *(.opd) |
| 161 | } PROVIDE (__gp = .); | ||
| 162 | .plt : { | ||
| 163 | *(.plt) | ||
| 164 | } | ||
| 165 | .dlt : { | ||
| 166 | *(.dlt) | ||
| 167 | } | ||
| 143 | #endif | 168 | #endif |
| 144 | 169 | ||
| 145 | /* reserve space for interrupt stack by aligning __init* to 16k */ | 170 | /* reserve space for interrupt stack by aligning __init* to 16k */ |
| 146 | . = ALIGN(16384); | 171 | . = ALIGN(16384); |
| 147 | __init_begin = .; | 172 | __init_begin = .; |
| 148 | .init.text : { | 173 | .init.text : { |
| 149 | _sinittext = .; | 174 | _sinittext = .; |
| 150 | *(.init.text) | 175 | *(.init.text) |
| 151 | _einittext = .; | 176 | _einittext = .; |
| 152 | } | 177 | } |
| 153 | .init.data : { *(.init.data) } | 178 | .init.data : { |
| 154 | . = ALIGN(16); | 179 | *(.init.data) |
| 155 | __setup_start = .; | 180 | } |
| 156 | .init.setup : { *(.init.setup) } | 181 | . = ALIGN(16); |
| 157 | __setup_end = .; | 182 | .init.setup : { |
| 158 | __initcall_start = .; | 183 | __setup_start = .; |
| 159 | .initcall.init : { | 184 | *(.init.setup) |
| 160 | INITCALLS | 185 | __setup_end = .; |
| 161 | } | 186 | } |
| 162 | __initcall_end = .; | 187 | .initcall.init : { |
| 163 | __con_initcall_start = .; | 188 | __initcall_start = .; |
| 164 | .con_initcall.init : { *(.con_initcall.init) } | 189 | INITCALLS |
| 165 | __con_initcall_end = .; | 190 | __initcall_end = .; |
| 166 | SECURITY_INIT | 191 | } |
| 167 | /* alternate instruction replacement. This is a mechanism x86 uses | 192 | .con_initcall.init : { |
| 168 | * to detect the CPU type and replace generic instruction sequences | 193 | __con_initcall_start = .; |
| 169 | * with CPU specific ones. We don't currently do this in PA, but | 194 | *(.con_initcall.init) |
| 170 | * it seems like a good idea... */ | 195 | __con_initcall_end = .; |
| 171 | . = ALIGN(4); | 196 | } |
| 172 | __alt_instructions = .; | 197 | SECURITY_INIT |
| 173 | .altinstructions : { *(.altinstructions) } | 198 | |
| 174 | __alt_instructions_end = .; | 199 | /* alternate instruction replacement. This is a mechanism x86 uses |
| 175 | .altinstr_replacement : { *(.altinstr_replacement) } | 200 | * to detect the CPU type and replace generic instruction sequences |
| 176 | /* .exit.text is discard at runtime, not link time, to deal with references | 201 | * with CPU specific ones. We don't currently do this in PA, but |
| 177 | from .altinstructions and .eh_frame */ | 202 | * it seems like a good idea... |
| 178 | .exit.text : { *(.exit.text) } | 203 | */ |
| 179 | .exit.data : { *(.exit.data) } | 204 | . = ALIGN(4); |
| 205 | .altinstructions : { | ||
| 206 | __alt_instructions = .; | ||
| 207 | *(.altinstructions) | ||
| 208 | __alt_instructions_end = .; | ||
| 209 | } | ||
| 210 | .altinstr_replacement : { | ||
| 211 | *(.altinstr_replacement) | ||
| 212 | } | ||
| 213 | |||
| 214 | /* .exit.text is discard at runtime, not link time, to deal with references | ||
| 215 | * from .altinstructions and .eh_frame | ||
| 216 | */ | ||
| 217 | .exit.text : { | ||
| 218 | *(.exit.text) | ||
| 219 | } | ||
| 220 | .exit.data : { | ||
| 221 | *(.exit.data) | ||
| 222 | } | ||
| 180 | #ifdef CONFIG_BLK_DEV_INITRD | 223 | #ifdef CONFIG_BLK_DEV_INITRD |
| 181 | . = ALIGN(ASM_PAGE_SIZE); | 224 | . = ALIGN(PAGE_SIZE); |
| 182 | __initramfs_start = .; | 225 | .init.ramfs : { |
| 183 | .init.ramfs : { *(.init.ramfs) } | 226 | __initramfs_start = .; |
| 184 | __initramfs_end = .; | 227 | *(.init.ramfs) |
| 228 | __initramfs_end = .; | ||
| 229 | } | ||
| 185 | #endif | 230 | #endif |
| 186 | 231 | ||
| 187 | PERCPU(ASM_PAGE_SIZE) | 232 | PERCPU(PAGE_SIZE) |
| 233 | . = ALIGN(PAGE_SIZE); | ||
| 234 | __init_end = .; | ||
| 235 | /* freed after init ends here */ | ||
| 236 | _end = . ; | ||
| 188 | 237 | ||
| 189 | . = ALIGN(ASM_PAGE_SIZE); | 238 | /* Sections to be discarded */ |
| 190 | __init_end = .; | 239 | /DISCARD/ : { |
| 191 | /* freed after init ends here */ | 240 | *(.exitcall.exit) |
| 192 | |||
| 193 | _end = . ; | ||
| 194 | |||
| 195 | /* Sections to be discarded */ | ||
| 196 | /DISCARD/ : { | ||
| 197 | *(.exitcall.exit) | ||
| 198 | #ifdef CONFIG_64BIT | 241 | #ifdef CONFIG_64BIT |
| 199 | /* temporary hack until binutils is fixed to not emit these | 242 | /* temporary hack until binutils is fixed to not emit these |
| 200 | for static binaries */ | 243 | * for static binaries |
| 201 | *(.interp) | 244 | */ |
| 202 | *(.dynsym) | 245 | *(.interp) |
| 203 | *(.dynstr) | 246 | *(.dynsym) |
| 204 | *(.dynamic) | 247 | *(.dynstr) |
| 205 | *(.hash) | 248 | *(.dynamic) |
| 206 | *(.gnu.hash) | 249 | *(.hash) |
| 250 | *(.gnu.hash) | ||
| 207 | #endif | 251 | #endif |
| 208 | } | 252 | } |
| 209 | 253 | ||
| 210 | STABS_DEBUG | 254 | STABS_DEBUG |
| 211 | .note 0 : { *(.note) } | 255 | .note 0 : { *(.note) } |
| 212 | |||
| 213 | } | 256 | } |
