Linux Audio

Check our new training course

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