x86/mtrr: move is_var_mtrr_overlapped

Move it to x86 generic code. While at it, use proper boolean type and
fix some cosmetic issues.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Wei Liu committed 2018-08-21 15:13:34 +01:00
1 parent c94ea358a3
commit d6876bf23d
3 files changed
+33 -32

No files matched your search

+32
View File
@@ -51,6 +51,38 @@ get_fixed_ranges(mtrr_type * frs)
}
}
bool is_var_mtrr_overlapped(const struct mtrr_state *m)
{
unsigned int seg, i;
unsigned int num_var_ranges = MASK_EXTR(m->mtrr_cap, MTRRcap_VCNT);
for ( i = 0; i < num_var_ranges; i++ )
{
uint64_t base1 = m->var_ranges[i].base >> PAGE_SHIFT;
uint64_t mask1 = m->var_ranges[i].mask >> PAGE_SHIFT;
if ( !(m->var_ranges[i].mask & MTRR_PHYSMASK_VALID) )
continue;
for ( seg = i + 1; seg < num_var_ranges; seg++ )
{
uint64_t base2 = m->var_ranges[seg].base >> PAGE_SHIFT;
uint64_t mask2 = m->var_ranges[seg].mask >> PAGE_SHIFT;
if ( !(m->var_ranges[seg].mask & MTRR_PHYSMASK_VALID) )
continue;
if ( (base1 & mask1 & mask2) == (base2 & mask2 & mask1) )
{
/* MTRRs overlap. */
return true;
}
}
}
return false;
}
void mtrr_save_fixed_ranges(void *info)
{
get_fixed_ranges(mtrr_state.fixed_ranges);
-31
View File
@@ -75,37 +75,6 @@ static uint8_t __read_mostly mtrr_epat_tbl[MTRR_NUM_TYPES][MEMORY_NUM_TYPES] =
static uint8_t __read_mostly pat_entry_tbl[PAT_TYPE_NUMS] =
{ [0 ... PAT_TYPE_NUMS-1] = INVALID_MEM_TYPE };
bool_t is_var_mtrr_overlapped(const struct mtrr_state *m)
{
unsigned int seg, i;
unsigned int num_var_ranges = MASK_EXTR(m->mtrr_cap, MTRRcap_VCNT);
for ( i = 0; i < num_var_ranges; i++ )
{
uint64_t base1 = m->var_ranges[i].base >> PAGE_SHIFT;
uint64_t mask1 = m->var_ranges[i].mask >> PAGE_SHIFT;
if ( !(m->var_ranges[i].mask & MTRR_PHYSMASK_VALID) )
continue;
for ( seg = i + 1; seg < num_var_ranges; seg ++ )
{
uint64_t base2 = m->var_ranges[seg].base >> PAGE_SHIFT;
uint64_t mask2 = m->var_ranges[seg].mask >> PAGE_SHIFT;
if ( !(m->var_ranges[seg].mask & MTRR_PHYSMASK_VALID) )
continue;
if ( (base1 & mask1 & mask2) == (base2 & mask2 & mask1) )
{
/* MTRR is overlapped. */
return 1;
}
}
}
return 0;
}
static int __init hvm_mtrr_pat_init(void)
{
unsigned int i, j;
+1 -1
View File
@@ -95,7 +95,7 @@ extern bool_t mtrr_def_type_msr_set(struct domain *, struct mtrr_state *,
extern void memory_type_changed(struct domain *);
extern bool_t pat_msr_set(uint64_t *pat, uint64_t msr);
bool_t is_var_mtrr_overlapped(const struct mtrr_state *m);
bool is_var_mtrr_overlapped(const struct mtrr_state *m);
bool mtrr_pat_not_equal(const struct vcpu *vd, const struct vcpu *vs);
#endif /* __ASM_X86_MTRR_H__ */
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.