From: Venki Pallipadi <venkatesh.pallipadi@intel.com>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: "Pallipadi, Venkatesh" <venkatesh.pallipadi@intel.com>,
Andi Kleen <ak@suse.de>, Dave Jones <davej@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
"Brown, Len" <len.brown@intel.com>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] Display Intel Dynamic Acceleration feature in /proc/cpuinfo
Date: Tue, 29 May 2007 17:52:58 -0700 [thread overview]
Message-ID: <20070530005257.GA445@linux-os.sc.intel.com> (raw)
In-Reply-To: <465627FD.9040301@zytor.com>
On Thu, May 24, 2007 at 05:04:13PM -0700, H. Peter Anvin wrote:
>
> If they grow slowly from the bottom, I guess we could simply allocate
> space in the vector byte by byte instead. Either way, it means more
> work whenever anything has to change.
>
hpa,
Below patch adds a new word for feature bits that willb eused for all Intel
features that may be spread around in CPUID leafs like 0x6, 0xA, etc.
I added "ida" bit first into this word. I will send an incremental patch
to move ARCH_PERFMON bit and any other feature bits in these leaf subsequently.
The patch is against newsetup git tree.
Please apply.
Thanks,
Venki
Use a new CPU feature word to cover all Intel features that are spread around
in different CPUID leafs like 0x5, 0x6 and 0xA. Make this
feature detection code common across i386 and x86_64.
Display Intel Dynamic Acceleration feature in /proc/cpuinfo. This feature
will be enabled automatically by current acpi-cpufreq driver.
Refer to Intel Software Developer's Manual for more details about the feature.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Index: linux-2.6/include/asm-i386/cpufeature.h
===================================================================
--- linux-2.6.orig/include/asm-i386/cpufeature.h 2007-05-29 07:30:28.000000000 -0700
+++ linux-2.6/include/asm-i386/cpufeature.h 2007-05-29 10:21:17.000000000 -0700
@@ -12,7 +12,7 @@
#endif
#include <asm/required-features.h>
-#define NCAPINTS 7 /* N 32-bit words worth of info */
+#define NCAPINTS 8 /* N 32-bit words worth of info */
/* Intel-defined CPU features, CPUID level 0x00000001 (edx), word 0 */
#define X86_FEATURE_FPU (0*32+ 0) /* Onboard FPU */
@@ -109,6 +109,9 @@
#define X86_FEATURE_LAHF_LM (6*32+ 0) /* LAHF/SAHF in long mode */
#define X86_FEATURE_CMP_LEGACY (6*32+ 1) /* If yes HyperThreading not valid */
+/* More extended Intel flags: From various new CPUID levels like 0x6, 0xA etc */
+#define X86_FEATURE_IDA (7*32+ 0) /* Intel Dynamic Acceleration */
+
#define cpu_has(c, bit) \
(__builtin_constant_p(bit) && \
( (((bit)>>5)==0 && (1UL<<((bit)&31) & REQUIRED_MASK0)) || \
@@ -117,7 +120,8 @@
(((bit)>>5)==3 && (1UL<<((bit)&31) & REQUIRED_MASK3)) || \
(((bit)>>5)==4 && (1UL<<((bit)&31) & REQUIRED_MASK4)) || \
(((bit)>>5)==5 && (1UL<<((bit)&31) & REQUIRED_MASK5)) || \
- (((bit)>>5)==6 && (1UL<<((bit)&31) & REQUIRED_MASK6)) ) \
+ (((bit)>>5)==6 && (1UL<<((bit)&31) & REQUIRED_MASK6)) || \
+ (((bit)>>5)==7 && (1UL<<((bit)&31) & REQUIRED_MASK7)) ) \
? 1 : \
test_bit(bit, (c)->x86_capability))
#define boot_cpu_has(bit) cpu_has(&boot_cpu_data, bit)
Index: linux-2.6/arch/i386/kernel/cpu/proc.c
===================================================================
--- linux-2.6.orig/arch/i386/kernel/cpu/proc.c 2007-05-29 07:30:20.000000000 -0700
+++ linux-2.6/arch/i386/kernel/cpu/proc.c 2007-05-29 08:20:51.000000000 -0700
@@ -65,6 +65,12 @@
"osvw", "ibs", NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+
+ /* Intel-defined (#3) */
+ "ida", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
};
static const char * const x86_power_flags[] = {
"ts", /* temperature sensor */
Index: linux-2.6/arch/x86_64/kernel/setup.c
===================================================================
--- linux-2.6.orig/arch/x86_64/kernel/setup.c 2007-05-29 07:30:21.000000000 -0700
+++ linux-2.6/arch/x86_64/kernel/setup.c 2007-05-29 09:20:01.000000000 -0700
@@ -699,6 +699,7 @@
/* Cache sizes */
unsigned n;
+ init_additional_intel_features(c);
init_intel_cacheinfo(c);
if (c->cpuid_level > 9 ) {
unsigned eax = cpuid_eax(10);
@@ -973,6 +974,12 @@
"osvw", "ibs", NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+
+ /* Intel-defined (#3) */
+ "ida", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
};
static char *x86_power_flags[] = {
"ts", /* temperature sensor */
Index: linux-2.6/include/asm-i386/required-features.h
===================================================================
--- linux-2.6.orig/include/asm-i386/required-features.h 2007-05-29 07:30:28.000000000 -0700
+++ linux-2.6/include/asm-i386/required-features.h 2007-05-29 08:11:13.000000000 -0700
@@ -56,5 +56,6 @@
#define REQUIRED_MASK4 0
#define REQUIRED_MASK5 0
#define REQUIRED_MASK6 0
+#define REQUIRED_MASK7 0
#endif
Index: linux-2.6/include/asm-x86_64/required-features.h
===================================================================
--- linux-2.6.orig/include/asm-x86_64/required-features.h 2007-05-29 07:30:29.000000000 -0700
+++ linux-2.6/include/asm-x86_64/required-features.h 2007-05-29 08:12:30.000000000 -0700
@@ -42,5 +42,6 @@
#define REQUIRED_MASK4 0
#define REQUIRED_MASK5 0
#define REQUIRED_MASK6 0
+#define REQUIRED_MASK7 0
#endif
Index: linux-2.6/arch/i386/kernel/cpu/intel.c
===================================================================
--- linux-2.6.orig/arch/i386/kernel/cpu/intel.c 2007-05-29 09:14:31.000000000 -0700
+++ linux-2.6/arch/i386/kernel/cpu/intel.c 2007-05-29 09:15:52.000000000 -0700
@@ -120,6 +120,7 @@
#endif
select_idle_routine(c);
+ init_additional_intel_features(c);
l2 = init_intel_cacheinfo(c);
if (c->cpuid_level > 9 ) {
unsigned eax = cpuid_eax(10);
Index: linux-2.6/arch/i386/kernel/cpu/intel_features.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6/arch/i386/kernel/cpu/intel_features.c 2007-05-29 10:38:25.000000000 -0700
@@ -0,0 +1,22 @@
+
+/*
+ * Routines to indentify additional Intel cpu features
+ * Features in word 7
+ */
+
+#include <linux/cpu.h>
+
+#include <asm/processor.h>
+
+#define CPUID_6_EAX_IDA 0x2
+
+void __cpuinit init_additional_intel_features(struct cpuinfo_x86 *c)
+{
+ unsigned int eax;
+
+ if (c->cpuid_level >= 6) {
+ eax = cpuid_eax(6);
+ if (eax & CPUID_6_EAX_IDA)
+ set_bit(X86_FEATURE_IDA, c->x86_capability);
+ }
+}
Index: linux-2.6/arch/i386/kernel/cpu/Makefile
===================================================================
--- linux-2.6.orig/arch/i386/kernel/cpu/Makefile 2007-05-29 07:30:20.000000000 -0700
+++ linux-2.6/arch/i386/kernel/cpu/Makefile 2007-05-29 10:01:03.000000000 -0700
@@ -8,7 +8,7 @@
obj-y += cyrix.o
obj-y += centaur.o
obj-y += transmeta.o
-obj-y += intel.o intel_cacheinfo.o
+obj-y += intel.o intel_cacheinfo.o intel_features.o
obj-y += rise.o
obj-y += nexgen.o
obj-y += umc.o
Index: linux-2.6/arch/x86_64/kernel/Makefile
===================================================================
--- linux-2.6.orig/arch/x86_64/kernel/Makefile 2007-05-29 07:30:21.000000000 -0700
+++ linux-2.6/arch/x86_64/kernel/Makefile 2007-05-29 10:01:41.000000000 -0700
@@ -44,6 +44,7 @@
obj-y += topology.o
obj-y += intel_cacheinfo.o
+obj-y += intel_features.o
obj-y += pcspeaker.o
CFLAGS_vsyscall.o := $(PROFILING) -g0
@@ -55,6 +56,7 @@
topology-y += ../../i386/kernel/topology.o
microcode-$(subst m,y,$(CONFIG_MICROCODE)) += ../../i386/kernel/microcode.o
intel_cacheinfo-y += ../../i386/kernel/cpu/intel_cacheinfo.o
+intel_features-y += ../../i386/kernel/cpu/intel_features.o
quirks-y += ../../i386/kernel/quirks.o
i8237-y += ../../i386/kernel/i8237.o
msr-$(subst m,y,$(CONFIG_X86_MSR)) += ../../i386/kernel/msr.o
Index: linux-2.6/include/asm-i386/processor.h
===================================================================
--- linux-2.6.orig/include/asm-i386/processor.h 2007-05-29 07:30:28.000000000 -0700
+++ linux-2.6/include/asm-i386/processor.h 2007-05-29 10:13:41.000000000 -0700
@@ -119,6 +119,7 @@
extern void identify_boot_cpu(void);
extern void identify_secondary_cpu(struct cpuinfo_x86 *);
extern void print_cpu_info(struct cpuinfo_x86 *);
+extern void init_additional_intel_features(struct cpuinfo_x86 *c);
extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c);
extern unsigned short num_cache_leaves;
Index: linux-2.6/include/asm-x86_64/processor.h
===================================================================
--- linux-2.6.orig/include/asm-x86_64/processor.h 2007-05-29 07:30:29.000000000 -0700
+++ linux-2.6/include/asm-x86_64/processor.h 2007-05-29 10:14:11.000000000 -0700
@@ -100,6 +100,7 @@
extern void identify_cpu(struct cpuinfo_x86 *);
extern void print_cpu_info(struct cpuinfo_x86 *);
+extern void init_additional_intel_features(struct cpuinfo_x86 *c);
extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c);
extern unsigned short num_cache_leaves;
next prev parent reply other threads:[~2007-05-30 0:56 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-23 22:46 [PATCH] Display Intel Dynamic Acceleration feature in /proc/cpuinfo Venki Pallipadi
2007-05-24 20:55 ` Andrew Morton
2007-05-24 21:01 ` Dave Jones
2007-05-24 21:08 ` Andi Kleen
2007-05-24 21:13 ` Venki Pallipadi
2007-05-24 21:25 ` Andi Kleen
2007-05-24 21:28 ` Venki Pallipadi
2007-05-24 21:37 ` Dave Jones
2007-05-24 21:56 ` Andi Kleen
2007-05-24 23:03 ` H. Peter Anvin
2007-05-24 23:13 ` Pallipadi, Venkatesh
2007-05-24 23:23 ` H. Peter Anvin
2007-05-25 0:00 ` Pallipadi, Venkatesh
2007-05-25 0:04 ` H. Peter Anvin
2007-05-30 0:52 ` Venki Pallipadi [this message]
2007-05-24 21:10 ` Venki Pallipadi
2007-05-24 22:02 ` Andrew Morton
2007-05-24 22:08 ` Venki Pallipadi
2007-05-24 22:16 ` H. Peter Anvin
2007-05-24 22:14 ` H. Peter Anvin
2007-05-24 22:41 ` Dave Jones
2007-05-24 22:51 ` H. Peter Anvin
2007-05-24 23:06 ` Dave Jones
2007-05-24 23:11 ` H. Peter Anvin
2007-05-24 23:50 ` Alan Cox
2007-05-24 23:53 ` H. Peter Anvin
2007-05-24 22:27 ` H. Peter Anvin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070530005257.GA445@linux-os.sc.intel.com \
--to=venkatesh.pallipadi@intel.com \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=davej@redhat.com \
--cc=hpa@zytor.com \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox