diff options
| -rw-r--r-- | arch/parisc/kernel/pacache.S | 4 | ||||
| -rw-r--r-- | arch/parisc/kernel/signal.c | 11 |
2 files changed, 9 insertions, 6 deletions
diff --git a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S index e217ae369fbb..08cde5addfca 100644 --- a/arch/parisc/kernel/pacache.S +++ b/arch/parisc/kernel/pacache.S | |||
| @@ -227,7 +227,7 @@ flush_instruction_cache_local: | |||
| 227 | 227 | ||
| 228 | fimanyloop: /* Loop if LOOP >= 2 */ | 228 | fimanyloop: /* Loop if LOOP >= 2 */ |
| 229 | ADDIB> -1, %r31, fimanyloop /* Adjusted inner loop decr */ | 229 | ADDIB> -1, %r31, fimanyloop /* Adjusted inner loop decr */ |
| 230 | fice 0(%sr1, %arg0) | 230 | fice %r0(%sr1, %arg0) |
| 231 | fice,m %arg1(%sr1, %arg0) /* Last fice and addr adjust */ | 231 | fice,m %arg1(%sr1, %arg0) /* Last fice and addr adjust */ |
| 232 | movb,tr %arg3, %r31, fimanyloop /* Re-init inner loop count */ | 232 | movb,tr %arg3, %r31, fimanyloop /* Re-init inner loop count */ |
| 233 | ADDIB<=,n -1, %arg2, fisync /* Outer loop decr */ | 233 | ADDIB<=,n -1, %arg2, fisync /* Outer loop decr */ |
| @@ -269,7 +269,7 @@ flush_data_cache_local: | |||
| 269 | 269 | ||
| 270 | fdmanyloop: /* Loop if LOOP >= 2 */ | 270 | fdmanyloop: /* Loop if LOOP >= 2 */ |
| 271 | ADDIB> -1, %r31, fdmanyloop /* Adjusted inner loop decr */ | 271 | ADDIB> -1, %r31, fdmanyloop /* Adjusted inner loop decr */ |
| 272 | fdce 0(%sr1, %arg0) | 272 | fdce %r0(%sr1, %arg0) |
| 273 | fdce,m %arg1(%sr1, %arg0) /* Last fdce and addr adjust */ | 273 | fdce,m %arg1(%sr1, %arg0) /* Last fdce and addr adjust */ |
| 274 | movb,tr %arg3, %r31, fdmanyloop /* Re-init inner loop count */ | 274 | movb,tr %arg3, %r31, fdmanyloop /* Re-init inner loop count */ |
| 275 | ADDIB<=,n -1, %arg2, fdsync /* Outer loop decr */ | 275 | ADDIB<=,n -1, %arg2, fdsync /* Outer loop decr */ |
diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c index befdfe700616..82c24e62ab63 100644 --- a/arch/parisc/kernel/signal.c +++ b/arch/parisc/kernel/signal.c | |||
| @@ -625,11 +625,14 @@ do_signal(sigset_t *oldset, struct pt_regs *regs, int in_syscall) | |||
| 625 | put_user(0xe0008200, &usp[3]); | 625 | put_user(0xe0008200, &usp[3]); |
| 626 | put_user(0x34140000, &usp[4]); | 626 | put_user(0x34140000, &usp[4]); |
| 627 | 627 | ||
| 628 | /* Stack is 64-byte aligned, and we only | 628 | /* Stack is 64-byte aligned, and we only need |
| 629 | * need to flush 1 cache line */ | 629 | * to flush 1 cache line. |
| 630 | asm("fdc 0(%%sr3, %0)\n" | 630 | * Flushing one cacheline is cheap. |
| 631 | * "sync" on bigger (> 4 way) boxes is not. | ||
| 632 | */ | ||
| 633 | asm("fdc %%r0(%%sr3, %0)\n" | ||
| 631 | "sync\n" | 634 | "sync\n" |
| 632 | "fic 0(%%sr3, %0)\n" | 635 | "fic %%r0(%%sr3, %0)\n" |
| 633 | "sync\n" | 636 | "sync\n" |
| 634 | : : "r"(regs->gr[30])); | 637 | : : "r"(regs->gr[30])); |
| 635 | 638 | ||
