--- linux.original/Documentation/00-INDEX	2001-08-27 16:44:15.000000000 +0200
+++ linux/Documentation/00-INDEX	2004-07-09 14:30:15.000000000 +0200
@@ -52,6 +52,8 @@ cdrom/
 	- directory with information on the CD-ROM drivers that Linux has.
 computone.txt
 	- info on Computone Intelliport II/Plus Multiport Serial Driver
+cpufreq
+	- describes the CPU frequency and voltage scaling support 
 cpqarray.txt
 	- info on using Compaq's SMART2 Intelligent Disk Array Controllers.
 devices.txt
--- linux.original/Documentation/Configure.help	2004/08/31 09:55:20
+++ linux/Documentation/Configure.help	2004/08/31 09:55:38
@@ -28322,16 +28322,6 @@
   Say Y if you want support for the ARM926T processor.
   Otherwise, say N.
 
-Support CPU clock change (EXPERIMENTAL)
-CONFIG_CPU_FREQ
-  CPU clock scaling allows you to change the clock speed of the
-  running CPU on the fly. This is a nice method to save battery power,
-  because the lower the clock speed, the less power the CPU
-  consumes. Note that this driver doesn't automatically change the CPU
-  clock speed, you need some userland tools (which still have to be
-  written) to implement the policy. If you don't understand what this
-  is all about, it's safe to say 'N'.
-
 SiS
 CONFIG_DRM_SIS
   Choose this option if you have a SIS graphics card. AGP support is
@@ -28747,6 +28737,154 @@
 CONFIG_IPMI_WATCHDOG
   This enables the IPMI watchdog timer.
 
+CONFIG_CPU_FREQ
+  Clock scaling allows you to change the clock speed of CPUs on the
+  fly. This is a nice method to save battery power on notebooks,
+  because the lower the clock speed, the less power the CPU consumes.
+
+  For more information, take a look at linux/Documentation/cpu-freq.
+
+  If in doubt, say N.
+
+CONFIG_CPU_FREQ_TABLE
+  Many CPUFreq drivers use these helpers, so only say N here if
+  the CPUFreq driver of your choice doesn't need these helpers.
+
+  If in doubt, say Y.
+
+CONFIG_CPU_FREQ_24_API
+  This enables the /proc/sys/cpu/ sysctl interface for controlling
+  CPUFreq, as known from the 2.4.-kernel patches for CPUFreq. 2.5
+  uses /proc/cpufreq instead. Please note that some drivers do not 
+  work well with the 2.4. /proc/sys/cpu sysctl interface, so if in
+  doubt, say N here.
+
+  For details, take a look at linux/Documentation/cpu-freq. 
+
+  If in doubt, say N.
+
+CONFIG_X86_POWERNOW_K6
+  This adds the CPUFreq driver for mobile AMD K6-2+ and mobile
+  AMD K6-3+ processors.
+
+  For details, take a look at linux/Documentation/cpu-freq. 
+
+  If in doubt, say N.
+
+CONFIG_X86_POWERNOW_K7
+  This adds the CPUFreq driver for mobile AMD Athlon/Duron 
+  K7 processors.
+
+  For details, take a look at linux/Documentation/cpu-freq. 
+
+  If in doubt, say N.
+
+CONFIG_X86_POWERNOW_K8
+  This adds the CPUFreq driver for mobile AMD Opteron/Athlon64 processors.
+
+  For details, take a look at linux/Documentation/cpu-freq.
+
+  If in doubt, say N.
+
+CONFIG_X86_P4_CLOCKMOD
+  This adds the CPUFreq driver for Intel Pentium 4 / XEON
+  processors.
+
+  For details, take a look at linux/Documentation/cpu-freq. 
+
+  If in doubt, say N.
+
+CONFIG_ELAN_CPUFREQ
+  This adds the CPUFreq driver for AMD Elan SC400 and SC410
+  processors.
+
+  You need to specify the processor maximum speed as boot
+  parameter: elanfreq=maxspeed (in kHz) or as module
+  parameter "max_freq".
+
+  For details, take a look at linux/Documentation/cpu-freq. 
+
+  If in doubt, say N.
+
+CONFIG_X86_LONGHAUL
+  This adds the CPUFreq driver for VIA Samuel/CyrixIII, 
+  VIA Cyrix Samuel/C3, VIA Cyrix Ezra and VIA Cyrix Ezra-T 
+  processors.
+
+  If you do not want to scale the Front Side Bus or voltage,
+  pass the module parameter "dont_scale_fsb=1" or
+  "dont_scale_voltage=1". Additionally, it is advised that
+  you pass the current Front Side Bus speed (in MHz) to 
+  this module as module parameter "current_fsb", e.g. 
+  "current_fsb=133" for a Front Side Bus speed of 133 MHz.
+
+  For details, take a look at linux/Documentation/cpu-freq. 
+
+  If in doubt, say N.
+
+CONFIG_X86_SPEEDSTEP_PIIX4
+  This adds the CPUFreq driver for certain mobile Intel Pentium III
+  (Coppermine), all mobile Intel Pentium III-M (Tualatin) and all
+  mobile Intel Pentium 4 P4-Ms on chipsets with an Intel PIIX4
+  southbridge.
+
+  For details, take a look at linux/Documentation/cpu-freq. 
+
+  If in doubt, say N.
+
+CONFIG_X86_SPEEDSTEP_ICH
+  This adds the CPUFreq driver for certain mobile Intel Pentium III
+  (Coppermine), all mobile Intel Pentium III-M (Tualatin) and all
+  mobile Intel Pentium 4 P4-Ms on chipsets with an Intel ICH2, ICH3,
+  or ICH4 southbridge.
+
+  For details, take a look at linux/Documentation/cpu-freq. 
+
+  If in doubt, say N.
+
+CONFIG_X86_SPEEDSTEP_CENTRINO
+  This adds the CPUFreq driver for Enhanced SpeedStep enabled
+  mobile CPUs. This means Intel Pentium M (Centrino) CPUs.
+
+  For details, take a look at linux/Documentation/cpu-freq.
+
+  If in doubt, say N.
+
+CONFIG_X86_SPEEDSTEP_SMI
+  This adds the CPUFreq driver for certain mobile Intel Pentium III
+  (Coppermine), all mobile Intel Pentium III-M (Tualatin)  
+  on systems which have an Intel 440BX/ZX/MX southbridge.
+
+  For details, take a look at linux/Documentation/cpu-freq.
+
+  If in doubt, say N.
+
+CONFIG_X86_LONGRUN
+  This adds the CPUFreq driver for Transmeta Crusoe processors which
+  support LongRun.
+
+  For details, take a look at linux/Documentation/cpu-freq. 
+
+  If in doubt, say N.
+
+CONFIG_X86_GX_SUSPMOD
+  This adds the CPUFreq driver for NatSemi Geode processors which
+  support suspend modulation.
+
+  For details, take a look at linux/Documentation/cpu-freq.
+
+  If in doubt, say N.
+
+CONFIG_CPU_FREQ_GOV_USERSPACE
+  Enable this cpufreq governor when you either want to set the
+  CPU frequency manually or when an userspace programm shall
+  be able to set the CPU dynamically, like on LART 
+  ( http://www.lart.tudelft.nl/ )
+
+  For details, take a look at linux/Documentation/cpu-freq. 
+
+  If in doubt, say Y.
+
 CRC32 functions
 CONFIG_CRC32
   This option is provided for the case where no in-kernel-tree
--- linux.original/Makefile	2004-04-14 15:05:41.000000000 +0200
+++ linux/Makefile	2004-07-09 14:30:15.000000000 +0200
@@ -194,6 +194,7 @@ DRIVERS-$(CONFIG_BLUEZ) += drivers/bluet
 DRIVERS-$(CONFIG_HOTPLUG_PCI) += drivers/hotplug/vmlinux-obj.o
 DRIVERS-$(CONFIG_ISDN_BOOL) += drivers/isdn/vmlinux-obj.o
 DRIVERS-$(CONFIG_CRYPTO) += crypto/crypto.o
+DRIVERS-$(CONFIG_CPU_FREQ) += drivers/cpufreq/built-in.o
 
 DRIVERS := $(DRIVERS-y)
 
--- linux.original/arch/i386/boot/setup.S	2004-02-18 14:36:30.000000000 +0100
+++ linux/arch/i386/boot/setup.S	2004-07-09 14:30:15.000000000 +0200
@@ -490,6 +490,18 @@ no_mca:
 	movw	$0xAA, (0x1ff)			# device present
 no_psmouse:
 
+#if defined(CONFIG_X86_SPEEDSTEP_SMI) || defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE)
+	movl	$0x0000E980, %eax		# IST Support 
+	movl	$0x47534943, %edx		# Request value
+	int	$0x15
+
+	movl	%eax, (96)
+	movl	%ebx, (100)
+	movl	%ecx, (104)
+	movl	%edx, (108)
+#endif
+
+
 #if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE)
 # Then check for an APM BIOS...
 						# %ds points to the bootsector
--- linux.original/arch/i386/config.in	2004-02-18 14:36:30.000000000 +0100
+++ linux/arch/i386/config.in	2004-07-09 14:30:15.000000000 +0200
@@ -194,6 +194,33 @@ fi
 
 bool 'Machine Check Exception' CONFIG_X86_MCE
 
+mainmenu_option next_comment
+comment 'CPU Frequency scaling'
+bool 'CPU Frequency scaling' CONFIG_CPU_FREQ
+if [ "$CONFIG_CPU_FREQ" = "y" ]; then
+   bool ' CPU frequency table helpers' CONFIG_CPU_FREQ_TABLE
+   define_bool CONFIG_CPU_FREQ_PROC_INTF y
+   comment 'CPUFreq governors'
+   bool ' Support for governing from userspace' CONFIG_CPU_FREQ_GOV_USERSPACE
+   define_bool CONFIG_CPU_FREQ_24_API y
+   comment 'CPUFreq processor drivers'
+   dep_tristate ' AMD Mobile K6-2/K6-3 PowerNow!' CONFIG_X86_POWERNOW_K6 $CONFIG_CPU_FREQ_TABLE
+   dep_tristate ' AMD Mobile Athlon/Duron K7 PowerNow!' CONFIG_X86_POWERNOW_K7 $CONFIG_CPU_FREQ_TABLE
+   dep_tristate ' AMD Opteron/Athlon64 PowerNow!' CONFIG_X86_POWERNOW_K8 $CONFIG_CPU_FREQ_TABLE
+   if [ "$CONFIG_MELAN" = "y" ]; then
+       dep_tristate ' AMD Elan' CONFIG_ELAN_CPUFREQ $CONFIG_CPU_FREQ_TABLE
+   fi
+   dep_tristate ' VIA Cyrix III Longhaul' CONFIG_X86_LONGHAUL $CONFIG_CPU_FREQ_TABLE
+   dep_tristate ' Intel Speedstep (PIIX4)' CONFIG_X86_SPEEDSTEP_PIIX4  $CONFIG_CPU_FREQ_TABLE
+   dep_tristate ' Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)' CONFIG_X86_SPEEDSTEP_SMI  $CONFIG_CPU_FREQ_TABLE
+   dep_tristate ' Intel Speedstep (ICH)' CONFIG_X86_SPEEDSTEP_ICH  $CONFIG_CPU_FREQ_TABLE
+   dep_tristate ' Intel Pentium-M Enhanced SpeedStep' CONFIG_X86_SPEEDSTEP_CENTRINO $CONFIG_CPU_FREQ_TABLE
+   dep_tristate ' Intel Pentium 4 clock modulation' CONFIG_X86_P4_CLOCKMOD $CONFIG_CPU_FREQ_TABLE
+   tristate ' Transmeta LongRun' CONFIG_X86_LONGRUN
+   tristate ' Cyrix MediaGX/NatSemi Geode Suspend Modulation' CONFIG_X86_GX_SUSPMOD
+fi
+endmenu
+
 tristate 'Toshiba Laptop support' CONFIG_TOSHIBA
 tristate 'Dell laptop support' CONFIG_I8K
 
--- linux.original/arch/i386/kernel/Makefile	2003-11-28 19:26:19.000000000 +0100
+++ linux/arch/i386/kernel/Makefile	2004-07-09 14:30:15.000000000 +0200
@@ -14,7 +14,8 @@ all: kernel.o head.o init_task.o
 
 O_TARGET := kernel.o
 
-export-objs     := mca.o mtrr.o msr.o cpuid.o microcode.o i386_ksyms.o time.o setup.o
+export-objs     := mca.o mtrr.o msr.o cpuid.o microcode.o i386_ksyms.o time.o \
+		setup.o speedstep-lib.o
 
 obj-y	:= process.o semaphore.o signal.o entry.o traps.o irq.o vm86.o \
 		ptrace.o i8259.o ioport.o ldt.o setup.o time.o sys_i386.o \
@@ -43,5 +44,17 @@ obj-$(CONFIG_X86_LOCAL_APIC)	+= mpparse.
 obj-$(CONFIG_X86_IO_APIC)	+= io_apic.o
 obj-$(CONFIG_X86_VISWS_APIC)	+= visws_apic.o
 obj-$(CONFIG_EDD)             	+= edd.o
+obj-$(CONFIG_X86_POWERNOW_K6)	+= powernow-k6.o
+obj-$(CONFIG_X86_POWERNOW_K7)	+= powernow-k7.o
+obj-$(CONFIG_X86_POWERNOW_K8)	+= powernow-k8.o
+obj-$(CONFIG_X86_LONGHAUL)	+= longhaul.o
+obj-$(CONFIG_X86_SPEEDSTEP_CENTRINO)	+= speedstep-centrino.o
+obj-$(CONFIG_X86_SPEEDSTEP_PIIX4)	+= speedstep-piix4.o speedstep-lib.o
+obj-$(CONFIG_X86_SPEEDSTEP_SMI)	+= speedstep-smi.o speedstep-lib.o
+obj-$(CONFIG_X86_SPEEDSTEP_ICH)	+= speedstep-ich.o speedstep-lib.o
+obj-$(CONFIG_X86_P4_CLOCKMOD)	+= p4-clockmod.o
+obj-$(CONFIG_ELAN_CPUFREQ)	+= elanfreq.o
+obj-$(CONFIG_X86_LONGRUN)	+= longrun.o  
+obj-$(CONFIG_X86_GX_SUSPMOD)	+= gx-suspmod.o  
 
 include $(TOPDIR)/Rules.make
--- linux.original/arch/i386/kernel/i386_ksyms.c	2004-04-14 15:05:25.000000000 +0200
+++ linux/arch/i386/kernel/i386_ksyms.c	2004-07-09 15:02:19.000000000 +0200
@@ -28,6 +28,7 @@
 #include <asm/desc.h>
 #include <asm/pgtable.h>
 #include <asm/pgalloc.h>
+#include <asm/ist.h>
 #include <asm/edd.h>
 
 extern void dump_thread(struct pt_regs *, struct user *);
@@ -50,6 +51,7 @@ extern struct drive_info_struct drive_in
 EXPORT_SYMBOL(drive_info);
 #endif
 
+extern unsigned long cpu_khz;
 extern unsigned long get_cmos_time(void);
 
 /* platform dependent support */
@@ -71,8 +73,10 @@ EXPORT_SYMBOL(probe_irq_mask);
 EXPORT_SYMBOL(kernel_thread);
 EXPORT_SYMBOL(pm_idle);
 EXPORT_SYMBOL(pm_power_off);
+EXPORT_SYMBOL(cpu_khz);
 EXPORT_SYMBOL(get_cmos_time);
 EXPORT_SYMBOL(apm_info);
+EXPORT_SYMBOL(ist_info);
 EXPORT_SYMBOL(gdt);
 EXPORT_SYMBOL(empty_zero_page);
 
--- linux.original/arch/i386/kernel/setup.c	2004-04-14 15:05:25.000000000 +0200
+++ linux/arch/i386/kernel/setup.c	2004-07-09 14:30:15.000000000 +0200
@@ -120,6 +120,7 @@
 #include <asm/dma.h>
 #include <asm/mpspec.h>
 #include <asm/mmu_context.h>
+#include <asm/ist.h>
 #include <asm/io_apic.h>
 #include <asm/edd.h>
 /*
@@ -158,6 +159,7 @@ static unsigned int highmem_pages __init
 struct drive_info_struct { char dummy[32]; } drive_info;
 struct screen_info screen_info;
 struct apm_info apm_info;
+struct ist_info ist_info;
 struct sys_desc_table_struct {
 	unsigned short length;
 	unsigned char table[0];
@@ -202,6 +204,7 @@ extern int blk_nohighio;
 #define E820_MAP_NR (*(char*) (PARAM+E820NR))
 #define E820_MAP    ((struct e820entry *) (PARAM+E820MAP))
 #define APM_BIOS_INFO (*(struct apm_bios_info *) (PARAM+0x40))
+#define IST_INFO (*(struct ist_info *) (PARAM+0x60))
 #define DRIVE_INFO (*(struct drive_info_struct *) (PARAM+0x80))
 #define SYS_DESC_TABLE (*(struct sys_desc_table_struct*)(PARAM+0xa0))
 #define MOUNT_ROOT_RDONLY (*(unsigned short *) (PARAM+0x1F2))
@@ -1190,6 +1193,7 @@ void __init setup_arch(char **cmdline_p)
  	drive_info = DRIVE_INFO;
  	screen_info = SCREEN_INFO;
 	apm_info.bios = APM_BIOS_INFO;
+	ist_info = IST_INFO;
 	if( SYS_DESC_TABLE.length != 0 ) {
 		MCA_bus = SYS_DESC_TABLE.table[3] &0x2;
 		machine_id = SYS_DESC_TABLE.table[0];
--- linux.original/arch/i386/kernel/time.c	2004-02-18 14:36:30.000000000 +0100
+++ linux/arch/i386/kernel/time.c	2004-07-09 14:30:15.000000000 +0200
@@ -55,6 +55,7 @@
 #include <linux/mc146818rtc.h>
 #include <linux/timex.h>
 #include <linux/config.h>
+#include <linux/cpufreq.h>
 
 #include <asm/fixmap.h>
 #include <asm/cobalt.h>
@@ -834,6 +835,49 @@ bad_ctc:
 	return 0;
 }
 
+#ifdef CONFIG_CPU_FREQ
+static unsigned int  ref_freq = 0;
+static unsigned long loops_per_jiffy_ref = 0;
+
+#ifndef CONFIG_SMP
+static unsigned long fast_gettimeoffset_ref = 0;
+static unsigned long cpu_khz_ref = 0;
+#endif
+
+static int
+time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
+		       void *data)
+{
+	struct cpufreq_freqs *freq = data;
+
+	if (!ref_freq) {
+		ref_freq = freq->old;
+		loops_per_jiffy_ref = cpu_data[freq->cpu].loops_per_jiffy;
+#ifndef CONFIG_SMP
+		fast_gettimeoffset_ref = fast_gettimeoffset_quotient;
+		cpu_khz_ref = cpu_khz;
+#endif
+	}
+
+	if ((val == CPUFREQ_PRECHANGE  && freq->old < freq->new) ||
+	    (val == CPUFREQ_POSTCHANGE && freq->old > freq->new)) {
+		cpu_data[freq->cpu].loops_per_jiffy = cpufreq_scale(loops_per_jiffy_ref, ref_freq, freq->new);
+#ifndef CONFIG_SMP
+		if (use_tsc) {
+			fast_gettimeoffset_quotient = cpufreq_scale(fast_gettimeoffset_ref, freq->new, ref_freq);
+			cpu_khz = cpufreq_scale(cpu_khz_ref, ref_freq, freq->new);
+		}
+#endif
+	}
+
+	return 0;
+}
+
+static struct notifier_block time_cpufreq_notifier_block = {
+	.notifier_call	= time_cpufreq_notifier
+};
+#endif
+
 void __init time_init(void)
 {
 	extern int x86_udelay_tsc;
@@ -902,6 +946,9 @@ void __init time_init(void)
 	                	"0" (eax), "1" (edx));
 				printk("Detected %lu.%03lu MHz processor.\n", cpu_khz / 1000, cpu_khz % 1000);
 			}
+#if defined(CONFIG_CPU_FREQ)
+			cpufreq_register_notifier(&time_cpufreq_notifier_block, CPUFREQ_TRANSITION_NOTIFIER);
+#endif
 		}
 	}
 
--- linux.original/drivers/Makefile	2003-11-28 19:26:19.000000000 +0100
+++ linux/drivers/Makefile	2004-07-09 14:30:15.000000000 +0200
@@ -8,12 +8,13 @@
 
 mod-subdirs :=	dio hil mtd sbus video macintosh usb input telephony ide \
 		message/i2o message/fusion scsi md ieee1394 pnp isdn atm \
-		fc4 net/hamradio i2c acpi bluetooth usb/gadget
+		fc4 net/hamradio i2c acpi bluetooth cpufreq usb/gadget
 
 subdir-y :=	parport char block net sound misc media cdrom hotplug
 subdir-m :=	$(subdir-y)
 
 
+subdir-$(CONFIG_CPU_FREQ)	+= cpufreq
 subdir-$(CONFIG_DIO)		+= dio
 subdir-$(CONFIG_PCI)		+= pci
 subdir-$(CONFIG_GSC)		+= gsc
--- /dev/null	2004-06-22 21:52:41.000000000 +0200
+++ linux/include/asm-i386/ist.h	2004-07-09 14:30:15.000000000 +0200
@@ -0,0 +1,32 @@
+#ifndef _ASM_IST_H
+#define _ASM_IST_H
+
+/*
+ * Include file for the interface to IST BIOS
+ * Copyright 2002 Andy Grover <andrew.grover@intel.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ */
+
+
+#ifdef __KERNEL__
+
+struct ist_info {
+	unsigned long	signature;
+	unsigned long	command;
+	unsigned long	event;
+	unsigned long	perf_level;
+};
+
+extern struct ist_info ist_info;
+
+#endif	/* __KERNEL__ */
+#endif	/* _ASM_IST_H */
--- linux.original/include/asm-i386/msr.h	2003-11-28 19:26:21.000000000 +0100
+++ linux/include/asm-i386/msr.h	2004-07-09 14:30:15.000000000 +0200
@@ -17,6 +17,21 @@
 			  : /* no outputs */ \
 			  : "c" (msr), "a" (val1), "d" (val2))
 
+#define rdmsrl(msr,val) do { \
+	unsigned long l__,h__; \
+	rdmsr (msr, l__, h__);  \
+	val = l__;  \
+	val |= ((u64)h__<<32);  \
+} while(0)
+
+static inline void wrmsrl (unsigned long msr, unsigned long long val)
+{
+	unsigned long lo, hi;
+	lo = (unsigned long) val;
+	hi = val >> 32;
+	wrmsr (msr, lo, hi);
+}
+
 #define rdtsc(low,high) \
      __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))
 
@@ -92,7 +107,7 @@
 #define MSR_K7_HWCR			0xC0010015
 #define MSR_K7_CLK_CTL			0xC001001b
 #define MSR_K7_FID_VID_CTL		0xC0010041
-#define MSR_K7_VID_STATUS		0xC0010042
+#define MSR_K7_FID_VID_STATUS		0xC0010042
 
 /* Centaur-Hauls/IDT defined MSRs. */
 #define MSR_IDT_FCR1			0x107
--- linux.original/include/asm-i386/smp.h	2002-11-29 00:53:15.000000000 +0100
+++ linux/include/asm-i386/smp.h	2004-07-09 14:42:36.000000000 +0200
@@ -95,6 +95,8 @@ static __inline int logical_smp_processo
 	return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR));
 }
 
+#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
+
 #endif /* !__ASSEMBLY__ */
 
 #define NO_PROC_ID		0xFF		/* No processor magic marker */
--- linux.original/include/linux/smp.h	2001-11-22 20:46:19.000000000 +0100
+++ linux/include/linux/smp.h	2004-07-09 14:42:36.000000000 +0200
@@ -86,6 +86,7 @@ extern volatile int smp_msg_id;
 #define cpu_number_map(cpu)			0
 #define smp_call_function(func,info,retry,wait)	({ 0; })
 #define cpu_online_map				1
+#define cpu_online(cpu)				({ BUG_ON((cpu) != 0); 1; })
 
 #endif
 #endif
