All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Tom Lendacky <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: thomas.lendacky@amd.com, hpa@zytor.com, konrad.wilk@oracle.com,
	riel@redhat.com, brijesh.singh@amd.com, rkrcmar@redhat.com,
	dvyukov@google.com, peterz@infradead.org, dyoung@redhat.com,
	arnd@arndb.de, bp@alien8.de, mst@redhat.com,
	linux-kernel@vger.kernel.org, matt@codeblueprint.co.uk,
	torvalds@linux-foundation.org, aryabinin@virtuozzo.com,
	corbet@lwn.net, toshi.kani@hpe.com, luto@kernel.org,
	pbonzini@redhat.com, glider@google.com, mingo@kernel.org,
	lwoodman@redhat.com, tglx@linutronix.de
Subject: [tip:x86/mm] x86/cpu/AMD: Add the Secure Memory Encryption CPU feature
Date: Tue, 18 Jul 2017 03:48:37 -0700	[thread overview]
Message-ID: <tip-872cbefd2d9c52bd0b1e2c7942c4369e98a5a5ae@git.kernel.org> (raw)
In-Reply-To: <85c17ff450721abccddc95e611ae8df3f4d9718b.1500319216.git.thomas.lendacky@amd.com>

Commit-ID:  872cbefd2d9c52bd0b1e2c7942c4369e98a5a5ae
Gitweb:     http://git.kernel.org/tip/872cbefd2d9c52bd0b1e2c7942c4369e98a5a5ae
Author:     Tom Lendacky <thomas.lendacky@amd.com>
AuthorDate: Mon, 17 Jul 2017 16:10:01 -0500
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 18 Jul 2017 11:37:59 +0200

x86/cpu/AMD: Add the Secure Memory Encryption CPU feature

Update the CPU features to include identifying and reporting on the
Secure Memory Encryption (SME) feature.  SME is identified by CPUID
0x8000001f, but requires BIOS support to enable it (set bit 23 of
MSR_K8_SYSCFG).  Only show the SME feature as available if reported by
CPUID, enabled by BIOS and not configured as CONFIG_X86_32=y.

Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Alexander Potapenko <glider@google.com>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brijesh Singh <brijesh.singh@amd.com>
Cc: Dave Young <dyoung@redhat.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Larry Woodman <lwoodman@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Matt Fleming <matt@codeblueprint.co.uk>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Toshimitsu Kani <toshi.kani@hpe.com>
Cc: kasan-dev@googlegroups.com
Cc: kvm@vger.kernel.org
Cc: linux-arch@vger.kernel.org
Cc: linux-doc@vger.kernel.org
Cc: linux-efi@vger.kernel.org
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/85c17ff450721abccddc95e611ae8df3f4d9718b.1500319216.git.thomas.lendacky@amd.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/include/asm/cpufeatures.h |  1 +
 arch/x86/include/asm/msr-index.h   |  2 ++
 arch/x86/kernel/cpu/amd.c          | 19 +++++++++++++++++++
 arch/x86/kernel/cpu/scattered.c    |  1 +
 4 files changed, 23 insertions(+)

diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
index ca3c48c..14f0f29 100644
--- a/arch/x86/include/asm/cpufeatures.h
+++ b/arch/x86/include/asm/cpufeatures.h
@@ -196,6 +196,7 @@
 
 #define X86_FEATURE_HW_PSTATE	( 7*32+ 8) /* AMD HW-PState */
 #define X86_FEATURE_PROC_FEEDBACK ( 7*32+ 9) /* AMD ProcFeedbackInterface */
+#define X86_FEATURE_SME		( 7*32+10) /* AMD Secure Memory Encryption */
 
 #define X86_FEATURE_INTEL_PPIN	( 7*32+14) /* Intel Processor Inventory Number */
 #define X86_FEATURE_INTEL_PT	( 7*32+15) /* Intel Processor Trace */
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
index 5573c75..17f5c12 100644
--- a/arch/x86/include/asm/msr-index.h
+++ b/arch/x86/include/asm/msr-index.h
@@ -356,6 +356,8 @@
 #define MSR_K8_TOP_MEM1			0xc001001a
 #define MSR_K8_TOP_MEM2			0xc001001d
 #define MSR_K8_SYSCFG			0xc0010010
+#define MSR_K8_SYSCFG_MEM_ENCRYPT_BIT	23
+#define MSR_K8_SYSCFG_MEM_ENCRYPT	BIT_ULL(MSR_K8_SYSCFG_MEM_ENCRYPT_BIT)
 #define MSR_K8_INT_PENDING_MSG		0xc0010055
 /* C1E active bits in int pending message */
 #define K8_INTP_C1E_ACTIVE_MASK		0x18000000
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index bb5abe8..5ccc7b2 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -611,6 +611,25 @@ static void early_init_amd(struct cpuinfo_x86 *c)
 	 */
 	if (cpu_has_amd_erratum(c, amd_erratum_400))
 		set_cpu_bug(c, X86_BUG_AMD_E400);
+
+	/*
+	 * BIOS support is required for SME. If BIOS has not enabled SME
+	 * then don't advertise the feature (set in scattered.c). Also,
+	 * since the SME support requires long mode, don't advertise the
+	 * feature under CONFIG_X86_32.
+	 */
+	if (cpu_has(c, X86_FEATURE_SME)) {
+		if (IS_ENABLED(CONFIG_X86_32)) {
+			clear_cpu_cap(c, X86_FEATURE_SME);
+		} else {
+			u64 msr;
+
+			/* Check if SME is enabled */
+			rdmsrl(MSR_K8_SYSCFG, msr);
+			if (!(msr & MSR_K8_SYSCFG_MEM_ENCRYPT))
+				clear_cpu_cap(c, X86_FEATURE_SME);
+		}
+	}
 }
 
 static void init_amd_k8(struct cpuinfo_x86 *c)
diff --git a/arch/x86/kernel/cpu/scattered.c b/arch/x86/kernel/cpu/scattered.c
index 23c2350..05459ad 100644
--- a/arch/x86/kernel/cpu/scattered.c
+++ b/arch/x86/kernel/cpu/scattered.c
@@ -31,6 +31,7 @@ static const struct cpuid_bit cpuid_bits[] = {
 	{ X86_FEATURE_HW_PSTATE,	CPUID_EDX,  7, 0x80000007, 0 },
 	{ X86_FEATURE_CPB,		CPUID_EDX,  9, 0x80000007, 0 },
 	{ X86_FEATURE_PROC_FEEDBACK,    CPUID_EDX, 11, 0x80000007, 0 },
+	{ X86_FEATURE_SME,		CPUID_EAX,  0, 0x8000001f, 0 },
 	{ 0, 0, 0, 0, 0 }
 };
 

  reply	other threads:[~2017-07-18 10:56 UTC|newest]

Thread overview: 163+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-17 21:09 [PATCH v10 00/38] x86: Secure Memory Encryption (AMD) Tom Lendacky
2017-07-17 21:09 ` Tom Lendacky
2017-07-17 21:09 ` Tom Lendacky
2017-07-17 21:09 ` Tom Lendacky
2017-07-17 21:09 ` [PATCH v10 01/38] x86: Document AMD Secure Memory Encryption (SME) Tom Lendacky
2017-07-17 21:09   ` Tom Lendacky
2017-07-18 10:47   ` [tip:x86/mm] x86/cpu/AMD: " tip-bot for Tom Lendacky
2017-07-17 21:09 ` [PATCH v10 02/38] x86/mm/pat: Set write-protect cache mode for full PAT support Tom Lendacky
2017-07-17 21:09   ` Tom Lendacky
2017-07-18 10:47   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 03/38] x86, mpparse, x86/acpi, x86/PCI, x86/dmi, SFI: Use memremap for RAM mappings Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:48   ` [tip:x86/mm] x86, mpparse, x86/acpi, x86/PCI, x86/dmi, SFI: Use memremap() " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 04/38] x86/CPU/AMD: Add the Secure Memory Encryption CPU feature Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:48   ` tip-bot for Tom Lendacky [this message]
2017-07-17 21:10 ` [PATCH v10 05/38] x86/CPU/AMD: Handle SME reduction in physical address size Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:48   ` [tip:x86/mm] x86/cpu/AMD: " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 06/38] x86/mm: Add Secure Memory Encryption (SME) support Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:49   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 07/38] x86/mm: Remove phys_to_virt() usage in ioremap() Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:49   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 08/38] x86/mm: Add support to enable SME in early boot processing Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:50   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 09/38] x86/mm: Simplify p[g4um]d_page() macros Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:50   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 10/38] x86/mm: Provide general kernel support for memory encryption Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:50   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 11/38] x86/mm: Add SME support for read_cr3_pa() Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:51   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 12/38] x86/mm: Extend early_memremap() support with additional attrs Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:51   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 13/38] x86/mm: Add support for early encrypt/decrypt of memory Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:51   ` [tip:x86/mm] x86/mm: Add support for early encryption/decryption " tip-bot for Tom Lendacky
2017-10-25 17:34     ` Dave Hansen
2017-10-26 13:05       ` Tom Lendacky
2017-10-26 14:08         ` Dave Hansen
2017-07-17 21:10 ` [PATCH v10 14/38] x86/mm: Insure that boot memory areas are mapped properly Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:52   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 15/38] x86/boot/e820: Add support to determine the E820 type of an address Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:52   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 16/38] efi: Add an EFI table address match function Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:53   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 17/38] efi: Update efi_mem_type() to return an error rather than 0 Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:53   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 18/38] x86/efi: Update EFI pagetable creation to work with SME Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:53   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 19/38] x86/mm: Add support to access boot related data in the clear Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:54   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 20/38] x86, mpparse: Use memremap to map the mpf and mpc data Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:54   ` [tip:x86/mm] x86/boot: Use memremap() to map the MPF and MPC data tip-bot for Tom Lendacky
2017-07-20  9:23     ` [PATCH] x86/boot: Fix memremap() related build failure Ingo Molnar
2017-07-20 10:27       ` [tip:x86/mm] " tip-bot for Ingo Molnar
2017-11-03 15:12   ` [PATCH v10 20/38] x86, mpparse: Use memremap to map the mpf and mpc data Tomeu Vizoso
2017-11-03 15:12     ` Tomeu Vizoso
2017-11-03 15:12     ` Tomeu Vizoso
2017-11-03 15:31     ` Tom Lendacky
2017-11-03 15:31       ` Tom Lendacky
2017-11-03 15:31       ` Tom Lendacky
2017-11-06  7:13       ` Tomeu Vizoso
2017-11-06  7:13         ` Tomeu Vizoso
2017-11-06  7:13         ` Tomeu Vizoso
2017-07-17 21:10 ` [PATCH v10 21/38] x86/mm: Add support to access persistent memory in the clear Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:54   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 22/38] x86/mm: Add support for changing the memory encryption attribute Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:55   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 23/38] x86/realmode: Decrypt trampoline area if memory encryption is active Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:55   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 24/38] x86, swiotlb: Add memory encryption support Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:56   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 25/38] swiotlb: Add warnings for use of bounce buffers with SME Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:56   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 26/38] x86/CPU/AMD: Make the microcode level available earlier in the boot Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:56   ` [tip:x86/mm] x86/cpu/AMD: " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 27/38] iommu/amd: Allow the AMD IOMMU to work with memory encryption Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:57   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-18 10:57     ` tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 28/38] x86, realmode: Check for memory encryption on the APs Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:57   ` [tip:x86/mm] x86/boot/realmode: " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 29/38] x86, drm, fbdev: Do not specify encrypted memory for video mappings Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:57   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 30/38] kvm: x86: svm: Support Secure Memory Encryption within KVM Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:58   ` [tip:x86/mm] kvm/x86/svm: " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 31/38] x86/mm, kexec: Allow kexec to be used with SME Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:58   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-18 10:58     ` tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 32/38] xen/x86: Remove SME feature in PV guests Tom Lendacky
2017-07-17 21:10 ` Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:58   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-18 10:58     ` tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 33/38] x86/mm: Use proper encryption attributes with /dev/mem Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:59   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 34/38] x86/mm: Create native_make_p4d() for PGTABLE_LEVELS <= 4 Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 10:59   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 35/38] x86/mm: Add support to encrypt the kernel in-place Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 11:00   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 36/38] x86/boot: Add early cmdline parsing for options with arguments Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 11:00   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 37/38] compiler-gcc.h: Introduce __nostackp function attribute Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18  9:36   ` Ingo Molnar
2017-07-18  9:36     ` Ingo Molnar
2017-07-18  9:36     ` Ingo Molnar
2017-07-18 13:56     ` Tom Lendacky
2017-07-18 13:56       ` Tom Lendacky
2017-07-18 13:56       ` Tom Lendacky
2017-07-18 11:00   ` [tip:x86/mm] compiler-gcc.h: Introduce __nostackprotector " tip-bot for Tom Lendacky
2017-07-18 18:27   ` tip-bot for Tom Lendacky
2017-07-17 21:10 ` [PATCH v10 38/38] x86/mm: Add support to make use of Secure Memory Encryption Tom Lendacky
2017-07-17 21:10   ` Tom Lendacky
2017-07-18 11:01   ` [tip:x86/mm] " tip-bot for Tom Lendacky
2017-07-18 18:28   ` tip-bot for Tom Lendacky
2017-07-18 12:03 ` [PATCH v10 00/38] x86: Secure Memory Encryption (AMD) Thomas Gleixner
2017-07-18 12:03   ` Thomas Gleixner
2017-07-18 12:03   ` Thomas Gleixner
2017-07-18 12:03   ` Thomas Gleixner
2017-07-18 14:02   ` Tom Lendacky
2017-07-18 14:02   ` Tom Lendacky
2017-07-18 14:02     ` Tom Lendacky
2017-07-18 14:02     ` Tom Lendacky
2017-07-18 14:02     ` Tom Lendacky
2017-07-18 12:03 ` Thomas Gleixner

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=tip-872cbefd2d9c52bd0b1e2c7942c4369e98a5a5ae@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=arnd@arndb.de \
    --cc=aryabinin@virtuozzo.com \
    --cc=bp@alien8.de \
    --cc=brijesh.singh@amd.com \
    --cc=corbet@lwn.net \
    --cc=dvyukov@google.com \
    --cc=dyoung@redhat.com \
    --cc=glider@google.com \
    --cc=hpa@zytor.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=lwoodman@redhat.com \
    --cc=matt@codeblueprint.co.uk \
    --cc=mingo@kernel.org \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=riel@redhat.com \
    --cc=rkrcmar@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=thomas.lendacky@amd.com \
    --cc=torvalds@linux-foundation.org \
    --cc=toshi.kani@hpe.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.