diff options
Diffstat (limited to 'arch/parisc/kernel')
-rw-r--r-- | arch/parisc/kernel/cache.c | 6 | ||||
-rw-r--r-- | arch/parisc/kernel/entry.S | 45 | ||||
-rw-r--r-- | arch/parisc/kernel/pacache.S | 4 | ||||
-rw-r--r-- | arch/parisc/kernel/parisc_ksyms.c | 19 | ||||
-rw-r--r-- | arch/parisc/kernel/pdc_chassis.c | 5 | ||||
-rw-r--r-- | arch/parisc/kernel/perf.c | 2 | ||||
-rw-r--r-- | arch/parisc/kernel/syscall_table.S | 2 |
7 files changed, 48 insertions, 35 deletions
diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c index d8a4ca021aac..360b7391cb8c 100644 --- a/arch/parisc/kernel/cache.c +++ b/arch/parisc/kernel/cache.c | |||
@@ -89,7 +89,7 @@ update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t pte) | |||
89 | if (pfn_valid(page_to_pfn(page)) && page_mapping(page) && | 89 | if (pfn_valid(page_to_pfn(page)) && page_mapping(page) && |
90 | test_bit(PG_dcache_dirty, &page->flags)) { | 90 | test_bit(PG_dcache_dirty, &page->flags)) { |
91 | 91 | ||
92 | flush_kernel_dcache_page(page_address(page)); | 92 | flush_kernel_dcache_page(page); |
93 | clear_bit(PG_dcache_dirty, &page->flags); | 93 | clear_bit(PG_dcache_dirty, &page->flags); |
94 | } | 94 | } |
95 | } | 95 | } |
@@ -278,7 +278,7 @@ void flush_dcache_page(struct page *page) | |||
278 | return; | 278 | return; |
279 | } | 279 | } |
280 | 280 | ||
281 | flush_kernel_dcache_page(page_address(page)); | 281 | flush_kernel_dcache_page(page); |
282 | 282 | ||
283 | if (!mapping) | 283 | if (!mapping) |
284 | return; | 284 | return; |
@@ -317,7 +317,7 @@ EXPORT_SYMBOL(flush_dcache_page); | |||
317 | 317 | ||
318 | /* Defined in arch/parisc/kernel/pacache.S */ | 318 | /* Defined in arch/parisc/kernel/pacache.S */ |
319 | EXPORT_SYMBOL(flush_kernel_dcache_range_asm); | 319 | EXPORT_SYMBOL(flush_kernel_dcache_range_asm); |
320 | EXPORT_SYMBOL(flush_kernel_dcache_page); | 320 | EXPORT_SYMBOL(flush_kernel_dcache_page_asm); |
321 | EXPORT_SYMBOL(flush_data_cache_local); | 321 | EXPORT_SYMBOL(flush_data_cache_local); |
322 | EXPORT_SYMBOL(flush_kernel_icache_range_asm); | 322 | EXPORT_SYMBOL(flush_kernel_icache_range_asm); |
323 | 323 | ||
diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index 9af4b22a6d77..7c95d7663c29 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S | |||
@@ -563,10 +563,10 @@ | |||
563 | extrd,u,*= \pte,_PAGE_GATEWAY_BIT+32,1,%r0 | 563 | extrd,u,*= \pte,_PAGE_GATEWAY_BIT+32,1,%r0 |
564 | depd %r0,11,2,\prot /* If Gateway, Set PL2 to 0 */ | 564 | depd %r0,11,2,\prot /* If Gateway, Set PL2 to 0 */ |
565 | 565 | ||
566 | /* Get rid of prot bits and convert to page addr for iitlbt */ | 566 | /* Get rid of prot bits and convert to page addr for iitlbt and idtlbt */ |
567 | 567 | ||
568 | depd %r0,63,PAGE_SHIFT,\pte | 568 | depd %r0,63,PAGE_SHIFT,\pte |
569 | extrd,u \pte,56,32,\pte | 569 | extrd,s \pte,(63-PAGE_SHIFT)+(63-58),64-PAGE_SHIFT,\pte |
570 | .endm | 570 | .endm |
571 | 571 | ||
572 | /* Identical macro to make_insert_tlb above, except it | 572 | /* Identical macro to make_insert_tlb above, except it |
@@ -584,7 +584,7 @@ | |||
584 | 584 | ||
585 | /* Get rid of prot bits and convert to page addr for iitlba */ | 585 | /* Get rid of prot bits and convert to page addr for iitlba */ |
586 | 586 | ||
587 | depi 0,31,12,\pte | 587 | depi 0,31,PAGE_SHIFT,\pte |
588 | extru \pte,24,25,\pte | 588 | extru \pte,24,25,\pte |
589 | 589 | ||
590 | .endm | 590 | .endm |
@@ -1014,14 +1014,21 @@ intr_restore: | |||
1014 | nop | 1014 | nop |
1015 | nop | 1015 | nop |
1016 | 1016 | ||
1017 | #ifndef CONFIG_PREEMPT | ||
1018 | # define intr_do_preempt intr_restore | ||
1019 | #endif /* !CONFIG_PREEMPT */ | ||
1020 | |||
1017 | .import schedule,code | 1021 | .import schedule,code |
1018 | intr_do_resched: | 1022 | intr_do_resched: |
1019 | /* Only do reschedule if we are returning to user space */ | 1023 | /* Only call schedule on return to userspace. If we're returning |
1024 | * to kernel space, we may schedule if CONFIG_PREEMPT, otherwise | ||
1025 | * we jump back to intr_restore. | ||
1026 | */ | ||
1020 | LDREG PT_IASQ0(%r16), %r20 | 1027 | LDREG PT_IASQ0(%r16), %r20 |
1021 | CMPIB= 0,%r20,intr_restore /* backward */ | 1028 | CMPIB= 0, %r20, intr_do_preempt |
1022 | nop | 1029 | nop |
1023 | LDREG PT_IASQ1(%r16), %r20 | 1030 | LDREG PT_IASQ1(%r16), %r20 |
1024 | CMPIB= 0,%r20,intr_restore /* backward */ | 1031 | CMPIB= 0, %r20, intr_do_preempt |
1025 | nop | 1032 | nop |
1026 | 1033 | ||
1027 | #ifdef CONFIG_64BIT | 1034 | #ifdef CONFIG_64BIT |
@@ -1037,6 +1044,32 @@ intr_do_resched: | |||
1037 | #endif | 1044 | #endif |
1038 | ldo R%intr_check_sig(%r2), %r2 | 1045 | ldo R%intr_check_sig(%r2), %r2 |
1039 | 1046 | ||
1047 | /* preempt the current task on returning to kernel | ||
1048 | * mode from an interrupt, iff need_resched is set, | ||
1049 | * and preempt_count is 0. otherwise, we continue on | ||
1050 | * our merry way back to the current running task. | ||
1051 | */ | ||
1052 | #ifdef CONFIG_PREEMPT | ||
1053 | .import preempt_schedule_irq,code | ||
1054 | intr_do_preempt: | ||
1055 | rsm PSW_SM_I, %r0 /* disable interrupts */ | ||
1056 | |||
1057 | /* current_thread_info()->preempt_count */ | ||
1058 | mfctl %cr30, %r1 | ||
1059 | LDREG TI_PRE_COUNT(%r1), %r19 | ||
1060 | CMPIB<> 0, %r19, intr_restore /* if preempt_count > 0 */ | ||
1061 | nop /* prev insn branched backwards */ | ||
1062 | |||
1063 | /* check if we interrupted a critical path */ | ||
1064 | LDREG PT_PSW(%r16), %r20 | ||
1065 | bb,<,n %r20, 31 - PSW_SM_I, intr_restore | ||
1066 | nop | ||
1067 | |||
1068 | BL preempt_schedule_irq, %r2 | ||
1069 | nop | ||
1070 | |||
1071 | b intr_restore /* ssm PSW_SM_I done by intr_restore */ | ||
1072 | #endif /* CONFIG_PREEMPT */ | ||
1040 | 1073 | ||
1041 | .import do_signal,code | 1074 | .import do_signal,code |
1042 | intr_do_signal: | 1075 | intr_do_signal: |
diff --git a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S index 9534ee17b9be..7a4f07e8d3c3 100644 --- a/arch/parisc/kernel/pacache.S +++ b/arch/parisc/kernel/pacache.S | |||
@@ -621,9 +621,9 @@ __clear_user_page_asm: | |||
621 | 621 | ||
622 | .procend | 622 | .procend |
623 | 623 | ||
624 | .export flush_kernel_dcache_page | 624 | .export flush_kernel_dcache_page_asm |
625 | 625 | ||
626 | flush_kernel_dcache_page: | 626 | flush_kernel_dcache_page_asm: |
627 | .proc | 627 | .proc |
628 | .callinfo NO_CALLS | 628 | .callinfo NO_CALLS |
629 | .entry | 629 | .entry |
diff --git a/arch/parisc/kernel/parisc_ksyms.c b/arch/parisc/kernel/parisc_ksyms.c index 1d00c365f2b1..47ca5c0a323b 100644 --- a/arch/parisc/kernel/parisc_ksyms.c +++ b/arch/parisc/kernel/parisc_ksyms.c | |||
@@ -30,22 +30,7 @@ | |||
30 | #include <linux/syscalls.h> | 30 | #include <linux/syscalls.h> |
31 | 31 | ||
32 | #include <linux/string.h> | 32 | #include <linux/string.h> |
33 | EXPORT_SYMBOL(memchr); | ||
34 | EXPORT_SYMBOL(memcmp); | ||
35 | EXPORT_SYMBOL(memmove); | ||
36 | EXPORT_SYMBOL(memscan); | ||
37 | EXPORT_SYMBOL(memset); | 33 | EXPORT_SYMBOL(memset); |
38 | EXPORT_SYMBOL(strcat); | ||
39 | EXPORT_SYMBOL(strchr); | ||
40 | EXPORT_SYMBOL(strcmp); | ||
41 | EXPORT_SYMBOL(strcpy); | ||
42 | EXPORT_SYMBOL(strlen); | ||
43 | EXPORT_SYMBOL(strncat); | ||
44 | EXPORT_SYMBOL(strncmp); | ||
45 | EXPORT_SYMBOL(strncpy); | ||
46 | EXPORT_SYMBOL(strnlen); | ||
47 | EXPORT_SYMBOL(strrchr); | ||
48 | EXPORT_SYMBOL(strstr); | ||
49 | EXPORT_SYMBOL(strpbrk); | 34 | EXPORT_SYMBOL(strpbrk); |
50 | 35 | ||
51 | #include <asm/atomic.h> | 36 | #include <asm/atomic.h> |
@@ -82,16 +67,12 @@ EXPORT_SYMBOL($global$); | |||
82 | #endif | 67 | #endif |
83 | 68 | ||
84 | #include <asm/io.h> | 69 | #include <asm/io.h> |
85 | EXPORT_SYMBOL(__ioremap); | ||
86 | EXPORT_SYMBOL(iounmap); | ||
87 | EXPORT_SYMBOL(memcpy_toio); | 70 | EXPORT_SYMBOL(memcpy_toio); |
88 | EXPORT_SYMBOL(memcpy_fromio); | 71 | EXPORT_SYMBOL(memcpy_fromio); |
89 | EXPORT_SYMBOL(memset_io); | 72 | EXPORT_SYMBOL(memset_io); |
90 | 73 | ||
91 | #include <asm/unistd.h> | 74 | #include <asm/unistd.h> |
92 | EXPORT_SYMBOL(sys_open); | ||
93 | EXPORT_SYMBOL(sys_lseek); | 75 | EXPORT_SYMBOL(sys_lseek); |
94 | EXPORT_SYMBOL(sys_read); | ||
95 | EXPORT_SYMBOL(sys_write); | 76 | EXPORT_SYMBOL(sys_write); |
96 | 77 | ||
97 | #include <asm/semaphore.h> | 78 | #include <asm/semaphore.h> |
diff --git a/arch/parisc/kernel/pdc_chassis.c b/arch/parisc/kernel/pdc_chassis.c index 0cea6958f427..a45e2e2ffd9f 100644 --- a/arch/parisc/kernel/pdc_chassis.c +++ b/arch/parisc/kernel/pdc_chassis.c | |||
@@ -5,9 +5,8 @@ | |||
5 | * Copyright (C) 2002-2004 Thibaut VARENE <varenet@parisc-linux.org> | 5 | * Copyright (C) 2002-2004 Thibaut VARENE <varenet@parisc-linux.org> |
6 | * | 6 | * |
7 | * This program is free software; you can redistribute it and/or modify | 7 | * This program is free software; you can redistribute it and/or modify |
8 | * it under the terms of the GNU General Public License as published by | 8 | * it under the terms of the GNU General Public License, version 2, as |
9 | * the Free Software Foundation; either version 2 of the License, or | 9 | * published by the Free Software Foundation. |
10 | * (at your option) any later version. | ||
11 | * | 10 | * |
12 | * This program is distributed in the hope that it will be useful, | 11 | * This program is distributed in the hope that it will be useful, |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
diff --git a/arch/parisc/kernel/perf.c b/arch/parisc/kernel/perf.c index 53f861c82f93..ac8ee205c351 100644 --- a/arch/parisc/kernel/perf.c +++ b/arch/parisc/kernel/perf.c | |||
@@ -805,7 +805,7 @@ static int perf_write_image(uint64_t *memaddr) | |||
805 | return -1; | 805 | return -1; |
806 | } | 806 | } |
807 | 807 | ||
808 | runway = ioremap(cpu_device->hpa.start, 4096); | 808 | runway = ioremap_nocache(cpu_device->hpa.start, 4096); |
809 | 809 | ||
810 | /* Merge intrigue bits into Runway STATUS 0 */ | 810 | /* Merge intrigue bits into Runway STATUS 0 */ |
811 | tmp64 = __raw_readq(runway + RUNWAY_STATUS) & 0xffecfffffffffffful; | 811 | tmp64 = __raw_readq(runway + RUNWAY_STATUS) & 0xffecfffffffffffful; |
diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S index 89b6c56ea0a8..bbeeb614cfab 100644 --- a/arch/parisc/kernel/syscall_table.S +++ b/arch/parisc/kernel/syscall_table.S | |||
@@ -287,7 +287,7 @@ | |||
287 | ENTRY_SAME(chown) /* 180 */ | 287 | ENTRY_SAME(chown) /* 180 */ |
288 | /* setsockopt() used by iptables: SO_SET_REPLACE/SO_SET_ADD_COUNTERS */ | 288 | /* setsockopt() used by iptables: SO_SET_REPLACE/SO_SET_ADD_COUNTERS */ |
289 | ENTRY_COMP(setsockopt) | 289 | ENTRY_COMP(setsockopt) |
290 | ENTRY_SAME(getsockopt) | 290 | ENTRY_COMP(getsockopt) |
291 | ENTRY_COMP(sendmsg) | 291 | ENTRY_COMP(sendmsg) |
292 | ENTRY_COMP(recvmsg) | 292 | ENTRY_COMP(recvmsg) |
293 | ENTRY_SAME(semop) /* 185 */ | 293 | ENTRY_SAME(semop) /* 185 */ |