1 // SPDX-License-Identifier: GPL-2.0-or-later
3 #include <linux/regset.h>
5 #include <asm/switch_to.h>
7 #include "ptrace-decl.h"
10 * For get_evrregs/set_evrregs functions 'data' has the following layout:
19 int evr_active(struct task_struct
*target
, const struct user_regset
*regset
)
21 flush_spe_to_thread(target
);
22 return target
->thread
.used_spe
? regset
->n
: 0;
25 int evr_get(struct task_struct
*target
, const struct user_regset
*regset
,
28 flush_spe_to_thread(target
);
30 membuf_write(&to
, &target
->thread
.evr
, sizeof(target
->thread
.evr
));
32 BUILD_BUG_ON(offsetof(struct thread_struct
, acc
) + sizeof(u64
) !=
33 offsetof(struct thread_struct
, spefscr
));
35 return membuf_write(&to
, &target
->thread
.acc
,
36 sizeof(u64
) + sizeof(u32
));
39 int evr_set(struct task_struct
*target
, const struct user_regset
*regset
,
40 unsigned int pos
, unsigned int count
,
41 const void *kbuf
, const void __user
*ubuf
)
45 flush_spe_to_thread(target
);
47 ret
= user_regset_copyin(&pos
, &count
, &kbuf
, &ubuf
,
49 0, sizeof(target
->thread
.evr
));
51 BUILD_BUG_ON(offsetof(struct thread_struct
, acc
) + sizeof(u64
) !=
52 offsetof(struct thread_struct
, spefscr
));
55 ret
= user_regset_copyin(&pos
, &count
, &kbuf
, &ubuf
,
57 sizeof(target
->thread
.evr
), -1);