| From: Kevin Winchester <kjwinchester@gmail.com> |
| Date: Tue, 20 Dec 2011 20:52:22 -0400 |
| Subject: x86: Simplify code by removing a !SMP #ifdefs from 'struct cpuinfo_x86' |
| |
| commit 141168c36cdee3ff23d9c7700b0edc47cb65479f and |
| commit 3f806e50981825fa56a7f1938f24c0680816be45 upstream. |
| |
| Several fields in struct cpuinfo_x86 were not defined for the |
| !SMP case, likely to save space. However, those fields still |
| have some meaning for UP, and keeping them allows some #ifdef |
| removal from other files. The additional size of the UP kernel |
| from this change is not significant enough to worry about |
| keeping up the distinction: |
| |
| text data bss dec hex filename |
| 4737168 506459 972040 6215667 5ed7f3 vmlinux.o.before |
| 4737444 506459 972040 6215943 5ed907 vmlinux.o.after |
| |
| for a difference of 276 bytes for an example UP config. |
| |
| If someone wants those 276 bytes back badly then it should |
| be implemented in a cleaner way. |
| |
| Signed-off-by: Kevin Winchester <kjwinchester@gmail.com> |
| Cc: Steffen Persvold <sp@numascale.com> |
| Link: http://lkml.kernel.org/r/1324428742-12498-1-git-send-email-kjwinchester@gmail.com |
| Signed-off-by: Ingo Molnar <mingo@elte.hu> |
| Signed-off-by: Borislav Petkov <borislav.petkov@amd.com> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h |
| index bb3ee3629a0f..f7c89e231c6c 100644 |
| --- a/arch/x86/include/asm/processor.h |
| +++ b/arch/x86/include/asm/processor.h |
| @@ -99,7 +99,6 @@ struct cpuinfo_x86 { |
| u16 apicid; |
| u16 initial_apicid; |
| u16 x86_clflush_size; |
| -#ifdef CONFIG_SMP |
| /* number of cores as seen by the OS: */ |
| u16 booted_cores; |
| /* Physical processor id: */ |
| @@ -110,7 +109,6 @@ struct cpuinfo_x86 { |
| u8 compute_unit_id; |
| /* Index into per_cpu list: */ |
| u16 cpu_index; |
| -#endif |
| u32 microcode; |
| } __attribute__((__aligned__(SMP_CACHE_BYTES))); |
| |
| diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c |
| index bae1efe6d515..be16854591cc 100644 |
| --- a/arch/x86/kernel/amd_nb.c |
| +++ b/arch/x86/kernel/amd_nb.c |
| @@ -154,16 +154,14 @@ int amd_get_subcaches(int cpu) |
| { |
| struct pci_dev *link = node_to_amd_nb(amd_get_nb_id(cpu))->link; |
| unsigned int mask; |
| - int cuid = 0; |
| + int cuid; |
| |
| if (!amd_nb_has_feature(AMD_NB_L3_PARTITIONING)) |
| return 0; |
| |
| pci_read_config_dword(link, 0x1d4, &mask); |
| |
| -#ifdef CONFIG_SMP |
| cuid = cpu_data(cpu).compute_unit_id; |
| -#endif |
| return (mask >> (4 * cuid)) & 0xf; |
| } |
| |
| @@ -172,7 +170,7 @@ int amd_set_subcaches(int cpu, int mask) |
| static unsigned int reset, ban; |
| struct amd_northbridge *nb = node_to_amd_nb(amd_get_nb_id(cpu)); |
| unsigned int reg; |
| - int cuid = 0; |
| + int cuid; |
| |
| if (!amd_nb_has_feature(AMD_NB_L3_PARTITIONING) || mask > 0xf) |
| return -EINVAL; |
| @@ -190,9 +188,7 @@ int amd_set_subcaches(int cpu, int mask) |
| pci_write_config_dword(nb->misc, 0x1b8, reg & ~0x180000); |
| } |
| |
| -#ifdef CONFIG_SMP |
| cuid = cpu_data(cpu).compute_unit_id; |
| -#endif |
| mask <<= 4 * cuid; |
| mask |= (0xf ^ (1 << cuid)) << 26; |
| |
| diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c |
| index 3524e1f5e960..ff8557e2e101 100644 |
| --- a/arch/x86/kernel/cpu/amd.c |
| +++ b/arch/x86/kernel/cpu/amd.c |
| @@ -148,7 +148,6 @@ static void __cpuinit init_amd_k6(struct cpuinfo_x86 *c) |
| |
| static void __cpuinit amd_k7_smp_check(struct cpuinfo_x86 *c) |
| { |
| -#ifdef CONFIG_SMP |
| /* calling is from identify_secondary_cpu() ? */ |
| if (!c->cpu_index) |
| return; |
| @@ -192,7 +191,6 @@ static void __cpuinit amd_k7_smp_check(struct cpuinfo_x86 *c) |
| |
| valid_k7: |
| ; |
| -#endif |
| } |
| |
| static void __cpuinit init_amd_k7(struct cpuinfo_x86 *c) |
| diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c |
| index aa003b13a831..ca93cc79fbc6 100644 |
| --- a/arch/x86/kernel/cpu/common.c |
| +++ b/arch/x86/kernel/cpu/common.c |
| @@ -676,9 +676,7 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c) |
| if (this_cpu->c_early_init) |
| this_cpu->c_early_init(c); |
| |
| -#ifdef CONFIG_SMP |
| c->cpu_index = 0; |
| -#endif |
| filter_cpuid_features(c, false); |
| |
| setup_smep(c); |
| @@ -764,10 +762,7 @@ static void __cpuinit generic_identify(struct cpuinfo_x86 *c) |
| c->apicid = c->initial_apicid; |
| # endif |
| #endif |
| - |
| -#ifdef CONFIG_X86_HT |
| c->phys_proc_id = c->initial_apicid; |
| -#endif |
| } |
| |
| setup_smep(c); |
| diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c |
| index 523131213f08..3e6ff6cbf42a 100644 |
| --- a/arch/x86/kernel/cpu/intel.c |
| +++ b/arch/x86/kernel/cpu/intel.c |
| @@ -181,7 +181,6 @@ static void __cpuinit trap_init_f00f_bug(void) |
| |
| static void __cpuinit intel_smp_check(struct cpuinfo_x86 *c) |
| { |
| -#ifdef CONFIG_SMP |
| /* calling is from identify_secondary_cpu() ? */ |
| if (!c->cpu_index) |
| return; |
| @@ -198,7 +197,6 @@ static void __cpuinit intel_smp_check(struct cpuinfo_x86 *c) |
| WARN_ONCE(1, "WARNING: SMP operation may be unreliable" |
| "with B stepping processors.\n"); |
| } |
| -#endif |
| } |
| |
| static void __cpuinit intel_workarounds(struct cpuinfo_x86 *c) |
| diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c |
| index b0f1271e3138..3b678770dba5 100644 |
| --- a/arch/x86/kernel/cpu/mcheck/mce.c |
| +++ b/arch/x86/kernel/cpu/mcheck/mce.c |
| @@ -119,9 +119,7 @@ void mce_setup(struct mce *m) |
| m->time = get_seconds(); |
| m->cpuvendor = boot_cpu_data.x86_vendor; |
| m->cpuid = cpuid_eax(1); |
| -#ifdef CONFIG_SMP |
| m->socketid = cpu_data(m->extcpu).phys_proc_id; |
| -#endif |
| m->apicid = cpu_data(m->extcpu).initial_apicid; |
| rdmsrl(MSR_IA32_MCG_CAP, m->mcgcap); |
| } |
| diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c |
| index 445a61c39dff..d4444be98912 100644 |
| --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c |
| +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c |
| @@ -65,11 +65,9 @@ struct threshold_bank { |
| }; |
| static DEFINE_PER_CPU(struct threshold_bank * [NR_BANKS], threshold_banks); |
| |
| -#ifdef CONFIG_SMP |
| static unsigned char shared_bank[NR_BANKS] = { |
| 0, 0, 0, 0, 1 |
| }; |
| -#endif |
| |
| static DEFINE_PER_CPU(unsigned char, bank_map); /* see which banks are on */ |
| |
| @@ -227,10 +225,9 @@ void mce_amd_feature_init(struct cpuinfo_x86 *c) |
| |
| if (!block) |
| per_cpu(bank_map, cpu) |= (1 << bank); |
| -#ifdef CONFIG_SMP |
| + |
| if (shared_bank[bank] && c->cpu_core_id) |
| break; |
| -#endif |
| |
| memset(&b, 0, sizeof(b)); |
| b.cpu = cpu; |
| diff --git a/arch/x86/kernel/cpu/proc.c b/arch/x86/kernel/cpu/proc.c |
| index 14b23140e81f..8022c6681485 100644 |
| --- a/arch/x86/kernel/cpu/proc.c |
| +++ b/arch/x86/kernel/cpu/proc.c |
| @@ -64,12 +64,10 @@ static void show_cpuinfo_misc(struct seq_file *m, struct cpuinfo_x86 *c) |
| static int show_cpuinfo(struct seq_file *m, void *v) |
| { |
| struct cpuinfo_x86 *c = v; |
| - unsigned int cpu = 0; |
| + unsigned int cpu; |
| int i; |
| |
| -#ifdef CONFIG_SMP |
| cpu = c->cpu_index; |
| -#endif |
| seq_printf(m, "processor\t: %u\n" |
| "vendor_id\t: %s\n" |
| "cpu family\t: %d\n" |
| diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c |
| index 18a129391c0f..0db57b594c62 100644 |
| --- a/drivers/edac/sb_edac.c |
| +++ b/drivers/edac/sb_edac.c |
| @@ -1609,11 +1609,9 @@ static int sbridge_mce_check_error(struct notifier_block *nb, unsigned long val, |
| mce->cpuvendor, mce->cpuid, mce->time, |
| mce->socketid, mce->apicid); |
| |
| -#ifdef CONFIG_SMP |
| /* Only handle if it is the right mc controller */ |
| if (cpu_data(mce->cpu).phys_proc_id != pvt->sbridge_dev->mc) |
| return NOTIFY_DONE; |
| -#endif |
| |
| smp_rmb(); |
| if ((pvt->mce_out + 1) % MCE_LOG_LEN == pvt->mce_in) { |
| diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c |
| index 0790c98e294e..19b4412ed534 100644 |
| --- a/drivers/hwmon/coretemp.c |
| +++ b/drivers/hwmon/coretemp.c |
| @@ -57,16 +57,15 @@ MODULE_PARM_DESC(tjmax, "TjMax value in degrees Celsius"); |
| #define TOTAL_ATTRS (MAX_CORE_ATTRS + 1) |
| #define MAX_CORE_DATA (NUM_REAL_CORES + BASE_SYSFS_ATTR_NO) |
| |
| -#ifdef CONFIG_SMP |
| #define TO_PHYS_ID(cpu) cpu_data(cpu).phys_proc_id |
| #define TO_CORE_ID(cpu) cpu_data(cpu).cpu_core_id |
| +#define TO_ATTR_NO(cpu) (TO_CORE_ID(cpu) + BASE_SYSFS_ATTR_NO) |
| + |
| +#ifdef CONFIG_SMP |
| #define for_each_sibling(i, cpu) for_each_cpu(i, cpu_sibling_mask(cpu)) |
| #else |
| -#define TO_PHYS_ID(cpu) (cpu) |
| -#define TO_CORE_ID(cpu) (cpu) |
| #define for_each_sibling(i, cpu) for (i = 0; false; ) |
| #endif |
| -#define TO_ATTR_NO(cpu) (TO_CORE_ID(cpu) + BASE_SYSFS_ATTR_NO) |
| |
| /* |
| * Per-Core Temperature Data |