Page MenuHomeFreeBSD

D54532.diff
No OneTemporary

D54532.diff

diff --git a/sys/arm64/arm64/vfp.c b/sys/arm64/arm64/vfp.c
--- a/sys/arm64/arm64/vfp.c
+++ b/sys/arm64/arm64/vfp.c
@@ -939,7 +939,7 @@
return (false);
sve_flags = 0;
- if ((pcb->pcb_fpflags & PCB_FP_SVEVALID) == 0) {
+ if (pcb->pcb_svesaved == NULL) {
/* If SVE hasn't been used yet provide the VFP registers */
buf_size = sizeof(struct fpreg);
sve_flags |= SVEREG_FLAG_FP;
@@ -947,8 +947,6 @@
/* We have SVE registers */
buf_size = sve_buf_size(td);
sve_flags |= SVEREG_FLAG_SVE;
- KASSERT(pcb->pcb_svesaved != NULL, ("%s: no saved sve",
- __func__));
}
if (buf != NULL) {
@@ -958,6 +956,10 @@
if (td == curthread && (pcb->pcb_fpflags & PCB_FP_STARTED) != 0)
vfp_save_state(td, pcb);
+ if ((sve_flags & SVEREG_FLAG_REGS_MASK) == SVEREG_FLAG_SVE &&
+ (pcb->pcb_fpflags & PCB_FP_SVEVALID) == 0)
+ vfp_to_sve_sync(td);
+
header = buf;
memset(header, 0, sizeof(*header));

File Metadata

Mime Type
text/plain
Expires
Mon, Jan 12, 10:26 PM (10 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27512069
Default Alt Text
D54532.diff (1 KB)

Event Timeline