Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c32a2ea authored by Bharat Bhushan's avatar Bharat Bhushan Committed by Alexander Graf
Browse files

Added ONE_REG interface for debug instruction



This patch adds the one_reg interface to get the special instruction
to be used for setting software breakpoint from userspace.

Signed-off-by: default avatarBharat Bhushan <bharat.bhushan@freescale.com>
Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
parent fca7567c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -458,6 +458,8 @@ static inline bool kvmppc_critical_section(struct kvm_vcpu *vcpu)
#define OSI_SC_MAGIC_R4			0x77810F9B

#define INS_DCBZ			0x7c0007ec
/* TO = 31 for unconditional trap */
#define INS_TW				0x7fe00008

/* LPIDs we support with this build -- runtime limit may be lower */
#define KVMPPC_NR_LPIDS			(LPID_RSVD + 1)
+2 −0
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@
/* LPIDs we support with this build -- runtime limit may be lower */
#define KVMPPC_NR_LPIDS                        64

#define KVMPPC_INST_EHPRIV	0x7c00021c

static inline void kvmppc_set_gpr(struct kvm_vcpu *vcpu, int num, ulong val)
{
	vcpu->arch.gpr[num] = val;
+4 −0
Original line number Diff line number Diff line
@@ -422,4 +422,8 @@ struct kvm_get_htab_header {
#define KVM_REG_PPC_CLEAR_TSR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x88)
#define KVM_REG_PPC_TCR		(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x89)
#define KVM_REG_PPC_TSR		(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8a)

/* Debugging: Special instruction for software breakpoint */
#define KVM_REG_PPC_DEBUG_INST	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8b)

#endif /* __LINUX_KVM_POWERPC_H */
+6 −0
Original line number Diff line number Diff line
@@ -529,6 +529,12 @@ int kvm_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg)
			val = get_reg_val(reg->id, vcpu->arch.vscr.u[3]);
			break;
#endif /* CONFIG_ALTIVEC */
		case KVM_REG_PPC_DEBUG_INST: {
			u32 opcode = INS_TW;
			r = copy_to_user((u32 __user *)(long)reg->addr,
					 &opcode, sizeof(u32));
			break;
		}
		default:
			r = -EINVAL;
			break;
+6 −0
Original line number Diff line number Diff line
@@ -1447,6 +1447,12 @@ int kvm_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg)
	case KVM_REG_PPC_TSR:
		r = put_user(vcpu->arch.tsr, (u32 __user *)(long)reg->addr);
		break;
	case KVM_REG_PPC_DEBUG_INST: {
		u32 opcode = KVMPPC_INST_EHPRIV;
		r = copy_to_user((u32 __user *)(long)reg->addr,
				 &opcode, sizeof(u32));
		break;
	}
	default:
		break;
	}