Skip to content

Commit

Permalink
spapr: nested: Use correct source for parttbl info for nested PAPR API.
Browse files Browse the repository at this point in the history
For nested PAPR API, we use SpaprMachineStateNestedGuest struct to store
partition table info, use the same in spapr_get_pate_nested() via
helper.

Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
  • Loading branch information
Harsh Prateek Bora authored and npiggin committed Mar 12, 2024
1 parent 64c4390 commit 98823ce
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 12 deletions.
6 changes: 4 additions & 2 deletions hw/ppc/spapr.c
Original file line number Diff line number Diff line change
Expand Up @@ -1421,11 +1421,13 @@ static bool spapr_get_pate(PPCVirtualHypervisor *vhyp, PowerPCCPU *cpu,
entry->dw1 = spapr->patb_entry;
return true;
} else {
assert(spapr_nested_api(spapr));
if (spapr_nested_api(spapr) == NESTED_API_KVM_HV) {
return spapr_get_pate_nested_hv(spapr, cpu, lpid, entry);
} else if (spapr_nested_api(spapr) == NESTED_API_PAPR) {
return spapr_get_pate_nested_papr(spapr, cpu, lpid, entry);
} else {
g_assert_not_reached();
}
return false;
}
}

Expand Down
41 changes: 31 additions & 10 deletions hw/ppc/spapr_nested.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,31 @@ bool spapr_get_pate_nested_hv(SpaprMachineState *spapr, PowerPCCPU *cpu,
return true;
}

static
SpaprMachineStateNestedGuest *spapr_get_nested_guest(SpaprMachineState *spapr,
target_ulong guestid)
{
SpaprMachineStateNestedGuest *guest;

guest = g_hash_table_lookup(spapr->nested.guests, GINT_TO_POINTER(guestid));
return guest;
}

bool spapr_get_pate_nested_papr(SpaprMachineState *spapr, PowerPCCPU *cpu,
target_ulong lpid, ppc_v3_pate_t *entry)
{
SpaprMachineStateNestedGuest *guest;
assert(lpid != 0);
guest = spapr_get_nested_guest(spapr, lpid);
if (!guest) {
return false;
}

entry->dw0 = guest->parttbl[0];
entry->dw1 = guest->parttbl[1];
return true;
}

#define PRTS_MASK 0x1f

static target_ulong h_set_ptbl(PowerPCCPU *cpu,
Expand Down Expand Up @@ -540,16 +565,6 @@ void spapr_exit_nested(PowerPCCPU *cpu, int excp)
}
}

static
SpaprMachineStateNestedGuest *spapr_get_nested_guest(SpaprMachineState *spapr,
target_ulong guestid)
{
SpaprMachineStateNestedGuest *guest;

guest = g_hash_table_lookup(spapr->nested.guests, GINT_TO_POINTER(guestid));
return guest;
}

static bool spapr_nested_vcpu_check(SpaprMachineStateNestedGuest *guest,
target_ulong vcpuid, bool inoutbuf)
{
Expand Down Expand Up @@ -1590,6 +1605,12 @@ bool spapr_get_pate_nested_hv(SpaprMachineState *spapr, PowerPCCPU *cpu,
return false;
}

bool spapr_get_pate_nested_papr(SpaprMachineState *spapr, PowerPCCPU *cpu,
target_ulong lpid, ppc_v3_pate_t *entry)
{
return false;
}

void spapr_register_nested_papr(void)
{
/* DO NOTHING */
Expand Down
2 changes: 2 additions & 0 deletions include/hw/ppc/spapr_nested.h
Original file line number Diff line number Diff line change
Expand Up @@ -519,4 +519,6 @@ bool spapr_get_pate_nested_hv(SpaprMachineState *spapr, PowerPCCPU *cpu,
target_ulong lpid, ppc_v3_pate_t *entry);
uint8_t spapr_nested_api(SpaprMachineState *spapr);
void spapr_nested_gsb_init(void);
bool spapr_get_pate_nested_papr(SpaprMachineState *spapr, PowerPCCPU *cpu,
target_ulong lpid, ppc_v3_pate_t *entry);
#endif /* HW_SPAPR_NESTED_H */

0 comments on commit 98823ce

Please sign in to comment.