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

Commit 37028975 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

Merge branch 'kvm-ppc-fixes' of...

Merge branch 'kvm-ppc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc into HEAD

"Paolo,

I have two fixes for HV KVM which I would like to have included in
v4.4-rc1.  The first one is a fix for a bug identified by Red Hat
which causes occasional guest crashes.  The second one fixes a bug
which causes host stalls and timeouts under certain circumstances when
the host is configured for static 2-way micro-threading mode."
parents a96036b8 f74f2e2e
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -2060,7 +2060,7 @@ static bool can_split_piggybacked_subcores(struct core_info *cip)
			return false;
			return false;
		n_subcores += (cip->subcore_threads[sub] - 1) >> 1;
		n_subcores += (cip->subcore_threads[sub] - 1) >> 1;
	}
	}
	if (n_subcores > 3 || large_sub < 0)
	if (large_sub < 0 || !subcore_config_ok(n_subcores + 1, 2))
		return false;
		return false;


	/*
	/*
+12 −8
Original line number Original line Diff line number Diff line
@@ -1749,7 +1749,8 @@ kvmppc_hdsi:
	beq	3f
	beq	3f
	clrrdi	r0, r4, 28
	clrrdi	r0, r4, 28
	PPC_SLBFEE_DOT(R5, R0)		/* if so, look up SLB */
	PPC_SLBFEE_DOT(R5, R0)		/* if so, look up SLB */
	bne	1f			/* if no SLB entry found */
	li	r0, BOOK3S_INTERRUPT_DATA_SEGMENT
	bne	7f			/* if no SLB entry found */
4:	std	r4, VCPU_FAULT_DAR(r9)
4:	std	r4, VCPU_FAULT_DAR(r9)
	stw	r6, VCPU_FAULT_DSISR(r9)
	stw	r6, VCPU_FAULT_DSISR(r9)


@@ -1768,14 +1769,15 @@ kvmppc_hdsi:
	cmpdi	r3, -2			/* MMIO emulation; need instr word */
	cmpdi	r3, -2			/* MMIO emulation; need instr word */
	beq	2f
	beq	2f


	/* Synthesize a DSI for the guest */
	/* Synthesize a DSI (or DSegI) for the guest */
	ld	r4, VCPU_FAULT_DAR(r9)
	ld	r4, VCPU_FAULT_DAR(r9)
	mr	r6, r3
	mr	r6, r3
1:	mtspr	SPRN_DAR, r4
1:	li	r0, BOOK3S_INTERRUPT_DATA_STORAGE
	mtspr	SPRN_DSISR, r6
	mtspr	SPRN_DSISR, r6
7:	mtspr	SPRN_DAR, r4
	mtspr	SPRN_SRR0, r10
	mtspr	SPRN_SRR0, r10
	mtspr	SPRN_SRR1, r11
	mtspr	SPRN_SRR1, r11
	li	r10, BOOK3S_INTERRUPT_DATA_STORAGE
	mr	r10, r0
	bl	kvmppc_msr_interrupt
	bl	kvmppc_msr_interrupt
fast_interrupt_c_return:
fast_interrupt_c_return:
6:	ld	r7, VCPU_CTR(r9)
6:	ld	r7, VCPU_CTR(r9)
@@ -1823,7 +1825,8 @@ kvmppc_hisi:
	beq	3f
	beq	3f
	clrrdi	r0, r10, 28
	clrrdi	r0, r10, 28
	PPC_SLBFEE_DOT(R5, R0)		/* if so, look up SLB */
	PPC_SLBFEE_DOT(R5, R0)		/* if so, look up SLB */
	bne	1f			/* if no SLB entry found */
	li	r0, BOOK3S_INTERRUPT_INST_SEGMENT
	bne	7f			/* if no SLB entry found */
4:
4:
	/* Search the hash table. */
	/* Search the hash table. */
	mr	r3, r9			/* vcpu pointer */
	mr	r3, r9			/* vcpu pointer */
@@ -1840,11 +1843,12 @@ kvmppc_hisi:
	cmpdi	r3, -1			/* handle in kernel mode */
	cmpdi	r3, -1			/* handle in kernel mode */
	beq	guest_exit_cont
	beq	guest_exit_cont


	/* Synthesize an ISI for the guest */
	/* Synthesize an ISI (or ISegI) for the guest */
	mr	r11, r3
	mr	r11, r3
1:	mtspr	SPRN_SRR0, r10
1:	li	r0, BOOK3S_INTERRUPT_INST_STORAGE
7:	mtspr	SPRN_SRR0, r10
	mtspr	SPRN_SRR1, r11
	mtspr	SPRN_SRR1, r11
	li	r10, BOOK3S_INTERRUPT_INST_STORAGE
	mr	r10, r0
	bl	kvmppc_msr_interrupt
	bl	kvmppc_msr_interrupt
	b	fast_interrupt_c_return
	b	fast_interrupt_c_return