[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/9] x86/mtrr: drop mtrr_if indirection
There can only ever be one mtrr_if now and that is the generic implementation so instead of going through an indirect call change everything to call the generic implementation directly. The is_cpu() macro would result in the left side always being equal to X86_VENDOR_INTEL for the generic implementation due to Intel having a value of 0. The use_intel() macro was always true in the generic implementation case as well. Removed some extraneous whitespace at the same time. Signed-off-by: Doug Goldstein <cardoe@xxxxxxxxxx> --- xen/arch/x86/cpu/mtrr/generic.c | 2 +- xen/arch/x86/cpu/mtrr/main.c | 47 ++++++++++++++------------------------- xen/arch/x86/cpu/mtrr/mtrr.h | 4 ++-- xen/arch/x86/platform_hypercall.c | 2 +- 4 files changed, 21 insertions(+), 34 deletions(-) diff --git a/xen/arch/x86/cpu/mtrr/generic.c b/xen/arch/x86/cpu/mtrr/generic.c index 224d231..5c4b273 100644 --- a/xen/arch/x86/cpu/mtrr/generic.c +++ b/xen/arch/x86/cpu/mtrr/generic.c @@ -265,7 +265,7 @@ int mtrr_generic_get_free_region(unsigned long base, unsigned long size, int rep if (replace_reg >= 0 && replace_reg < max) return replace_reg; for (i = 0; i < max; ++i) { - mtrr_if->get(i, &lbase, &lsize, <ype); + mtrr_generic_get(i, &lbase, &lsize, <ype); if (lsize == 0) return i; } diff --git a/xen/arch/x86/cpu/mtrr/main.c b/xen/arch/x86/cpu/mtrr/main.c index bf489e3..ff908ad 100644 --- a/xen/arch/x86/cpu/mtrr/main.c +++ b/xen/arch/x86/cpu/mtrr/main.c @@ -58,8 +58,6 @@ static DEFINE_MUTEX(mtrr_mutex); u64 __read_mostly size_or_mask; u64 __read_mostly size_and_mask; -const struct mtrr_ops *__read_mostly mtrr_if = NULL; - static void set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type type); @@ -82,7 +80,7 @@ static const char *mtrr_attrib_to_str(int x) /* Returns non-zero if we have the write-combining memory type */ static int have_wrcomb(void) { - return (mtrr_if->have_wrcomb ? mtrr_if->have_wrcomb() : 0); + return mtrr_generic_have_wrcomb(); } /* This function returns the number of variable MTRRs */ @@ -150,9 +148,9 @@ static void ipi_handler(void *info) if (data->smp_reg == ~0U) /* update all mtrr registers */ /* At the cpu hot-add time this will reinitialize mtrr * registres on the existing cpus. It is ok. */ - mtrr_if->set_all(); + mtrr_generic_set_all(); else /* single mtrr register update */ - mtrr_if->set(data->smp_reg, data->smp_base, + mtrr_generic_set(data->smp_reg, data->smp_base, data->smp_size, data->smp_type); atomic_dec(&data->count); @@ -200,7 +198,7 @@ static inline int types_compatible(mtrr_type type1, mtrr_type type2) { * until it hits 0 and proceed. We set the data.gate flag and reset data.count. * Meanwhile, they are waiting for that flag to be set. Once it's set, each * CPU goes through the transition of updating MTRRs. The CPU vendors may each do it - * differently, so we call mtrr_if->set() callback and let them take care of it. + * differently, so we call mtrr_generic_set() callback and let them take care of it. * When they're done, they again decrement data->count and wait for data.gate to * be reset. * When we finish, we wait for data.count to hit 0 and toggle the data.gate flag. @@ -252,9 +250,9 @@ static void set_mtrr(unsigned int reg, unsigned long base, if (reg == ~0U) /* update all mtrr registers */ /* at boot or resume time, this will reinitialize the mtrrs on * the bp. It is ok. */ - mtrr_if->set_all(); + mtrr_generic_set_all(); else /* update the single mtrr register */ - mtrr_if->set(reg,base,size,type); + mtrr_generic_set(reg, base, size, type); /* wait for the others */ while (atomic_read(&data.count)) @@ -317,10 +315,7 @@ int mtrr_add_page(unsigned long base, unsigned long size, mtrr_type ltype; unsigned long lbase, lsize; - if (!mtrr_if) - return -ENXIO; - - if ((error = mtrr_if->validate_add_page(base,size,type))) + if ((error = mtrr_generic_validate_add_page(base,size,type))) return error; if (type >= MTRR_NUM_TYPES) { @@ -351,7 +346,7 @@ int mtrr_add_page(unsigned long base, unsigned long size, /* Search for existing MTRR */ mutex_lock(&mtrr_mutex); for (i = 0; i < num_var_ranges; ++i) { - mtrr_if->get(i, &lbase, &lsize, <ype); + mtrr_generic_get(i, &lbase, &lsize, <ype); if (!lsize || base > lbase + lsize - 1 || base + size - 1 < lbase) continue; /* At this point we know there is some kind of overlap/enclosure */ @@ -386,7 +381,7 @@ int mtrr_add_page(unsigned long base, unsigned long size, goto out; } /* Search for an empty MTRR */ - i = mtrr_if->get_free_region(base, size, replace); + i = mtrr_generic_get_free_region(base, size, replace); if (i >= 0) { set_mtrr(i, base, size, type); if (likely(replace < 0)) @@ -487,15 +482,12 @@ int mtrr_del_page(int reg, unsigned long base, unsigned long size) unsigned long lbase, lsize; int error = -EINVAL; - if (!mtrr_if) - return -ENXIO; - max = num_var_ranges; mutex_lock(&mtrr_mutex); if (reg < 0) { /* Search for existing MTRR */ for (i = 0; i < max; ++i) { - mtrr_if->get(i, &lbase, &lsize, <ype); + mtrr_generic_get(i, &lbase, &lsize, <ype); if (lbase == base && lsize == size) { reg = i; break; @@ -511,7 +503,7 @@ int mtrr_del_page(int reg, unsigned long base, unsigned long size) printk(KERN_WARNING "mtrr: register: %d too big\n", reg); goto out; } - mtrr_if->get(reg, &lbase, &lsize, <ype); + mtrr_generic_get(reg, &lbase, &lsize, <ype); if (lsize < 1) { printk(KERN_WARNING "mtrr: MTRR %d not used\n", reg); goto out; @@ -569,22 +561,19 @@ struct mtrr_value { void __init mtrr_bp_init(void) { if (cpu_has_mtrr) { - mtrr_if = &generic_mtrr_ops; size_or_mask = ~((1ULL << (paddr_bits - PAGE_SHIFT)) - 1); size_and_mask = ~size_or_mask & 0xfffff00000ULL; } - if (mtrr_if) { - set_num_var_ranges(); - init_table(); - if (use_intel()) - get_mtrr_state(); - } + set_num_var_ranges(); + init_table(); + if (use_intel()) + get_mtrr_state(); } void mtrr_ap_init(void) { - if (!mtrr_if || !use_intel() || hold_mtrr_updates_on_aps) + if (!use_intel() || hold_mtrr_updates_on_aps) return; /* * Ideally we should hold mtrr_mutex here to avoid mtrr entries changed, @@ -630,13 +619,11 @@ void mtrr_bp_restore(void) { if (!use_intel()) return; - mtrr_if->set_all(); + mtrr_generic_set_all(); } static int __init mtrr_init_finialize(void) { - if (!mtrr_if) - return 0; if (use_intel()) mtrr_state_warn(); return 0; diff --git a/xen/arch/x86/cpu/mtrr/mtrr.h b/xen/arch/x86/cpu/mtrr/mtrr.h index 619575f..92b0b11 100644 --- a/xen/arch/x86/cpu/mtrr/mtrr.h +++ b/xen/arch/x86/cpu/mtrr/mtrr.h @@ -63,8 +63,8 @@ extern void set_mtrr_ops(const struct mtrr_ops *); extern u64 size_or_mask, size_and_mask; extern const struct mtrr_ops *mtrr_if; -#define is_cpu(vnd) (mtrr_if && mtrr_if->vendor == X86_VENDOR_##vnd) -#define use_intel() (mtrr_if && mtrr_if->use_intel_if == 1) +#define is_cpu(vnd) (X86_VENDOR_INTEL == X86_VENDOR_##vnd) +#define use_intel() (1) extern unsigned int num_var_ranges; diff --git a/xen/arch/x86/platform_hypercall.c b/xen/arch/x86/platform_hypercall.c index 780f22d..4a294b4 100644 --- a/xen/arch/x86/platform_hypercall.c +++ b/xen/arch/x86/platform_hypercall.c @@ -265,7 +265,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op) ret = -EINVAL; if ( op->u.read_memtype.reg < num_var_ranges ) { - mtrr_if->get(op->u.read_memtype.reg, &mfn, &nr_mfns, &type); + mtrr_generic_get(op->u.read_memtype.reg, &mfn, &nr_mfns, &type); op->u.read_memtype.mfn = mfn; op->u.read_memtype.nr_mfns = nr_mfns; op->u.read_memtype.type = type; -- 2.7.3 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |