From: Harsh Prateek Bora <harshpb@linux.ibm.com>
To: qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Cc: mikey@neuling.org, vaibhav@linux.ibm.com, jniethe5@gmail.com,
sbhat@linux.ibm.com, kconsul@linux.vnet.ibm.com,
dbarboza@ventanamicro.com, npiggin@gmail.com
Subject: [PATCH 08/15] ppc: spapr: Implement nested PAPR hcall - H_GUEST_CREATE
Date: Tue, 18 Jul 2023 14:52:14 +0530 [thread overview]
Message-ID: <20230718092221.1053686-9-harshpb@linux.ibm.com> (raw)
In-Reply-To: <20230718092221.1053686-1-harshpb@linux.ibm.com>
This hcall is used by L1 to indicate to L0 that a new nested guest needs
to be created and therefore necessary resource allocation shall be made.
The L0 uses a hash table for nested guest specific resource management.
This data structure is further utilized by other hcalls to operate on
related members during entire life cycle of the nested guest.
Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
---
hw/ppc/spapr_nested.c | 75 +++++++++++++++++++++++++++++++++++
include/hw/ppc/spapr_nested.h | 3 ++
2 files changed, 78 insertions(+)
diff --git a/hw/ppc/spapr_nested.c b/hw/ppc/spapr_nested.c
index 9af65f257f..09bbbfb341 100644
--- a/hw/ppc/spapr_nested.c
+++ b/hw/ppc/spapr_nested.c
@@ -444,6 +444,80 @@ static target_ulong h_guest_set_capabilities(PowerPCCPU *cpu,
return H_SUCCESS;
}
+static void
+destroy_guest_helper(gpointer value)
+{
+ struct SpaprMachineStateNestedGuest *guest = value;
+ g_free(guest);
+}
+
+static target_ulong h_guest_create(PowerPCCPU *cpu,
+ SpaprMachineState *spapr,
+ target_ulong opcode,
+ target_ulong *args)
+{
+ CPUPPCState *env = &cpu->env;
+ target_ulong flags = args[0];
+ target_ulong continue_token = args[1];
+ uint64_t lpid;
+ int nguests = 0;
+ struct SpaprMachineStateNestedGuest *guest;
+
+ if (flags) { /* don't handle any flags for now */
+ return H_UNSUPPORTED_FLAG;
+ }
+
+ if (continue_token != -1) {
+ return H_P2;
+ }
+
+ if (!spapr_get_cap(spapr, SPAPR_CAP_NESTED_PAPR)) {
+ return H_FUNCTION;
+ }
+
+ if (!spapr->nested.capabilities_set) {
+ return H_STATE;
+ }
+
+ if (!spapr->nested.guests) {
+ spapr->nested.lpid_max = NESTED_GUEST_MAX;
+ spapr->nested.guests = g_hash_table_new_full(NULL,
+ NULL,
+ NULL,
+ destroy_guest_helper);
+ }
+
+ nguests = g_hash_table_size(spapr->nested.guests);
+
+ if (nguests == spapr->nested.lpid_max) {
+ return H_NO_MEM;
+ }
+
+ /* Lookup for available lpid */
+ for (lpid = 1; lpid < spapr->nested.lpid_max; lpid++) {
+ if (!(g_hash_table_lookup(spapr->nested.guests,
+ GINT_TO_POINTER(lpid)))) {
+ break;
+ }
+ }
+ if (lpid == spapr->nested.lpid_max) {
+ return H_NO_MEM;
+ }
+
+ guest = g_try_new0(struct SpaprMachineStateNestedGuest, 1);
+ if (!guest) {
+ return H_NO_MEM;
+ }
+
+ guest->pvr_logical = spapr->nested.pvr_base;
+
+ g_hash_table_insert(spapr->nested.guests, GINT_TO_POINTER(lpid), guest);
+ printf("%s: lpid: %lu (MAX: %i)\n", __func__, lpid, spapr->nested.lpid_max);
+
+ env->gpr[4] = lpid;
+ return H_SUCCESS;
+}
+
void spapr_register_nested(void)
{
spapr_register_hypercall(KVMPPC_H_SET_PARTITION_TABLE, h_set_ptbl);
@@ -456,6 +530,7 @@ void spapr_register_nested_phyp(void)
{
spapr_register_hypercall(H_GUEST_GET_CAPABILITIES, h_guest_get_capabilities);
spapr_register_hypercall(H_GUEST_SET_CAPABILITIES, h_guest_set_capabilities);
+ spapr_register_hypercall(H_GUEST_CREATE , h_guest_create);
}
#else
diff --git a/include/hw/ppc/spapr_nested.h b/include/hw/ppc/spapr_nested.h
index a7996251cb..7841027df8 100644
--- a/include/hw/ppc/spapr_nested.h
+++ b/include/hw/ppc/spapr_nested.h
@@ -197,6 +197,9 @@
#define H_GUEST_CAP_P9_MODE_BMAP 1
#define H_GUEST_CAP_P10_MODE_BMAP 2
+/* Nested PAPR API macros */
+#define NESTED_GUEST_MAX 4096
+
typedef struct SpaprMachineStateNestedGuest {
unsigned long vcpus;
struct SpaprMachineStateNestedGuestVcpu *vcpu;
--
2.39.3
next prev parent reply other threads:[~2023-07-18 9:23 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-18 9:22 [PATCH 00/15] Nested PAPR API (KVM on PowerVM) Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 01/15] ppc: spapr: Introduce Nested PAPR API related macros Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 02/15] ppc: spapr: Add new/extend structs to support Nested PAPR API Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 03/15] ppc: spapr: Use SpaprMachineStateNested's ptcr instead of nested_ptcr Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 04/15] ppc: spapr: Start using nested.api for nested kvm-hv api Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 05/15] ppc: spapr: Introduce cap-nested-papr for nested PAPR API Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 06/15] ppc: spapr: Implement nested PAPR hcall - H_GUEST_GET_CAPABILITIES Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 07/15] ppc: spapr: Implement nested PAPR hcall - H_GUEST_SET_CAPABILITIES Harsh Prateek Bora
2023-07-18 9:22 ` Harsh Prateek Bora [this message]
2023-07-18 9:22 ` [PATCH 09/15] ppc: spapr: Implement nested PAPR hcall - H_GUEST_CREATE_VCPU Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 10/15] ppc: spapr: Initialize the GSB Elements lookup table Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 11/15] ppc: spapr: Implement nested PAPR hcall - H_GUEST_[GET|SET]_STATE Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 12/15] ppc: spapr: Use correct source for parttbl info for nested PAPR API Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 13/15] ppc: spapr: Implement nested PAPR hcall - H_GUEST_RUN_VCPU Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 14/15] ppc: spapr: Implement nested PAPR hcall - H_GUEST_DELETE Harsh Prateek Bora
2023-07-18 9:22 ` [PATCH 15/15] ppc: spapr: Document Nested PAPR API 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=20230718092221.1053686-9-harshpb@linux.ibm.com \
--to=harshpb@linux.ibm.com \
--cc=dbarboza@ventanamicro.com \
--cc=jniethe5@gmail.com \
--cc=kconsul@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).