target/ppc: moved function out of mmu-hash64
The function ppc_hash64_filter_pagesizes has been moved from a function with prototype in mmu-hash64.h and implemented in mmu-hash64.c to a static function in hw/ppc/spapr_caps.c as it's only used in that file. Signed-off-by: Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br> Message-Id: <20210506163941.106984-3-lucas.araujo@eldorado.org.br> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
962104f044
commit
fd1eb085da
@ -371,6 +371,65 @@ static bool spapr_pagesize_cb(void *opaque, uint32_t seg_pshift,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ppc_hash64_filter_pagesizes(PowerPCCPU *cpu,
|
||||||
|
bool (*cb)(void *, uint32_t, uint32_t),
|
||||||
|
void *opaque)
|
||||||
|
{
|
||||||
|
PPCHash64Options *opts = cpu->hash64_opts;
|
||||||
|
int i;
|
||||||
|
int n = 0;
|
||||||
|
bool ci_largepage = false;
|
||||||
|
|
||||||
|
assert(opts);
|
||||||
|
|
||||||
|
n = 0;
|
||||||
|
for (i = 0; i < ARRAY_SIZE(opts->sps); i++) {
|
||||||
|
PPCHash64SegmentPageSizes *sps = &opts->sps[i];
|
||||||
|
int j;
|
||||||
|
int m = 0;
|
||||||
|
|
||||||
|
assert(n <= i);
|
||||||
|
|
||||||
|
if (!sps->page_shift) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (j = 0; j < ARRAY_SIZE(sps->enc); j++) {
|
||||||
|
PPCHash64PageSize *ps = &sps->enc[j];
|
||||||
|
|
||||||
|
assert(m <= j);
|
||||||
|
if (!ps->page_shift) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cb(opaque, sps->page_shift, ps->page_shift)) {
|
||||||
|
if (ps->page_shift >= 16) {
|
||||||
|
ci_largepage = true;
|
||||||
|
}
|
||||||
|
sps->enc[m++] = *ps;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear rest of the row */
|
||||||
|
for (j = m; j < ARRAY_SIZE(sps->enc); j++) {
|
||||||
|
memset(&sps->enc[j], 0, sizeof(sps->enc[j]));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m) {
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear the rest of the table */
|
||||||
|
for (i = n; i < ARRAY_SIZE(opts->sps); i++) {
|
||||||
|
memset(&opts->sps[i], 0, sizeof(opts->sps[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ci_largepage) {
|
||||||
|
opts->flags &= ~PPC_HASH64_CI_LARGEPAGE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void cap_hpt_maxpagesize_cpu_apply(SpaprMachineState *spapr,
|
static void cap_hpt_maxpagesize_cpu_apply(SpaprMachineState *spapr,
|
||||||
PowerPCCPU *cpu,
|
PowerPCCPU *cpu,
|
||||||
uint8_t val, Error **errp)
|
uint8_t val, Error **errp)
|
||||||
|
@ -1200,61 +1200,4 @@ const PPCHash64Options ppc_hash64_opts_POWER7 = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void ppc_hash64_filter_pagesizes(PowerPCCPU *cpu,
|
|
||||||
bool (*cb)(void *, uint32_t, uint32_t),
|
|
||||||
void *opaque)
|
|
||||||
{
|
|
||||||
PPCHash64Options *opts = cpu->hash64_opts;
|
|
||||||
int i;
|
|
||||||
int n = 0;
|
|
||||||
bool ci_largepage = false;
|
|
||||||
|
|
||||||
assert(opts);
|
|
||||||
|
|
||||||
n = 0;
|
|
||||||
for (i = 0; i < ARRAY_SIZE(opts->sps); i++) {
|
|
||||||
PPCHash64SegmentPageSizes *sps = &opts->sps[i];
|
|
||||||
int j;
|
|
||||||
int m = 0;
|
|
||||||
|
|
||||||
assert(n <= i);
|
|
||||||
|
|
||||||
if (!sps->page_shift) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (j = 0; j < ARRAY_SIZE(sps->enc); j++) {
|
|
||||||
PPCHash64PageSize *ps = &sps->enc[j];
|
|
||||||
|
|
||||||
assert(m <= j);
|
|
||||||
if (!ps->page_shift) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cb(opaque, sps->page_shift, ps->page_shift)) {
|
|
||||||
if (ps->page_shift >= 16) {
|
|
||||||
ci_largepage = true;
|
|
||||||
}
|
|
||||||
sps->enc[m++] = *ps;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Clear rest of the row */
|
|
||||||
for (j = m; j < ARRAY_SIZE(sps->enc); j++) {
|
|
||||||
memset(&sps->enc[j], 0, sizeof(sps->enc[j]));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m) {
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Clear the rest of the table */
|
|
||||||
for (i = n; i < ARRAY_SIZE(opts->sps); i++) {
|
|
||||||
memset(&opts->sps[i], 0, sizeof(opts->sps[i]));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ci_largepage) {
|
|
||||||
opts->flags &= ~PPC_HASH64_CI_LARGEPAGE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -18,9 +18,6 @@ unsigned ppc_hash64_hpte_page_shift_noslb(PowerPCCPU *cpu,
|
|||||||
void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val);
|
void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val);
|
||||||
void ppc_hash64_init(PowerPCCPU *cpu);
|
void ppc_hash64_init(PowerPCCPU *cpu);
|
||||||
void ppc_hash64_finalize(PowerPCCPU *cpu);
|
void ppc_hash64_finalize(PowerPCCPU *cpu);
|
||||||
void ppc_hash64_filter_pagesizes(PowerPCCPU *cpu,
|
|
||||||
bool (*cb)(void *, uint32_t, uint32_t),
|
|
||||||
void *opaque);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user