Re: [PATCH] x86: don't compile vsmp_64 for 32bit

From: Yinghai Lu
Date: Thu Feb 26 2009 - 03:41:35 EST


Ravikiran G Thirumalai wrote:
> On Wed, Feb 25, 2009 at 09:20:50PM -0800, Yinghai Lu wrote:
>> Impact: cleanup
>>
>> that is only needed when CONFIG_X86_VSMP is defined with 64bit
>> also remove dead code about PCI, because CONFIG_X86_VSMP depends on PCI
>>
>> Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>
>>
>
> NAK!
> vsmp64.c is compiled unconditionally for a reason. There are ifdefs in the
> file to avoid code compilation based on config options. is_vsmp_box() is
> needed even when CONFIG_X86_VSMP is not enabled, since distro kernels don't ship
> with CONFIG_X86_VSMP, and since is_vsmp_box() is used to determine whether
> tsc's can be considered synced or not, this is needed.

so even CONFIG_X86_VSMP is not defined, you want all x86 systems including 32bit kernel and 64bit kernel
to call

static int is_vsmp = -1;

static void __init detect_vsmp_box(void)
{
is_vsmp = 0;

if (!early_pci_allowed())
return;

/* Check if we are running on a ScaleMP vSMPowered box */
if (read_pci_config(0, 0x1f, 0, PCI_VENDOR_ID) ==
(PCI_VENDOR_ID_SCALEMP | (PCI_DEVICE_ID_SCALEMP_VSMP_CTL << 16)))
is_vsmp = 1;
}

int is_vsmp_box(void)
{
if (is_vsmp != -1)
return is_vsmp;
else {
WARN_ON_ONCE(1);
return 0;
}
}


>
> In the future, I would appreciate if you copy me on cleanups/changes involving
> vsmp64.c

i didn't touch vsmp64.c

YH

>
> Thanks,
> Kiran
>
>> ---
>> arch/x86/include/asm/apic.h | 7 +++++++
>> arch/x86/include/asm/setup.h | 4 ++++
>> arch/x86/kernel/Makefile | 2 +-
>> arch/x86/kernel/setup.c | 2 --
>> arch/x86/kernel/vsmp_64.c | 12 +-----------
>> 5 files changed, 13 insertions(+), 14 deletions(-)
>>
>> Index: linux-2.6/arch/x86/include/asm/apic.h
>> ===================================================================
>> --- linux-2.6.orig/arch/x86/include/asm/apic.h
>> +++ linux-2.6/arch/x86/include/asm/apic.h
>> @@ -75,7 +75,14 @@ static inline void default_inquire_remot
>> #define setup_secondary_clock setup_secondary_APIC_clock
>> #endif
>>
>> +#ifdef CONFIG_X86_VSMP
>> extern int is_vsmp_box(void);
>> +#else
>> +static inline int is_vsmp_box(void)
>> +{
>> + return 0;
>> +}
>> +#endif
>> extern void xapic_wait_icr_idle(void);
>> extern u32 safe_xapic_wait_icr_idle(void);
>> extern void xapic_icr_write(u32, u32);
>> Index: linux-2.6/arch/x86/include/asm/setup.h
>> ===================================================================
>> --- linux-2.6.orig/arch/x86/include/asm/setup.h
>> +++ linux-2.6/arch/x86/include/asm/setup.h
>> @@ -64,7 +64,11 @@ extern void x86_quirk_time_init(void);
>> #include <asm/bootparam.h>
>>
>> /* Interrupt control for vSMPowered x86_64 systems */
>> +#ifdef CONFIG_X86_VSMP
>> void vsmp_init(void);
>> +#else
>> +static inline void vsmp_init(void) { }
>> +#endif
>>
>> void setup_bios_corruption_check(void);
>>
>> Index: linux-2.6/arch/x86/kernel/Makefile
>> ===================================================================
>> --- linux-2.6.orig/arch/x86/kernel/Makefile
>> +++ linux-2.6/arch/x86/kernel/Makefile
>> @@ -70,7 +70,7 @@ obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += f
>> obj-$(CONFIG_KEXEC) += machine_kexec_$(BITS).o
>> obj-$(CONFIG_KEXEC) += relocate_kernel_$(BITS).o crash.o
>> obj-$(CONFIG_CRASH_DUMP) += crash_dump_$(BITS).o
>> -obj-y += vsmp_64.o
>> +obj-$(CONFIG_X86_VSMP) += vsmp_64.o
>> obj-$(CONFIG_KPROBES) += kprobes.o
>> obj-$(CONFIG_MODULES) += module_$(BITS).o
>> obj-$(CONFIG_EFI) += efi.o efi_$(BITS).o efi_stub_$(BITS).o
>> Index: linux-2.6/arch/x86/kernel/setup.c
>> ===================================================================
>> --- linux-2.6.orig/arch/x86/kernel/setup.c
>> +++ linux-2.6/arch/x86/kernel/setup.c
>> @@ -863,9 +863,7 @@ void __init setup_arch(char **cmdline_p)
>>
>> reserve_initrd();
>>
>> -#ifdef CONFIG_X86_64
>> vsmp_init();
>> -#endif
>>
>> io_delay_init();
>>
>> Index: linux-2.6/arch/x86/kernel/vsmp_64.c
>> ===================================================================
>> --- linux-2.6.orig/arch/x86/kernel/vsmp_64.c
>> +++ linux-2.6/arch/x86/kernel/vsmp_64.c
>> @@ -22,7 +22,7 @@
>> #include <asm/paravirt.h>
>> #include <asm/setup.h>
>>
>> -#if defined CONFIG_PCI && defined CONFIG_PARAVIRT
>> +#ifdef CONFIG_PARAVIRT
>> /*
>> * Interrupt control on vSMPowered systems:
>> * ~AC is a shadow of IF. If IF is 'on' AC should be 'off'
>> @@ -114,7 +114,6 @@ static void __init set_vsmp_pv_ops(void)
>> }
>> #endif
>>
>> -#ifdef CONFIG_PCI
>> static int is_vsmp = -1;
>>
>> static void __init detect_vsmp_box(void)
>> @@ -139,15 +138,6 @@ int is_vsmp_box(void)
>> return 0;
>> }
>> }
>> -#else
>> -static void __init detect_vsmp_box(void)
>> -{
>> -}
>> -int is_vsmp_box(void)
>> -{
>> - return 0;
>> -}
>> -#endif
>>
>> void __init vsmp_init(void)
>> {
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at http://www.tux.org/lkml/

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/