All of lore.kernel.org
 help / color / mirror / Atom feed
From: Harsh Prateek Bora <harshpb@linux.ibm.com>
To: npiggin@gmail.com, qemu-ppc@nongnu.org
Cc: clegoate@redhat.com, mikey@neuling.org,
	amachhiw@linux.vnet.ibm.com, vaibhav@linux.ibm.com,
	sbhat@linux.ibm.com, danielhb413@gmail.com,
	qemu-devel@nongnu.org
Subject: [PATCH v4 15/15] spapr: nested: Set the PCR when logical PVR is set
Date: Tue, 20 Feb 2024 14:06:09 +0530	[thread overview]
Message-ID: <20240220083609.748325-16-harshpb@linux.ibm.com> (raw)
In-Reply-To: <20240220083609.748325-1-harshpb@linux.ibm.com>

From: Amit Machhiwal <amachhiw@linux.vnet.ibm.com>

In APIv1, KVM L0 sets the PCR, while in the nested papr APIv2, this
doesn't work as the PCR can't be set via the guest state buffer; the
logical PVR is set via the GSB though.

This change sets the PCR whenever the logical PVR is set via the GSB.
Also, unlike the other registers, the value 1 in a defined bit in the
PCR makes the affected resources unavailable and the value 0 makes
them available. Hence, the PCR is set accordingly.

Signed-off-by: Amit Machhiwal <amachhiw@linux.vnet.ibm.com>
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
---
 include/hw/ppc/spapr_nested.h |  9 +++++++++
 hw/ppc/spapr_nested.c         | 24 ++++++++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/include/hw/ppc/spapr_nested.h b/include/hw/ppc/spapr_nested.h
index da918d2dd0..f67c721f53 100644
--- a/include/hw/ppc/spapr_nested.h
+++ b/include/hw/ppc/spapr_nested.h
@@ -229,6 +229,15 @@ typedef struct SpaprMachineStateNestedGuest {
 #define GUEST_STATE_REQUEST_GUEST_WIDE       0x1
 #define GUEST_STATE_REQUEST_SET              0x2
 
+/* As per ISA v3.1B, following bits are reserved:
+ *      0:2
+ *      4:57  (ISA mentions bit 58 as well but it should be used for P10)
+ *      61:63 (hence, haven't included PCR bits for v2.06 and v2.05
+ *             in LOW BITS)
+ */
+#define PCR_LOW_BITS   (PCR_COMPAT_3_10 | PCR_COMPAT_3_00)
+#define HVMASK_PCR     ~PCR_LOW_BITS
+
 #define GUEST_STATE_ELEMENT(i, sz, s, f, ptr, c) { \
     .id = (i),                                     \
     .size = (sz),                                  \
diff --git a/hw/ppc/spapr_nested.c b/hw/ppc/spapr_nested.c
index 6e6a90616e..af8a482337 100644
--- a/hw/ppc/spapr_nested.c
+++ b/hw/ppc/spapr_nested.c
@@ -740,9 +740,11 @@ static void out_buf_min_size(void *a, void *b, bool set)
 
 static void copy_logical_pvr(void *a, void *b, bool set)
 {
+    SpaprMachineStateNestedGuest *guest;
     uint32_t *buf; /* 1 word */
     uint32_t *pvr_logical_ptr;
     uint32_t pvr_logical;
+    target_ulong pcr = 0;
 
     pvr_logical_ptr = a;
     buf = b;
@@ -755,6 +757,28 @@ static void copy_logical_pvr(void *a, void *b, bool set)
     pvr_logical = be32_to_cpu(buf[0]);
 
     *pvr_logical_ptr = pvr_logical;
+
+    if (*pvr_logical_ptr) {
+        switch (*pvr_logical_ptr) {
+            case CPU_POWERPC_LOGICAL_3_10:
+                pcr = PCR_COMPAT_3_10 | PCR_COMPAT_3_00;
+                break;
+            case CPU_POWERPC_LOGICAL_3_00:
+                pcr = PCR_COMPAT_3_00;
+                break;
+            default:
+                qemu_log_mask(LOG_GUEST_ERROR,
+                    "Could not set PCR for LPVR=0x%08x\n", *pvr_logical_ptr);
+                return;
+        }
+    }
+
+    guest = container_of(pvr_logical_ptr,
+                         struct SpaprMachineStateNestedGuest,
+                         pvr_logical);
+    for (int i = 0; i < guest->vcpus; i++) {
+        guest->vcpu[i].state.pcr = ~pcr | HVMASK_PCR;
+    }
 }
 
 static void copy_tb_offset(void *a, void *b, bool set)
-- 
2.39.3



  parent reply	other threads:[~2024-02-20  8:38 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-20  8:35 [PATCH v4 00/15] Nested PAPR API (KVM on PowerVM) Harsh Prateek Bora
2024-02-20  8:35 ` [PATCH v4 01/15] spapr: nested: register nested-hv api hcalls only for cap-nested-hv Harsh Prateek Bora
2024-02-27  8:51   ` Nicholas Piggin
2024-02-20  8:35 ` [PATCH v4 02/15] spapr: nested: move nested part of spapr_get_pate into spapr_nested.c Harsh Prateek Bora
2024-02-20  8:35 ` [PATCH v4 03/15] spapr: nested: Introduce SpaprMachineStateNested to store related info Harsh Prateek Bora
2024-02-20  8:35 ` [PATCH v4 04/15] spapr: nested: keep nested-hv related code restricted to its API Harsh Prateek Bora
2024-02-27  8:54   ` Nicholas Piggin
2024-02-27  9:45     ` Harsh Prateek Bora
2024-02-27 10:40       ` Nicholas Piggin
2024-02-20  8:35 ` [PATCH v4 05/15] spapr: nested: Document Nested PAPR API Harsh Prateek Bora
2024-02-27  9:29   ` Nicholas Piggin
2024-02-27  9:31     ` Harsh Prateek Bora
2024-02-27 10:39       ` Nicholas Piggin
2024-02-29  5:46         ` Harsh Prateek Bora
2024-02-20  8:36 ` [PATCH v4 06/15] spapr: nested: Introduce H_GUEST_[GET|SET]_CAPABILITIES hcalls Harsh Prateek Bora
2024-02-20  8:36 ` [PATCH v4 07/15] spapr: nested: Introduce H_GUEST_[CREATE|DELETE] hcalls Harsh Prateek Bora
2024-02-20  8:36 ` [PATCH v4 08/15] spapr: nested: Introduce H_GUEST_CREATE_VCPU hcall Harsh Prateek Bora
2024-02-27  9:51   ` Nicholas Piggin
2024-02-29  9:39     ` Harsh Prateek Bora
2024-02-20  8:36 ` [PATCH v4 09/15] spapr: nested: Extend nested_ppc_state for nested PAPR API Harsh Prateek Bora
2024-02-27  9:59   ` Nicholas Piggin
2024-02-29  9:42     ` Harsh Prateek Bora
2024-02-20  8:36 ` [PATCH v4 10/15] spapr: nested: Initialize the GSB elements lookup table Harsh Prateek Bora
2024-02-27 10:02   ` Nicholas Piggin
2024-02-29 10:29     ` Harsh Prateek Bora
2024-02-20  8:36 ` [PATCH v4 11/15] spapr: nested: Introduce H_GUEST_[GET|SET]_STATE hcalls Harsh Prateek Bora
2024-02-27 10:10   ` Nicholas Piggin
2024-03-05  8:19     ` Harsh Prateek Bora
2024-02-20  8:36 ` [PATCH v4 12/15] spapr: nested: Use correct source for parttbl info for nested PAPR API Harsh Prateek Bora
2024-02-27 10:16   ` Nicholas Piggin
2024-03-05  8:21     ` Harsh Prateek Bora
2024-02-20  8:36 ` [PATCH v4 13/15] spapr: nested: Introduce H_GUEST_RUN_VCPU hcall Harsh Prateek Bora
2024-02-20  8:36 ` [PATCH v4 14/15] spapr: nested: Introduce cap-nested-papr for Nested PAPR API Harsh Prateek Bora
2024-02-27 10:22   ` Nicholas Piggin
2024-03-05  8:24     ` Harsh Prateek Bora
2024-02-20  8:36 ` Harsh Prateek Bora [this message]
2024-02-27 10:23   ` [PATCH v4 15/15] spapr: nested: Set the PCR when logical PVR is set Nicholas Piggin
2024-03-05  8:26     ` Harsh Prateek Bora

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240220083609.748325-16-harshpb@linux.ibm.com \
    --to=harshpb@linux.ibm.com \
    --cc=amachhiw@linux.vnet.ibm.com \
    --cc=clegoate@redhat.com \
    --cc=danielhb413@gmail.com \
    --cc=mikey@neuling.org \
    --cc=npiggin@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=sbhat@linux.ibm.com \
    --cc=vaibhav@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.