[patch 14/18] x86, ds: use single debug store cpu configuration

markus.t.metzger
2009-04-02T15:02:55Z

[-- Attachment #1: tip.master.ds.single_configuration.patch --]
[-- Type: text/plain, Size: 1298 bytes --]

Use a single configuration for all cpus.

Reported-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Markus Metzger <markus.t.metzger@intel.com>
---
arch/x86/kernel/ds.c | 9 6 + 3 - 0 !
1 file changed, 6 insertions(+), 3 deletions(-)

Index: b/arch/x86/kernel/ds.c
===================================================================
--- a/arch/x86/kernel/ds.c
+++ b/arch/x86/kernel/ds.c
@@ -46,9 +46,8 @@ struct ds_configuration {
/* Control bit-masks indexed by enum ds_feature: */
unsigned long ctl[dsf_ctl_max];
};
-static DEFINE_PER_CPU(struct ds_configuration, ds_cfg_array);
+static struct ds_configuration ds_cfg __read_mostly;

-#define ds_cfg per_cpu(ds_cfg_array, smp_processor_id())

/* Maximal size of a DS configuration: */
#define MAX_SIZEOF_DS (12 * 8)
@@ -1291,11 +1290,15 @@ ds_configure(const struct ds_configurati
printk("bts/pebs record: %u/%u bytes\n",
ds_cfg.sizeof_rec[ds_bts], ds_cfg.sizeof_rec[ds_pebs]);

- WARN_ON_ONCE(MAX_SIZEOF_DS < (12 * ds_cfg.sizeof_ptr_field));
+ WARN_ON(MAX_SIZEOF_DS < (12 * ds_cfg.sizeof_ptr_field));
}

void __cpuinit ds_init_intel(struct cpuinfo_x86 *c)
{
+ /* Only configure the first cpu. Others are identical. */
+ if (ds_cfg.name)
+ return;
+
switch (c->x86) {
case 0x6:
switch (c->x86_model) {