[ 3.5.y.z extended stable ] Patch "powerpc: pSeries_lpar_hpte_remove fails from Adjunct" has been added to staging queue

Luis Henriques luis.henriques at canonical.com
Thu Apr 11 09:09:21 UTC 2013

This is a note to let you know that I have just added a patch titled

    powerpc: pSeries_lpar_hpte_remove fails from Adjunct

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:


If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



>From ec9577dfe47b931cc4433ed0d45d2ecd2299d58e Mon Sep 17 00:00:00 2001
From: Michael Wolf <mjw at linux.vnet.ibm.com>
Date: Fri, 5 Apr 2013 10:41:40 +0000
Subject: [PATCH] powerpc: pSeries_lpar_hpte_remove fails from Adjunct
 partition being performed before the ANDCOND test

commit 9fb2640159f9d4f5a2a9d60e490482d4cbecafdb upstream.

Some versions of pHyp will perform the adjunct partition test before the
ANDCOND test.  The result of this is that H_RESOURCE can be returned and
cause the BUG_ON condition to occur. The HPTE is not removed.  So add a
check for H_RESOURCE, it is ok if this HPTE is not removed as
pSeries_lpar_hpte_remove is looking for an HPTE to remove and not a
specific HPTE to remove.  So it is ok to just move on to the next slot
and try again.

Signed-off-by: Michael Wolf <mjw at linux.vnet.ibm.com>
Signed-off-by: Stephen Rothwell <sfr at canb.auug.org.au>
Signed-off-by: Luis Henriques <luis.henriques at canonical.com>
 arch/powerpc/platforms/pseries/lpar.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index 5f3ef87..9cfdcc9 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -187,7 +187,13 @@ static long pSeries_lpar_hpte_remove(unsigned long hpte_group)
 					   (0x1UL << 4), &dummy1, &dummy2);
 		if (lpar_rc == H_SUCCESS)
 			return i;
-		BUG_ON(lpar_rc != H_NOT_FOUND);
+		/*
+		 * The test for adjunct partition is performed before the
+		 * ANDCOND test.  H_RESOURCE may be returned, so we need to
+		 * check for that as well.
+		 */
+		BUG_ON(lpar_rc != H_NOT_FOUND && lpar_rc != H_RESOURCE);

 		slot_offset &= 0x7;

More information about the kernel-team mailing list