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 */ |