[Skiboot] [PATCH 4/6] xive: When disabling a VP, wipe all of its settings

Benjamin Herrenschmidt benh at kernel.crashing.org
Tue Nov 21 14:48:25 AEDT 2017


Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
---
 doc/xive.rst |  2 ++
 hw/xive.c    | 10 +++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/doc/xive.rst b/doc/xive.rst
index 85fe1119..c35db6ef 100644
--- a/doc/xive.rst
+++ b/doc/xive.rst
@@ -699,6 +699,8 @@ This call configures a VP:
 * report_cl_pair: This is the real address of the reporting cache line
   pair for that VP or 0 to disable.
 
+    .. note:: When disabling a VP, all other VP settings are lost.
+
 
 OPAL_XIVE_ALLOCATE_IRQ
 ^^^^^^^^^^^^^^^^^^^^^^
diff --git a/hw/xive.c b/hw/xive.c
index 581a7c96..99c56a87 100644
--- a/hw/xive.c
+++ b/hw/xive.c
@@ -4142,13 +4142,13 @@ static int64_t opal_xive_set_vp_info(uint64_t vp_id,
 		return OPAL_PARAMETER;
 
 	vp_new = *vp;
-	if (flags & OPAL_XIVE_VP_ENABLED)
+	if (flags & OPAL_XIVE_VP_ENABLED) {
 		vp_new.w0 |= VP_W0_VALID;
-	else
-		vp_new.w0 &= ~VP_W0_VALID;
+		vp_new.w6 = report_cl_pair >> 32;
+		vp_new.w7 = report_cl_pair & 0xffffffff;
+	} else
+		vp_new.w0 = vp_new.w6 = vp_new.w7 = 0;
 
-	vp_new.w7 = report_cl_pair & 0xffffffff;
-	vp_new.w6 = report_cl_pair >> 32;
 
 	lock(&x->lock);
 	rc = xive_vpc_cache_update(x, blk, idx, 0, 8, &vp_new, false, false);
-- 
2.14.3



More information about the Skiboot mailing list