Module Name: src
Committed By: jym
Date: Sun May 31 14:32:35 UTC 2009
Modified Files:
src/sys/arch/amd64/amd64 [jym-xensuspend]: bios32.c
src/sys/arch/amd64/conf [jym-xensuspend]: GENERIC
src/sys/arch/amd64/include [jym-xensuspend]: elf_machdep.h
src/sys/arch/i386 [jym-xensuspend]: Makefile
src/sys/arch/i386/i386 [jym-xensuspend]: bios32.c gdt.c
src/sys/arch/i386/include [jym-xensuspend]: elf_machdep.h segments.h
src/sys/arch/i386/pci [jym-xensuspend]: glxsb.c
src/sys/arch/x86/include [jym-xensuspend]: cacheinfo.h specialreg.h
src/sys/arch/x86/x86 [jym-xensuspend]: cpu_topology.c ioapic.c
sys_machdep.c
src/sys/arch/xen [jym-xensuspend]: Makefile
Log Message:
Sync with HEAD.
To generate a diff of this commit:
cvs rdiff -u -r1.14.2.1 -r1.14.2.2 src/sys/arch/amd64/amd64/bios32.c
cvs rdiff -u -r1.237.2.1 -r1.237.2.2 src/sys/arch/amd64/conf/GENERIC
cvs rdiff -u -r1.2 -r1.2.8.1 src/sys/arch/amd64/include/elf_machdep.h
cvs rdiff -u -r1.36 -r1.36.4.1 src/sys/arch/i386/Makefile
cvs rdiff -u -r1.22.14.1 -r1.22.14.2 src/sys/arch/i386/i386/bios32.c
cvs rdiff -u -r1.45.14.1 -r1.45.14.2 src/sys/arch/i386/i386/gdt.c
cvs rdiff -u -r1.9 -r1.9.138.1 src/sys/arch/i386/include/elf_machdep.h
cvs rdiff -u -r1.50.8.1 -r1.50.8.2 src/sys/arch/i386/include/segments.h
cvs rdiff -u -r1.6.14.1 -r1.6.14.2 src/sys/arch/i386/pci/glxsb.c
cvs rdiff -u -r1.9.12.1 -r1.9.12.2 src/sys/arch/x86/include/cacheinfo.h
cvs rdiff -u -r1.31.8.1 -r1.31.8.2 src/sys/arch/x86/include/specialreg.h
cvs rdiff -u -r1.1.4.2 -r1.1.4.3 src/sys/arch/x86/x86/cpu_topology.c
cvs rdiff -u -r1.38.10.1 -r1.38.10.2 src/sys/arch/x86/x86/ioapic.c
cvs rdiff -u -r1.16.4.1 -r1.16.4.2 src/sys/arch/x86/x86/sys_machdep.c
cvs rdiff -u -r1.5 -r1.5.8.1 src/sys/arch/xen/Makefile
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/amd64/amd64/bios32.c
diff -u src/sys/arch/amd64/amd64/bios32.c:1.14.2.1 src/sys/arch/amd64/amd64/bios32.c:1.14.2.2
--- src/sys/arch/amd64/amd64/bios32.c:1.14.2.1 Wed May 13 17:16:08 2009
+++ src/sys/arch/amd64/amd64/bios32.c Sun May 31 14:32:32 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: bios32.c,v 1.14.2.1 2009/05/13 17:16:08 jym Exp $ */
+/* $NetBSD: bios32.c,v 1.14.2.2 2009/05/31 14:32:32 jym Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bios32.c,v 1.14.2.1 2009/05/13 17:16:08 jym Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bios32.c,v 1.14.2.2 2009/05/31 14:32:32 jym Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -306,7 +306,7 @@
if (i == indx) {
if (va + len < end) {
ret = dest;
- memcpy( ret, va, len);
+ memcpy(ret, va, len);
ret[len - 1] = '\0';
}
}
Index: src/sys/arch/amd64/conf/GENERIC
diff -u src/sys/arch/amd64/conf/GENERIC:1.237.2.1 src/sys/arch/amd64/conf/GENERIC:1.237.2.2
--- src/sys/arch/amd64/conf/GENERIC:1.237.2.1 Wed May 13 17:16:08 2009
+++ src/sys/arch/amd64/conf/GENERIC Sun May 31 14:32:33 2009
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.237.2.1 2009/05/13 17:16:08 jym Exp $
+# $NetBSD: GENERIC,v 1.237.2.2 2009/05/31 14:32:33 jym Exp $
#
# GENERIC machine description file
#
@@ -22,7 +22,7 @@
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "GENERIC-$Revision: 1.237.2.1 $"
+#ident "GENERIC-$Revision: 1.237.2.2 $"
maxusers 64 # estimated number of users
@@ -783,9 +783,13 @@
umodem* at uhub? port ? configuration ?
ucom* at umodem?
+# Huawei E220 3G/HSDPA modem
+uhmodem* at uhub? port ? configuration ? interface ?
+ucom* at uhmodem? portno ?
+
# USB Mass Storage
umass* at uhub? port ? configuration ? interface ?
-#wd* at umass?
+wd* at umass?
# USB audio
uaudio* at uhub? port ? configuration ?
Index: src/sys/arch/amd64/include/elf_machdep.h
diff -u src/sys/arch/amd64/include/elf_machdep.h:1.2 src/sys/arch/amd64/include/elf_machdep.h:1.2.8.1
--- src/sys/arch/amd64/include/elf_machdep.h:1.2 Sun Oct 26 00:08:15 2008
+++ src/sys/arch/amd64/include/elf_machdep.h Sun May 31 14:32:33 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: elf_machdep.h,v 1.2 2008/10/26 00:08:15 mrg Exp $ */
+/* $NetBSD: elf_machdep.h,v 1.2.8.1 2009/05/31 14:32:33 jym Exp $ */
#ifdef __x86_64__
@@ -36,6 +36,16 @@
#define R_X86_64_8 14
#define R_X86_64_PC8 15
+/* TLS relocations */
+#define R_X86_64_DTPMOD64 16
+#define R_X86_64_DTPOFF64 17
+#define R_X86_64_TPOFF64 18
+#define R_X86_64_TLSGD 19
+#define R_X86_64_TLSLD 20
+#define R_X86_64_DTPOFF32 21
+#define R_X86_64_GOTTPOFF 22
+#define R_X86_64_TPOFF32 23
+
#define R_TYPE(name) __CONCAT(R_X86_64_,name)
#else /* __x86_64__ */
Index: src/sys/arch/i386/Makefile
diff -u src/sys/arch/i386/Makefile:1.36 src/sys/arch/i386/Makefile:1.36.4.1
--- src/sys/arch/i386/Makefile:1.36 Thu Nov 6 00:41:52 2008
+++ src/sys/arch/i386/Makefile Sun May 31 14:32:33 2009
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.36 2008/11/06 00:41:52 dyoung Exp $
+# $NetBSD: Makefile,v 1.36.4.1 2009/05/31 14:32:33 jym Exp $
# Makefile for i386 tags file and boot blocks
@@ -11,9 +11,9 @@
${SYSDIR}/arch/i386/mca/*.[ch] \
${SYSDIR}/arch/i386/pci/*.[ch] \
${SYSDIR}/arch/i386/pnpbios/*.[ch] \
- ${SYSDIR}/contrib/dev/ath/*.[ch] \
- ${SYSDIR}/contrib/dev/ath/netbsd/*.[ch] \
- ${SYSDIR}/contrib/dev/ath/public/*.[ch] \
+ ${SYSDIR}/external/isc/atheros_hal/dist/*.[ch] \
+ ${SYSDIR}/external/isc/atheros_hal/dist/*/*.[ch] \
+ ${SYSDIR}/external/isc/atheros_hal/ic/*.[ch] \
${SYSDIR}/dist/acpica/*.[ch]
SI386+= ${SYSDIR}/arch/x86/x86/*.[ch] \
${SYSDIR}/arch/x86/acpi/*.[ch] \
Index: src/sys/arch/i386/i386/bios32.c
diff -u src/sys/arch/i386/i386/bios32.c:1.22.14.1 src/sys/arch/i386/i386/bios32.c:1.22.14.2
--- src/sys/arch/i386/i386/bios32.c:1.22.14.1 Wed May 13 17:17:49 2009
+++ src/sys/arch/i386/i386/bios32.c Sun May 31 14:32:33 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: bios32.c,v 1.22.14.1 2009/05/13 17:17:49 jym Exp $ */
+/* $NetBSD: bios32.c,v 1.22.14.2 2009/05/31 14:32:33 jym Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -86,7 +86,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bios32.c,v 1.22.14.1 2009/05/13 17:17:49 jym Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bios32.c,v 1.22.14.2 2009/05/31 14:32:33 jym Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -327,7 +327,7 @@
if (i == indx) {
if (va + len < end) {
ret = dest;
- memcpy( ret, va, len);
+ memcpy(ret, va, len);
ret[len - 1] = '\0';
}
}
Index: src/sys/arch/i386/i386/gdt.c
diff -u src/sys/arch/i386/i386/gdt.c:1.45.14.1 src/sys/arch/i386/i386/gdt.c:1.45.14.2
--- src/sys/arch/i386/i386/gdt.c:1.45.14.1 Wed May 13 17:17:49 2009
+++ src/sys/arch/i386/i386/gdt.c Sun May 31 14:32:33 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: gdt.c,v 1.45.14.1 2009/05/13 17:17:49 jym Exp $ */
+/* $NetBSD: gdt.c,v 1.45.14.2 2009/05/31 14:32:33 jym Exp $ */
/*-
* Copyright (c) 1996, 1997, 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gdt.c,v 1.45.14.1 2009/05/13 17:17:49 jym Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gdt.c,v 1.45.14.2 2009/05/31 14:32:33 jym Exp $");
#include "opt_multiprocessor.h"
#include "opt_xen.h"
@@ -66,7 +66,7 @@
int gdt_get_slot1(int);
void gdt_put_slot1(int, int);
-static void
+void
update_descriptor(union descriptor *table, union descriptor *entry)
{
#ifndef XEN
Index: src/sys/arch/i386/include/elf_machdep.h
diff -u src/sys/arch/i386/include/elf_machdep.h:1.9 src/sys/arch/i386/include/elf_machdep.h:1.9.138.1
--- src/sys/arch/i386/include/elf_machdep.h:1.9 Sun Dec 9 23:05:57 2001
+++ src/sys/arch/i386/include/elf_machdep.h Sun May 31 14:32:33 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: elf_machdep.h,v 1.9 2001/12/09 23:05:57 thorpej Exp $ */
+/* $NetBSD: elf_machdep.h,v 1.9.138.1 2009/05/31 14:32:33 jym Exp $ */
#define ELF32_MACHDEP_ENDIANNESS ELFDATA2LSB
#define ELF32_MACHDEP_ID_CASES \
@@ -26,10 +26,38 @@
#define R_386_RELATIVE 8
#define R_386_GOTOFF 9
#define R_386_GOTPC 10
+
+/* TLS relocations */
+#define R_386_TLS_TPOFF 14
+#define R_386_TLS_IE 15
+#define R_386_TLS_GOTIE 16
+#define R_386_TLS_LE 17
+#define R_386_TLS_GD 18
+#define R_386_TLS_LDM 19
+
/* The following relocations are GNU extensions. */
#define R_386_16 20
#define R_386_PC16 21
#define R_386_8 22
#define R_386_PC8 23
+/* More TLS relocations */
+#define R_386_TLS_GD_32 24
+#define R_386_TLS_GD_PUSH 25
+#define R_386_TLS_GD_CALL 26
+#define R_386_TLS_GD_POP 27
+#define R_386_TLS_LDM_32 28
+#define R_386_TLS_LDM_PUSH 29
+#define R_386_TLS_LDM_CALL 30
+#define R_386_TLS_LDM_POP 31
+#define R_386_TLS_LDO_32 32
+#define R_386_TLS_IE_32 33
+#define R_386_TLS_LE_32 34
+#define R_386_TLS_DTPMOD32 35
+#define R_386_TLS_DTPOFF32 36
+#define R_386_TLS_TPOFF32 37
+#define R_386_TLS_GOTDESC 39
+#define R_386_TLS_DESC_CALL 40
+#define R_386_TLS_DESC 41
+
#define R_TYPE(name) __CONCAT(R_386_,name)
Index: src/sys/arch/i386/include/segments.h
diff -u src/sys/arch/i386/include/segments.h:1.50.8.1 src/sys/arch/i386/include/segments.h:1.50.8.2
--- src/sys/arch/i386/include/segments.h:1.50.8.1 Wed May 13 17:17:50 2009
+++ src/sys/arch/i386/include/segments.h Sun May 31 14:32:33 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: segments.h,v 1.50.8.1 2009/05/13 17:17:50 jym Exp $ */
+/* $NetBSD: segments.h,v 1.50.8.2 2009/05/31 14:32:33 jym Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@@ -197,6 +197,7 @@
void setgdt(int, const void *, size_t, int, int, int, int);
void unsetgate(struct gate_descriptor *);
void cpu_init_idt(void);
+void update_descriptor(union descriptor *, union descriptor *);
#if !defined(XEN)
void idt_init(void);
Index: src/sys/arch/i386/pci/glxsb.c
diff -u src/sys/arch/i386/pci/glxsb.c:1.6.14.1 src/sys/arch/i386/pci/glxsb.c:1.6.14.2
--- src/sys/arch/i386/pci/glxsb.c:1.6.14.1 Wed May 13 17:17:50 2009
+++ src/sys/arch/i386/pci/glxsb.c Sun May 31 14:32:34 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: glxsb.c,v 1.6.14.1 2009/05/13 17:17:50 jym Exp $ */
+/* $NetBSD: glxsb.c,v 1.6.14.2 2009/05/31 14:32:34 jym Exp $ */
/* $OpenBSD: glxsb.c,v 1.7 2007/02/12 14:31:45 tom Exp $ */
/*
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: glxsb.c,v 1.6.14.1 2009/05/13 17:17:50 jym Exp $");
+__KERNEL_RCSID(0, "$NetBSD: glxsb.c,v 1.6.14.2 2009/05/31 14:32:34 jym Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -331,7 +331,7 @@
if (ses == NULL)
return (ENOMEM);
if (sesn != 0) {
- memcpy( ses, sc->sc_sessions, sesn * sizeof(*ses));
+ memcpy(ses, sc->sc_sessions, sesn * sizeof(*ses));
memset(sc->sc_sessions, 0, sesn * sizeof(*ses));
free(sc->sc_sessions, M_DEVBUF);
}
@@ -347,7 +347,7 @@
ses->ses_klen = cri->cri_klen;
/* Copy the key (Geode LX wants the primary key only) */
- memcpy( ses->ses_key, cri->cri_key, sizeof(ses->ses_key));
+ memcpy(ses->ses_key, cri->cri_key, sizeof(ses->ses_key));
*sidp = GLXSB_SID(0, sesn);
return (0);
@@ -492,9 +492,9 @@
if (crd->crd_flags & CRD_F_ENCRYPT) {
control = SB_CTL_ENC;
if (crd->crd_flags & CRD_F_IV_EXPLICIT)
- memcpy( op_iv, crd->crd_iv, sizeof(op_iv));
+ memcpy(op_iv, crd->crd_iv, sizeof(op_iv));
else
- memcpy( op_iv, ses->ses_iv, sizeof(op_iv));
+ memcpy(op_iv, ses->ses_iv, sizeof(op_iv));
if ((crd->crd_flags & CRD_F_IV_PRESENT) == 0) {
if (crp->crp_flags & CRYPTO_F_IMBUF)
@@ -511,7 +511,7 @@
} else {
control = SB_CTL_DEC;
if (crd->crd_flags & CRD_F_IV_EXPLICIT)
- memcpy( op_iv, crd->crd_iv, sizeof(op_iv));
+ memcpy(op_iv, crd->crd_iv, sizeof(op_iv));
else {
if (crp->crp_flags & CRYPTO_F_IMBUF)
m_copydata((struct mbuf *)crp->crp_buf,
@@ -557,7 +557,7 @@
cuio_copyback((struct uio *)crp->crp_buf,
crd->crd_skip + offset, len, op_dst);
else
- memcpy( (char *)crp->crp_buf + crd->crd_skip + offset, op_dst,
+ memcpy((char *)crp->crp_buf + crd->crd_skip + offset, op_dst,
len);
offset += len;
@@ -576,11 +576,11 @@
* time.
*/
if (crd->crd_flags & CRD_F_ENCRYPT) {
- memcpy( piv, op_dst + len - sizeof(op_iv), sizeof(op_iv));
+ memcpy(piv, op_dst + len - sizeof(op_iv), sizeof(op_iv));
} else {
/* Decryption, only need this if another iteration */
if (tlen > 0) {
- memcpy( piv, op_src + len - sizeof(op_iv),
+ memcpy(piv, op_src + len - sizeof(op_iv),
sizeof(op_iv));
}
}
Index: src/sys/arch/x86/include/cacheinfo.h
diff -u src/sys/arch/x86/include/cacheinfo.h:1.9.12.1 src/sys/arch/x86/include/cacheinfo.h:1.9.12.2
--- src/sys/arch/x86/include/cacheinfo.h:1.9.12.1 Wed May 13 17:18:44 2009
+++ src/sys/arch/x86/include/cacheinfo.h Sun May 31 14:32:34 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: cacheinfo.h,v 1.9.12.1 2009/05/13 17:18:44 jym Exp $ */
+/* $NetBSD: cacheinfo.h,v 1.9.12.2 2009/05/31 14:32:34 jym Exp $ */
#ifndef _X86_CACHEINFO_H_
#define _X86_CACHEINFO_H_
@@ -199,6 +199,10 @@
#define __CI_TBL(a,b,c,d,e,f) { a, b, c, d, e, f }
#endif
+/*
+ * XXX Currently organized mostly by cache type, but would be
+ * XXX easier to maintain if it were in descriptor type order.
+ */
#define INTEL_CACHE_INFO { \
__CI_TBL(CAI_ITLB, 0x01, 4, 32, 4 * 1024, NULL), \
__CI_TBL(CAI_ITLB, 0xb0, 4,128, 4 * 1024, NULL), \
@@ -211,14 +215,23 @@
__CI_TBL(CAI_ITLB, 0x50, 0xff, 64, 4 * 1024, "4K/4M: 64 entries"), \
__CI_TBL(CAI_ITLB, 0x51, 0xff, 64, 4 * 1024, "4K/4M: 128 entries"),\
__CI_TBL(CAI_ITLB, 0x52, 0xff, 64, 4 * 1024, "4K/4M: 256 entries"),\
+__CI_TBL(CAI_ITLB, 0x55, 0xff, 64, 4 * 1024, "2M/4M: 7 entries"), \
+__CI_TBL(CAI_DTLB2, 0x56, 4, 16, 4 * 1024 * 1024, NULL), \
+__CI_TBL(CAI_DTLB2, 0x57, 4, 16, 4 * 1024, NULL), \
+__CI_TBL(CAI_DTLB, 0x5a, 0xff, 64, 4 * 1024, "2M/4M: 32 entries (L0)"), \
__CI_TBL(CAI_DTLB, 0x5b, 0xff, 64, 4 * 1024, "4K/4M: 64 entries"), \
__CI_TBL(CAI_DTLB, 0x5c, 0xff, 64, 4 * 1024, "4K/4M: 128 entries"),\
__CI_TBL(CAI_DTLB, 0x5d, 0xff, 64, 4 * 1024, "4K/4M: 256 entries"),\
+__CI_TBL(CAI_ITLB, 0xb1, 4, 64, 0, "8 2M/4 4M entries"), \
+__CI_TBL(CAI_ITLB, 0xb2, 4, 64, 4 * 1024, NULL), \
__CI_TBL(CAI_ICACHE, 0x06, 4, 8 * 1024, 32, NULL), \
__CI_TBL(CAI_ICACHE, 0x08, 4, 16 * 1024, 32, NULL), \
+__CI_TBL(CAI_ICACHE, 0x09, 4, 32 * 1024, 64, NULL), \
__CI_TBL(CAI_ICACHE, 0x30, 8, 32 * 1024, 64, NULL), \
__CI_TBL(CAI_DCACHE, 0x0a, 2, 8 * 1024, 32, NULL), \
__CI_TBL(CAI_DCACHE, 0x0c, 4, 16 * 1024, 32, NULL), \
+__CI_TBL(CAI_DCACHE, 0x0d, 4, 16 * 1024, 32, NULL), \
+__CI_TBL(CAI_L2CACHE, 0x21, 8, 256 * 1024, 64, NULL), /* L2 (MLC) */ \
__CI_TBL(CAI_L2CACHE, 0x39, 4, 128 * 1024, 64, NULL), \
__CI_TBL(CAI_L2CACHE, 0x3a, 6, 192 * 1024, 64, NULL), \
__CI_TBL(CAI_L2CACHE, 0x3b, 2, 128 * 1024, 64, NULL), \
@@ -231,6 +244,9 @@
__CI_TBL(CAI_L2CACHE, 0x43, 4, 512 * 1024, 32, NULL), \
__CI_TBL(CAI_L2CACHE, 0x44, 4, 1 * 1024 * 1024, 32, NULL), \
__CI_TBL(CAI_L2CACHE, 0x45, 4, 2 * 1024 * 1024, 32, NULL), \
+__CI_TBL(CAI_L2CACHE, 0x48, 12, 3 * 1024 * 1024, 64, NULL), \
+ \
+/* 0x49 Is L2 on Xeon MP (Family 0f, Model 06), L3 otherwise */ \
__CI_TBL(CAI_L2CACHE, 0x49, 16, 4 * 1024 * 1024, 64, NULL), \
__CI_TBL(CAI_L2CACHE, 0x4e, 24, 6 * 1024 * 1024, 64, NULL), \
__CI_TBL(CAI_DCACHE, 0x60, 8, 16 * 1024, 64, NULL), \
@@ -255,6 +271,32 @@
__CI_TBL(CAI_L2CACHE, 0x85, 8, 2 * 1024 * 1024, 32, NULL), \
__CI_TBL(CAI_L2CACHE, 0x86, 4, 512 * 1024, 64, NULL), \
__CI_TBL(CAI_L2CACHE, 0x87, 8, 1 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0x22, 0xff, 512 * 1024, 64, "sectored, 4-way "), \
+__CI_TBL(CAI_L3CACHE, 0x23, 0xff, 1 * 1024 * 1024, 64, "sectored, 8-way "), \
+__CI_TBL(CAI_L3CACHE, 0x25, 0xff, 2 * 1024 * 1024, 64, "sectored, 8-way "), \
+__CI_TBL(CAI_L3CACHE, 0x29, 0xff, 4 * 1024 * 1024, 64, "sectored, 8-way "), \
+__CI_TBL(CAI_L3CACHE, 0x46, 4, 4 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0x47, 8, 8 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0x49, 16, 4 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0x4a, 12, 6 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0x4b, 16, 8 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0x4c, 12,12 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0x4d, 16,16 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xd0, 4, 512 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xd1, 4, 1 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xd2, 4, 2 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xd6, 8, 1 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xd7, 8, 2 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xd8, 8, 4 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xdc, 12, 3 * 512 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xdd, 12, 3 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xde, 12, 6 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xe2, 16, 2 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xe3, 16, 4 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xe4, 16, 8 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xea, 24,12 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xeb, 24,24 * 1024 * 1024, 64, NULL), \
+__CI_TBL(CAI_L3CACHE, 0xec, 24,24 * 1024 * 1024, 64, NULL), \
__CI_TBL(0, 0, 0, 0, 0, NULL) \
}
Index: src/sys/arch/x86/include/specialreg.h
diff -u src/sys/arch/x86/include/specialreg.h:1.31.8.1 src/sys/arch/x86/include/specialreg.h:1.31.8.2
--- src/sys/arch/x86/include/specialreg.h:1.31.8.1 Wed May 13 17:18:44 2009
+++ src/sys/arch/x86/include/specialreg.h Sun May 31 14:32:34 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: specialreg.h,v 1.31.8.1 2009/05/13 17:18:44 jym Exp $ */
+/* $NetBSD: specialreg.h,v 1.31.8.2 2009/05/31 14:32:34 jym Exp $ */
/*-
* Copyright (c) 1991 The Regents of the University of California.
@@ -121,24 +121,27 @@
#define CPUID_IA64 0x40000000 /* IA-64 architecture */
#define CPUID_SBF 0x80000000 /* signal break on FERR */
-#define CPUID_FLAGS1 "\20\1FPU\2VME\3DE\4PSE\5TSC\6MSR\7PAE" \
- "\10MCE\11CX8\12APIC\13B10\14SEP\15MTRR"
-#define CPUID_MASK1 0x00001fff
-#define CPUID_FLAGS2 "\20\16PGE\17MCA\20CMOV\21PAT\22PSE36\23PN\24CFLUSH" \
- "\25B20\26DS\27ACPI\30MMX"
-#define CPUID_MASK2 0x00ffe000
-#define CPUID_FLAGS3 "\20\31FXSR\32SSE\33SSE2\34SS\35HTT\36TM\37IA64\40SBF"
-#define CPUID_MASK3 0xff000000
+#define CPUID_FLAGS1 "\20\1FPU\2VME\3DE\4PSE\5TSC\6MSR\7PAE\10MCE\11CX8" \
+ "\12APIC\13B10\14SEP\15MTRR\16PGE\17MCA\20CMOV" \
+ "\21PAT\22PSE36\23PN\24CFLUSH\25B20\26DS\27ACPI" \
+ "\30MMX\31FXSR\32SSE\33SSE2\34SS\35HTT\36TM" \
+ "\37IA64\40SBF"
/*
- * CPUID Intel extended features
+ * CPUID Intel extended features - %EDX
*/
#define CPUID_SYSCALL 0x00000800 /* SYSCALL/SYSRET */
#define CPUID_XD 0x00100000 /* Execute Disable */
#define CPUID_EM64T 0x20000000 /* Intel EM64T */
-#define CPUID_INTEL_MASK4 0x20100800
-#define CPUID_INTEL_FLAGS4 "\20\14SYSCALL/SYSRET\25XD\36EM64T"
+#define CPUID_INTEL_EXT_FLAGS "\20\14SYSCALL/SYSRET\25XD\36EM64T"
+
+/*
+ * CPUID Intel extended features - %ECX
+ */
+#define CPUID_LAHF 0x00000001 /* LAHF/SAHF in IA-32e mode, 64bit sub*/
+
+#define CPUID_INTEL_FLAGS4 "\20\1LAHF"
/*
* AMD/VIA processor specific flags.
@@ -155,8 +158,8 @@
#define CPUID_3DNOW2 0x40000000 /* 3DNow! Instruction Extension */
#define CPUID_3DNOW 0x80000000 /* 3DNow! Instructions */
-#define CPUID_EXT_FLAGS "\20\14SCALL/RET\24MPC\25NOX\27MXX\32FFXSR\33P1GB" \
- "\34RDTSCP\36LONG\0373DNOW2\0403DNOW"
+#define CPUID_EXT_FLAGS "\20\14SYSCALL/SYSRET\24MPC\25NOX\27MXX\32FFXSR" \
+ "\33P1GB\34RDTSCP\36LONG\0373DNOW2\0403DNOW"
/* AMD Fn80000001 %ecx features */
@@ -175,7 +178,6 @@
#define CPUID_SKINIT 0x00001000 /* SKINIT */
#define CPUID_WDT 0x00002000 /* watchdog timer support */
-#define CPUID_AMD_MASK4 0x00003fff
#define CPUID_AMD_FLAGS4 "\20\1LAHF\2CMPLEGACY\3SVM\4EAPIC\5ALTMOVCR0" \
"\6LZCNT\7SSE4A\10MISALIGNSSE" \
"\0113DNOWPREFETCH\12OSVW\13IBS" \
@@ -204,8 +206,8 @@
#define CPUID_APM_HWP 0x00000080 /* HW P-State control */
#define CPUID_APM_TSC 0x00000100 /* TSC invariant */
-#define CPUID_APM_FLAGS "\20\1TS\2FID\3VID\4TTP\5HTC\6STC\007100\10HWP\11TSC"
-
+#define CPUID_APM_FLAGS "\20\1TS\2FID\3VID\4TTP\5HTC\6STC\007100" \
+ "\10HWP\11TSC"
/*
* Centaur Extended Feature flags
@@ -246,9 +248,11 @@
#define CPUID2_X2APIC 0x00200000 /* xAPIC Extensions */
#define CPUID2_POPCNT 0x00800000
-#define CPUID2_FLAGS "\20\1SSE3\3DTES64\4MONITOR\5DS-CPL\6VMX\7SMX\10EST" \
- "\11TM2\12SSSE3\13CID\16CX16\17xTPR\20PDCM\23DCA" \
- "\24SSE41\25SSE42\26X2APIC\30POPCNT"
+#define CPUID2_FLAGS1 "\20\1SSE3\2B01\3DTES64\4MONITOR\5DS-CPL\6VMX\7SMX" \
+ "\10EST\11TM2\12SSSE3\13CID\14B11\15B12\16CX16" \
+ "\17xTPR\20PDCM\21B16\22B17\23DCA\24SSE41\25SSE42" \
+ "\26X2APIC\27MOVBE\30POPCNT\31B24\32B25\33XSAVE" \
+ "\34OSXSAVE\35B28\36B29\37B30\40B31"
#define CPUID2FAMILY(cpuid) (((cpuid) >> 8) & 0xf)
#define CPUID2MODEL(cpuid) (((cpuid) >> 4) & 0xf)
@@ -420,6 +424,7 @@
#define MSR_NB_CFG 0xc001001f
#define NB_CFG_DISIOREQLOCK 0x0000000000000004ULL
#define NB_CFG_DISDATMSK 0x0000001000000000ULL
+#define NB_CFG_INITAPICCPUIDLO (1ULL << 54)
#define MSR_LS_CFG 0xc0011020
#define LS_CFG_DIS_LS2_SQUISH 0x02000000
Index: src/sys/arch/x86/x86/cpu_topology.c
diff -u src/sys/arch/x86/x86/cpu_topology.c:1.1.4.2 src/sys/arch/x86/x86/cpu_topology.c:1.1.4.3
--- src/sys/arch/x86/x86/cpu_topology.c:1.1.4.2 Wed May 13 17:18:45 2009
+++ src/sys/arch/x86/x86/cpu_topology.c Sun May 31 14:32:34 2009
@@ -1,7 +1,8 @@
-/* $NetBSD: cpu_topology.c,v 1.1.4.2 2009/05/13 17:18:45 jym Exp $ */
+/* $NetBSD: cpu_topology.c,v 1.1.4.3 2009/05/31 14:32:34 jym Exp $ */
/*-
- * Copyright (c)2008 YAMAMOTO Takashi,
+ * Copyright (c) 2009 Mindaugas Rasiukevicius <rmind at NetBSD org>,
+ * Copyright (c) 2008 YAMAMOTO Takashi,
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,8 +27,16 @@
* SUCH DAMAGE.
*/
+/*
+ * x86 CPU topology detection.
+ *
+ * References:
+ * - 53668.pdf (7.10.2), 276613.pdf
+ * - 31116.pdf, 41256.pdf, 25481.pdf
+ */
+
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu_topology.c,v 1.1.4.2 2009/05/13 17:18:45 jym Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu_topology.c,v 1.1.4.3 2009/05/31 14:32:34 jym Exp $");
#include <sys/param.h>
#include <sys/bitops.h>
@@ -42,49 +51,123 @@
void
x86_cpu_toplogy(struct cpu_info *ci)
{
- u_int lp_max = 1; /* logical processors per package */
- u_int smt_max; /* smt per core */
- u_int core_max = 1; /* core per package */
- int smt_bits, core_bits;
- uint32_t descs[4];
+ u_int lp_max; /* Logical processors per package */
+ u_int core_max; /* Core per package */
+ int n, cpu_family, apic_id, smt_bits, core_bits = 0;
+ uint32_t descs[4], lextmode;
+
+ apic_id = ci->ci_initapicid;
+ cpu_family = CPUID2FAMILY(ci->ci_signature);
+
+ /* Initial values. */
+ ci->ci_packageid = apic_id;
+ ci->ci_coreid = 0;
+ ci->ci_smtid = 0;
- if (cpu_vendor != CPUVENDOR_INTEL ||
- CPUID2FAMILY(ci->ci_signature) < 6)
+ switch (cpu_vendor) {
+ case CPUVENDOR_INTEL:
+ if (cpu_family < 6)
+ return;
+ break;
+ case CPUVENDOR_AMD:
+ if (cpu_family < 0xf)
+ return;
+ break;
+ default:
return;
+ }
/* Determine the extended feature flags. */
x86_cpuid(0x80000000, descs);
- if (descs[0] >= 0x80000001) {
+ lextmode = descs[0];
+ if (lextmode >= 0x80000001) {
x86_cpuid(0x80000001, descs);
- ci->ci_feature3_flags |= descs[3]; /* %edx */
+ ci->ci_feature3_flags |= descs[3]; /* edx */
}
- /* Determine topology. 253668.pdf 7.10.2. */
- ci->ci_packageid = ci->ci_initapicid;
- ci->ci_coreid = 0;
- ci->ci_smtid = 0;
+ /* Check for HTT support. See notes below regarding AMD. */
if ((ci->ci_feature_flags & CPUID_HTT) != 0) {
+ /* Maximum number of LPs sharing a cache (ebx[23:16]). */
x86_cpuid(1, descs);
lp_max = (descs[1] >> 16) & 0xff;
+ } else {
+ lp_max = 1;
}
- x86_cpuid(0, descs);
- if (descs[0] >= 4) {
- x86_cpuid2(4, 0, descs);
- core_max = (descs[0] >> 26) + 1;
+
+ switch (cpu_vendor) {
+ case CPUVENDOR_INTEL:
+ /* Check for leaf 4 support. */
+ x86_cpuid(0, descs);
+ if (descs[0] >= 4) {
+ /* Maximum number of Cores per package (eax[31:26]). */
+ x86_cpuid2(4, 0, descs);
+ core_max = (descs[0] >> 26) + 1;
+ } else {
+ core_max = 1;
+ }
+ break;
+ case CPUVENDOR_AMD:
+ /* In a case of AMD, HTT flag means CMP support. */
+ if ((ci->ci_feature_flags & CPUID_HTT) == 0) {
+ core_max = 1;
+ break;
+ }
+ /* Legacy Method, LPs represent Cores. */
+ if (cpu_family < 0x10 || lextmode < 0x80000008) {
+ core_max = lp_max;
+ break;
+ }
+ /* Number of Cores (NC) per package (ecx[7:0]). */
+ x86_cpuid(0x80000008, descs);
+ core_max = (descs[2] & 0xff) + 1;
+ /* Amount of bits representing Core ID (ecx[15:12]). */
+ n = (descs[2] >> 12) & 0x0f;
+ if (n != 0) {
+ /*
+ * Extended Method.
+ * core_bits = 2 ^ n (power of two)
+ */
+ core_bits = 1 << n;
+ }
+ break;
+ default:
+ core_max = 1;
}
+
KASSERT(lp_max >= core_max);
- smt_max = lp_max / core_max;
- smt_bits = ilog2(smt_max - 1) + 1;
- core_bits = ilog2(core_max - 1) + 1;
+ smt_bits = ilog2((lp_max / core_max) - 1) + 1;
+ if (core_bits == 0) {
+ core_bits = ilog2(core_max - 1) + 1;
+ }
+
+ /*
+ * Family 0xf and 0x10 processors may have different structure of
+ * APIC ID. Detect that via special MSR register and move the bits,
+ * if necessary (ref: InitApicIdCpuIdLo).
+ */
+ if (cpu_vendor == CPUVENDOR_AMD && cpu_family < 0x11) { /* XXX */
+ const uint64_t reg = rdmsr(MSR_NB_CFG);
+ if ((reg & NB_CFG_INITAPICCPUIDLO) == 0) {
+ /*
+ * 0xf: { CoreId, NodeId[2:0] }
+ * 0x10: { CoreId[1:0], 000b, NodeId[2:0] }
+ */
+ const u_int node_id = apic_id & __BITS(0, 2);
+ apic_id = (cpu_family == 0xf) ?
+ (apic_id >> core_bits) | (node_id << core_bits) :
+ (apic_id >> 5) | (node_id << 2);
+ }
+ }
+
if (smt_bits + core_bits) {
- ci->ci_packageid = ci->ci_initapicid >> (smt_bits + core_bits);
+ ci->ci_packageid = apic_id >> (smt_bits + core_bits);
}
if (core_bits) {
u_int core_mask = __BITS(smt_bits, smt_bits + core_bits - 1);
- ci->ci_coreid = __SHIFTOUT(ci->ci_initapicid, core_mask);
+ ci->ci_coreid = __SHIFTOUT(apic_id, core_mask);
}
if (smt_bits) {
u_int smt_mask = __BITS(0, smt_bits - 1);
- ci->ci_smtid = __SHIFTOUT(ci->ci_initapicid, smt_mask);
+ ci->ci_smtid = __SHIFTOUT(apic_id, smt_mask);
}
}
Index: src/sys/arch/x86/x86/ioapic.c
diff -u src/sys/arch/x86/x86/ioapic.c:1.38.10.1 src/sys/arch/x86/x86/ioapic.c:1.38.10.2
--- src/sys/arch/x86/x86/ioapic.c:1.38.10.1 Wed May 13 17:18:45 2009
+++ src/sys/arch/x86/x86/ioapic.c Sun May 31 14:32:34 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: ioapic.c,v 1.38.10.1 2009/05/13 17:18:45 jym Exp $ */
+/* $NetBSD: ioapic.c,v 1.38.10.2 2009/05/31 14:32:34 jym Exp $ */
/*-
* Copyright (c) 2000, 2009 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ioapic.c,v 1.38.10.1 2009/05/13 17:18:45 jym Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ioapic.c,v 1.38.10.2 2009/05/31 14:32:34 jym Exp $");
#include "opt_ddb.h"
@@ -409,14 +409,15 @@
pp = &sc->sc_pins[pin];
map = pp->ip_map;
redlo = map == NULL ? IOAPIC_REDLO_MASK : map->redir;
+ redhi = 0;
delmode = (redlo & IOAPIC_REDLO_DEL_MASK) >> IOAPIC_REDLO_DEL_SHIFT;
- redhi = (ci->ci_cpuid << IOAPIC_REDHI_DEST_SHIFT);
if (delmode == IOAPIC_REDLO_DEL_FIXED ||
delmode == IOAPIC_REDLO_DEL_LOPRI) {
if (pp->ip_type == IST_NONE) {
redlo |= IOAPIC_REDLO_MASK;
} else {
+ redhi = (ci->ci_cpuid << IOAPIC_REDHI_DEST_SHIFT);
redlo |= (idt_vec & 0xff);
redlo |= (IOAPIC_REDLO_DEL_FIXED<<IOAPIC_REDLO_DEL_SHIFT);
redlo &= ~IOAPIC_REDLO_DSTMOD;
Index: src/sys/arch/x86/x86/sys_machdep.c
diff -u src/sys/arch/x86/x86/sys_machdep.c:1.16.4.1 src/sys/arch/x86/x86/sys_machdep.c:1.16.4.2
--- src/sys/arch/x86/x86/sys_machdep.c:1.16.4.1 Wed May 13 17:18:45 2009
+++ src/sys/arch/x86/x86/sys_machdep.c Sun May 31 14:32:34 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: sys_machdep.c,v 1.16.4.1 2009/05/13 17:18:45 jym Exp $ */
+/* $NetBSD: sys_machdep.c,v 1.16.4.2 2009/05/31 14:32:34 jym Exp $ */
/*-
* Copyright (c) 1998, 2007, 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_machdep.c,v 1.16.4.1 2009/05/13 17:18:45 jym Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_machdep.c,v 1.16.4.2 2009/05/31 14:32:34 jym Exp $");
#include "opt_mtrr.h"
#include "opt_perfctrs.h"
@@ -591,7 +591,7 @@
x86_set_sdbase(void *arg, char which, lwp_t *l, bool direct)
{
#ifdef i386
- struct segment_descriptor sd;
+ union descriptor usd;
struct pcb *pcb;
vaddr_t base;
int error;
@@ -604,28 +604,30 @@
return error;
}
- sd.sd_lobase = base & 0xffffff;
- sd.sd_hibase = (base >> 24) & 0xff;
- sd.sd_lolimit = 0xffff;
- sd.sd_hilimit = 0xf;
- sd.sd_type = SDT_MEMRWA;
- sd.sd_dpl = SEL_UPL;
- sd.sd_p = 1;
- sd.sd_xx = 0;
- sd.sd_def32 = 1;
- sd.sd_gran = 1;
+ usd.sd.sd_lobase = base & 0xffffff;
+ usd.sd.sd_hibase = (base >> 24) & 0xff;
+ usd.sd.sd_lolimit = 0xffff;
+ usd.sd.sd_hilimit = 0xf;
+ usd.sd.sd_type = SDT_MEMRWA;
+ usd.sd.sd_dpl = SEL_UPL;
+ usd.sd.sd_p = 1;
+ usd.sd.sd_xx = 0;
+ usd.sd.sd_def32 = 1;
+ usd.sd.sd_gran = 1;
kpreempt_disable();
pcb = &l->l_addr->u_pcb;
if (which == 'f') {
- memcpy(&pcb->pcb_fsd, &sd, sizeof(sd));
+ memcpy(&pcb->pcb_fsd, &usd.sd,
+ sizeof(struct segment_descriptor));
if (l == curlwp) {
- memcpy(&curcpu()->ci_gdt[GUFS_SEL], &sd, sizeof(sd));
+ update_descriptor(&curcpu()->ci_gdt[GUFS_SEL], &usd);
}
} else /* which == 'g' */ {
- memcpy(&pcb->pcb_gsd, &sd, sizeof(sd));
+ memcpy(&pcb->pcb_gsd, &usd.sd,
+ sizeof(struct segment_descriptor));
if (l == curlwp) {
- memcpy(&curcpu()->ci_gdt[GUGS_SEL], &sd, sizeof(sd));
+ update_descriptor(&curcpu()->ci_gdt[GUGS_SEL], &usd);
}
}
kpreempt_enable();
Index: src/sys/arch/xen/Makefile
diff -u src/sys/arch/xen/Makefile:1.5 src/sys/arch/xen/Makefile:1.5.8.1
--- src/sys/arch/xen/Makefile:1.5 Sat Oct 25 22:27:38 2008
+++ src/sys/arch/xen/Makefile Sun May 31 14:32:34 2009
@@ -1,4 +1,6 @@
-# $NetBSD: Makefile,v 1.5 2008/10/25 22:27:38 apb Exp $
+# $NetBSD: Makefile,v 1.5.8.1 2009/05/31 14:32:34 jym Exp $
+
+.include <bsd.own.mk>
# Makefile for xen tags file
@@ -20,8 +22,9 @@
DXEN= xen ${XEN_MACHINE_ARCHS} include
tags:
- rm -f ${TXEN}
- -echo ${SXEN} ${COMM} | xargs ctags -wadtf ${TXEN}
+ -rm -f ${TXEN}
+ -echo ${SXEN} | xargs ctags -wadtf ${TXEN}
+ ${FINDCOMM} | xargs ctags -wadtf ${TXEN}
egrep "^ENTRY(.*)|^ALTENTRY(.*)" ${AXEN} | \
${TOOL_SED} -e \
"s;\([^:]*\):\([^(]*\)(\([^, )]*\)\(.*\);\3 \1 /^\2(\3\4$$/;" \