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

Commit 8c5e14f4 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

Merge tag 'kvmarm-for-v4.21' of...

Merge tag 'kvmarm-for-v4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD

KVM/arm updates for 4.21

- Large PUD support for HugeTLB
- Single-stepping fixes
- Improved tracing
- Various timer and vgic fixups
parents 51324119 8c33df1a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -23,6 +23,10 @@

#define ARM_EXIT_WITH_ABORT_BIT  31
#define ARM_EXCEPTION_CODE(x)	  ((x) & ~(1U << ARM_EXIT_WITH_ABORT_BIT))
#define ARM_EXCEPTION_IS_TRAP(x)					\
	(ARM_EXCEPTION_CODE((x)) == ARM_EXCEPTION_PREF_ABORT	||	\
	 ARM_EXCEPTION_CODE((x)) == ARM_EXCEPTION_DATA_ABORT	||	\
	 ARM_EXCEPTION_CODE((x)) == ARM_EXCEPTION_HVC)
#define ARM_ABORT_PENDING(x)	  !!((x) & (1U << ARM_EXIT_WITH_ABORT_BIT))

#define ARM_EXCEPTION_RESET	  0
+0 −5
Original line number Diff line number Diff line
@@ -296,11 +296,6 @@ static inline void kvm_arm_init_debug(void) {}
static inline void kvm_arm_setup_debug(struct kvm_vcpu *vcpu) {}
static inline void kvm_arm_clear_debug(struct kvm_vcpu *vcpu) {}
static inline void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu) {}
static inline bool kvm_arm_handle_step_debug(struct kvm_vcpu *vcpu,
					     struct kvm_run *run)
{
	return false;
}

int kvm_arm_vcpu_arch_set_attr(struct kvm_vcpu *vcpu,
			       struct kvm_device_attr *attr);
+61 −0
Original line number Diff line number Diff line
@@ -82,6 +82,67 @@ void kvm_clear_hyp_idmap(void);
#define kvm_mk_pud(pmdp)	__pud(__pa(pmdp) | PMD_TYPE_TABLE)
#define kvm_mk_pgd(pudp)	({ BUILD_BUG(); 0; })

#define kvm_pfn_pte(pfn, prot)	pfn_pte(pfn, prot)
#define kvm_pfn_pmd(pfn, prot)	pfn_pmd(pfn, prot)
#define kvm_pfn_pud(pfn, prot)	(__pud(0))

#define kvm_pud_pfn(pud)	({ WARN_ON(1); 0; })


#define kvm_pmd_mkhuge(pmd)	pmd_mkhuge(pmd)
/* No support for pud hugepages */
#define kvm_pud_mkhuge(pud)	( {WARN_ON(1); pud; })

/*
 * The following kvm_*pud*() functions are provided strictly to allow
 * sharing code with arm64. They should never be called in practice.
 */
static inline void kvm_set_s2pud_readonly(pud_t *pud)
{
	WARN_ON(1);
}

static inline bool kvm_s2pud_readonly(pud_t *pud)
{
	WARN_ON(1);
	return false;
}

static inline void kvm_set_pud(pud_t *pud, pud_t new_pud)
{
	WARN_ON(1);
}

static inline pud_t kvm_s2pud_mkwrite(pud_t pud)
{
	WARN_ON(1);
	return pud;
}

static inline pud_t kvm_s2pud_mkexec(pud_t pud)
{
	WARN_ON(1);
	return pud;
}

static inline bool kvm_s2pud_exec(pud_t *pud)
{
	WARN_ON(1);
	return false;
}

static inline pud_t kvm_s2pud_mkyoung(pud_t pud)
{
	BUG();
	return pud;
}

static inline bool kvm_s2pud_young(pud_t pud)
{
	WARN_ON(1);
	return false;
}

static inline pte_t kvm_s2pte_mkwrite(pte_t pte)
{
	pte_val(pte) |= L_PTE_S2_RDWR;
+8 −0
Original line number Diff line number Diff line
@@ -68,4 +68,12 @@ stage2_pmd_addr_end(struct kvm *kvm, phys_addr_t addr, phys_addr_t end)
#define stage2_pmd_table_empty(kvm, pmdp)	kvm_page_empty(pmdp)
#define stage2_pud_table_empty(kvm, pudp)	false

static inline bool kvm_stage2_has_pud(struct kvm *kvm)
{
	return false;
}

#define S2_PMD_MASK				PMD_MASK
#define S2_PMD_SIZE				PMD_SIZE

#endif	/* __ARM_S2_PGTABLE_H_ */
+2 −2
Original line number Diff line number Diff line
@@ -602,8 +602,8 @@ static int emulate_cp15(struct kvm_vcpu *vcpu,
		}
	} else {
		/* If access function fails, it should complain. */
		kvm_err("Unsupported guest CP15 access at: %08lx\n",
			*vcpu_pc(vcpu));
		kvm_err("Unsupported guest CP15 access at: %08lx [%08lx]\n",
			*vcpu_pc(vcpu), *vcpu_cpsr(vcpu));
		print_cp_instr(params);
		kvm_inject_undefined(vcpu);
	}
Loading