Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc: Remove fpscr use from [kvm_]cvt_{fd,df}

Neither lfs nor stfs touch the fpscr, so remove the restore/save of it
around them.

Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>

authored by

Andreas Schwab and committed by
Benjamin Herrenschmidt
05d77ac9 872e439a

+26 -48
+2 -2
arch/powerpc/include/asm/kvm_fpu.h
··· 82 82 FPD_THREE_IN(fnmsub) 83 83 FPD_THREE_IN(fnmadd) 84 84 85 - extern void kvm_cvt_fd(u32 *from, u64 *to, u64 *fpscr); 86 - extern void kvm_cvt_df(u64 *from, u32 *to, u64 *fpscr); 85 + extern void kvm_cvt_fd(u32 *from, u64 *to); 86 + extern void kvm_cvt_df(u64 *from, u32 *to); 87 87 88 88 #endif
+2 -2
arch/powerpc/include/asm/system.h
··· 154 154 extern void giveup_spe(struct task_struct *); 155 155 extern void load_up_spe(struct task_struct *); 156 156 extern int fix_alignment(struct pt_regs *); 157 - extern void cvt_fd(float *from, double *to, struct thread_struct *thread); 158 - extern void cvt_df(double *from, float *to, struct thread_struct *thread); 157 + extern void cvt_fd(float *from, double *to); 158 + extern void cvt_df(double *from, float *to); 159 159 160 160 #ifndef CONFIG_SMP 161 161 extern void discard_lazy_cpu_state(void);
+2 -2
arch/powerpc/kernel/align.c
··· 889 889 #ifdef CONFIG_PPC_FPU 890 890 preempt_disable(); 891 891 enable_kernel_fp(); 892 - cvt_df(&data.dd, (float *)&data.v[4], &current->thread); 892 + cvt_df(&data.dd, (float *)&data.v[4]); 893 893 preempt_enable(); 894 894 #else 895 895 return 0; ··· 933 933 #ifdef CONFIG_PPC_FPU 934 934 preempt_disable(); 935 935 enable_kernel_fp(); 936 - cvt_fd((float *)&data.v[4], &data.dd, &current->thread); 936 + cvt_fd((float *)&data.v[4], &data.dd); 937 937 preempt_enable(); 938 938 #else 939 939 return 0;
-10
arch/powerpc/kernel/fpu.S
··· 163 163 /* 164 164 * These are used in the alignment trap handler when emulating 165 165 * single-precision loads and stores. 166 - * We restore and save the fpscr so the task gets the same result 167 - * and exceptions as if the cpu had performed the load or store. 168 166 */ 169 167 170 168 _GLOBAL(cvt_fd) 171 - lfd 0,THREAD_FPSCR(r5) /* load up fpscr value */ 172 - MTFSF_L(0) 173 169 lfs 0,0(r3) 174 170 stfd 0,0(r4) 175 - mffs 0 176 - stfd 0,THREAD_FPSCR(r5) /* save new fpscr value */ 177 171 blr 178 172 179 173 _GLOBAL(cvt_df) 180 - lfd 0,THREAD_FPSCR(r5) /* load up fpscr value */ 181 - MTFSF_L(0) 182 174 lfd 0,0(r3) 183 175 stfs 0,0(r4) 184 - mffs 0 185 - stfd 0,THREAD_FPSCR(r5) /* save new fpscr value */ 186 176 blr
+20 -24
arch/powerpc/kvm/book3s_paired_singles.c
··· 159 159 160 160 static inline void kvmppc_sync_qpr(struct kvm_vcpu *vcpu, int rt) 161 161 { 162 - kvm_cvt_df(&vcpu->arch.fpr[rt], &vcpu->arch.qpr[rt], &vcpu->arch.fpscr); 162 + kvm_cvt_df(&vcpu->arch.fpr[rt], &vcpu->arch.qpr[rt]); 163 163 } 164 164 165 165 static void kvmppc_inject_pf(struct kvm_vcpu *vcpu, ulong eaddr, bool is_store) ··· 204 204 /* put in registers */ 205 205 switch (ls_type) { 206 206 case FPU_LS_SINGLE: 207 - kvm_cvt_fd((u32*)tmp, &vcpu->arch.fpr[rs], &vcpu->arch.fpscr); 207 + kvm_cvt_fd((u32*)tmp, &vcpu->arch.fpr[rs]); 208 208 vcpu->arch.qpr[rs] = *((u32*)tmp); 209 209 break; 210 210 case FPU_LS_DOUBLE: ··· 230 230 231 231 switch (ls_type) { 232 232 case FPU_LS_SINGLE: 233 - kvm_cvt_df(&vcpu->arch.fpr[rs], (u32*)tmp, &vcpu->arch.fpscr); 233 + kvm_cvt_df(&vcpu->arch.fpr[rs], (u32*)tmp); 234 234 val = *((u32*)tmp); 235 235 len = sizeof(u32); 236 236 break; ··· 296 296 emulated = EMULATE_DONE; 297 297 298 298 /* put in registers */ 299 - kvm_cvt_fd(&tmp[0], &vcpu->arch.fpr[rs], &vcpu->arch.fpscr); 299 + kvm_cvt_fd(&tmp[0], &vcpu->arch.fpr[rs]); 300 300 vcpu->arch.qpr[rs] = tmp[1]; 301 301 302 302 dprintk(KERN_INFO "KVM: PSQ_LD [0x%x, 0x%x] at 0x%lx (%d)\n", tmp[0], ··· 314 314 u32 tmp[2]; 315 315 int len = w ? sizeof(u32) : sizeof(u64); 316 316 317 - kvm_cvt_df(&vcpu->arch.fpr[rs], &tmp[0], &vcpu->arch.fpscr); 317 + kvm_cvt_df(&vcpu->arch.fpr[rs], &tmp[0]); 318 318 tmp[1] = vcpu->arch.qpr[rs]; 319 319 320 320 r = kvmppc_st(vcpu, &addr, len, tmp, true); ··· 516 516 WARN_ON(rc); 517 517 518 518 /* PS0 */ 519 - kvm_cvt_df(&fpr[reg_in1], &ps0_in1, &vcpu->arch.fpscr); 520 - kvm_cvt_df(&fpr[reg_in2], &ps0_in2, &vcpu->arch.fpscr); 521 - kvm_cvt_df(&fpr[reg_in3], &ps0_in3, &vcpu->arch.fpscr); 519 + kvm_cvt_df(&fpr[reg_in1], &ps0_in1); 520 + kvm_cvt_df(&fpr[reg_in2], &ps0_in2); 521 + kvm_cvt_df(&fpr[reg_in3], &ps0_in3); 522 522 523 523 if (scalar & SCALAR_LOW) 524 524 ps0_in2 = qpr[reg_in2]; ··· 529 529 ps0_in1, ps0_in2, ps0_in3, ps0_out); 530 530 531 531 if (!(scalar & SCALAR_NO_PS0)) 532 - kvm_cvt_fd(&ps0_out, &fpr[reg_out], &vcpu->arch.fpscr); 532 + kvm_cvt_fd(&ps0_out, &fpr[reg_out]); 533 533 534 534 /* PS1 */ 535 535 ps1_in1 = qpr[reg_in1]; ··· 566 566 WARN_ON(rc); 567 567 568 568 /* PS0 */ 569 - kvm_cvt_df(&fpr[reg_in1], &ps0_in1, &vcpu->arch.fpscr); 569 + kvm_cvt_df(&fpr[reg_in1], &ps0_in1); 570 570 571 571 if (scalar & SCALAR_LOW) 572 572 ps0_in2 = qpr[reg_in2]; 573 573 else 574 - kvm_cvt_df(&fpr[reg_in2], &ps0_in2, &vcpu->arch.fpscr); 574 + kvm_cvt_df(&fpr[reg_in2], &ps0_in2); 575 575 576 576 func(&vcpu->arch.fpscr, &ps0_out, &ps0_in1, &ps0_in2); 577 577 ··· 579 579 dprintk(KERN_INFO "PS2 ps0 -> f(0x%x, 0x%x) = 0x%x\n", 580 580 ps0_in1, ps0_in2, ps0_out); 581 581 582 - kvm_cvt_fd(&ps0_out, &fpr[reg_out], &vcpu->arch.fpscr); 582 + kvm_cvt_fd(&ps0_out, &fpr[reg_out]); 583 583 } 584 584 585 585 /* PS1 */ ··· 615 615 WARN_ON(rc); 616 616 617 617 /* PS0 */ 618 - kvm_cvt_df(&fpr[reg_in], &ps0_in, &vcpu->arch.fpscr); 618 + kvm_cvt_df(&fpr[reg_in], &ps0_in); 619 619 func(&vcpu->arch.fpscr, &ps0_out, &ps0_in); 620 620 621 621 dprintk(KERN_INFO "PS1 ps0 -> f(0x%x) = 0x%x\n", 622 622 ps0_in, ps0_out); 623 623 624 - kvm_cvt_fd(&ps0_out, &fpr[reg_out], &vcpu->arch.fpscr); 624 + kvm_cvt_fd(&ps0_out, &fpr[reg_out]); 625 625 626 626 /* PS1 */ 627 627 ps1_in = qpr[reg_in]; ··· 671 671 #ifdef DEBUG 672 672 for (i = 0; i < ARRAY_SIZE(vcpu->arch.fpr); i++) { 673 673 u32 f; 674 - kvm_cvt_df(&vcpu->arch.fpr[i], &f, &vcpu->arch.fpscr); 674 + kvm_cvt_df(&vcpu->arch.fpr[i], &f); 675 675 dprintk(KERN_INFO "FPR[%d] = 0x%x / 0x%llx QPR[%d] = 0x%x\n", 676 676 i, f, vcpu->arch.fpr[i], i, vcpu->arch.qpr[i]); 677 677 } ··· 796 796 vcpu->arch.fpr[ax_rd] = vcpu->arch.fpr[ax_ra]; 797 797 /* vcpu->arch.qpr[ax_rd] = vcpu->arch.fpr[ax_rb]; */ 798 798 kvm_cvt_df(&vcpu->arch.fpr[ax_rb], 799 - &vcpu->arch.qpr[ax_rd], 800 - &vcpu->arch.fpscr); 799 + &vcpu->arch.qpr[ax_rd]); 801 800 break; 802 801 case OP_4X_PS_MERGE01: 803 802 WARN_ON(rcomp); ··· 807 808 WARN_ON(rcomp); 808 809 /* vcpu->arch.fpr[ax_rd] = vcpu->arch.qpr[ax_ra]; */ 809 810 kvm_cvt_fd(&vcpu->arch.qpr[ax_ra], 810 - &vcpu->arch.fpr[ax_rd], 811 - &vcpu->arch.fpscr); 811 + &vcpu->arch.fpr[ax_rd]); 812 812 /* vcpu->arch.qpr[ax_rd] = vcpu->arch.fpr[ax_rb]; */ 813 813 kvm_cvt_df(&vcpu->arch.fpr[ax_rb], 814 - &vcpu->arch.qpr[ax_rd], 815 - &vcpu->arch.fpscr); 814 + &vcpu->arch.qpr[ax_rd]); 816 815 break; 817 816 case OP_4X_PS_MERGE11: 818 817 WARN_ON(rcomp); 819 818 /* vcpu->arch.fpr[ax_rd] = vcpu->arch.qpr[ax_ra]; */ 820 819 kvm_cvt_fd(&vcpu->arch.qpr[ax_ra], 821 - &vcpu->arch.fpr[ax_rd], 822 - &vcpu->arch.fpscr); 820 + &vcpu->arch.fpr[ax_rd]); 823 821 vcpu->arch.qpr[ax_rd] = vcpu->arch.qpr[ax_rb]; 824 822 break; 825 823 } ··· 1251 1255 #ifdef DEBUG 1252 1256 for (i = 0; i < ARRAY_SIZE(vcpu->arch.fpr); i++) { 1253 1257 u32 f; 1254 - kvm_cvt_df(&vcpu->arch.fpr[i], &f, &vcpu->arch.fpscr); 1258 + kvm_cvt_df(&vcpu->arch.fpr[i], &f); 1255 1259 dprintk(KERN_INFO "FPR[%d] = 0x%x\n", i, f); 1256 1260 } 1257 1261 #endif
-8
arch/powerpc/kvm/fpu.S
··· 273 273 FPD_THREE_IN(fnmadd) 274 274 275 275 _GLOBAL(kvm_cvt_fd) 276 - lfd 0,0(r5) /* load up fpscr value */ 277 - MTFSF_L(0) 278 276 lfs 0,0(r3) 279 277 stfd 0,0(r4) 280 - mffs 0 281 - stfd 0,0(r5) /* save new fpscr value */ 282 278 blr 283 279 284 280 _GLOBAL(kvm_cvt_df) 285 - lfd 0,0(r5) /* load up fpscr value */ 286 - MTFSF_L(0) 287 281 lfd 0,0(r3) 288 282 stfs 0,0(r4) 289 - mffs 0 290 - stfd 0,0(r5) /* save new fpscr value */ 291 283 blr