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

Commit 648d453d authored by Radim Krčmář's avatar Radim Krčmář
Browse files
Bug fixes for stable.
parents a5f01f8e 67f8a8c1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -4212,11 +4212,13 @@ static int kvmhv_configure_mmu(struct kvm *kvm, struct kvm_ppc_mmuv3_cfg *cfg)
	if ((cfg->process_table & PRTS_MASK) > 24)
		return -EINVAL;

	mutex_lock(&kvm->lock);
	kvm->arch.process_table = cfg->process_table;
	kvmppc_setup_partition_table(kvm);

	lpcr = (cfg->flags & KVM_PPC_MMUV3_GTSE) ? LPCR_GTSE : 0;
	kvmppc_update_lpcr(kvm, lpcr, LPCR_GTSE);
	mutex_unlock(&kvm->lock);

	return 0;
}
+0 −1
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@ static inline void __iomem *get_tima_phys(void)
#define __x_tima		get_tima_phys()
#define __x_eoi_page(xd)	((void __iomem *)((xd)->eoi_page))
#define __x_trig_page(xd)	((void __iomem *)((xd)->trig_page))
#define __x_readb	__raw_rm_readb
#define __x_writeb	__raw_rm_writeb
#define __x_readw	__raw_rm_readw
#define __x_readq	__raw_rm_readq
+16 −1
Original line number Diff line number Diff line
@@ -771,6 +771,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)

#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
BEGIN_FTR_SECTION
	/*
	 * NOTE THAT THIS TRASHES ALL NON-VOLATILE REGISTERS INCLUDING CR
	 */
	bl	kvmppc_restore_tm
END_FTR_SECTION_IFSET(CPU_FTR_TM)
#endif
@@ -1630,6 +1633,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)

#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
BEGIN_FTR_SECTION
	/*
	 * NOTE THAT THIS TRASHES ALL NON-VOLATILE REGISTERS INCLUDING CR
	 */
	bl	kvmppc_save_tm
END_FTR_SECTION_IFSET(CPU_FTR_TM)
#endif
@@ -1749,6 +1755,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
	/*
	 * Are we running hash or radix ?
	 */
	ld	r5, VCPU_KVM(r9)
	lbz	r0, KVM_RADIX(r5)
	cmpwi	cr2, r0, 0
	beq	cr2, 3f

	/* Radix: Handle the case where the guest used an illegal PID */
@@ -2466,6 +2475,9 @@ _GLOBAL(kvmppc_h_cede) /* r3 = vcpu pointer, r11 = msr, r13 = paca */

#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
BEGIN_FTR_SECTION
	/*
	 * NOTE THAT THIS TRASHES ALL NON-VOLATILE REGISTERS INCLUDING CR
	 */
	ld	r9, HSTATE_KVM_VCPU(r13)
	bl	kvmppc_save_tm
END_FTR_SECTION_IFSET(CPU_FTR_TM)
@@ -2578,6 +2590,9 @@ kvm_end_cede:

#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
BEGIN_FTR_SECTION
	/*
	 * NOTE THAT THIS TRASHES ALL NON-VOLATILE REGISTERS INCLUDING CR
	 */
	bl	kvmppc_restore_tm
END_FTR_SECTION_IFSET(CPU_FTR_TM)
#endif
+0 −1
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@
#define __x_tima		xive_tima
#define __x_eoi_page(xd)	((void __iomem *)((xd)->eoi_mmio))
#define __x_trig_page(xd)	((void __iomem *)((xd)->trig_mmio))
#define __x_readb	__raw_readb
#define __x_writeb	__raw_writeb
#define __x_readw	__raw_readw
#define __x_readq	__raw_readq
+4 −3
Original line number Diff line number Diff line
@@ -28,7 +28,8 @@ static void GLUE(X_PFX,ack_pending)(struct kvmppc_xive_vcpu *xc)
	 * bit.
	 */
	if (cpu_has_feature(CPU_FTR_POWER9_DD1)) {
		u8 pipr = __x_readb(__x_tima + TM_QW1_OS + TM_PIPR);
		__be64 qw1 = __x_readq(__x_tima + TM_QW1_OS);
		u8 pipr = be64_to_cpu(qw1) & 0xff;
		if (pipr >= xc->hw_cppr)
			return;
	}
@@ -336,7 +337,6 @@ X_STATIC unsigned long GLUE(X_PFX,h_ipoll)(struct kvm_vcpu *vcpu, unsigned long
	struct kvmppc_xive_vcpu *xc = vcpu->arch.xive_vcpu;
	u8 pending = xc->pending;
	u32 hirq;
	u8 pipr;

	pr_devel("H_IPOLL(server=%ld)\n", server);

@@ -353,7 +353,8 @@ X_STATIC unsigned long GLUE(X_PFX,h_ipoll)(struct kvm_vcpu *vcpu, unsigned long
		pending = 0xff;
	} else {
		/* Grab pending interrupt if any */
		pipr = __x_readb(__x_tima + TM_QW1_OS + TM_PIPR);
		__be64 qw1 = __x_readq(__x_tima + TM_QW1_OS);
		u8 pipr = be64_to_cpu(qw1) & 0xff;
		if (pipr < 8)
			pending |= 1 << pipr;
	}