spapr: nested: move nested part of spapr_get_pate into spapr_nested.c
Most of the nested code has already been moved to spapr_nested.c This logic inside spapr_get_pate is related to nested guests and better suited for spapr_nested.c, hence moving there. Reviewed-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
This commit is contained in:
parent
6026fdbdbd
commit
c2813a3570
@ -1407,7 +1407,6 @@ void spapr_init_all_lpcrs(target_ulong value, target_ulong mask)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool spapr_get_pate(PPCVirtualHypervisor *vhyp, PowerPCCPU *cpu,
|
static bool spapr_get_pate(PPCVirtualHypervisor *vhyp, PowerPCCPU *cpu,
|
||||||
target_ulong lpid, ppc_v3_pate_t *entry)
|
target_ulong lpid, ppc_v3_pate_t *entry)
|
||||||
{
|
{
|
||||||
@ -1420,33 +1419,10 @@ static bool spapr_get_pate(PPCVirtualHypervisor *vhyp, PowerPCCPU *cpu,
|
|||||||
/* Copy PATE1:GR into PATE0:HR */
|
/* Copy PATE1:GR into PATE0:HR */
|
||||||
entry->dw0 = spapr->patb_entry & PATE0_HR;
|
entry->dw0 = spapr->patb_entry & PATE0_HR;
|
||||||
entry->dw1 = spapr->patb_entry;
|
entry->dw1 = spapr->patb_entry;
|
||||||
|
return true;
|
||||||
} else {
|
} else {
|
||||||
uint64_t patb, pats;
|
return spapr_get_pate_nested_hv(spapr, cpu, lpid, entry);
|
||||||
|
|
||||||
assert(lpid != 0);
|
|
||||||
|
|
||||||
patb = spapr->nested_ptcr & PTCR_PATB;
|
|
||||||
pats = spapr->nested_ptcr & PTCR_PATS;
|
|
||||||
|
|
||||||
/* Check if partition table is properly aligned */
|
|
||||||
if (patb & MAKE_64BIT_MASK(0, pats + 12)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Calculate number of entries */
|
|
||||||
pats = 1ull << (pats + 12 - 4);
|
|
||||||
if (pats <= lpid) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Grab entry */
|
|
||||||
patb += 16 * lpid;
|
|
||||||
entry->dw0 = ldq_phys(CPU(cpu)->as, patb);
|
|
||||||
entry->dw1 = ldq_phys(CPU(cpu)->as, patb + 8);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define HPTE(_table, _i) (void *)(((uint64_t *)(_table)) + ((_i) * 2))
|
#define HPTE(_table, _i) (void *)(((uint64_t *)(_table)) + ((_i) * 2))
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "hw/ppc/spapr.h"
|
#include "hw/ppc/spapr.h"
|
||||||
#include "hw/ppc/spapr_cpu_core.h"
|
#include "hw/ppc/spapr_cpu_core.h"
|
||||||
#include "hw/ppc/spapr_nested.h"
|
#include "hw/ppc/spapr_nested.h"
|
||||||
|
#include "mmu-book3s-v3.h"
|
||||||
|
|
||||||
void spapr_nested_reset(SpaprMachineState *spapr)
|
void spapr_nested_reset(SpaprMachineState *spapr)
|
||||||
{
|
{
|
||||||
@ -16,6 +17,35 @@ void spapr_nested_reset(SpaprMachineState *spapr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_TCG
|
#ifdef CONFIG_TCG
|
||||||
|
|
||||||
|
bool spapr_get_pate_nested_hv(SpaprMachineState *spapr, PowerPCCPU *cpu,
|
||||||
|
target_ulong lpid, ppc_v3_pate_t *entry)
|
||||||
|
{
|
||||||
|
uint64_t patb, pats;
|
||||||
|
|
||||||
|
assert(lpid != 0);
|
||||||
|
|
||||||
|
patb = spapr->nested_ptcr & PTCR_PATB;
|
||||||
|
pats = spapr->nested_ptcr & PTCR_PATS;
|
||||||
|
|
||||||
|
/* Check if partition table is properly aligned */
|
||||||
|
if (patb & MAKE_64BIT_MASK(0, pats + 12)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calculate number of entries */
|
||||||
|
pats = 1ull << (pats + 12 - 4);
|
||||||
|
if (pats <= lpid) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grab entry */
|
||||||
|
patb += 16 * lpid;
|
||||||
|
entry->dw0 = ldq_phys(CPU(cpu)->as, patb);
|
||||||
|
entry->dw1 = ldq_phys(CPU(cpu)->as, patb + 8);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#define PRTS_MASK 0x1f
|
#define PRTS_MASK 0x1f
|
||||||
|
|
||||||
static target_ulong h_set_ptbl(PowerPCCPU *cpu,
|
static target_ulong h_set_ptbl(PowerPCCPU *cpu,
|
||||||
@ -413,4 +443,10 @@ void spapr_unregister_nested_hv(void)
|
|||||||
{
|
{
|
||||||
/* DO NOTHING */
|
/* DO NOTHING */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool spapr_get_pate_nested_hv(SpaprMachineState *spapr, PowerPCCPU *cpu,
|
||||||
|
target_ulong lpid, ppc_v3_pate_t *entry)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -96,5 +96,6 @@ struct nested_ppc_state {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void spapr_exit_nested(PowerPCCPU *cpu, int excp);
|
void spapr_exit_nested(PowerPCCPU *cpu, int excp);
|
||||||
|
bool spapr_get_pate_nested_hv(SpaprMachineState *spapr, PowerPCCPU *cpu,
|
||||||
|
target_ulong lpid, ppc_v3_pate_t *entry);
|
||||||
#endif /* HW_SPAPR_NESTED_H */
|
#endif /* HW_SPAPR_NESTED_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user