diff options
| -rw-r--r-- | arch/parisc/kernel/head.S | 15 | ||||
| -rw-r--r-- | arch/parisc/kernel/hpmc.S | 16 | ||||
| -rw-r--r-- | arch/parisc/kernel/pacache.S | 80 | ||||
| -rw-r--r-- | arch/parisc/kernel/perf_asm.S | 26 | ||||
| -rw-r--r-- | arch/parisc/kernel/real2.S | 16 | ||||
| -rw-r--r-- | arch/parisc/kernel/syscall.S | 71 |
6 files changed, 99 insertions, 125 deletions
diff --git a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S index eaad2328fea1..9676c486bb63 100644 --- a/arch/parisc/kernel/head.S +++ b/arch/parisc/kernel/head.S | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * License. See the file "COPYING" in the main directory of this archive | 2 | * License. See the file "COPYING" in the main directory of this archive |
| 3 | * for more details. | 3 | * for more details. |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 1999 by Helge Deller | 5 | * Copyright (C) 1999-2007 by Helge Deller <deller@gmx.de> |
| 6 | * Copyright 1999 SuSE GmbH (Philipp Rumpf) | 6 | * Copyright 1999 SuSE GmbH (Philipp Rumpf) |
| 7 | * Copyright 1999 Philipp Rumpf (prumpf@tux.org) | 7 | * Copyright 1999 Philipp Rumpf (prumpf@tux.org) |
| 8 | * Copyright 2000 Hewlett Packard (Paul Bame, bame@puffin.external.hp.com) | 8 | * Copyright 2000 Hewlett Packard (Paul Bame, bame@puffin.external.hp.com) |
| @@ -19,16 +19,17 @@ | |||
| 19 | #include <asm/assembly.h> | 19 | #include <asm/assembly.h> |
| 20 | #include <asm/pgtable.h> | 20 | #include <asm/pgtable.h> |
| 21 | 21 | ||
| 22 | #include <linux/linkage.h> | ||
| 23 | |||
| 22 | .level LEVEL | 24 | .level LEVEL |
| 23 | 25 | ||
| 24 | .data | 26 | .data |
| 25 | 27 | ENTRY(boot_args) | |
| 26 | .export boot_args | ||
| 27 | boot_args: | ||
| 28 | .word 0 /* arg0 */ | 28 | .word 0 /* arg0 */ |
| 29 | .word 0 /* arg1 */ | 29 | .word 0 /* arg1 */ |
| 30 | .word 0 /* arg2 */ | 30 | .word 0 /* arg2 */ |
| 31 | .word 0 /* arg3 */ | 31 | .word 0 /* arg3 */ |
| 32 | END(boot_args) | ||
| 32 | 33 | ||
| 33 | .text | 34 | .text |
| 34 | .align 4 | 35 | .align 4 |
| @@ -38,10 +39,9 @@ boot_args: | |||
| 38 | .import fault_vector_11,code /* IVA parisc 1.1 32 bit */ | 39 | .import fault_vector_11,code /* IVA parisc 1.1 32 bit */ |
| 39 | .import $global$ /* forward declaration */ | 40 | .import $global$ /* forward declaration */ |
| 40 | #endif /*!CONFIG_64BIT*/ | 41 | #endif /*!CONFIG_64BIT*/ |
| 41 | .export stext | ||
| 42 | .export _stext,data /* Kernel want it this way! */ | 42 | .export _stext,data /* Kernel want it this way! */ |
| 43 | _stext: | 43 | _stext: |
| 44 | stext: | 44 | ENTRY(stext) |
| 45 | .proc | 45 | .proc |
| 46 | .callinfo | 46 | .callinfo |
| 47 | 47 | ||
| @@ -343,6 +343,9 @@ smp_slave_stext: | |||
| 343 | 343 | ||
| 344 | .procend | 344 | .procend |
| 345 | #endif /* CONFIG_SMP */ | 345 | #endif /* CONFIG_SMP */ |
| 346 | |||
| 347 | ENDPROC(stext) | ||
| 348 | |||
| 346 | #ifndef CONFIG_64BIT | 349 | #ifndef CONFIG_64BIT |
| 347 | .data | 350 | .data |
| 348 | 351 | ||
diff --git a/arch/parisc/kernel/hpmc.S b/arch/parisc/kernel/hpmc.S index c412c0adc4a9..d8baa158d8a0 100644 --- a/arch/parisc/kernel/hpmc.S +++ b/arch/parisc/kernel/hpmc.S | |||
| @@ -46,6 +46,8 @@ | |||
| 46 | #include <asm/assembly.h> | 46 | #include <asm/assembly.h> |
| 47 | #include <asm/pdc.h> | 47 | #include <asm/pdc.h> |
| 48 | 48 | ||
| 49 | #include <linux/linkage.h> | ||
| 50 | |||
| 49 | /* | 51 | /* |
| 50 | * stack for os_hpmc, the HPMC handler. | 52 | * stack for os_hpmc, the HPMC handler. |
| 51 | * buffer for IODC procedures (for the HPMC handler). | 53 | * buffer for IODC procedures (for the HPMC handler). |
| @@ -69,17 +71,15 @@ hpmc_raddr: | |||
| 69 | 71 | ||
| 70 | #define HPMC_PIM_DATA_SIZE 896 /* Enough to hold all architected 2.0 state */ | 72 | #define HPMC_PIM_DATA_SIZE 896 /* Enough to hold all architected 2.0 state */ |
| 71 | 73 | ||
| 72 | .export hpmc_pim_data, data | ||
| 73 | .align 8 | 74 | .align 8 |
| 74 | hpmc_pim_data: | 75 | ENTRY(hpmc_pim_data) |
| 75 | .block HPMC_PIM_DATA_SIZE | 76 | .block HPMC_PIM_DATA_SIZE |
| 77 | END(hpmc_pim_data) | ||
| 76 | 78 | ||
| 77 | .text | 79 | .text |
| 78 | 80 | ||
| 79 | .export os_hpmc, code | ||
| 80 | .import intr_save, code | 81 | .import intr_save, code |
| 81 | 82 | ENTRY(os_hpmc) | |
| 82 | os_hpmc: | ||
| 83 | 83 | ||
| 84 | /* | 84 | /* |
| 85 | * registers modified: | 85 | * registers modified: |
| @@ -294,11 +294,9 @@ os_hpmc_6: | |||
| 294 | 294 | ||
| 295 | b . | 295 | b . |
| 296 | nop | 296 | nop |
| 297 | ENDPROC(os_hpmc) | ||
| 297 | 298 | ||
| 298 | /* this label used to compute os_hpmc checksum */ | 299 | /* this label used to compute os_hpmc checksum */ |
| 299 | 300 | ENTRY(os_hpmc_end) | |
| 300 | .export os_hpmc_end, code | ||
| 301 | |||
| 302 | os_hpmc_end: | ||
| 303 | 301 | ||
| 304 | nop | 302 | nop |
diff --git a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S index e81c9937d10a..75d522e2d058 100644 --- a/arch/parisc/kernel/pacache.S +++ b/arch/parisc/kernel/pacache.S | |||
| @@ -45,13 +45,12 @@ | |||
| 45 | #include <asm/assembly.h> | 45 | #include <asm/assembly.h> |
| 46 | #include <asm/pgtable.h> | 46 | #include <asm/pgtable.h> |
| 47 | #include <asm/cache.h> | 47 | #include <asm/cache.h> |
| 48 | #include <linux/linkage.h> | ||
| 48 | 49 | ||
| 49 | .text | 50 | .text |
| 50 | .align 128 | 51 | .align 128 |
| 51 | 52 | ||
| 52 | .export flush_tlb_all_local,code | 53 | ENTRY(flush_tlb_all_local) |
| 53 | |||
| 54 | flush_tlb_all_local: | ||
| 55 | .proc | 54 | .proc |
| 56 | .callinfo NO_CALLS | 55 | .callinfo NO_CALLS |
| 57 | .entry | 56 | .entry |
| @@ -200,11 +199,11 @@ fdtdone: | |||
| 200 | 199 | ||
| 201 | .exit | 200 | .exit |
| 202 | .procend | 201 | .procend |
| 202 | ENDPROC(flush_tlb_all_local) | ||
| 203 | 203 | ||
| 204 | .export flush_instruction_cache_local,code | ||
| 205 | .import cache_info,data | 204 | .import cache_info,data |
| 206 | 205 | ||
| 207 | flush_instruction_cache_local: | 206 | ENTRY(flush_instruction_cache_local) |
| 208 | .proc | 207 | .proc |
| 209 | .callinfo NO_CALLS | 208 | .callinfo NO_CALLS |
| 210 | .entry | 209 | .entry |
| @@ -241,11 +240,11 @@ fisync: | |||
| 241 | .exit | 240 | .exit |
| 242 | 241 | ||
| 243 | .procend | 242 | .procend |
| 243 | ENDPROC(flush_instruction_cache_local) | ||
| 244 | 244 | ||
| 245 | .export flush_data_cache_local, code | ||
| 246 | .import cache_info, data | ||
| 247 | 245 | ||
| 248 | flush_data_cache_local: | 246 | .import cache_info, data |
| 247 | ENTRY(flush_data_cache_local) | ||
| 249 | .proc | 248 | .proc |
| 250 | .callinfo NO_CALLS | 249 | .callinfo NO_CALLS |
| 251 | .entry | 250 | .entry |
| @@ -283,11 +282,11 @@ fdsync: | |||
| 283 | .exit | 282 | .exit |
| 284 | 283 | ||
| 285 | .procend | 284 | .procend |
| 285 | ENDPROC(flush_data_cache_local) | ||
| 286 | 286 | ||
| 287 | .export copy_user_page_asm,code | ||
| 288 | .align 16 | 287 | .align 16 |
| 289 | 288 | ||
| 290 | copy_user_page_asm: | 289 | ENTRY(copy_user_page_asm) |
| 291 | .proc | 290 | .proc |
| 292 | .callinfo NO_CALLS | 291 | .callinfo NO_CALLS |
| 293 | .entry | 292 | .entry |
| @@ -409,6 +408,7 @@ copy_user_page_asm: | |||
| 409 | .exit | 408 | .exit |
| 410 | 409 | ||
| 411 | .procend | 410 | .procend |
| 411 | ENDPROC(copy_user_page_asm) | ||
| 412 | 412 | ||
| 413 | /* | 413 | /* |
| 414 | * NOTE: Code in clear_user_page has a hard coded dependency on the | 414 | * NOTE: Code in clear_user_page has a hard coded dependency on the |
| @@ -446,9 +446,7 @@ copy_user_page_asm: | |||
| 446 | * lobby for such a change. | 446 | * lobby for such a change. |
| 447 | */ | 447 | */ |
| 448 | 448 | ||
| 449 | .export copy_user_page_asm,code | 449 | ENTRY(copy_user_page_asm) |
| 450 | |||
| 451 | copy_user_page_asm: | ||
| 452 | .proc | 450 | .proc |
| 453 | .callinfo NO_CALLS | 451 | .callinfo NO_CALLS |
| 454 | .entry | 452 | .entry |
| @@ -534,11 +532,10 @@ copy_user_page_asm: | |||
| 534 | .exit | 532 | .exit |
| 535 | 533 | ||
| 536 | .procend | 534 | .procend |
| 535 | ENDPROC(copy_user_page_asm) | ||
| 537 | #endif | 536 | #endif |
| 538 | 537 | ||
| 539 | .export __clear_user_page_asm,code | 538 | ENTRY(__clear_user_page_asm) |
| 540 | |||
| 541 | __clear_user_page_asm: | ||
| 542 | .proc | 539 | .proc |
| 543 | .callinfo NO_CALLS | 540 | .callinfo NO_CALLS |
| 544 | .entry | 541 | .entry |
| @@ -618,10 +615,9 @@ __clear_user_page_asm: | |||
| 618 | .exit | 615 | .exit |
| 619 | 616 | ||
| 620 | .procend | 617 | .procend |
| 618 | ENDPROC(__clear_user_page_asm) | ||
| 621 | 619 | ||
| 622 | .export flush_kernel_dcache_page_asm | 620 | ENTRY(flush_kernel_dcache_page_asm) |
| 623 | |||
| 624 | flush_kernel_dcache_page_asm: | ||
| 625 | .proc | 621 | .proc |
| 626 | .callinfo NO_CALLS | 622 | .callinfo NO_CALLS |
| 627 | .entry | 623 | .entry |
| @@ -662,10 +658,9 @@ flush_kernel_dcache_page_asm: | |||
| 662 | .exit | 658 | .exit |
| 663 | 659 | ||
| 664 | .procend | 660 | .procend |
| 661 | ENDPROC(flush_kernel_dcache_page_asm) | ||
| 665 | 662 | ||
| 666 | .export flush_user_dcache_page | 663 | ENTRY(flush_user_dcache_page) |
| 667 | |||
| 668 | flush_user_dcache_page: | ||
| 669 | .proc | 664 | .proc |
| 670 | .callinfo NO_CALLS | 665 | .callinfo NO_CALLS |
| 671 | .entry | 666 | .entry |
| @@ -706,10 +701,9 @@ flush_user_dcache_page: | |||
| 706 | .exit | 701 | .exit |
| 707 | 702 | ||
| 708 | .procend | 703 | .procend |
| 704 | ENDPROC(flush_user_dcache_page) | ||
| 709 | 705 | ||
| 710 | .export flush_user_icache_page | 706 | ENTRY(flush_user_icache_page) |
| 711 | |||
| 712 | flush_user_icache_page: | ||
| 713 | .proc | 707 | .proc |
| 714 | .callinfo NO_CALLS | 708 | .callinfo NO_CALLS |
| 715 | .entry | 709 | .entry |
| @@ -750,11 +744,10 @@ flush_user_icache_page: | |||
| 750 | .exit | 744 | .exit |
| 751 | 745 | ||
| 752 | .procend | 746 | .procend |
| 747 | ENDPROC(flush_user_icache_page) | ||
| 753 | 748 | ||
| 754 | 749 | ||
| 755 | .export purge_kernel_dcache_page | 750 | ENTRY(purge_kernel_dcache_page) |
| 756 | |||
| 757 | purge_kernel_dcache_page: | ||
| 758 | .proc | 751 | .proc |
| 759 | .callinfo NO_CALLS | 752 | .callinfo NO_CALLS |
| 760 | .entry | 753 | .entry |
| @@ -794,15 +787,14 @@ purge_kernel_dcache_page: | |||
| 794 | .exit | 787 | .exit |
| 795 | 788 | ||
| 796 | .procend | 789 | .procend |
| 790 | ENDPROC(purge_kernel_dcache_page) | ||
| 797 | 791 | ||
| 798 | #if 0 | 792 | #if 0 |
| 799 | /* Currently not used, but it still is a possible alternate | 793 | /* Currently not used, but it still is a possible alternate |
| 800 | * solution. | 794 | * solution. |
| 801 | */ | 795 | */ |
| 802 | 796 | ||
| 803 | .export flush_alias_page | 797 | ENTRY(flush_alias_page) |
| 804 | |||
| 805 | flush_alias_page: | ||
| 806 | .proc | 798 | .proc |
| 807 | .callinfo NO_CALLS | 799 | .callinfo NO_CALLS |
| 808 | .entry | 800 | .entry |
| @@ -882,10 +874,9 @@ flush_user_dcache_range_asm: | |||
| 882 | .exit | 874 | .exit |
| 883 | 875 | ||
| 884 | .procend | 876 | .procend |
| 877 | ENDPROC(flush_alias_page) | ||
| 885 | 878 | ||
| 886 | .export flush_kernel_dcache_range_asm | 879 | ENTRY(flush_kernel_dcache_range_asm) |
| 887 | |||
| 888 | flush_kernel_dcache_range_asm: | ||
| 889 | .proc | 880 | .proc |
| 890 | .callinfo NO_CALLS | 881 | .callinfo NO_CALLS |
| 891 | .entry | 882 | .entry |
| @@ -905,10 +896,9 @@ flush_kernel_dcache_range_asm: | |||
| 905 | .exit | 896 | .exit |
| 906 | 897 | ||
| 907 | .procend | 898 | .procend |
| 899 | ENDPROC(flush_kernel_dcache_range_asm) | ||
| 908 | 900 | ||
| 909 | .export flush_user_icache_range_asm | 901 | ENTRY(flush_user_icache_range_asm) |
| 910 | |||
| 911 | flush_user_icache_range_asm: | ||
| 912 | .proc | 902 | .proc |
| 913 | .callinfo NO_CALLS | 903 | .callinfo NO_CALLS |
| 914 | .entry | 904 | .entry |
| @@ -927,10 +917,9 @@ flush_user_icache_range_asm: | |||
| 927 | .exit | 917 | .exit |
| 928 | 918 | ||
| 929 | .procend | 919 | .procend |
| 920 | ENDPROC(flush_user_icache_range_asm) | ||
| 930 | 921 | ||
| 931 | .export flush_kernel_icache_page | 922 | ENTRY(flush_kernel_icache_page) |
| 932 | |||
| 933 | flush_kernel_icache_page: | ||
| 934 | .proc | 923 | .proc |
| 935 | .callinfo NO_CALLS | 924 | .callinfo NO_CALLS |
| 936 | .entry | 925 | .entry |
| @@ -971,10 +960,9 @@ flush_kernel_icache_page: | |||
| 971 | .exit | 960 | .exit |
| 972 | 961 | ||
| 973 | .procend | 962 | .procend |
| 963 | ENDPROC(flush_kernel_icache_page) | ||
| 974 | 964 | ||
| 975 | .export flush_kernel_icache_range_asm | 965 | ENTRY(flush_kernel_icache_range_asm) |
| 976 | |||
| 977 | flush_kernel_icache_range_asm: | ||
| 978 | .proc | 966 | .proc |
| 979 | .callinfo NO_CALLS | 967 | .callinfo NO_CALLS |
| 980 | .entry | 968 | .entry |
| @@ -992,14 +980,13 @@ flush_kernel_icache_range_asm: | |||
| 992 | nop | 980 | nop |
| 993 | .exit | 981 | .exit |
| 994 | .procend | 982 | .procend |
| 983 | ENDPROC(flush_kernel_icache_range_asm) | ||
| 995 | 984 | ||
| 996 | /* align should cover use of rfi in disable_sr_hashing_asm and | 985 | /* align should cover use of rfi in disable_sr_hashing_asm and |
| 997 | * srdis_done. | 986 | * srdis_done. |
| 998 | */ | 987 | */ |
| 999 | .align 256 | 988 | .align 256 |
| 1000 | .export disable_sr_hashing_asm,code | 989 | ENTRY(disable_sr_hashing_asm) |
| 1001 | |||
| 1002 | disable_sr_hashing_asm: | ||
| 1003 | .proc | 990 | .proc |
| 1004 | .callinfo NO_CALLS | 991 | .callinfo NO_CALLS |
| 1005 | .entry | 992 | .entry |
| @@ -1088,5 +1075,6 @@ srdis_done: | |||
| 1088 | .exit | 1075 | .exit |
| 1089 | 1076 | ||
| 1090 | .procend | 1077 | .procend |
| 1078 | ENDPROC(disable_sr_hashing_asm) | ||
| 1091 | 1079 | ||
| 1092 | .end | 1080 | .end |
diff --git a/arch/parisc/kernel/perf_asm.S b/arch/parisc/kernel/perf_asm.S index 5e7bb90e7e08..43874ca3ed67 100644 --- a/arch/parisc/kernel/perf_asm.S +++ b/arch/parisc/kernel/perf_asm.S | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include <asm/assembly.h> | 22 | #include <asm/assembly.h> |
| 23 | #include <linux/linkage.h> | ||
| 23 | 24 | ||
| 24 | #ifdef CONFIG_64BIT | 25 | #ifdef CONFIG_64BIT |
| 25 | .level 2.0w | 26 | .level 2.0w |
| @@ -41,10 +42,8 @@ | |||
| 41 | ; starting/stopping the coprocessor with the pmenb/pmdis. | 42 | ; starting/stopping the coprocessor with the pmenb/pmdis. |
| 42 | ; | 43 | ; |
| 43 | .text | 44 | .text |
| 44 | .align 32 | ||
| 45 | 45 | ||
| 46 | .export perf_intrigue_enable_perf_counters,code | 46 | ENTRY(perf_intrigue_enable_perf_counters) |
| 47 | perf_intrigue_enable_perf_counters: | ||
| 48 | .proc | 47 | .proc |
| 49 | .callinfo frame=0,NO_CALLS | 48 | .callinfo frame=0,NO_CALLS |
| 50 | .entry | 49 | .entry |
| @@ -69,9 +68,9 @@ perf_intrigue_enable_perf_counters: | |||
| 69 | nop | 68 | nop |
| 70 | .exit | 69 | .exit |
| 71 | .procend | 70 | .procend |
| 71 | ENDPROC(perf_intrigue_enable_perf_counters) | ||
| 72 | 72 | ||
| 73 | .export perf_intrigue_disable_perf_counters,code | 73 | ENTRY(perf_intrigue_disable_perf_counters) |
| 74 | perf_intrigue_disable_perf_counters: | ||
| 75 | .proc | 74 | .proc |
| 76 | .callinfo frame=0,NO_CALLS | 75 | .callinfo frame=0,NO_CALLS |
| 77 | .entry | 76 | .entry |
| @@ -86,6 +85,7 @@ perf_intrigue_disable_perf_counters: | |||
| 86 | mtctl %r26,ccr ; turn off performance coprocessor | 85 | mtctl %r26,ccr ; turn off performance coprocessor |
| 87 | .exit | 86 | .exit |
| 88 | .procend | 87 | .procend |
| 88 | ENDPROC(perf_intrigue_disable_perf_counters) | ||
| 89 | 89 | ||
| 90 | ;*********************************************************************** | 90 | ;*********************************************************************** |
| 91 | ;* | 91 | ;* |
| @@ -117,8 +117,7 @@ perf_intrigue_disable_perf_counters: | |||
| 117 | ;* | 117 | ;* |
| 118 | ;*********************************************************************** | 118 | ;*********************************************************************** |
| 119 | 119 | ||
| 120 | .export perf_rdr_shift_in_W,code | 120 | ENTRY(perf_rdr_shift_in_W) |
| 121 | perf_rdr_shift_in_W: | ||
| 122 | .proc | 121 | .proc |
| 123 | .callinfo frame=0,NO_CALLS | 122 | .callinfo frame=0,NO_CALLS |
| 124 | .entry | 123 | .entry |
| @@ -550,6 +549,7 @@ perf_rdr_shift_in_W_leave: | |||
| 550 | .exit | 549 | .exit |
| 551 | MTDIAG_2 (24) ; restore DR2 | 550 | MTDIAG_2 (24) ; restore DR2 |
| 552 | .procend | 551 | .procend |
| 552 | ENDPROC(perf_rdr_shift_in_W) | ||
| 553 | 553 | ||
| 554 | 554 | ||
| 555 | ;*********************************************************************** | 555 | ;*********************************************************************** |
| @@ -575,8 +575,7 @@ perf_rdr_shift_in_W_leave: | |||
| 575 | ;* | 575 | ;* |
| 576 | ;*********************************************************************** | 576 | ;*********************************************************************** |
| 577 | 577 | ||
| 578 | .export perf_rdr_shift_out_W,code | 578 | ENTRY(perf_rdr_shift_out_W) |
| 579 | perf_rdr_shift_out_W: | ||
| 580 | .proc | 579 | .proc |
| 581 | .callinfo frame=0,NO_CALLS | 580 | .callinfo frame=0,NO_CALLS |
| 582 | .entry | 581 | .entry |
| @@ -983,6 +982,7 @@ perf_rdr_shift_out_W_leave: | |||
| 983 | .exit | 982 | .exit |
| 984 | MTDIAG_2 (23) ; restore DR2 | 983 | MTDIAG_2 (23) ; restore DR2 |
| 985 | .procend | 984 | .procend |
| 985 | ENDPROC(perf_rdr_shift_out_W) | ||
| 986 | 986 | ||
| 987 | 987 | ||
| 988 | ;*********************************************************************** | 988 | ;*********************************************************************** |
| @@ -1012,8 +1012,7 @@ perf_rdr_shift_out_W_leave: | |||
| 1012 | ;* | 1012 | ;* |
| 1013 | ;*********************************************************************** | 1013 | ;*********************************************************************** |
| 1014 | 1014 | ||
| 1015 | .export perf_rdr_shift_in_U,code | 1015 | ENTRY(perf_rdr_shift_in_U) |
| 1016 | perf_rdr_shift_in_U: | ||
| 1017 | .proc | 1016 | .proc |
| 1018 | .callinfo frame=0,NO_CALLS | 1017 | .callinfo frame=0,NO_CALLS |
| 1019 | .entry | 1018 | .entry |
| @@ -1343,6 +1342,7 @@ perf_rdr_shift_in_U_leave: | |||
| 1343 | .exit | 1342 | .exit |
| 1344 | MTDIAG_2 (24) ; restore DR2 | 1343 | MTDIAG_2 (24) ; restore DR2 |
| 1345 | .procend | 1344 | .procend |
| 1345 | ENDPROC(perf_rdr_shift_in_U) | ||
| 1346 | 1346 | ||
| 1347 | ;*********************************************************************** | 1347 | ;*********************************************************************** |
| 1348 | ;* | 1348 | ;* |
| @@ -1369,8 +1369,7 @@ perf_rdr_shift_in_U_leave: | |||
| 1369 | ;* | 1369 | ;* |
| 1370 | ;*********************************************************************** | 1370 | ;*********************************************************************** |
| 1371 | 1371 | ||
| 1372 | .export perf_rdr_shift_out_U,code | 1372 | ENTRY(perf_rdr_shift_out_U) |
| 1373 | perf_rdr_shift_out_U: | ||
| 1374 | .proc | 1373 | .proc |
| 1375 | .callinfo frame=0,NO_CALLS | 1374 | .callinfo frame=0,NO_CALLS |
| 1376 | .entry | 1375 | .entry |
| @@ -1687,4 +1686,5 @@ perf_rdr_shift_out_U_leave: | |||
| 1687 | .exit | 1686 | .exit |
| 1688 | MTDIAG_2 (23) ; restore DR2 | 1687 | MTDIAG_2 (23) ; restore DR2 |
| 1689 | .procend | 1688 | .procend |
| 1689 | ENDPROC(perf_rdr_shift_out_U) | ||
| 1690 | 1690 | ||
diff --git a/arch/parisc/kernel/real2.S b/arch/parisc/kernel/real2.S index 789061f6ceb4..7a92695d95a6 100644 --- a/arch/parisc/kernel/real2.S +++ b/arch/parisc/kernel/real2.S | |||
| @@ -11,6 +11,8 @@ | |||
| 11 | #include <asm/psw.h> | 11 | #include <asm/psw.h> |
| 12 | #include <asm/assembly.h> | 12 | #include <asm/assembly.h> |
| 13 | 13 | ||
| 14 | #include <linux/linkage.h> | ||
| 15 | |||
| 14 | .section .bss | 16 | .section .bss |
| 15 | .export real_stack | 17 | .export real_stack |
| 16 | .export real32_stack | 18 | .export real32_stack |
| @@ -39,8 +41,6 @@ save_cr_end: | |||
| 39 | 41 | ||
| 40 | .text | 42 | .text |
| 41 | 43 | ||
| 42 | .export real32_call_asm | ||
| 43 | |||
| 44 | /* unsigned long real32_call_asm(unsigned int *sp, | 44 | /* unsigned long real32_call_asm(unsigned int *sp, |
| 45 | * unsigned int *arg0p, | 45 | * unsigned int *arg0p, |
| 46 | * unsigned int iodc_fn) | 46 | * unsigned int iodc_fn) |
| @@ -49,7 +49,7 @@ save_cr_end: | |||
| 49 | * iodc_fn is the IODC function to call | 49 | * iodc_fn is the IODC function to call |
| 50 | */ | 50 | */ |
| 51 | 51 | ||
| 52 | real32_call_asm: | 52 | ENTRY(real32_call_asm) |
| 53 | STREG %rp, -RP_OFFSET(%sp) /* save RP */ | 53 | STREG %rp, -RP_OFFSET(%sp) /* save RP */ |
| 54 | #ifdef CONFIG_64BIT | 54 | #ifdef CONFIG_64BIT |
| 55 | callee_save | 55 | callee_save |
| @@ -107,6 +107,7 @@ ric_ret: | |||
| 107 | LDREG -RP_OFFSET(%sp), %rp /* restore RP */ | 107 | LDREG -RP_OFFSET(%sp), %rp /* restore RP */ |
| 108 | bv 0(%rp) | 108 | bv 0(%rp) |
| 109 | nop | 109 | nop |
| 110 | ENDPROC(real32_call_asm) | ||
| 110 | 111 | ||
| 111 | 112 | ||
| 112 | # define PUSH_CR(r, where) mfctl r, %r1 ! STREG,ma %r1, REG_SZ(where) | 113 | # define PUSH_CR(r, where) mfctl r, %r1 ! STREG,ma %r1, REG_SZ(where) |
| @@ -218,7 +219,6 @@ rfi_r2v_1: | |||
| 218 | /************************ 64-bit real-mode calls ***********************/ | 219 | /************************ 64-bit real-mode calls ***********************/ |
| 219 | /* This is only usable in wide kernels right now and will probably stay so */ | 220 | /* This is only usable in wide kernels right now and will probably stay so */ |
| 220 | .text | 221 | .text |
| 221 | .export real64_call_asm | ||
| 222 | /* unsigned long real64_call_asm(unsigned long *sp, | 222 | /* unsigned long real64_call_asm(unsigned long *sp, |
| 223 | * unsigned long *arg0p, | 223 | * unsigned long *arg0p, |
| 224 | * unsigned long fn) | 224 | * unsigned long fn) |
| @@ -226,7 +226,7 @@ rfi_r2v_1: | |||
| 226 | * arg0p points to where saved arg values may be found | 226 | * arg0p points to where saved arg values may be found |
| 227 | * iodc_fn is the IODC function to call | 227 | * iodc_fn is the IODC function to call |
| 228 | */ | 228 | */ |
| 229 | real64_call_asm: | 229 | ENTRY(real64_call_asm) |
| 230 | std %rp, -0x10(%sp) /* save RP */ | 230 | std %rp, -0x10(%sp) /* save RP */ |
| 231 | std %sp, -8(%arg0) /* save SP on real-mode stack */ | 231 | std %sp, -8(%arg0) /* save SP on real-mode stack */ |
| 232 | copy %arg0, %sp /* adopt the real-mode SP */ | 232 | copy %arg0, %sp /* adopt the real-mode SP */ |
| @@ -272,19 +272,21 @@ r64_ret: | |||
| 272 | ldd -0x10(%sp), %rp /* restore RP */ | 272 | ldd -0x10(%sp), %rp /* restore RP */ |
| 273 | bv 0(%rp) | 273 | bv 0(%rp) |
| 274 | nop | 274 | nop |
| 275 | ENDPROC(real64_call_asm) | ||
| 275 | 276 | ||
| 276 | #endif | 277 | #endif |
| 277 | 278 | ||
| 278 | .export __canonicalize_funcptr_for_compare | ||
| 279 | .text | 279 | .text |
| 280 | /* http://lists.parisc-linux.org/hypermail/parisc-linux/10916.html | 280 | /* http://lists.parisc-linux.org/hypermail/parisc-linux/10916.html |
| 281 | ** GCC 3.3 and later has a new function in libgcc.a for | 281 | ** GCC 3.3 and later has a new function in libgcc.a for |
| 282 | ** comparing function pointers. | 282 | ** comparing function pointers. |
| 283 | */ | 283 | */ |
| 284 | __canonicalize_funcptr_for_compare: | 284 | ENTRY(__canonicalize_funcptr_for_compare) |
| 285 | #ifdef CONFIG_64BIT | 285 | #ifdef CONFIG_64BIT |
| 286 | bve (%r2) | 286 | bve (%r2) |
| 287 | #else | 287 | #else |
| 288 | bv %r0(%r2) | 288 | bv %r0(%r2) |
| 289 | #endif | 289 | #endif |
| 290 | copy %r26,%r28 | 290 | copy %r26,%r28 |
| 291 | ENDPROC(__canonicalize_funcptr_for_compare) | ||
| 292 | |||
diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S index a05800429304..de1812de5183 100644 --- a/arch/parisc/kernel/syscall.S +++ b/arch/parisc/kernel/syscall.S | |||
| @@ -12,10 +12,11 @@ | |||
| 12 | #include <asm/errno.h> | 12 | #include <asm/errno.h> |
| 13 | #include <asm/psw.h> | 13 | #include <asm/psw.h> |
| 14 | #include <asm/thread_info.h> | 14 | #include <asm/thread_info.h> |
| 15 | |||
| 16 | #include <asm/assembly.h> | 15 | #include <asm/assembly.h> |
| 17 | #include <asm/processor.h> | 16 | #include <asm/processor.h> |
| 18 | 17 | ||
| 18 | #include <linux/linkage.h> | ||
| 19 | |||
| 19 | /* We fill the empty parts of the gateway page with | 20 | /* We fill the empty parts of the gateway page with |
| 20 | * something that will kill the kernel or a | 21 | * something that will kill the kernel or a |
| 21 | * userspace application. | 22 | * userspace application. |
| @@ -28,11 +29,18 @@ | |||
| 28 | .level 1.1 | 29 | .level 1.1 |
| 29 | #endif | 30 | #endif |
| 30 | 31 | ||
| 32 | /* on 64bit pad to 64bit values */ | ||
| 33 | #ifdef CONFIG_64BIT | ||
| 34 | #define ULONG_WORD(x) .word 0, x | ||
| 35 | #else | ||
| 36 | #define ULONG_WORD(x) .word x | ||
| 37 | #endif | ||
| 38 | |||
| 39 | |||
| 31 | .text | 40 | .text |
| 32 | 41 | ||
| 33 | .import syscall_exit,code | 42 | .import syscall_exit,code |
| 34 | .import syscall_exit_rfi,code | 43 | .import syscall_exit_rfi,code |
| 35 | .export linux_gateway_page | ||
| 36 | 44 | ||
| 37 | /* Linux gateway page is aliased to virtual page 0 in the kernel | 45 | /* Linux gateway page is aliased to virtual page 0 in the kernel |
| 38 | * address space. Since it is a gateway page it cannot be | 46 | * address space. Since it is a gateway page it cannot be |
| @@ -43,7 +51,7 @@ | |||
| 43 | */ | 51 | */ |
| 44 | 52 | ||
| 45 | .align ASM_PAGE_SIZE | 53 | .align ASM_PAGE_SIZE |
| 46 | linux_gateway_page: | 54 | ENTRY(linux_gateway_page) |
| 47 | 55 | ||
| 48 | /* ADDRESS 0x00 to 0xb0 = 176 bytes / 4 bytes per insn = 44 insns */ | 56 | /* ADDRESS 0x00 to 0xb0 = 176 bytes / 4 bytes per insn = 44 insns */ |
| 49 | .rept 44 | 57 | .rept 44 |
| @@ -595,73 +603,49 @@ cas_action: | |||
| 595 | the other for the store. Either return -EFAULT. | 603 | the other for the store. Either return -EFAULT. |
| 596 | Each of the entries must be relocated. */ | 604 | Each of the entries must be relocated. */ |
| 597 | .section __ex_table,"aw" | 605 | .section __ex_table,"aw" |
| 598 | #ifdef CONFIG_64BIT | 606 | ULONG_WORD(2b - linux_gateway_page) |
| 599 | /* Pad the address calculation */ | 607 | ULONG_WORD(3b - linux_gateway_page) |
| 600 | .word 0,(2b - linux_gateway_page) | ||
| 601 | .word 0,(3b - linux_gateway_page) | ||
| 602 | #else | ||
| 603 | .word (2b - linux_gateway_page) | ||
| 604 | .word (3b - linux_gateway_page) | ||
| 605 | #endif | ||
| 606 | .previous | 608 | .previous |
| 607 | 609 | ||
| 608 | .section __ex_table,"aw" | 610 | .section __ex_table,"aw" |
| 609 | #ifdef CONFIG_64BIT | 611 | ULONG_WORD(1b - linux_gateway_page) |
| 610 | /* Pad the address calculation */ | 612 | ULONG_WORD(3b - linux_gateway_page) |
| 611 | .word 0,(1b - linux_gateway_page) | ||
| 612 | .word 0,(3b - linux_gateway_page) | ||
| 613 | #else | ||
| 614 | .word (1b - linux_gateway_page) | ||
| 615 | .word (3b - linux_gateway_page) | ||
| 616 | #endif | ||
| 617 | .previous | 613 | .previous |
| 618 | 614 | ||
| 619 | end_compare_and_swap: | 615 | end_compare_and_swap: |
| 620 | 616 | ||
| 621 | /* Make sure nothing else is placed on this page */ | 617 | /* Make sure nothing else is placed on this page */ |
| 622 | .align ASM_PAGE_SIZE | 618 | .align ASM_PAGE_SIZE |
| 623 | .export end_linux_gateway_page | 619 | END(linux_gateway_page) |
| 624 | end_linux_gateway_page: | 620 | ENTRY(end_linux_gateway_page) |
| 625 | 621 | ||
| 626 | /* Relocate symbols assuming linux_gateway_page is mapped | 622 | /* Relocate symbols assuming linux_gateway_page is mapped |
| 627 | to virtual address 0x0 */ | 623 | to virtual address 0x0 */ |
| 628 | #ifdef CONFIG_64BIT | 624 | |
| 629 | /* FIXME: The code will always be on the gateay page | 625 | #define LWS_ENTRY(_name_) ULONG_WORD(lws_##_name_ - linux_gateway_page) |
| 630 | and thus it will be on the first 4k, the | ||
| 631 | assembler seems to think that the final | ||
| 632 | subtraction result is only a word in | ||
| 633 | length, so we pad the value. | ||
| 634 | */ | ||
| 635 | #define LWS_ENTRY(_name_) .word 0,(lws_##_name_ - linux_gateway_page) | ||
| 636 | #else | ||
| 637 | #define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page) | ||
| 638 | #endif | ||
| 639 | 626 | ||
| 640 | .section .rodata,"a" | 627 | .section .rodata,"a" |
| 641 | 628 | ||
| 642 | .align ASM_PAGE_SIZE | 629 | .align ASM_PAGE_SIZE |
| 643 | /* Light-weight-syscall table */ | 630 | /* Light-weight-syscall table */ |
| 644 | /* Start of lws table. */ | 631 | /* Start of lws table. */ |
| 645 | .export lws_table | 632 | ENTRY(lws_table) |
| 646 | .Llws_table: | ||
| 647 | lws_table: | ||
| 648 | LWS_ENTRY(compare_and_swap32) /* 0 - ELF32 Atomic compare and swap */ | 633 | LWS_ENTRY(compare_and_swap32) /* 0 - ELF32 Atomic compare and swap */ |
| 649 | LWS_ENTRY(compare_and_swap64) /* 1 - ELF64 Atomic compare and swap */ | 634 | LWS_ENTRY(compare_and_swap64) /* 1 - ELF64 Atomic compare and swap */ |
| 635 | END(lws_table) | ||
| 650 | /* End of lws table */ | 636 | /* End of lws table */ |
| 651 | 637 | ||
| 652 | .align ASM_PAGE_SIZE | 638 | .align ASM_PAGE_SIZE |
| 653 | .export sys_call_table | 639 | ENTRY(sys_call_table) |
| 654 | .Lsys_call_table: | ||
| 655 | sys_call_table: | ||
| 656 | #include "syscall_table.S" | 640 | #include "syscall_table.S" |
| 641 | END(sys_call_table) | ||
| 657 | 642 | ||
| 658 | #ifdef CONFIG_64BIT | 643 | #ifdef CONFIG_64BIT |
| 659 | .align ASM_PAGE_SIZE | 644 | .align ASM_PAGE_SIZE |
| 660 | .export sys_call_table64 | 645 | ENTRY(sys_call_table64) |
| 661 | .Lsys_call_table64: | ||
| 662 | sys_call_table64: | ||
| 663 | #define SYSCALL_TABLE_64BIT | 646 | #define SYSCALL_TABLE_64BIT |
| 664 | #include "syscall_table.S" | 647 | #include "syscall_table.S" |
| 648 | END(sys_call_table64) | ||
| 665 | #endif | 649 | #endif |
| 666 | 650 | ||
| 667 | #ifdef CONFIG_SMP | 651 | #ifdef CONFIG_SMP |
| @@ -671,9 +655,7 @@ sys_call_table64: | |||
| 671 | */ | 655 | */ |
| 672 | .section .data | 656 | .section .data |
| 673 | .align 4096 | 657 | .align 4096 |
| 674 | .export lws_lock_start | 658 | ENTRY(lws_lock_start) |
| 675 | .Llws_lock_start: | ||
| 676 | lws_lock_start: | ||
| 677 | /* lws locks */ | 659 | /* lws locks */ |
| 678 | .align 16 | 660 | .align 16 |
| 679 | .rept 16 | 661 | .rept 16 |
| @@ -683,6 +665,7 @@ lws_lock_start: | |||
| 683 | .word 0 | 665 | .word 0 |
| 684 | .word 0 | 666 | .word 0 |
| 685 | .endr | 667 | .endr |
| 668 | END(lws_lock_start) | ||
| 686 | .previous | 669 | .previous |
| 687 | #endif | 670 | #endif |
| 688 | /* CONFIG_SMP for lws_lock_start */ | 671 | /* CONFIG_SMP for lws_lock_start */ |
