aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/xive.rst2
-rw-r--r--hw/xive.c10
2 files changed, 7 insertions, 5 deletions
diff --git a/doc/xive.rst b/doc/xive.rst
index 85fe111..c35db6e 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 c9690aa..333d77e 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);