mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-03 15:36:40 +07:00
s390/kernel: use test_fp_ctl() to verify the floating-point control word
Use the test_fp_ctl() to test the floating-point control word for validity and use restore_fp_ctl() to set it in load_sigregs. Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
2e54dc3c7d
commit
4084eb7767
@ -45,7 +45,6 @@ static inline int restore_fp_ctl(u32 *fpc)
|
||||
" lfpc %1\n"
|
||||
"0: la %0,0\n"
|
||||
"1:\n"
|
||||
EX_TABLE(0b,1b)
|
||||
: "=d" (rc) : "Q" (*fpc), "0" (-EINVAL));
|
||||
return rc;
|
||||
}
|
||||
|
@ -172,7 +172,7 @@ static void load_sigregs(void)
|
||||
int i;
|
||||
|
||||
restore_access_regs(current->thread.acrs);
|
||||
/* restore_fp_ctl is done in restore_sigregs */
|
||||
restore_fp_ctl(¤t->thread.fp_regs.fpc);
|
||||
if (current->thread.vxrs) {
|
||||
for (i = 0; i < __NUM_FPRS; i++)
|
||||
*(freg_t *)(current->thread.vxrs + i) =
|
||||
@ -217,8 +217,8 @@ static int restore_sigregs32(struct pt_regs *regs,_sigregs32 __user *sregs)
|
||||
if (!is_ri_task(current) && (user_sregs.regs.psw.mask & PSW32_MASK_RI))
|
||||
return -EINVAL;
|
||||
|
||||
/* Loading the floating-point-control word can fail. Do that first. */
|
||||
if (restore_fp_ctl(&user_sregs.fpregs.fpc))
|
||||
/* Test the floating-point-control word. */
|
||||
if (test_fp_ctl(user_sregs.fpregs.fpc))
|
||||
return -EINVAL;
|
||||
|
||||
/* Use regs->psw.mask instead of PSW_USER_BITS to preserve PER bit. */
|
||||
|
@ -121,7 +121,7 @@ static void store_sigregs(void)
|
||||
static void load_sigregs(void)
|
||||
{
|
||||
restore_access_regs(current->thread.acrs);
|
||||
/* restore_fp_ctl is done in restore_sigregs */
|
||||
restore_fp_ctl(¤t->thread.fp_regs.fpc);
|
||||
if (current->thread.vxrs) {
|
||||
int i;
|
||||
|
||||
@ -166,8 +166,8 @@ static int restore_sigregs(struct pt_regs *regs, _sigregs __user *sregs)
|
||||
if (!is_ri_task(current) && (user_sregs.regs.psw.mask & PSW_MASK_RI))
|
||||
return -EINVAL;
|
||||
|
||||
/* Loading the floating-point-control word can fail. Do that first. */
|
||||
if (restore_fp_ctl(&user_sregs.fpregs.fpc))
|
||||
/* Test the floating-point-control word. */
|
||||
if (test_fp_ctl(user_sregs.fpregs.fpc))
|
||||
return -EINVAL;
|
||||
|
||||
/* Use regs->psw.mask instead of PSW_USER_BITS to preserve PER bit. */
|
||||
|
Loading…
Reference in New Issue
Block a user