Commit 1eb07f4b authored by Marc Zyngier's avatar Marc Zyngier
Browse files

Merge branch kvm-arm64/raz-sysregs into kvmarm-master/next



* kvm-arm64/raz-sysregs:
  : .
  : Simplify the handling of RAZ register, removing pointless indirections.
  : .
  KVM: arm64: Replace get_raz_id_reg() with get_raz_reg()
  KVM: arm64: Use get_raz_reg() for userspace reads of PMSWINC_EL0
  KVM: arm64: Return early from read_id_reg() if register is RAZ

Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
parents a049cf7e ebf6aa8c
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
@@ -1064,7 +1064,12 @@ static u64 read_id_reg(const struct kvm_vcpu *vcpu,
		struct sys_reg_desc const *r, bool raz)
{
	u32 id = reg_to_encoding(r);
	u64 val = raz ? 0 : read_sanitised_ftr_reg(id);
	u64 val;

	if (raz)
		return 0;

	val = read_sanitised_ftr_reg(id);

	switch (id) {
	case SYS_ID_AA64PFR0_EL1:
@@ -1268,16 +1273,19 @@ static int set_id_reg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd,
	return __set_id_reg(vcpu, rd, uaddr, raz);
}

static int get_raz_id_reg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd,
static int set_raz_id_reg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd,
			  const struct kvm_one_reg *reg, void __user *uaddr)
{
	return __get_id_reg(vcpu, rd, uaddr, true);
	return __set_id_reg(vcpu, rd, uaddr, true);
}

static int set_raz_id_reg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd,
static int get_raz_reg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd,
		       const struct kvm_one_reg *reg, void __user *uaddr)
{
	return __set_id_reg(vcpu, rd, uaddr, true);
	const u64 id = sys_reg_to_index(rd);
	const u64 val = 0;

	return reg_to_user(uaddr, &val, id);
}

static int set_wi_reg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd,
@@ -1388,7 +1396,7 @@ static unsigned int mte_visibility(const struct kvm_vcpu *vcpu,
#define ID_UNALLOCATED(crm, op2) {			\
	Op0(3), Op1(0), CRn(0), CRm(crm), Op2(op2),	\
	.access = access_raz_id_reg,			\
	.get_user = get_raz_id_reg,			\
	.get_user = get_raz_reg,			\
	.set_user = set_raz_id_reg,			\
}

@@ -1400,7 +1408,7 @@ static unsigned int mte_visibility(const struct kvm_vcpu *vcpu,
#define ID_HIDDEN(name) {			\
	SYS_DESC(SYS_##name),			\
	.access = access_raz_id_reg,		\
	.get_user = get_raz_id_reg,		\
	.get_user = get_raz_reg,		\
	.set_user = set_raz_id_reg,		\
}

@@ -1642,7 +1650,7 @@ static const struct sys_reg_desc sys_reg_descs[] = {
	 * previously (and pointlessly) advertised in the past...
	 */
	{ PMU_SYS_REG(SYS_PMSWINC_EL0),
	  .get_user = get_raz_id_reg, .set_user = set_wi_reg,
	  .get_user = get_raz_reg, .set_user = set_wi_reg,
	  .access = access_pmswinc, .reset = NULL },
	{ PMU_SYS_REG(SYS_PMSELR_EL0),
	  .access = access_pmselr, .reset = reset_pmselr, .reg = PMSELR_EL0 },