~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/powerpc/kernel/ptrace.c

Version: ~ [ linux-6.0-rc1 ] ~ [ linux-5.19.1 ] ~ [ linux-5.18.17 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.60 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.136 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.210 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.255 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.290 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.325 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.302 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  *  PowerPC version
  3  *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
  4  *
  5  *  Derived from "arch/m68k/kernel/ptrace.c"
  6  *  Copyright (C) 1994 by Hamish Macdonald
  7  *  Taken from linux/kernel/ptrace.c and modified for M680x0.
  8  *  linux/kernel/ptrace.c is by Ross Biro 1/23/92, edited by Linus Torvalds
  9  *
 10  * Modified by Cort Dougan (cort@hq.fsmlabs.com)
 11  * and Paul Mackerras (paulus@samba.org).
 12  *
 13  * This file is subject to the terms and conditions of the GNU General
 14  * Public License.  See the file README.legal in the main directory of
 15  * this archive for more details.
 16  */
 17 
 18 #include <linux/kernel.h>
 19 #include <linux/sched.h>
 20 #include <linux/mm.h>
 21 #include <linux/smp.h>
 22 #include <linux/errno.h>
 23 #include <linux/ptrace.h>
 24 #include <linux/regset.h>
 25 #include <linux/tracehook.h>
 26 #include <linux/elf.h>
 27 #include <linux/user.h>
 28 #include <linux/security.h>
 29 #include <linux/signal.h>
 30 #include <linux/seccomp.h>
 31 #include <linux/audit.h>
 32 #include <trace/syscall.h>
 33 #include <linux/hw_breakpoint.h>
 34 #include <linux/perf_event.h>
 35 #include <linux/context_tracking.h>
 36 
 37 #include <asm/uaccess.h>
 38 #include <asm/page.h>
 39 #include <asm/pgtable.h>
 40 #include <asm/switch_to.h>
 41 #include <asm/tm.h>
 42 
 43 #define CREATE_TRACE_POINTS
 44 #include <trace/events/syscalls.h>
 45 
 46 /*
 47  * The parameter save area on the stack is used to store arguments being passed
 48  * to callee function and is located at fixed offset from stack pointer.
 49  */
 50 #ifdef CONFIG_PPC32
 51 #define PARAMETER_SAVE_AREA_OFFSET      24  /* bytes */
 52 #else /* CONFIG_PPC32 */
 53 #define PARAMETER_SAVE_AREA_OFFSET      48  /* bytes */
 54 #endif
 55 
 56 struct pt_regs_offset {
 57         const char *name;
 58         int offset;
 59 };
 60 
 61 #define STR(s)  #s                      /* convert to string */
 62 #define REG_OFFSET_NAME(r) {.name = #r, .offset = offsetof(struct pt_regs, r)}
 63 #define GPR_OFFSET_NAME(num)    \
 64         {.name = STR(r##num), .offset = offsetof(struct pt_regs, gpr[num])}, \
 65         {.name = STR(gpr##num), .offset = offsetof(struct pt_regs, gpr[num])}
 66 #define REG_OFFSET_END {.name = NULL, .offset = 0}
 67 
 68 #define TVSO(f) (offsetof(struct thread_vr_state, f))
 69 #define TFSO(f) (offsetof(struct thread_fp_state, f))
 70 #define TSO(f)  (offsetof(struct thread_struct, f))
 71 
 72 static const struct pt_regs_offset regoffset_table[] = {
 73         GPR_OFFSET_NAME(0),
 74         GPR_OFFSET_NAME(1),
 75         GPR_OFFSET_NAME(2),
 76         GPR_OFFSET_NAME(3),
 77         GPR_OFFSET_NAME(4),
 78         GPR_OFFSET_NAME(5),
 79         GPR_OFFSET_NAME(6),
 80         GPR_OFFSET_NAME(7),
 81         GPR_OFFSET_NAME(8),
 82         GPR_OFFSET_NAME(9),
 83         GPR_OFFSET_NAME(10),
 84         GPR_OFFSET_NAME(11),
 85         GPR_OFFSET_NAME(12),
 86         GPR_OFFSET_NAME(13),
 87         GPR_OFFSET_NAME(14),
 88         GPR_OFFSET_NAME(15),
 89         GPR_OFFSET_NAME(16),
 90         GPR_OFFSET_NAME(17),
 91         GPR_OFFSET_NAME(18),
 92         GPR_OFFSET_NAME(19),
 93         GPR_OFFSET_NAME(20),
 94         GPR_OFFSET_NAME(21),
 95         GPR_OFFSET_NAME(22),
 96         GPR_OFFSET_NAME(23),
 97         GPR_OFFSET_NAME(24),
 98         GPR_OFFSET_NAME(25),
 99         GPR_OFFSET_NAME(26),
100         GPR_OFFSET_NAME(27),
101         GPR_OFFSET_NAME(28),
102         GPR_OFFSET_NAME(29),
103         GPR_OFFSET_NAME(30),
104         GPR_OFFSET_NAME(31),
105         REG_OFFSET_NAME(nip),
106         REG_OFFSET_NAME(msr),
107         REG_OFFSET_NAME(ctr),
108         REG_OFFSET_NAME(link),
109         REG_OFFSET_NAME(xer),
110         REG_OFFSET_NAME(ccr),
111 #ifdef CONFIG_PPC64
112         REG_OFFSET_NAME(softe),
113 #else
114         REG_OFFSET_NAME(mq),
115 #endif
116         REG_OFFSET_NAME(trap),
117         REG_OFFSET_NAME(dar),
118         REG_OFFSET_NAME(dsisr),
119         REG_OFFSET_END,
120 };
121 
122 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
123 static void flush_tmregs_to_thread(struct task_struct *tsk)
124 {
125         /*
126          * If task is not current, it will have been flushed already to
127          * it's thread_struct during __switch_to().
128          *
129          * A reclaim flushes ALL the state.
130          */
131 
132         if (tsk == current && MSR_TM_SUSPENDED(mfmsr()))
133                 tm_reclaim_current(TM_CAUSE_SIGNAL);
134 
135 }
136 #else
137 static inline void flush_tmregs_to_thread(struct task_struct *tsk) { }
138 #endif
139 
140 /**
141  * regs_query_register_offset() - query register offset from its name
142  * @name:       the name of a register
143  *
144  * regs_query_register_offset() returns the offset of a register in struct
145  * pt_regs from its name. If the name is invalid, this returns -EINVAL;
146  */
147 int regs_query_register_offset(const char *name)
148 {
149         const struct pt_regs_offset *roff;
150         for (roff = regoffset_table; roff->name != NULL; roff++)
151                 if (!strcmp(roff->name, name))
152                         return roff->offset;
153         return -EINVAL;
154 }
155 
156 /**
157  * regs_query_register_name() - query register name from its offset
158  * @offset:     the offset of a register in struct pt_regs.
159  *
160  * regs_query_register_name() returns the name of a register from its
161  * offset in struct pt_regs. If the @offset is invalid, this returns NULL;
162  */
163 const char *regs_query_register_name(unsigned int offset)
164 {
165         const struct pt_regs_offset *roff;
166         for (roff = regoffset_table; roff->name != NULL; roff++)
167                 if (roff->offset == offset)
168                         return roff->name;
169         return NULL;
170 }
171 
172 /*
173  * does not yet catch signals sent when the child dies.
174  * in exit.c or in signal.c.
175  */
176 
177 /*
178  * Set of msr bits that gdb can change on behalf of a process.
179  */
180 #ifdef CONFIG_PPC_ADV_DEBUG_REGS
181 #define MSR_DEBUGCHANGE 0
182 #else
183 #define MSR_DEBUGCHANGE (MSR_SE | MSR_BE)
184 #endif
185 
186 /*
187  * Max register writeable via put_reg
188  */
189 #ifdef CONFIG_PPC32
190 #define PT_MAX_PUT_REG  PT_MQ
191 #else
192 #define PT_MAX_PUT_REG  PT_CCR
193 #endif
194 
195 static unsigned long get_user_msr(struct task_struct *task)
196 {
197         return task->thread.regs->msr | task->thread.fpexc_mode;
198 }
199 
200 static int set_user_msr(struct task_struct *task, unsigned long msr)
201 {
202         task->thread.regs->msr &= ~MSR_DEBUGCHANGE;
203         task->thread.regs->msr |= msr & MSR_DEBUGCHANGE;
204         return 0;
205 }
206 
207 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
208 static unsigned long get_user_ckpt_msr(struct task_struct *task)
209 {
210         return task->thread.ckpt_regs.msr | task->thread.fpexc_mode;
211 }
212 
213 static int set_user_ckpt_msr(struct task_struct *task, unsigned long msr)
214 {
215         task->thread.ckpt_regs.msr &= ~MSR_DEBUGCHANGE;
216         task->thread.ckpt_regs.msr |= msr & MSR_DEBUGCHANGE;
217         return 0;
218 }
219 
220 static int set_user_ckpt_trap(struct task_struct *task, unsigned long trap)
221 {
222         task->thread.ckpt_regs.trap = trap & 0xfff0;
223         return 0;
224 }
225 #endif
226 
227 #ifdef CONFIG_PPC64
228 static int get_user_dscr(struct task_struct *task, unsigned long *data)
229 {
230         *data = task->thread.dscr;
231         return 0;
232 }
233 
234 static int set_user_dscr(struct task_struct *task, unsigned long dscr)
235 {
236         task->thread.dscr = dscr;
237         task->thread.dscr_inherit = 1;
238         return 0;
239 }
240 #else
241 static int get_user_dscr(struct task_struct *task, unsigned long *data)
242 {
243         return -EIO;
244 }
245 
246 static int set_user_dscr(struct task_struct *task, unsigned long dscr)
247 {
248         return -EIO;
249 }
250 #endif
251 
252 /*
253  * We prevent mucking around with the reserved area of trap
254  * which are used internally by the kernel.
255  */
256 static int set_user_trap(struct task_struct *task, unsigned long trap)
257 {
258         task->thread.regs->trap = trap & 0xfff0;
259         return 0;
260 }
261 
262 /*
263  * Get contents of register REGNO in task TASK.
264  */
265 int ptrace_get_reg(struct task_struct *task, int regno, unsigned long *data)
266 {
267         if ((task->thread.regs == NULL) || !data)
268                 return -EIO;
269 
270         if (regno == PT_MSR) {
271                 *data = get_user_msr(task);
272                 return 0;
273         }
274 
275         if (regno == PT_DSCR)
276                 return get_user_dscr(task, data);
277 
278         if (regno < (sizeof(struct pt_regs) / sizeof(unsigned long))) {
279                 *data = ((unsigned long *)task->thread.regs)[regno];
280                 return 0;
281         }
282 
283         return -EIO;
284 }
285 
286 /*
287  * Write contents of register REGNO in task TASK.
288  */
289 int ptrace_put_reg(struct task_struct *task, int regno, unsigned long data)
290 {
291         if (task->thread.regs == NULL)
292                 return -EIO;
293 
294         if (regno == PT_MSR)
295                 return set_user_msr(task, data);
296         if (regno == PT_TRAP)
297                 return set_user_trap(task, data);
298         if (regno == PT_DSCR)
299                 return set_user_dscr(task, data);
300 
301         if (regno <= PT_MAX_PUT_REG) {
302                 ((unsigned long *)task->thread.regs)[regno] = data;
303                 return 0;
304         }
305         return -EIO;
306 }
307 
308 static int gpr_get(struct task_struct *target, const struct user_regset *regset,
309                    unsigned int pos, unsigned int count,
310                    void *kbuf, void __user *ubuf)
311 {
312         int i, ret;
313 
314         if (target->thread.regs == NULL)
315                 return -EIO;
316 
317         if (!FULL_REGS(target->thread.regs)) {
318                 /* We have a partial register set.  Fill 14-31 with bogus values */
319                 for (i = 14; i < 32; i++)
320                         target->thread.regs->gpr[i] = NV_REG_POISON;
321         }
322 
323         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
324                                   target->thread.regs,
325                                   0, offsetof(struct pt_regs, msr));
326         if (!ret) {
327                 unsigned long msr = get_user_msr(target);
328                 ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, &msr,
329                                           offsetof(struct pt_regs, msr),
330                                           offsetof(struct pt_regs, msr) +
331                                           sizeof(msr));
332         }
333 
334         BUILD_BUG_ON(offsetof(struct pt_regs, orig_gpr3) !=
335                      offsetof(struct pt_regs, msr) + sizeof(long));
336 
337         if (!ret)
338                 ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
339                                           &target->thread.regs->orig_gpr3,
340                                           offsetof(struct pt_regs, orig_gpr3),
341                                           sizeof(struct pt_regs));
342         if (!ret)
343                 ret = user_regset_copyout_zero(&pos, &count, &kbuf, &ubuf,
344                                                sizeof(struct pt_regs), -1);
345 
346         return ret;
347 }
348 
349 static int gpr_set(struct task_struct *target, const struct user_regset *regset,
350                    unsigned int pos, unsigned int count,
351                    const void *kbuf, const void __user *ubuf)
352 {
353         unsigned long reg;
354         int ret;
355 
356         if (target->thread.regs == NULL)
357                 return -EIO;
358 
359         CHECK_FULL_REGS(target->thread.regs);
360 
361         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
362                                  target->thread.regs,
363                                  0, PT_MSR * sizeof(reg));
364 
365         if (!ret && count > 0) {
366                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &reg,
367                                          PT_MSR * sizeof(reg),
368                                          (PT_MSR + 1) * sizeof(reg));
369                 if (!ret)
370                         ret = set_user_msr(target, reg);
371         }
372 
373         BUILD_BUG_ON(offsetof(struct pt_regs, orig_gpr3) !=
374                      offsetof(struct pt_regs, msr) + sizeof(long));
375 
376         if (!ret)
377                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
378                                          &target->thread.regs->orig_gpr3,
379                                          PT_ORIG_R3 * sizeof(reg),
380                                          (PT_MAX_PUT_REG + 1) * sizeof(reg));
381 
382         if (PT_MAX_PUT_REG + 1 < PT_TRAP && !ret)
383                 ret = user_regset_copyin_ignore(
384                         &pos, &count, &kbuf, &ubuf,
385                         (PT_MAX_PUT_REG + 1) * sizeof(reg),
386                         PT_TRAP * sizeof(reg));
387 
388         if (!ret && count > 0) {
389                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &reg,
390                                          PT_TRAP * sizeof(reg),
391                                          (PT_TRAP + 1) * sizeof(reg));
392                 if (!ret)
393                         ret = set_user_trap(target, reg);
394         }
395 
396         if (!ret)
397                 ret = user_regset_copyin_ignore(
398                         &pos, &count, &kbuf, &ubuf,
399                         (PT_TRAP + 1) * sizeof(reg), -1);
400 
401         return ret;
402 }
403 
404 /*
405  * When the transaction is active, 'transact_fp' holds the current running
406  * value of all FPR registers and 'fp_state' holds the last checkpointed
407  * value of all FPR registers for the current transaction. When transaction
408  * is not active 'fp_state' holds the current running state of all the FPR
409  * registers. So this function which returns the current running values of
410  * all the FPR registers, needs to know whether any transaction is active
411  * or not.
412  *
413  * Userspace interface buffer layout:
414  *
415  * struct data {
416  *      u64     fpr[32];
417  *      u64     fpscr;
418  * };
419  *
420  * There are two config options CONFIG_VSX and CONFIG_PPC_TRANSACTIONAL_MEM
421  * which determines the final code in this function. All the combinations of
422  * these two config options are possible except the one below as transactional
423  * memory config pulls in CONFIG_VSX automatically.
424  *
425  *      !defined(CONFIG_VSX) && defined(CONFIG_PPC_TRANSACTIONAL_MEM)
426  */
427 static int fpr_get(struct task_struct *target, const struct user_regset *regset,
428                    unsigned int pos, unsigned int count,
429                    void *kbuf, void __user *ubuf)
430 {
431 #ifdef CONFIG_VSX
432         u64 buf[33];
433         int i;
434 #endif
435         flush_fp_to_thread(target);
436 
437 #if defined(CONFIG_VSX) && defined(CONFIG_PPC_TRANSACTIONAL_MEM)
438         /* copy to local buffer then write that out */
439         if (MSR_TM_ACTIVE(target->thread.regs->msr)) {
440                 flush_altivec_to_thread(target);
441                 flush_tmregs_to_thread(target);
442                 for (i = 0; i < 32 ; i++)
443                         buf[i] = target->thread.TS_TRANS_FPR(i);
444                 buf[32] = target->thread.transact_fp.fpscr;
445         } else {
446                 for (i = 0; i < 32 ; i++)
447                         buf[i] = target->thread.TS_FPR(i);
448                 buf[32] = target->thread.fp_state.fpscr;
449         }
450         return user_regset_copyout(&pos, &count, &kbuf, &ubuf, buf, 0, -1);
451 #endif
452 
453 #if defined(CONFIG_VSX) && !defined(CONFIG_PPC_TRANSACTIONAL_MEM)
454         /* copy to local buffer then write that out */
455         for (i = 0; i < 32 ; i++)
456                 buf[i] = target->thread.TS_FPR(i);
457         buf[32] = target->thread.fp_state.fpscr;
458         return user_regset_copyout(&pos, &count, &kbuf, &ubuf, buf, 0, -1);
459 #endif
460 
461 #if !defined(CONFIG_VSX) && !defined(CONFIG_PPC_TRANSACTIONAL_MEM)
462         BUILD_BUG_ON(offsetof(struct thread_fp_state, fpscr) !=
463                      offsetof(struct thread_fp_state, fpr[32]));
464 
465         return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
466                                    &target->thread.fp_state, 0, -1);
467 #endif
468 }
469 
470 /*
471  * When the transaction is active, 'transact_fp' holds the current running
472  * value of all FPR registers and 'fp_state' holds the last checkpointed
473  * value of all FPR registers for the current transaction. When transaction
474  * is not active 'fp_state' holds the current running state of all the FPR
475  * registers. So this function which setss the current running values of
476  * all the FPR registers, needs to know whether any transaction is active
477  * or not.
478  *
479  * Userspace interface buffer layout:
480  *
481  * struct data {
482  *      u64     fpr[32];
483  *      u64     fpscr;
484  * };
485  *
486  * There are two config options CONFIG_VSX and CONFIG_PPC_TRANSACTIONAL_MEM
487  * which determines the final code in this function. All the combinations of
488  * these two config options are possible except the one below as transactional
489  * memory config pulls in CONFIG_VSX automatically.
490  *
491  *      !defined(CONFIG_VSX) && defined(CONFIG_PPC_TRANSACTIONAL_MEM)
492  */
493 static int fpr_set(struct task_struct *target, const struct user_regset *regset,
494                    unsigned int pos, unsigned int count,
495                    const void *kbuf, const void __user *ubuf)
496 {
497 #ifdef CONFIG_VSX
498         u64 buf[33];
499         int i;
500 #endif
501         flush_fp_to_thread(target);
502 
503 #if defined(CONFIG_VSX) && defined(CONFIG_PPC_TRANSACTIONAL_MEM)
504         /* copy to local buffer then write that out */
505         i = user_regset_copyin(&pos, &count, &kbuf, &ubuf, buf, 0, -1);
506         if (i)
507                 return i;
508 
509         if (MSR_TM_ACTIVE(target->thread.regs->msr)) {
510                 flush_altivec_to_thread(target);
511                 flush_tmregs_to_thread(target);
512                 for (i = 0; i < 32 ; i++)
513                         target->thread.TS_TRANS_FPR(i) = buf[i];
514                 target->thread.transact_fp.fpscr = buf[32];
515         } else {
516                 for (i = 0; i < 32 ; i++)
517                         target->thread.TS_FPR(i) = buf[i];
518                 target->thread.fp_state.fpscr = buf[32];
519         }
520         return 0;
521 #endif
522 
523 #if defined(CONFIG_VSX) && !defined(CONFIG_PPC_TRANSACTIONAL_MEM)
524         /* copy to local buffer then write that out */
525         i = user_regset_copyin(&pos, &count, &kbuf, &ubuf, buf, 0, -1);
526         if (i)
527                 return i;
528         for (i = 0; i < 32 ; i++)
529                 target->thread.TS_FPR(i) = buf[i];
530         target->thread.fp_state.fpscr = buf[32];
531         return 0;
532 #endif
533 
534 #if !defined(CONFIG_VSX) && !defined(CONFIG_PPC_TRANSACTIONAL_MEM)
535         BUILD_BUG_ON(offsetof(struct thread_fp_state, fpscr) !=
536                      offsetof(struct thread_fp_state, fpr[32]));
537 
538         return user_regset_copyin(&pos, &count, &kbuf, &ubuf,
539                                   &target->thread.fp_state, 0, -1);
540 #endif
541 }
542 
543 #ifdef CONFIG_ALTIVEC
544 /*
545  * Get/set all the altivec registers vr0..vr31, vscr, vrsave, in one go.
546  * The transfer totals 34 quadword.  Quadwords 0-31 contain the
547  * corresponding vector registers.  Quadword 32 contains the vscr as the
548  * last word (offset 12) within that quadword.  Quadword 33 contains the
549  * vrsave as the first word (offset 0) within the quadword.
550  *
551  * This definition of the VMX state is compatible with the current PPC32
552  * ptrace interface.  This allows signal handling and ptrace to use the
553  * same structures.  This also simplifies the implementation of a bi-arch
554  * (combined (32- and 64-bit) gdb.
555  */
556 
557 static int vr_active(struct task_struct *target,
558                      const struct user_regset *regset)
559 {
560         flush_altivec_to_thread(target);
561         return target->thread.used_vr ? regset->n : 0;
562 }
563 
564 /*
565  * When the transaction is active, 'transact_vr' holds the current running
566  * value of all the VMX registers and 'vr_state' holds the last checkpointed
567  * value of all the VMX registers for the current transaction to fall back
568  * on in case it aborts. When transaction is not active 'vr_state' holds
569  * the current running state of all the VMX registers. So this function which
570  * gets the current running values of all the VMX registers, needs to know
571  * whether any transaction is active or not.
572  *
573  * Userspace interface buffer layout:
574  *
575  * struct data {
576  *      vector128       vr[32];
577  *      vector128       vscr;
578  *      vector128       vrsave;
579  * };
580  */
581 static int vr_get(struct task_struct *target, const struct user_regset *regset,
582                   unsigned int pos, unsigned int count,
583                   void *kbuf, void __user *ubuf)
584 {
585         struct thread_vr_state *addr;
586         int ret;
587 
588         flush_altivec_to_thread(target);
589 
590         BUILD_BUG_ON(offsetof(struct thread_vr_state, vscr) !=
591                      offsetof(struct thread_vr_state, vr[32]));
592 
593 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
594         if (MSR_TM_ACTIVE(target->thread.regs->msr)) {
595                 flush_fp_to_thread(target);
596                 flush_tmregs_to_thread(target);
597                 addr = &target->thread.transact_vr;
598         } else {
599                 addr = &target->thread.vr_state;
600         }
601 #else
602         addr = &target->thread.vr_state;
603 #endif
604         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
605                                   addr, 0,
606                                   33 * sizeof(vector128));
607         if (!ret) {
608                 /*
609                  * Copy out only the low-order word of vrsave.
610                  */
611                 union {
612                         elf_vrreg_t reg;
613                         u32 word;
614                 } vrsave;
615                 memset(&vrsave, 0, sizeof(vrsave));
616 
617 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
618                 if (MSR_TM_ACTIVE(target->thread.regs->msr))
619                         vrsave.word = target->thread.transact_vrsave;
620                 else
621                         vrsave.word = target->thread.vrsave;
622 #else
623                 vrsave.word = target->thread.vrsave;
624 #endif
625 
626                 ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, &vrsave,
627                                           33 * sizeof(vector128), -1);
628         }
629 
630         return ret;
631 }
632 
633 /*
634  * When the transaction is active, 'transact_vr' holds the current running
635  * value of all the VMX registers and 'vr_state' holds the last checkpointed
636  * value of all the VMX registers for the current transaction to fall back
637  * on in case it aborts. When transaction is not active 'vr_state' holds
638  * the current running state of all the VMX registers. So this function which
639  * sets the current running values of all the VMX registers, needs to know
640  * whether any transaction is active or not.
641  *
642  * Userspace interface buffer layout:
643  *
644  * struct data {
645  *      vector128       vr[32];
646  *      vector128       vscr;
647  *      vector128       vrsave;
648  * };
649  */
650 static int vr_set(struct task_struct *target, const struct user_regset *regset,
651                   unsigned int pos, unsigned int count,
652                   const void *kbuf, const void __user *ubuf)
653 {
654         struct thread_vr_state *addr;
655         int ret;
656 
657         flush_altivec_to_thread(target);
658 
659         BUILD_BUG_ON(offsetof(struct thread_vr_state, vscr) !=
660                      offsetof(struct thread_vr_state, vr[32]));
661 
662 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
663         if (MSR_TM_ACTIVE(target->thread.regs->msr)) {
664                 flush_fp_to_thread(target);
665                 flush_tmregs_to_thread(target);
666                 addr = &target->thread.transact_vr;
667         } else {
668                 addr = &target->thread.vr_state;
669         }
670 #else
671         addr = &target->thread.vr_state;
672 #endif
673         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
674                                  addr, 0,
675                                  33 * sizeof(vector128));
676         if (!ret && count > 0) {
677                 /*
678                  * We use only the first word of vrsave.
679                  */
680                 union {
681                         elf_vrreg_t reg;
682                         u32 word;
683                 } vrsave;
684                 memset(&vrsave, 0, sizeof(vrsave));
685 
686 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
687                 if (MSR_TM_ACTIVE(target->thread.regs->msr))
688                         vrsave.word = target->thread.transact_vrsave;
689                 else
690                         vrsave.word = target->thread.vrsave;
691 #else
692                 vrsave.word = target->thread.vrsave;
693 #endif
694                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &vrsave,
695                                          33 * sizeof(vector128), -1);
696                 if (!ret) {
697 
698 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
699                         if (MSR_TM_ACTIVE(target->thread.regs->msr))
700                                 target->thread.transact_vrsave = vrsave.word;
701                         else
702                                 target->thread.vrsave = vrsave.word;
703 #else
704                         target->thread.vrsave = vrsave.word;
705 #endif
706                 }
707         }
708 
709         return ret;
710 }
711 #endif /* CONFIG_ALTIVEC */
712 
713 #ifdef CONFIG_VSX
714 /*
715  * Currently to set and and get all the vsx state, you need to call
716  * the fp and VMX calls as well.  This only get/sets the lower 32
717  * 128bit VSX registers.
718  */
719 
720 static int vsr_active(struct task_struct *target,
721                       const struct user_regset *regset)
722 {
723         flush_vsx_to_thread(target);
724         return target->thread.used_vsr ? regset->n : 0;
725 }
726 
727 /*
728  * When the transaction is active, 'transact_fp' holds the current running
729  * value of all FPR registers and 'fp_state' holds the last checkpointed
730  * value of all FPR registers for the current transaction. When transaction
731  * is not active 'fp_state' holds the current running state of all the FPR
732  * registers. So this function which returns the current running values of
733  * all the FPR registers, needs to know whether any transaction is active
734  * or not.
735  *
736  * Userspace interface buffer layout:
737  *
738  * struct data {
739  *      u64     vsx[32];
740  * };
741  */
742 static int vsr_get(struct task_struct *target, const struct user_regset *regset,
743                    unsigned int pos, unsigned int count,
744                    void *kbuf, void __user *ubuf)
745 {
746         u64 buf[32];
747         int ret, i;
748 
749 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
750         flush_fp_to_thread(target);
751         flush_altivec_to_thread(target);
752         flush_tmregs_to_thread(target);
753 #endif
754         flush_vsx_to_thread(target);
755 
756 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
757         if (MSR_TM_ACTIVE(target->thread.regs->msr)) {
758                 for (i = 0; i < 32 ; i++)
759                         buf[i] = target->thread.
760                                 transact_fp.fpr[i][TS_VSRLOWOFFSET];
761         } else {
762                 for (i = 0; i < 32 ; i++)
763                         buf[i] = target->thread.
764                                 fp_state.fpr[i][TS_VSRLOWOFFSET];
765         }
766 #else
767         for (i = 0; i < 32 ; i++)
768                 buf[i] = target->thread.fp_state.fpr[i][TS_VSRLOWOFFSET];
769 #endif
770         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
771                                   buf, 0, 32 * sizeof(double));
772 
773         return ret;
774 }
775 
776 /*
777  * When the transaction is active, 'transact_fp' holds the current running
778  * value of all FPR registers and 'fp_state' holds the last checkpointed
779  * value of all FPR registers for the current transaction. When transaction
780  * is not active 'fp_state' holds the current running state of all the FPR
781  * registers. So this function which sets the current running values of all
782  * the FPR registers, needs to know whether any transaction is active or not.
783  *
784  * Userspace interface buffer layout:
785  *
786  * struct data {
787  *      u64     vsx[32];
788  * };
789  */
790 static int vsr_set(struct task_struct *target, const struct user_regset *regset,
791                    unsigned int pos, unsigned int count,
792                    const void *kbuf, const void __user *ubuf)
793 {
794         u64 buf[32];
795         int ret,i;
796 
797 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
798         flush_fp_to_thread(target);
799         flush_altivec_to_thread(target);
800         flush_tmregs_to_thread(target);
801 #endif
802         flush_vsx_to_thread(target);
803 
804         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
805                                  buf, 0, 32 * sizeof(double));
806 
807 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
808         if (MSR_TM_ACTIVE(target->thread.regs->msr)) {
809                 for (i = 0; i < 32 ; i++)
810                         target->thread.transact_fp.
811                                 fpr[i][TS_VSRLOWOFFSET] = buf[i];
812         } else {
813                 for (i = 0; i < 32 ; i++)
814                         target->thread.fp_state.
815                                 fpr[i][TS_VSRLOWOFFSET] = buf[i];
816         }
817 #else
818         for (i = 0; i < 32 ; i++)
819                 target->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i];
820 #endif
821 
822 
823         return ret;
824 }
825 #endif /* CONFIG_VSX */
826 
827 #ifdef CONFIG_SPE
828 
829 /*
830  * For get_evrregs/set_evrregs functions 'data' has the following layout:
831  *
832  * struct {
833  *   u32 evr[32];
834  *   u64 acc;
835  *   u32 spefscr;
836  * }
837  */
838 
839 static int evr_active(struct task_struct *target,
840                       const struct user_regset *regset)
841 {
842         flush_spe_to_thread(target);
843         return target->thread.used_spe ? regset->n : 0;
844 }
845 
846 static int evr_get(struct task_struct *target, const struct user_regset *regset,
847                    unsigned int pos, unsigned int count,
848                    void *kbuf, void __user *ubuf)
849 {
850         int ret;
851 
852         flush_spe_to_thread(target);
853 
854         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
855                                   &target->thread.evr,
856                                   0, sizeof(target->thread.evr));
857 
858         BUILD_BUG_ON(offsetof(struct thread_struct, acc) + sizeof(u64) !=
859                      offsetof(struct thread_struct, spefscr));
860 
861         if (!ret)
862                 ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
863                                           &target->thread.acc,
864                                           sizeof(target->thread.evr), -1);
865 
866         return ret;
867 }
868 
869 static int evr_set(struct task_struct *target, const struct user_regset *regset,
870                    unsigned int pos, unsigned int count,
871                    const void *kbuf, const void __user *ubuf)
872 {
873         int ret;
874 
875         flush_spe_to_thread(target);
876 
877         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
878                                  &target->thread.evr,
879                                  0, sizeof(target->thread.evr));
880 
881         BUILD_BUG_ON(offsetof(struct thread_struct, acc) + sizeof(u64) !=
882                      offsetof(struct thread_struct, spefscr));
883 
884         if (!ret)
885                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
886                                          &target->thread.acc,
887                                          sizeof(target->thread.evr), -1);
888 
889         return ret;
890 }
891 #endif /* CONFIG_SPE */
892 
893 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
894 /**
895  * tm_cgpr_active - get active number of registers in CGPR
896  * @target:     The target task.
897  * @regset:     The user regset structure.
898  *
899  * This function checks for the active number of available
900  * regisers in transaction checkpointed GPR category.
901  */
902 static int tm_cgpr_active(struct task_struct *target,
903                           const struct user_regset *regset)
904 {
905         if (!cpu_has_feature(CPU_FTR_TM))
906                 return -ENODEV;
907 
908         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
909                 return 0;
910 
911         return regset->n;
912 }
913 
914 /**
915  * tm_cgpr_get - get CGPR registers
916  * @target:     The target task.
917  * @regset:     The user regset structure.
918  * @pos:        The buffer position.
919  * @count:      Number of bytes to copy.
920  * @kbuf:       Kernel buffer to copy from.
921  * @ubuf:       User buffer to copy into.
922  *
923  * This function gets transaction checkpointed GPR registers.
924  *
925  * When the transaction is active, 'ckpt_regs' holds all the checkpointed
926  * GPR register values for the current transaction to fall back on if it
927  * aborts in between. This function gets those checkpointed GPR registers.
928  * The userspace interface buffer layout is as follows.
929  *
930  * struct data {
931  *      struct pt_regs ckpt_regs;
932  * };
933  */
934 static int tm_cgpr_get(struct task_struct *target,
935                         const struct user_regset *regset,
936                         unsigned int pos, unsigned int count,
937                         void *kbuf, void __user *ubuf)
938 {
939         int ret;
940 
941         if (!cpu_has_feature(CPU_FTR_TM))
942                 return -ENODEV;
943 
944         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
945                 return -ENODATA;
946 
947         flush_fp_to_thread(target);
948         flush_altivec_to_thread(target);
949         flush_tmregs_to_thread(target);
950 
951         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
952                                   &target->thread.ckpt_regs,
953                                   0, offsetof(struct pt_regs, msr));
954         if (!ret) {
955                 unsigned long msr = get_user_ckpt_msr(target);
956 
957                 ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, &msr,
958                                           offsetof(struct pt_regs, msr),
959                                           offsetof(struct pt_regs, msr) +
960                                           sizeof(msr));
961         }
962 
963         BUILD_BUG_ON(offsetof(struct pt_regs, orig_gpr3) !=
964                      offsetof(struct pt_regs, msr) + sizeof(long));
965 
966         if (!ret)
967                 ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
968                                           &target->thread.ckpt_regs.orig_gpr3,
969                                           offsetof(struct pt_regs, orig_gpr3),
970                                           sizeof(struct pt_regs));
971         if (!ret)
972                 ret = user_regset_copyout_zero(&pos, &count, &kbuf, &ubuf,
973                                                sizeof(struct pt_regs), -1);
974 
975         return ret;
976 }
977 
978 /*
979  * tm_cgpr_set - set the CGPR registers
980  * @target:     The target task.
981  * @regset:     The user regset structure.
982  * @pos:        The buffer position.
983  * @count:      Number of bytes to copy.
984  * @kbuf:       Kernel buffer to copy into.
985  * @ubuf:       User buffer to copy from.
986  *
987  * This function sets in transaction checkpointed GPR registers.
988  *
989  * When the transaction is active, 'ckpt_regs' holds the checkpointed
990  * GPR register values for the current transaction to fall back on if it
991  * aborts in between. This function sets those checkpointed GPR registers.
992  * The userspace interface buffer layout is as follows.
993  *
994  * struct data {
995  *      struct pt_regs ckpt_regs;
996  * };
997  */
998 static int tm_cgpr_set(struct task_struct *target,
999                         const struct user_regset *regset,
1000                         unsigned int pos, unsigned int count,
1001                         const void *kbuf, const void __user *ubuf)
1002 {
1003         unsigned long reg;
1004         int ret;
1005 
1006         if (!cpu_has_feature(CPU_FTR_TM))
1007                 return -ENODEV;
1008 
1009         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1010                 return -ENODATA;
1011 
1012         flush_fp_to_thread(target);
1013         flush_altivec_to_thread(target);
1014         flush_tmregs_to_thread(target);
1015 
1016         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1017                                  &target->thread.ckpt_regs,
1018                                  0, PT_MSR * sizeof(reg));
1019 
1020         if (!ret && count > 0) {
1021                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &reg,
1022                                          PT_MSR * sizeof(reg),
1023                                          (PT_MSR + 1) * sizeof(reg));
1024                 if (!ret)
1025                         ret = set_user_ckpt_msr(target, reg);
1026         }
1027 
1028         BUILD_BUG_ON(offsetof(struct pt_regs, orig_gpr3) !=
1029                      offsetof(struct pt_regs, msr) + sizeof(long));
1030 
1031         if (!ret)
1032                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1033                                          &target->thread.ckpt_regs.orig_gpr3,
1034                                          PT_ORIG_R3 * sizeof(reg),
1035                                          (PT_MAX_PUT_REG + 1) * sizeof(reg));
1036 
1037         if (PT_MAX_PUT_REG + 1 < PT_TRAP && !ret)
1038                 ret = user_regset_copyin_ignore(
1039                         &pos, &count, &kbuf, &ubuf,
1040                         (PT_MAX_PUT_REG + 1) * sizeof(reg),
1041                         PT_TRAP * sizeof(reg));
1042 
1043         if (!ret && count > 0) {
1044                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &reg,
1045                                          PT_TRAP * sizeof(reg),
1046                                          (PT_TRAP + 1) * sizeof(reg));
1047                 if (!ret)
1048                         ret = set_user_ckpt_trap(target, reg);
1049         }
1050 
1051         if (!ret)
1052                 ret = user_regset_copyin_ignore(
1053                         &pos, &count, &kbuf, &ubuf,
1054                         (PT_TRAP + 1) * sizeof(reg), -1);
1055 
1056         return ret;
1057 }
1058 
1059 /**
1060  * tm_cfpr_active - get active number of registers in CFPR
1061  * @target:     The target task.
1062  * @regset:     The user regset structure.
1063  *
1064  * This function checks for the active number of available
1065  * regisers in transaction checkpointed FPR category.
1066  */
1067 static int tm_cfpr_active(struct task_struct *target,
1068                                 const struct user_regset *regset)
1069 {
1070         if (!cpu_has_feature(CPU_FTR_TM))
1071                 return -ENODEV;
1072 
1073         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1074                 return 0;
1075 
1076         return regset->n;
1077 }
1078 
1079 /**
1080  * tm_cfpr_get - get CFPR registers
1081  * @target:     The target task.
1082  * @regset:     The user regset structure.
1083  * @pos:        The buffer position.
1084  * @count:      Number of bytes to copy.
1085  * @kbuf:       Kernel buffer to copy from.
1086  * @ubuf:       User buffer to copy into.
1087  *
1088  * This function gets in transaction checkpointed FPR registers.
1089  *
1090  * When the transaction is active 'fp_state' holds the checkpointed
1091  * values for the current transaction to fall back on if it aborts
1092  * in between. This function gets those checkpointed FPR registers.
1093  * The userspace interface buffer layout is as follows.
1094  *
1095  * struct data {
1096  *      u64     fpr[32];
1097  *      u64     fpscr;
1098  *};
1099  */
1100 static int tm_cfpr_get(struct task_struct *target,
1101                         const struct user_regset *regset,
1102                         unsigned int pos, unsigned int count,
1103                         void *kbuf, void __user *ubuf)
1104 {
1105         u64 buf[33];
1106         int i;
1107 
1108         if (!cpu_has_feature(CPU_FTR_TM))
1109                 return -ENODEV;
1110 
1111         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1112                 return -ENODATA;
1113 
1114         flush_fp_to_thread(target);
1115         flush_altivec_to_thread(target);
1116         flush_tmregs_to_thread(target);
1117 
1118         /* copy to local buffer then write that out */
1119         for (i = 0; i < 32 ; i++)
1120                 buf[i] = target->thread.TS_FPR(i);
1121         buf[32] = target->thread.fp_state.fpscr;
1122         return user_regset_copyout(&pos, &count, &kbuf, &ubuf, buf, 0, -1);
1123 }
1124 
1125 /**
1126  * tm_cfpr_set - set CFPR registers
1127  * @target:     The target task.
1128  * @regset:     The user regset structure.
1129  * @pos:        The buffer position.
1130  * @count:      Number of bytes to copy.
1131  * @kbuf:       Kernel buffer to copy into.
1132  * @ubuf:       User buffer to copy from.
1133  *
1134  * This function sets in transaction checkpointed FPR registers.
1135  *
1136  * When the transaction is active 'fp_state' holds the checkpointed
1137  * FPR register values for the current transaction to fall back on
1138  * if it aborts in between. This function sets these checkpointed
1139  * FPR registers. The userspace interface buffer layout is as follows.
1140  *
1141  * struct data {
1142  *      u64     fpr[32];
1143  *      u64     fpscr;
1144  *};
1145  */
1146 static int tm_cfpr_set(struct task_struct *target,
1147                         const struct user_regset *regset,
1148                         unsigned int pos, unsigned int count,
1149                         const void *kbuf, const void __user *ubuf)
1150 {
1151         u64 buf[33];
1152         int i;
1153 
1154         if (!cpu_has_feature(CPU_FTR_TM))
1155                 return -ENODEV;
1156 
1157         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1158                 return -ENODATA;
1159 
1160         flush_fp_to_thread(target);
1161         flush_altivec_to_thread(target);
1162         flush_tmregs_to_thread(target);
1163 
1164         /* copy to local buffer then write that out */
1165         i = user_regset_copyin(&pos, &count, &kbuf, &ubuf, buf, 0, -1);
1166         if (i)
1167                 return i;
1168         for (i = 0; i < 32 ; i++)
1169                 target->thread.TS_FPR(i) = buf[i];
1170         target->thread.fp_state.fpscr = buf[32];
1171         return 0;
1172 }
1173 
1174 /**
1175  * tm_cvmx_active - get active number of registers in CVMX
1176  * @target:     The target task.
1177  * @regset:     The user regset structure.
1178  *
1179  * This function checks for the active number of available
1180  * regisers in checkpointed VMX category.
1181  */
1182 static int tm_cvmx_active(struct task_struct *target,
1183                                 const struct user_regset *regset)
1184 {
1185         if (!cpu_has_feature(CPU_FTR_TM))
1186                 return -ENODEV;
1187 
1188         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1189                 return 0;
1190 
1191         return regset->n;
1192 }
1193 
1194 /**
1195  * tm_cvmx_get - get CMVX registers
1196  * @target:     The target task.
1197  * @regset:     The user regset structure.
1198  * @pos:        The buffer position.
1199  * @count:      Number of bytes to copy.
1200  * @kbuf:       Kernel buffer to copy from.
1201  * @ubuf:       User buffer to copy into.
1202  *
1203  * This function gets in transaction checkpointed VMX registers.
1204  *
1205  * When the transaction is active 'vr_state' and 'vr_save' hold
1206  * the checkpointed values for the current transaction to fall
1207  * back on if it aborts in between. The userspace interface buffer
1208  * layout is as follows.
1209  *
1210  * struct data {
1211  *      vector128       vr[32];
1212  *      vector128       vscr;
1213  *      vector128       vrsave;
1214  *};
1215  */
1216 static int tm_cvmx_get(struct task_struct *target,
1217                         const struct user_regset *regset,
1218                         unsigned int pos, unsigned int count,
1219                         void *kbuf, void __user *ubuf)
1220 {
1221         int ret;
1222 
1223         BUILD_BUG_ON(TVSO(vscr) != TVSO(vr[32]));
1224 
1225         if (!cpu_has_feature(CPU_FTR_TM))
1226                 return -ENODEV;
1227 
1228         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1229                 return -ENODATA;
1230 
1231         /* Flush the state */
1232         flush_fp_to_thread(target);
1233         flush_altivec_to_thread(target);
1234         flush_tmregs_to_thread(target);
1235 
1236         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1237                                         &target->thread.vr_state, 0,
1238                                         33 * sizeof(vector128));
1239         if (!ret) {
1240                 /*
1241                  * Copy out only the low-order word of vrsave.
1242                  */
1243                 union {
1244                         elf_vrreg_t reg;
1245                         u32 word;
1246                 } vrsave;
1247                 memset(&vrsave, 0, sizeof(vrsave));
1248                 vrsave.word = target->thread.vrsave;
1249                 ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, &vrsave,
1250                                                 33 * sizeof(vector128), -1);
1251         }
1252 
1253         return ret;
1254 }
1255 
1256 /**
1257  * tm_cvmx_set - set CMVX registers
1258  * @target:     The target task.
1259  * @regset:     The user regset structure.
1260  * @pos:        The buffer position.
1261  * @count:      Number of bytes to copy.
1262  * @kbuf:       Kernel buffer to copy into.
1263  * @ubuf:       User buffer to copy from.
1264  *
1265  * This function sets in transaction checkpointed VMX registers.
1266  *
1267  * When the transaction is active 'vr_state' and 'vr_save' hold
1268  * the checkpointed values for the current transaction to fall
1269  * back on if it aborts in between. The userspace interface buffer
1270  * layout is as follows.
1271  *
1272  * struct data {
1273  *      vector128       vr[32];
1274  *      vector128       vscr;
1275  *      vector128       vrsave;
1276  *};
1277  */
1278 static int tm_cvmx_set(struct task_struct *target,
1279                         const struct user_regset *regset,
1280                         unsigned int pos, unsigned int count,
1281                         const void *kbuf, const void __user *ubuf)
1282 {
1283         int ret;
1284 
1285         BUILD_BUG_ON(TVSO(vscr) != TVSO(vr[32]));
1286 
1287         if (!cpu_has_feature(CPU_FTR_TM))
1288                 return -ENODEV;
1289 
1290         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1291                 return -ENODATA;
1292 
1293         flush_fp_to_thread(target);
1294         flush_altivec_to_thread(target);
1295         flush_tmregs_to_thread(target);
1296 
1297         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1298                                         &target->thread.vr_state, 0,
1299                                         33 * sizeof(vector128));
1300         if (!ret && count > 0) {
1301                 /*
1302                  * We use only the low-order word of vrsave.
1303                  */
1304                 union {
1305                         elf_vrreg_t reg;
1306                         u32 word;
1307                 } vrsave;
1308                 memset(&vrsave, 0, sizeof(vrsave));
1309                 vrsave.word = target->thread.vrsave;
1310                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &vrsave,
1311                                                 33 * sizeof(vector128), -1);
1312                 if (!ret)
1313                         target->thread.vrsave = vrsave.word;
1314         }
1315 
1316         return ret;
1317 }
1318 
1319 /**
1320  * tm_cvsx_active - get active number of registers in CVSX
1321  * @target:     The target task.
1322  * @regset:     The user regset structure.
1323  *
1324  * This function checks for the active number of available
1325  * regisers in transaction checkpointed VSX category.
1326  */
1327 static int tm_cvsx_active(struct task_struct *target,
1328                                 const struct user_regset *regset)
1329 {
1330         if (!cpu_has_feature(CPU_FTR_TM))
1331                 return -ENODEV;
1332 
1333         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1334                 return 0;
1335 
1336         flush_vsx_to_thread(target);
1337         return target->thread.used_vsr ? regset->n : 0;
1338 }
1339 
1340 /**
1341  * tm_cvsx_get - get CVSX registers
1342  * @target:     The target task.
1343  * @regset:     The user regset structure.
1344  * @pos:        The buffer position.
1345  * @count:      Number of bytes to copy.
1346  * @kbuf:       Kernel buffer to copy from.
1347  * @ubuf:       User buffer to copy into.
1348  *
1349  * This function gets in transaction checkpointed VSX registers.
1350  *
1351  * When the transaction is active 'fp_state' holds the checkpointed
1352  * values for the current transaction to fall back on if it aborts
1353  * in between. This function gets those checkpointed VSX registers.
1354  * The userspace interface buffer layout is as follows.
1355  *
1356  * struct data {
1357  *      u64     vsx[32];
1358  *};
1359  */
1360 static int tm_cvsx_get(struct task_struct *target,
1361                         const struct user_regset *regset,
1362                         unsigned int pos, unsigned int count,
1363                         void *kbuf, void __user *ubuf)
1364 {
1365         u64 buf[32];
1366         int ret, i;
1367 
1368         if (!cpu_has_feature(CPU_FTR_TM))
1369                 return -ENODEV;
1370 
1371         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1372                 return -ENODATA;
1373 
1374         /* Flush the state */
1375         flush_fp_to_thread(target);
1376         flush_altivec_to_thread(target);
1377         flush_tmregs_to_thread(target);
1378         flush_vsx_to_thread(target);
1379 
1380         for (i = 0; i < 32 ; i++)
1381                 buf[i] = target->thread.fp_state.fpr[i][TS_VSRLOWOFFSET];
1382         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1383                                   buf, 0, 32 * sizeof(double));
1384 
1385         return ret;
1386 }
1387 
1388 /**
1389  * tm_cvsx_set - set CFPR registers
1390  * @target:     The target task.
1391  * @regset:     The user regset structure.
1392  * @pos:        The buffer position.
1393  * @count:      Number of bytes to copy.
1394  * @kbuf:       Kernel buffer to copy into.
1395  * @ubuf:       User buffer to copy from.
1396  *
1397  * This function sets in transaction checkpointed VSX registers.
1398  *
1399  * When the transaction is active 'fp_state' holds the checkpointed
1400  * VSX register values for the current transaction to fall back on
1401  * if it aborts in between. This function sets these checkpointed
1402  * FPR registers. The userspace interface buffer layout is as follows.
1403  *
1404  * struct data {
1405  *      u64     vsx[32];
1406  *};
1407  */
1408 static int tm_cvsx_set(struct task_struct *target,
1409                         const struct user_regset *regset,
1410                         unsigned int pos, unsigned int count,
1411                         const void *kbuf, const void __user *ubuf)
1412 {
1413         u64 buf[32];
1414         int ret, i;
1415 
1416         if (!cpu_has_feature(CPU_FTR_TM))
1417                 return -ENODEV;
1418 
1419         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1420                 return -ENODATA;
1421 
1422         /* Flush the state */
1423         flush_fp_to_thread(target);
1424         flush_altivec_to_thread(target);
1425         flush_tmregs_to_thread(target);
1426         flush_vsx_to_thread(target);
1427 
1428         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1429                                  buf, 0, 32 * sizeof(double));
1430         for (i = 0; i < 32 ; i++)
1431                 target->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i];
1432 
1433         return ret;
1434 }
1435 
1436 /**
1437  * tm_spr_active - get active number of registers in TM SPR
1438  * @target:     The target task.
1439  * @regset:     The user regset structure.
1440  *
1441  * This function checks the active number of available
1442  * regisers in the transactional memory SPR category.
1443  */
1444 static int tm_spr_active(struct task_struct *target,
1445                          const struct user_regset *regset)
1446 {
1447         if (!cpu_has_feature(CPU_FTR_TM))
1448                 return -ENODEV;
1449 
1450         return regset->n;
1451 }
1452 
1453 /**
1454  * tm_spr_get - get the TM related SPR registers
1455  * @target:     The target task.
1456  * @regset:     The user regset structure.
1457  * @pos:        The buffer position.
1458  * @count:      Number of bytes to copy.
1459  * @kbuf:       Kernel buffer to copy from.
1460  * @ubuf:       User buffer to copy into.
1461  *
1462  * This function gets transactional memory related SPR registers.
1463  * The userspace interface buffer layout is as follows.
1464  *
1465  * struct {
1466  *      u64             tm_tfhar;
1467  *      u64             tm_texasr;
1468  *      u64             tm_tfiar;
1469  * };
1470  */
1471 static int tm_spr_get(struct task_struct *target,
1472                       const struct user_regset *regset,
1473                       unsigned int pos, unsigned int count,
1474                       void *kbuf, void __user *ubuf)
1475 {
1476         int ret;
1477 
1478         /* Build tests */
1479         BUILD_BUG_ON(TSO(tm_tfhar) + sizeof(u64) != TSO(tm_texasr));
1480         BUILD_BUG_ON(TSO(tm_texasr) + sizeof(u64) != TSO(tm_tfiar));
1481         BUILD_BUG_ON(TSO(tm_tfiar) + sizeof(u64) != TSO(ckpt_regs));
1482 
1483         if (!cpu_has_feature(CPU_FTR_TM))
1484                 return -ENODEV;
1485 
1486         /* Flush the states */
1487         flush_fp_to_thread(target);
1488         flush_altivec_to_thread(target);
1489         flush_tmregs_to_thread(target);
1490 
1491         /* TFHAR register */
1492         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1493                                 &target->thread.tm_tfhar, 0, sizeof(u64));
1494 
1495         /* TEXASR register */
1496         if (!ret)
1497                 ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1498                                 &target->thread.tm_texasr, sizeof(u64),
1499                                 2 * sizeof(u64));
1500 
1501         /* TFIAR register */
1502         if (!ret)
1503                 ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1504                                 &target->thread.tm_tfiar,
1505                                 2 * sizeof(u64), 3 * sizeof(u64));
1506         return ret;
1507 }
1508 
1509 /**
1510  * tm_spr_set - set the TM related SPR registers
1511  * @target:     The target task.
1512  * @regset:     The user regset structure.
1513  * @pos:        The buffer position.
1514  * @count:      Number of bytes to copy.
1515  * @kbuf:       Kernel buffer to copy into.
1516  * @ubuf:       User buffer to copy from.
1517  *
1518  * This function sets transactional memory related SPR registers.
1519  * The userspace interface buffer layout is as follows.
1520  *
1521  * struct {
1522  *      u64             tm_tfhar;
1523  *      u64             tm_texasr;
1524  *      u64             tm_tfiar;
1525  * };
1526  */
1527 static int tm_spr_set(struct task_struct *target,
1528                       const struct user_regset *regset,
1529                       unsigned int pos, unsigned int count,
1530                       const void *kbuf, const void __user *ubuf)
1531 {
1532         int ret;
1533 
1534         /* Build tests */
1535         BUILD_BUG_ON(TSO(tm_tfhar) + sizeof(u64) != TSO(tm_texasr));
1536         BUILD_BUG_ON(TSO(tm_texasr) + sizeof(u64) != TSO(tm_tfiar));
1537         BUILD_BUG_ON(TSO(tm_tfiar) + sizeof(u64) != TSO(ckpt_regs));
1538 
1539         if (!cpu_has_feature(CPU_FTR_TM))
1540                 return -ENODEV;
1541 
1542         /* Flush the states */
1543         flush_fp_to_thread(target);
1544         flush_altivec_to_thread(target);
1545         flush_tmregs_to_thread(target);
1546 
1547         /* TFHAR register */
1548         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1549                                 &target->thread.tm_tfhar, 0, sizeof(u64));
1550 
1551         /* TEXASR register */
1552         if (!ret)
1553                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1554                                 &target->thread.tm_texasr, sizeof(u64),
1555                                 2 * sizeof(u64));
1556 
1557         /* TFIAR register */
1558         if (!ret)
1559                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1560                                 &target->thread.tm_tfiar,
1561                                  2 * sizeof(u64), 3 * sizeof(u64));
1562         return ret;
1563 }
1564 
1565 static int tm_tar_active(struct task_struct *target,
1566                          const struct user_regset *regset)
1567 {
1568         if (!cpu_has_feature(CPU_FTR_TM))
1569                 return -ENODEV;
1570 
1571         if (MSR_TM_ACTIVE(target->thread.regs->msr))
1572                 return regset->n;
1573 
1574         return 0;
1575 }
1576 
1577 static int tm_tar_get(struct task_struct *target,
1578                       const struct user_regset *regset,
1579                       unsigned int pos, unsigned int count,
1580                       void *kbuf, void __user *ubuf)
1581 {
1582         int ret;
1583 
1584         if (!cpu_has_feature(CPU_FTR_TM))
1585                 return -ENODEV;
1586 
1587         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1588                 return -ENODATA;
1589 
1590         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1591                                 &target->thread.tm_tar, 0, sizeof(u64));
1592         return ret;
1593 }
1594 
1595 static int tm_tar_set(struct task_struct *target,
1596                       const struct user_regset *regset,
1597                       unsigned int pos, unsigned int count,
1598                       const void *kbuf, const void __user *ubuf)
1599 {
1600         int ret;
1601 
1602         if (!cpu_has_feature(CPU_FTR_TM))
1603                 return -ENODEV;
1604 
1605         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1606                 return -ENODATA;
1607 
1608         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1609                                 &target->thread.tm_tar, 0, sizeof(u64));
1610         return ret;
1611 }
1612 
1613 static int tm_ppr_active(struct task_struct *target,
1614                          const struct user_regset *regset)
1615 {
1616         if (!cpu_has_feature(CPU_FTR_TM))
1617                 return -ENODEV;
1618 
1619         if (MSR_TM_ACTIVE(target->thread.regs->msr))
1620                 return regset->n;
1621 
1622         return 0;
1623 }
1624 
1625 
1626 static int tm_ppr_get(struct task_struct *target,
1627                       const struct user_regset *regset,
1628                       unsigned int pos, unsigned int count,
1629                       void *kbuf, void __user *ubuf)
1630 {
1631         int ret;
1632 
1633         if (!cpu_has_feature(CPU_FTR_TM))
1634                 return -ENODEV;
1635 
1636         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1637                 return -ENODATA;
1638 
1639         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1640                                 &target->thread.tm_ppr, 0, sizeof(u64));
1641         return ret;
1642 }
1643 
1644 static int tm_ppr_set(struct task_struct *target,
1645                       const struct user_regset *regset,
1646                       unsigned int pos, unsigned int count,
1647                       const void *kbuf, const void __user *ubuf)
1648 {
1649         int ret;
1650 
1651         if (!cpu_has_feature(CPU_FTR_TM))
1652                 return -ENODEV;
1653 
1654         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1655                 return -ENODATA;
1656 
1657         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1658                                 &target->thread.tm_ppr, 0, sizeof(u64));
1659         return ret;
1660 }
1661 
1662 static int tm_dscr_active(struct task_struct *target,
1663                          const struct user_regset *regset)
1664 {
1665         if (!cpu_has_feature(CPU_FTR_TM))
1666                 return -ENODEV;
1667 
1668         if (MSR_TM_ACTIVE(target->thread.regs->msr))
1669                 return regset->n;
1670 
1671         return 0;
1672 }
1673 
1674 static int tm_dscr_get(struct task_struct *target,
1675                       const struct user_regset *regset,
1676                       unsigned int pos, unsigned int count,
1677                       void *kbuf, void __user *ubuf)
1678 {
1679         int ret;
1680 
1681         if (!cpu_has_feature(CPU_FTR_TM))
1682                 return -ENODEV;
1683 
1684         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1685                 return -ENODATA;
1686 
1687         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1688                                 &target->thread.tm_dscr, 0, sizeof(u64));
1689         return ret;
1690 }
1691 
1692 static int tm_dscr_set(struct task_struct *target,
1693                       const struct user_regset *regset,
1694                       unsigned int pos, unsigned int count,
1695                       const void *kbuf, const void __user *ubuf)
1696 {
1697         int ret;
1698 
1699         if (!cpu_has_feature(CPU_FTR_TM))
1700                 return -ENODEV;
1701 
1702         if (!MSR_TM_ACTIVE(target->thread.regs->msr))
1703                 return -ENODATA;
1704 
1705         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1706                                 &target->thread.tm_dscr, 0, sizeof(u64));
1707         return ret;
1708 }
1709 #endif  /* CONFIG_PPC_TRANSACTIONAL_MEM */
1710 
1711 #ifdef CONFIG_PPC64
1712 static int ppr_get(struct task_struct *target,
1713                       const struct user_regset *regset,
1714                       unsigned int pos, unsigned int count,
1715                       void *kbuf, void __user *ubuf)
1716 {
1717         int ret;
1718 
1719         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1720                                 &target->thread.ppr, 0, sizeof(u64));
1721         return ret;
1722 }
1723 
1724 static int ppr_set(struct task_struct *target,
1725                       const struct user_regset *regset,
1726                       unsigned int pos, unsigned int count,
1727                       const void *kbuf, const void __user *ubuf)
1728 {
1729         int ret;
1730 
1731         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1732                                 &target->thread.ppr, 0, sizeof(u64));
1733         return ret;
1734 }
1735 
1736 static int dscr_get(struct task_struct *target,
1737                       const struct user_regset *regset,
1738                       unsigned int pos, unsigned int count,
1739                       void *kbuf, void __user *ubuf)
1740 {
1741         int ret;
1742 
1743         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1744                                 &target->thread.dscr, 0, sizeof(u64));
1745         return ret;
1746 }
1747 static int dscr_set(struct task_struct *target,
1748                       const struct user_regset *regset,
1749                       unsigned int pos, unsigned int count,
1750                       const void *kbuf, const void __user *ubuf)
1751 {
1752         int ret;
1753 
1754         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1755                                 &target->thread.dscr, 0, sizeof(u64));
1756         return ret;
1757 }
1758 #endif
1759 #ifdef CONFIG_PPC_BOOK3S_64
1760 static int tar_get(struct task_struct *target,
1761                       const struct user_regset *regset,
1762                       unsigned int pos, unsigned int count,
1763                       void *kbuf, void __user *ubuf)
1764 {
1765         int ret;
1766 
1767         ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1768                                 &target->thread.tar, 0, sizeof(u64));
1769         return ret;
1770 }
1771 static int tar_set(struct task_struct *target,
1772                       const struct user_regset *regset,
1773                       unsigned int pos, unsigned int count,
1774                       const void *kbuf, const void __user *ubuf)
1775 {
1776         int ret;
1777 
1778         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1779                                 &target->thread.tar, 0, sizeof(u64));
1780         return ret;
1781 }
1782 
1783 static int ebb_active(struct task_struct *target,
1784                          const struct user_regset *regset)
1785 {
1786         if (!cpu_has_feature(CPU_FTR_ARCH_207S))
1787                 return -ENODEV;
1788 
1789         if (target->thread.used_ebb)
1790                 return regset->n;
1791 
1792         return 0;
1793 }
1794 
1795 static int ebb_get(struct task_struct *target,
1796                       const struct user_regset *regset,
1797                       unsigned int pos, unsigned int count,
1798                       void *kbuf, void __user *ubuf)
1799 {
1800         /* Build tests */
1801         BUILD_BUG_ON(TSO(ebbrr) + sizeof(unsigned long) != TSO(ebbhr));
1802         BUILD_BUG_ON(TSO(ebbhr) + sizeof(unsigned long) != TSO(bescr));
1803 
1804         if (!cpu_has_feature(CPU_FTR_ARCH_207S))
1805                 return -ENODEV;
1806 
1807         if (!target->thread.used_ebb)
1808                 return -ENODATA;
1809 
1810         return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1811                         &target->thread.ebbrr, 0, 3 * sizeof(unsigned long));
1812 }
1813 
1814 static int ebb_set(struct task_struct *target,
1815                       const struct user_regset *regset,
1816                       unsigned int pos, unsigned int count,
1817                       const void *kbuf, const void __user *ubuf)
1818 {
1819         int ret = 0;
1820 
1821         /* Build tests */
1822         BUILD_BUG_ON(TSO(ebbrr) + sizeof(unsigned long) != TSO(ebbhr));
1823         BUILD_BUG_ON(TSO(ebbhr) + sizeof(unsigned long) != TSO(bescr));
1824 
1825         if (!cpu_has_feature(CPU_FTR_ARCH_207S))
1826                 return -ENODEV;
1827 
1828         if (target->thread.used_ebb)
1829                 return -ENODATA;
1830 
1831         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1832                         &target->thread.ebbrr, 0, sizeof(unsigned long));
1833 
1834         if (!ret)
1835                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1836                         &target->thread.ebbhr, sizeof(unsigned long),
1837                         2 * sizeof(unsigned long));
1838 
1839         if (!ret)
1840                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1841                         &target->thread.bescr,
1842                         2 * sizeof(unsigned long), 3 * sizeof(unsigned long));
1843 
1844         return ret;
1845 }
1846 static int pmu_active(struct task_struct *target,
1847                          const struct user_regset *regset)
1848 {
1849         if (!cpu_has_feature(CPU_FTR_ARCH_207S))
1850                 return -ENODEV;
1851 
1852         return regset->n;
1853 }
1854 
1855 static int pmu_get(struct task_struct *target,
1856                       const struct user_regset *regset,
1857                       unsigned int pos, unsigned int count,
1858                       void *kbuf, void __user *ubuf)
1859 {
1860         /* Build tests */
1861         BUILD_BUG_ON(TSO(siar) + sizeof(unsigned long) != TSO(sdar));
1862         BUILD_BUG_ON(TSO(sdar) + sizeof(unsigned long) != TSO(sier));
1863         BUILD_BUG_ON(TSO(sier) + sizeof(unsigned long) != TSO(mmcr2));
1864         BUILD_BUG_ON(TSO(mmcr2) + sizeof(unsigned long) != TSO(mmcr0));
1865 
1866         if (!cpu_has_feature(CPU_FTR_ARCH_207S))
1867                 return -ENODEV;
1868 
1869         return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1870                         &target->thread.siar, 0,
1871                         5 * sizeof(unsigned long));
1872 }
1873 
1874 static int pmu_set(struct task_struct *target,
1875                       const struct user_regset *regset,
1876                       unsigned int pos, unsigned int count,
1877                       const void *kbuf, const void __user *ubuf)
1878 {
1879         int ret = 0;
1880 
1881         /* Build tests */
1882         BUILD_BUG_ON(TSO(siar) + sizeof(unsigned long) != TSO(sdar));
1883         BUILD_BUG_ON(TSO(sdar) + sizeof(unsigned long) != TSO(sier));
1884         BUILD_BUG_ON(TSO(sier) + sizeof(unsigned long) != TSO(mmcr2));
1885         BUILD_BUG_ON(TSO(mmcr2) + sizeof(unsigned long) != TSO(mmcr0));
1886 
1887         if (!cpu_has_feature(CPU_FTR_ARCH_207S))
1888                 return -ENODEV;
1889 
1890         ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1891                         &target->thread.siar, 0,
1892                         sizeof(unsigned long));
1893 
1894         if (!ret)
1895                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1896                         &target->thread.sdar, sizeof(unsigned long),
1897                         2 * sizeof(unsigned long));
1898 
1899         if (!ret)
1900                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1901                         &target->thread.sier, 2 * sizeof(unsigned long),
1902                         3 * sizeof(unsigned long));
1903 
1904         if (!ret)
1905                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1906                         &target->thread.mmcr2, 3 * sizeof(unsigned long),
1907                         4 * sizeof(unsigned long));
1908 
1909         if (!ret)
1910                 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
1911                         &target->thread.mmcr0, 4 * sizeof(unsigned long),
1912                         5 * sizeof(unsigned long));
1913         return ret;
1914 }
1915 #endif
1916 /*
1917  * These are our native regset flavors.
1918  */
1919 enum powerpc_regset {
1920         REGSET_GPR,
1921         REGSET_FPR,
1922 #ifdef CONFIG_ALTIVEC
1923         REGSET_VMX,
1924 #endif
1925 #ifdef CONFIG_VSX
1926         REGSET_VSX,
1927 #endif
1928 #ifdef CONFIG_SPE
1929         REGSET_SPE,
1930 #endif
1931 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1932         REGSET_TM_CGPR,         /* TM checkpointed GPR registers */
1933         REGSET_TM_CFPR,         /* TM checkpointed FPR registers */
1934         REGSET_TM_CVMX,         /* TM checkpointed VMX registers */
1935         REGSET_TM_CVSX,         /* TM checkpointed VSX registers */
1936         REGSET_TM_SPR,          /* TM specific SPR registers */
1937         REGSET_TM_CTAR,         /* TM checkpointed TAR register */
1938         REGSET_TM_CPPR,         /* TM checkpointed PPR register */
1939         REGSET_TM_CDSCR,        /* TM checkpointed DSCR register */
1940 #endif
1941 #ifdef CONFIG_PPC64
1942         REGSET_PPR,             /* PPR register */
1943         REGSET_DSCR,            /* DSCR register */
1944 #endif
1945 #ifdef CONFIG_PPC_BOOK3S_64
1946         REGSET_TAR,             /* TAR register */
1947         REGSET_EBB,             /* EBB registers */
1948         REGSET_PMR,             /* Performance Monitor Registers */
1949 #endif
1950 };
1951 
1952 static const struct user_regset native_regsets[] = {
1953         [REGSET_GPR] = {
1954                 .core_note_type = NT_PRSTATUS, .n = ELF_NGREG,
1955                 .size = sizeof(long), .align = sizeof(long),
1956                 .get = gpr_get, .set = gpr_set
1957         },
1958         [REGSET_FPR] = {
1959                 .core_note_type = NT_PRFPREG, .n = ELF_NFPREG,
1960                 .size = sizeof(double), .align = sizeof(double),
1961                 .get = fpr_get, .set = fpr_set
1962         },
1963 #ifdef CONFIG_ALTIVEC
1964         [REGSET_VMX] = {
1965                 .core_note_type = NT_PPC_VMX, .n = 34,
1966                 .size = sizeof(vector128), .align = sizeof(vector128),
1967                 .active = vr_active, .get = vr_get, .set = vr_set
1968         },
1969 #endif
1970 #ifdef CONFIG_VSX
1971         [REGSET_VSX] = {
1972                 .core_note_type = NT_PPC_VSX, .n = 32,
1973                 .size = sizeof(double), .align = sizeof(double),
1974                 .active = vsr_active, .get = vsr_get, .set = vsr_set
1975         },
1976 #endif
1977 #ifdef CONFIG_SPE
1978         [REGSET_SPE] = {
1979                 .core_note_type = NT_PPC_SPE, .n = 35,
1980                 .size = sizeof(u32), .align = sizeof(u32),
1981                 .active = evr_active, .get = evr_get, .set = evr_set
1982         },
1983 #endif
1984 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1985         [REGSET_TM_CGPR] = {
1986                 .core_note_type = NT_PPC_TM_CGPR, .n = ELF_NGREG,
1987                 .size = sizeof(long), .align = sizeof(long),
1988                 .active = tm_cgpr_active, .get = tm_cgpr_get, .set = tm_cgpr_set
1989         },
1990         [REGSET_TM_CFPR] = {
1991                 .core_note_type = NT_PPC_TM_CFPR, .n = ELF_NFPREG,
1992                 .size = sizeof(double), .align = sizeof(double),
1993                 .active = tm_cfpr_active, .get = tm_cfpr_get, .set = tm_cfpr_set
1994         },
1995         [REGSET_TM_CVMX] = {
1996                 .core_note_type = NT_PPC_TM_CVMX, .n = ELF_NVMX,
1997                 .size = sizeof(vector128), .align = sizeof(vector128),
1998                 .active = tm_cvmx_active, .get = tm_cvmx_get, .set = tm_cvmx_set
1999         },
2000         [REGSET_TM_CVSX] = {
2001                 .core_note_type = NT_PPC_TM_CVSX, .n = ELF_NVSX,
2002                 .size = sizeof(double), .align = sizeof(double),
2003                 .active = tm_cvsx_active, .get = tm_cvsx_get, .set = tm_cvsx_set
2004         },
2005         [REGSET_TM_SPR] = {
2006                 .core_note_type = NT_PPC_TM_SPR, .n = ELF_NTMSPRREG,
2007                 .size = sizeof(u64), .align = sizeof(u64),
2008                 .active = tm_spr_active, .get = tm_spr_get, .set = tm_spr_set
2009         },
2010         [REGSET_TM_CTAR] = {
2011                 .core_note_type = NT_PPC_TM_CTAR, .n = 1,
2012                 .size = sizeof(u64), .align = sizeof(u64),
2013                 .active = tm_tar_active, .get = tm_tar_get, .set = tm_tar_set
2014         },
2015         [REGSET_TM_CPPR] = {
2016                 .core_note_type = NT_PPC_TM_CPPR, .n = 1,
2017                 .size = sizeof(u64), .align = sizeof(u64),
2018                 .active = tm_ppr_active, .get = tm_ppr_get, .set = tm_ppr_set
2019         },
2020         [REGSET_TM_CDSCR] = {
2021                 .core_note_type = NT_PPC_TM_CDSCR, .n = 1,
2022                 .size = sizeof(u64), .align = sizeof(u64),
2023                 .active = tm_dscr_active, .get = tm_dscr_get, .set = tm_dscr_set
2024         },
2025 #endif
2026 #ifdef CONFIG_PPC64
2027         [REGSET_PPR] = {
2028                 .core_note_type = NT_PPC_PPR, .n = 1,
2029                 .size = sizeof(u64), .align = sizeof(u64),
2030                 .get = ppr_get, .set = ppr_set
2031         },
2032         [REGSET_DSCR] = {
2033                 .core_note_type = NT_PPC_DSCR, .n = 1,
2034                 .size = sizeof(u64), .align = sizeof(u64),
2035                 .get = dscr_get, .set = dscr_set
2036         },
2037 #endif
2038 #ifdef CONFIG_PPC_BOOK3S_64
2039         [REGSET_TAR] = {
2040                 .core_note_type = NT_PPC_TAR, .n = 1,
2041                 .size = sizeof(u64), .align = sizeof(u64),
2042                 .get = tar_get, .set = tar_set
2043         },
2044         [REGSET_EBB] = {
2045                 .core_note_type = NT_PPC_EBB, .n = ELF_NEBB,
2046                 .size = sizeof(u64), .align = sizeof(u64),
2047                 .active = ebb_active, .get = ebb_get, .set = ebb_set
2048         },
2049         [REGSET_PMR] = {
2050                 .core_note_type = NT_PPC_PMU, .n = ELF_NPMU,
2051                 .size = sizeof(u64), .align = sizeof(u64),
2052                 .active = pmu_active, .get = pmu_get, .set = pmu_set
2053         },
2054 #endif
2055 };
2056 
2057 static const struct user_regset_view user_ppc_native_view = {
2058         .name = UTS_MACHINE, .e_machine = ELF_ARCH, .ei_osabi = ELF_OSABI,
2059         .regsets = native_regsets, .n = ARRAY_SIZE(native_regsets)
2060 };
2061 
2062 #ifdef CONFIG_PPC64
2063 #include <linux/compat.h>
2064 
2065 static int gpr32_get_common(struct task_struct *target,
2066                      const struct user_regset *regset,
2067                      unsigned int pos, unsigned int count,
2068                             void *kbuf, void __user *ubuf, bool tm_active)
2069 {
2070         const unsigned long *regs = &target->thread.regs->gpr[0];
2071         const unsigned long *ckpt_regs;
2072         compat_ulong_t *k = kbuf;
2073         compat_ulong_t __user *u = ubuf;
2074         compat_ulong_t reg;
2075         int i;
2076 
2077 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
2078         ckpt_regs = &target->thread.ckpt_regs.gpr[0];
2079 #endif
2080         if (tm_active) {
2081                 regs = ckpt_regs;
2082         } else {
2083                 if (target->thread.regs == NULL)
2084                         return -EIO;
2085 
2086                 if (!FULL_REGS(target->thread.regs)) {
2087                         /*
2088                          * We have a partial register set.
2089                          * Fill 14-31 with bogus values.
2090                          */
2091                         for (i = 14; i < 32; i++)
2092                                 target->thread.regs->gpr[i] = NV_REG_POISON;
2093                 }
2094         }
2095 
2096         pos /= sizeof(reg);
2097         count /= sizeof(reg);
2098 
2099         if (kbuf)
2100                 for (; count > 0 && pos < PT_MSR; --count)
2101                         *k++ = regs[pos++];
2102         else
2103                 for (; count > 0 && pos < PT_MSR; --count)
2104                         if (__put_user((compat_ulong_t) regs[pos++], u++))
2105                                 return -EFAULT;
2106 
2107         if (count > 0 && pos == PT_MSR) {
2108                 reg = get_user_msr(target);
2109                 if (kbuf)
2110                         *k++ = reg;
2111                 else if (__put_user(reg, u++))
2112                         return -EFAULT;
2113                 ++pos;
2114                 --count;
2115         }
2116 
2117         if (kbuf)
2118                 for (; count > 0 && pos < PT_REGS_COUNT; --count)
2119                         *k++ = regs[pos++];
2120         else
2121                 for (; count > 0 && pos < PT_REGS_COUNT; --count)
2122                         if (__put_user((compat_ulong_t) regs[pos++], u++))
2123                                 return -EFAULT;
2124 
2125         kbuf = k;
2126         ubuf = u;
2127         pos *= sizeof(reg);
2128         count *= sizeof(reg);
2129         return user_regset_copyout_zero(&pos, &count, &kbuf, &ubuf,
2130                                         PT_REGS_COUNT * sizeof(reg), -1);
2131 }
2132 
2133 static int gpr32_set_common(struct task_struct *target,
2134                      const struct user_regset *regset,
2135                      unsigned int pos, unsigned int count,
2136                      const void *kbuf, const void __user *ubuf, bool tm_active)
2137 {
2138         unsigned long *regs = &target->thread.regs->gpr[0];
2139         unsigned long *ckpt_regs;
2140         const compat_ulong_t *k = kbuf;
2141         const compat_ulong_t __user *u = ubuf;
2142         compat_ulong_t reg;
2143 
2144 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
2145         ckpt_regs = &target->thread.ckpt_regs.gpr[0];
2146 #endif
2147 
2148         if (tm_active) {
2149                 regs = ckpt_regs;
2150         } else {
2151                 regs = &target->thread.regs->gpr[0];
2152 
2153                 if (target->thread.regs == NULL)
2154                         return -EIO;
2155 
2156                 CHECK_FULL_REGS(target->thread.regs);
2157         }
2158 
2159         pos /= sizeof(reg);
2160         count /= sizeof(reg);
2161 
2162         if (kbuf)
2163                 for (; count > 0 && pos < PT_MSR; --count)
2164                         regs[pos++] = *k++;
2165         else
2166                 for (; count > 0 && pos < PT_MSR; --count) {
2167                         if (__get_user(reg, u++))
2168                                 return -EFAULT;
2169                         regs[pos++] = reg;
2170                 }
2171 
2172 
2173         if (count > 0 && pos == PT_MSR) {
2174                 if (kbuf)
2175                         reg = *k++;
2176                 else if (__get_user(reg, u++))
2177                         return -EFAULT;
2178                 set_user_msr(target, reg);
2179                 ++pos;
2180                 --count;
2181         }
2182 
2183         if (kbuf) {
2184                 for (; count > 0 && pos <= PT_MAX_PUT_REG; --count)
2185                         regs[pos++] = *k++;
2186                 for (; count > 0 && pos < PT_TRAP; --count, ++pos)
2187                         ++k;
2188         } else {
2189                 for (; count > 0 && pos <= PT_MAX_PUT_REG; --count) {
2190                         if (__get_user(reg, u++))
2191                                 return -EFAULT;
2192                         regs[pos++] = reg;
2193                 }
2194                 for (; count > 0 && pos < PT_TRAP; --count, ++pos)
2195                         if (__get_user(reg, u++))
2196                                 return -EFAULT;
2197         }
2198 
2199         if (count > 0 && pos == PT_TRAP) {
2200                 if (kbuf)
2201                         reg = *k++;
2202                 else if (__get_user(reg, u++))
2203                         return -EFAULT;
2204                 set_user_trap(target, reg);
2205                 ++pos;
2206                 --count;
2207         }
2208 
2209         kbuf = k;
2210         ubuf = u;
2211         pos *= sizeof(reg);
2212         count *= sizeof(reg);
2213         return user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf,
2214                                          (PT_TRAP + 1) * sizeof(reg), -1);
2215 }
2216 
2217 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
2218 static int tm_cgpr32_get(struct task_struct *target,
2219                      const struct user_regset *regset,
2220                      unsigned int pos, unsigned int count,
2221                      void *kbuf, void __user *ubuf)
2222 {
2223         return gpr32_get_common(target, regset, pos, count, kbuf, ubuf, 1);
2224 }
2225 
2226 static int tm_cgpr32_set(struct task_struct *target,
2227                      const struct user_regset *regset,
2228                      unsigned int pos, unsigned int count,
2229                      const void *kbuf, const void __user *ubuf)
2230 {
2231         return gpr32_set_common(target, regset, pos, count, kbuf, ubuf, 1);
2232 }
2233 #endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
2234 
2235 static int gpr32_get(struct task_struct *target,
2236                      const struct user_regset *regset,
2237                      unsigned int pos, unsigned int count,
2238                      void *kbuf, void __user *ubuf)
2239 {
2240         return gpr32_get_common(target, regset, pos, count, kbuf, ubuf, 0);
2241 }
2242 
2243 static int gpr32_set(struct task_struct *target,
2244                      const struct user_regset *regset,
2245                      unsigned int pos, unsigned int count,
2246                      const void *kbuf, const void __user *ubuf)
2247 {
2248         return gpr32_set_common(target, regset, pos, count, kbuf, ubuf, 0);
2249 }
2250 
2251 /*
2252  * These are the regset flavors matching the CONFIG_PPC32 native set.
2253  */
2254 static const struct user_regset compat_regsets[] = {
2255         [REGSET_GPR] = {
2256                 .core_note_type = NT_PRSTATUS, .n = ELF_NGREG,
2257                 .size = sizeof(compat_long_t), .align = sizeof(compat_long_t),
2258                 .get = gpr32_get, .set = gpr32_set
2259         },
2260         [REGSET_FPR] = {
2261                 .core_note_type = NT_PRFPREG, .n = ELF_NFPREG,
2262                 .size = sizeof(double), .align = sizeof(double),
2263                 .get = fpr_get, .set = fpr_set
2264         },
2265 #ifdef CONFIG_ALTIVEC
2266         [REGSET_VMX] = {
2267                 .core_note_type = NT_PPC_VMX, .n = 34,
2268                 .size = sizeof(vector128), .align = sizeof(vector128),
2269                 .active = vr_active, .get = vr_get, .set = vr_set
2270         },
2271 #endif
2272 #ifdef CONFIG_SPE
2273         [REGSET_SPE] = {
2274                 .core_note_type = NT_PPC_SPE, .n = 35,
2275                 .size = sizeof(u32), .align = sizeof(u32),
2276                 .active = evr_active, .get = evr_get, .set = evr_set
2277         },
2278 #endif
2279 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
2280         [REGSET_TM_CGPR] = {
2281                 .core_note_type = NT_PPC_TM_CGPR, .n = ELF_NGREG,
2282                 .size = sizeof(long), .align = sizeof(long),
2283                 .active = tm_cgpr_active,
2284                 .get = tm_cgpr32_get, .set = tm_cgpr32_set
2285         },
2286         [REGSET_TM_CFPR] = {
2287                 .core_note_type = NT_PPC_TM_CFPR, .n = ELF_NFPREG,
2288                 .size = sizeof(double), .align = sizeof(double),
2289                 .active = tm_cfpr_active, .get = tm_cfpr_get, .set = tm_cfpr_set
2290         },
2291         [REGSET_TM_CVMX] = {
2292                 .core_note_type = NT_PPC_TM_CVMX, .n = ELF_NVMX,
2293                 .size = sizeof(vector128), .align = sizeof(vector128),
2294                 .active = tm_cvmx_active, .get = tm_cvmx_get, .set = tm_cvmx_set
2295         },
2296         [REGSET_TM_CVSX] = {
2297                 .core_note_type = NT_PPC_TM_CVSX, .n = ELF_NVSX,
2298                 .size = sizeof(double), .align = sizeof(double),
2299                 .active = tm_cvsx_active, .get = tm_cvsx_get, .set = tm_cvsx_set
2300         },
2301         [REGSET_TM_SPR] = {
2302                 .core_note_type = NT_PPC_TM_SPR, .n = ELF_NTMSPRREG,
2303                 .size = sizeof(u64), .align = sizeof(u64),
2304                 .active = tm_spr_active, .get = tm_spr_get, .set = tm_spr_set
2305         },
2306         [REGSET_TM_CTAR] = {
2307                 .core_note_type = NT_PPC_TM_CTAR, .n = 1,
2308                 .size = sizeof(u64), .align = sizeof(u64),
2309                 .active = tm_tar_active, .get = tm_tar_get, .set = tm_tar_set
2310         },
2311         [REGSET_TM_CPPR] = {
2312                 .core_note_type = NT_PPC_TM_CPPR, .n = 1,
2313                 .size = sizeof(u64), .align = sizeof(u64),
2314                 .active = tm_ppr_active, .get = tm_ppr_get, .set = tm_ppr_set
2315         },
2316         [REGSET_TM_CDSCR] = {
2317                 .core_note_type = NT_PPC_TM_CDSCR, .n = 1,
2318                 .size = sizeof(u64), .align = sizeof(u64),
2319                 .active = tm_dscr_active, .get = tm_dscr_get, .set = tm_dscr_set
2320         },
2321 #endif
2322 #ifdef CONFIG_PPC64
2323         [REGSET_PPR] = {
2324                 .core_note_type = NT_PPC_PPR, .n = 1,
2325                 .size = sizeof(u64), .align = sizeof(u64),
2326                 .get = ppr_get, .set = ppr_set
2327         },
2328         [REGSET_DSCR] = {
2329                 .core_note_type = NT_PPC_DSCR, .n = 1,
2330                 .size = sizeof(u64), .align = sizeof(u64),
2331                 .get = dscr_get, .set = dscr_set
2332         },
2333 #endif
2334 #ifdef CONFIG_PPC_BOOK3S_64
2335         [REGSET_TAR] = {
2336                 .core_note_type = NT_PPC_TAR, .n = 1,
2337                 .size = sizeof(u64), .align = sizeof(u64),
2338                 .get = tar_get, .set = tar_set
2339         },
2340         [REGSET_EBB] = {
2341                 .core_note_type = NT_PPC_EBB, .n = ELF_NEBB,
2342                 .size = sizeof(u64), .align = sizeof(u64),
2343                 .active = ebb_active, .get = ebb_get, .set = ebb_set
2344         },
2345 #endif
2346 };
2347 
2348 static const struct user_regset_view user_ppc_compat_view = {
2349         .name = "ppc", .e_machine = EM_PPC, .ei_osabi = ELF_OSABI,
2350         .regsets = compat_regsets, .n = ARRAY_SIZE(compat_regsets)
2351 };
2352 #endif  /* CONFIG_PPC64 */
2353 
2354 const struct user_regset_view *task_user_regset_view(struct task_struct *task)
2355 {
2356 #ifdef CONFIG_PPC64
2357         if (test_tsk_thread_flag(task, TIF_32BIT))
2358                 return &user_ppc_compat_view;
2359 #endif
2360         return &user_ppc_native_view;
2361 }
2362 
2363 
2364 void user_enable_single_step(struct task_struct *task)
2365 {
2366         struct pt_regs *regs = task->thread.regs;
2367 
2368         if (regs != NULL) {
2369 #ifdef CONFIG_PPC_ADV_DEBUG_REGS
2370                 task->thread.debug.dbcr0 &= ~DBCR0_BT;
2371                 task->thread.debug.dbcr0 |= DBCR0_IDM | DBCR0_IC;
2372                 regs->msr |= MSR_DE;
2373 #else
2374                 regs->msr &= ~MSR_BE;
2375                 regs->msr |= MSR_SE;
2376 #endif
2377         }
2378         set_tsk_thread_flag(task, TIF_SINGLESTEP);
2379 }
2380 
2381 void user_enable_block_step(struct task_struct *task)
2382 {
2383         struct pt_regs *regs = task->thread.regs;
2384 
2385         if (regs != NULL) {
2386 #ifdef CONFIG_PPC_ADV_DEBUG_REGS
2387                 task->thread.debug.dbcr0 &= ~DBCR0_IC;
2388                 task->thread.debug.dbcr0 = DBCR0_IDM | DBCR0_BT;
2389                 regs->msr |= MSR_DE;
2390 #else
2391                 regs->msr &= ~MSR_SE;
2392                 regs->msr |= MSR_BE;
2393 #endif
2394         }
2395         set_tsk_thread_flag(task, TIF_SINGLESTEP);
2396 }
2397 
2398 void user_disable_single_step(struct task_struct *task)
2399 {
2400         struct pt_regs *regs = task->thread.regs;
2401 
2402         if (regs != NULL) {
2403 #ifdef CONFIG_PPC_ADV_DEBUG_REGS
2404                 /*
2405                  * The logic to disable single stepping should be as
2406                  * simple as turning off the Instruction Complete flag.
2407                  * And, after doing so, if all debug flags are off, turn
2408                  * off DBCR0(IDM) and MSR(DE) .... Torez
2409                  */
2410                 task->thread.debug.dbcr0 &= ~(DBCR0_IC|DBCR0_BT);
2411                 /*
2412                  * Test to see if any of the DBCR_ACTIVE_EVENTS bits are set.
2413                  */
2414                 if (!DBCR_ACTIVE_EVENTS(task->thread.debug.dbcr0,
2415                                         task->thread.debug.dbcr1)) {
2416                         /*
2417                          * All debug events were off.....
2418                          */
2419                         task->thread.debug.dbcr0 &= ~DBCR0_IDM;
2420                         regs->msr &= ~MSR_DE;
2421                 }
2422 #else
2423                 regs->msr &= ~(MSR_SE | MSR_BE);
2424 #endif
2425         }
2426         clear_tsk_thread_flag(task, TIF_SINGLESTEP);
2427 }
2428 
2429 #ifdef CONFIG_HAVE_HW_BREAKPOINT
2430 void ptrace_triggered(struct perf_event *bp,
2431                       struct perf_sample_data *data, struct pt_regs *regs)
2432 {
2433         struct perf_event_attr attr;
2434 
2435         /*
2436          * Disable the breakpoint request here since ptrace has defined a
2437          * one-shot behaviour for breakpoint exceptions in PPC64.
2438          * The SIGTRAP signal is generated automatically for us in do_dabr().
2439          * We don't have to do anything about that here
2440          */
2441         attr = bp->attr;
2442         attr.disabled = true;
2443         modify_user_hw_breakpoint(bp, &attr);
2444 }
2445 #endif /* CONFIG_HAVE_HW_BREAKPOINT */
2446 
2447 static int ptrace_set_debugreg(struct task_struct *task, unsigned long addr,
2448                                unsigned long data)
2449 {
2450 #ifdef CONFIG_HAVE_HW_BREAKPOINT
2451         int ret;
2452         struct thread_struct *thread = &(task->thread);
2453         struct perf_event *bp;
2454         struct perf_event_attr attr;
2455 #endif /* CONFIG_HAVE_HW_BREAKPOINT */
2456 #ifndef CONFIG_PPC_ADV_DEBUG_REGS
2457         struct arch_hw_breakpoint hw_brk;
2458 #endif
2459 
2460         /* For ppc64 we support one DABR and no IABR's at the moment (ppc64).
2461          *  For embedded processors we support one DAC and no IAC's at the
2462          *  moment.
2463          */
2464         if (addr > 0)
2465                 return -EINVAL;
2466 
2467         /* The bottom 3 bits in dabr are flags */
2468         if ((data & ~0x7UL) >= TASK_SIZE)
2469                 return -EIO;
2470 
2471 #ifndef CONFIG_PPC_ADV_DEBUG_REGS
2472         /* For processors using DABR (i.e. 970), the bottom 3 bits are flags.
2473          *  It was assumed, on previous implementations, that 3 bits were
2474          *  passed together with the data address, fitting the design of the
2475          *  DABR register, as follows:
2476          *
2477          *  bit 0: Read flag
2478          *  bit 1: Write flag
2479          *  bit 2: Breakpoint translation
2480          *
2481          *  Thus, we use them here as so.
2482          */
2483 
2484         /* Ensure breakpoint translation bit is set */
2485         if (data && !(data & HW_BRK_TYPE_TRANSLATE))
2486                 return -EIO;
2487         hw_brk.address = data & (~HW_BRK_TYPE_DABR);
2488         hw_brk.type = (data & HW_BRK_TYPE_DABR) | HW_BRK_TYPE_PRIV_ALL;
2489         hw_brk.len = 8;
2490 #ifdef CONFIG_HAVE_HW_BREAKPOINT
2491         bp = thread->ptrace_bps[0];
2492         if ((!data) || !(hw_brk.type & HW_BRK_TYPE_RDWR)) {
2493                 if (bp) {
2494                         unregister_hw_breakpoint(bp);
2495                         thread->ptrace_bps[0] = NULL;
2496                 }
2497                 return 0;
2498         }
2499         if (bp) {
2500                 attr = bp->attr;
2501                 attr.bp_addr = hw_brk.address;
2502                 arch_bp_generic_fields(hw_brk.type, &attr.bp_type);
2503 
2504                 /* Enable breakpoint */
2505                 attr.disabled = false;
2506 
2507                 ret =  modify_user_hw_breakpoint(bp, &attr);
2508                 if (ret) {
2509                         return ret;
2510                 }
2511                 thread->ptrace_bps[0] = bp;
2512                 thread->hw_brk = hw_brk;
2513                 return 0;
2514         }
2515 
2516         /* Create a new breakpoint request if one doesn't exist already */
2517         hw_breakpoint_init(&attr);
2518         attr.bp_addr = hw_brk.address;
2519         arch_bp_generic_fields(hw_brk.type,
2520                                &attr.bp_type);
2521 
2522         thread->ptrace_bps[0] = bp = register_user_hw_breakpoint(&attr,
2523                                                ptrace_triggered, NULL, task);
2524         if (IS_ERR(bp)) {
2525                 thread->ptrace_bps[0] = NULL;
2526                 return PTR_ERR(bp);
2527         }
2528 
2529 #endif /* CONFIG_HAVE_HW_BREAKPOINT */
2530         task->thread.hw_brk = hw_brk;
2531 #else /* CONFIG_PPC_ADV_DEBUG_REGS */
2532         /* As described above, it was assumed 3 bits were passed with the data
2533          *  address, but we will assume only the mode bits will be passed
2534          *  as to not cause alignment restrictions for DAC-based processors.
2535          */
2536 
2537         /* DAC's hold the whole address without any mode flags */
2538         task->thread.debug.dac1 = data & ~0x3UL;
2539 
2540         if (task->thread.debug.dac1 == 0) {
2541                 dbcr_dac(task) &= ~(DBCR_DAC1R | DBCR_DAC1W);
2542                 if (!DBCR_ACTIVE_EVENTS(task->thread.debug.dbcr0,
2543                                         task->thread.debug.dbcr1)) {
2544                         task->thread.regs->msr &= ~MSR_DE;
2545                         task->thread.debug.dbcr0 &= ~DBCR0_IDM;
2546                 }
2547                 return 0;
2548         }
2549 
2550         /* Read or Write bits must be set */
2551 
2552         if (!(data & 0x3UL))
2553                 return -EINVAL;
2554 
2555         /* Set the Internal Debugging flag (IDM bit 1) for the DBCR0
2556            register */
2557         task->thread.debug.dbcr0 |= DBCR0_IDM;
2558 
2559         /* Check for write and read flags and set DBCR0
2560            accordingly */
2561         dbcr_dac(task) &= ~(DBCR_DAC1R|DBCR_DAC1W);
2562         if (data & 0x1UL)
2563                 dbcr_dac(task) |= DBCR_DAC1R;
2564         if (data & 0x2UL)
2565                 dbcr_dac(task) |= DBCR_DAC1W;
2566         task->thread.regs->msr |= MSR_DE;
2567 #endif /* CONFIG_PPC_ADV_DEBUG_REGS */
2568         return 0;
2569 }
2570 
2571 /*
2572  * Called by kernel/ptrace.c when detaching..
2573  *
2574  * Make sure single step bits etc are not set.
2575  */
2576 void ptrace_disable(struct task_struct *child)
2577 {
2578         /* make sure the single step bit is not set. */
2579         user_disable_single_step(child);
2580 }
2581 
2582 #ifdef CONFIG_PPC_ADV_DEBUG_REGS
2583 static long set_instruction_bp(struct task_struct *child,
2584                               struct ppc_hw_breakpoint *bp_info)
2585 {
2586         int slot;
2587         int slot1_in_use = ((child->thread.debug.dbcr0 & DBCR0_IAC1) != 0);
2588         int slot2_in_use = ((child->thread.debug.dbcr0 & DBCR0_IAC2) != 0);
2589         int slot3_in_use = ((child->thread.debug.dbcr0 & DBCR0_IAC3) != 0);
2590         int slot4_in_use = ((child->thread.debug.dbcr0 & DBCR0_IAC4) != 0);
2591 
2592         if (dbcr_iac_range(child) & DBCR_IAC12MODE)
2593                 slot2_in_use = 1;
2594         if (dbcr_iac_range(child) & DBCR_IAC34MODE)
2595                 slot4_in_use = 1;
2596 
2597         if (bp_info->addr >= TASK_SIZE)
2598                 return -EIO;
2599 
2600         if (bp_info->addr_mode != PPC_BREAKPOINT_MODE_EXACT) {
2601 
2602                 /* Make sure range is valid. */
2603                 if (bp_info->addr2 >= TASK_SIZE)
2604                         return -EIO;
2605 
2606                 /* We need a pair of IAC regsisters */
2607                 if ((!slot1_in_use) && (!slot2_in_use)) {
2608                         slot = 1;
2609                         child->thread.debug.iac1 = bp_info->addr;
2610                         child->thread.debug.iac2 = bp_info->addr2;
2611                         child->thread.debug.dbcr0 |= DBCR0_IAC1;
2612                         if (bp_info->addr_mode ==
2613                                         PPC_BREAKPOINT_MODE_RANGE_EXCLUSIVE)
2614                                 dbcr_iac_range(child) |= DBCR_IAC12X;
2615                         else
2616                                 dbcr_iac_range(child) |= DBCR_IAC12I;
2617 #if CONFIG_PPC_ADV_DEBUG_IACS > 2
2618                 } else if ((!slot3_in_use) && (!slot4_in_use)) {
2619                         slot = 3;
2620                         child->thread.debug.iac3 = bp_info->addr;
2621                         child->thread.debug.iac4 = bp_info->addr2;
2622                         child->thread.debug.dbcr0 |= DBCR0_IAC3;
2623                         if (bp_info->addr_mode ==
2624                                         PPC_BREAKPOINT_MODE_RANGE_EXCLUSIVE)
2625                                 dbcr_iac_range(child) |= DBCR_IAC34X;
2626                         else
2627                                 dbcr_iac_range(child) |= DBCR_IAC34I;
2628 #endif
2629                 } else
2630                         return -ENOSPC;
2631         } else {
2632                 /* We only need one.  If possible leave a pair free in
2633                  * case a range is needed later
2634                  */
2635                 if (!slot1_in_use) {
2636                         /*
2637                          * Don't use iac1 if iac1-iac2 are free and either
2638                          * iac3 or iac4 (but not both) are free
2639                          */
2640                         if (slot2_in_use || (slot3_in_use == slot4_in_use)) {
2641                                 slot = 1;
2642                                 child->thread.debug.iac1 = bp_info->addr;
2643                                 child->thread.debug.dbcr0 |= DBCR0_IAC1;
2644                                 goto out;
2645                         }
2646                 }
2647                 if (!slot2_in_use) {
2648                         slot = 2;
2649                         child->thread.debug.iac2 = bp_info->addr;
2650                         child->thread.debug.dbcr0 |= DBCR0_IAC2;
2651 #if CONFIG_PPC_ADV_DEBUG_IACS > 2
2652                 } else if (!slot3_in_use) {
2653                         slot = 3;
2654                         child->thread.debug.iac3 = bp_info->addr;
2655                         child->thread.debug.dbcr0 |= DBCR0_IAC3;
2656                 } else if (!slot4_in_use) {
2657                         slot = 4;
2658                         child->thread.debug.iac4 = bp_info->addr;
2659                         child->thread.debug.dbcr0 |= DBCR0_IAC4;
2660 #endif
2661                 } else
2662                         return -ENOSPC;
2663         }
2664 out:
2665         child->thread.debug.dbcr0 |= DBCR0_IDM;
2666         child->thread.regs->msr |= MSR_DE;
2667 
2668         return slot;
2669 }
2670 
2671 static int del_instruction_bp(struct task_struct *child, int slot)
2672 {
2673         switch (slot) {
2674         case 1:
2675                 if ((child->thread.debug.dbcr0 & DBCR0_IAC1) == 0)
2676                         return -ENOENT;
2677 
2678                 if (dbcr_iac_range(child) & DBCR_IAC12MODE) {
2679                         /* address range - clear slots 1 & 2 */
2680                         child->thread.debug.iac2 = 0;
2681                         dbcr_iac_range(child) &= ~DBCR_IAC12MODE;
2682                 }
2683                 child->thread.debug.iac1 = 0;
2684                 child->thread.debug.dbcr0 &= ~DBCR0_IAC1;
2685                 break;
2686         case 2:
2687                 if ((child->thread.debug.dbcr0 & DBCR0_IAC2) == 0)
2688                         return -ENOENT;
2689 
2690                 if (dbcr_iac_range(child) & DBCR_IAC12MODE)
2691                         /* used in a range */
2692                         return -EINVAL;
2693                 child->thread.debug.iac2 = 0;
2694                 child->thread.debug.dbcr0 &= ~DBCR0_IAC2;
2695                 break;
2696 #if CONFIG_PPC_ADV_DEBUG_IACS > 2
2697         case 3:
2698                 if ((child->thread.debug.dbcr0 & DBCR0_IAC3) == 0)
2699                         return -ENOENT;
2700 
2701                 if (dbcr_iac_range(child) & DBCR_IAC34MODE) {
2702                         /* address range - clear slots 3 & 4 */
2703                         child->thread.debug.iac4 = 0;
2704                         dbcr_iac_range(child) &= ~DBCR_IAC34MODE;
2705                 }
2706                 child->thread.debug.iac3 = 0;
2707                 child->thread.debug.dbcr0 &= ~DBCR0_IAC3;
2708                 break;
2709         case 4:
2710                 if ((child->thread.debug.dbcr0 & DBCR0_IAC4) == 0)
2711                         return -ENOENT;
2712 
2713                 if (dbcr_iac_range(child) & DBCR_IAC34MODE)
2714                         /* Used in a range */
2715                         return -EINVAL;
2716                 child->thread.debug.iac4 = 0;
2717                 child->thread.debug.dbcr0 &= ~DBCR0_IAC4;
2718                 break;
2719 #endif
2720         default:
2721                 return -EINVAL;
2722         }
2723         return 0;
2724 }
2725 
2726 static int set_dac(struct task_struct *child, struct ppc_hw_breakpoint *bp_info)
2727 {
2728         int byte_enable =
2729                 (bp_info->condition_mode >> PPC_BREAKPOINT_CONDITION_BE_SHIFT)
2730                 & 0xf;
2731         int condition_mode =
2732                 bp_info->condition_mode & PPC_BREAKPOINT_CONDITION_MODE;
2733         int slot;
2734 
2735         if (byte_enable && (condition_mode == 0))
2736                 return -EINVAL;
2737 
2738         if (bp_info->addr >= TASK_SIZE)
2739                 return -EIO;
2740 
2741         if ((dbcr_dac(child) & (DBCR_DAC1R | DBCR_DAC1W)) == 0) {
2742                 slot = 1;
2743                 if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_READ)
2744                         dbcr_dac(child) |= DBCR_DAC1R;
2745                 if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_WRITE)
2746                         dbcr_dac(child) |= DBCR_DAC1W;
2747                 child->thread.debug.dac1 = (unsigned long)bp_info->addr;
2748 #if CONFIG_PPC_ADV_DEBUG_DVCS > 0
2749                 if (byte_enable) {
2750                         child->thread.debug.dvc1 =
2751                                 (unsigned long)bp_info->condition_value;
2752                         child->thread.debug.dbcr2 |=
2753                                 ((byte_enable << DBCR2_DVC1BE_SHIFT) |
2754                                  (condition_mode << DBCR2_DVC1M_SHIFT));
2755                 }
2756 #endif
2757 #ifdef CONFIG_PPC_ADV_DEBUG_DAC_RANGE
2758         } else if (child->thread.debug.dbcr2 & DBCR2_DAC12MODE) {
2759                 /* Both dac1 and dac2 are part of a range */
2760                 return -ENOSPC;
2761 #endif
2762         } else if ((dbcr_dac(child) & (DBCR_DAC2R | DBCR_DAC2W)) == 0) {
2763                 slot = 2;
2764                 if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_READ)
2765                         dbcr_dac(child) |= DBCR_DAC2R;
2766                 if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_WRITE)
2767                         dbcr_dac(child) |= DBCR_DAC2W;
2768                 child->thread.debug.dac2 = (unsigned long)bp_info->addr;
2769 #if CONFIG_PPC_ADV_DEBUG_DVCS > 0
2770                 if (byte_enable) {
2771                         child->thread.debug.dvc2 =
2772                                 (unsigned long)bp_info->condition_value;
2773                         child->thread.debug.dbcr2 |=
2774                                 ((byte_enable << DBCR2_DVC2BE_SHIFT) |
2775                                  (condition_mode << DBCR2_DVC2M_SHIFT));
2776                 }
2777 #endif
2778         } else
2779                 return -ENOSPC;
2780         child->thread.debug.dbcr0 |= DBCR0_IDM;
2781         child->thread.regs->msr |= MSR_DE;
2782 
2783         return slot + 4;
2784 }
2785 
2786 static int del_dac(struct task_struct *child, int slot)
2787 {
2788         if (slot == 1) {
2789                 if ((dbcr_dac(child) & (DBCR_DAC1R | DBCR_DAC1W)) == 0)
2790                         return -ENOENT;
2791 
2792                 child->thread.debug.dac1 = 0;
2793                 dbcr_dac(child) &= ~(DBCR_DAC1R | DBCR_DAC1W);
2794 #ifdef CONFIG_PPC_ADV_DEBUG_DAC_RANGE
2795                 if (child->thread.debug.dbcr2 & DBCR2_DAC12MODE) {
2796                         child->thread.debug.dac2 = 0;
2797                         child->thread.debug.dbcr2 &= ~DBCR2_DAC12MODE;
2798                 }
2799                 child->thread.debug.dbcr2 &= ~(DBCR2_DVC1M | DBCR2_DVC1BE);
2800 #endif
2801 #if CONFIG_PPC_ADV_DEBUG_DVCS > 0
2802                 child->thread.debug.dvc1 = 0;
2803 #endif
2804         } else if (slot == 2) {
2805                 if ((dbcr_dac(child) & (DBCR_DAC2R | DBCR_DAC2W)) == 0)
2806                         return -ENOENT;
2807 
2808 #ifdef CONFIG_PPC_ADV_DEBUG_DAC_RANGE
2809                 if (child->thread.debug.dbcr2 & DBCR2_DAC12MODE)
2810                         /* Part of a range */
2811                         return -EINVAL;
2812                 child->thread.debug.dbcr2 &= ~(DBCR2_DVC2M | DBCR2_DVC2BE);
2813 #endif
2814 #if CONFIG_PPC_ADV_DEBUG_DVCS > 0
2815                 child->thread.debug.dvc2 = 0;
2816 #endif
2817                 child->thread.debug.dac2 = 0;
2818                 dbcr_dac(child) &= ~(DBCR_DAC2R | DBCR_DAC2W);
2819         } else
2820                 return -EINVAL;
2821 
2822         return 0;
2823 }
2824 #endif /* CONFIG_PPC_ADV_DEBUG_REGS */
2825 
2826 #ifdef CONFIG_PPC_ADV_DEBUG_DAC_RANGE
2827 static int set_dac_range(struct task_struct *child,
2828                          struct ppc_hw_breakpoint *bp_info)
2829 {
2830         int mode = bp_info->addr_mode & PPC_BREAKPOINT_MODE_MASK;
2831 
2832         /* We don't allow range watchpoints to be used with DVC */
2833         if (bp_info->condition_mode)
2834                 return -EINVAL;
2835 
2836         /*
2837          * Best effort to verify the address range.  The user/supervisor bits
2838          * prevent trapping in kernel space, but let's fail on an obvious bad
2839          * range.  The simple test on the mask is not fool-proof, and any
2840          * exclusive range will spill over into kernel space.
2841          */
2842         if (bp_info->addr >= TASK_SIZE)
2843                 return -EIO;
2844         if (mode == PPC_BREAKPOINT_MODE_MASK) {
2845                 /*
2846                  * dac2 is a bitmask.  Don't allow a mask that makes a
2847                  * kernel space address from a valid dac1 value
2848                  */
2849                 if (~((unsigned long)bp_info->addr2) >= TASK_SIZE)
2850                         return -EIO;
2851         } else {
2852                 /*
2853                  * For range breakpoints, addr2 must also be a valid address
2854                  */
2855                 if (bp_info->addr2 >= TASK_SIZE)
2856                         return -EIO;
2857         }
2858 
2859         if (child->thread.debug.dbcr0 &
2860             (DBCR0_DAC1R | DBCR0_DAC1W | DBCR0_DAC2R | DBCR0_DAC2W))
2861                 return -ENOSPC;
2862 
2863         if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_READ)
2864                 child->thread.debug.dbcr0 |= (DBCR0_DAC1R | DBCR0_IDM);
2865         if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_WRITE)
2866                 child->thread.debug.dbcr0 |= (DBCR0_DAC1W | DBCR0_IDM);
2867         child->thread.debug.dac1 = bp_info->addr;
2868         child->thread.debug.dac2 = bp_info->addr2;
2869         if (mode == PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE)
2870                 child->thread.debug.dbcr2  |= DBCR2_DAC12M;
2871         else if (mode == PPC_BREAKPOINT_MODE_RANGE_EXCLUSIVE)
2872                 child->thread.debug.dbcr2  |= DBCR2_DAC12MX;
2873         else    /* PPC_BREAKPOINT_MODE_MASK */
2874                 child->thread.debug.dbcr2  |= DBCR2_DAC12MM;
2875         child->thread.regs->msr |= MSR_DE;
2876 
2877         return 5;
2878 }
2879 #endif /* CONFIG_PPC_ADV_DEBUG_DAC_RANGE */
2880 
2881 static long ppc_set_hwdebug(struct task_struct *child,
2882                      struct ppc_hw_breakpoint *bp_info)
2883 {
2884 #ifdef CONFIG_HAVE_HW_BREAKPOINT
2885         int len = 0;
2886         struct thread_struct *thread = &(child->thread);
2887         struct perf_event *bp;
2888         struct perf_event_attr attr;
2889 #endif /* CONFIG_HAVE_HW_BREAKPOINT */
2890 #ifndef CONFIG_PPC_ADV_DEBUG_REGS
2891         struct arch_hw_breakpoint brk;
2892 #endif
2893 
2894         if (bp_info->version != 1)
2895                 return -ENOTSUPP;
2896 #ifdef CONFIG_PPC_ADV_DEBUG_REGS
2897         /*
2898          * Check for invalid flags and combinations
2899          */
2900         if ((bp_info->trigger_type == 0) ||
2901             (bp_info->trigger_type & ~(PPC_BREAKPOINT_TRIGGER_EXECUTE |
2902                                        PPC_BREAKPOINT_TRIGGER_RW)) ||
2903             (bp_info->addr_mode & ~PPC_BREAKPOINT_MODE_MASK) ||
2904             (bp_info->condition_mode &
2905              ~(PPC_BREAKPOINT_CONDITION_MODE |
2906                PPC_BREAKPOINT_CONDITION_BE_ALL)))
2907                 return -EINVAL;
2908 #if CONFIG_PPC_ADV_DEBUG_DVCS == 0
2909         if (bp_info->condition_mode != PPC_BREAKPOINT_CONDITION_NONE)
2910                 return -EINVAL;
2911 #endif
2912 
2913         if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_EXECUTE) {
2914                 if ((bp_info->trigger_type != PPC_BREAKPOINT_TRIGGER_EXECUTE) ||
2915                     (bp_info->condition_mode != PPC_BREAKPOINT_CONDITION_NONE))
2916                         return -EINVAL;
2917                 return set_instruction_bp(child, bp_info);
2918         }
2919         if (bp_info->addr_mode == PPC_BREAKPOINT_MODE_EXACT)
2920                 return set_dac(child, bp_info);
2921 
2922 #ifdef CONFIG_PPC_ADV_DEBUG_DAC_RANGE
2923         return set_dac_range(child, bp_info);
2924 #else
2925         return -EINVAL;
2926 #endif
2927 #else /* !CONFIG_PPC_ADV_DEBUG_DVCS */
2928         /*
2929          * We only support one data breakpoint
2930          */
2931         if ((bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_RW) == 0 ||
2932             (bp_info->trigger_type & ~PPC_BREAKPOINT_TRIGGER_RW) != 0 ||
2933             bp_info->condition_mode != PPC_BREAKPOINT_CONDITION_NONE)
2934                 return -EINVAL;
2935 
2936         if ((unsigned long)bp_info->addr >= TASK_SIZE)
2937                 return -EIO;
2938 
2939         brk.address = bp_info->addr & ~7UL;
2940         brk.type = HW_BRK_TYPE_TRANSLATE;
2941         brk.len = 8;
2942         if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_READ)
2943                 brk.type |= HW_BRK_TYPE_READ;
2944         if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_WRITE)
2945                 brk.type |= HW_BRK_TYPE_WRITE;
2946 #ifdef CONFIG_HAVE_HW_BREAKPOINT
2947         /*
2948          * Check if the request is for 'range' breakpoints. We can
2949          * support it if range < 8 bytes.
2950          */
2951         if (bp_info->addr_mode == PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE)
2952                 len = bp_info->addr2 - bp_info->addr;
2953         else if (bp_info->addr_mode == PPC_BREAKPOINT_MODE_EXACT)
2954                 len = 1;
2955         else
2956                 return -EINVAL;
2957         bp = thread->ptrace_bps[0];
2958         if (bp)
2959                 return -ENOSPC;
2960 
2961         /* Create a new breakpoint request if one doesn't exist already */
2962         hw_breakpoint_init(&attr);
2963         attr.bp_addr = (unsigned long)bp_info->addr & ~HW_BREAKPOINT_ALIGN;
2964         attr.bp_len = len;
2965         arch_bp_generic_fields(brk.type, &attr.bp_type);
2966 
2967         thread->ptrace_bps[0] = bp = register_user_hw_breakpoint(&attr,
2968                                                ptrace_triggered, NULL, child);
2969         if (IS_ERR(bp)) {
2970                 thread->ptrace_bps[0] = NULL;
2971                 return PTR_ERR(bp);
2972         }
2973 
2974         return 1;
2975 #endif /* CONFIG_HAVE_HW_BREAKPOINT */
2976 
2977         if (bp_info->addr_mode != PPC_BREAKPOINT_MODE_EXACT)
2978                 return -EINVAL;
2979 
2980         if (child->thread.hw_brk.address)
2981                 return -ENOSPC;
2982 
2983         child->thread.hw_brk = brk;
2984 
2985         return 1;
2986 #endif /* !CONFIG_PPC_ADV_DEBUG_DVCS */
2987 }
2988 
2989 static long ppc_del_hwdebug(struct task_struct *child, long data)
2990 {
2991 #ifdef CONFIG_HAVE_HW_BREAKPOINT
2992         int ret = 0;
2993         struct thread_struct *thread = &(child->thread);
2994         struct perf_event *bp;
2995 #endif /* CONFIG_HAVE_HW_BREAKPOINT */
2996 #ifdef CONFIG_PPC_ADV_DEBUG_REGS
2997         int rc;
2998 
2999         if (data <= 4)
3000                 rc = del_instruction_bp(child, (int)data);
3001         else
3002                 rc = del_dac(child, (int)data - 4);
3003 
3004         if (!rc) {
3005                 if (!DBCR_ACTIVE_EVENTS(child->thread.debug.dbcr0,
3006                                         child->thread.debug.dbcr1)) {
3007                         child->thread.debug.dbcr0 &= ~DBCR0_IDM;
3008                         child->thread.regs->msr &= ~MSR_DE;
3009                 }
3010         }
3011         return rc;
3012 #else
3013         if (data != 1)
3014                 return -EINVAL;
3015 
3016 #ifdef CONFIG_HAVE_HW_BREAKPOINT
3017         bp = thread->ptrace_bps[0];
3018         if (bp) {
3019                 unregister_hw_breakpoint(bp);
3020                 thread->ptrace_bps[0] = NULL;
3021         } else
3022                 ret = -ENOENT;
3023         return ret;
3024 #else /* CONFIG_HAVE_HW_BREAKPOINT */
3025         if (child->thread.hw_brk.address == 0)
3026                 return -ENOENT;
3027 
3028         child->thread.hw_brk.address = 0;
3029         child->thread.hw_brk.type = 0;
3030 #endif /* CONFIG_HAVE_HW_BREAKPOINT */
3031 
3032         return 0;
3033 #endif
3034 }
3035 
3036 long arch_ptrace(struct task_struct *child, long request,
3037                  unsigned long addr, unsigned long data)
3038 {
3039         int ret = -EPERM;
3040         void __user *datavp = (void __user *) data;
3041         unsigned long __user *datalp = datavp;
3042 
3043         switch (request) {
3044         /* read the word at location addr in the USER area. */
3045         case PTRACE_PEEKUSR: {
3046                 unsigned long index, tmp;
3047 
3048                 ret = -EIO;
3049                 /* convert to index and check */
3050 #ifdef CONFIG_PPC32
3051                 index = addr >> 2;
3052                 if ((addr & 3) || (index > PT_FPSCR)
3053                     || (child->thread.regs == NULL))
3054 #else
3055                 index = addr >> 3;
3056                 if ((addr & 7) || (index > PT_FPSCR))
3057 #endif
3058                         break;
3059 
3060                 CHECK_FULL_REGS(child->thread.regs);
3061                 if (index < PT_FPR0) {
3062                         ret = ptrace_get_reg(child, (int) index, &tmp);
3063                         if (ret)
3064                                 break;
3065                 } else {
3066                         unsigned int fpidx = index - PT_FPR0;
3067 
3068                         flush_fp_to_thread(child);
3069                         if (fpidx < (PT_FPSCR - PT_FPR0))
3070                                 memcpy(&tmp, &child->thread.TS_FPR(fpidx),
3071                                        sizeof(long));
3072                         else
3073                                 tmp = child->thread.fp_state.fpscr;
3074                 }
3075                 ret = put_user(tmp, datalp);
3076                 break;
3077         }
3078 
3079         /* write the word at location addr in the USER area */
3080         case PTRACE_POKEUSR: {
3081                 unsigned long index;
3082 
3083                 ret = -EIO;
3084                 /* convert to index and check */
3085 #ifdef CONFIG_PPC32
3086                 index = addr >> 2;
3087                 if ((addr & 3) || (index > PT_FPSCR)
3088                     || (child->thread.regs == NULL))
3089 #else
3090                 index = addr >> 3;
3091                 if ((addr & 7) || (index > PT_FPSCR))
3092 #endif
3093                         break;
3094 
3095                 CHECK_FULL_REGS(child->thread.regs);
3096                 if (index < PT_FPR0) {
3097                         ret = ptrace_put_reg(child, index, data);
3098                 } else {
3099                         unsigned int fpidx = index - PT_FPR0;
3100 
3101                         flush_fp_to_thread(child);
3102                         if (fpidx < (PT_FPSCR - PT_FPR0))
3103                                 memcpy(&child->thread.TS_FPR(fpidx), &data,
3104                                        sizeof(long));
3105                         else
3106                                 child->thread.fp_state.fpscr = data;
3107                         ret = 0;
3108                 }
3109                 break;
3110         }
3111 
3112         case PPC_PTRACE_GETHWDBGINFO: {
3113                 struct ppc_debug_info dbginfo;
3114 
3115                 dbginfo.version = 1;
3116 #ifdef CONFIG_PPC_ADV_DEBUG_REGS
3117                 dbginfo.num_instruction_bps = CONFIG_PPC_ADV_DEBUG_IACS;
3118                 dbginfo.num_data_bps = CONFIG_PPC_ADV_DEBUG_DACS;
3119                 dbginfo.num_condition_regs = CONFIG_PPC_ADV_DEBUG_DVCS;
3120                 dbginfo.data_bp_alignment = 4;
3121                 dbginfo.sizeof_condition = 4;
3122                 dbginfo.features = PPC_DEBUG_FEATURE_INSN_BP_RANGE |
3123                                    PPC_DEBUG_FEATURE_INSN_BP_MASK;
3124 #ifdef CONFIG_PPC_ADV_DEBUG_DAC_RANGE
3125                 dbginfo.features |=
3126                                    PPC_DEBUG_FEATURE_DATA_BP_RANGE |
3127                                    PPC_DEBUG_FEATURE_DATA_BP_MASK;
3128 #endif
3129 #else /* !CONFIG_PPC_ADV_DEBUG_REGS */
3130                 dbginfo.num_instruction_bps = 0;
3131                 dbginfo.num_data_bps = 1;
3132                 dbginfo.num_condition_regs = 0;
3133 #ifdef CONFIG_PPC64
3134                 dbginfo.data_bp_alignment = 8;
3135 #else
3136                 dbginfo.data_bp_alignment = 4;
3137 #endif
3138                 dbginfo.sizeof_condition = 0;
3139 #ifdef CONFIG_HAVE_HW_BREAKPOINT
3140                 dbginfo.features = PPC_DEBUG_FEATURE_DATA_BP_RANGE;
3141                 if (cpu_has_feature(CPU_FTR_DAWR))
3142                         dbginfo.features |= PPC_DEBUG_FEATURE_DATA_BP_DAWR;
3143 #else
3144                 dbginfo.features = 0;
3145 #endif /* CONFIG_HAVE_HW_BREAKPOINT */
3146 #endif /* CONFIG_PPC_ADV_DEBUG_REGS */
3147 
3148                 if (!access_ok(VERIFY_WRITE, datavp,
3149                                sizeof(struct ppc_debug_info)))
3150                         return -EFAULT;
3151                 ret = __copy_to_user(datavp, &dbginfo,
3152                                      sizeof(struct ppc_debug_info)) ?
3153                       -EFAULT : 0;
3154                 break;
3155         }
3156 
3157         case PPC_PTRACE_SETHWDEBUG: {
3158                 struct ppc_hw_breakpoint bp_info;
3159 
3160                 if (!access_ok(VERIFY_READ, datavp,
3161                                sizeof(struct ppc_hw_breakpoint)))
3162                         return -EFAULT;
3163                 ret = __copy_from_user(&bp_info, datavp,
3164                                        sizeof(struct ppc_hw_breakpoint)) ?
3165                       -EFAULT : 0;
3166                 if (!ret)
3167                         ret = ppc_set_hwdebug(child, &bp_info);
3168                 break;
3169         }
3170 
3171         case PPC_PTRACE_DELHWDEBUG: {
3172                 ret = ppc_del_hwdebug(child, data);
3173                 break;
3174         }
3175 
3176         case PTRACE_GET_DEBUGREG: {
3177 #ifndef CONFIG_PPC_ADV_DEBUG_REGS
3178                 unsigned long dabr_fake;
3179 #endif
3180                 ret = -EINVAL;
3181                 /* We only support one DABR and no IABRS at the moment */
3182                 if (addr > 0)
3183                         break;
3184 #ifdef CONFIG_PPC_ADV_DEBUG_REGS
3185                 ret = put_user(child->thread.debug.dac1, datalp);
3186 #else
3187                 dabr_fake = ((child->thread.hw_brk.address & (~HW_BRK_TYPE_DABR)) |
3188                              (child->thread.hw_brk.type & HW_BRK_TYPE_DABR));
3189                 ret = put_user(dabr_fake, datalp);
3190 #endif
3191                 break;
3192         }
3193 
3194         case PTRACE_SET_DEBUGREG:
3195                 ret = ptrace_set_debugreg(child, addr, data);
3196                 break;
3197 
3198 #ifdef CONFIG_PPC64
3199         case PTRACE_GETREGS64:
3200 #endif
3201         case PTRACE_GETREGS:    /* Get all pt_regs from the child. */
3202                 return copy_regset_to_user(child, &user_ppc_native_view,
3203                                            REGSET_GPR,
3204                                            0, sizeof(struct pt_regs),
3205                                            datavp);
3206 
3207 #ifdef CONFIG_PPC64
3208         case PTRACE_SETREGS64:
3209 #endif
3210         case PTRACE_SETREGS:    /* Set all gp regs in the child. */
3211                 return copy_regset_from_user(child, &user_ppc_native_view,
3212                                              REGSET_GPR,
3213                                              0, sizeof(struct pt_regs),
3214                                              datavp);
3215 
3216         case PTRACE_GETFPREGS: /* Get the child FPU state (FPR0...31 + FPSCR) */
3217                 return copy_regset_to_user(child, &user_ppc_native_view,
3218                                            REGSET_FPR,
3219                                            0, sizeof(elf_fpregset_t),
3220                                            datavp);
3221 
3222         case PTRACE_SETFPREGS: /* Set the child FPU state (FPR0...31 + FPSCR) */
3223                 return copy_regset_from_user(child, &user_ppc_native_view,
3224                                              REGSET_FPR,
3225                                              0, sizeof(elf_fpregset_t),
3226                                              datavp);
3227 
3228 #ifdef CONFIG_ALTIVEC
3229         case PTRACE_GETVRREGS:
3230                 return copy_regset_to_user(child, &user_ppc_native_view,
3231                                            REGSET_VMX,
3232                                            0, (33 * sizeof(vector128) +
3233                                                sizeof(u32)),
3234                                            datavp);
3235 
3236         case PTRACE_SETVRREGS:
3237                 return copy_regset_from_user(child, &user_ppc_native_view,
3238                                              REGSET_VMX,
3239                                              0, (33 * sizeof(vector128) +
3240                                                  sizeof(u32)),
3241                                              datavp);
3242 #endif
3243 #ifdef CONFIG_VSX
3244         case PTRACE_GETVSRREGS:
3245                 return copy_regset_to_user(child, &user_ppc_native_view,
3246                                            REGSET_VSX,
3247                                            0, 32 * sizeof(double),
3248                                            datavp);
3249 
3250         case PTRACE_SETVSRREGS:
3251                 return copy_regset_from_user(child, &user_ppc_native_view,
3252                                              REGSET_VSX,
3253                                              0, 32 * sizeof(double),
3254                                              datavp);
3255 #endif
3256 #ifdef CONFIG_SPE
3257         case PTRACE_GETEVRREGS:
3258                 /* Get the child spe register state. */
3259                 return copy_regset_to_user(child, &user_ppc_native_view,
3260                                            REGSET_SPE, 0, 35 * sizeof(u32),
3261                                            datavp);
3262 
3263         case PTRACE_SETEVRREGS:
3264                 /* Set the child spe register state. */
3265                 return copy_regset_from_user(child, &user_ppc_native_view,
3266                                              REGSET_SPE, 0, 35 * sizeof(u32),
3267                                              datavp);
3268 #endif
3269 
3270         default:
3271                 ret = ptrace_request(child, request, addr, data);
3272                 break;
3273         }
3274         return ret;
3275 }
3276 
3277 #ifdef CONFIG_SECCOMP
3278 static int do_seccomp(struct pt_regs *regs)
3279 {
3280         if (!test_thread_flag(TIF_SECCOMP))
3281                 return 0;
3282 
3283         /*
3284          * The ABI we present to seccomp tracers is that r3 contains
3285          * the syscall return value and orig_gpr3 contains the first
3286          * syscall parameter. This is different to the ptrace ABI where
3287          * both r3 and orig_gpr3 contain the first syscall parameter.
3288          */
3289         regs->gpr[3] = -ENOSYS;
3290 
3291         /*
3292          * We use the __ version here because we have already checked
3293          * TIF_SECCOMP. If this fails, there is nothing left to do, we
3294          * have already loaded -ENOSYS into r3, or seccomp has put
3295          * something else in r3 (via SECCOMP_RET_ERRNO/TRACE).
3296          */
3297         if (__secure_computing(NULL))
3298                 return -1;
3299 
3300         /*
3301          * The syscall was allowed by seccomp, restore the register
3302          * state to what audit expects.
3303          * Note that we use orig_gpr3, which means a seccomp tracer can
3304          * modify the first syscall parameter (in orig_gpr3) and also
3305          * allow the syscall to proceed.
3306          */
3307         regs->gpr[3] = regs->orig_gpr3;
3308 
3309         return 0;
3310 }
3311 #else
3312 static inline int do_seccomp(struct pt_regs *regs) { return 0; }
3313 #endif /* CONFIG_SECCOMP */
3314 
3315 /**
3316  * do_syscall_trace_enter() - Do syscall tracing on kernel entry.
3317  * @regs: the pt_regs of the task to trace (current)
3318  *
3319  * Performs various types of tracing on syscall entry. This includes seccomp,
3320  * ptrace, syscall tracepoints and audit.
3321  *
3322  * The pt_regs are potentially visible to userspace via ptrace, so their
3323  * contents is ABI.
3324  *
3325  * One or more of the tracers may modify the contents of pt_regs, in particular
3326  * to modify arguments or even the syscall number itself.
3327  *
3328  * It's also possible that a tracer can choose to reject the system call. In
3329  * that case this function will return an illegal syscall number, and will put
3330  * an appropriate return value in regs->r3.
3331  *
3332  * Return: the (possibly changed) syscall number.
3333  */
3334 long do_syscall_trace_enter(struct pt_regs *regs)
3335 {
3336         user_exit();
3337 
3338         /*
3339          * The tracer may decide to abort the syscall, if so tracehook
3340          * will return !0. Note that the tracer may also just change
3341          * regs->gpr[0] to an invalid syscall number, that is handled
3342          * below on the exit path.
3343          */
3344         if (test_thread_flag(TIF_SYSCALL_TRACE) &&
3345             tracehook_report_syscall_entry(regs))
3346                 goto skip;
3347 
3348         /* Run seccomp after ptrace; allow it to set gpr[3]. */
3349         if (do_seccomp(regs))
3350                 return -1;
3351 
3352         /* Avoid trace and audit when syscall is invalid. */
3353         if (regs->gpr[0] >= NR_syscalls)
3354                 goto skip;
3355 
3356         if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
3357                 trace_sys_enter(regs, regs->gpr[0]);
3358 
3359 #ifdef CONFIG_PPC64
3360         if (!is_32bit_task())
3361                 audit_syscall_entry(regs->gpr[0], regs->gpr[3], regs->gpr[4],
3362                                     regs->gpr[5], regs->gpr[6]);
3363         else
3364 #endif
3365                 audit_syscall_entry(regs->gpr[0],
3366                                     regs->gpr[3] & 0xffffffff,
3367                                     regs->gpr[4] & 0xffffffff,
3368                                     regs->gpr[5] & 0xffffffff,
3369                                     regs->gpr[6] & 0xffffffff);
3370 
3371         /* Return the possibly modified but valid syscall number */
3372         return regs->gpr[0];
3373 
3374 skip:
3375         /*
3376          * If we are aborting explicitly, or if the syscall number is
3377          * now invalid, set the return value to -ENOSYS.
3378          */
3379         regs->gpr[3] = -ENOSYS;
3380         return -1;
3381 }
3382 
3383 void do_syscall_trace_leave(struct pt_regs *regs)
3384 {
3385         int step;
3386 
3387         audit_syscall_exit(regs);
3388 
3389         if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
3390                 trace_sys_exit(regs, regs->result);
3391 
3392         step = test_thread_flag(TIF_SINGLESTEP);
3393         if (step || test_thread_flag(TIF_SYSCALL_TRACE))
3394                 tracehook_report_syscall_exit(regs, step);
3395 
3396         user_enter();
3397 }
3398 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp