Only mess with VFP state on the CPU for curthread for get/set_vfpcontext.
Future changes will use these functions to fetch and store VFP state for threads other than curthread. Reviewed by: andrew, stevek, Michal Meloun <meloun-miracle-cz> MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D12292
This commit is contained in:
parent
19e1bd0104
commit
21994598e4
@ -408,17 +408,18 @@ exec_setregs(struct thread *td, struct image_params *imgp, u_long stack)
|
||||
static void
|
||||
get_vfpcontext(struct thread *td, mcontext_vfp_t *vfp)
|
||||
{
|
||||
struct pcb *curpcb;
|
||||
struct pcb *pcb;
|
||||
|
||||
curpcb = curthread->td_pcb;
|
||||
critical_enter();
|
||||
|
||||
vfp_store(&curpcb->pcb_vfpstate, false);
|
||||
memcpy(vfp->mcv_reg, curpcb->pcb_vfpstate.reg,
|
||||
pcb = td->td_pcb;
|
||||
if (td == curthread) {
|
||||
critical_enter();
|
||||
vfp_store(&pcb->pcb_vfpstate, false);
|
||||
critical_exit();
|
||||
} else
|
||||
MPASS(TD_IS_SUSPENDED(td));
|
||||
memcpy(vfp->mcv_reg, pcb->pcb_vfpstate.reg,
|
||||
sizeof(vfp->mcv_reg));
|
||||
vfp->mcv_fpscr = curpcb->pcb_vfpstate.fpscr;
|
||||
|
||||
critical_exit();
|
||||
vfp->mcv_fpscr = pcb->pcb_vfpstate.fpscr;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -427,17 +428,18 @@ get_vfpcontext(struct thread *td, mcontext_vfp_t *vfp)
|
||||
static void
|
||||
set_vfpcontext(struct thread *td, mcontext_vfp_t *vfp)
|
||||
{
|
||||
struct pcb *curpcb;
|
||||
struct pcb *pcb;
|
||||
|
||||
curpcb = curthread->td_pcb;
|
||||
critical_enter();
|
||||
|
||||
vfp_discard(td);
|
||||
memcpy(curpcb->pcb_vfpstate.reg, vfp->mcv_reg,
|
||||
sizeof(curpcb->pcb_vfpstate.reg));
|
||||
curpcb->pcb_vfpstate.fpscr = vfp->mcv_fpscr;
|
||||
|
||||
critical_exit();
|
||||
pcb = td->td_pcb;
|
||||
if (td == curthread) {
|
||||
critical_enter();
|
||||
vfp_discard(td);
|
||||
critical_exit();
|
||||
} else
|
||||
MPASS(TD_IS_SUSPENDED(td));
|
||||
memcpy(pcb->pcb_vfpstate.reg, vfp->mcv_reg,
|
||||
sizeof(pcb->pcb_vfpstate.reg));
|
||||
pcb->pcb_vfpstate.fpscr = vfp->mcv_fpscr;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user