Messages in this thread - First message in thread
- "Moger, Babu"
- "Moger, Babu"
- "Moger, Babu"
- "Moger, Babu"
- "Moger, Babu"
- "Moger, Babu"
- "Moger, Babu"
- "Moger, Babu"
- "Moger, Babu"
- "Moger, Babu"
- "Moger, Babu"
- Thomas Gleixner
- Fenghua Yu
Patch in this message |  | | From | "Moger, Babu" <> | Subject | [RFC PATCH 06/10] arch/x86: Initialize the resource functions that are different | Date | Mon, 24 Sep 2018 19:19:07 +0000 |
| |
Initialize the resource functions that are different between the vendors. Some features are initialized differently between the vendors.
For example, MBA feature varies significantly between Intel and AMD. Separate the initialization of these resource functions. That way we can easily add AMD's functions later.
Signed-off-by: Babu Moger <babu.moger@amd.com> --- arch/x86/kernel/cpu/rdt.c | 28 +++++++++++++++++++++++++--- arch/x86/kernel/cpu/rdt.h | 4 ++++ 2 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/arch/x86/kernel/cpu/rdt.c b/arch/x86/kernel/cpu/rdt.c index 736715b81fd8..6dec45bf81d6 100644 --- a/arch/x86/kernel/cpu/rdt.c +++ b/arch/x86/kernel/cpu/rdt.c @@ -174,10 +174,7 @@ struct rdt_resource rdt_resources_all[] = { .rid = RDT_RESOURCE_MBA, .name = "MB", .domains = domain_init(RDT_RESOURCE_MBA), - .msr_base = IA32_MBA_THRTL_BASE, - .msr_update = mba_wrmsr, .cache_level = 3, - .parse_ctrlval = parse_bw, .format_str = "%d=%*u", .fflags = RFTYPE_RES_MB, }, @@ -865,6 +862,25 @@ static __init void rdt_check_mba(void) rdt_get_mem_config(&rdt_resources_all[RDT_RESOURCE_MBA]); } +static __init void rdt_init_res_defs_intel(void) +{ + struct rdt_resource *r; + + for_each_rdt_resource(r) { + if (r->rid == RDT_RESOURCE_MBA) { + r->msr_base = IA32_MBA_THRTL_BASE; + r->msr_update = mba_wrmsr; + r->parse_ctrlval = parse_bw; + } + } +} + +static __init void rdt_init_res_defs(void) +{ + if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) + rdt_init_res_defs_intel(); +} + static enum cpuhp_state rdt_online; static int __init rdt_late_init(void) @@ -875,6 +891,12 @@ static int __init rdt_late_init(void) /* Run quirks first */ rdt_quirks(); + /* + * Initialize functions(or definitions) that are different + * between vendors here. + */ + rdt_init_res_defs(); + rdt_alloc_capable = get_rdt_alloc_resources(); rdt_mon_capable = get_rdt_mon_resources(); diff --git a/arch/x86/kernel/cpu/rdt.h b/arch/x86/kernel/cpu/rdt.h index c15417a6b1af..2569c10c37f4 100644 --- a/arch/x86/kernel/cpu/rdt.h +++ b/arch/x86/kernel/cpu/rdt.h @@ -455,6 +455,10 @@ enum { RDT_NUM_RESOURCES, }; +#define for_each_rdt_resource(r) \ + for (r = rdt_resources_all; r < rdt_resources_all + RDT_NUM_RESOURCES;\ + r++) + #define for_each_capable_rdt_resource(r) \ for (r = rdt_resources_all; r < rdt_resources_all + RDT_NUM_RESOURCES;\ r++) \ -- 2.17.1
|  |