mirror of
https://github.com/qemu/qemu.git
synced 2025-01-23 22:13:25 +08:00
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;
|
||||
}
|
||||
|
||||
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,
|
||||
PowerPCCPU *cpu,
|
||||
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_hash64_init(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
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user