@@ -182,6 +182,41 @@ save_andesdsp_state(struct pt_regs *regs,
182
182
#define restore_andesdsp_state (task , regs ) (0)
183
183
#endif /* CONFIG_ANDES_DSP */
184
184
185
+ #ifdef CONFIG_AMM
186
+ static long
187
+ restore_amm_state (struct pt_regs * regs ,
188
+ struct __riscv_amm_ext_state * sc_amm_regs )
189
+ {
190
+ long err ;
191
+
192
+ err = __copy_from_user (& current -> thread .amm_state .uzobctl ,
193
+ & sc_amm_regs -> uzobctl ,
194
+ sizeof (unsigned long ));
195
+ if (unlikely (err ))
196
+ return err ;
197
+ amm_state_restore (current );
198
+ return 0 ;
199
+ }
200
+
201
+ static long
202
+ save_amm_state (struct pt_regs * regs ,
203
+ struct __riscv_amm_ext_state * sc_amm_regs )
204
+ {
205
+ long err ;
206
+
207
+ amm_state_save (current );
208
+ err = __copy_to_user (& sc_amm_regs -> uzobctl ,
209
+ & current -> thread .amm_state .uzobctl ,
210
+ sizeof (unsigned long ));
211
+ if (unlikely (err ))
212
+ return err ;
213
+ return 0 ;
214
+ }
215
+ #else
216
+ #define save_amm_state (task , regs ) (0)
217
+ #define restore_amm_state (task , regs ) (0)
218
+ #endif /* CONFIG_AMM */
219
+
185
220
static long restore_sigcontext (struct pt_regs * regs ,
186
221
struct sigcontext __user * sc )
187
222
{
@@ -242,6 +277,12 @@ static long restore_sigcontext(struct pt_regs *regs,
242
277
return err ;
243
278
}
244
279
280
+ if (has_amm ()) {
281
+ err = restore_amm_state (regs , & sc -> sc_amm_regs );
282
+ if (unlikely (err ))
283
+ return err ;
284
+ }
285
+
245
286
return err ;
246
287
}
247
288
@@ -325,6 +366,9 @@ static long setup_sigcontext(struct rt_sigframe __user *frame,
325
366
/* Save the ANDES_DSP state. */
326
367
if (has_andesdsp ())
327
368
err |= save_andesdsp_state (regs , & sc -> sc_andesdsp_regs );
369
+ /* Save the AMM state. */
370
+ if (has_amm ())
371
+ err |= save_amm_state (regs , & sc -> sc_amm_regs );
328
372
/* Write zero to fp-reserved space and check it on restore_sigcontext */
329
373
err |= __put_user (0 , & sc -> sc_extdesc .reserved );
330
374
/* And put END __riscv_ctx_hdr at the end. */
0 commit comments